У меня есть контракт, по которому пользователи могут торговать на DEX.
Примерно так:
// transfer asset A from msg.sender
ERC20(AToken).transferFrom(msg.sender, address(this), amount);
// do trade A to B
... trade logic here
// get balance of asset B after trade
// asset B after trade gets to this contract address
uint256 returnAmount = ERC20(BToken).balanceOf(address(this));
// transfer asset B to msg.sender
ERC20(BToken).transfer(msg.sender, returnAmount);
Интересно насчет returnAmount, безопасен ли этот лог c?
Транзакции в ethereum выполняются либо полностью, либо не выполняются вообще, а также в порядке приоритета.
Но мне все еще интересно, может ли быть такой случай, когда returnAmount показывает неправильно, например, контракт получить баланс после транзакции другого пользователя?