Cómo acceder a los registros de eventos en ethereumJ (java)

Acceder a los registros de eventos desde javascript es fácil y directo, sin embargo, estoy tratando de acceder a los registros desde el cliente Java. Cualquier código de ejemplo ayudaría

Respuestas (2)

Puede usar la clase JsonRpc para hacer un filtro en los registros de un bloque. Puede obtenerlo de una instancia de EthereumImpl así:

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

Luego puede pasarle un objeto FilterRequest para decirle qué buscar:

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 tiene la dirección, los temas y los datos del evento, pero todavía está en formato hexadecimal, por lo que debe decodificarlo. Los valores indexados del evento solo se encuentran en los temas y los datos de longitud variable que están indexados (como cadenas o bytes) solo se almacenan como hash en los temas.

Escribí una clase EthereumEventManager para manejar esto por mí mismo. Puedes echarle un vistazo aquí . Puede agregar oyentes para solicitudes de filtro, luego escucha nuevos bloques y notifica cuando se encuentran esas solicitudes de filtro. Siéntase libre de usarlo, modificarlo o aprender de él como mejor le parezca. No está bien documentado, pero si tiene alguna pregunta, con gusto la responderé.

¿Cómo podemos obtener la instancia de EthereumImpl?

Puede escuchar onTransactionExecuted() desde la interfaz EthereumListner y usar el objeto TransactionExecutionSummary para recuperar la información de registro, consulte Seguimiento y decodificación de eventos desde ethereumj .

Consulte la respuesta proporcionada para obtener más detalles.