So erhalten Sie den Zeitstempel eines Ereignisprotokolls im ausgegebenen Ereignis von Smart Contract

Ich möchte den Zeitstempel eines Ereignisses erhalten.

Wie kann ich die Zeit des ausgelösten Ereignisses abrufen, wenn die Ereignisdaten keinen Zeitwert enthalten?

Antworten (2)

Sie können dies tun, indem Sie den Zeitstempel des Blocks überprüfen, in dem das Ereignis enthalten war. Für etwas wie web3.js können Sie Folgendes verwenden getBlock:

web3.eth.getBlock(blockHashOrBlockNumber [, returnTransactionObjects] [, callback])

Außerdem können Sie den Zeitstempel in das Ereignis selbst einfügen. Es würde so aussehen:

pragma solidity ^0.5.5;

contract MyEvetTest {

   event MyEvent(uint256 timestamp);

   function myFunction() public {
       emit MyEvent(block.timestamp);
   }
}
Danke, perfekte Antwort, genau auf den Punkt gebracht.
Großartig. Fühlen Sie sich frei, die Antwort zu "akzeptieren", damit zukünftige Zuschauer wissen, dass diese Antwort Ihr Problem gelöst hat.
Ich habe die gesamte Seite überprüft und keine Schaltfläche wie "akzeptieren" gefunden, weiß nicht, wo das hingegangen ist, hier sind nur zwei Optionen "teilen" und "bearbeiten", sonst hätte ich im Kommentar nicht geantwortet, weil "akzeptiere =". Danke
Unter den Abstimmpfeilen nach oben und unten befindet sich ein Häkchen. Versuchen Sie, darauf zu klicken, um es zu akzeptieren.

Wenn Sie den Zeitstempel nicht im Ereignis gespeichert haben, können Sie so analysieren

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

  return blockData.timestamp
}