什么是 bech32 编码 / 解码器?
bech32 编码 / 解码器在原始字节与 BIP-173 字符串格式之间转换。该格式由人类可读部分(bc、ltc、lnurl、npub)、分隔符 1、以 32 字符字母表表示的 5 位分组数据,以及 6 个字符的 BCH 校验和组成。Bech32m(BIP-350)是同一格式但使用不同的校验和常量,SegWit 版本 1 及以上(Taproot bc1p…)必须使用它。
实例演示
见证程序 751e76e8199196d454941c45d1b3a323f1433bd6,版本 0,hrp 为 bc,编码后得到 bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4,即 BIP-173 的参考地址。解码它会得到版本 0、一个 20 字节的程序以及编码类型 bech32。同一程序若使用版本 1,则需要 bech32m,并以 bc1p 开头。
bech32 的应用场景
- 比特币:bc1q(P2WPKH、P2WSH)、bc1p(P2TR),测试网为 tb1,regtest 为 bcrt1。
- 莱特币:ltc1。其他链:Cosmos(cosmos1…)、Cardano(addr1…)、Zcash 统一地址、Harmony(one1…)使用同一方案,但有各自的载荷,有时长度上限也更长。
- 闪电网络:BOLT11 发票(lnbc…)是不受 90 字符限制的 bech32;LNURL 以 hrp lnurl 把 URL 包装成 bech32。
- Nostr:npub、nsec、note 和 nprofile 标识符(NIP-19)。
bech32、bech32m 与 Base58Check 的区别
| 编码 | 校验和 | 纠错检测 | 典型用途 |
|---|---|---|---|
| bech32(BIP-173) | 6 个字符,常量 1 | 90 字符内最多 4 处替换错误可保证检出 | bc1q SegWit v0、LNURL、闪电发票、npub |
| bech32m(BIP-350) | 6 个字符,常量 0x2bc830a3 | 同上,并修复了末尾 p 之前的插入漏洞 | bc1p Taproot、SegWit v1 及以后 |
| Base58Check | 双重 SHA-256 的 4 字节 | 概率性,无保证 | 比特币 1… 和 3…、Tron T…、XRP |
常见错误
- 大小写混用。
bc1Qw508…无效;字符串必须全小写或全大写。 - 校验和类型用错。版本 1 的程序若用 bech32 而非 bech32m 编码,生成的字符串会被钱包拒绝。
- 误读分隔符。人类可读部分后面的
1是分隔符,不是数据;数字 1 永远不会出现在载荷字母表中。 - 把 5 位分组当作字节。解码出的数据必须从 5 位重新组合为 8 位值;SegWit 程序会丢弃填充位,而 LNURL 保持严格的字节对齐。
要验证完整的比特币地址(包括 Base58 传统格式),请使用比特币地址验证器。