为了支持存款和提款,我们增加了输入和输出在 Rollup 状态「外部」的交易的功能。如果一个 batch 中包含来自外部的输入,则提交到该 batch 的交易也需要将资产转移到 Rollup 合约。如果一个 batch 中包含来自外部的输出,则智能合约在处理该 batch 时会发起提款。 这就是 Rollup 的工作原理了。但还有一个重要细节:如何得知 batches 里的后状态根 (post-state root) 是正确的呢?如果某人能够提交一个具备任意后状态根的 batch,而无需承担任何后果,他们完全可以将 Rollup 中的所有代币都转移给自己。这个问题很关键,因为由此诞生了两种不同的解决方案,这两种解决方案又衍生出了两种不同的 Rollups。 Optimistic Rollups 与 ZK Rollups这两种 Rollups 为: Optimistic Rollups,其解决方案为欺诈证明 (fraud proofs):这类 Rollup 会追踪所有历史状态根以及每个 batch 的哈希值。如果任何人发现某个 batch 的后状态根不正确,他可以向区块链发布一个证明,证明该 batch 计算错误。合约会对证明进行验证,并且对该 batch 及其之后的 batches 进行回滚。 ZK Rollups,其解决方案为有效性证明 (validity proofs):每个 batch 都包含一个称作 ZK-SNARK 的密码学证明 (例如使用 PLONK 协议),以证明后状态根是正确执行 batch 的结果。无论计算量有多大,该证明都能在链上得到极速验证。 这两种 Rollup 之间存在复杂的权衡: 总的来说,我个人的观点是,在短期内,Optimistic Rollup 的显著优势在于其通用的 EVM 计算,而 ZK Rollup 更可能被用于支付、交易和其他特定用例。但中长期来看,随着 ZK-SNARK 技术的成熟,ZK Rollup 会在所有用例中发挥出优势。 解构欺诈证明Optimistic Rollup 的安全性保障主要来自于:如果有人在 Rollup 中发布了一个无效的 batch,其他任何跟进该链的用户监测到欺诈行为都可以发布欺诈证明,向合约证明该 batch 的无效性,并进行回滚。 在上图中,声称某 batch 无效的欺诈证明会包含绿色的数据:如果要证明特定账户被该 batch 读取和 / 或被修改,则需要该 batch 本身 (可以对照存储在链上的哈希值进行检查) 以及 Merkle 树的各个部分。不需要提供图中黄色的节点,因为他们能够被绿色的节点重构。该数据已经足够执行 batch 并计算后状态根了 (这与 无状态客户端 验证单个区块的方式几乎相同)。如果经计算的后状态根以及获得的 batch 中的后状态根不一致,那么该 batch 就是无效的。 (责任编辑:admin) |