Uniswap
可以手動移除流動性,但不能使用 removeLiquidityETH,我做錯了什麼?
我正在使用
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]})