Ethereum Web3.js中未显示Solidity事件
我试图在Ethereum Web3.js中未显示Solidity事件,ethereum,solidity,web3,web3js,Ethereum,Solidity,Web3,Web3js,我试图在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,来自以太坊的ref
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
,来自以太坊的reference:
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”))
您是以太坊提供商吗?infura还是自己的节点?@YegorZaremba我正在使用自己的节点。另一个线程上的某个人告诉我,null
的原因是事件仅由websockets
提供程序支持。我还没有测试过。