Как получить временную метку журнала событий в эмитированном событии из смарт-контракта

Я хочу получить метку времени события.

Как я могу получить время запуска события, если данные события не содержат значения времени?

Ответы (2)

Вы можете сделать это, проверив метку времени блока, в который было включено событие. Для чего-то вроде 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);
   }
}
Спасибо, отличный ответ, точно по делу.
Большой. Не стесняйтесь «принять» ответ, чтобы будущие зрители знали, что этот ответ решил вашу проблему.
Я проверил всю страницу и не нашел ни одной кнопки типа «принять», не знаю, куда она делась, здесь только две опции «поделиться» и «редактировать», иначе я бы не ответил спасибо в комментарии, потому что accept= Спасибо
Под стрелками вверх и вниз есть галочка. Попробуйте нажать на это, чтобы принять.

Если вы не сохранили метку времени в событии, вы можете проанализировать это так

const getTimeByBlock = async(txHash) => {
  const blockN = await web3.eth.getTransaction(txHash)
  const blockData = await web3.eth.getBlock(blockN.blockNumber)

  return blockData.timestamp
}