scaffold-garaga
https://github.com/KevinSheeranxyj/scaffold-garaga
从图中可提取出的英文链接是:<https://www.altoros.com/blog/zero-knowledge-proof-improving-privacy-for-a-blockchain> ,这是一篇关于零知识证明(zero - knowledge proof )如何为区块链提升隐私性的博客文章链接。
这4张图整体呈现的是零知识证明(Zero - Knowledge Proof,ZKP)相关交互流程,围绕两个角色(常称证明者Prover、验证者Verifier ,图里用A/B、P/V等标识),拆解如下:
**证人 **A 知道这个秘密的事实决定了一些问题,这些问题总是可以被 A 正确回答的。首先,A 从集合中随机选择任何问题并计算证明。然后,A 将证明发送给 B。
- 角色:A(证明者,要证明自己掌握知识)、B(验证者,验证A的知识)
- 流程:
1. A 从 “问题池(questions)” 选一个问题(Choose a question),明确要回应的内容;
2. A 基于问题计算证明(Calculate a proof),这里开始体现零知识证明核心:用“证明”替代直接“答案”,避免暴露原始信息;
3. A 将证明(Proof) 发给 B(Send the proof to B ),完成传递。
- 关键:引入 “Proof” 概念,不再直接传答案,而是传“证明自己知道答案/知识”的凭证,开始贴近零知识证明逻辑。
挑战. 之后,B 从问题集中选择一个问题,并要求 A 回答。
- 角色:A(证明者)、B(验证者,更主动)
- 流程:
1. B 从 “问题池(questions)” 选问题(Choose a question),由验证者主导提问;
2. B 要求 A 给出问题答案(Please, give the answer for the question ),A 需回应。
- 关键:突出验证者主动性,是零知识证明中“挑战 - 回应”模式的一种体现(验证者选挑战,证明者回应),但仍停留在“直接要答案”阶段,后续会进化为要“证明”。
- 角色:A(可理解为证明者雏形)、B(验证者雏形)
- 流程:A → B 单向传递 “问题答案(answer for the question)”,是最简化的“知识传递”示意,为后续零知识证明流程做基础铺垫,体现“一方给另一方答案”的原始交互。
- 角色:P(Prover,证明者,掌握机密信息)、V(Verifier,验证者,验证信息)
- 流程:
1. P 给 “生成证明函数(Function ‘Make a proof’)” 发机密信息(confidential info),作为证明依据;
2. 函数生成证明(proof) 反馈给 P(Get the proof );
3. P 将证明发给 V(Send the proof );
4. V 把证明交给 “验证证明函数(Function ‘Check a proof’)” 做验证(Check the proof );
5. 函数把验证结果(result) 反馈给 V(Get the result )。
- 关键:完整覆盖零知识证明核心流程——证明者用机密信息生成“零知识证明”,验证者无需知晓机密内容,仅通过“验证函数”确认证明有效性,实现 “证明者向验证者证明自己掌握某知识/信息,同时不泄露该知识/信息本身” 的零知识证明目标。
整体逻辑串联
从最基础的,逐步引入“证明”替代答案体现(图1)、验证者主导提问(图2)“直接传答案”(图3),最终到完整零知识证明流程(图4),一步步演示零知识证明如何让“证明知识”和“泄露知识”解耦:证明者不用暴露原始机密,仅通过“证明”让验证者相信自己“知道答案/掌握信息”,这也是区块链、隐私计算等领域常用的保护数据隐私的核心技术逻辑之一(对应你图里“零知识证明为区块链提升隐私性”的描述 )。
使用零知识证明,可以在保持用户匿名的同时验证区块链交易。
What’s a zero-knowledge proof?
x
,除了他们知道值 x 之外,
没有传达任何信息。零知识证明的本质是,仅仅通过揭示某些信息来证明某人拥有某些信息的知识是微不足道的,挑战在于在不揭示信息本身或任何额外信息的情况下证明这种拥有是合理的。The general structure of a ZKP
Want details? Watch the video!
零知识证明的一般结构由参与者 A 和 B 之间的三个顺序动作组成。这些行为被称为见证 、 挑战和回应 。
**证人 **A 知道这个秘密的事实决定了一些问题,这些问题总是可以被 A 正确回答的。首先,A 从集合中随机选择任何问题并计算证明。然后,A 将证明发送给 B。
挑战. 之后,B 从问题集中选择一个问题,并要求 A 回答。
**反应 **A 计算出答案并将其发送回 B。
接收到的答案允许 B 检查 A 是否真的知道秘密。这个过程可以重复多次,直到 A 做出猜测而不是知道正确答案的概率变得足够低。
这是由 Jean-Jacques Quisquater 首次发表的。在本例中,Peggy 充当证明者,而维克托充当验证者。
阿里巴巴洞穴的故事:
在故事中,洞穴的形状像一个环。入口在左边,右边有一扇魔法门挡住了。佩吉想向维克托证明她知道打开魔法门的密语。但是,她不想泄露秘密。
为了证明佩吉知道这个秘密单词,他们把从入口开始的左右两条路径标记为 A 和 B。维克托在洞外等着,佩吉走了进来。佩吉躲着维克托,沿着路径 A 或 B 走着。维克托然后进入洞穴,喊出小路的名字--A 或 B--他想让佩吉回去。考虑到佩吉实际上知道这个秘密,如果需要的话,她可以很容易地打开魔法门,然后使用维克托选择的路径返回入口。
如果佩吉现在确实知道了这个秘密单词,那么只有当维克托说出她进入后所走的路径时,她才能从门返回到入口处。由于维克托选择的路径是随机的,佩吉不知道关键字的概率是 1/2
。如果你重复这个过程 k
次,那么概率就变成了(½)^k
。这样,就足够了,例如,重复该程序 20
次,以证明佩吉知道的关键字。
如果维克托把所有的事情都录下来,那么视频就不会成为任何其他人的证据,因为他们可以事先商定佩吉会去哪里。这意味着她可以在不知道关键字本身的情况下找到正确的出路。正如我们所看到的,洞穴的例子满足以下属性:完备性、可靠性和零知识。
请注意,ZKP 需要用户之间的交互。虽然在单轮和常数协议中交互的数量很少,但两个用户必须同时参与。
P 将秘密信息作为参数传递给一个特殊的函数-“make a proof”(见下图)。输出是一些“证明”的值。之后,P 向用户 V 发送“证明”。然后,V 可以使用“证明”和另一个特殊功能-“检查证明”来检查 P 是否知道秘密信息。
认证系统 。ZKP 证明的研究一直受到认证系统的启发,其中一方希望通过一些秘密信息(如密码)向第二方证明其身份,但不希望第二方了解任何有关秘密的信息。
道德行为 。ZKP 在加密协议中的一个用例是在维护隐私的同时强制诚实的行为。粗略地说,这个想法是强迫用户使用 ZKP 来证明其行为符合协议。由于可靠性,我们知道用户必须诚实行事,以便能够提供有效的证明。由于零知识,我们知道用户在提供证明的过程中不会损害他/她的秘密的隐私。
保密 ZKP 的另一个用例是需要保密的交易。考虑一个简单的公共区块链(如以太坊 ),它与一些加密货币或令牌绑定。当用户之间发生通常的交易时,区块链记录了详细的转移信息:谁,给谁,多少钱。因此,如果您知道具体的交易地址或用户地址,您可以做出一些财务结论。对于当今的企业来说,隐藏某些交易的细节是至关重要的。在这种情况下,ZKP 可以隐藏交易细节,并将其识别为有效的添加到新区块。(An 这种区块链的例子是 Zcash。
检查个人信息 。如果你想从银行贷款,提供收入证明是必要的。本证书包含机密信息。在这种情况下,您的一些个人数据将提供给其他人,这是我们希望避免的。银行只要知道一个人的收入达到偿还贷款所需的最低限度就足够了。
在这个系统中,为了获得贷款,您可以从您的公司获得相应的数字收入证书,其合法性在加密方面很容易检查。然后你可以申请贷款。然后,银行可能会使用 ZKP 验证您是否达到了所需的最低收入,并且没有必要透露敏感的细节。这种区块链的一个例子是 Hyperledger Indy。
有时候,在区块链上有一些匿名性是必要的。例如,在不披露您的身份的情况下进行交易,或者进行不相关的交易。用户还应该可以进行多项交易,同时保持身份保密。
构建隐私保护的智能合约和程序
提取出的链接是:https\://noir-lang.org/docs/getting_started/quick_start ,这是 Noir 语言官方文档中“快速开始”部分的链接,可用于了解 Noir 语言的入门使用等内容 。
部署和验证临时证明的sdk
提取出的链接是:https\://garaga.gitbook.io/garaga/ ,这是 Garaga 相关的 GitBook 文档链接,可用于了解 Garaga 工具链的详细内容 。
安装教程,对应安装步骤对应事项
通过noir、garaga生成对应的逻辑电路和zk证明,发到starknet上面,然后会生成对应的garaga library。
下面对应的前端,前端对应的input,通过对应的脚本去见证和证明,最终通过garage sdk调用对应的合约,把对应的calldata传进去。
以下是结合 Noir、Garaga、Starknet 技术栈,对该工作流的详细拆解与分析,帮你理解从 “零知识证明开发” 到 “Starknet 上链验证” 的全流程逻辑:
- 主角:Noir 程序(零知识证明电路逻辑)、Garaga 工具链(编译 + 部署 + 交互)、Starknet 区块链(智能合约运行环境)。
- 目标:把用 Noir 写的隐私逻辑(如 x≠y² 证明),转换成 Starknet 能运行的智能合约,最终在链上完成 “证明生成 → 验证” 全流程。
整个工作流分 “合约部署” 和 “证明生成 + 验证” 两条并行线,最终在 Starknet 上汇合。
主线 1:Noir → Cairo → Starknet 合约部署
作用:把 Noir 写的电路逻辑,编译成 Starknet 原生支持的 Cairo 合约,部署到链上。
步骤 工具/组件 做了什么? 关联技术
1. 写 Noir 程序 ---Noir 语言 ----编写零知识证明逻辑(如 x≠y² 的约束电路),这是整个隐私验证的 “规则定义”。------- Noir 语法(类 Rust)、ZK 电路设计
2. Garaga 编译 ----- Garaga codegen ----把 Noir 代码 转成 Cairo 代码(Starknet 智能合约的开发语言),适配 Starknet 生态。------ 编译器原理、跨语言转换(Noir→Cairo)
3. 部署到 Starknet -----Starknet 部署工具------ 将生成的 Cairo 合约 + Garaga 库,部署到 Starknet 链上,成为可交互的智能合约。------ Starknet 合约部署、区块链基础
如图:
主线 2:证明生成 + 链上验证
作用:用具体输入数据,生成零知识证明,并调用链上合约完成验证。
|步骤|工具/组件|做了什么?|关联技术|
1. 准备输入---自定义输入(如 x=5,y=2,-----提供具体数据(如证明5不等于2的平方,作为零知识证明的素材------业务逻辑、测试用例设计|
|2. 生成 Witness----Noir.js------根据Noir 程序和输入,生成 witness见证数据,证明的核心-----ZK 证明原理( witness 是证明的“论据”)|
|3. 生成 Proof-----Bbj.js------用 Witness 生成零知识证明proof,这是交给链上的验证证据------ ZK-SNARK/STARK 证明算法|
|4. 链上验证-----Garaga SDK+合约-----用garaga sdk打包proof+calldata,调用链上合约验证------ Starknet 合约交互、SDK 工具使用|
(1) “Noir → Cairo” 为什么重要?
- Starknet 原生只支持 Cairo 语言 开发智能合约,而 Noir 是更专注 “零知识证明” 的 DSL(领域特定语言)。
- Garaga codegen 负责 “翻译”:把 Noir 写的 ZK 电路逻辑,转成 Cairo 能执行的代码,让 Starknet 能理解 & 运行这些隐私验证逻辑。
(2) “Witness(见证)” 是什么?
- 简单说:“满足电路约束的具体数据”。
- 比如你写了 x≠y² 的电路,输入 x=5,y=2 时, Noir.js 会计算 y²=4 ,并生成一组数据(witness),证明 “5≠4 是成立的”。
- 它是生成最终 Proof 的 “原材料”,没有合法的 witness,就无法生成有效的零知识证明。
(3) “Garaga 库 + 合约” 怎么配合?
- 链上合约:包含两部分逻辑
- 一部分是 Garaga codegen 转译后的 Cairo 代码(你的 ZK 电路逻辑)
- 另一部分是 Garaga library (通用验证逻辑,帮你处理 Proof 验证的底层细节)。
- Garaga SDK:负责前端/客户端的交互,比如把 Proof 打包成 Starknet 能识别的交易数据(Calldata),发起 “验证请求” 调用链上合约。
1. 降低 ZK 开发门槛:
不用手动写复杂的 Cairo 合约 + ZK 验证逻辑,用 Noir 写电路更简洁,Garaga 自动转译 & 集成,让开发者专注 “隐私规则设计”。
2. 打通 “开发 → 上链” 全流程:
从写逻辑(Noir)→ 编译适配(Garaga)→ 链上部署(Starknet)→ 生成证明(Noir.js/Bbj.js)→ 验证(Garaga SDK + 合约),形成完整闭环。
3. 适配 Starknet 生态:
依托 Starknet 的 Layer2 优势(低成本、高扩容),让零知识证明应用能高效运行在区块链上,落地隐私交易、匿名认证 等场景。
1. 用 Noir 写 ZK 电路逻辑 → 2. Garaga 转成 Cairo 合约 部署到 Starknet → 3. 用 Noir.js 生成 Witness → 4. Bbj.js 生成 Proof → 5. 用 Garaga SDK 调用链上合约,提交 Proof + 数据完成 验证。
如果想实操,建议从官方文档(Garaga、Noir、Starknet)入手,先跑通 “Hello World” 级的 ZK 证明流程,再深入复杂逻辑开发~
以下是对这些内容的详细解读:
各技术/工具简介
- node.js:JavaScript 的运行时环境,让 JS 能在服务器端等运行,版本要求 ≥20.0.0 ,很多前端工具、后端服务都会基于它构建,这里是整个开发环境的基础支撑之一 。
- Starknet:区块链生态中的 Layer 2 解决方案,专注于提升性能和可扩展性,利用零知识证明等技术,让开发者能在其上构建智能合约等应用,这里用于后续零知识证明相关应用的部署和交互 。
- Bun:新兴的 JavaScript 运行时、包管理器等工具集合,相比传统方案,在性能等方面有优势,可用于运行代码、管理项目依赖 。
- Noir:专门用于零知识证明(ZK - Proof )场景的编程语言和工具链,方便开发者编写隐私保护相关的智能合约逻辑,像之前提到的证明 x!=y² 这类电路逻辑就可以用它编写 。
- Barretenberg:零知识证明系统相关的库/工具,用于生成、验证零知识证明等底层操作,为 Noir 等上层框架提供基础支持 。
- Garaga:用于在 Starknet 上部署和验证零知识证明的工具链,能辅助把 Noir 编写的电路转换适配到 Starknet 智能合约流程中,方便在 Starknet 集成零知识证明应用 。
下载项目:
git clone https://github.com/KevinSheeranxyj/scaffold-garaga
cd scaffold-garaga
如果git不下来,就下载安装包解压,unzip scaffold-garaga.zip
上面有些已经安装好了,下面安装依赖包,遇到问题:
make install-bun
exec /bin/zsh
bun --help
make install-noir
source /Users/yhb/.zshrc
noirup
nargo --version
make install-barretenberg
curl https://get.starkli.sh | sh
~/.starkli/bin/starkliup
~/.starkli/bin/starkli --version
export PATH="$HOME/.starkli/bin:$PATH"
starknet-devnet --version
#安装garaga需要python@3.10
brew reinstall python@3.10
/opt/homebrew/opt/python@3.10/bin/python3.10 -m venv .venv-garaga
#激活虚拟环境
source .venv-garaga/bin/activate
pip install garaga==0.18.1
garaga --version
#退出虚拟环境
deactivate
配置与环境相关
- .idea :一般是 JetBrains 系列 IDE(如 PyCharm、IntelliJ IDEA 等 )自动生成的文件夹,存储项目的配置信息,像代码格式化设置、项目模块结构、运行配置等,方便 IDE 还原项目开发环境 。
- .venv-garaga 和 venv :都是 Python 虚拟环境相关。虚拟环境用于隔离项目的 Python 依赖,避免不同项目间依赖冲突。 .venv-garaga 可能是自定义命名的虚拟环境, venv 是常见默认虚拟环境名称,里面包含 Python 解释器副本、依赖包安装路径等 。
- .gitignore :Git 版本控制的配置文件,定义哪些文件/文件夹不需要纳入 Git 追踪,比如虚拟环境文件、编译生成的临时文件等,防止这些内容被提交到代码仓库 。
- .python-version 和 .tool-versions :用于指定项目使用的 Python 版本和工具版本(可能涉及像 Node.js 等其他工具,若项目有相关需求 ),方便团队成员统一开发环境,常见于版本管理工具(如 asdf )的配置 。
业务功能相关
- app :通常是应用程序的主代码目录,存放项目的业务逻辑代码,比如 Python 项目里的模块、脚本,可能包含程序入口、功能实现的各类代码文件 。
- circuit :从命名看,结合区块链(项目里有 starkli 等可能与 StarkNet 相关的内容 )场景,可能存放电路相关代码,比如零知识证明(ZK - SNARK 等 )里的电路设计、编译相关文件,用于构建密码学证明逻辑 。
- contracts :契约、合约相关,在区块链项目里,一般存放智能合约代码(比如用 Solidity、Cairo 等语言编写的合约 ),定义链上的业务规则、数据交互逻辑 。
工具与脚本相关
- Makefile :是一种构建脚本文件,在类 Unix 系统中,通过 make 命令执行,可定义编译、部署、测试等一系列自动化任务,比如编译合约、运行应用、部署到测试环境等流程,简化重复操作 。
- starkli 和 starkli.gz : starkli 可能是与 StarkNet 区块链交互的命令行工具,用于部署合约、调用合约方法、查询链上数据等; .gz 是压缩包格式,可能是 starkli 工具的压缩版本,方便分发、安装 。
- libcairo.2.dylib :是 Cairo 语言(常用于 StarkNet 生态开发 )的动态链接库文件,在项目运行时,可能被相关程序调用,提供 Cairo 代码执行所需的底层功能支持 。
- README.md :项目说明文档,通常用 Markdown 格式编写,介绍项目功能、安装步骤、使用方法、目录结构、贡献指南等,帮助开发者快速了解和上手项目 。
前端部分,会通过input进行简单校验,
circuit,会编写逻辑电路
一个全链路的零知识证明 ZKP DApp 工作流教程,基于:
背后逻辑:为什么要这么操作?
零知识证明 DApp 需要完成三件事:
1. 编译 Noir 电路
yhb@yhbdeMacBook-Air scaffold-garaga-master % make build-circuit
cd circuit && nargo build
🔍 目标:生成电路描述 circuit.json,供后续生成 proof/vk 使用。
👨🔬 原因:Barretenberg 需要电路中所有约束和 gates 才能生成 proof。
📁 产出:
circuit/target/circuit.json → 电路结构
Prover.toml → 包含测试输入数据(如密码/验证字段)
----------------------------------------------------------------
2. 执行电路 → 生成 witness(中间变量)
yhb@yhbdeMacBook-Air scaffold-garaga-master % make exec-circuit
cd circuit && nargo execute witness
[circuit] Circuit witness successfully solved
[circuit] Witness saved to target/witness.gz
🔍 目标:执行电路逻辑 + 提供输入(来自 Prover.toml)
👨🔬 原因:证明系统不是只输入输出,还要证明“中间过程计算”是正确的,称为 witness。
📁 产出:
circuit/target/witness.gz
-------------------------------------------------------------
3. 生成 Verifying Key(验证密钥)
yhb@yhbdeMacBook-Air scaffold-garaga-master % make gen-vk
bb write_vk --scheme ultra_honk --oracle_hash starknet -b ./circuit/target/circuit.json -o ./circuit/target
Scheme is: ultra_honk, num threads: 8
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 256k 100 256k 0 0 147k 0 0:00:01 0:00:01 --:--:-- 147k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 128 100 128 0 0 206 0 --:--:-- --:--:-- --:--:-- 207
VK saved to "./circuit/target/vk"
🔍 目标:生成用于 verifier 验证的密钥(VK)
👨🔬 原因:证明系统中,Prover 生成 proof,Verifier 要拿 vk 才能验证。
📁 产出:
circuit/target/vk(序列化格式)
-----------------------------------------------------
#进入虚拟环境
source .venv-garaga/bin/activate
4. 生成 Cairo 验证合约代码
(.venv-garaga) yhb@yhbdeMacBook-Air scaffold-garaga-master % make gen-verifier
cd contracts && garaga gen --system ultra_starknet_honk --vk ../circuit/target/vk --project-name verifier
⠴ Generating Smart Contract project for ProofSystem.UltraStarknetHonk using vk...
Done!
Smart Contract project created:
/Users/yhb/scaffold-garaga-master/contracts/verifier/
├── .tool-versions
├── Scarb.lock
├── Scarb.toml
└── src/
├── honk_verifier.cairo
├── honk_verifier_circuits.cairo
├── honk_verifier_constants.cairo
└── lib.cairo
You can now test the main endpoint of the verifier using a proof and `garaga calldata` command.
The detected versions of bb and nargo are correctly aligned with garaga 0.18.1.
🔍 目标:用 garaga 工具将 Noir 电路 + VK 生成 Starknet 上可部署的 verifier 合约
👨🔬 原理:
根据 vk 自动编译 verifier.cairo 合约
包含 MSM、Pairing Check、Transcript Challenge 处理
📁 产出:
contracts/verifier/*.cairo
5. 启动 Starknet Devnet 本地网络
make devnet
Initial balance of each account: 100000000000000000000000 WEI and FRI
Seed to replicate this account sequence: 0
2025-06-20T15:03:34.453893Z INFO starknet_devnet: Starknet Devnet listening on 127.0.0.1:5050
🔍 目标:本地模拟 L2 网络,部署合约
👨🔬 原因:开发和测试阶段用 devnet 节省成本
另开一个终端
6. 初始化账户信息(模拟的钱包)
make accounts-file
🔍 目标:从 devnet 中获取第一个预设账户(address, pk)写入 accounts.json,供后续 sncast 使用。
7. 声明 Verifier 合约(Declare),注意这里需要关掉科学net
make declare-verifier
🔍 目标:将 Cairo 合约的 class code 上传链上 → 返回 class hash
👨🔬 原理:Starknet 合约不是直接部署,而是分成 declare + deploy 两步
📁 输出:class_hash
📍 这里需要修改Makefile文件对应里面的参数--class-hash
deploy-verifier:
# TODO: use class hash from the result of the `make declare-verifier` step
cd contracts && sncast deploy --salt 0x00 --class-hash 0x074b93dc3cddcd328f8b242b782deef775d60b0ff494a1f71c315ea579d15941
8. 部署 Verifier(Deploy)
make deploy-verifier
# TODO: use class hash from the result of the `make declare-verifier` step
cd contracts && sncast deploy --salt 0x00 --class-hash 0x074b93dc3cddcd328f8b242b782deef775d60b0ff494a1f71c315ea579d15941
command: deploy
contract_address: 0x02b76ac09aea8957666f0fb3409b091e2bdca99700273af44358bd2ed0e14a32
transaction_hash: 0x052708396fc6ed2299b4b085e7e0ca40c5ac12b4ddd708b792478c10c8d19352
🔍 目标:根据 class hash 实例化 verifier 合约
📍 注意:Makefile 中使用的是 hardcoded 的 class hash,如需稳定应自动抓取上一步 declare 的结果。
📁 输出:verifier 的 contract_address
9. 拷贝必要 artifact 到前端目录
make artifacts
📁 把这些文件拷贝进前端 app:
circuit.json → 电路结构
vk.bin → 验证密钥
verifier.json → Verifier 合约 ABI 和地址
10. 准备并运行前端 App:可以直接运行make run-app
VITE v6.2.6 ready in 536 ms
➜ Local: http://localhost:5173/
➜ Network: use --host to expose
➜ press h + enter to show help
cd app
bun install # 安装依赖
bun run build # 构建 React App
bun run dev # 启动前端
💡 注意:
vite 是前端构建工具,必须手动 npm install -D vite 安装。
App.tsx 中的 verifierAddress 要改成你刚部署的合约地址。
🧠 编写 Noir 电路
↓
🛠 build-circuit (nargo) → circuit.json
↓
🧪 exec-circuit → witness.gz
↓
🔑 gen-vk (bb) → vk
↓
🧱 garaga gen → verifier.cairo
↓
🚀 devnet ← (启动本地链)
↓ ↓
accounts-file declare-verifier
↓
deploy-verifier
↓
verifier address
↓
📦 artifacts → app/src/assets/*
↓
🌐 前端 bun run dev
你构造了一个 数学证明系统,现在你要做的事情是:
这正是 zk 应用中最典型的一条链路。
make build-circuit # 重新编译电路
make exec-circuit # 使用新的输入生成 witness
make gen-vk # 生成新的验证密钥
make gen-verifier # 基于新 vk 生成 verifier.cairo 合约
make build-verifier # 构建 verifier
make declare-verifier # 声明 verifier 合约类
make deploy-verifier # ⚠️ 部署 verifier,会获得新地址
make artifacts # 拷贝 ABI 到前端
make run-app
文件 | 是否需要修改 | 修改内容 |
main.nr | ✅ 已修改 | assert(x != y * y) |
Prover.toml | ✅ 必须改 | 输入要满足 x ≠ y² |
App.tsx | ⚠️ 合约地址改了就要改 | 更新 contractAddress |
合约部署 | ✅ 必须重新部署 | 用 make deploy-verifier |
ssh-keygen -t ed25519 -C "1131764933\@example.com"
一路回车,会生成文件在 \~/.ssh/id_ed25519.pub
cat \~/.ssh/id_ed25519.pub
git remote set-url origin git\@github.com:1131764933/noir-zk-x-not-equal-y2.git
git push -u origin main
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!