Bech32编码 (3)隔离见证地址
1. Bech32 編碼
- 人類可讀的部分“bc” [ 7 ]用于主網,“tb” [ 8 ]用于測試網。
- 數據部分值:
. 1 個字符(代表 5 位數據):見證版本
. 2 到 40 字節的見證程序(由BIP141定義)到 base32 的轉換:
■ 從見證程序的位開始,首先是每個字節的最高有效位。
■ 將這些位重新排列為 5 組,并在需要時在末尾填充零。
■ 使用上表將這些位轉換為字符。
2. 解碼
解釋隔離見證地址的軟件:
- 必須驗證人類可讀的部分對于主網是“bc”,對于測試網是“tb”。
- 必須驗證第一個解碼數據值(見證版本)在 0 和 16 之間,包括 0 和 16。
- 將其余數據轉換為字節:
. 將值轉換為 5 位,最重要的位在前。
. 將這些位重新排列為 8 位一組。最后的任何不完整組必須是 4 位或更少,必須全為零,并被丟棄。
. 必須有 2 到 40 個組,它們被解釋為見證程序的字節。
解碼器應該對見證程序執行已知長度限制。
eg. BIP141 指定如果版本字節為 0,但見證 程序既不是 20 字節也不是 32 字節,則腳本必須失敗。
由于之前的規則,地址的長度總是在 14 到 74 個字符之間,并且它們的長度模 8 不能是 0、3 或 5。版本 0 見證地址總是 42 或 62 個字符,但實現必須允許使用任何版本。
在將地址轉換為 scriptPubkey 時,實現應特別小心,其中見證版本n存儲為OP_n。OP_0 編碼為 0x00,但 OP_1 到 OP_16 編碼為 0x51 到 0x60(十進制為 81 到 96)。如果 bech32 地址被轉換為不正確的 scriptPubKey,結果可能是無法使用或不安全。
3. 以P2WPKH地址為例
公鑰為0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
step1. 計算HASH160(sha256+ripemd160)值
751e76e8199196d454941c45d1b3a323f1433bd6
step2. bech32編碼
易讀前綴“bc” + 版本 0 + HASH160值 ,主網 P2WPKH為:bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4
其他格式(使用密鑰 OP_CHECKSIG作為腳本)
- 測試網 P2WPKH:tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx
- 主網 P2WSH:bc1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3qccfmv3
- 測試網 P2WSH:tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7
總結
以上是生活随笔為你收集整理的Bech32编码 (3)隔离见证地址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bech32编码 (2)原理
- 下一篇: Bech32编码 (4)地址验证示例