Ropsten infura test network + web3 js event listener

Ich habe Verträge im Ropsten-Testnetzwerk bereitgestellt. truffle.js

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

store.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;
  }
}

In meinem Node-js-Code verwende ich web3 js, um Methoden/Ereignisse aus Verträgen aufzurufen/abzuhören.

Meine Node-JS-Datei ist

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

und für Hörveranstaltungen habe ich geschrieben

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);}
})

Wenn ich Solidity-Methoden aufrufe (setValue() oder getValue(), die das emitval()-Ereignis ausgeben), kann ich es nicht auf Node-js-Code hören.

Könnten Sie mir bitte weiterhelfen.
Ich verwende die neueste web3js-Version "1.0.0-beta.33".

Antworten (2)

Ich kann solche setValEreignisse in Ihrem Vertrag nicht sehen. Im Vertrag steht nämlich der Name emitval. Sie können versuchen, Ihren Code zu ändern

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

Alternativ können Sie alle Vertragsereignisse mit abhören myContract.events.allEvents. Ref

Entschuldigung, mein Fehler beim Posten der Abfrage. Ich habe das Ereignis in der Solidity-Datei umbenannt, aber vergessen, es im Node-JS-Code umzubenennen.
Ich stehe auch vor dem gleichen Problem. Das benutzerdefinierte Ereignis kann nicht überwacht werden. Hast du irgendeine Lösung bekommen?

Können Sie versuchen, web3.setProvider(new Web3.providers.WebsocketProvider('https://ropsten.infura.io/')) zu ersetzen?

Mit

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

Es könnte sich um ein Websocket-Problem handeln, da web3 1.0 keine Ereignisse für http unterstützt.