Как получить отправленные события, соответствующие отправленной транзакции - PullRequest
1 голос
/ 14 июля 2020

Я хочу написать смарт-контракт, который сохраняет значение ha sh и возвращает идентификатор этого ha sh, чтобы позже проверить сохраненные ha sh.

Мой контракт выглядит примерно так:

pragma solidity >=0.4.25 <0.7.0;
pragma experimental ABIEncoderV2;

contract SaveHash {
    event HashSaved(uint id);
    Hash[] hashes;
    function save(Hash memory hash) public {
        // some process
        emit HashSaved(hashes.length - 1);
    }
}

Однако я не понимаю, как узнать, что событие, испускаемое контрактом, соответствует какой транзакции.

Как я могу узнать, по какой транзакции создано событие?

1 Ответ

0 голосов
/ 14 июля 2020

События хранятся в разделе logs транзакции (также известном как темы). События кодируются ABI. Вы можете сопоставить необработанные шестнадцатеричные данные из раздела журналов транзакции с событиями, если вы знаете данные контракта.

В обратном порядке go, чтобы получить транзакцию события, вы можете запросить узел Ethereum чтобы перечислить все прошедшие события (пример web3. js). Транзакция ha sh находится в пределах возвращаемых значений. Затем вы можете позвонить по номеру web3.eth.getTransactionReceipt() для этой транзакции ha sh, чтобы получить полную информацию о транзакции.

...