---
title: "轻客户端"
description: "以太坊轻客户端简介。"
lang: zh
---

运行全节点是与[以太坊](/)交互的最无须信任、最私密、最去中心化且最抗审查的方式。通过全节点，你可以保留自己的区块链副本以便即时查询，并能直接访问以太坊的点对点网络。然而，运行全节点需要大量的内存、存储空间和 CPU 资源。这意味着并非每个人都有条件运行自己的节点。以太坊路线图上有几种解决方案（包括无状态），但距离实施还有几年的时间。近期的解决方案是牺牲运行全节点的部分优势，以换取性能的大幅提升，从而允许节点在极低的硬件要求下运行。做出这种权衡的节点被称为轻节点。

## 什么是轻客户端 {#what-is-a-light-client}

轻节点是运行轻客户端软件的节点。它们不保留区块链数据的本地副本并独立验证所有更改，而是向某些提供商请求必要的数据。提供商可能是直接连接的全节点，也可能是通过某些中心化的 RPC 服务器。然后，轻节点会对数据进行验证，使其能够与链的头部保持同步。轻节点仅处理区块头，只是偶尔下载实际的区块内容。根据运行的轻客户端和全客户端软件的组合，节点的“轻量”程度可能会有所不同。例如，最轻量的配置是运行一个轻执行客户端和一个轻共识客户端。许多节点也很可能选择运行轻共识客户端和全执行客户端，反之亦然。

## 轻客户端如何工作？ {#how-do-light-clients-work}

当以太坊开始使用基于权益证明 (PoS) 的共识机制时，引入了专门支持轻客户端的新基础设施。其工作原理是每 1.1 天随机选择 512 名验证者组成一个子集，充当**同步委员会**。同步委员会对近期区块的区块头进行签名。每个区块头包含同步委员会中验证者的聚合签名，以及一个显示哪些验证者已签名、哪些未签名的“位域”。每个区块头还包含一个预计将参与下一个区块签名的验证者列表。这意味着轻客户端可以快速查看同步委员会是否已对他们接收到的数据进行了签名，并且他们还可以通过将接收到的同步委员会与上一个区块中预期出现的同步委员会进行比较，来检查该同步委员会是否真实。通过这种方式，轻客户端可以不断更新其对最新以太坊区块的了解，而无需实际下载区块本身，只需下载包含摘要信息的区块头即可。

在执行层上，轻执行客户端没有单一的规范。轻执行客户端的范围可以有所不同：它可以是全执行客户端的“轻模式”，具有全节点的所有 EVM 和网络功能，但仅验证区块头而不下载相关数据；也可以是一个更加精简的客户端，严重依赖于将请求转发给 RPC 提供商来与以太坊进行交互。

## 为什么轻客户端很重要？ {#why-are-light-clients-important}

轻客户端之所以重要，是因为它们允许用户验证传入的数据，而不是盲目信任其数据提供商是正确和诚实的，同时仅使用全节点极小一部分的计算资源。轻客户端接收到的数据可以与区块头进行核对，它们知道这些区块头已经由 512 名随机以太坊验证者集合中至少 2/3 的人签名。这是证明数据正确的非常强有力的证据。

轻客户端仅使用极少量的计算能力、内存和存储空间，因此可以在手机上运行、嵌入到应用程序中或作为浏览器的一部分。轻客户端是一种使对以太坊的信任最小化访问变得与信任第三方提供商一样顺畅的方法。

让我们举个简单的例子。假设你想查询你的账户余额。为此，你必须向以太坊节点发出请求。该节点将在其以太坊状态的本地副本中检查你的余额并将其返回给你。如果你无法直接访问节点，有一些中心化运营商会将此数据作为服务提供。你可以向他们发送请求，他们检查自己的节点，然后将结果发送回给你。这样做的问题在于，你必须信任提供商为你提供的是正确信息。如果你无法亲自验证，你永远无法真正知道信息是否正确。

轻客户端解决了这个问题。你仍然向某些外部提供商请求数据，但当你收到返回的数据时，它会附带一个证明，你的轻节点可以根据其在区块头中收到的信息来核对该证明。这意味着是以太坊在验证你数据的正确性，而不是某个受信任的运营商。

## 轻客户端能带来哪些创新？ {#what-innovations-do-light-clients-enable}

轻客户端的主要好处是，它能让更多人以微不足道的硬件要求和对第三方的最低依赖，独立地访问以太坊。这对用户来说是件好事，因为他们可以验证自己的数据；这对网络来说也是件好事，因为它增加了验证链的节点的数量和多样性。

在存储、内存和处理能力非常小的设备上运行以太坊节点的能力，是轻客户端解锁的主要创新领域之一。虽然如今的以太坊节点需要大量的计算资源，但轻客户端可以嵌入到浏览器中、在手机上运行，甚至可能在智能手表等更小的设备上运行。这意味着带有嵌入式客户端的以太坊钱包可以在手机上运行。这意味着移动钱包可以更加去中心化，因为它们不必信任中心化数据提供商来获取数据。

这方面的一个延伸是赋能**物联网 (IoT)** 设备。轻客户端可用于快速证明某些代币余额或 NFT 的所有权，并获得同步委员会提供的所有安全保证，从而触发物联网网络上的某些操作。想象一个[自行车租赁服务](https://youtu.be/ZHNrAXf3RDE?t=929)，它使用带有嵌入式轻客户端的应用程序来快速验证你是否拥有该租赁服务的 NFT，如果是，则为你解锁一辆自行车供你骑走！

以太坊汇总 (Rollup) 也将受益于轻客户端。汇总面临的一大问题是针对跨链桥的黑客攻击，这些跨链桥允许资金从以太坊主网转账到 Rollup。其中一个漏洞是汇总用来检测用户是否已向跨链桥存款的预言机。如果预言机提供错误数据，它们可能会欺骗 Rollup，使其认为跨链桥中有一笔存款，从而错误地释放资金。嵌入在 Rollup 中的轻客户端可用于防范受损的预言机，因为向跨链桥的存款可以附带一个证明，该证明可以在释放任何代币之前由 Rollup 进行验证。同样的概念也可以应用于其他跨链桥。

轻客户端还可用于升级以太坊钱包。你的钱包无需信任 RPC 提供商提供的数据，而是可以使用嵌入式轻客户端直接验证呈现给你的数据。这将增加你钱包的安全性。如果你的 RPC 提供商不诚实并向你提供了错误数据，嵌入式轻客户端可以告诉你！

## 轻客户端开发的现状如何？ {#current-state-of-development}

目前有几个轻客户端正在开发中，包括执行客户端、共识客户端以及执行/共识组合轻客户端。以下是我们在撰写本页面时所知的轻客户端实现：

- [洛德斯塔 (Lodestar)](https://github.com/ChainSafe/lodestar/tree/unstable/packages/light-client)：使用 TypeScript 编写的共识轻客户端
- [Helios](https://github.com/a16z/helios)：使用 Rust 编写的执行和共识组合轻客户端
- [Geth](https://github.com/ethereum/go-ethereum/tree/master/beacon/light)：使用 Go 编写的执行客户端轻模式（开发中）
- [尼姆巴斯 (Nimbus)](https://nimbus.guide/el-light-client.html)：使用 Nim 编写的共识轻客户端

据我们所知，目前这些实现都尚未达到生产就绪状态。

此外，还有大量工作正在进行，以改进轻客户端访问以太坊数据的方式。目前，轻客户端依赖于使用客户端/服务器模型向全节点发出 RPC 请求，但在未来，可以使用专用网络（例如[波特尔网络 (Portal Network)](https://www.ethportal.net/)）以更加去中心化的方式请求数据，该网络可以使用点对点流言协议向轻客户端提供数据。

其他[路线图](/roadmap/)项目（如[沃克尔树](/roadmap/verkle-trees/)和[无状态](/roadmap/statelessness/)）最终将使轻客户端的安全保证与全客户端同等。

## 延伸阅读 {#further-reading}

- [Zsolt Felfodhi 谈 Geth 轻客户端](https://www.youtube.com/watch?v=EPZeFXau-RE)
- [Etan Kissling 谈轻客户端网络](https://www.youtube.com/watch?v=85MeiMA4dD8)
- [Etan Kissling 谈合并后的轻客户端](https://www.youtube.com/watch?v=ZHNrAXf3RDE)
- [Piper Merriam：通往功能性轻客户端的曲折之路](https://snakecharmers.ethereum.org/the-winding-road-to-functional-light-clients/)