ERC-20 Token 的余额在 try/catch 块中突然变为 0

时间:2021-07-24 02:21:02

标签: ethereum solidity truffle

我正在编写一个可以接受 LP 代币和标准代币的 Paymentsplitter。如果是 LP 代币,则需要将其转换为基础资产,否则只需拆分付款。由于我只能访问令牌的地址,因此我确定它是否是 LP 的想法是在 try/catch 块上调用 getReserves() 并查看它是否失败:

function receiveTokensAndDistributeEth(uint256 amount, address token) external override {
    require(amount > 0, "Distribution: Amount must be greater than 0");
    
    address WETH = router.WETH();
    IERC20(token).transferFrom(address(msg.sender), address(this), amount);
    IERC20(token).approve(address(router), amount);

    uint balanceBefore = IERC20(token).balanceOf(address(this)); // Truffle debugger says it's 10

    // Check if token is LP
    try IUniswapV2Pair(token).getReserves() {
        // Remove liquidity code
    } catch {
        uint balanceAfter = IERC20(token).balanceOf(address(this)); // Now it's 0 according to truffle?!
    }
}

我用 LP 代币调用它,效果很好,流动性被移除了。但问题是当我尝试接收诸如 USDT 之类的东西时。

我使用 truffle 调试器来跟踪变量,在 try/catch 之后,余额突然设置为 0。这就是它在 transferFrom 后面的函数代码中也失败的原因。

我发现这种非常奇怪的行为。我错过了什么吗?这怎么可能?

我稍微简化了代码(在 try/catch 中),因为它根据调试器被省略了。让我知道我是否应该发布整个内容。

0 个答案:

没有答案