值得信赖的区块链资讯!
L2 – zkSync证明聚合
PLONK算法虽然只需要一次初始设置,但是证明的计算复杂度相对Groth16算法更高。PLONK算法的好处,远不止初始设置这么简单,因为任何电路都可以共用初始设置,PLONK算法本身的验证逻辑也可以使用初始设置。也就是说,基于PLONK算法可以构建算法验证的电路,从而基于PLONK算法可以证明PLONK算法的证明。
Matter-Labs开源了PLONK算法的验证电路,能证明多个PLONK证明,相关代码链接如下:
https://github.com/matter-labs/recursive_aggregation_circuit
代码量相对比较小,一切从RecursiveAggregationCircuit的synthesize函数开始。
synthesize函数
synthesize的逻辑相对清晰。整个电路实现了如下的功能:
1/ 电路“验证”所有需要证明的proof是否正确
2/ 验证“验证”proof对应的vk是否是指定的那些vk(存储在智能合约)
3/ 打包(packing)所有的公开输入信息(使用sha256算法)
整个逻辑如下图所示,图中的1/2/3就是对应的功能。

步骤2/3比较简单易懂。核心在步骤1。aggregrate_proof函数实现电路验证某个proof是否正确。
let mut pairs_for_generator = vec![];
let mut pairs_for_x = vec![];
for proof_idx in 0..self.num_proofs_to_check {
let proof = &proof_witnesses[proof_idx];
let vk = &vk_witnesses[proof_idx];
let [pair_with_generator, pair_with_x] = aggregate_proof::<_, _, T, CS::Params, P, _, _>(
cs,
self.transcript_params,
&proof.input_values,
&vk,
&proof,
&self.aux_data,
self.rns_params,
)?;
pairs_for_generator.push(pair_with_generator);
pairs_for_x.push(pair_with_x);
}
验证后输出两个结果:pair_with_generator 和 pair_with_x。
查看PlonK算法的验证逻辑的最后可以发现,验证的最后一步是验证两个配对函数:

左边的配对函数的g2部分是x,右边的配对函数的g2部分是1(generator)。查看aggregate_proof的函数发现,该“验证”电路,并不验证配对函数的结果是否相等。所以,“验证”电路并没有完整的验证。
aggregate_proof证明了pair_with_generator 和 pair_with_x计算正确。感兴趣的小伙伴可以自行查看该函数。在获得了所有证明的pair_with_generator 和 pair_with_x后,“聚合”在一起。
为了防止攻击,“聚合”采用随机因子:
let mut sponge = StatefulRescueGadget::<E>::new(self.rescue_params);
for w in fs_witnesses.into_iter() {
sponge.absorb_single_value(cs, w, self.rescue_params)?;
}
sponge.pad_if_necessary(self.rescue_params)?;
let aggregation_challenge = sponge
.squeeze_out_single(cs, self.rescue_params)?
.into_allocated_num(cs)?;
绑定proof信息生成随机信息。aggregation_challenge就是随机因子,记作c。
let mut scalars = vec![];
scalars.push(aggregation_challenge.clone());
let mut current = aggregation_challenge.clone();
for _ in 1..self.num_proofs_to_check {
let new = current.mul(cs, &aggregation_challenge)?;
scalars.push(new.clone());
current = new;
}
每个pair_with_generator/x前面的系数是c^n。在获得相应点对应的系数后,最后做一次multiexp,将多个点“聚合”在一起。
let pair_with_generator = WP::multiexp(
cs,
&scalars,
&pairs_for_generator,
None,
self.rns_params,
&self.aux_data,
)?;
let pair_with_x = WP::multiexp(
cs,
&scalars,
&pairs_for_x,
None,
self.rns_params,
&self.aux_data,
)?;
整个过程示意如下:

通过这种方法,原本每个proof都需要进行配对函数的验证计算,变成了一次配对函数的验证计算。特别注意的是,配对函数的验证并不是在电路中验证的,这部分的验证在“智能合约”中检查。查看contract/PlonkCore.sol文件的verify_recursive函数:
function verify_recursive(
Proof memory proof,
VerificationKey memory vk,
uint256 recursive_vks_root,
uint8 max_valid_index,
uint8[] memory recursive_vks_indexes,
uint256[] memory individual_vks_inputs,
uint256[16] memory subproofs_limbs
) internal view returns (bool) {
(uint256 recursive_input, PairingsBn254.G1Point[2] memory aggregated_g1s) = reconstruct_recursive_public_input(
recursive_vks_root, max_valid_index, recursive_vks_indexes,
individual_vks_inputs, subproofs_limbs
);
assert(recursive_input == proof.input_values[0]);
(bool valid, PairingsBn254.G1Point[2] memory recursive_proof_part) = aggregate_for_verification(proof, vk);
if (valid == false) {
return false;
}
// aggregated_g1s = inner
// recursive_proof_part = outer
PairingsBn254.G1Point[2] memory combined = combine_inner_and_outer(aggregated_g1s, recursive_proof_part);
valid = PairingsBn254.pairingProd2(combined[0], PairingsBn254.P2(), combined[1], vk.g2_x);
return valid;
}
该函数通过aggregate_for_verification函数检查提交的聚合proof本身是否正确。在聚合正确的基础上,调用PairingsBn254.pairingProd2检查“聚合”过的pair_with_x/generator是否正确。
到此,可以看出,这是一种”聚合“证明验证电路,能”部分“验证多个基于PlonK算法的证明。看懂了synthesize函数,再看证明的接口函数就比较容易理解:create_recursive_circuit_vk_and_setup和proof_recursive_aggregate_for_zksync。感兴趣的小伙伴可以自行查看。
电路的核心是电路的验证,PlonK算法的验证都是基于“点”的运算。该电路是如何证明一个椭圆曲线上的点的运算是核心中的核心。
点运算证明
点运算的电路实现在franklin-crypto库的src/plonk/circuit/curve/sw_affine.rs文件中:
pub fn multiexp<CS: ConstraintSystem<E>>(
cs: &mut CS,
scalars: &[Num::<E>],
points: &[Self],
bit_limit: Option<usize>
) -> Result<Self, SynthesisError> {
电路证明multiexp采用的是NAF查表法。scalar从高到低的每个bit上点算出来后,double-add。MultiexpTable就是NAF建立的映射表。
有趣的是,在Fq上的点(AffinePoint)的表示:
pub struct AffinePoint<'a, E: Engine, G: CurveAffine> where <G as CurveAffine>::Base: PrimeField {
pub x: FieldElement<'a, E, G::Base>,
pub y: FieldElement<'a, E, G::Base>,
pub value: Option<G>,
}
pub struct FieldElement<'a, E: Engine, F: PrimeField>{
// this is kind-of normal UintX limbs
pub binary_limbs: Vec<Limb<E>>,
// we can not multiply by power of modulus of our base field E,
// so we keep only one single limb
pub base_field_limb: Term<E>,
pub representation_params: &'a RnsParameters<E, F>,
pub value: Option<F>,
}
pub struct Limb<E: Engine> {
pub term: Term<E>,
pub max_value: BigUint,
}
为了在Fr上能模拟Fq上的点,Fq上的点分成多个Limb。每个Limb都有单独的变量(Variable)。具体的点的运算以及Multiexp的电路证明,感兴趣的小伙伴可以查看相关代码。
总结:
Matter-Labs开源了PLONK算法的验证电路,能实现多个PLONK证明的聚合证明。聚合电路证明某个证明可验证,并且验证使用的VK是正确的。注意的是,PLONK算法验证的最后一步(配对函数)并没有在电路中验证,而是依赖智能合约进行验证。
比推快讯
更多 >>- 数据:7.28 万枚 SOL 从 Stake.com 转出,经中转后流入 Binance
- 过去 7 日 CEX 净流入 4300.25 枚 BTC
- IEA:创纪录储备原油将立即投放亚洲市场,欧美需等到 3 月底
- 伊朗外长:从未提出过停火及谈判请求
- Venus Protocol:已暂停 THE 借款与提取,其他市场未受影响
- 分析:疑似某个从 Tornado 收到 7400 枚 ETH 地址主导 CAKE 和 THE 抵押品清算事件
- 国际能源署:紧急储备石油将很快开始流入全球市场
- 业内专家:AI 大模型投毒是新型不正当竞争
- 数据:多个代币出现冲高回落,FLOW 跌超 13%
- Sky 已批准 7000 万枚 USDS 支持剩余启动阶段 Sky Agent
- USDC 发行量一周内增加约 17 亿枚,储备资产价值约 789 亿美元
- 阿根廷总统米莱或涉嫌通过推广 LIBRA 代币获利 500 万美元
- CFX 4 小时线持续走高,或受此前人民币石油结算传闻带动
- 波场 TRON 社区发起 v4.8.1 新功能讨论提案,推动网络兼容性进一步升级
- Bitwise CIO:若比特币夺取黄金与国债部分价值储存市场分享,价格将升至 100 万美元
- 某鲸鱼在 Venus 遭攻击 THE 暴涨后向 Binance 转入 366.7 万枚 THE,或将获利 72.9 万美元
- Venus Protocol:已发现 THE 资金池存在异常活动,正在积极调查中
- 315 晚会曝光 AI 大模型“被投毒”,给 AI“洗脑”已成产业链
- THE 短时涨超 90%后暴跌约 50%,现报 0.23 美元
- THE插针短时上涨 116%至 0.6 美元,随后下跌 61%至 0.234 美元
- Venus Protocol 疑似遭闪电贷攻击,THE 出现大规模清算
- 美国能源部长:伊朗冲突将在接下来几周结束,随后石油供应将回升、能源价格将下降
- Strategy 比特币持仓目前浮亏 5.96%,约为 33.4 亿美元
- Wintermute CEO:以太坊基金会是保持赛博朋克梦想的关键,将继续持有 ETH
- Wintermute CEO:为了文化和 Meme,将继续持有 ETH
- 分析师:贝莱德单独推出质押型以太坊 ETF 因避免增加惩罚性减值风险
- 以色列军方发言人:对伊朗的军事行动至少再持续三周
- MoonPay 推出支持 Ledger 签名的 AI 交易代理
- Michael Saylor 再次发布比特币 Tracker 信息,下周或将披露增持数据
- 分析:伊朗石油出口枢纽哈尔克岛遭袭,油价波动性或将进一步上升
- 美 SEC 专员建议审慎推进代币化证券“创新豁免”并提出信息披露制度等关键问题
- 韩国将审议对 Bithumb 处罚,罚款金额或超 Upbit 的 352 亿韩元处罚
- 10x Research:山寨币买入信号显现,看好 AI 赛道加密资产
- 美联储 3 月降息 25 个基点的概率仅为 1.9%
- 数据:若 ETH 跌破 2,014 美元,主流 CEX 累计多单清算强度将达 6.23 亿美元
- ShapeShift 创始人过去 5 天已花费 1775 万枚 USDT 买入 8576 枚 ETH
- Polymarket 上预测比特币今年回升至 10 万美元概率为 40%
- 观点:稳定币监管不确定性或使银行处境更不利,存款或因收益差面临迁移压力
- 木头姐:目前是买入波动性较大股票的好时机,AI 还未进入炒作周期
- Tom Lee:美股或于本月触底,油价上涨实际对美股相对利好
- 市场消息:腾讯已成为 OpenClaw 社区赞助商
- Circle USYC 规模月内增长超 41%,登顶全球最大代币化美债基金
- 数据:过去 1 小时 Binance 净流入 4,710.75 万 USDT
- 美以伊冲突进入第三周,海湾地区股市小幅下跌
- 数据:监测到 3,980 万 USDT 转入 Binance
- DWF 合伙人:机构资金转向配置 BTC、ETH 和 RWA,传统山寨季正在消失
- 中美经贸磋商在法国巴黎开始举行
- 美国首批 8600 万桶战略原油下周将投放市场,采用借油还油溢价模式
- 四国回应特朗普呼吁多国派遣军舰在霍尔木兹海峡护航
- “1011 内幕巨鲸”代理人:建议近期降低股票敞口但看多原油
比推专栏
更多 >>- 懂王:登陸那個島|0314 Middle East
- 懂王:那就大家一起難受吧|0313亞盤後
- 当黄金被「困」在迪拜,是时候旗帜鲜明「唱多」香港了
- 東大、波斯、阿拉伯【第七次/進展/能源變量】|0310東3.5
- 从 HSK 到 USDGO:香港两大持牌机构,开始「脱钩」
- There is no new boss YET
- New situation and new games|0305 Asian
- B52 Were on the way to Iran|0304 Middle East
- 开放独角兽门票:从 Robinhood 到 MSX,一场 Pre-IPO 的链上平权实验
- Big player's 『Trigger moment』|0227Europe
观点
比推热门文章
- 过去 7 日 CEX 净流入 4300.25 枚 BTC
- IEA:创纪录储备原油将立即投放亚洲市场,欧美需等到 3 月底
- 伊朗外长:从未提出过停火及谈判请求
- Venus Protocol:已暂停 THE 借款与提取,其他市场未受影响
- 分析:疑似某个从 Tornado 收到 7400 枚 ETH 地址主导 CAKE 和 THE 抵押品清算事件
- 国际能源署:紧急储备石油将很快开始流入全球市场
- 业内专家:AI 大模型投毒是新型不正当竞争
- 数据:多个代币出现冲高回落,FLOW 跌超 13%
- Sky 已批准 7000 万枚 USDS 支持剩余启动阶段 Sky Agent
- USDC 发行量一周内增加约 17 亿枚,储备资产价值约 789 亿美元
比推 APP



