Это мой исходный код в 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);
});
Но я получаю этот сбой:
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)
контракт.Evt для меня не определен, контракт определен и содержит contract.events.Evt.
Как я могу это исправить?
Существует две версии API web3: старая (используется метамаской) и новая (используется последней версией web3 из nodejs). Это пример для последней версии API. Чтобы прослушивать события, вам нужно, чтобы работал веб-сокет (http не будет работать), поэтому запустите mist.exe со следующими параметрами:
--node-wsorigins="*"
--node-ws
--node-wsapi "db,eth,net,web3,personal"
--swarmurl="http://swarm-gateways.net"
Вот как вы можете подключиться к вашему geth.exe сейчас:
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
Степан Яковенко
d3llafr33
Степан Яковенко