Solidity
如何從智能合約中獲取已發出事件中事件日誌的時間戳
我想獲取事件的時間戳。
如果事件數據不包含任何時間值,如何獲取事件觸發的時間?
您可以通過檢查包含事件的塊的時間戳來做到這一點。對於 web3.js 之類的東西,您可以使用
getBlock
:
web3.eth.getBlock(blockHashOrBlockNumber [, returnTransactionObjects] [, callback])
此外,您可以在事件本身中包含時間戳。它看起來像這樣:
pragma solidity ^0.5.5; contract MyEvetTest { event MyEvent(uint256 timestamp); function myFunction() public { emit MyEvent(block.timestamp); } }
如果你沒有在事件中儲存時間戳,你可以這樣解析
const getTimeByBlock = async(txHash) => { const blockN = await web3.eth.getTransaction(txHash) const blockData = await web3.eth.getBlock(blockN.blockNumber) return blockData.timestamp }