Segregated-Witness

為什麼segwit bech32編碼器/解碼器的decode函式需要一個hrp(human readable part)作為輸入?

  • January 10, 2019

查看 bip-0173 中引用的程式碼,特別是這裡的範例: https ://github.com/sipa/bech32/blob/master/ref/javascript/segwit_addr.js

 function decode (hrp, addr) {
     var dec = bech32.decode(addr);
     if (dec === null || dec.hrp !== hrp || dec.data.length < 1 || dec.data[0] > 16) {
       return null;
     }
     ...

我知道這是一個錯誤檢查語句,但為什麼要檢查(使用者?)輸入的 hrp 與來自 bech32.decode 的解碼 hrp?

另外我假設“dec.data [0] > 16”檢查是為了確保索引零處的字節不超過16的值,這將是無效的十六進制。它是否正確?

HRP 是 bech32 編碼字元串的一部分,在 bech32 解碼 API 中,解碼器在檢查校驗和後將其與有效負載一起返回。

我們仍然想將它與 BIP173 中的預期 HRP 進行比較,它編碼了軟體正在執行的鏈。

否則,您可以擁有一個接受主網 BIP173 地址或其他方式的測試網節點。

我假設“dec.data [0] > 16”檢查是為了確保索引零處的字節不超過16的值,這將是無效的十六進制。它是否正確?

不,這是因為僅指定了版本 0 - 16。其他版本的行為可能完全不同。(順便說一句,如果為了限制單個十六進製字元的範圍而進行比較,則測試將> 15而不是> 16)。

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