Как получить доступ к журналам событий в ethereumJ (java)

Доступ к журналам событий из javascript прост и прямолинеен, однако я пытаюсь получить доступ к журналам из клиента Java. Любой пример кода поможет

Ответы (2)

Вы можете использовать класс JsonRpc для фильтрации журналов блока. Вы можете получить его из экземпляра EthereumImpl следующим образом:

JsonRpc jsonrpc = ethereum.getApplicationContext().getBean(JsonRpc.class);

Затем вы можете передать ему объект FilterRequest, чтобы указать, что искать:

FilterRequest fr = new FilterRequest();
fr.fromBlock = "latest";
fr.toBlock = "latest";
fr.address = ""; //String or String[] - addresses to match
fr.topics = ...//String or String[] of topics to match
               //Hash of event signature is first, then indexed parameters
               //I believe you can give it a String[][] also, so for each param in the event you can filter for multiple options
Object[] logs = jsonrpc.eth_getLogs(fr);
for(Object logObject : logs) {
    LogFilterElement log = (LogFilterElement)logObject;
    //do stuff with the log of the event
}

В LogFilterElement есть адрес, темы и данные из события, но они все еще в шестнадцатеричном формате, поэтому вам нужно их расшифровать. Индексированные значения из события находятся только в темах, а проиндексированные данные переменной длины (например, строки или байты) хранятся в темах только в виде хэша.

Я написал класс EthereumEventManager, чтобы справиться с этим для себя. Вы можете взглянуть на это здесь . Вы можете добавить прослушиватели для запросов фильтрации, затем он прослушивает новые блоки и уведомляет, когда эти запросы фильтрации были найдены. Не стесняйтесь использовать его, модифицировать или учиться на нем по своему усмотрению. Это не очень хорошо документировано, но если у вас есть какие-либо вопросы, я был бы рад на них ответить.

как мы можем получить экземпляр EthereumImpl?

Вы можете прослушать onTransactionExecuted() из интерфейса EthereumListner и использовать объект TransactionExecutionSummary для получения информации журнала, см. Отслеживание и декодирование событий из ethereumj .

Смотрите предоставленный ответ для более подробной информации.