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)
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: 8000029
gasUsed: 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)"
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 .
Richard Horrocks
sapiensapiens