You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

snarkjs执行plonk setup报zkey file is not groth16错误咨询

错误根因

报错和PLONK setup执行逻辑无关,核心问题是直接复用了Groth16专属的zkey校验命令校验PLONK生成的zkey文件。
snarkjs对不同证明系统的命令做了严格隔离:

  • 触发报错的snarkjs zkey verify逻辑是Groth16协议专用,代码硬编码仅识别protocol字段为groth16的zkey文件,只要检测到其他协议类型就会抛出zkey file is not groth16错误。
  • PLONK不存在Groth16定义的Phase2多方计算流程,setup完成后不需要走Groth16体系下的zkey校验逻辑。
修复步骤

修改compile-Multiplier3-plonk.sh脚本,删除原Groth16流程中的snarkjs zkey verify相关代码,替换为PLONK对应的命令集即可:

  1. PLONK setup执行完成后,使用PLONK专属校验命令验证zkey有效性:
    snarkjs plonk verify Multiplier3_plonk/circuit_final.zkey
    
  2. 后续所有环节统一使用PLONK前缀的命令,禁止跨协议混用Groth16命令:
    • 导出验证密钥:snarkjs plonk export verificationkey Multiplier3_plonk/circuit_final.zkey Multiplier3_plonk/verification_key.json
    • 生成证明:snarkjs plonk prove Multiplier3_plonk/circuit_final.zkey witness.wtns proof.json public.json
    • 验证证明:snarkjs plonk verify Multiplier3_plonk/verification_key.json public.json proof.json
PLONK与Groth16在snarkjs中的编译流程差异
  • 共通环节:二者前置的circom电路编译逻辑完全一致,都会生成.r1cs、.wasm、.sym文件,且复用同一套Powers of Tau生成的ptau文件。
  • Setup环节差异:
    • Groth16需要分阶段执行:先运行snarkjs groth16 setup生成初始zkey,再经过多轮Phase2多方贡献,每轮贡献后都需要执行snarkjs zkey verify校验zkey合法性,最终生成可用的circuit_final.zkey。
    • PLONK仅需单步执行snarkjs plonk setup即可直接生成最终可用的zkey,没有Phase2多方贡献环节,也不需要执行Groth16体系下的zkey校验。
  • 命令边界:所有zkey *子命令均为Groth16专属,PLONK全流程命令均以plonk为前缀,二者不可交叉调用。
排查参考资料
  • 本地snarkjs CLI帮助文档:终端执行snarkjs plonk --help可查看所有PLONK相关子命令及参数说明,可直接对照命令列表排查脚本中混用的Groth16命令。
  • snarkjs本地源码:查看安装目录下的cli.cjs文件,可直接看到命令路由逻辑——所有zkey开头的子命令都绑定到Groth16处理模块,plonk开头的子命令绑定到PLONK处理模块。
  • zku课程官方示例仓库:参考仓库内提供的PLONK电路编译示例脚本,可直接对照调整自己脚本里的流程顺序和命令。

内容的提问来源于stack exchange,提问作者Tomosuke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:21:18