Uniswap

可以手動移除流動性,但不能使用 removeLiquidityETH,我做錯了什麼?

  • April 11, 2022

我正在使用ganache/開發令牌brownie。正如標題所說,如果我嘗試並使用removeLiquidityETH來測試移除流動性代幣,例如像這樣

pair.approve(pair_address, lp_balance, {'from':accounts[0]})

router.removeLiquidityETH(my_token.address,lp_balance, 0,0, accounts[0], int(time.time())+60, {'from': accounts[0]})

然後我得到一個錯誤 IUniswapV2Router02.removeLiquidityETH confirmed (ds-math-sub-underflow)

我沒有看到 ETH 回來了accounts[0]

但是,看看removeLiquidityETH我可以手動實現每個步驟的工作原理

pair.approve(pair_address, lp_balance, {'from':accounts[0]})

pair.transferFrom(accounts[0], pair_address, lp_balance, {'from': pair_address})

tx = pair.burn(accounts[0], {'from': pair_address})
   
interface.IWETH(router.WETH()).withdraw(tx.events['Burn']['amount1'], {'from':accounts[0]})

一切都按預期工作,我的ETH餘額MyToken被轉移回accounts[0].

我認為錯誤在某處approve或事務參數中{'from'},但我已經嘗試了我能想到的所有組合pair.approve router.approve,並且my_token.approve我仍然得到相同的錯誤。

有沒有人有一個如何removeLiquidityETH正確使用的例子?我沒有任何問題,addLiquidityETH我只是MyToken習慣於消費。approve``router

文件

msg.sender 應該已經給路由器至少在池中的流動性允許。

您似乎沒有為router使用流動性代幣提供津貼。

我假設這accounts[0]是持有 LP 代幣的地址。問題似乎是您正在批准配對合約作為 LP 代幣的支出者,而您應該批准路由器作為支出者。

替換這個:

pair.approve(pair_address, balance, {'from':accounts[0]})

這樣:

pair.approve(router_address, lp_balance, {'from':accounts[0]})

引用自:https://ethereum.stackexchange.com/questions/102687