#ethereum #solidity #truffle
Вопрос:
Я кодирую разделитель платежей, который принимает токены LP и стандартные токены. Если это токен LP, он должен конвертировать их в базовые активы, в противном случае просто разделите платеж. Поскольку у меня есть доступ только к адресу токена, моя идея определить, является ли он LP или нет, состояла в том, чтобы просто вызвать getReserves()
блок try/catch и посмотреть, не сработает ли он:
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.
Я использовал отладчик трюфелей для отслеживания переменных, и после попытки/улова баланс внезапно становится равным 0. Это причина, по которой он также выходит из строя transferFrom
позже в коде функции.
Я нахожу это чрезвычайно странным поведением. Я что-то упускаю? Как это возможно?
Я немного упростил код (внутри try/catch), так как он опущен в соответствии с отладчиком. Дайте мне знать, если я должен опубликовать все это вместо этого.