Solidity事件未从Web3.js中显示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solidity事件未从Web3.js中显示相关的知识,希望对你有一定的参考价值。
我正在尝试在Solidity
中设置一个事件,并从Web3
中监听它,但是我一直收到null
响应。这是我的代码:
合同的相关部分:
event NewUser(string userid);
function createNewUser(string memory _userId) public {
// creating the user and setting it to a mapping
emit NewUser(_userId);
}
[javascript
,来自Ethereum's
参考:
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提供程序,请使用以下标志运行节点:
--ws --wsport XXXX --wsorigins="*"
请注意,出于安全原因,您很可能NOT希望允许*,但要更加明确。
然后通过类似的方法连接到它:
const web3 = new Web3(new Web3.providers.WebsocketProvider("ws://localhost:XXXX"))
以上是关于Solidity事件未从Web3.js中显示的主要内容,如果未能解决你的问题,请参考以下文章
Solidity知识点集 — Keccak256与事件(二)
Solidity、solc、web3.js、Ganache 版本组合目前正在使用啥