Доступ к журналам событий из javascript прост и прямолинеен, однако я пытаюсь получить доступ к журналам из клиента Java. Любой пример кода поможет
Вы можете использовать класс 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, чтобы справиться с этим для себя. Вы можете взглянуть на это здесь . Вы можете добавить прослушиватели для запросов фильтрации, затем он прослушивает новые блоки и уведомляет, когда эти запросы фильтрации были найдены. Не стесняйтесь использовать его, модифицировать или учиться на нем по своему усмотрению. Это не очень хорошо документировано, но если у вас есть какие-либо вопросы, я был бы рад на них ответить.
Вы можете прослушать onTransactionExecuted() из интерфейса EthereumListner и использовать объект TransactionExecutionSummary для получения информации журнала, см. Отслеживание и декодирование событий из ethereumj .
Смотрите предоставленный ответ для более подробной информации.
Абхишек Ранджан