不久前,我们分享了一篇题为《为什么 multi-prover 很重要》的详细文章,解释了多重证明(Multi-Proofs)的重要性,并将 SGX 作为多重证明的选择之一。
这篇文章的灵感来自于我们与 Vitalik 的 X Space 和他随后发表的博客文章,其中介绍了 Taiko 关于多重证明的总体路线图:它与以太坊终局的关系,我们的愿景是什么,以及我们将如何实现。
我们认为,ZK 中的 multi-proof 可以转化为使用 multi-SNARKs + multi-Client,即使用多种 ZK-SNARK 证明多种不同的以太坊节点,这将为未来以太坊 L1 中的 SNARKed 节点多样性奠定基础。
为了为多重证明提供一个非常简单的理由,我们应该提到两点:
- 多重证明可以对冲节点实施和证明系统中的漏洞和风险,因此在出现漏洞的情况下,即使一个证明被破坏,其他证明也不太可能允许完全相同的漏洞被利用;
- 以太坊的终局,是假设使用零知识证明(ZL)来验证 L1;
与以太坊的多节点实现类似,这种方法已经多次拯救了网络免于崩溃,证明了 L1 区块需要采用多重验证的方法。对于 ZK 和非 ZK 场景来说,这意味着需要使用多个节点和不同的证明系统。
Multi-Client 系统和 L1 终局
正如 Vitalik 在他的文章《What might an「enshrined ZK-EVM」look like?》中描述的那样,Multi-Client 系统有两种方法:「开放式」和「封闭式」。
- 在一个封闭式的 Multi-Client 系统中,协议内已知一组固定的证明,并将其列入「白名单」以生成证明。而根据 Vitalik 的分类,所有 ZK L2 都是封闭式的,因为它们只接受自己实现的证明;
- 在一个开放式的 Multi-Client 系统中,证明被放置在「区块之外」,并由各个节点分别进行验证,任一用户都可以使用任何他们想要的节点来验证区块;
如果用户需要验证某区块,在最简单的实现即直接运行相应的节点重新执行该区块,或者向已知的 Prover 请求有效性证明。如果收到了一定数量符合「白名单」标准的证明,则认为该区块合法。然而,如果没有符合「白名单」标准的零知识证明(ZKP),并且我们想避免重新执行,我们应该使用哪种零知识证明呢?
根据 Vitalik 的愿景,这是在协议之外通过进行社会(或加密经济)共识来解决这个问题:
在共识层上,我们添加了一个验证规则:只有当节点对区块中每个状态变化都看到了有效的证明时,才接受该区块。该证明必须是一个 ZK-SNARK 证明,用于证明 transaction_and_witness_blobs 的连接是 (Block, Witness) 对的序列化,并且基于 pre_state_root 和 Witness(i)执行区块是有效的,并且(ii)输出正确的 post_state_root。潜在地,节点可以选择等待多种类型的 M-of-N 证明。
想象一下,一个诚实的 Builder 拥有一种 type-1 的区块,他希望提供有效性;L2 层已经提供了几个选择,例如 Polygon、ZkSync 和 Scroll。
假设他们的 ZK-EVMs 已经发展到了 type-1,并且信誉良好且经过实战检验,然后 Builder 将从这些可用的证明系统中进行选择,而验证他的区块的人将运行相应的验证软件,最好是创建多种类型的证明,并通过多次验证。鉴于相同的 L1 链规范,如果有任何一个验证者不同意,区块验证就成为了一个共识问题,开放式的系统将通过共识来达成验证结果的一致性。
证明系统将通过说服用户信任它们而获得影响力,而不是通过说服协议治理过程。
根据 Vitalik 的说法,这意味着 ZKP 生态系统正在开放,以实现直接市场化。如果有激励措施,现有的 L2 实现可能会参与 L1 证明市场的竞争。
Taiko 在多重证明方面的可行性
在 Taiko 协议中,Proposer 必须找到一个 Prover 来提出一个区块,并且被指定的 Prover,将存入 TKO 作为保证金,以确保自己交付的证明没有问题。Taiko 协议并没有规定 Proposer 如何找到和补偿 Prover,所以他们甚至可以亲自见面,并用现金进行交易。
因此我们的供应链运作就像一个自由市场一样,Proposer 可以选择任何他们喜欢的 Prover。
除了经济优势之外,还有一些技术特性使得 Taiko 成为 Multi-Client 系统的理想选择:
- Taiko 是一种 type-1 的 ZK-EVM ,具有两个好处:首先,在执行多样性方面,现有的 EVM 实现(如 Geth、Besu、Reth 等)可以直接应用于 L2;其次,为了测试基于 L1 设计的可行性,我们需要一个标准化的 ZK-EVM 来进行开放式 Multi-Client 验证,因为验证者需要根据相同的转换来达成共识并验证结果。在这种情况下,type-1 ZK-EVM 将是最合适的选择,因为它明确遵循以太坊规范。对于 Rollup 特定逻辑方面,Vitalik 也提到了如何通过预编译支持修改 ZK-EVM,并且利用这些预编译就足以支持 Taiko 的 BBR(Based Booster Rollup)设计;
- Taiko 将数据可用性发布在以太坊上,而不像一些 L2 探索替代的数据可用性选项。只要数据被发布到 L1,Taiko 可以轻松适应 Vitalik 的实施提案,该提案介绍了 ZKEVMClaimTransaction 来覆盖状态转换、证明和数据可用性;
Taiko 在多个证明系统上运作,现有的测试网络已经支持 PSE 的 ZK-EVM、SGX 和 Reth。基础设施被配置为适应多个执行节点和证明系统,这将在最后一节中讨论。建立在这个基础设施之上,Taiko 在零知识证明方面将围绕模块化编译展开。
一个模块化和开放性的路线图
模块化
在零知识证明(ZKP)的背景下,考虑到 Multi-Client,Taiko 利用现代编译器获得通用组件,如 Risc-V 或 WASM。然后将这些指令转换为各种证明系统(AIR 或 PIL)的算术化表示,并最终使用不同的 SNARKs 对算术化执行轨迹进行编码。
简而言之,这个流程是在一个 multi-proof 系统中最可行的方法,因为它充分利用了两方面的优势。在节点编译过程中,现代编译器给我们带来以下好处:
- 节点升级与证明无关,因为无需为最新 EIPs 或硬分叉实施电路,只需要保持源代码更新即可;
- 可以从像 LLVM 这样的工具链中免费获得代码优化;
- 交叉编译产生更多多样性;以上述示例为例,Taiko 有 Geth 或 Reth 编译成 RICS-V 或 WASM 指令集,已经具备四套证明;
SNARKs 编译是 Taiko 未来发展重点。请注意,在 PLONK 和 R1CS 等算术化方法与 Halo2、eSTARK 或 Supernova 等后端进行编码时,并不限制于单一 ZK 协议;而整体式 ZK-VM/EVM 则针对特定 ZKP 进行后端实现。随着越来越多项目采用彼此组件以提高性能,整体技术栈可能会变得模块化。
由于 ZKP 研究领域发展迅速,在灵活性方面比直接实施最新结果更重要。为了保持灵活性,在 Powdr Labs 和 Risc Zero 等项目上合作开展交叉编译流水线工作,并尽可能实现模块化。
对于技术精通读者来说,请参考以下具体好处:
- 我们可以通过优化编译器以针对不同后端目标进行优化,例如偏爱「高度门控」(high-degree gates)或使用更多查找参数;
- 像 Keccak 和 Poseidon 哈希函数这样的加速电路可以作为库来实现;
- 我们可以逐步将 ZK 功能(如 LogUp)添加到语言中,并启用相应的后端支持;
- 集成新的 ZK 后端框架以变得更加快速,在一些研究导向的 ZK 项目中,只有概念验证是以代码形式开发的,这使得它们在生产环境中使用起来具有挑战性。通过让编译器承担重要工作,我们可以轻松地应用早期阶段的框架;
- 现有的后端电路,例如使用 Halo2 编写的 PSE ZK-EVM 组件,仍然可以通过直接调用进行重复使用;
在合作努力下,Taiko 已经在开发过程中集成了 Risc Zero 的 zeth 和 ZK-VM,并为其开发了一个额外的 SGX 后端。Taiko 工程师还将把 Powdr 集成到多证明系统中、开发 PIL 语言和库、优化编译、增加更多后端,并进行一般低级别加速处理。在硬件层面上,Taiko 的零知识加速层(ZAL)旨在标准化证明系统(Halo2、Arkworks、Risc Zero、Polygon 等)与加速库(CPU、GPU、FPGA 等)之间的协作关系。
开放性
节点、证明系统和集成后端越多,开放性就越好,因此 Taiko 努力将整个社区聚集在一起,Taiko 团队与其他项目有着悠久的合作历史,例如,在 ZK-EVM 和 Risc Zero 上与 PSE 合作。
现在通过构建更模块化的 ZK 堆栈,Taiko 可以有效地对 API 进行抽象,以实现更好的普及和集成。Taiko 将作为一个平台,在生产中运送证明系统,并在链上进行实战测试。Taiko 真诚邀请所有项目加入,共同打造更好的零知识技术。
Taiko Stack
一个可扩展、灵活的基础设施对于 Taiko 的 multi-proof 范式至关重要。
ZK 有效性证明的来源是节点的状态日志(Execution Trace)和存储证明 (Storage Proofs),这些用于构建见证数据(witnesses)和公共输入。需要注意的是,witnesses 是特定于证明的,而公共输入则与协议相关。拥有强大的基础设施来处理 witnesses 生成非常重要。因此,我们使用一个轻量级主机从 Multi-Client 进行状态日志,并将其转换成多种 witness 提供给相应的证明系统。
在证明端,该设计支持模块化和整体式堆栈,同时我们从目标节点(当前为 Geth)中提取相同的公共输入。
在未来,如果状态日志格式兼容的话,Geth 作为 Taiko 节点可以被另一个节点替代。此外,运行在证明系统上(目前是 Reth)的轻节点也可以被编译成可接受汇编语言的任何实现所替代。
关键要点
- Taiko 相信多重证明=Multi-Client + 多 SNARKs(以及像 SGX 这样的 TEE);
- Taiko 协议非常适合 Multi-Client 系统,因为它有一个开放的 multi-proof 供应链,具有 type-1 执行,在 L1 上发布数据可用性;
- Taiko 设想了一个具有模块化和开放性的 multi-proof 架构,与 Powdr Labs 合作利用节点和 ZKP 的交叉编译,并与 Risc Zero 合作,在他们的 ZK-VM 和 TEEs 上实现 Taiko 的执行,Taiko 还将继续努力与 PSE 改进 ZK-EVM 项目;
- Taiko 的灵活基础设施包括模块化和单片式 ZKP 堆栈;