Dies ist mein Quellcode in nodejs:
var Web3 = require('web3');
var web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'));
var abi = ...
var contract = new web3.eth.Contract(abi, MAIN_CONTRACT_ID);
contract.events.Evt({fromBlock: 0, toBlock: 'latest'},function () {
}).on('data',function (evt) {
console.log("evt",evt);
});
Aber ich bekomme diesen Absturz:
TypeError: Cannot read property 'on' of undefined
at Subscription.subscribe (C:\Users\steve\Dropbox\Projects\dsd\dsd\web3test\node_modules\web3\packages\web3-core-subscriptions\src\subscription.js:199:45)
at Contract._on (C:\Users\steve\Dropbox\Projects\dsd\dsd\web3test\node_modules\web3\packages\web3-eth-contract\src\index.js:623:18)
Vertrag.Evt ist für mich undefiniert, Vertrag ist definiert und enthält Vertrag.Ereignisse.Evt.
Wie kann ich das beheben?
Es gibt zwei Versionen der Web3-API, die alte (von Metamask verwendet) und die neue (von der neuesten Web3 von nodejs verwendet). Dies ist ein Beispiel für die letzte Version der API. Um auf Ereignisse zu lauschen, muss Websocket funktionieren (http würde nicht funktionieren), also führen Sie mist.exe mit den folgenden Optionen aus:
--node-wsorigins="*"
--node-ws
--node-wsapi "db,eth,net,web3,personal"
--swarmurl="http://swarm-gateways.net"
So können Sie sich jetzt mit Ihrer geth.exe verbinden:
var Web3 = require('web3');
var web3 = new Web3('ws://localhost:8546');
var abi = ...
contract = new web3.eth.Contract(abi, CONTRACT_ID_HERE);
// this will listen to new events
contract.events.Evt({}, function (err, evt) {
if (err) {
console.log(err);
return;
}
console.log(evt)
});
// this will grab all events from the past
contract.getPastEvents('Evt', {fromBlock: startBlock, toBlock: 'latest'},
function (err, arg) {
if(err) {
console.error(err);
return;
}
console.log(arg)
});
};
d3llafr33
Stepan Jakowenko
d3llafr33
Stepan Jakowenko