解决 ZK Rollup 最终确定性痛点,我们设计了一种全新方案
nokia8260
发表于 2023-3-10 22:40:56
130
0
0
为了解决这个问题,我们构思了一种 sovereign ZK Rollup 设计。后面,我们将简要探讨 sovereign 设计的其他优势。
最终性瓶颈及解决方案
对于大多数 ZK Rollup,验证零知识证明是最大的开支之一。根据底层证明系统不同,以太坊上的 Rollup 可能会花费 30 万到 500 万 Gas 来验证单个证明。但是由于证明的大小随着交易数量增长而变化缓慢(或根本不受影响),Rollup 可以通过在提交证明之前等待积累大量交易来降低每笔交易的成本。事实上,这正是当今大多数 ZK Rollup 所做的;StarkEx 等流行的 Rollup 通常每隔几个小时才向 L1 发布一次证明。
但是等待几个小时才能完成交易是一种令人无法接受的糟糕用户体验。我们能做得更好吗?如果 Rollup 将原始交易数据发布到其数据可用性(DA)层(而不是状态差异),那么想要快速确定性的高级用户可以运行全节点。但是,如果 Rollup 使用状态差异,那么即使运行全节点也无济于事。这就是为什么今天大多数 ZK Rollup 的排序器都会发出「软确认」。但是软确认只有在中心化排序器系统中才有可能。所以问题仍然存在——我们如何让去中心化的 ZK Rollup 在延迟方面具有竞争力?
如果我们只关心降低全节点的延迟,那么将原始交易数据发布到链上就可以解决问题。只要完整的交易数据可用,全节点就可以在应用交易时尽快完成(假设 DA 层具有单时隙最终性)。这让我们的 ZK Rollup 与传统的 L1 一样响应迅速!
这是一个非常强大的结果。它使 ZK Rollup 适用于对延迟高度敏感的应用程序,如链上订单簿。尽管如此,它并没有完全解决原来的问题。我们真正想要的是减少轻客户端的延迟,能否在不大幅增加证明验证成本的情况下做到这一点?
答案是肯定的!方法如下:我们可以实时创建证明,然后使用递归将它们聚合成批量证明,而不是等待创建单个批量证明。只要我们通过 p2p 网络立即分发增量证明,轻客户端就会体验到快速的最终确定性。而且由于我们仍然只是在链上发布较慢的批量证明,因此我们不必为链上验证支付额外费用。换句话说,我们仍然得到了一个与 L1 的信任最小化的桥——但桥不再是轻客户端的真实性来源。恭喜,我们刚刚构建了一个 sovereign Rollup!
分叉选择
敏锐的读者会注意到上一段中描述的系统存在问题。在今天的 Rollup 中,L1 智能合约负责执行 Rollup 分叉选择规则。换句话说,智能合约不只是验证零知识证明,它还会检查证明是否建立在此前证明(而不是其他分叉)的基础上,并且它是否处理了所有我们发送到 L1 上的相关「强制交易」 。那么,如果不使用智能合约,我们如何选择一个规范的分叉呢?
答案出奇的简单——如果我们要求证明作为调用数据发布在 L1 上,那么我们可以添加一条规则,即新证明只有建立在先前有效证明的基础上才有效。尽管我们可以在客户端强制执行此规则,但它会要求用户一直扫描区块链的历史,一直追溯到创世区块——这并不理想。
值得庆幸的是,将其直接添加到零知识证明中并不难。通过将 calldata 绑定回 L1 区块头,我们可以添加一条声明「我已经扫描了 DA 层的证明(从区块 X 开始,到区块 Y 结束),并且这个证明建立在最近的有效证明之上」。这让我们可以直接证明分叉选择规则,而不是在客户端强制执行!如果我们已经在扫描 DA 层的证明,我们也可以轻松扫描强制交易。
可移植性和互操作性
在智能合约 Rollup 范例中,L1 桥是独一无二的。由于桥负责检查未包含在证明中的声明(如「此证明包括所有强制交易」之类的声明),因此将基于证明的桥添加到其他目的地通常没有意义。但是一旦我们将所有逻辑都移到证明中,这就不再是问题了。我们可以在任何我们想要的地方添加桥。
甚至可以更进一步,如果 L1 智能合约只是一个普通的桥,我们可以完全取消它。首先,在不支持智能合约的系统上构建 Rollup 是有意义的。只需采用现有的 Rollup 逻辑并删除 L1 桥。突然之间,你可以部署在任何 DA 层上!换句话说,你的 Rollup 逻辑可以立即在不同的 L1 之间移植。
结论
Rollup 的未来是 sovereign。通过直接证明其分叉选择规则,sovereign ZK Rollup 可实现无缝互操作性、即时可移植性和快速最终确定性。就像智能合约 Rollup 一样,它们提供低 Gas 成本和信任最小化桥梁,但它们不会被迫在成本和延迟之间进行权衡。
成为第一个吐槽的人