是否有办法获得合同的特定事件?



我将在以太坊、币安、Polygon和Clayton上运行一个合约。

对于在合约中发生的轮询事件是否存在最佳实践?

我想通过请求而不是订阅来获取事件。

如果我们使用EtherScan api,所有序列都是决定性保证的吗?

目标是定期发送请求,并将合同中发生的所有特定事件存储在db中。

谢谢你的帮助。

当您查询原始区块链数据时,每个事件日志都包含logIndex,这是事件在块中的位置。

web3js示例:

const pastEventLogs = await web3.eth.getPastLogs({
fromBlock: 16168375,
toBlock: 16168375,
address: "0xdAC17F958D2ee523a2206206994597C13D831ec7", // USDT on Ethereum
topics: [
web3.utils.keccak256("Transfer(address,address,uint256)")
]
});

返回
...
address: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
blockHash: '0x026c2f62c8ad51b1e28c5fe6885c6025b2c4145aef08b65feb10b6e20dd2c0bc',
blockNumber: 16168375,
data: '0x0000000000000000000000000000000000000000000000000000000001618bd0',
logIndex: 732,
...

第三方api(例如Etherscan)的作者可以选择根据logIndex排序他们的结果,但他们也可以选择不同的排序。

最新更新