原始交易的“時間”(和區塊時間)欄位發生了什麼?
一段時間以來,我一直在呼叫 HTTP 方法
getrawtransaction
來檢索原始事務。過去,直到最近,我都會在time
每筆交易中獲得該領域。但是,在過去的幾天裡,我注意到該欄位不再存在於某些交易中。這個領域發生了什麼?這是一個確實具有
time
欄位/值的範例:/usr/local/bin/bitcoin-cli getrawtransaction b6a26cc6d1573473724ad3bd49b16a33a69a738f4d1eb9e5992e39ec0be086a9 1
{ "result":{ "hex":"01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4b03e8d0030551fdc4495efabe6d6d7a81d2b72c3811f3a24b5a5d4431f46d284993aa067a25ec6abdb030209eacb8010000000000000000454d432055533200d0298378097f0000a19d0000ffffffff01b11d0096000000001976a914740ecaf436d5867903c722d783fc994c25a29b1588ac00000000", "txid":"b6a26cc6d1573473724ad3bd49b16a33a69a738f4d1eb9e5992e39ec0be086a9", "hash":"b6a26cc6d1573473724ad3bd49b16a33a69a738f4d1eb9e5992e39ec0be086a9", "size":160, "vsize":160, "version":1, "locktime":0, "vin":[ { "coinbase":"03e8d0030551fdc4495efabe6d6d7a81d2b72c3811f3a24b5a5d4431f46d284993aa067a25ec6abdb030209eacb8010000000000000000454d432055533200d0298378097f0000a19d0000", "sequence":4294967295 } ], "vout":[ { "value":25.16590001, "n":0, "scriptPubKey":{ "asm":"OP_DUP OP_HASH160 740ecaf436d5867903c722d783fc994c25a29b15 OP_EQUALVERIFY OP_CHECKSIG", "hex":"76a914740ecaf436d5867903c722d783fc994c25a29b1588ac", "reqSigs":1, "type":"pubkeyhash", "addresses":[ "1Baf75Ferj6A7AoN565gCQj9kGWbDMHfN9" ] } } ], "blockhash":"000000000000003d8ec00e2cbaf8090697b1598abe1e209960e55f0884d6044e", "confirmations":10, "time":1375585378, "blocktime":1375585378 }, "id":"bitcoin" }
這是一個沒有
time
欄位/值的範例:/usr/local/bin/bitcoin-cli getrawtransaction 0a5c687bafb7f5008028efc4dcdd510c15be86347b0607e5bf461f211ecbaf78 1
.{ "result": { "hex": "010000000153af347ad5e3c28296b7fc833a02612dbf9a5b76752133b18fd51a532803556c010000006a473044022052622e673e12298315553671df71c4795a5baffb5992ae2b90a95f84539a8d9302200c81def7655facab2f3860345a9b35fe157e2b08b27721f7af49c5ec80483d9a012103628a2f0c158be42a1c8ce37dfffd9951dd3c8bf9ca13e592b864e46784cc9ebffeffffff0292cf032f070000001976a914df01a3394df97f114943a8e37ada789ea6d7bef788ac00e1f505000000001976a9141e5e089913ff694d2f3f3b8ed1ec1e24bdc311c488ac1f020700", "txid": "0a5c687bafb7f5008028efc4dcdd510c15be86347b0607e5bf461f211ecbaf78", "hash": "0a5c687bafb7f5008028efc4dcdd510c15be86347b0607e5bf461f211ecbaf78", "size": 225, "vsize": 225, "version": 1, "locktime": 459295, "vin": [ { "txid": "6c550328531ad58fb1332175765b9abf2d61023a83fcb79682c2e3d57a34af53", "vout": 1, "scriptSig": { "asm": "3044022052622e673e12298315553671df71c4795a5baffb5992ae2b90a95f84539a8d9302200c81def7655facab2f3860345a9b35fe157e2b08b27721f7af49c5ec80483d9a[ALL] 03628a2f0c158be42a1c8ce37dfffd9951dd3c8bf9ca13e592b864e46784cc9ebf", "hex": "473044022052622e673e12298315553671df71c4795a5baffb5992ae2b90a95f84539a8d9302200c81def7655facab2f3860345a9b35fe157e2b08b27721f7af49c5ec80483d9a012103628a2f0c158be42a1c8ce37dfffd9951dd3c8bf9ca13e592b864e46784cc9ebf" }, "sequence": 4294967294 } ], "vout": [ { "value": 308.5354997, "n": 0, "scriptPubKey": { "asm": "OP_DUP OP_HASH160 df01a3394df97f114943a8e37ada789ea6d7bef7 OP_EQUALVERIFY OP_CHECKSIG", "hex": "76a914df01a3394df97f114943a8e37ada789ea6d7bef788ac", "reqSigs": 1, "type": "pubkeyhash", "addresses": [ "1ML9eZVM3NTLvM25w4eYfWLQC9gHwRuBJb" ] } }, { "value": 1, "n": 1, "scriptPubKey": { "asm": "OP_DUP OP_HASH160 1e5e089913ff694d2f3f3b8ed1ec1e24bdc311c4 OP_EQUALVERIFY OP_CHECKSIG", "hex": "76a9141e5e089913ff694d2f3f3b8ed1ec1e24bdc311c488ac", "reqSigs": 1, "type": "pubkeyhash", "addresses": [ "13mZvKjZ3TtzfL7z4EqsG5sMNWayzjNHtY" ] } } ] }, "error": null, "id": "bitcoin" }
我注意到這發生在新的和傳入的比特幣交易中,但不是舊的。兩個 JSON 輸出之間的一個關鍵區別是帶有
time
和blocktime
欄位/值的事務也有confirmations
和blockhash
。我獲得這些比特幣交易的方式是監聽zmq
埠,一旦交易的雜湊通過,我就會呼叫 HTTP 方法getrawtransaction
來解碼雜湊。我確實注意到,如果我等待一段時間或繼續嘗試呼叫getrawtransaction
(例如,在幾秒鐘內多次按向上箭頭鍵 + 輸入),那麼最終返回的事務 JSON 確實time
填充了欄位/值。在這一點上,我推測這些
time
與它們無關的交易未經證實?這種理解正確嗎?如果我的理解是正確的,有些交易
time
因為未經確認而與它們沒有關聯,當它們被確認時,它們是否會通過網路(例如通過 zmq)重新廣播,以便我有另一個機會獲得它們?請注意,我不是在嘗試創建或操作數據,只是簡單地監聽傳入的新事務並解析它們。我的邏輯中心之一圍繞該
time
欄位,並且由於我注意到並非所有事務都具有此欄位,因此該程式碼“中斷”(因為假設所有解碼的事務都將具有這樣的欄位/值)。
在這一點上,我推測這些沒有時間關聯的交易是未經證實的?這種理解正確嗎?
是的。Bitcoin.org開發者參考解釋說:
這樣做的原因是交易本身不包含時間欄位,因此唯一可以使用的時間是(1)節點第一次收到交易的時間或(2)包含交易的塊中的時間欄位.
Bitcoin Core 確實會跟踪 #1,但它不會在
getrawtransaction
RPC 輸出中顯示它。如果需要,可以從getrawmempool
RPC 中獲取(嘗試使用參數呼叫該 RPCtrue
)。請注意,如果交易從記憶體池中被驅逐(由於年齡或低費用)然後重新添加,則時間可能會改變。