獲取 blk*.dat 文件的比特幣地址
我知道從
blk*.dat
文件中獲取地址被討論了很多次。但我不明白為什麼?當我擁有原始 scriptSig 時,我可以對其進行編碼並獲取比特幣地址嗎?例如第一個塊第一個交易:
輸入 scriptSig(這個值是正確的,定義在這裡:https ://en.bitcoin.it/wiki/Genesis_block ):
04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73
輸出腳本信號:
4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac
如此處所寫:https ://en.bitcoin.it/wiki/Genesis_block 輸出地址為:
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
現在,如何從 scriptSig 獲取
4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac
地址1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
?如果您在這裡嘗試:http: //gobittest.appspot.com/Address輸出不是預期的地址“1A1 …..”
首先,請注意創世塊上的 scriptSig 是在使用地址之前。那裡的 scriptSig 稱為 p2pk,或 pay-to-pub-key。地址(以 1 開頭的那種)實際上是 p2pkh,或 pay-to-pub-key-hash。您可以相當容易地將一個轉換為另一個,這就是這裡發生的事情。
實際的 scriptSig 可以這樣解析:
41 = number of bytes in hex of the element (65 bytes) 04...5f = public key ac = OP_CHECKSIG
在http://gobittest.appspot.com/Address將04…5f 插入公共 ECDSA 密鑰,您會看到地址確實匹配。
或者我對以下假設是否正確:scriptSig 有三種類型
- OP_DUP OP_HASH160 …. OP_EQUALVERIFY OP_CHECKSIG
- OP_HASH160 … OP_EQUAL
- OP_m … OP_CHECKMULTISIG
但是現在如何處理這些選項?在第三個選項中,我只需要獲取表示為“…”的所有字節並對其進行解碼。但是其他人呢?
例如:很熱從:76a91490bb78d00b26139e4d51ceb9655295c2bd98aed688ac