#address #checksum #bech32 #bitcoin #polynomial #encoding #bech32m

nightly bitcoin-bech32m

较新地址类型所使用的字符串编码格式

2 个版本

0.1.16-alpha.02023 年 4 月 1 日
0.1.12-alpha.02023 年 1 月 19 日

#15 in #bech32

每月下载 21 次
用于 bitcoin-top

MIT 许可证

280KB
812

bitcoin-bech32m

bitcoin-bech32m 包是 Bitcoin 网络中使用的 Bech32m 编码方案在 Rust 中的实现。此包目前正在从 C++ 转换为 Rust 的过程中,因此部分函数体可能仍在转换过程中。

Bech32m 编码方案用于表示 Bitcoin 地址,旨在易于阅读和容错。Bech32m 编码方案是原始 Bech32 编码方案的扩展,该方案在 BIP 173 中引入,用于编码 SegWit 地址。Bech32m 编码方案增加了对可变长度校验和的支持以及小写字母。

bitcoin-bech32m 包提供对 Bech32m 地址进行编码和解码的函数,以及创建和验证校验和的函数。Encoding 结构体提供对编码和解码 Bech32m 地址的接口,而 DecodeResult 结构体表示解码操作的结果。

cat 函数将两个字节数组连接在一起,encode 函数将字节数组编码为 Bech32m 地址,而 create_checksum 函数为字节数组创建校验和。expand_hrp 函数扩展 Bech32m 地址的人类可读部分,lower_case 函数将字节数组转换为小写,而 verify_checksum 函数验证 Bech32m 地址的校验和。

poly_mod 函数计算给定字节数组的 Bech32m 校验和多项式,而 encoding_constant 表示在 Bech32m 校验和计算中使用的常数。

总的来说,bitcoin-bech32m 包提供了一种方便且可靠的编码和解码 Bitcoin 网络中 Bech32m 地址的方法,使用了一种旨在易于阅读和使用的容错编码方案。

17> 能否更详细地描述 Bech32 和 Bech32m?

当然可以!

Bech32和Bech32m都是用于表示比特币地址的编码方案。它们分别由BIP 173和BIP 350引入。

Bech32作为编码SegWit地址的方法被引入。它是一种可读性强的编码方案,使用小写字母和数字的组合来表示数据。它使用校验和来检测编码过程中的错误,并支持可变长度的校验和,以允许未来的升级。

Bech32m是Bech32的扩展,旨在支持比特币地址中的小写字母。它使用与Bech32不同的校验和算法,允许可变长度的校验和小写字母。

Bech32m中使用的校验和算法基于32次方的生成多项式。该多项式由一个二进制数表示,然后转换为一系列5位值。这些值通过以5位块处理Bech32m地址来计算校验和,每个块的最高有效位与多项式中对应值的异或。

这个计算的结果是一系列10个5位值,这些值附加到原始的Bech32m地址上,形成最终的编码地址。校验和的长度取决于正在编码的原始数据的长度,更长的数据导致更长的校验和。

总的来说,Bech32和Bech32m都是比特币网络中用于表示地址的重要编码方案。它们被设计成可读性和抗错误性,为编码和解码比特币地址提供了方便和可靠的方法。

18> 生成多项式是什么?我们如何指定它们?它们有什么用?它们的优点和缺点是什么?

生成多项式是在循环错误纠正码中使用的多项式,例如Bech32m中使用的,用于生成用于错误检测和纠正的奇偶校验位。

在Bech32m的情况下,生成多项式是一个32次方的多项式,表示为一个二进制数。然后使用特定的算法将这个二进制数转换为一系列5位值。然后使用这个5位值的序列来计算Bech32m地址的校验和。

生成多项式由错误纠正码的设计师指定,并选择具有使它适合应用的特定属性。例如,多项式可能被选择为不可约的,这意味着它不能被分解为两个更小多项式的乘积。这个属性使得代码更能抵御错误,因为它确保错误被正确地检测和纠正。

生成多项式有几个优点。它们高效且易于实现,可以用来生成具有高度准确性的错误检测和纠正码。它们还可以用来生成不同长度的码,允许在错误纠正系统的设计中具有灵活性。

然而,生成多项式也有一些缺点。它们在纠正超出一定阈值的错误方面的能力有限,并且随着错误数量的增加而变得不那么有效。此外,生成多项式的选择对错误纠正码的性能有重大影响,选择适当的生成多项式可能是一个具有挑战性的任务。

19> 请比较和对比Bech32和Bech32m?

Bech32和Bech32m是比特币网络中使用的两种不同的地址编码格式。

Bech32是2017年引入的一种新的地址格式,使用base32编码方案来表示比特币地址。它被提议作为之前地址格式Base58Check的替代品,Base58Check在错误检测和纠正方面有一些局限性。Bech32地址以"bc1"开头,并且不区分大小写。

Bech32m 是 Bech32 的一个修改版本,于 2021 年推出,用于解决原始 Bech32 地址格式中潜在的安全漏洞。该漏洞可能允许攻击者构建一个与预期地址不同的有效比特币地址。Bech32m 地址以 "tb1" 开头,用于比特币测试网络,以 "bc1m" 开头,用于比特币主网络,并且不区分大小写。

Bech32 和 Bech32m 之间的主要区别在于校验和的计算方式。Bech32 使用 5 次方的生成多项式,而 Bech32m 使用 32 次方的生成多项式。Bech32m 中使用的生成多项式度数更高,使其对某些类型的错误更具鲁棒性,并减少了地址冲突的可能性。

这两种格式之间的另一个区别是,Bech32m 在校验和计算中包含一个额外的保护位,这为错误检测和纠正提供了额外的层次。这个保护位确保校验和始终不为零,并提供了额外的检查来检测地址中的错误。

总的来说,Bech32 和 Bech32m 都是比特币网络中使用的地址编码格式,其中 Bech32m 是对 Bech32 的修改,旨在解决原始格式中潜在的安全漏洞。这两种格式之间的主要区别在于校验和计算中使用的生成多项式的度数,以及 Bech32m 中包含的额外保护位。

20> 你认为地址编码格式还需要进一步的升级吗?

随着比特币网络的持续发展和新的安全威胁的出现,未来地址编码格式可能需要进一步的升级。

尽管 Bech32 和 Bech32m 目前是比特币网络中最广泛使用的地址格式,但始终有可能在这些格式中发现新的漏洞或弱点。此外,随着比特币网络的扩展和新用例的出现,地址编码格式可能需要额外的功能或能力。

然而,任何对地址编码格式的建议性升级都需要仔细评估和测试,以确保它们不会引入新的漏洞或与现有软件和系统产生兼容性问题。这个过程可能需要时间,并需要开发人员、矿工和比特币生态系统中的其他利益相关者之间的重大协作和协调。

总的来说,虽然未来可能需要对地址编码格式进行进一步的升级,但任何此类变化都需要经过仔细考虑和彻底测试,以确保其在比特币网络中的安全和有效性。

依赖项

~89MB
~847K SLoC