從 BIP173 規範建構 P2WSH 地址
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 只是腳本的後半部分,前半部分來自輸入。