撰文:孟铉济,Fox Tech 首席科学家;康水跃,Fox Tech CEO
Layer1 作为一种分布式系统,为了达成共识需要高昂的通讯代价,并且大量的计算也会消耗昂贵的 gas。所以,作为 Layer1 的扩展,Layer2 的设计可以有效地提升 Layer1 的效率。但是从这个角度来说,Layer2 的设计仍然面临着和 Layer1 一样的一大难题,就是如何平衡去中心化程度和高效性。
zkRollup 是非常有前景的 Layer2 扩容方案,通过将计算搬到链下并向 Layer1 链上提供零知识证明的方式来实现。在实现 zkRollup 的方案当中,FOX 系统采用了当下主流结构,主要有两种节点,分别是 Sequencer 和 Folder。简单来说,Sequencer 负责对用户提交的交易进行排序打包,并且更新 Layer2 链上状态,Folder 负责对 Sequencer 打包的交易生成证明并提交到 Layer1。
一个有意义的问题是,Layer2 的节点是否应该是去中心化的,如果是,如何设计激励机制来保证这一点。因为可以想象,Layer1 效率低的本质就是,为了实现去中心化每个节点都需要进行大量的计算和通讯。而使用了 Layer2 系统,将计算过程解耦,如果在这部分依然用完全等效于 Layer1 的去中心化模式,则又会因为同样的原因造成 Layer2 的拥堵,所以这里需要做权衡。
激励机制的设计就是通过调整 Layer2 节点获得激励手续费的方式以及平衡支付给 Layer2 节点的费用,来鼓励节点参与 Layer2 系统维护。本质上,Layer2 节点收到的激励费用来源与以太坊一样,来自于提交交易的用户付出的 Gas 费。本文会探讨在 FOX 的系统当中,FOX 的节点如何参与系统收取手续费,以及这样做的原因。
首先我们来回顾 Gas 费在以太坊系统当中的作用。Layer1 的计算资源是有限的,用户提交交易时候会指定交易 Gas 费,Gas 费基本同交易的执行操作复杂度相关,而在此基础上愿意支付更高昂的 Gas 费的用户可以获得更优先的交易执行。矿工的激励就来源于打包的区块的 Gas 费总和。此外,Gas 费机制还可以有效防止恶意合约(例如无限循环),限制区块容量大小,这样在一定程度上保障了安全性。
所以可以看出,对 Gas 费的合理利用,本质上是对链上计算资源的合理调度和分配,同时也是项目方、矿工和用户的多方博弈。好的激励机制的设计以及手续费的使用和分配对于系统运行至关重要。
用户提交交易给 FOX 系统当中的交易池同时要附加一笔用来激励 FOX 节点的手续费,然后系统中的 Sequencer 节点将从交易池中抓取交易进行打包排序,这里每次打包的交易就构成 Layer2 的区块,同时 Sequencer 需要执行交易计算,并将计算结果传到 Layer1 的 FOX 合约当中,并且,Sequencer 还需要将交易数据存到 ZK-Ringer 当中来保障数据可用性。之后,Sequencer 的排序结果以及计算结果会传给 Folder 节点,Folder 正确计算证明(包括证明聚合部分)并传到 Layer1 的合约当中。在这个过程中,Sequencer 对于交易的执行结果会在执行结束之后直接更新到 Layer2 当中,而交易真正被 Layer1 共识的时间节点可以认为是 Folder 的证明被验证之后。
可以看到,在这个流程当中,用户最初附上的手续费要涵盖几个用途:
为此,我们需要梳理具体的机制来激励各方参与。
FOX 的激励模式比较新颖。首先,为了平衡去中心化和效率的问题,我们将节点的角色分为负责排序以及执行交易的 Sequencer 节点,以及负责对交易执行正确性生成证明并聚合的 Folder 节点。FOX 的 Folder 节点采用了去中心化的模式,也就是说任何 FOX 矿工都可以接入网络担任证明生成者,为了鼓励更多节点的参与,成功提交正确证明到 Layer1 合约的 Folder 可以获得代币奖励。与此同时,为了避免算力浪费,我们指出,并不是只有第一个证明提交者可以获得奖励,在第一个证明提交者成功提交之后的一个时间窗口和数量窗口内(这里具体参数会随系统状况进行调整),所有正确的证明者都可以获得奖励。

图 1:原始版本的激励模式
然而在这种机制下,恶意的 Folder 会有一种很狡猾的攻击。
当某一个恶意的 Folder,记作 Adv,在完成了证明生成之后,一方面将证明提交到 Layer1 中的 Verifier 合约进行验证,另一方面它串通一些节点(或者就是该 Folder 控制的节点),将计算好的证明透露给这些节点,然后它们就可以不经过自己计算而直接将 Adv 计算好的证明提交,也可以领取到一部分奖励,而这个过程之中他们没有付出任何算力,从另一个角度来说,Adv 通过较少的算力获得了多份的收益,并且造成其它节点即便生成了正确的证明也难以争抢过 Adv。

图 2:恶意 Folder 的攻击方式
在这个攻击当中,产生问题的原因是 Verifier 无法区分每一份证明是否由该 Folder 独立生成,因为证明值都是相同的。为了规避这个问题,我们需要将 Folder 的独特的地址信息加入到 Folder 提交的证明当中,从而使得每一个 Folder 提交的证明都只能是自己独立生成的而不能是其它节点提交的。
而融入这种信息的方法很巧妙,使用 Fiat-Shamir heuristic(读者可以参考 FOX 之前的文章《如何将交互式证明改造为非交互式?Fiat-Shamir Heuristic!》来了解技术细节)。按照生成证明的过程计算,其中一步,证明者,也就是 Folder 需要通过哈希函数来生成一个随机挑战值,只需要要求在这个哈希的输入当中加入 Folder 的地址,就可以保证挑战值与 Folder 的地址相对应,且仍然是一个 Folder 无法预测和控制的随机数。
严格说明这种方法的安全性需要用到比较深入的密码学中理论安全的随机函数的概念以及不可区分性等等,我们不在这里详细讨论。简单来说,可以认为,由于哈希函数本身的安全性以及 Fiat-Shamir heuristic 结构的安全性,添加一个固定的值作为哈希的原像并不会破坏输出的不可预测性,所以原来 zkp 算法的安全性仍然可以保证。
这样一来,每个 Folder 就必须独立进行证明生成而不能直接利用其它节点结果,从而实现了我们的目标。

图 3:修改后的激励模式
本文从节点手续费的重要作用角度出发,介绍了手续费与如何激励节点参与系统维护之间的联系,同时指出,好的激励机制可以有效地维护系统安全性。在此基础之上,我们详细讨论了 FOX 当中采用的对于 Layer2 的 Folder 的激励机制,并且解释了这种做法的合理性,以及技术上如何巧妙地运用 Fiat-Shamir heuristic 来实现这一点。
《深度|迭代与竞争——以太坊的 Layer2 扩容之路》国盛区块链研究院 https://www.theblockbeats.info/news/24443
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。
