对于 ZK-Rollup 来说,中心化的 prover 仍然是安全的,并且也不像中心化的 sequencer 那样会带来审查的问题。
原文作者:Opside Team
原文来源:Opside
当前,以太坊主网上已经有多个 ZK-Rollups 在运行了。然而 ZK-Rollup 的去中心化设计仍然处于早期阶段。我们目前都聚焦在 Sequencer 的去中心化问题上,大部分人都忽略了,实际上目前绝大部分的 ZK-Rollup 项目都没有实现去中心化的 prover。
对于 ZK-Rollup 来说,中心化的 prover 仍然是安全的,并且也不像中心化的 sequencer 那样会带来审查的问题。但是中心化的 prover 也会引发很多问题。首先,如果只有一个 prover,那么单节点宕机就会造成整个 ZK-Rollup 的有效性证明无法提交,从而给交易的最终确定性造成影响。其次,中心化的 prover 成本高昂,无法承担未来海量的 ZK-Rollup 的算力需求。最后,从经济的角度来说,中心化的 prover 独享了一部分收益,这在代币经济学上来说,实际上是不公平的。
去中心化 prover 能很好地解决以上的问题,但是也带来一些挑战,这也是为什么最近上线的几个 zkEVM 方案采用了中心化 prover 方案的原因之一。例如 Polygon zkEVM 的 beta mainnet 中依靠 trusted aggregator 来提交 ZKP,zkSync era 也是类似。
从技术细节上来讲,ZK-Rollup 的智能合约验证 ZKP 的时候,需要原始的 proof 数据,这就可能引发各种不同的链上攻击行为。例如,某一个 prover 提交计算出来的 ZKP 到链上合约时,需要发一笔L1的交易。当这个 prover 发出的交易广播到交易池中,攻击者就可以看到原始 proof 数据,攻击者可以设置一个更高的 gas 费来发交易,从而优先打包到区块中,来获取 PoW 奖励。
此外,由于 prover 之间是依靠算力来竞争,没有一个可信的身份识别机制,也很难建立一个通信机制。不同的矿工有可能做重复的工作,从而造成算力的浪费。
Opside 提出了一个 ZKP 两步提交算法,来实现了 prover 的去中心化。这种算法既能够防止 ZKP 抢跑攻击,又可以让更多的矿工获得奖励,从而鼓励更多的矿工在线,并提供稳定、持续的 ZKP 算力。

举一个例子,假设 Opside 中每个L2区块的 PoW 奖励是 128 IDE,当前总共有 64 个 Rollup slots,那么每一个 Rollup sequence 分配到的 PoW 奖励是 2 IDE。如果先后有 A, B, C 3 个矿工为一个 sequence 提交了正确的 ZKP,且 A, B, C 3 个矿工的矿工质押量(IDE)分别为 200 K, 500 K, 300 K。那么,A, B, C 可以获得的 PoW 奖励分别为 0.4 IDE, 1 IDE, 0.6 IDE。
为了避免针对 prover 的恶意行为,prover 需要在一个特殊的系统合约中注册,并质押一定数量的 token。如果当前质押数量小于阈值,则不允许提交 hash 和 ZKP。prover 提交 ZKP 获得的奖励也将依据质押量比例来分配,从而避免 prover 多次提交 ZKP 的恶意行为。
当 prover 出现以下行为,会进行不同程度的惩罚
罚没的 token 将被烧毁。
关于 ZKP 的两步提交机制更多的细节与考量,请读者参阅官方文档。prover 质押以及惩罚的具体数字在未来可能会改动。
本文提出的 ZKP 两步提交算法,在实现了 prover 去中心化的同时,能很好地规避针对 prover 的抢跑攻击,并鼓励更多的矿工提供稳定、持续的 ZKP 算力。最初的版本将在 Opside 的 Pre-alpha testnet 上线。在未来,Opside 也将在更多 ZKP 的挖矿领域进行更多创新。例如:
根据整个网络的 ZKP 算力供需关系,动态调整 PoS 与 PoW 的奖励分配比例;
根据 ZK-Rollup 类型、Rollup 交易数量、gas 使用量等进行工作量预估,建立 Rollup batch 的个性化定价机制;
应用开发者对所属 Rollup 的 ZKP 生成进行补贴,以激励矿工提供算力。