Transactions

原始交易的“時間”(和區塊時間)欄位發生了什麼?

  • March 28, 2017

一段時間以來,我一直在呼叫 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 輸出之間的一個關鍵區別是帶有timeblocktime欄位/值的事務也有confirmationsblockhash。我獲得這些比特幣交易的方式是監聽zmq埠,一旦交易的雜湊通過,我就會呼叫 HTTP 方法getrawtransaction來解碼雜湊。我確實注意到,如果我等待一段時間或繼續嘗試呼叫getrawtransaction(例如,在幾秒鐘內多次按向上箭頭鍵 + 輸入),那麼最終返回的事務 JSON 確實time填充了欄位/值。

在這一點上,我推測這些time與它們無關的交易未經證實?這種理解正確嗎?

如果我的理解是正確的,有些交易time因為未經確認而與它們沒有關聯,當它們被確認時,它們是否會通過網路(例如通過 zmq)重新廣播,以便我有另一個機會獲得它們?

請注意,我不是在嘗試創建或操作數據,只是簡單地監聽傳入的新事務並解析它們。我的邏輯中心之一圍繞該time欄位,並且由於我注意到並非所有事務都具有此欄位,因此該程式碼“中斷”(因為假設所有解碼的事務都將具有這樣的欄位/值)。

在這一點上,我推測這些沒有時間關聯的交易是未經證實的?這種理解正確嗎?

是的。Bitcoin.org開發者參考解釋說:

在此處輸入圖像描述

這樣做的原因是交易本身不包含時間欄位,因此唯一可以使用的時間是(1)節點第一次收到交易的時間或(2)包含交易的塊中的時間欄位.

Bitcoin Core 確實會跟踪 #1,但它不會在getrawtransactionRPC 輸出中顯示它。如果需要,可以從getrawmempoolRPC 中獲取(嘗試使用參數呼叫該 RPC true)。請注意,如果交易從記憶體池中被驅逐(由於年齡或低費用)然後重新添加,則時間可能會改變。

引用自:https://bitcoin.stackexchange.com/questions/52405