编码 | 解码 | 压缩

> bech32 | segwit | bc1 <

// Bech32 - 带错误检测的 Bitcoin SegWit 地址编码

[SEGWIT]

比特币地址

用于以 bc1 开头的原生比特币 SegWit 地址格式。

[ERROR-DETECTION]

更强的错误检测

相比 Base58Check,更容易发现并定位输入中的错误。

[CASE-INSENSITIVE]

适合二维码

全小写设计让二维码更紧凑,也更易于扫描。

>> 技术详情

Bech32 的工作原理:

Bech32 使用 32 个字符的字母表(去掉容易混淆的字符),并结合 BCH 码进行错误检测。地址由人类可读部分(HRP)、分隔符 1、数据部分以及 6 位校验和组成。

结构示例:

bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4 bc = HRP(比特币主网) 1 = 分隔符 qw508d = 数据(5 位分组) kv8f3t4 = 校验和(最后 6 个字符)

为什么使用 Bech32:

  • >比特币 SegWit 地址
  • >闪电网络发票
  • >加密货币地址
  • >更抗错误的编码
  • >二维码显示优化

>> 常见问题

什么是 Bech32?

Bech32 是一种带校验和的 base32 编码格式,主要用于比特币的 SegWit 地址。它相比早期的地址格式拥有更好的错误检测能力,更不容易输错。

Bech32 和 Bech32m 有什么区别?

Bech32m 是在原始 Bech32 校验和算法上的改进版本,用来修复一个弱点。Taproot 地址(以 bc1p 开头)使用 Bech32m,而早期的 SegWit 地址使用 Bech32。

为什么 Bech32 地址都是小写?

只使用小写字符可以生成更小的二维码,也更方便人工输入。格式本身不区分大小写,但规范上推荐使用小写以保持一致。

什么是 HRP?

HRP(Human Readable Part,人类可读部分)用于标识地址类型和网络。例如 bc 表示比特币主网,tb 表示测试网,ltc 表示莱特币。

// 速查表

value字符
0 8 16 24q g s c
1 9 17 25p f 3 e
2 10 18 26z 2 j 6
3 11 19 27r t n m
4 12 20 28y v 5 u
5 13 21 299 d 4 a
6 14 22 30x w k 7
7 15 23 318 0 h l

// 代码示例

Charset    qpzry9x8gf2tvdw0s3jn54khce6mua7l   (32 symbols, no 1 b i o)
Format     <hrp> + "1" + <data> + <6-char checksum>   (max 90 chars)
HRP        bc (Bitcoin) | tb (testnet) | ltc (Litecoin) | lnbc (Lightning)
Checksum   Bech32 constant 1  (BIP-173)  |  Bech32m constant 0x2bc830a3  (BIP-350)
Example    bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4

>> 更多问题

问:Bech32 和 Bech32m 有什么区别?

答:格式和字符集相同,但校验和常数不同:Bech32(BIP-173)使用 1,Bech32m(BIP-350)使用 0x2bc830a3。Bech32m 用于 SegWit v1 及以上,即 Taproot(bc1p…);Bech32 用于 v0(bc1q…)。

问:Bech32 字母表为什么没有 1、b、i、o?

答:32 个字符 qpzry9x8gf2tvdw0s3jn54khce6mua7l 去掉了易混淆的符号:1 用作分隔符,b、i、o 与 6、1、0 相似。编码只能全小写或全大写,不能混用。

问:Bech32 校验和检错能力如何?

答:6 个校验字符基于 BCH 码,能确保检出不超过 4 个字符的任何错误,查找输入错误的能力远好于 Base58Check。长度限制为 90 个字符。

其他语言