Address

是否需要 bech32 地址的見證“版本”才能將可花費的資金“發送”到該地址?

  • September 12, 2022

假設 Alice 擁有 Bob 的 bech32 地址(BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4)。在對地址進行解碼後, Alice 知道該地址有一個witness versionAND0字節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(任何人都可以使用其他任何東西,因為沒有定義任何條件)。但考慮到未來共識規則的變化會賦予意義,這是一個糟糕的假設。

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