Open honglewis opened 3 years ago
calculateSwapFromBase
function does not count any slippageswapFromBase
function: minDy
must consider slippage so it cannot be exactly as the return in calculateSwapFromBase
calculateSwapFromBase
function does not count any slippageswapFromBase
function:minDy
must consider slippage so it cannot be exactly as the return incalculateSwapFromBase
From the example above, no other transactions affect the pool, so the calculated result should equal the real amount from require(dy >= minOutAmount, "> slippage");
in the swap function.
Is that LpToken received from baseAddLiquidity will less than the result returned from the calculateTokenAmount
function? Just a guess
To reproduct the bug, please do as following steps :
First, try to call calculateSwapFromBase with following parameters: pool = 0x008db1Cef0958e7f87A107b58F0dede796ce7962 (BUSD meta pool address) basePool = 0xb578a396e56388CbF398a12Dea9eb6B01b7c777f (USDC/USDT/DAI base pool address) tokenIndexFrom = 0 (USDC index) tokenIndexTo = 0 (BUSD index) dx = 1000000000 (1000 USDC)
Get return value as 998604422682132896156 . This means : due to the calculateSwapFromBase call response, 1000 USDC can be converted to about 998.6 BUSD
Second, build swapFromBase transaction with following parameters: pool = 0x008db1Cef0958e7f87A107b58F0dede796ce7962 (BUSD meta pool address) basePool = 0xb578a396e56388CbF398a12Dea9eb6B01b7c777f (USDC/USDT/DAI base pool address) tokenIndexFrom = 0 (USDC index) tokenIndexTo = 0 (BUSD index) dx = 1000000000 (1000 USDC)
minDy = 998604422682132896156 (value returned by calculateSwapFromBase) deadLine = 1633077775 (current time + 5 minutes)
It will always yield exception: {'code': -32603, 'message': 'VM Exception while processing transaction: revert > slippage', 'data': '08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a3e20736c69707061676500000000000000000000000000000000000000000000'}
It seems that the minDy value returned by calculateSwapFromBase is incorrect, which is bigger than the real amount which can be converted by swapFromBase.
Testing python code can be found below :
Test Output: