为什么要转?
将 zk-STARK 的证明提交到 EVM(以太坊虚拟机)链上时,通常需要将 zk-STARK 证明转换或包装成 zk-SNARK 证明,主要原因如下:
1. EVM 的计算和存储成本限制
- 证明大小 :zk-STARK 证明通常比 zk-SNARK 证明大得多(可以达到数百 KB ),而 zk-SNARK 证明的大小通常为 128 字节左右。EVM 的 gas 费用与存储和计算的使用密切相关,因此上传较大的证明到链上会显著增加成本。
- 验证开销:zk-STARK 验证需要更高的计算资源,而 zk-SNARK 验证由于使用了 Pairing-based cryptography(例如 BLS12-381 曲线),其验证效率高且计算成本较低。
2. EVM 对 zk-SNARK 的原生支持
以太坊已经通过 precompiled 合约原生支持了 zk-SNARK 验证(例如 BN254 配对验证)。这意味着开发者可以直接在以太坊上调用这些预编译合约验证 zk-SNARK 证明,而无需部署额外的复杂逻辑。
- zk-STARK 的验证则需要额外的电路实现,可能带来更高的开发和 gas 成本。
3. 兼容性和工具链
- 工具链支持:目前以太坊生态中,许多工具和框架(例如 zkSync、Polygon zkEVM)围绕 zk-SNARK 构建,开发者可以更轻松地将 zk-SNARK 集成到现有的智能合约中。
- EVM 适配:为了兼容以太坊生态和现有智能合约,开发者通常会选择将 zk-STARK 证明转换成 zk-SNARK 证明。
4. 逐步迁移策略
- zk-STARK 的核心优势在于其透明性(不依赖可信设置)和更高的生成效率,但 zk-SNARK 在链上运行时的性能优势更显著。
- 因此,在实际应用中,可以先在链下生成 zk-STARK 证明,然后将其转换为较小的 zk-SNARK 证明提交到链上。这种策略可以兼顾 zk-STARK 和 zk-SNARK 的优点。
如果未来 EVM 原生支持 zk-STARK 验证(例如通过引入新型预编译合约或扩展 EVM),这种转换步骤可能会被简化甚至不再需要。
是怎么转的,什么原理?
将 zk-STARK 证明转换成 zk-SNARK 证明的过程,通常是通过一种**递归证明(recursive proof composition)**的技术来实现的。以下是这个转换的核心原理:
1. 核心思想:递归证明
递归证明是通过使用 zk-SNARK 生成一个新的证明,该证明验证 zk-STARK 的正确性。具体来说:
- 第一步:在链下生成 zk-STARK 证明,证明某个复杂计算的正确性。
- 第二步:将 zk-STARK 的验证过程设计成一个新的电路。
- 这个电路的作用是验证 zk-STARK 证明的正确性。
- 这种验证逻辑被嵌入到一个 zk-SNARK 的证明系统中。
- 第三步:使用 zk-SNARK 生成一个小而高效的递归证明,用于证明 zk-STARK 的验证过程是正确的。
最终结果是:原本体积较大的 zk-STARK 证明,被压缩成了一个小的 zk-SNARK 证明,而 zk-SNARK 的验证在 EVM 上高效可行。
2. 转换过程的技术细节
(1) 描述 zk-STARK 验证为一个电路
- zk-STARK 验证本质上是一个固定的算法,包含哈希函数(如 FRI 协议中使用的 Merkle 树验证)和多项式一致性检查等。
- 通过 R1CS(Rank-1 Constraint System)或等效的电路描述,将 zk-STARK 的验证步骤表示成一组约束,这可以在 zk-SNARK 支持的证明系统中运行。
(2) zk-SNARK 证明该验证电路的正确性
- 构造一个 zk-SNARK 电路,输入 zk-STARK 证明和公共参数(如公钥和 Merkle 根)。
- 这个 zk-SNARK 电路运行 zk-STARK 验证逻辑,检查 zk-STARK 证明是否有效。
(3) 提交 zk-SNARK 证明
- 最终,生成的 zk-SNARK 证明小且高效,可直接提交到 EVM 链上。
3. 为什么递归证明可行?
递归证明的关键在于 zk-SNARK 本身的高效性:
- zk-SNARK 的验证复杂度与电路大小几乎无关,只与证明的固定参数相关。
- 通过设计,将 zk-STARK 验证逻辑封装为一个相对小的电路,使得 zk-SNARK 的验证高效完成。
4. 实际应用中的优化
(1) 使用专门的 STARK 验证工具
一些项目(如 StarkNet 或 zkSync)已经开发了专门的工具,用于高效生成 zk-STARK 证明,并将其与 zk-SNARK 集成。这些工具通常对电路和证明过程进行了优化,以减少转换开销。
(2) 分层设计
将 zk-STARK 逻辑分成多层,每一层的验证逻辑由上一层的 zk-SNARK 证明表示。
: 区块链知识系列
: 密码学系列
: 零知识证明系列
: 共识系列
: 公链调研系列
: BTC系列
: 以太坊系列
: EOS系列
: Filecoin系列
: 联盟链系列
: Fabric系列
: 智能合约系列
: Token系列