区块链全节点/轻客户端,它们分别是什么?
虽然去中心化可能是区块链的基本属性,但实际上,目前大多数加密货币用户通过一个由中心化实体维护的 RPC 提供商连接到节点,进而连接到区块链中。
这样做虽然方便,但却违背了去中心化的初衷。中心化和依赖可信第三方的危险并不只是理论上或未来才会出现的,而是已经存在了。
例如,在 2022 年 8 月 OFAC 制裁了隐私协议 TornadoCash 后,托管了超过 60% 以太坊节点的中心化 RPC 提供商 Alchemy 和 Infura 立即阻止用户与 TornadoCash 进行交互。这意味着,任何使用小狐狸钱包的用户都无法访问TornadoCash。
除此之外,依赖中心化的 RPC 访问区块链还会使用户面临数据风险,这不仅有碍隐私,还可能导致资金损失。
这就是运行一个完整节点如此重要的原因:它能让用户直接、无信任地访问区块链,增强网络和用户的安全性。然而,由于需要大量资源,运行全节点并不总是像听起来那么简单。因此,开发人员投入了大量资源来研究轻客户端,并使其尽可能轻量。
基础背景知识
我们可以简单将区块链想象成一个帐本,一张纸则是一个区块,纸上的文字则是交易信息。
当我们在向其他人发送加密货币时,该交易需要被包含在一个区块中才能得到 “确认” 或最终结算。这里的结算是指区块已被矿工或验证者验证,并被网络中的所有其他计算机认可。
术语 “链” 指的是区块的记录方式,其中每个区块都与前一个区块以加密方式链接,形成不可更改的区块链。
之所以说链的历史是不可变的,是因为如果不改变所有后续区块,就无法改变区块中的数据,而这需要网络中大多数计算机达成共识。
这些计算机被称为「节点」。它们运行名为「客户端」的软件,该软件允许它们验证数据、接收信息和向运行客户端的其他节点广播信息,从而形成一个网络。

要运行区块链节点,用户需要下载访问特定区块链所需的客户端。例如,要运行比特币节点,用户必须下载最新版本的 Bitcoin Core 客户端,而要运行以太坊节点,用户可以在多个以太坊客户端中进行选择,目前最流行的是 Geth (go-ethereum)。
总而言之,如果用户想与以太坊协议进行交互,他们可以运行一个完整节点或使用第三方 RPC 节点提供商,如 Infura、Alchemy 或其他。
第一种方法可以让用户直接、无信任地访问协议,但需要更多的计算和存储资源。相比之下,后者的资源密集度较低(因此成为大多数用户的默认选择),但依赖于可信的第三方。第三种选择是运行轻节点(下载轻客户端),它力求在两者之间取得完美平衡。
全节点
“全节点” 是指存储和同步区块链「完整副本」的计算机,它通过独立验证交易和区块并将其转发给网络中的其他节点来参与共识过程。
由于完整节点会下载、验证和存储每个区块的全部内容和状态数据,因此运行它们需要大量的存储空间、内存和 CPU 能力。
例如,运行一个以太坊全节点 的最低要求是 2 TB SSD、8 GB 内存和Intel第七代或更高的处理器。对于比特币,全节点的要求要低得多,包括 2 GB 内存、500 GB 可用磁盘空间和低级 CPU。
轻节点
轻节点是通过轻客户端访问区块链的计算机。它们只下载区块头,而不是下载和验证每个区块的全部内容和状态数据并存储整个分类账本的副本。
区块大致由区块头和区块主体两部分组成。简单来说,区块主体包含完整的交易列表,而区块头只包含「有关区块内容的摘要信息」。
由于只下载区块头,因此需要存储的数据大幅减少,大幅减少了所需资源和时间。
如果一个轻节点想要验证一个特定的交易,它可以从全节点请求包含该交易的区块的数据。使用此交易数据和相应区块头中包含的 Merkle 根,轻客户端可以验证相关交易是否实际包含在该区块中。
当然,这也意味着,轻节点仍必须从某个提供者那里获取区块数据或区块头,无论是直接连接到全节点(比特币的典型做法)还是 RPC(以太坊的典型做法),但不必盲目信任它们。相反,它们可以独立验证交易,同时只需利用运行全节点所需的一小部分存储和计算要求。此外,由于轻节点不直接参与共识过程,它们必须依赖的安全假设要高于全节点。
总结
全节点虽然非常安全,但由于其资源需求而带来了挑战。相比之下,轻客户端提供了一种简化的方法,确保高效的区块链交互,而不需要大量的资源。