0.3. 区块与节点¶
0.3.1. 一个区块由什么组成?¶
区块链只是一个区块的链表,其中链表的每个链接都有一个相关的哈希码。 我们已经看到了这些哈希码如何提供一种机制来保护区块链,使其不易被修改而不被人察觉。 现在让我们谈谈在典型应用中,区块链上某个区块中可能包含什么。
下图提供了给定区块中可能找到的主要组件的可视化分解。 没有哪个应用会使用所有这些组件。 图表下方附有每个项目的简要总结。
区块大小: 给定区块的大小(以字节为单位存储)。
区块头: 区块的内部对象,包含相关元数据。
版本: 描述版本/协议版本。
前一个区块哈希: 前一个区块的根哈希。
默克尔根: 默克尔树根节点的哈希 (参见 默克尔树)。
时间戳: 区块创建的时间戳。
难度目标: 区块被挖出时难度的数字表示。
随机数(Nonce): 用于生成准确哈希的密码学密钥。
交易计数器: 区块中的交易数量。
交易: 单个交易的集合。
0.3.2. 完整节点与薄节点以及节点社区¶
为什么要用区块链? 我们已经看到区块链的主要区别之一在于,如果任何内容被修改,那么任何知道初始哈希指针值并能看到区块链内容的人都可以验证这一点。 这引出了一个问题:你为什么会担心内容可能被修改?
区块链最典型的使用场景是在:ref:公共账本 <Ledgers> 的上下文中。 这是一种公开整个区块链的应用。 在有些此类应用中,只有一个中心化的受信任机构可以更改区块链的内容,篡改不是一个问题。 在其他应用中(如加密货币),许多方被允许更改账本,但其中没有太多信任。 这很难做到正确,属于:ref:共识算法 <Consensus> 的领域。 现在只要接受有办法处理这些更新即可,但涉及的公共方可能想要也可能不想要验证区块链是自洽的。
还有另一个实际约束:一些区块链真的非常大。 例如,到 2020 年,比特币的公共账本(包括其交易历史)已达数百 GB。 这意味着无论存储(空间)、搜索(时间)还是验证其一致性(又是时间)都很昂贵。
幸运的是,规模较大的区块链应用很可能会吸引一个重要的社区。 运营一个大型去中心化区块链需要社区多个成员之间的协调。 这些成员有时被称为网络中的"节点"。
一个 完整节点 包含整个区块链及其内容。 这包括每个区块的完整记录,包括每个区块内存储的所有交易,正如我们提到的,在比特币的情况下这是数百 GB 的数据。 完整节点能够检查区块链一致性的有效性,因此也可以评估提议附加到区块链的新区块的有效性。 这对社区是一个重要的保障,但不是每个参与者都觉得有必要自己这样做。
社区中的许多参与者将托管一个只存储每个区块所需元数据的 薄节点。 这包括每个区块的哈希指针,以及其他描述性数据(添加到区块链的时间等),持有人认为对其需求是必要的。 他们也可能持有他们特别感兴趣的交易副本,以及足够的信息来验证这些交易确实是区块链的一部分(我们将在 简化支付验证 中进一步讨论)。 薄节点的目的是让区块链网络更容易扩展,而不是要求每个节点都是完整节点。 比特币钱包就是一个薄节点的例子。 薄节点可以在需要时依赖完整节点为它们提供交易验证。
第三种类型的节点是那种可能提议向区块链添加新区块的节点,具体取决于所使用的共识算法。
生态系统中还有其他社区成员可以发挥重要作用。 例如,比特币有一些被称为"区块浏览器"的相关实体,它们将交易组织成可搜索的数据库,以实现对感兴趣交易的高效查找。
