Web3 - 如何获取交易收据事件日志?

Web3 - How to get Transaction Receipt Event Logs?

我需要获取我的智能合约发出的事件并通过 web3 在前端使用它们。

我在我的合同上做了一些活动,returns 活动获胜者和门票号码:

event Winner(uint256 ticketNumber, address winner);

好的,所以我发出了这个事件,我在事务日志中看到了它。

来自 Etherscan:

好的!我需要的是数据:ticketNumber: 1, winner: 0x....... 我是如何从 web3 得到这个的?

我正在尝试使用:

 await web3.eth.getTransactionReceipt(txnHash, function (error, result) {
          console.log(result);
        });

但是当我查看控制台日志时,我看不到这些信息,我怀疑 result.logs.data 是正确的信息,但我不确定,我不知道如何翻译: “0x00000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005964b608ea267bfe9ef77707fce8105a2d=143e7a”

有人有想法吗?谢谢!

如果你阅读docs,有getPastEvents方法。

myContract.getPastEvents('MyEvent', {
    filter: {myIndexedParam: [20,23], myOtherIndexedParam: '0x123456789...'}, // Using an array means OR: e.g. 20 or 23
    fromBlock: 0,
    toBlock: 'latest'
}, function(error, events){ console.log(events); })
.then(function(events){
    console.log(events) // same results as the optional callback above
});

您还可以创建事件侦听器:

contract.events.Winner()
.on('data', (event) => {
    console.log(event);
})
.on('error', console.error);

关于 subscription to events

的文档