Ropsten infura test network + web3 js event listener

He implementado contratos en la red de prueba de ropsten. trufa.js

ropsten: {
  provider: function() {  
    return new HDWalletProvider(mnemonic, "https://ropsten.infura.io/<api-token>")
  },
  network_id: '*',
  gas:"4000000"
}

tienda.sol

pragma solidity ^0.4.17;

contract SimpleStorage {
  uint myVariable;
  event emitval();

  function setValue(uint x) public {
    emitval();
    myVariable = x;
  }

  function getValue() public returns (uint) {
    emitval();
    return myVariable;
  }
}

En mi código de nodo js, ​​estoy usando web3 js para llamar/escuchar métodos/eventos de contratos.

mi archivo node js es

web3.setProvider(new Web3.providers.WebsocketProvider('https://ropsten.infura.io/<api-token>'));

y para escuchar eventos escribí

var contracts = new web3.eth.Contract(importedjson.abi, deployedaddressat)

contracts.events.emitval(function(error, result){
    if(error) { console.log(error);} 
    else { console.log('Event setVal:', result);}
})

Cuando llamo a métodos de solidez (setValue() o getValue() que emite el evento emitval()), no puedo escucharlo en el código del nodo js.

¿Podría por favor ayudarme?
Estoy usando la última versión de web3js "1.0.0-beta.33".

Respuestas (2)

No puedo ver tales setValeventos en su contrato. De hecho, en el contrato, el nombre es emitval. Puedes intentar cambiar tu código.

contratos.eventos.emitval(función(error, resultado){
    si (error) { consola.log (error);}
    else { console.log('Evento setVal:', resultado);}
});

y la alternativa es escuchar todos los eventos del contrato usando myContract.events.allEvents. árbitro

Perdón por mi error al publicar la consulta. He cambiado el nombre del evento en el archivo de solidez, pero olvidé cambiarle el nombre en el código del nodo js. He comprobado que el nombre del evento es el mismo en la solidez y el código del nodo js ahora, pero aún no puedo escuchar el evento.
También estoy enfrentando el mismo problema. No se puede escuchar el evento personalizado. ¿Obtuviste alguna solución?

¿Puede intentar reemplazar web3.setProvider (nuevo Web3.providers.WebsocketProvider ('https://ropsten.infura.io/'));

Con

web3.setProvider(nuevo Web3.providers.WebsocketProvider('wss://ropsten.infura.io/'));

Puede ser un problema de websocket ya que web3 1.0 no admite eventos para http.