Holen Sie sich die Zeit, zu der die Transaktion in Ihren Knoten aufgenommen wurde

Gibt es eine Möglichkeit, die Uhrzeit abzurufen, zu der Sie eine Transaktion erhalten haben? Ich würde gerne wissen, wann ein Smart-Vertrag in meinem Knoten enthalten ist. (lokales Testnetz)

Hi. Meinen Sie, wenn eine Transaktion im Transaktionspool Ihres Knotens ankommt (dh bevor die Transaktion Teil eines Blocks ist) oder wenn Ihr Knoten einen Block synchronisiert, der eine bestimmte Transaktion enthält (dh nachdem die Transaktion Teil eines Blocks ist)?
Ich meine den zweiten Fall, obwohl es auch nützlich sein könnte, den ersten zu kennen. Danke

Antworten (1)

Wenn Blöcke zu Ihrer lokalen Blockchain hinzugefügt werden, enthalten sie eine Reihe von Metadaten, einschließlich des Blockzeitstempels, der die Zeit ist, zu der der Block abgebaut wurde, einschließlich aller Transaktionen in diesem Block.

Hier ist der neueste Block zum Zeitpunkt des Schreibens dieses Beitrags:

https://etherscan.io/block/6521553

Height: 6521553  
TimeStamp: 56 secs ago (Oct-15-2018 07:55:37 PM +UTC)       <--- here
Transactions: 104 transactions and 23 contract Internal Transactions in this Block
Hash: 0x6995e8a668ddc3743e806e99a3c860b8a57d4a7c8de47664489e0c39749069bb
...

Dieser Zeitstempel spiegelt jedoch nicht unbedingt die Zeit wider, zu der alle Knoten auf diesen Block aufmerksam wurden, da es einige Zeit dauert, diese Informationen über das Netzwerk zu verbreiten. Es sagt einfach, wenn der Ersteller des Blocks behauptet, diesen Block erstellt zu haben.

Darüber hinaus ist der Blockzeitstempel keine perfekte Wissenschaft, da er eine Behauptung des Blockerstellers ist und vom Blockersteller innerhalb einiger Regeln angepasst werden kann. Siehe hier:

Kann sich ein Vertrag sicher auf block.timestamp verlassen?

Sie können ganz einfach mit jeder Web3-API wie der von Web3.js bereitgestellten auf den Blockzeitstempel zugreifen:

getBlock

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

Zum Beispiel:

web3.eth.getBlock(6521553).then(console.log);
{
    difficulty: "3220937666879710"extraData: "0x66726131"gasLimit: 8000029gasUsed: 7982786
    hash: "0x6995e8a668ddc3743e806e99a3c860b8a57d4a7c8de47664489e0c39749069bb"
    logsBloom: "0x420542890060082225300245402122f1002aa0004221201100005100566155ea0d8210b04c821040472440169190308898314a00010881a6880891464f2e0ce02188cd40200669c908b0060ac8002480d824080cd03048524a5461080680606a0609d09302495802e460259814040c41282801600c5c00020058201599486031206482383cc2007034420ac0848020083810222c055000862a8111212a4060008a0c0b5242671860864480c12411e531141004080404803842018004d20100280081832251959a9619126c07400800d68c196805250a2087ec1cd000c0512000021031019212a800a009a0040818ec22a0402e86120a05134d7c87180d94e204"
    miner: "0xb2930B35844a230f00E51431aCAe96Fe543a0347"
    mixHash: "0x31f52f83ea88a0201aa44e3e70abe03d097fbe2fed54d9b32bc268194b0b6ae3"
    nonce: "0x297eb26407ff9ca4"
    number: 6521553
    parentHash: "0x8516a9c81830a6b8d953083af31aad2497f33108d5df184b20098003103e56d8"
    receiptsRoot: "0x4c95c9233bcc119ab84bf347a371229b516aacb13aa55bdbf785dfb635e0a719"
    sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
    size: 21086
    stateRoot: "0xcfd2357bcdc9497cf7289e45fd142860ecf933becb7b2060f70a1bf00a885ae0"
    timestamp: 1539633337           <--------- here
    totalDifficulty: "7243332583953312312387"
    transactions: Array(104) [...]
    transactionsRoot: "0x1e2248a45cf7e0f3500781a8293eadbaf12235dd5dc78b4f00b87b2559e75c58"
    uncles: Array []
}

Sie können dies dann mit der JavaScript- Date()Funktion in eine für Menschen lesbare Zeit umwandeln:

Date(1539633337 * 1000)

"Mo 15. Okt 2018 13:08:39 GMT-0700 (Pacific Daylight Time)"

Danke, und gibt es eine Möglichkeit herauszufinden, wann dieser Block zu meinem Knoten hinzugefügt wurde? Nicht nur, als es @Shawn Tabrizi erstellt wurde
Möglicherweise können Sie sich die Protokolle Ihres Ethereum-Clients ansehen, um ungefähr zu sehen, wann der Block mit Ihrem Knoten synchronisiert wurde, aber Sie müssen möglicherweise näher darauf eingehen, wie Sie diese Daten verwenden, um eine bessere Antwort zu erhalten.
Ich verwende Geth, ich denke, das Argument "elapsed" ist die Zeit, um den Block zu synchronisieren. Aber ich möchte die Zeit von einem Smart Contract erhalten, der in das Netzwerk migriert wurde, bis er in meinem Knoten hinzugefügt wird, oder mit anderen Worten, die Zeit, die dieser TX benötigt, um an ihn gesendet zu werden.
Möglicherweise können Sie Web3.js 1.0 und WebSockets verwenden, um benachrichtigt zu werden, wenn Ihr Knoten einen neuen Block erhält: subscribe(“newBlockHeaders”), aber ich habe das Gefühl, dass dieser gesamte Gedankengang fehlerhaft ist. Sie müssen Ethereum als verteiltes Netzwerk betrachten. Was bedeutet es, Ihren spezifischen Knoten zu timen? Sie könnten daran interessiert sein, ein Erlebnis zu erstellen, das ausgelöst wird, wenn eine Transaktion abgeschlossen wird, aber Sie sollten so etwas wie events verwenden .