package math import ( "math/big" ) // MockGasEstimator implements GasEstimator for testing purposes type MockGasEstimator struct { currentGasPrice *UniversalDecimal } // NewMockGasEstimator creates a new mock gas estimator func NewMockGasEstimator() *MockGasEstimator { dc := NewDecimalConverter() gasPrice, _ := dc.FromString("20", 9, "GWEI") // 20 gwei default return &MockGasEstimator{ currentGasPrice: gasPrice, } } // EstimateSwapGas estimates gas for a swap func (mge *MockGasEstimator) EstimateSwapGas(exchange string, poolData *PoolData) (uint64, error) { // Different exchanges have different gas costs switch exchange { case "uniswap_v3": return 150000, nil // 150k gas for Uniswap V3 case "uniswap_v2", "sushiswap": return 120000, nil // 120k gas for Uniswap V2/SushiSwap case "camelot": return 130000, nil // 130k gas for Camelot case "balancer": return 200000, nil // 200k gas for Balancer case "curve": return 180000, nil // 180k gas for Curve default: return 150000, nil // Default to 150k gas } } // EstimateFlashSwapGas estimates gas for a flash swap func (mge *MockGasEstimator) EstimateFlashSwapGas(route []*PoolData) (uint64, error) { // Flash swap overhead varies by complexity baseGas := uint64(200000) // Base flash swap overhead // Add gas for each hop hopGas := uint64(len(route)) * 50000 return baseGas + hopGas, nil } // GetCurrentGasPrice gets the current gas price func (mge *MockGasEstimator) GetCurrentGasPrice() (*UniversalDecimal, error) { return mge.currentGasPrice, nil } // SetCurrentGasPrice sets the current gas price for testing func (mge *MockGasEstimator) SetCurrentGasPrice(gasPriceGwei int64) { dc := NewDecimalConverter() gasPrice, _ := dc.FromString(big.NewInt(gasPriceGwei).String(), 9, "GWEI") mge.currentGasPrice = gasPrice }