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".
Ich kann solche setVal
Ereignisse 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
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.
Kapil
Trinu