如何將 pubkey 類型的 script_pub_key 轉換為 public_key
這是一個反復出現的問題(請參閱Parse the output field of getrawtransaction to generate a common address hash),但我有不同的看法。
考慮以下
scriptPubKey
欄位:"scriptPubKey": { "asm": "0400d0ade32217e076945e0946ef7bed72d9aea035aa8891e4bf0749ae6e24f8a7d3ea56efafe472ac3943dbed3af7c093729720ac9ab04e8eba09286e3a00fe41 OP_CHECKSIG", "hex": "410400d0ade32217e076945e0946ef7bed72d9aea035aa8891e4bf0749ae6e24f8a7d3ea56efafe472ac3943dbed3af7c093729720ac9ab04e8eba09286e3a00fe41ac", "type": "pubkey" }
我無法根據 wiki https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses中提供的資訊建構公鑰。
1-給定以下十六進制,公鑰中的字節數是多少?我們如何計算它?
410400d0ade32217e076945e0946ef7bed72d9aea035aa8891e4bf0749ae6e24f8a7d3ea56efafe472ac3943dbed3af7c093729720ac9ab04e8eba09286e3a00fe41ac
2- 給定上面的十六進制,如何重建公鑰?
3- Blockchair.com 之類的網站如何將此 HEX 轉換為地址
1JAL1WRvwbJqWWd1Ktks4Q89zCeUYSQM12
?
P2PK 腳本的格式為
PUSH <KEY> OP_CHECKSIG
.你的例子:
41 0400d0ade32217e076945e0946ef7bed72d9aea035aa8891e4bf0749ae6e24f8a7d3ea56efafe472ac3943dbed3af7c093729720ac9ab04e8eba09286e3a00fe41 ac
表示推送
0x41
(65) 個字節。緊隨其後的是公鑰(首先04
表明它是未壓縮的公鑰)。最後0xac
是OP_CHECKSIG。所以總結一下,關鍵是
0400d0ade32217e076945e0946ef7bed72d9aea035aa8891e4bf0749ae6e24f8a7d3ea56efafe472ac3943dbed3af7c093729720ac9ab04e8eba09286e3a00fe41
問題 3 是按照您連結的 wiki 頁面上的確切步驟完成的。
其他常見的 scriptPubKey 格式有:
OP_DUP OP_HASH160 <push of 20-byte public key hash> OP_EQUALVERIFY OP_CHECKSIG
(P2PKH)OP_HASH160 <push of 20-byte script hash> OP_EQUAL
(P2SH)OP_0 <push of 20-byte key hash>
(P2WPKH)OP_0 <push of 32-byte script hash>
(P2WSH)OP_1 <push of 32-byte public key>
(P2TR)只有 P2PKH 和 P2SH 的編碼方式與 wiki 相同(稱為“遺留地址”)。P2WPKH、P2WSH 和 P2TR 地址都使用 Bech32(m) 編碼,稱為原生 segwit 地址。編碼這些地址的方法是技術上有點複雜,但是網上有很多程式碼片段可以做到這一點。
請注意,一個 20 字節的推送是
0x14
,一個 32 字節的推送是0x20
.