我正在尝试从NodeJS监听我在remix IDE上创建的事件。 我从触发事件的地方调用了智能合约方法,我正在控制台中等待它……但是我什么也没收到:(
我将NodeJS与ExpressJS一起使用 Web3版本:1.0.0-beta.46
智能合约代码应类似于:
pragma solidity >= 0.4.22 < 0.6.0;
contract Test {
event test1(address a,uint16 b,uint16 c,uint16 d,uint16 e);
event test2(address a,uint128 f,uint16 g);
event test3(address a,uint128 f,bool h);
//method 1
function method1(uint16 a,uint16 b,uint16 c,uint16 d) external payable {
// ... some code ... //
//here I trigger the event
emit test1(msg.sender,a,b,c,d);
}
//method 2
function method2(uint128 f,uint16 g) external payable {
// ... some code ... //
//here I trigger the event
emit test2(msg.sender,f,g);
}
//method 3
function method3(uint128 f) external payable {
// ... some code ... //
//here I trigger the event
emit test3(msg.sender,f,true);
}
}
这就是我在NodeJS中监听事件的方式:
SmartContract.events.test1({fromBlock: 0, toBlock: 'latest'} , (error, event) => { console.log(JSON.stringify(event)); })
.on('data', (event) => {
console.log("The event is : " + JSON.stringify(event));
}).on('changed', (event) => {
console.log("Changed event : " + JSON.stringify(event));
}).on('error', console.error);
我也尝试不使用fromBlock或toBlock之类的任何参数进行监听,但是没有用... 我没有任何错误或什么。 在执行智能合约方法之前和之后,我开始听
收到的已开采的区块的状态为“ 0x1”,因此交易正常。但是我不知道为什么侦听器无法正常工作...
编辑:智能合约的实例化:
const address = "0xB740096F1a6642190c816EfE37697891c65Afc92";
const theABI = require('./getABI.js');
var SmartContract = new web3.eth.Contract(theABI.getABI() , address);
getABI.js文件只有1个返回ABI的函数。 我确定并且已经重新检查过,ABI包含事件。以下是存在事件的ABI的代码片段:
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"name": "a",
"type": "address"
},
{
"indexed": false,
"name": "f",
"type": "uint128"
},
{
"indexed": false,
"name": "g",
"type": "uint16"
}
],
"name": "test2",
"type": "event"
},
web3的实例:
const Web3 = require('web3');
const web3 = new Web3(Web3.givenProvider || "ws://IP SERVER:PORT");
我还尝试了以下方法:
// Receives all events from the smart contract
const listener = SmartContract.events.allEvents({}, (error, event) =>{ console.log("THE CALLBACK EVENT IS : " + JSON.stringify(event)); })
.on('data', async (event) => { console.log("THE EVENT IS : " + JSON.stringify(event)); })
.on('receipt', async function(result) { console.log("THE RECEIPT EVENT IS : " + JSON.stringify(event)); })
.on('transactionHash', function(hash){ console.log("THE HASH EVENT IS : " + JSON.stringify(event)); })
.on('error', function(error){ console.log("THE ERROR EVENT IS : " + JSON.stringify(event)); });
事件监听器仍然没有输出...
答案 0 :(得分:0)
问题已解决:
挖出的智能合约地址不正确,因此事件什么也听不到。