本文提出的轻节点方案提供了「可编程性安全」以符合不同情况下的安全需求。
撰文:Andy、Arthur
1 TL;DR
TeleportDAO 和 Eigen Labs 于近日联合发表了一篇论文,重点关注了轻节点在权益证明(PoS)区块链中访问和验证链上数据时面临的安全和效率挑战。该论文提出了一种新的解决方案,通过经济激励和有保险的预安全机制,以及客制化「可编程安全」性和具有成本效益等一系列措施来确保 PoS 区块链中轻节点的安全性和效率。十分具有前瞻性,值得深入研究。
注:Eigen Labs 是 Restaking 协议 EigenLayer 和 EigenDA 的背后开发商,Eigen Labs 目前已从 a16z、Polychain、Blockchain Capital 等著名风投机构募集了超过 1 亿 5 千万美金。
TeleportDAO 位于加拿大温哥华,是一家专注于比特币和 EVM 公链之间的跨链通信基础设施项目,目前该协议已通过 Coinlist 进行了一轮公开发售和融资成功筹集了 900 万美元。此轮融资得到了包括 Appworks、OIG Capital、DefinanceX、Oak Grove Ventures、Candaq Ventures、TON、Across 和 bitSmiley 在内的多家投资者的参与。
2 轻节点设计现存问题
目前来说,在 PoS 区块链中,验证者通过锁定一定数量的质押(如以太坊中的 32 ETH)来参与共识网络,从而确保网络安全。因此,PoS 区块链安全的本质是由经济保护的,即总质押越大,攻击共识网络所需的成本或损失就越大。执行这种罚没机制依赖于一种称为「问责安全」的功能,即如果验证者签署了相互冲突的状态,就可以罚没质押。
全节点在维护 PoS 区块链完整性方面发挥着至关重要的作用。它们存储所有区块交易信息、验证共识签名、复制完整的交易历史副本,并执行状态更新。这些过程需要大量计算资源和复杂的硬件。例如,运行一个完整的以太坊节点需要至少 2 TB 的固态硬盘存储。相比之下,轻节点减少了计算资源需求,只存储区块头,所以应用上也只适用于验证特定交易 / 状态的场景,如移动端钱包和跨链桥。另外,轻节点在验证交易时依赖全节点提供区块信息,但目前的节点服务商市场份额较为集中,因此安全性、独立性和即时性都无法完全保障。因此本文探讨了轻节点实现最佳安全性下,在数据获取成本和延迟之间的权衡方案。
3 现有的轻节点设计方案
比特币引入了简单支付验证(SPV)作为其轻节点协议。SPV 使轻节点能够使用 Merkle Proof 和区块头来验证特定区块中是否包含交易。因此,轻节点只需下载区块链的区块头,就可以通过检查区块的深度来验证交易的最终性。在这种情况下,比特币中轻节点验证共识的计算成本相对较低。然而在以太坊这样的 PoS 区块链中,共识检查的设计本质上更为复杂。它涉及维护整个验证者集,跟踪他们的质押变化,以及为共识网络执行许多签名检查。另一方面,PoW 轻节点的安全性依赖于大多数完整节点都是诚实的这一假设。为解决 SPV 的局限性,FlyClient 和非交互式工作证明(NiPoPoW)以亚线性(sublinear)成本向客户端证明这些区块。然而,他们对 PoS 共识模型的适用性弱。
相比之下,PoS 区块链通过罚没机制获得安全性。该系统依赖于共识参与者皆为理性,即攻击成本超过任何潜在利润,则不会攻击网络。为了降低验证成本,以太坊当前的轻节点协议依赖于同步委员会(sync committee),该委员会由 512 个随机选择的以太坊验证者组成,每个验证者质押 32 个以太坊,但签名过程不会被罚没。这种不可罚没的设计存在重大安全缺陷,同步委员会中不诚实的签名可能会误导轻节点接受无效数据,并且不会受到任何惩罚。即使引入罚没机制,同步委员会的总质押与庞大的以太坊验证者池相比仍然很少(截至 2024 年 3 月,以太坊验证者的数量已超过 100 万)。因此,这种方法为轻节点提供的安全性无法等价于以太坊验证者集。该模型代表了理性设置下多方计算的一种特殊变体,但无法提供基于经济的保障,也无法解决恶意、非理性数据提供者带来的威胁。
为了解决 PoS 引导过程中的安全和效率挑战,PoPoS 引入了一种分段博弈,以有效挑战 PoS 时序的对抗性 Merkle 树。虽然它们实现了最小空间,并避免了要求客户端始终在线和保持质押,但使客户端能够在重新加入网络不产生大量成本的情况下离线的问题仍未得到解决。
另一种研究方法侧重于使用零知识证明来创建简洁的证明。例如,Mina 和 Plumo 通过使用递归 SNARK 组合和基于 SNARK 的状态转换证明,有效促进了轻量级共识验证。然而,这些方法给区块生产者生成证明带来了相当大的计算负担,而且它们没有解决轻节点潜在损失的补偿问题。在其他 PoS 协议(如 Cosmos 中使用的 Tendermint 协议)的背景下,轻节点的作用在其区块链间通信(IBC)协议中进行了探讨。但这些实现是针对其各自生态的,并不直接适用于以太坊或其他各种 PoS 区块链。
4 轻节点新方案设计
大体上来说新方案引入了经济安全模块以实现「可编程性安全」,轻节点可根据自身安全需求以决定不同方案设计。在安全性假设上基本服从 1/N + 1/M,即只要保证全节点和检察官网络各有一个诚实有效的节点即可保证网络正常运行。
涉及模块 / 角色
- 区块链:协议建立在一个可编程的区块链,其区块的最终确定规则是确定的。比如在以太坊区块链上,一个区块的最终完成至少需要两个后续的 epoch,通常需要 13 分钟左右。
- 罚没智能合约:该协议包括一个符合标准智能合约抽象的链上罚没合约。它可以访问区块链中前一个区块的区块哈希值。所有各方都可以向该合约发送信息。
- 数据提供商:数据提供者运行全节点并跟踪区块链的最新状态。他们以资产为质押,提供服务以验证轻节点请求的状态有效性。他们用与其公钥相对应的秘钥签署发送给轻节点的所有数据,从而验证数据的来源和完整性。
- 检察官:检察官是连接到轻节点的全节点,协助数据验证。任何人都可以成为检察官,通过监视和罚没行为不当的一方获利。为简单起见,下述方案假设每个轻节点至少连接到一个诚实的检察官。
- 轻节点:轻节点为求以最小的成本验证区块链上是否包含了特定状态 / 交易。轻节点在验证过程中与一组数据提供者和检察官连接。
- 网络:数据提供商组成一个点对点(p2p)网络,使用 Gossip 协议传播数据。轻节点连接到一些数据提供者以发送请求和接收响应。
方案一:安全优先
方案一主要通过提出挑战期与检察官网络实现数据可信性。简单来说,轻节点会在收到提供商签署过的数据后,将这部分的数据发给检察官网络审查,在一段期限内,如出现数据作假,检察官会提醒轻节点数据不可信,智能合约的罚没模块会罚没对于数据提供商的质押代币,反之,轻节点可以相信这些数据的可信性。
轻节点请求数据具体流程:
- 轻节点从当前网络中获取最新的数据提供商名单,并决定一个挑战期限。值得注意的是该挑战期对于不同的轻节点之间是互相独立的,但挑战期上限是适用于所有轻节点。挑战期限是检察官网络用于检查数据可信性的最长时间,因此时间越长,单比交易传递延迟越久。
- 获取完名单后,轻节点会挑选一组数据提供商,并确保他们各自的质押资金大于当前交易的价值,理论上越高的质押资金,数据提供商做恶成本越高,轻节点信任成本则越低。
- 轻节点向这组数据提供商发送相应数据请求,该请求包括对应区块编号和该目标状态(该交易的 inclusion proof)
- 数据提供商发送对应区块的哈希和该交易的 inclusion proof,并附上签名。
- 轻节点收到上述资料后,转发给当前链接的检察官网络。如果在挑战期结束后没有收到数据可信性警示,那么轻节点就对该签名进行验证,无误后便通过数据可信性测试。
- 但如果从检察官网络中收到了警示,那么轻节点需要舍弃先前收到的签名。检察官网络会提交相关的证明给智能合约的罚没模块,智能合约在检查过数据后如果发现做恶情况确实发生,那么对应的数据提供商的质押则会被罚没。由于部分 / 全部选择的数据提供商被罚没,所以轻节点需要重新从当前网络中获取新一批数据提供商名单,以确罚没事件的确发生。
其他要点:
- 任何全节点都可以通过向智能合约发起「注册」和「提款」请求去参与 / 离开数据提供商网络。注册参与数据提供商网络有最低的质押门槛。一旦全节点选择发起提款,那么他们在该网络的状态会立刻改为「离开」,并且无法接收轻节的请求,以防快进快出的做恶可能。另外,数据提供商网络会按照一个周期更新当前网络活跃的数据提供商,在此期间数据提供商无法收到提款款项,提款请求会在当前更新周期内的最后一个区块生效,同时更新频率会比挑战期限上限高,以确保所有轻节点数据可用性测试皆已完成。因为数据提供商网络的活跃性,轻节点需要在每轮网络更新周期的时候重新获取当前网络活跃提供商的名单。如果选择延长这个更新周期,轻节点可以享受更简洁的验证过程(可通过上一个周期的「注册」和「提款」请求去预估当前活跃名单),但希望离开的全节点则需要面临更长的等候时间。
- 检察官网络收到数据签名后,会检查签名是否属于该数据提供商,并且衡量数据是否在共识网络中被「最终确认」。如果数据没有出现在合理链上有两种可能。第一,数据还没有被当前区块链最终确认,不同链有不同的最终确定性规则,比如最长链原则。第二,交易在别的合理链的区块。如果上述数据出现作假,检察官网络会发送一个罚没请求至智能合约,当中包括数据提供商的公钥、数据提供商的签名、区块编号,同时间发送该罚没事件的证明以提醒轻节点。智能合约会在收到这些数据后,通过共识层的最终确定性原则衡量当前最终确认的区块编号与收到的数据是否一致,如果不一致,那么罚没事件触发。另外,如果轻节点在选择数据提供商后,该数据提供商因另一组数据请求被罚没,检察官网络会及时发送该罚没事件以提醒轻节点该提供商的数据可信性较低,轻节点则会重新获取名单并选择其他提供商。
评估:
- 安全性:轻节点通过质押模块与检察官网络决定了理性与非理性的数据提供商的做恶成本,以提高数据可信性。但是因为整个协议是基于共识网络(本文在以太坊进行测试)的,所以一旦共识层遭受攻击,本协议也会受到潜在信任危机,因此可以进一步引入名誉机制确保极端情况下的系统性风险。
- 全节点级别安全性:本方案希望提供等价于以太坊 PoS 的安全假设,即全节点做出虚假声明需要承担罚没风险。
- 网络活跃性:如果当前网络只有少数理性数据提供商,轻节点将面临多轮的延迟,但由于每个数据提供商的吞吐量不为零,每笔请求始终都能完成。因此只要该网路有一个理性的全节点,就能确保网络能够持续运行。同时,由于数据提供商的收益与质押金额大小挂钩,这也鼓励了全节点采取超额质押的方式保护网络。
- 效率:文章作者团队预估以太坊验证者是主要参与数据提供商的用户,因为验证者已经在运行全节点了,并且可以通过该协议获得额外的收益。小金额的交易可能通过单个数据提供商便可以获取可信数据(对轻节点来说只需要验证一次),而大笔交易可能需要多个数据提供商才能获取可信数据(验证次数根据提供商数量线性增加)。
方案二:效率优先
方案二在方案一的基础上通过提出保险机制实现数据快速确认。简单来说,轻节点根据保单金额与时长确定保险后,数据提供商部分 / 全部的质押可以被偿还轻节点后续因数据做恶而产生的损失,因此轻节点收到并验证提供商提供的数据签名后,便可以确定该数据的初始可信性。
轻节点请求数据具体流程:
- 轻节点计算当前交易潜在最大损失,随后制定保单金额大小与保单保期。数据提供商质押在保险的资金量大小应当大于保单金额大小已确保有足够的偿还金。
- 轻节点决定该交易的挑战周期。值得注意的是保单保期可以覆盖多笔交易的 inclusion check,因此轻节点选择的总挑战周期不能超过保期,否则可能出现部分交易无法收到保障。
- 选择完参数后(保单金额、保单保期、数据提供商质押在保险的资金大小、数据提供商意向名单),轻节点就可以发送请求至智能合约。随后等待区块最终确认时间,便可以验证保险购买是否成功。如果出现失败,情况可能来源于其他的轻节点也选择了该数据提供商,并且先结算,因此剩余质押不足以匹配他原本的需求。
- 轻节点发送数据请求,当中除了区块编号和该目标状态(该交易的 inclusion proof)还需要包括保险编号。
- 数据提供商发送数据以及签名,轻节点验证该签名并转发至检察官网络,随后该笔交易已经被初步确信。
- 检察官在收到数据以及签名后会初步验证数据可信性,如果出现做恶则提交证明至智能合约,并且向对应的数据提供商罚没,该罚没会分发给轻节点。
其他要点:
- 数据提供商的质押在保险的代币在不同轻节点请求之间互相独立,以防出现多重保险的偿还风险。智能合约在轻节点选定数据提供商后,会把对应的质押在保险的代币锁定,并且其他轻节点在该保期结束前无法分配此部分的质押。如果交易之间是独立的,那么保单金额大小与最大交易金额相同。反之,保单金额大小与交易总金额相同。在相同质押金额前提下,轻节点一般会选择尽可能少的数据提供商以保证验证效率。
- 数据提供商在保险期限结束前虽然可以发起发起「提款」请求,但提款款项必须在保期结束后才会收到。
- 严谨来说保单保期时间应当大于区块最终确认时间 + 总挑战期 + 通讯延迟 + 计算 / 验证延迟。选择越多的数据提供商,所需要的保单保期会根据总挑战期延长。
评估:
- 可扩展性:方案二的可扩展性由数据提供商愿意质押在保险的代币金额总量决定。
- 保单成本:因为更高的安全水平与挑战周期挂钩,这意味着数据提供商要质押的时间要大于或等于挑战周期,所以越高安全需求,质押周期越长,轻节点所支付的费用越高。以公式来看,数据提供商的质押成本由数据提供商节点收益 /( 全年平均质押利用乘上每年区块总量 ) 计算。而轻节点所需要付出的价格则是由质押成本乘上保单保期和保单大小。
方案有效性
第一,在轻节点计算效率上,轻节点两个方案中都体现了毫秒级别的验证效率(轻节点只需要对数据进行一次验证)。
第二,在轻节点延迟上,按照实验配置的不同情境下(下图),延迟都在毫秒级别。值得注意的是延迟会根据数据提供商的数量线性增加,但延迟始终在毫秒级别。另外,方案一由于轻节点需要等候挑战期结果,所以延迟都在 5 小时。如果检查者网络足够可靠高效,那么这个 5 小时的延迟也是可以大幅减少的。
第三,在轻节点成本上,实际情况来看,轻节点的成本有二:gas fee 和保费,都会因为保单金额增加而增加。另外,对于检查者来说,他们递交数据时所涉及的 gas 会以罚没金额偿还,以保证有足够的参与激励。
5 延展方向
- 更多抵押品:目前数据提供商质押的代币是 ETH,但交易信息是以 U 本位为计算的,这意味着轻节点在每次获取数据时都需要衡量 ETH 的汇率以确足以维持够高的抵押资金量如果允许多种代币质押,数据提供商可以有更多的质押选择,也就避免了单币的风险敞口。
- 授权:类似于联合挖矿,一些散户可以通过授权他们自己的 ETH 给全节点用以参与数据提供商网络,收益则按照他们自身的协议进行分配,可参考 LSD。
- 出块保证:为了避免等候最终确定周期(在以太坊是 12 - 13 秒),轻节点可以通过一种保证,以减少这部分的等候时间。轻节点会先在数据请求时添加一个符号 / 标识,并且确定需要哪种保证(最终确认 /Proposed)。数据提供商在收到请求后提供对应的数据以及签名。当数据提供商在「Proposed 保证」情况下没有 proposed 区块,那么他们会被罚没。
注:Proposed 的区块会最后被 finalized 或者成为 uncle block。
- 成本与费用:对于检察官网络来说,他们需要质押一定量的代币(大于 gas)才能向智能合约提交证明。另外这部分的证明是可以通过 zkp 的方式减少费用。另外,在保险机制下,轻节点提交的保费将会给到数据提供商,而检察官网络则抽取部分做恶提供商的罚没收益。
- 数据可用性:数据提供商本质上是全节点,他们除了可以参与共识层网络,也可以验证数据可用性。验证可用性检验有两类方案:Pull model 和 Push model。前者指的是轻节点随机抽取从全节点获得的数据。后者指的是出块人分发不同区块给数据提供商。对于采用 Pull model 的数据提供商,他们有责任去返回抽样请求,轻节点在收到数据后转发给受信节点 / 验证者,并由他们尝试还原区块,如果不能,那么数据提供商则会被罚没。本文的轻节点协议在此基础上提出了保险机制,为数据可用性研究提供了新的探索方向。
6 总结与评价
本文提出的轻节点方案提供了「可编程性安全」以符合不同情况下的安全需求。方案一以更高延迟换取高安全性,而方案二通过引入保险机制为轻节点提供了「即时确认」服务。这些方案可用于需要确认交易最终性的场景,比如原子交易、跨链。
附:论文文献链接:
https://arxiv.org/pdf/2405.01459