前序博客:
去中心化和自我主权对于Web3的未来至关重要,但是这些理想并不总适用于每个项目或应用程序。在非托管钱包和bridges等工具中严格优先考虑安全性而不是便利性的用户,可选择运行全节点,但运行全节点所需的时间和硬件,将极大地限制可直接与区块链数据交互的用户和设备的种类。
效率更高的"light client"的最新进展,如:
为这些问题提供了引人注目的解决方案——用户设备可直接与区块链进行交互,并在区块链之间trustlessly桥接资产和消息。
除了以上最新进展,轻节点并不是一个新概念:
在不久的将来,轻节点有可能消除用户和开发人员面临的效率与安全之间的权衡。随着新的区块链设计的出现,零知识证明(ZKP)以及对bridge和安全自托管的兴趣日益浓厚,现在是探索、开发、并采用轻节点的理想时机。
本文总体结构为:
轻节点协议:
进一步分解来解释:
在web3中,用户交易时通常需要牺牲一定程度的访问和体验,以优先考虑安全性和可信赖性。如:
但有了轻节点之后:
本节重点关注轻节点的两个核心用例:
并非所有自托管的钱包都同样安全。
自托管钱包的status-quo(现状)与钱包公司的服务器相连。该服务器处理所有区块链交互和查找,并在钱包公司的基础架构或使用第三方提供商上运行全节点。用户永远不会直接与区块链节点进行交互,而是仅通过中介(如钱包公司)来与区块链节点进行交互。尽管这样方便,但有所取舍,如:
尽管web2 app通常毫无问题地依赖于集中式中介,但在web3中却无法做到这一点,其缺少一些为用户提供额外保护的预期保护措施:
但与传统金融不同,区块链的密码学属性,使得能验证状态的正确性并防止攻击和其他最坏情况。可通过运行一个全节点来采取这些预防措施,但由于之前提及的原因,大多数用户不会选择自己运行一个全节点。将轻节点嵌入到钱包的移动应用程序中后,可提供更实用的选择:
越来越重要的区块链bridge空间,通常依赖于少数各方之间的多签,以被多次黑客攻击:
轻节点可帮助使bridge更安全。
可将区块链视为低功耗计算机,如移动设备,从理论上讲,这些低功耗计算机可运行代码来验证其他区块链。gas fee会使运行一个全节点变得不切实际,但验证Bitcoin轻节点(以及某些Proof-of-Stake协议)实际上非常有效——对应为执行一些SHA256哈希。
对于bridge来说,这是一个有趣的机会,bridge依赖于一个或多个受信任方:
而轻节点可解决这些问题,使得任何人都可relay数据:
相关轻节点bridge用例有:
轻节点bridge可防止整个攻击类别。即使中介被黑客攻击,bridged资金和数据仍保持安全。
在深入研究不同轻节点的设计细节之前,将讨论用户与区块链及其各种权衡进行交互的不同方式。从最不安全的(信任的)到最安全的(信任的),分别为:
客户端类型 | 效率 | 安全 | 说明 |
---|---|---|---|
Level 1:受信任的中介 | A | F | 客户端依靠中介来告诉他们什么在链上,什么不在链上。如,连接到后端服务器的移动钱包,或依赖于多签oracle的区块链bridge。 |
Level 2:轻节点 | B | A–C | 轻节点仅从与客户端相关的全节点/ RPC节点和交易中下载small proofs。使得客户端至少可验证其接收到的数据,已被Validators子集或全集确认。一些轻节点还验证proofs of correct execution和proofs of data availability,从而提高安全性。轻节点可在低功耗设备上以秒或分钟为单位同步。 |
Level 3:无状态客户端 | D | B | 无状态客户端从全节点下载所有交易,并根据共识规则验证区块链的状态转换是否有效。与全节点不同,无状态客户端不会存储整个链状态。每笔交易都必须包含相应的inclusion proof,以验证正在读写的相关数据。 无状态客户端不如轻节点高效,因为其需下载并执行所有交易。但是,无状态客户端可以代替全节点,因为其可检测无效状态转换。只有无状态客户端的区块链 会强迫用户保持在线状态以更新其本地数据,或要求用户依靠第三方进行存储。以太坊已考虑实现无状态客户端以减少用户的存储需求,但前提是先升级Verkle trees 。 |
Level 4:全节点 | F | A | 全节点(从创世块块开始)下载并执行每笔交易,并将整个状态存储在可访问的位置。全节点还连接到其他全节点(peers),并将交易广播到网络。使用移动设备或bridge运行全节点是不切实际的,因为必须将整个状态(通常为GB到TB级),并使用大量带宽、IO、RAM和CPU,尤其是在Solana等高吞吐量链上。全节点可选择为archive节点,archive节点存储区块链的整个交易历史记录,以便其他节点以后可以同步。此过程可能很慢,因此全节点必须保持24/7在线状态。 |
有关轻节点及其当前功能的更多知识,参看:
通常,轻节点被视为运行全节点和依赖受信任的中介之间的中间地带。对许多区块链的近乎即时的同步和支持,使得轻节点成为无状态客户端的有用替代。无状态客户端提供了更多的保证,但资源使用量却大大增加。
构建轻节点的工程师将必须选择在其协议中支持的属性,而应用程序开发人员将不得不选择最适合其用例的轻节点。本节将说明最基本的轻节点协议(SPV)的工作原理,然后更深入地研究轻节点协议的各种属性及其在安全性和性能方面的权衡。
SPV客户端被认为是首个轻节点,是随着比特币的发明而引入的。在原始白皮书中,SPV客户端与客户端功能解耦,以使功能较弱的客户端可与网络进行交互,并提供尽可能多的安全保证。
SPV客户端实现方法非常简单:
SPV客户端验证每个区块头上的工作量证明(Proof of Work),以确保它是最重的链上(具有最大工作证明的链),使得其交易实际上在canonical链上。 Bitcoin白皮书上的SPV客户端示意图为:
这种方法非常安全,因为它可以客观地验证是否执行了实际工作。创建一个对轻节点而言真实的alternate链,将需要执行与自创世区块以来所有比特币矿工相似数量的哈希运算,或控制近一半的当前Bitcoin hashpower。
但SPV不适合较新的区块链协议,原因如下:
以下各节介绍了轻节点的一些变化,这些变化有助于解决这些问题,并更普遍地改善轻节点。
使用工作量证明(和Proof of Space and Time,或PoST),客户端可通过密码学验证validators在特定时间内分配了真实资源,从而轻松地将假链与真实链区分开。诚实链客观地完成了比假链更多的工作。这不适用于没有执行实际工作量的PoS系统。
自从以太坊移至PoS以来,创世区块和以太坊代码库不再足以验证区块链。现在,首次新客户端同步时,检查点(checkpoint)(或社交信息)也是必需的。这被称为弱主观性。
naive PoS算法易于受 “nothing-at-stake” 攻击,其中old staking keys with no current stake可 以少量或无开销的情况下,用于生成alternate历史记录,创建长alternate链。攻击者还可以执行无效的状态转换,以给自己更多的stake,并创建更多的假区块。为了避免这些攻击,轻节点必须依靠一个或多个受信任方来报告哪个链是真实的。同步时,轻节点可从某checkpoint开始客观同步,而不是自创世区块开始同步(弱主观性)。也可对更安全的链(如Bitcoin)发布checkpoints,以提升透明度。
这种方法具有其挑战和好处:
对于 “nothing-at-stake” 攻击,还有其他不需要弱主观性的潜在解决方案。如:
运行轻节点需要验证共识算法(从而验证区块头)。对于某些区块链(包括以太坊),这意味着跟踪和验证数十万甚至数百万个validators的签名——该过程使客户端大大less “light”,因为这些proofs可能需要数十分钟来下载并验证。为此以太坊发展出syncing committee——一组512个随机选择的validators,每27小时更改一次,并以快速可验证的方式签署区块头(如Helios)。由于签名是BLS,因此可聚合签名以提高验证效率。
尽管同步委员会对轻节点而言效率更高,但以太坊区块链目前对签署无效区块头同步委员会成员没有处罚。所以 可能 同步委员会的validators接受贿赂,或通过欺骗轻节点而采取恶意行动,而不会削减其stake以示惩罚。尽管以太坊确实因为根本不签署任何东西而实施了不活动的惩罚,但这并不是全部stake的有意义百分比。即使受到处罚,它们也可能无法增加足够的安全性,因为同步委员会可以代表stake的一小部分(即,以太坊中的512 vs. 80万 validators)。
其他系统不依赖委员会。如:
广泛采用轻节点的一个障碍是需要手动验证每个区块头及其共识。此过程要求客户端下载大量数据,这需要时间、CPU周期和电池寿命。
为提高效率,客户端可验证某区块头有效的(zk)SNARK proof。与其验证每个区块头和共识签名,SNARK 轻节点验证 其他人知道header链以及制作区块头使其区块哈希值为H的所有签名 的proof。对于某些类型的SNARK,验证是恒定时间,并可在100ms以下。
这些证明非常适合bridge轻节点,因为资源是有限的,且全节点可能太昂贵了。与下载数十或数百 MB的数据进行同步相比,这些证明也更快、更便宜。
当前正在开发多个SNARK库,这些库旨在验证同步委员会轻节点和全共识轻节点,这使得同步到以太坊区块链的速度更快。对于某些区块链,如比特币、Near或Cosmos,这些证明已经可以实际生成。当前:
等多家公司,正在取得重大进展。
尽管这项工作近年来已经取得了长足的进步,但对于所有区块链而言,它尚不实用。SNARK证明共识 需数十分钟,甚至需要数百个GPU,因此该领域的进展很重要(且进展快速)。
当前SNARK的复杂性为轻节点带来几层不同的风险:
SNARK可更高效地验证每个区块头,但仍不适用于验证数百万个区块头,受限于带宽、CPU和时间限制。某些PoS系统的轻节点可在链最新高度附近的某checkpoint开始同步,以验证较少的区块头,从而大大减少了同步所需的时间。
此外,在大多数PoS协议中,validator set更改的速度受到限制,这是使验证效率显著提高的另一种方法。在PoS协议中,轻节点可以快速转发足够的区块,以使不超过n%的stake weight可被撤回。如果某时间点的区块拥有超过67 + n%的stake,则即使n%的stake已撤回,也可保证该区块有效。从那个时间点,轻节点可以下载并验证新的validator set进行更新。
当前:
这几种协议适于PoW/PoST生态。这些协议仅需要下载并验证 O ( log ( N ) ) O(\log (N)) O(log(N))个区块头,其中 N N N为链高度。在Chia链上的Flyclient轻节点:
其它新的解决方案有:
为让轻节点验证状态,需证明:
减少这些假设的一种方法是:
让某人创建整个交易验证和执行逻辑的SNARK证明,向轻节点证明:
值得注意的是,这些执行proofs的创建比区块头SNARKS在计算上更加密集,且该领域仍处于早期研究阶段。即使使用带有数百个GPU的数据中心,这些证明也可能需要数十分钟才能生成。
一些系统,如由Celestia 和EigenDA所引领采用的DA proofs,支持轻节点采样和验证数据的某些随机片段,从而确保validators未删除该数据。这些DA轻节点可为整个区块可用提供统计学保证。为什么这很重要:
当前:
使用以上所有技术,轻节点proofs可非常安全和有效地进行验证。但是,仍然存在谁来向轻节点提供proof的问题,因为proof提供方可能会隐藏信息。
若轻节点钱包仅连接到钱包公司的服务器,则该轻节点钱包必须相信该公司没有隐藏最新的块。这可能导致多种类型的攻击,如:
在PoW和某些无slashing惩罚机制的PoS协议中,钱包公司可提供区块链有效分支的证明,而其他人无法识别或看到该分支。验证某个区块链是否有效与验证其最长不同。这导致更严重的攻击,可以通过slashing惩罚和Merkle exclusion proofs来解决。
理想情况下,钱包或bridge合约将接收多方的proofs,如:
只要这些当事方之一诚实,客户就会收到有效的canonical proof,且难于说谎或审查。N方中至少有1个是诚实的(这一假设称为 existential honesty 假设。表达这一点的另一种方法是,轻节点需要抵制 eclipse攻击——此时轻节点仅连接到不诚实的节点,且无法访问正确的信息。
还值得注意的是,钱包开发人员在使用网络中不受信任的RPC节点获取证明时必须小心。这些节点没有性能保证,且可能会影响开发人员应用程序的用户体验。相反,轻节点可以选择依靠中央服务器,也可以从后台的其他节点获取签名以证实结果。Kevlar(当前采用的这种方法)可帮助增强轻节点的安全性,而不会牺牲用户体验。
在PoS系统中,签名者不会因创建假区块而受到slash惩罚,不诚实的validators可能会签署无效的区块头或数据并将其提供给客户。在最坏的情况下,网络的51%攻击,使得轻节点无法验证执行,这将是灾难性的。对bridge场景尤其如此,因为攻击者可能会铸造假资产。开发人员可以通过编写智能合约(或核心L1功能)来阻止这种攻击,该合约会slash签署无效数据的节点的stake。具体见Etan(Nimbus团队)的提案,其讨论了以太坊同步委员会的slash方案。
如前几节所述,验证执行和DA以及共识的轻节点不易受到不诚实的validators的攻击。也就是说,大幅slash仍可以通过防止某些攻击来提供额外的安全性。
本节关注:
尽管使用轻节点可减少对集中式公司服务器的依赖,但这样做也可将用户的区块链地址及其IP之间的链接暴露给多个随机节点。
某些轻节点协议,如:
为轻节点钱包用户提供隐私的一种可能更安全的方法是通过在钱包服务器上使用trusted execution environments (或TEE)。钱包服务器可使用只能从TEE访问的密钥来加密区块链状态的数据。发出请求时,用户使用TEE的密钥对该请求进行加密,将消息传递到服务器,并且TEE在不向服务器透露结果的情况下处理该请求。这不容易安全地进行,并且需要有效的加密内存方案,如 ORAM。
以太坊merge之后,通过epoch同步委员会为以太坊带来了高效的轻节点,以及对构建以太坊轻节点新兴趣,包括:
这些新的以太坊轻节点方案具有如下属性:
要解决的一个问题是:
rollup中的SNARK proof可能要花数十分钟才能发布,optimistic rollup也是如此。a16z crypto工程师Noah Citron描述的一种有趣的提高效率的方法是:
即使技术进步,大多数密码学钱包也不会使用轻节点(许多仍是托管钱包)。大多数bridges都依赖于1至30个方中的多点(或中心化区块链),其中许多是紧密相关的公司或个人,并且无法确保与轻节点消息传递的安全性。
那么,为什么轻节点看不到更广泛的使用呢?
原因有很多,钱包和bridge之间也有所不同。如:
特别是对于钱包,增加轻节点的动机目前并不超过弊端。人们普遍认为自托管是通往 真正拥有 crypto的必经之路,这是普遍持有的信念,但对于许多客户价值来说,轻节点的安全性并不是必须的。轻节点目前无法使开发人员更容易遵守法律法规,反而使开发复杂化、延长工程时间、并有可能损害客户体验。
另一方面,对于bridge,用户和开发人员希望升级到轻节点安全性,但还有其他障碍。这些协议的效率尚不满足实用要求,且区块链还不够强大,无法验证proofs。需在两方面发展:
在理论和实践方面,轻节点还有很长的路要走。但轻节点是在保持高效的同时实现安全bridge和钱包的未来。区块链协议团队可以通过标准化和发布轻节点协议来访问状态,从而推动Web3行业向前发展,钱包和bridge开发人员可以使用轻节点来升级其应用程序的安全性。
一些潜在的探索领域有:
在过去的五年中,学术研究人员、区块链设计人员和工程师在轻节点协议设计、部署和SNARK证明方面取得了重大进展。
随着时间的流逝,将开始越来越依赖此基础设施,并希望生活在 每个人都可 无许可地访问全球加密网络并与之交互 的世界中。
[1] a16z crypto团队2023年9月博客 Don’t trust, verify: An introduction to light clients