100 限制用户卖出币的数量,同时加池子不受影响

限制每个账户每天只能卖出一次最多只能卖出五个币包括转账 同时加池子数量不受限制影响。 这段代码如何写呢?

请先 登录 后评论

最佳答案 2022-04-22 17:03

tokenA:自己发行的token tokenB:配对的token

对token而言,只有从from 到 to 地址 多少数量

正常通过from to 来判断只能判断出代币去了pair

而这个to = address(pair) 包含了卖出和添加流动性

但是

添加流动性 和 卖出 有个区别,就是添加流动性时 tokenB的数量是会增加的

所以我们可以利用这点来判断(判断前提是用户在前端页面添加流动性的时候 tokenB 在 tokenA前面)

// 判断注池
if(to == address(uniswapV2Pair)){
    (uint reserve0, uint reserve1, ) = IUniswapV2Pair(uniswapV2Pair).getReserves();
    if(address(this) == IUniswapV2Pair(uniswapV2Pair).token0() && IERC20(tokenB).balanceOf(uniswapV2Pair) != reserve1){
        takeFee = false;
    }
    if(address(this) == IUniswapV2Pair(uniswapV2Pair).token1() && IERC20(tokenB).balanceOf(uniswapV2Pair) != reserve0){
        takeFee = false;
    }
}

IUniswapV2Pair(uniswapV2Pair).getReserves() 获取的是上一次swap之后,tokenA和tokenB的数量

在满足这个添加的i情况下: 用户在前端页面添加流动性的时候 tokenB 在 tokenA前面

判断pair种tokenB的余额 是否 等于getReserves()中对应tokenB的数量来判断是卖出还是添加流动性

因为在添加流动性的时候,tokenB的数量变多了

请先 登录 后评论

其它 4 个回答

adeceitz
请先 登录 后评论
zen
请先 登录 后评论
Tiny熊 - 布道者
  擅长:智能合约,以太坊
请先 登录 后评论
Verin
请先 登录 后评论