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();

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0xweb3q

有钱的捧个钱场,没钱的捧个人场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值