是否需要 bech32 地址的見證“版本”才能將可花費的資金“發送”到該地址?
假設 Alice 擁有 Bob 的 bech32 地址(BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4)。在對地址進行解碼後, Alice 知道該地址有一個
witness version
AND0
字節20
的散列(32
字節也將被視為有效字節)。假設 Alice 寫下
20
雜湊字節,但忘記了witness version
是什麼。愛麗絲還能向鮑勃“發送可支配資金”嗎?Alice 能否確定原始數據
witness version
——例如通過雜湊字節的長度?witness version
如果 Alice知道地址類型 P2WPKH/P2WSH,她能確定原件嗎?在BIP-173中,作者強調了見證版本的重要性:
在將地址轉換為 scriptPubkey 時,實現應特別小心,其中見證版本 n 儲存為 OP_n。OP_0 編碼為 0x00,但 OP_1 到 OP_16 編碼為 0x51 到 0x60(十進制的 81 到 96)。如果將 bech32 地址轉換為不正確的 scriptPubKey,則結果可能無法使用或不安全。
我對 bech32 地址數據的理解在這裡正確嗎?
愛麗絲還能向鮑勃“發送可支配資金”嗎?
如果她在將地址轉換為她放入交易的 scriptPubKey 之前恢復了見證版本,是的。否則,沒有。
比特幣中的所有見證交易輸出(參見BIP141)都採用
OP_n <program>
其中 n 是 0 到 16 之間的數字的形式,程序是 2 到 40 個數據字節的推送。該程序的含義取決於版本(對於版本 0,它們是公鑰或腳本雜湊,但對於以後/未來的版本不一定如此)。BIP173 / BIP150見證地址只是對見證版本 n 和程序進行編碼的一種方式,以將其傳達給發送者。為了構造接收方可以花費的有效交易,OP_n 和程序推送都必須完全正確。
Alice 能否確定原始數據
witness version
——例如通過雜湊字節的長度?如果 Alice 知道地址類型 P2WPKH/P2WSH,她能否確定原始見證版本?理論上,沒有。在實踐中,有時。
目前定義了 3 種見證輸出類型:
- P2WPKH有見證版本0,有一個20字節的見證程序(即公鑰的SHA256+RIPEMD160)。
- P2WSH有見證版本0,有一個32字節的見證程序(即腳本的SHA256)
- P2TR 有見證版本 1,以及 32 字節的見證程序(這是一個 x-only 可能調整的公鑰,而不是雜湊),請參閱BIP341。
此外,有一條規則,見證版本 0 輸出的程序長度必須恰好為 20 字節或正好為 32 字節。版本 1 及更高版本沒有此類規則。未來的擴展可能會定義大小不是 32 的見證版本 1 的含義,或者可能定義見證版本 2 到 16 的含義。
所以現在,一個 20 字節的程序長度幾乎肯定意味著見證版本 0(任何人都可以使用其他任何東西,因為沒有定義任何條件)。但考慮到未來共識規則的變化會賦予意義,這是一個糟糕的假設。