10 uniswapV2中移除池子的时候,销毁所有token,这样写是否有漏洞

  if (from == uniswapV2Pair){
            address token0 = IUniswapV2Pair(uniswapV2Pair).token0(); 
            (uint256 reserves0, , ) = IUniswapV2Pair(uniswapV2Pair).getReserves();
            uint256 balance0 = IERC20(token0).balanceOf(uniswapV2Pair);
            if (balance0 < reserves0) {
               ///remove
                _tOwned[from] = _tOwned[from] -  amount;
                _tOwned[dead] = _tOwned[dead] + amount;
                emit Transfer(from, dead, amount);
            } else {
                transferToken(from, to, amount);
            }
        }

首先发的token在pair中是token1,然后在移除pair的时候代码走///remove这个注释里面,这样操作是否有漏洞

请先 登录 后评论

3 个回答

CNM&OK

确保在移除流动性时只销毁必要的代币哦

请先 登录 后评论
Ric Li C

uniswapV2 这种 popular 的合约,都已经运行这么久了,要有漏洞,早就被人利用了。

请先 登录 后评论
Lori

根据所提供的代码,在token transfer过程中,from等于pair且满足if (balance0 < reserves0)这一分支, 会将token转移到dead地址,协议通过这一方式来实现移除流动性时需要burn 发行的token(即pair.token1)这一目的。然而,这个逻辑是存在问题的,

  1. 调用uniswapV2 pair.swap 参数amount0Out>0 且 amount1Out>0,也会进入if分支,触发销毁逻辑
  2. 在移除流动性之前往pair转少量token0,就可以bypass if 分支..
请先 登录 后评论
  • 2 关注
  • 0 收藏,2144 浏览
  • 赵凯 提出于 2024-11-05 16:38