filtrar eventos indexados desde el navegador usando web3.js

Tengo un contrato definido que registra 2 eventos:

 myEvent(string data, uint32 indexed id),
 myEvent1(string data, uint32 indexed id). 

Quiero filtrar todos los eventos en el navegador usando web3 pasando la identificación indexada.

  1. Cómo obtener todos los eventos con la identificación aprobada.

  2. cuando trato de obtener el evento del txHash, devuelve los datos del evento, pero solo el parámetro de cadena se decodifica correctamente. el tipo uint32 se devuelve como un número grande. ¿Cómo se resuelven sus dos problemas?

¿Puede copiar aquí todo el bloque de javascript que está utilizando para realizar la operación de filtro?

Respuestas (3)

Aquí estoy enumerando un ejemplo de cómo he aplicado el filtro de eventos.

En este ejemplo, he usado el nombre del candidato como parámetro de filtro. En segundo lugar, está mirando desde el bloque 0 hasta el último.

Espero que esto ayude.

Declaración de Evento - Contrato de Solidez

event RegisterCandidate(uint256 indexed
eventTimeStamp, address indexed _from, bytes32 indexed _candidateName);

Código en Java Script

var event = contractInstance.RegisterCandidate( {_candidateName: "Abc"}, {fromBlock: 0, toBlock: 'latest'});

    event.watch(function(error, response)
    {
       //once the event has been detected, take actions as desired
        var data = 'from: ' + response.args._from+"<br>candidateName: "+web3.toUtf8(response.args._candidateName) +"<br>";
    });

En tu caso concreto sería:

var myEvent = contract.myEvent({id: 1});

myEvent.watch((error, result) => {

    var data = result["args"]["data"];
    var id = result["args"]["id"]; // always 1
    // Do Something 
});

Que vería solo eventos con id = 1.

Cómo obtener todos los eventos con la identificación aprobada.

Como lo indica @cees-van-wijk, esto obtiene cada nuevo evento:

var myEvent = contract.myEvent({id: 1});
myEvent.watch((error, result) => {
    var data = result["args"]["data"];
    var id = result["args"]["id"]; // always 1
    // Do Something 
});

esto recupera todos los eventos anteriores

myEvent.get((error, result) => {
    var data = result["args"]["data"];
    var id = result["args"]["id"]; // always 1
    // Do Something 
});`

cuando trato de obtener el evento del txHash, devuelve los datos del evento, pero solo el parámetro de cadena se decodifica correctamente. el tipo uint32 se devuelve como un número grande. ¿Cómo se resuelven sus dos problemas?

Puede decodificar fácilmente la mayoría de los tipos de uint usandoNumber(uint)