1. 引言
Plonky2为Polygon团队2022年1月发起的项目。其定位为ZKP证明系统。
开源代码实现见:
- https://github.com/0xPolygonZero/plonky2(Rust + 汇编)
Plonky2可解锁当今2大主流ZKP类型——SNARKs和STARKs的扩容优势。
每个ZKP证明系统都有2大基本要素:
- 1)在某算术电路内编写程序的方式。
- 2)多项式承诺方案(Polynomial Commitment Scheme,PCS)。
2. Plonky2加速秘诀之:FRI多项式承诺方案——Fast、Small、Big、Slow
许多ZKRollups采用KZG作为其承诺方案。
KZG的问题之一在于其有限域是基于椭圆曲线的,椭圆曲线密码学有诸多限制,如:
- 1)以太坊当前并不原生支持,可高效进行递归的椭圆曲线。
- 2)椭圆曲线需要使用更大的有限域(至少256位),这在当代CPU上效率更低。
不同于KZG或Bulletproofs,Polygon Zero团队选择FRI多项式承诺方案,FRI多项式承诺方案通常与STARKs关联。
当需考虑到speed速度时,FRI提供了有趣的 time-space 权衡:
- 1)FRI支持快的证明生成时效,但所生成的proof很大。大的proof若提交到以太坊主网上将非常昂贵和复杂。
- 2)FRI也可生成很小的proof,但会非常慢。
Plonky2支持以上2种场景:
- 1)当关注速度时,采用大proof。
- 2)当关注proof size时,采用小proof。
为此,Plonky2的递归中的所有步骤,采用不同的参数,来对特定的proofing layer进行优化。因此Plonky2可充分利用FRI中独特的time-space权衡。正是这种灵活性使Plonky2在一系列实现中如此有用。
3. Plonky2加速秘诀之:Goldilocks Field
Plonky2解锁了FRI的性能提升能力,如何要让生成证明的速度更快?
正如Bredan在ZK Whiteboard Session中所指出:
若想真正更快,需关注到在硬件层面何为快?
即,可通过对用户硬件优化来构建更快速的生成ZKP的工具。且当今消费级CPU原生支持64位运算。
之前的recursive proof composition方案,需要:
- trusted setup
- cycles of expensive, pairing-friendly elliptic curves
但Plonky2不需要,秘诀就在于:
- Polygon’s Hamish Ivey-Law所提议的Goldilocks Field—— p = 2 64 − 2 32 + 1 p=2^{64}-2^{32}+1 p=264−232+1。
Goldilocks Field针对硬件端的优化有2方面:
- 1)其为64位,即意味着任意小于 p p p的域元素都可以64位表示。
- 2) p p p的代数结构,支持在CPU上非常高效运算。
以域运算性能评估,简单的采用Goldilocks 64位域,比KZG承诺中的256位域,证明速度要快40倍。
4. Plonky2加速秘诀之:Starky for Fold
ZKP中的“recursion递归”属性,是指:
- 使用单个proof,来证明多个独立的proofs。
递归是使用ZKP来解决区块链扩容的关键,因为其可将多个交易proofs,转换为单个proof,从而大幅降低验证交易的开销。
Plonky2是为递归而生的:
在ZK电路内写VM的最好方式不是采用Plonky2,而是采用Starky。
Starky为Polygon Zero团队开发的另一互补证明系统:
- Plonky2:为针对递归和relational connectivity而优化。相比于为单笔交易生成证明所需,其更robust。
- Starky:采用与Plonky2相同的有限域和哈希函数,但是没有computation-heavy arithmetizations。
因此,从交易层来看,Starky并行生成证明,然后Plonky2用于在每个额外层进行递归。
每组proofs可采用Plonky2来转换为(具有lower rate的)单个proof,因为:【即,rate越低,对应 fastest (and largest) proof;而rate越高,对应smallest proof size。】
- the smallest rate compatible with the transition constraints renders the fastest (and largest) proof.
- Those large proofs are again converted into a single proof using a higher rate, which generates the smallest proof size possible for posting to Ethereum’s Mainnet.
即,根据需要让proof生成速度快,或者根据需要让proof小。
- 2020年,首个提交到以太坊的递归证明,生成用时约60秒。
- 而2022年11月,Plonky2在MacBook Pro上生成递归证明用时仅需170毫秒。
参考资料
[1] Polygon Labs 2022年11月博客 Plonky2: A Deep Dive