本文主要是介绍Solidity Uniswap V2 router contract Liquidity removal,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
router合约是一种高级合约,能让用户与 Uniswap 的交互变得更简单。因此,它的函数可以执行多个操作,而 pair 合约中的函数只能执行一个核心操作。除此之外,Router 的函数是通用的--它们可以用于与任何pair进行交互。
GitHub - XuHugo/solidityproject: DApp go go go !!!
因此,我们需要这样一个函数
1、抽象pair--用户操作token而非pair。
2、将用户的 LP-token转移到pair合约中。用户需要能够选择金额。
3、从pair中移除用户的流动性。
4、保护用户免受滑点影响。流动性移除也受滑点影响--请查看配对合约中的 testBurnUnbalancedDifferentUsers 测试。
function removeLiquidity(address tokenA,address tokenB,uint256 liquidity,uint256 amountAMin,uint256 amountBMin,address to) public returns (uint256 amountA, uint256 amountB) {...
1、tokenA 和 tokenB 是pair的两个地址。由于用户使用token进行操作,因此无需指定pair地址。
2、liquidity 是要销毁的 LP-token数量。
3、amountAMin、amountBMin 是我们在销毁 LP-token时希望获得的token A 和token B 的最小数量。正是这些参数保护了我们免受损失。
4、to - 接收代币的地址。
第一步是找到pair:
address pair = ZuniswapV2Library.pairFor(address(factory),tokenA,tokenB);
下一步:将 LP-token发送给pair,并销毁他。
IZuniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity);(amountA, amountB) = IZuniswapV2Pair(pair).burn(to);
最后,我们会检查退回的金额是否在用户选择的可容忍误差范围内。
if (amountA < amountAMin) revert InsufficientAAmount();if (amountB < amountBMin) revert InsufficientBAmount();
这篇关于Solidity Uniswap V2 router contract Liquidity removal的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!