我正在尝试在 Solidity 中设置一个事件并从 Web3js 收听它,但我不断得到null
响应。这是我的代码:
合同的相关部分:
event NewUser(string userid);
function createNewUser(string memory _userId) public {
// creating the user and setting it to a mapping
emit NewUser(_userId);
}
JavaScript,来自以太坊的参考:
async function watchEvents(contract) {
contract.events.allEvents({
fromBlock: 0
},function(error, event){ console.log('all events?'); console.log(event); })
.on('data', function(event){
console.log(event); // same results as the optional callback above
})
.on('changed', function(event){
// remove event from local database
})
.on('error', console.error);
}
使用另一个JavaScript函数,我可以看到正在创建新用户,并且交易在Ganache上被列为成功。但是watchEvents
方法一直在打印null
.
我错过了什么?
请连接到 websocket 提供程序以启用侦听事件。若要运行 Websocket 提供程序,请使用以下标志运行节点:
--ws --wsport XXXX --wsorigins="*"
请注意,出于安全原因,您很可能不希望允许*,而是更明确。
然后通过类似以下内容连接到它:
const web3 = new Web3(new Web3.providers.WebsocketProvider("ws://localhost:XXXX"))