去中心化的Prover如何实现?Opside 创新性提出 ZKP的两步提交算法
原文来源:Opside Team
当前,以太坊主网上已经有多个 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 之间是依靠算力来竞争,没有一个可信的身份识别机制,也很难建立一个通信机制。不同的矿工有可能做重复的工作,从而造成算力的浪费。
-
对于某个 sequence,prover 计算出 ZKP 之后,首先计算(proof / address)的 hash,并向链上智能合约提交 hash 和 address。其中,proof 是某一个 sequence 的零知识证明,address 是该 prover 的地址
-
假设在第 1 个 prover 在第 T 个区块提交了 hash,则在第 T 10 区块以内,还可以接受其他 prover 提交 hash,没有数量限制。第 T 11 区块及之后,不再接受新的 prover 提交 hash
-
第 T 11 区块及之后,允许任何 prover 提交 ZKP。只要有一个 ZKP 通过验证,那么就可以根据该 ZKP 对所有提交过的 hash 进行校验。校验通过的 prover 都可以得到 PoW 奖励,奖励金额按照矿工质押量的比例来分配。
-
如果在第 T 20 区块之前,都没有 ZKP 通过验证,则所有提交过 hash 的 prover 都将被 slash。此时该 sequence 重新开放,允许提交新的 hash,回到第 1 步
举一个例子,假设 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 提交了错误的 hash
-
对于某个 sequence,如果没有对应的 ZKP 通过验证,则所有提交过 hash 的 prover 都将被惩罚
罚没的 token 将被烧毁。
关于 ZKP 的两步提交机制更多的细节与考量,请读者参阅官方文档。prover 质押以及惩罚的具体数字在未来可能会改动。
-
为什么允许多个 prover 提交 hash?如果第一个 hash 的提交者才能获得奖励,那么第一个 prover 提交了 hash 之后,其他 prover 就没有动力提交 proof。如果一个恶意攻击者提交 hash 之后迟迟不提交 proof,那么会阻碍整个 sequence 被验证的速度。因此应当允许多个 prover 独立且并行地提交 hash,以避免 ZKP 的验证被单个攻击者垄断。
-
为什么需要设置一个时间窗口?假设任何人在提交了 hash 之后可以立即提交 proof,那么该 proof 仍然有可能被抢跑。因为攻击者会立即提交一个与自己地址关联的 hash,随后提交 proof,从而获取奖励。设置时间窗口之后,提交过 hash 的 prover 就没有动力在此时间窗口内提交 proof,从而避免了 proof 被攻击者利用的可能。
-
为什么要按照质押量来分配 PoW 奖励?在一个时间窗口内,允许多个 prover 为同一个 sequence 提交 hash。实际上,矿工可以利用自己生成的 proof 提交多个 hash(只需要多个地址即可),从而占有大部分甚至所有 PoW 奖励。为了避免这种攻击行为,一个 sequence 的 PoW 奖励将按照矿工质押量的比例来分配。
本文提出的 ZKP 两步提交算法,在实现了 prover 去中心化的同时,能很好地规避针对 prover 的抢跑攻击,并鼓励更多的矿工提供稳定、持续的 ZKP 算力。最初的版本将在 Opside 的 Pre-alpha testnet 上线。在未来,Opside 也将在更多 ZKP 的挖矿领域进行更多创新。例如:
根据整个网络的 ZKP 算力供需关系,动态调整 PoS 与 PoW 的奖励分配比例
根据 ZK-Rollup 类型、Rollup 交易数量、gas 使用量等进行工作量预估,建立 Rollup batch 的个性化定价机制
应用开发者对所属 Rollup 的 ZKP 生成进行补贴,以激励矿工提供算力