No se reciben eventos en nodejs, usando truffle, ganache y metamask

Estoy usando web3 1.0, digamos que este es mi contrato inteligente:

contract Foo {
    event NewUser(
        address userAddress,
        uint amount
    );

    function addUser() public payable{
        emit NewUser(msg.sender, msg.value);
    }
}

Los eventos se disparan en Remix perfectamente bien.

El problema es cuando ejecuto un nodejs con back-end express e intento ver los eventos con el siguiente código:

contract.events.NewUser({}, function(error, event){ 
  console.log(event); 
})
.on('data', function(event){
  console.log(event); // same results as the optional callback above
})
.on('changed', function(event){
  // remove event from local database
})
.on('error', console.error);

El primer registro se llama con valor nully cuando el evento no se puede activar. ¿Alguien tiene alguna idea de cuál podría ser el problema?

¿Qué proveedor estás usando? Asegúrese de que su proveedor admita la suscripción a eventos. HttpProvider no admite suscripción de eventos por cierto.
tengo esto: var http = require('http');, ¿es esto lo que quieres decir? Estoy usando express también. También tengo websocket instalado. ¿Podría eso ayudar de alguna manera? No tengo mucha experiencia en back-end.
Quiero decir, cuando inicia la instancia web3, ¿qué tipo de proveedor le pasa?
Mi ubicación de ganache, que es localhost:7545 , ¿es este el problema? ¿Cuál sería una solución?
Supongo que estás usando HttpProvider entonces. Consulte web3js.readthedocs.io/en/1.0/web3.html#value . Puede usar la versión beta de ganache-cli por ahora. github.com/trufflesuite/ganache-cli/issues/…

Respuestas (1)

El anterior HttpProvider y ganache no admiten la suscripción a eventos de web3 1.0. Por favor, consulte la documentación . Por ahora, para fines de prueba, puede usar la versión beta de ganache-cli con WebsocketProvider.

Voy a probar esto esta noche