Как узнать результат исполнения транзакции Ethereum по квитанции
Зная хеш транзакции, можно запросить её квитанцию. В ней записаны блок включения и результат исполнения транзакции на верхнем уровне.
Запросите квитанцию по хешу транзакции
Запишите в TX полный хеш транзакции с префиксом 0x, а в RPC_URL — адрес HTTP RPC нужной сети. Результатом будет null, объект квитанции либо ошибка JSON-RPC. При диагностике ноды или шлюза сохраните ошибку целиком.
curl -sS -H "Content-Type: application/json" --data "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getTransactionReceipt\",\"params\":[\"$TX\"]}" "$RPC_URL"
При результате null у этого сервера сейчас нет квитанции для указанного хеша. Запросите на том же сервере eth_getTransactionByHash. Если транзакция найдена и её blockHash равен null, она ожидает включения. Если оба ответа пусты, сверьте сеть и хеш и повторите проверку через независимый доверенный RPC.
Проверьте исполнение и результат для приложения
Для транзакций Ethereum начиная с обновления Byzantium значение status равное 0x0 означает ошибку исполнения на верхнем уровне. Такая транзакция может войти в блок и израсходовать газ. Значение 0x1 означает успешное исполнение на верхнем уровне. Чтобы подтвердить конкретный перевод токена, отберите события ожидаемого контракта и декодируйте отправителя, получателя и сумму по ABI. Контракт может обработать ошибку внутреннего вызова и успешно завершить внешнюю транзакцию. eips.ethereum.org Поле статуса в EIP-658
Сохраните blockHash из квитанции вместе с наблюдением. Для окончательной записи дождитесь, пока финализация охватит эту высоту, и сверьте хеш канонического блока. При реорганизации транзакция у вершины может перейти в другой блок или временно исчезнуть из цепочки.