Transactions

如何解碼 coinbase 交易?

  • September 30, 2019

以下是區塊高度 200,000 的區塊結果

{  
  'hash':'000000000000034a7dedef4a161fa058a2d67a173a90155f3a2fe6fc132e0ebf',
  'confirmations':396774,
  'strippedsize':247533,
  'size':247533,
  'weight':990132,
  'height':200000,
  'version':2,
  'versionHex':'00000002',
  'merkleroot':'a08f8101f50fd9c9b3e5252aff4c1c1bd668f878fffaf3d0dbddeb029c307e88',
  'tx':[  
     'dbaf14e1c476e76ea05a8b71921a46d6b06f0a950f17c5f9f1a03b8fae467f10',
     'ee475443f1fbfff84ffba43ba092a70d291df233bd1428f3d09f7bd1a6054a1f',
     'e03a9a4b5c557f6ee3400a29ff1475d1df73e9cddb48c2391abdc391d8c1504a',
     'ffa0267c8f2af736858894d6f3e5081a05e2ec16dc98f78a80f376ce35077491',
...
     'd22795f708706cbcd67aaf2bb63e7defd9e0c6c13f4f263dfc36592c047c981a'
  ],
  'time':1348310759,
  'mediantime':1348307828,
  'nonce':4158183488,
  'bits':'1a05db8b',
  'difficulty':Decimal('2864140.507810974'),
  'chainwork':'00000000000000000000000000000000000000000000001ac073536b8dbae81c',
  'nTx':388,
  'previousblockhash':'00000000000003a20def7a05a77361b9657ff954b2f2080e135ea6f5970da215',
  'nextblockhash':'00000000000002e3269b8a00caf315115297c626f954770e8398470d7f387e1c'
}

下面是200000塊的coinbase交易

{  
  'txid':'dbaf14e1c476e76ea05a8b71921a46d6b06f0a950f17c5f9f1a03b8fae467f10',
  'hash':'dbaf14e1c476e76ea05a8b71921a46d6b06f0a950f17c5f9f1a03b8fae467f10',
  'version':1,
  'size':192,
  'vsize':192,
  'weight':768,
  'locktime':0,
  'vin':[  
     {  
        'coinbase':'03400d0302ef02062f503253482f522cfabe6d6dd90d39663d10f8fd25ec88338295d4c6ce1c90d4aeb368d8bdbadcc1da3b635801000000000000000474073e03',
        'sequence':4294967295
     }
  ],
  'vout':[  
     {  
        'value':Decimal('50.63517500'),
        'n':0,
        'scriptPubKey':{  
           'asm':'04b0bd634234abbb1ba1e986e884185c61cf43e001f9137f23c2c409273eb16e6537a576782eba668a7ef8bd3b3cfb1edb7117ab65129b8a2e681f3c1e0908ef7b OP_CHECKSIG',
           'hex':'4104b0bd634234abbb1ba1e986e884185c61cf43e001f9137f23c2c409273eb16e6537a576782eba668a7ef8bd3b3cfb1edb7117ab65129b8a2e681f3c1e0908ef7bac',
           'reqSigs':1,
           'type':'pubkey',
           'addresses':[  
              '1MdYC22Gmjp2ejVPCxyYjFyWbQCYTGhGq8'
           ]
        }
     }
  ]
}

我想要的是解碼vin.coinbaise

我搜尋了一些文件,但我沒有找到解碼這部分的確切方法:

coinbase: 03400d0302ef02062f503253482f522cfabe6d6dd90d39663d10f8fd25ec88338295d4c6ce1c90d4aeb368d8bdbadcc1da3b635801000000000000000474073e03

你知道如何解碼嗎?

在原始原始碼中,對 coinbase 交易的 coinbase 數據中的內容幾乎沒有限制。我認為唯一的限制是 coinbase 數據應該在 2 到 100 個字節之間。然而,這種對 coinbase 數據中的內容缺乏限制的做法帶來了一個漏洞。礦工創建與前一個相同的 coinbase 交易並在高於“原始”coinbase 交易的高度的區塊中開採它是完全合法的。發生這種情況時,會導致先前的交易無效。

稍後,當使用相同的 coinbase 數據探勘幾個區塊時,此問題已得到修復。根據 BIP-34,版本 2 塊必須在 coinbase 欄位的開頭包含塊高度索引作為腳本推送操作。例如,在您的 coinbase 交易中,此數據由 bytes 表示0x03400d03。第一個字節0x03表示腳本應該推送接下來的 3 個字節。接下來的三個字節0x400d03代表小端的塊高度 200,000。

其餘的 coinbase 數據可供礦工根據自己的意願免費使用。這主要用作額外隨機數的空間。在比特幣的早期,礦工可以通過迭代隨機數直到得到的雜湊值低於目標值來找到一個塊。隨著難度的增加,礦工經常循環遍歷所有 40 億個 nonce (2 32 ) 值,卻找不到有效的區塊頭雜湊。但是,通過更新塊時間戳以考慮經過的時間,這很容易解決。由於時間戳是標頭的一部分,因此更改將允許礦工再次遍歷 nonce 的值並獲得不同的結果。

然而,一旦採礦硬體變得真正高效,這種方法就變得越來越困難,因為 nonce 值在不到一秒的時間內就用完了。因此,探勘軟體需要更多的空間來存放 nonce 值,以便找到有效的區塊。時間戳可能會被拉長一點,但是將它移到未來太遠會導致塊變得無效。解決方案是使用 coinbase 交易作為額外 nonce 值的來源。因為 coinbase 腳本可以儲存 2 到 100 個字節的數據(約前 4 個字節保留用於塊辨識),礦工開始使用 96 字節空間作為額外的隨機數,允許他們探索更大範圍的塊頭值以找到有效的塊。

礦池還使用 coinbase 數據作為探勘區塊的標識。例如,如果您查看塊594,041,您將看到coinbase 數據包含字節0x4d696e656420627920416e74506f6f6c。它用 ASCII 表示“‘Mined by AntPool”。(不幸的是,你提到的區塊沒有任何標識,因此我不得不使用另一個有它的區塊)。但是,重要的是要注意,不能依賴這些數據,因為任何礦工明天都可以使用聲稱由不同礦池開采的數據來探勘一個區塊,可能是為了隱藏其身份或陷害他人。

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