Segregated-Witness

在 Pay to Script Hash Address 中創建 Pay to Witness Script Hash

  • August 5, 2018

我正在嘗試生成一個多重簽名、segwit 兼容地址作為嵌套在 BIP16 P2SH 中的 P2WSH,如 BIP141 中所述。基本上,我想從 n 個公鑰和簽署有效 tx 所需的 m 構造一個 P2WSH-nested-in-P2SH 地址。

(m required, n public keys) -> base 58 bitcoin address

我正在嘗試按照Mastering Bitcoin 中提供的範例來檢查我得到的數字,但我肯定遺漏了一些東西。(我將連結我引用的所有部分,但實際上沒有必要去閱讀它們——希望我的過程中的缺陷對某人來說是顯而易見的。)

  1. 他定義了一個標準的 P2SH 2-of-5 多重簽名:OP_2 key0 key1 key2 key3 key4 OP_5 OP_CHECKMULTISIG密鑰在哪裡
04C16B8698A9ABF84250A7C3EA7EEDEF9897D1C8C6ADF47F06CF73370D74DCCA01CDCA79DCC5C395D7EEC6984D83F1F50C900A24DD47F569FD4193AF5DE762C587
04A2192968D8655D6A935BEAF2CA23E3FB87A3495E7AF308EDF08DAC3C1FCBFC2C75B4B0F4D0B1B70CD2423657738C0C2B1D5CE65C97D78D0E34224858008E8B49
047E63248B75DB7379BE9CDA8CE5751D16485F431E46117B9D0C1837C9D5737812F393DA7D4420D7E1A9162F0279CFC10F1E8E8F3020DECDBC3C0DD389D9977965
0421D65CBD7149B255382ED7F78E946580657EE6FDA162A187543A9D85BAAA93A4AB3A8F044DADA618D087227440645ABE8A35DA8C5B73997AD343BE5C2AFD94A5
043752580AFA1ECED3C68D446BCAB69AC0BA7DF50D56231BE0AABF1FDEEC78A6A45E394BA29A1EDF518C022DD618DA774D207D137AAB59E0B000EB7ED238F4D800

其中HASH16054c557e07dde5bb6cb791c7a540e0a4796f5e97e. 好的,到目前為止一切都很好;我得到了和這本書一樣的價值。

  1. 然後他討論了一個 P2WSH 交易並引用了相同的多重簽名腳本

我們在 [p2sh] 中看到了這種類型的腳本。在該範例中,Mohammed 的公司使用 P2SH 來表達多重簽名腳本。支付給 Mohammed 公司的款項使用如下鎖定腳本進行編碼:範例 P2SH 輸出腳本

HASH160 54c557e07dde5bb6cb791c7a540e0a4796f5e97e EQUAL

然後定義 P2WSH 輸出腳本

範例 P2WSH 輸出腳本

0 9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73

[…] 隔離見證程序包含兩個推送到堆棧的值:見證版本 (0) 和贖回腳本的 32 字節 SHA256 雜湊值。

他是如何得到這個 P2WSH 輸出腳本的?

如果我以 P2SH 腳本為例,script.

HASH160(script) = 54c557e07dde5bb6cb791c7a540e0a4796f5e97e
SHA256(script) = a9b7b38d972cabc7961dbfbcb841ad4508d133c47ba87457b4a0e8aae86dbb89
SHA256(HASH160(script)) = 9796557ff06241ca75fdbc09359e9916186cb8398dc01fd58afc72a3ac86ce63

沒有一個等於提供的:

9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73

我還嘗試壓縮公鑰,但仍然無法獲得該值。我很確定它仍然在談論同一個例子,因為它繼續

Mohammed 的公司可以花費 P2WSH 輸出 […]

如果我能計算出兌換腳本的 32 字節 SHA256 雜湊值,我想我就可以開始了,因為此時可以計算出地址

sha256_value = 9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73
p2wsh_output = OP_0 + OP_32 + sha256_value
address = Base58(05 + HASH160(p2wsh_output))

這確實是書中的一個錯誤:https ://github.com/bitcoinbook/bitcoinbook/issues/440

請參閱此差異以了解正確的步驟。

在我看來

… 創建一個付費見證腳本雜湊 (P2WSH) 輸出, 如下所示:0 9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73…

表示這個雜湊是一個例子,不是從上面的數據派生的

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