zkRollup,虽好,目前存在很大的缺陷:可编程性差。 细看 zkRollup相对其他 Rollup 方案,zkRollup 方案多了 zk 证明系统。也就是说,在 Layer2 每个交易除了「执行」外,还需要生成证明,证明执行过程的正确性。熟悉零知识证明技术的小伙伴都知道,零知识证明的安全性在于「电路」的安全性。对于 Layer2,每种交易的处理「固化」为电路,电路逻辑完全公开。对应于每种电路,存在唯一的验证秘钥。验证秘钥用在 Layer1 验证状态证明。通过验证的状态证明,符合固化电路的逻辑。 关键就在于 Layer2 交易的执行和固化电路语义是否一致。公开电路就是一种共识方式,供所有人查阅电路逻辑。简单的说,为了实现 zkRollup,需要实现 Layer2 执行对应的电路。事实上,电路的实现相对复杂,没有高级语言,很多情况下都是手写 R1CS。进一步,为了利用 zk 证明系统,为了优化电路的实现,整个 Layer2 的状态经常优化为电路友好结构(merkle 树)。所以,zkRollup 的系统需要考虑电路的结构,从而约束了 Layer2 交易以及账户模型。细心的小伙伴可以发现,不管是 zksync/zkswap/loopring,都只实现了特定交易场景。 反过来说,如果需要通过 zkRollup 支持 EVM 的交易执行,需要将 EVM 的交易抽象成电路友好的账户模型。这种抽象并不容易,再者,EVM 的描述电路可以预见比较大。从零知识证明的性能看,这方面会限制整个 zkRollup 的性能。 再看看 zkRollup 方案在 Layer1 的 gas 消耗。整个 zkRollup 方案的主要 gas 消耗为三部分(withdraw 不考虑在内):
以一个区块 350 笔交易,每个交易的 Transaction Raw Data 的大小为 20 字节为例,一个区块处理的 gas 消耗: 虽然上述的数据不是精确值,但是足以说明交易原始数据在整个 zkRollup 方案中的 gas 消耗占比是非常高的。从这个角度看,Layer2 的有些项目选择通过其他链下的方式存储交易数据。 Optimism vs. ArbitrumOptimistic Rollup 兼容 EVM。也就是说,Layer2 支持可编程性,并且在以太坊上的程序几乎无缝迁移。为了保证链上的状态正确,这两种方案都提供一段时间内的挑战机制。挑战者提供挑战的证据,Layer1 抉择正确与否。深入理解 Optimism 和 Arbitrum 可以查看之前的文章: (责任编辑:admin) |