В
Account-модели средства учитываются через балансы и состояние аккаунтов. Аналогия с банковским счётом здесь ближе, чем с купюрами: при обычном переводе ETH баланс отправителя уменьшается, а получателя увеличивается. Понятия сдачи нет.
При этом балансы токенов, например USDT, учитываются в соответствующих смарт-контрактах.
Главная сложность в другом: одна транзакция может запустить несколько действий. Например, отправить токен в обменный пул, получить другой токен и распределить комиссию.
Поэтому при работе с Ethereum и другими сетями, совместимыми с EVM, полезно проверять три уровня.
1. Внешняя транзакция: что было отправлено на исполнениеЗдесь видны отправитель, адрес назначения, передаваемое количество ETH и данные команды.
Поле
to может содержать адрес контракта, которому поручено выполнить действие. Это не обязательно адрес конечного получателя денег. А поле
value показывает количество передаваемого ETH, без комиссии, а не стоимость всех активов внутри операции. Эти поля описаны в
документации Ethereum.
2. Внутренние вызовы: что произошло при исполненииКонтракт может обратиться к другим контрактам и отправить ETH. Такие действия возникают внутри исходной транзакции, без отдельных подписанных транзакций от пользователя.
Обозреватели часто показывают часть этих действий в разделе
Internal Transactions. Более подробную последовательность вызовов можно увидеть в трассировке исполнения. При этом вызов контракта не обязательно сопровождается переводом средств.
Практический смысл: если транзакция направлена в контракт, проверка не заканчивается на его адресе. Нужно понять, какие действия он выполнил и куда фактически отправил активы.
3. События контрактов: какие действия записаны в журналEvents, или события - записи, которые контракт создаёт во время работы. Например, событие Transfer у ERC-20-токена содержит адрес отправителя, адрес получателя и сумму. На основе таких записей обозреватели формируют список переводов токенов.
Но название токена само по себе ничего не подтверждает. Проверяйте сеть и адрес его контракта: посторонний токен тоже может называться USDT, с такими фальшивками мы встречаемся крайне часто.
Три уровня - это три способа изучить одну операцию. Они не означают, что в каждой транзакции обязательно есть внутренний перевод ETH и перевод токенов.