我正在编写一个可以接受 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 中),因为它根据调试器被省略了。让我知道我是否应该发布整个内容。