轻客户端
上次修改时间: @maxwellcotto(opens in a new tab), 2024年8月12日
运行全节点是与以太坊交互时最具去信任性、私密、去中心化而且抗审查性的方式。 借助全节点,你可以保留自己的区块链副本,从而即时查询并直接访问以太坊的点对点网络。 然而,运行全节点需要大量的内存、存储空间和 CPU 资源。 这意味着并不是每个人都能够运行自己的节点。 以太坊的发展路线图提供了多种解决方案,其中包括无状态性,但它还需要几年才能实现。 近期能实现的解决方法是放弃一些全节点的优点,以换取大幅度的性能提升,从而使节点可以在非常低的硬件要求下运行。 使用轻节点就是经权衡的做法。
什么是轻客户端?
轻节点是指运行轻量级客户端软件的节点。 它们不保留区块链数据的本地副本,也不独立验证所有更改,而是向一些提供商请求必要的数据。 提供商可能直接或通过某些中心化远程过程调用服务器和全节点连接。 然后,轻节点会验证数据,使其和链头保持同步。 轻节点仅处理区块头,只会偶尔下载实际的区块内容。 节点的轻量程度可能有所不同,具体取决于它们所运行的轻客户端和完整客户端软件的组合。 例如,最轻量级的配置可能是运行一个轻量级执行客户端和一个轻量级共识客户端。 许多节点也可能选择运行轻量级共识客户端和完整的执行客户端,或者轻量级执行客户端和完整的共识客户端。
轻客户端如何运作?
以太坊在采用基于权益证明的共识机制时,引入了专门用于支持轻客户端的全新基础架构。 其工作原理是每隔 1.1 天随机选择一个包含 512 个验证者的子集,用于充当同步委员会。 同步委员会会在最新区块的头部签名。 每个区块头包含同步委员会中所有验证者的聚合签名,以及显示已签名和未签名验证者的“位域”。 每个区块头还包含预计参加下一个区块签名的验证者列表。 这意味着轻客户端可以迅速查看同步委员会是否已经为收到的数据提供签名,而且它们还可以通过比较收到的信息和在上一个区块中得到的预期信息,来验证同步委员会的真实性。 这样,轻客户端就可以不断更新其对最新以太坊区块的了解,而无需下载区块本身,因为区块头就包含有摘要信息。
在执行层,没有针对轻量级执行客户端的单一规范。 轻量级执行客户端的范围可以是完整的执行客户端的“轻量级模式”,具有全节点的所有以太坊虚拟机和网络功能,但只验证区块头而不下载相关数据;它也可以是更简化的客户端,极度依赖向远程过程调用转发请求以便和以太坊进行交互。
为什么轻客户端很重要?
轻客户端之所以重要,是因为它们允许用户验证传入的数据,而不是盲目地相信数据提供商是正确和诚实的,同时只使用全节点的一小部分计算资源。 轻客户端会将收到的数据和区块头进行比对,因为它们知道这些区块头已由随机的 512 个以太坊验证者中至少 2/3 的验证者签名。 这非常有力地证明数据是否正确。
轻客户端只使用极少的计算能力、内存和存储空间,因此可以在手机上运行,也可以嵌入到应用或浏览器。 轻客户端是一种使以太坊访问信任最小化的方式,和信任第三方提供商一样流畅。
让我们举一个简单的例子。 假设你想查看帐户余额, 你为此必须向以太坊节点发出请求。 该节点将检查其本地的以太坊状态副本,查看余额并返回给你。 如果你无法直接访问节点,将有中心化运营商提供这些数据并将其作为一项服务。 你可以向他们发送请求,他们会检查自己的节点,然后将结果发回给你。 这样做的问题是,你必须相信提供商会向你提供正确的信息。 如果不能亲自验证,你将永远无法知道这些信息是否正确。
轻客户端可以解决这个问题。 你仍然可以向外部提供商请求数据,所收到的数据将附带证明,而你的轻节点可以对照它在区块头中收到的信息核实该证明。 这意味着以太坊会验证数据的正确性,而不是由其他可信的运营商来验证。
轻型客户端能带来哪些创新?
轻客户端的主要优点在于能让更多人独立访问以太坊,对硬件的要求几乎可以忽略不计,而对第三方的依赖也降到最低。 这对用户有好处,因为他们可以验证自己的数据;对网络也有好处,因为它增加了验证链的节点数量和多样性。
能够在存储空间、内存和处理能力都非常小的设备上运行以太坊节点,这是轻客户端开启的主要创新领域之一。 如今,以太坊节点需要大量计算资源,而轻客户端可以嵌入到浏览器、在手机上运行,甚至可能在智能手表等更小的设备上运行。 这意味着带有嵌入式客户端的以太坊钱包可以在手机上运行。 因为移动钱包不必信任其数据的中心化提供商,所以它们可以更加分散。
启用物联网 (IoT) 设备是它的延伸。 借助同步委员会提供的所有安全保证,轻客户端可被用于快速证明某些代币余额或非同质化代币的所有权,从而触发物联网网络上的某些操作。 试想一下,自行车租赁服务(opens in a new tab)使用带有嵌入式轻客户端的应用程序快速验证你是否拥有租赁服务的非同质化代币;如果是,则为你解锁一辆自行车,让你骑走!
以太坊卷叠也将受益于轻客户端。 以太坊卷叠存在一些严重问题,其中之一是黑客会攻击允许资金从以太坊主网转移到卷叠的链桥。 卷叠用来检测用户是否已存款到链桥的预言机是它的一个漏洞。 如果预言机馈送错误数据,它们会使卷叠误以为用户已存款到链桥并错误地释放资金。 嵌入到卷叠的轻客户端可被用于防范遭破坏的预言机,因为存入链桥的存款可能附带证明,而卷叠可在释放任何代币前对该证明进行验证。 同样的概念也可适用于其他链间桥。
轻客户端还可用于升级以太坊钱包。 你的钱包可以使用嵌入式轻客户端直接验证提供给你的数据,使你不必信任由远程过程调用提供商所提供的数据。 这将为你的钱包增加安全保障。 如果你的远程过程调用提供商不诚实并向你提供了错误的数据,嵌入式轻客户端将会告知你!
轻客户端开发的现状如何?
正在开发的轻客户端有很多种,包括执行、共识和结合执行/共识的轻客户端。 以下是我们在撰写本页时所知的轻客户端实现:
- Lodestar(opens in a new tab):TypeScript 中的共识轻客户端
- Helios(opens in a new tab):Rust 中的执行和共识组合轻客户端
- Geth(opens in a new tab):Go 中执行客户端(开发中)轻量级模式
- Nimbus(opens in a new tab):Nim 中的共识轻客户端
据我们所知,这些轻客户端都还没部署到生产环境。
轻客户端访问以太坊数据的方式还有很大改进空间。 目前,轻客户端依赖于使用客户端/服务器模式向全节点发出远程过程调用请求,但将来可以借助专用网络(如门户网络(opens in a new tab))以更加去中心化的方式请求数据,该网络可以使用点对点广播协议向轻客户端提供数据。
其他路线图项,如沃克尔树和无状态性等,终将为轻客户端带来与全客户端同等的安全保障。