下面是一篇专为“小白”准备的 Plonk 通俗科普,目标是让你 5 分钟内知道它到底在干什么、厉害在哪里,以及它背后的“魔法”到底是哪一招。
一、先讲个故事:不泄密又能让人相信你
小明自称会瞬间移动,但不想把秘诀告诉任何人。
小红不信,于是两人约定:
- 小红在一张地图上随便画 100 个红点;
- 小明蒙眼进房间,5 秒后出来;
- 如果小明能一口气说出所有点的坐标,小红就信他“瞬移”过。
整个过程小明没有透露任何“瞬移”细节,却能让小红心服口服——这就是“零知识证明”的精髓:
“我向你证明我知道/做了某件事,但除了‘这件事是真的’之外,别的什么都不泄露。”
二、Plonk 登场:把“证明”做成流水线
早期零知识证明(如 Groth16)像“手工定制”:
- 每换一张地图(每换一条业务逻辑)就要重新办一次仪式、重新烧一套模具。
- 仪式一旦搞砸,整条链都可能被“造假证书”攻击。
Plonk 的脑洞:
“能不能只做一次通用模具,以后不管画多少张地图、画什么形状的地图,都能反复用?”
答案是——可以!Plonk 把“证明”拆成三步乐高积木:
-
把“问题”画成电路
任何计算(转账、游戏、AI 推理……)都能拆成“加法”“乘法”两种门电路,就像乐高只有 2 种基础砖,但足够搭出摩天大楼。 -
把电路“压”成一条大多项式
用初中数学里的“代入几个点就能还原整条多项式”这一招(拉格朗日插值),把电路里所有“门”的约束关系变成一条超高次曲线。
只要这条曲线在某几个神秘点取值为 0,就说明所有门都乖乖满足等式,没人作弊。 -
给多项式戴“一次性面具”
用密码学家 Kate 阿姨的“多项式承诺”技术:- 证明者先对整条曲线拍一张“哈希照片”(承诺)发给验证者;
- 验证者随机点名一个点,让证明者给出“曲线在这一点的值”以及“现场打开面具”的额外证据;
- 因为哈希照片事先已拍好,证明者事后没法撒谎;又因为只暴露一个点,整条曲线的其他信息依旧保密。
三、Plonk 的三大“爽点”
-
一次仪式,终身有效
不管以后业务逻辑怎么改,只要初始“通用设置仪式”安全完成,后面再也无需重启。 -
升级不折腾
想加新功能?直接改电路模板就行,底层公共参数不动,老用户无需重新下载钱包。 -
速度快、省空间
证明大小恒定在 ~1 kB 左右,验证时间不到 0.1 秒,手机也能秒级完成。
四、一句话总结
Plonk 就是把“零知识证明”做成了
“通用模具 + 乐高电路 + 多项式拍照”的流水线,
让隐私保护不再昂贵,让区块链扩容不再遥远,
也让普通开发者第一次可以“像写普通程序一样”给智能合约加上隐身斗篷。
彩蛋:如果你还想再“白”一点,记住下面 12 字口诀——
“电路拆积木,多项式打包,哈希拍照,零知识秒过!”
下面把“小白故事 + 开源代码导航”一次性打包给你。
读完你不仅能跟朋友讲清楚 Plonk 是啥,还能直接点开 GitHub 跑通第一个“零知识证明 Hello World”。
以下是开源代码和简单说明
二、开源代码速览:从“看热闹”到“跑代码”
下面 6 个仓库,难度从“玩具级”到“工业级”排好序,你可以按自己口味直接点开玩。
- baby-plonk(Python,最友好)
https://github.com/Antalpha-Labs/baby-plonk
特点:
- 只有 500 行 Python,注释比代码多。
- 自带 Jupyter Notebook,把“电路→多项式→证明→验证”全程可视化。
- 适合:第一次想亲手算出“零知识证明”长啥样的人。
跑通命令:
git clone https://github.com/Antalpha-Labs/baby-plonk
pip install -r requirements.txt
jupyter notebook
# 打开 plonk_baby.ipynb 一路 Shift+Enter
- Plonk-SageMath(Python,学术风)
https://github.com/lrnzsir/Plonk-SageMath
特点:
- 用数学软件 SageMath 写,变量名和论文一一对应,边看论文边对照代码最爽。
- 自带两个示例电路:多项式求值、SHA256 工作量证明。
跑通命令:
sudo apt install sagemath
git clone https://github.com/lrnzsir/Plonk-SageMath
sage plonk.py
- tobias-rothmann/plonk(Rust,教科书级)
https://github.com/tobias-rothmann/plonk
特点:
- 代码结构完全对照 2019 年原始论文,函数名就是论文章节号。
- 作者把 KZG、DL-KZG、PED-KZG 都做成了 trait,想换承诺方案只需改一行。
跑通命令:
cargo run --example simple_circuit
- ZK-Garage/plonk(Rust,工业级)
https://github.com/ZK-Garage/plonk
特点:
- 基于 arkworks 代数库,支持并行、WebAssembly 前端。
- 官方给出基准测试:100 万门电路 3 秒出证明,手机浏览器 0.1 秒验证。
跑通命令:
cargo build --release
cargo test --release
- snarkjs + fflonk(JavaScript,浏览器就能玩)
https://github.com/iden3/snarkjs
特点:
- 把 Plonk/FFLONK 做成纯 JS,前端直接跑,无需安装 Rust。
- Polygon zkEVM 同款,链上验证 Gas 比 Groth16 再省 10%。
跑通命令(浏览器一行代码):
npm i snarkjs
npx snarkjs plonk setup circuit.r1cs pot12_final.ptau proof_key.zkey
npx snarkjs plonk prove proof_key.zkey witness.wtns proof.json public.json
- Aztec/barretenberg(C++,祖师爷实现)
https://github.com/AztecProtocol/barretenberg
特点:
- 论文第一作者团队维护,被 zkSync、Aztec 钱包等直接拿来商用。
- 支持 TurboPlonk、UltraPlonk、lookup 等全部升级。
跑通命令:
git clone --recurse-submodules https://github.com/AztecProtocol/barretenberg
cd barretenberg && cmake -Bbuild && cmake --build build
./build/bin/plonk_tests
三、一张图总结(保存下来当速查表)
难度 语言 仓库名 适合人群
★☆☆ Python baby-plonk 零基础,想第一眼看到“证明长啥样”
★★☆ Python Plonk-SageMath 论文党,喜欢边读边对照公式
★★☆ Rust tobias-rothmann/plonk 想了解“论文→代码”一一映射
★★★ Rust ZK-Garage/plonk 想写生产级代码,需要 WASM/并行
★★☆ JS snarkjs 前端同学,浏览器里直接跑
★★★ C++ barretenberg 想追祖师爷实现,或二次开发钱包
四、下一步可以干啥?
- 先把 baby-plonk 跑通,亲手打印出一张“证明 JSON”,大小 1 kB 左右。
- 把证明丢进 snarkjs 的在线验证页面,0.1 秒看到“VERIFIED=true”,感受 Gas 才 20 万的链上验证。
- 接着去 ZK-Garage 写个自己的小电路(比如“证明我解了数独”),编译成 WASM,发到朋友圈:
“看,我能在浏览器里给你证明我会解数独,却又不告诉你答案!”
五、12 字口诀背下来,下次轮到你给小伙伴科普
“电路拆积木,多项式打包,哈希拍照,零知识秒过!”