两全其美的 zk rollup 预共识机制
1)太长不看:
本文概述了一种预共识机制,可以实现即时终局性并减少验证 gas 成本,同时不影响 zkRollup 的即时资金退出。
2)背景和动机:
在承诺间隔足够短(如 10 分钟)的情况下,zkRollup 可以实现即时终局性。在这个方案中,聚合者的信任风险会随间隔时间增长而增加,实现终局性的成本(如果是 Groth16 算法,每个承诺的验证 gas 成本超过 20 万 gas)会随间隔时间延长而降低。
首先说明 zkRollup 的配对验证成本超过 20 万 gas(价值 100 至 500 美元)。也就是说,在 zkRollup 的每个承诺间隔期内,聚合者都需要花费这么多 gas 来验证并敲定承诺。
我们不能忽略这一成本,因为 zkRollup 的承诺间隔很短。我们需要承诺来实现即时退出的终局性。只要承诺间隔很短,且恶意聚合者回滚交易的积极性不高,我们就可以实现即时终局性(经济终局性,零确认交易)。
尽管我们可以使用递归零知识证明和高效的证明计算系统来聚合多个交易,我们也很难改变承诺间隔。如果我们盲目延长承诺间隔,就会影响安全性。
然后,我们需要思考如何在 zkRollup 中实现安全的即时终局性和较长的验证间隔。
3)方法:
聚合者的运行成本源自合约上零知识证明验证的 gas 成本高且承诺间隔短。
因此,我们可以在不影响安全性和可用性的情况下延长验证间隔。
3.1)第一步:跳过零知识证明配对验证
首先,我们最容易想到的解决方案就是跳过配对计算,并引入针对承诺的简单欺诈证明。
聚合者向合约提交证明或验证 zkRollup 承诺所需的任何东西,但这时不执行配对计算,也就不需要支付 20 万 gas。一段时间过后,这个承诺就会得到验证;这个承诺中的每个状态将成为下一个承诺的公共输入。聚合者需要锁定一些以太币来激励验证者。一旦验证者发现欺诈行为,聚合者就会受到惩罚。
承诺就是公共输入、零知识证明数据、上一个状态根、下一个状态根、交易哈希和聚合者地址这几项的哈希值。
原像由链上事件提供,承诺保存在合约存储内。
这种方法具有很大的优势。
每个人都可以成为瞭望塔,等同于 Optimistic Rollup 中的“验证者”,无需运行全节点或进行任何特殊的起步设置。
数据可得性问题不会发生,因为验证或执行欺诈证明所需的一切数据都在链上发出的事件中。执行欺诈证明时,我们不需要 Layer 2 交易数据及交易结果,因为这些数据全都包含在了零知识证明的公共输入和证明中。
如果恶意聚合者提交了恶意默克尔根,并放弃了所有交易数据和默克尔树数据,我们不需要运行全节点来进行欺诈证明。我们只需检查零知识证明数据,并执行配对验证函数,即可发现这类恶意行为。
但是,上述方法存在安全性问题。
如果 Layer 1 上发生 51% 攻击,将恶意默克尔根合法化,我们很难阻止。
由于 51% 攻击的执行成本随底层区块链的出块时间增加而增加,我们需要足够长的验证期限,才能有效提高 51% 攻击的难度。理想的验证期限是 7 天,因为 ORU 的退出期限也是 7 天,这可以根据挖矿成本和实际的攻击奖励计算得到。
在这种情况下,我们没有理由舍 ORU 而取上述方案。
3.2) 第二步:无需零知识证明验证的预共识承诺,通过递归零知识证明配对实现终局性
我们可以通过以下方式解决上述安全性问题。
我们将这个没有经过零知识证明验证的承诺视为预共识。预共识会通过零知识证明验证限制终局性。
(consensus commit ) => (pre-consensus commit ) => (pre-consensus commit ) => …. => (pre-consensus commit ) => (consensus commit )
所有预共识承诺都会通过配对来限制共识。因此,Layer 2 用户可以享受安全的即时交易终局性。我们需要使用带有递归零知识证明的所有预共识承诺来验证共识承诺。这里有两个电路:预共识电路和递归电路。预共识电路包含采用 zkRollup 方案的 dApp 的逻辑。递归电路只需要从 Layer 1 中获取预共识数据作为公共输入。
递归零知识证明可以用来对一段时间内的预共识进行水平合并:与此同时,它也可以用来将大量交易垂直聚合到预共识承诺中。
如果说任何虚假的预共识承诺都会影响带有配对的共识验证,我们总是可以通过零知识证明配对其进行欺诈证明。一旦证明成功,聚合者就会使用零知识证明验证者函数将该承诺删除,然后重新开始进行交易聚合并创建预共识承诺。
如果急的话,资产持有者可以花 20 万 gas 通过预共识来达成共识,然后就可以立即退出。(当然,他们也可以等待聚合者来达成共识。)正如“第一步”中提到的那样,他们不需要任何特殊设置,即可实现共识终局性,因为所有输入都已聚合,而且可以通过链上事件搜索到。无论验证多少预共识承诺证明,递归验证的 gas 成本都不会增加,因为这些证明将被哈希到条目哈希中。
51% 攻击者无法敲定恶意默克尔根,因为每个根最终都会通过由 zk电路实现的合约代码逻辑在链上进行验证。
4)总结:
这种带有欺诈证明的预共识协议及相关数据可访问性可以让 zkRollup 拥有较长的承诺间隔(如 6 小时)。这种方法可以大量节省验证计算所需的 gas 成本。