什么是轻客户端,为什么要关心?

653 阅读9分钟

image.png

轻客户端是区块链生态系统中的关键元素。 它们帮助用户以安全和分散的方式访问区块链并与之交互,而无需同步整个区块链。 在这篇文章中,我将用简单的语言解释什么是轻客户端,它不是什么,以及它来自哪里。

在谈论什么是轻客户端之前,让我们先来澄清一下什么是客户端。 计算机科学中的客户端是连接到服务器的硬件或软件。 例如,互联网浏览器是一个客户端——它连接到网站的服务器以请求其内容。 在区块链的上下文中,客户端是一种以点对点方式连接到其他客户端的软件。 因为所有这些客户端都相互通信,所以它们形成了一个网络,其中每个客户端都是一个节点。 这就是为什么也使用术语节点来代替客户端的原因。

在以太坊的情况下,过去只有一种类型的节点,现在称为全节点。 该软件负责验证和中继网络上的交易和区块。 由于去信任的环境(开放的互联网)和区块链的性质,每个完整节点都需要下载和验证每个区块,因此每个区块中的每笔交易都需要下载和验证。

Parity Ethereum 和 Geth 这两个最受欢迎的以太坊客户端,现在都可以在功能中等的笔记本电脑上运行。 但是,下载和验证整个区块链需要时间和资源。 例如,现在需要使用 SSD 来完全同步以太坊区块链。 HDD 无法满足每秒所需的输入/输出操作。

全节点的用例

如今,组织和个人运行完整节点是因为他们的业务需要它。 想想矿工、区块浏览器、交易所。 个人用户可能想要运行一个完整的节点,因为它是与区块链交互的最安全的方式。 在更小的规模上,他们也可能通过纯粹的利他主义来帮助网络。 运行一个完整的节点 24/7 需要大量的知识和资源,这是可以理解的,大多数用户不愿意投资。 除了矿工之外,没有内在的激励来运行一个完整的节点,尽管这块基础设施对网络至关重要。

因此,大多数与区块链交互的用户将自愿或不自愿使用集中式基础设施。 最受欢迎的软件钱包默认依赖第三方托管节点。 这些客户端连接到远程节点并以未经加密验证的方式完全信任其响应。 它的积极方面显然是增强了用户体验,因为这些钱包的用户不需要运行自己的节点。 但是,他们被迫信任第三方节点。 Metamask、MyEtherWallet 和 MyCrypto 默认连接到远程节点,但如果用户愿意,仍允许用户连接到自己的本地节点。 Jaxx 或 Exodus 钱包不是这种情况,它们默认连接到远程节点,没有连接到用户自己的本地节点的选项。 此处未提及手机钱包,因为手机无法运行完整节点。

Infura 等公司致力于运行完整的节点,并将它们免费提供给需要它们的人。 将同步完整节点的麻烦抽象化,任何用户都可以毫不费力地访问区块链。 此类解决方案有助于使更多用户可以访问以太坊。 然而,尽管这一举措是对生态系统的一个很好的补充,但它代表了一个中心化的单点故障,与去中心化的区块链理念背道而驰。 直到几个月前,钱包开发者别无选择。

轻量级替代方案:轻客户端

轻客户端或轻节点是一种连接到完整节点以与区块链交互的软件。 与全节点不同,轻节点不需要 24/7 全天候运行或在区块链上读写大量信息。 事实上,轻客户端不直接与区块链交互; 他们改为使用完整节点作为中介。 轻客户端依赖完整节点进行许多操作,从请求最新的标头到询问账户余额。

轻客户端协议的设计方式允许它们以信任最小化的方式与完整节点交互。 这是理解的一个关键方面,所以让我们退后一步来回顾一下以太坊区块链的基础知识:

  • Regular users send transactions on the network using full nodes, light nodes, or trusted remote nodes.

  • Full nodes receive transactions from their peers on the network, check the validity of these transactions, and broadcast them to the network.

  • Miners are full nodes attached to a specific software. They receive and verify the transactions from the network like a regular full node, but additionally invest a lot of energy to find the solution to a problem to be allowed to author the next block.
    The full nodes used by miners achieve consensus on which block should be added to the blockchain and built on top of. Any block which has at least 10 blocks built on top of it is considered secure in the sense that the transactions it contains have a very low probability of being reverted.

  • 普通用户使用完整节点、轻节点或受信任的远程节点在网络上发送交易。

  • 全节点从网络上的对等节点接收交易,检查这些交易的有效性,并将它们广播到网络。

  • 矿工是附加到特定软件的完整节点。 他们像普通的全节点一样接收和验证来自网络的交易,但另外投入大量精力来找到问题的解决方案,以允许创建下一个块。

    矿工使用的完整节点就应该将哪个区块添加到区块链并在其上构建达成共识。 任何在其上构建了至少 10 个区块的区块都被认为是安全的,因为它包含的交易被还原的可能性非常低。

现在,回到我们的轻客户端。作为起点,轻客户端需要下载区块链的区块头。轻客户端不需要对它向全节点发出的每个请求都信任全节点。这是因为区块头包含一条称为 Merkle 树根的信息。 Merkle 树根就像区块链上关于账户余额和智能合约存储的所有信息的指纹。如果任何一点点信息发生变化,这个指纹也会发生变化。假设大多数矿工都是诚实的,那么区块头以及它们所包含的指纹就被认为是有效的。轻客户端可能需要从全节点请求信息,例如特定账户的余额。知道每个区块的指纹后,轻客户端可以验证全节点给出的答案是否与其拥有的指纹匹配。这是在事先不知道信息的情况下证明信息真实性的强大工具。

由于轻客户端需要发送多个请求来进行简单的操作,因此所需的整体网络带宽高于全节点。 另一方面,所需的资源和存储量比全节点低几个数量级,同时实现了非常高的安全性。 只需大约 100 MB 的存储空间和低计算能力,轻节点就可以在移动设备上运行! 这意味着手机可以以去中心化的方式访问区块链。

由于它需要完整节点的一小部分信息,因此轻节点可以更快地与区块链同步。目前,将整个以太坊主网区块链与轻客户端同步大约需要一个小时,但是对于任何应用程序来说,同步节点超过几秒钟就太长了。为轻客户端开发的解决方案可以快速与区块链顶部同步,尽管这些解决方案通常包括权衡。目前,轻客户端在其代码中内置了一个受信任的区块链检查点。多亏了这一点,客户端只需要下载最新的标头,就可以在几秒钟内实现同步。轻客户端用户信任客户端开发人员集成有效的检查点。这种折衷被认为是可以接受的,因为用户已经需要信任开发人员来实现客户端。为了以分散的方式快速执行同步,Parity Technologies 目前开发了一种替代解决方案,允许轻客户端以类似于完整节点的方式执行 warp-sync。

轻客户的挑战

轻客户端非常适合主流用途,例如发送一些交易和验证账户余额。 对轻客户端的主要批评是轻客户端不直接帮助网络。 除了为自己的目的而需要的信息之外,他们不会验证任何其他信息,他们不会从网络向其他对等方提供或中继信息,并且他们使用来自完整节点的资源而不给予任何交换。

与全节点相比,轻客户端提供了更好的终端用户体验,同时让终端用户以去中心化和安全的方式访问区块链。 关键是想办法激励个人和机构运行全节点,服务轻节点,惩罚服务不良数据的恶意全节点。 使轻客户端可持续发展的一种方法是让他们为向全节点发出的每个请求执行小额支付。 在不久的将来,轻客户端将在以太坊分片中发挥重要作用,让验证者快速同步不同的分片。 轻客户端也可用于报告恶意行为者(验证者或等离子权威机构)。 轻客户端的全节点激励是一个活跃的研究领域,因为激励是生态系统稳定的关键。

有一些很有前途的想法可以让轻客户端快速同步,同时避免上述权衡。 一种想法是允许全节点提供最新已知标头的零知识证明(例如,zk-STARK)。 然后,轻客户端可以验证它并与链的顶部同步,而无需事先了解区块链状态。

总而言之,轻客户端将在短期内成为去中心化应用的支柱,这对于用户友好的去中心化生态系统来说是一个非常好的消息。