Bech32-Address

從 BIP173 規範建構 P2WSH 地址

  • November 16, 2018

BIP173規範定義瞭如何創建 Bech32 Segwit 本地地址

範例部分中,給出了一個公鑰:0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798.

基於該密鑰,生成 P2WPKH 地址有點容易,先使用 SHA256 對密鑰進行雜湊處理,然後使用 RIPEMD160 並使用十六進制解碼結果作為見證程序(前兩個命令是簡單的 CLI,最後一個來自 Dart bech32庫):

$ echo 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 | xxd -r -p | openssl sha256
(stdin)= 0f715baf5d4c2ed329785cef29e562f73488c8a2bb9dbc5700b361d54b9b0554                                                                                                                                                                                                                                      

$ echo 0f715baf5d4c2ed329785cef29e562f73488c8a2bb9dbc5700b361d54b9b0554 | xxd -r -p | openssl ripemd160                                                                                                                                                         
(stdin)= 751e76e8199196d454941c45d1b3a323f1433bd

Segwit('bc', 0, HEX.decode("751e76e8199196d454941c45d1b3a323f1433bd"))
// bc1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3qccfmv3

生成 P2WSH 涉及腳本key OP_CHECKSIG,然後是一次 SHA256 散列。我不知道如何建構所述腳本。操作OP_CHECKSIG編碼為. 但是將其附加到密鑰似乎很愚蠢(並且不起作用)。除了操作碼需要兩個參數。我要散列什麼?0xac``CHECKSIG

當您將項目推送到堆棧上時,您必須使用操作碼來說明您要推送的項目有多長時間。在這種情況下,您要推送 33 個字節,因此 OP_PUSH33

您的腳本將是:

OP_PUSH33 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 OP_CHECKSIG

要麼

210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac.

然後你的見證程序變成witprog = sha256(script)1863143c14c5166804bd19203356da136c985678cd4d27a1b8c6329604903262

然後你 bech32 編碼,你得到bc1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3qccfmv3

除了 CHECKSIG 操作碼還需要兩個參數。

另一個參數將是簽名,它將由花費硬幣的人作為其 scriptSig 的一部分提供。您的 scriptPubkey 只是腳本的後半部分,前半部分來自輸入。

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