Segregated-Witness
為什麼segwit bech32編碼器/解碼器的decode函式需要一個hrp(human readable part)作為輸入?
查看 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)。