Solidity

如何從智能合約中獲取已發出事件中事件日誌的時間戳

  • November 25, 2020

我想獲取事件的時間戳。

如果事件數據不包含任何時間值,如何獲取事件觸發的時間?

您可以通過檢查包含事件的塊的時間戳來做到這一點。對於 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
}

引用自:https://ethereum.stackexchange.com/questions/73655