目前,以太坊主网上运行着多个 ZK-Rollup。然而,去中心化ZK-Rollups的设计仍处于早期阶段。我们目前关注的是去中心化排序器的问题,但大多数人忽略了一个事实,即目前大多数 ZK-Rollup 项目都没有实现去中心化证明者。
对于 ZK-Rollups,集中式证明者仍然是安全的,并且不会带来与集中式排序器相同的审查问题。但是,中心化的证明者也会带来很多问题。首先,如果只有一个证明者,单个节点故障会导致整个 ZK-Rollup 无法提交其有效性证明,从而影响交易的最终性。
其次,中心化证明者成本高,无法满足未来海量ZK-Rollups的计算需求。
最后,从经济角度来看,一个中心化的证明者独享一部分利润,从代币经济学的角度来看,其实是不公平的。
去中心化证明者可以有效解决上述问题,但也带来了一些挑战。这也是最近推出的几个 zkEVM 方案都采用中心化证明者方案的原因之一。例如,Polygon zkEVM 的 beta 主网依赖于可信聚合器提交 ZKP,zkSync 时代在这方面类似。
从技术角度来看,ZK-Rollup 的智能合约在验证 ZKP 时,需要原始证明数据。这可能会触发各种链上攻击行为。例如,当某个证明者将计算出的 ZKP 提交给链级合约时,需要发送 L1 交易。当这笔交易广播到交易池时,攻击者可以看到原始证明数据,他们可以设置更高的gas fee来发送交易,从而最先被打包成一个区块并获得PoW奖励。
此外,由于证明者基于计算能力相互竞争,没有可靠的身份识别机制,也很难建立通信机制。不同的矿工可能会执行重复的工作,从而导致计算能力的浪费。
证明者为某个序列计算出ZKP后,首先计算出(证明/地址)的哈希值,并将哈希值和地址提交给链级智能合约。这里的证明是对某个序列的零知识证明,地址是证明者的地址。
假设第一个证明者在第 T 个区块提交了 ZKP 的哈希,直到第 T+10 个区块被接受,没有任何限制。从第 T+11 个区块开始,新的证明者不能再提交哈希。
在第 T+11 个区块之后,任何证明者都可以提交 ZKP。只要一个 ZKP 通过验证,就可以用来验证所有提交的哈希值。经过验证的证明者根据矿工的抵押金额比例获得 PoW 奖励。
如果在第 T+20 个区块之前没有 ZKP 通过验证,则所有提交哈希的证明者都将被罚没。然后重新打开序列,可以提交新的哈希值,返回到步骤 1。
举个例子:假设 Opside 网络上每个区块的 PoW 奖励为 128 IDE,目前有 64 个 rollup 插槽可用。因此,每个汇总序列都分配了 2 IDE 的 PoW 奖励。如果A、B、C三名矿工连续成功提交了一个序列的正确ZKP,则三名矿工的矿工权益(IDE)分别为200K、500K、300K。那么,A、B、C 分别可以获得 0.4 IDE、1 IDE、0.6 IDE 的 PoW 奖励。
为了防止证明者的恶意行为,证明者需要注册一个特殊的系统合约并抵押一定数量的代币。如果当前质押量小于阈值,则证明者无法提交哈希和 ZKP。证明人提交 ZKP 的奖励将按照质押金额的比例进行分配,避免证明人提交多个 ZKP。
如果证明者有以下行为,将受到不同程度的惩罚:
有关 ZKP 两步提交机制的更多详细信息和注意事项,建议读者参考 Opside 官方文档。证明者的抵押和惩罚的具体数字可能会在未来发生变化。
为什么允许多个证明者提交哈希值?如果只有第一个提交哈希的证明者得到奖励,其他证明者可能没有动力在第一个证明者提交哈希后提交证明。如果恶意攻击者在提交哈希后长时间延迟提交证明,可能会减慢整个序列的验证速度。因此,需要允许多个证明者独立并同时提交哈希值,以避免单个攻击者垄断 ZKP 验证。
为什么会有时间窗?如果任何人都可以在提交哈希后立即提交证明,证明仍然可能被盗。攻击者可以立即提交与其地址关联的哈希值,然后提交证明以获得奖励。通过设置时间窗口,已经提交哈希的证明者没有动力在窗口内提交证明,从而避免了被竞速的可能性。
为什么奖励是根据权益分配的?多个证明者可以在一个时间窗口内提交同一序列的哈希值。事实上,矿工可以使用他们生成的证明提交多个哈希(只需要多个地址)。这可能导致矿工拿走大部分甚至所有 PoW 奖励。为了避免这种攻击,一个序列的奖励将根据矿工的抵押数量的比例进行分配。
本文提出的ZKPs两步提交算法实现了证明者的去中心化,同时有效避免了竞态攻击,鼓励更多矿工提供稳定、持续的ZKP算力。该算法的初始版本将在 Opside pre-alpha 测试网上发布。
未来, Opside还将在ZKP挖矿领域推出更多创新理念,例如: