比特币开发系列 - 比特币网络 #1

理解比特币不同的网络

通常,普通的比特币持有者并不知道存在多个区块链。大多数人透明地连接到主网络,因为钱包软件默认在真实价值的网络运行。事实上,你将发现 3 个不同的比特币网络,它们各自具有自己的特点。

平行宇宙

作为用户,我希望你知道比特币由庞大的点对点网络支持。更准确地说,有 2 个公共子网络:

  • 主网(Mainnet)
  • 测试网3(Testnet3)

带有“3”后缀表示第 3 代测试网。在正常操作中,钱包客户端连接到主网,这是唯一一个比特币在现实生活中具有具体价值的网络。测试网的名称不言而喻,它是测试和软件开发的最佳选择,因为测试币毫无价值。

第三个网络是一个虚拟网络,称为 回归测试网络(Regtest) 。该名称代表“回归测试”,它是比特币核心的一种特定模式,其中本地区块立即被挖掘。因此,回归测试与主网和测试网3 有很大不同,主网和测试网3 中矿工必须遵守一定的共识规则。快速区块让回归测试变得有趣:它使得可以使用极少的处理能力创建自定义区块链。

识别网络

主网和测试网 3 主要在 p2p 访问的默认 TCP 端口和传输数据包的前缀(小端)上有所不同:

  端口 数据包前缀
主网 8333 f9 be b4 d9
测试网3 18333 0b 11 09 07

此外,测试网3 的验证规则要宽松得多,从而为实验性交易留出空间。

除了创世区块,区块链完全与网络无关。也就是说,区块和交易不包含任何关于其所在网络的信息。仅凭交易数据本身无法确定广播交易的网络。顺便说一句,交易可以原样发布到主网和测试网3。

为了避免歧义,用户共享的实体(即私钥和地址)通过添加魔术前缀使其依赖于网络。稍后我们将学习这些前缀是什么,以及它们如何影响密钥和地址的显示方式。

Base58 编码

有些实体即使是普通比特币用户也必须处理:密钥和地址。为了使它们比十六进制更短且稍微更易读,比特币引入了 Base58 编码。Base58 是 Base64 的简化版本,Base64 是一种广泛使用的方案,用于在 ASCII 文本中显示二进制数据。以下是 Base58 的不同之处:

  • Base58 只包含字母数字符号,不包括 +/
  • Base58 排除 0OIl 以避免视觉歧义。
  • Base58 字符串可以通过双击来完全选择。
  • Base58 符号值遵循 ASCII 排序。

完整的 Base58 字母表:

字符 字符 字符 字符
0 1 15 G 30 X 45 n
1 2 16 H 31 Y 46 o
2 3 17 J 32 Z 47 p
3 4 18 K 33 a 48 q
4 5 19 L 34 b 49 r
5 6 20 M 35 c 50 s
6 7 21 N 36 d 51 t
7 8 22 P 37 e 52 u
8 9 23 Q 38 f 53 v
9 A 24 R 39 g 54 w
10 B 25 S 40 h 55 x
11 C 26 T 41 i 56 y
12 D 27 U 42 j 57 z
13 E 28 V 43 k    
14 F 29 W 44 m    

有了这样的映射,Base58 编码只是一个数字基数转换。唯一棘手的部分来自大数字,正如在 base58.h 中所见。请注意字节序,与大多数区块链对象相反,Base58 字符串是大端编码的。

Base58Check

由于 Base58 字符串很长且不友好,通常会附加校验和后缀以避免输入错误。校验和由 hash256(有效负载)的前 4 个字节组成。格式(有效负载 + 校验和)称为 Base58Check。步骤:

  1. 对有效负载字节执行 hash256。
  2. hash256 摘要的前 4 个字节是校验和。
  3. 将校验和附加到有效负载。
  4. 将结果编码为 Base58。

Base58Check 示例将在第二部分中讨论。

获取代码

完整源代码在 GitHub 上。

下一篇

你已经了解到有 3 个不同的比特币网络。真实货币流通在主网上,而测试货币存放在测试网3 上。回归测试用于测试本地的自定义区块链。所有用于比特币转账的长字符串都是 Base58 编码的。

下一篇文章中,我将通过键序列化和 地址(典型的交易终点)完成整体图景。如果你喜欢这篇文章,请分享。

我是 AI 翻译官,为大家转译优秀英文文章,如有翻译不通的地方,在这里修改,还请包涵~

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Davide De Rosa
Davide De Rosa
江湖只有他的大名,没有他的介绍。