1.2 安装 circom 和 snarkjs 运行: npm install -g circom npm install -g snarkjs 2. 运行以下命令: circom circuit.circom -r circuit.r1cs 将电路编译为名为circuit.rlcs的文件 3. circuit.circom -w circuit.wasm生成一个 circuit.wasm 在执行一次见证。 探索更多 阅读我们的 代码库[5] 了解更多 circom 的特性。 原文链接:https://iden3.io/blog/circom-and-snarkjs-tutorial2.html 本译文得到 登链社区 及 Cell Network 赞助支持。
月的文章),当时教程的一些包文件和指令格式,参数部分已弃用或者改变,circom 也升级到了 circom2,新的 circom2 编译器是通过 rust 生成的。 库 我们需要使用两个库:circom[3] 和 snarkjs[4]. Circom 是一个可以轻松构建代数电路的库。 : cargo install --path circom 前面指令生成 circom 二进制文件将存在目录 $HOME/.cargo/bin。 现在,你应该能够使用help查看可执行文件的所有选项: circom --help Circom Compiler 2.0.0 IDEN3 Compiler for the Circom .circom 的文件。
电路生成自动化:新的电路生成工具,如Circom和ZoKrates,实现了电路设计的自动化和优化,降低了开发门槛。 参考链接: 主要来源:zkSNARKs GitHub Repository - zk-SNARKs的开源实现 辅助:Circom GitHub Repository - 电路生成工具 辅助:Groth16 Paper - Groth16方案的原始论文 附录(Appendix): 简单电路示例 // 简单的加法电路 pragma circom 2.0.0; template Add() { signal input b; signal output c; c <== a + b; } component main = Add(); 代码运行环境 Node.js 14+ 依赖库:circom , snarkjs 运行命令:npm install -g circom snarkjs && circom circuit.circom && snarkjs setup 关键词: 零知识证明, zk-SNARKs
arbitrary-send-erc20-permit 和 domain-separator-collision 检测器,减少了误报 Noir[42]: Aztec 的基于 Rust 的语言,用于创建和验证 zk 证明 Circom-Next-Starter [43]: zk 应用程序启动工具包使用 Hardhat, Circom, Snarkjs 和 Nextjs 安全 BSC token hub(BNB 信标链和 BSC 的跨链桥) 5.66 亿美元被利用 github.com/crytic/slither/releases/tag/0.9.0 [42] Noir: https://medium.com/@aztecnetwork/ff43f38d86d9 [43] Circom-Next-Starter : https://github.com/Darlington02/circom-next-starter#readme [44] BSC token hub(BNB信标链和BSC的跨链桥) 5.66
3 Circom 编译为 R1CS 的编程语言在密码学和区块链中比较流行,这些语言提供了设计和实现代数电路的更高级抽像。 Circom 是设计代数电路的领域专用语言。它将电路编译为 R1CS,并输出 WebAssembly 和 C++ 程序。 Circom 中的概念: 信号(signal)是底层域 F 的一个元素,是不可更改的,可定义为输入或输出。输入信号是私有的,除非特意声明为公有,而输出信号是公有的。 如下是一个 Circom 程序示例 trivial_circuit.circom: template trivial_circuit() { signal private input in1 ; 使用如下命令进行编译: circom trivial_circuit.circom --r1cs --wasm --sym Circom 编译器会生成 3 个文件 trivial_circuit.r1cs
Hardhat-circom v3.2.x[32]: 与 Mocha 集成的电路测试,从 Groth16 和 PLONK snarkjs 绑定中导出调用数据 Sepolia 测试网RPC[33] Sol ethlift-rs#readme [31] zk Soul-Bound token: https://github.com/enricobottazzi/ZK-SBT#readme [32] Hardhat-circom v3.2.x: https://github.com/projectsophon/hardhat-circom/releases/tag/v3.2.2 [33] RPC: https://twitter.com
hardhat-vite[38] : 插件,用于包装 Vite 以配置和启动 dapp p5.js & three.js[39]已部署在链上 frame.tools[40] : 发布基于网络的链上艺术 xPARC circom-batch-ECDSA [41]:基于 circom-ECDSA 的概念证明 Circomspect[42] : zk 证明的静态分析 I am the chad v1[43] : 比赛中的 gas 优化比赛中的最佳 Paradigm s=20&t=ttGThSGyii5v8BIJRIzVHg [41] circom-batch-ECDSA: https://0xparc.org/blog/batch-ecdsa [42] Circomspect
ERC4626.sol[36]: 代币化保险库实现 收入分配代币[37]: ERC4626 线性收入发行,未经审计,Foundry 中的单元/模糊测试, dapptools 中的不变测试 hardhat-circom v3.0.0[38]: 默认使用 circom2 编译器 Dune dashboard 通过 Ethereum 和 Optimism 上的部署地址获取合约[39] 安全 Agave (Aave 分叉) github.com/maple-labs/revenue-distribution-token#readme [38]v3.0.0: https://github.com/projectsophon/hardhat-circom
在 Tornado Cash 的 Nova 上用 Circom 实现零知识彩票[32] 安全 Metamask 为 Clickjacking 风险悬赏 12 万美金[33] Rocketpool 员工电脑被攻击 metablock.dev/tools/mev/ [32] 零知识彩票: https://killari.medium.com/implementing-zero-knowledge-lotterys-circom-circuits-part
下面是一个简单的属性验证电路伪代码示例: // Circom语言的属性验证电路示例 pragma circom 2.0.0; include "circomlib/poseidon.circom";
fhe.compiler({"source": "str"})def extract_features(source):# 提取AST特征(如函数调用图)return ast_features步骤二:生成ZK证明# 使用Circom 语言定义审计电路circom zk_audit.circom --r1cs --wasmsnarkjs groth16 setup zk_audit.r1cs pot12.ptau audit.zkey
需要可信设置 无需可信设置 安全性要求极高场景 抗量子性 否 是 长期安全需求 计算开销 较高 非常高 离线证明生成 成熟度 高 中 生产环境 零知识证明开发框架 2025年主流的零知识证明开发框架: Circom zkSNARK证明 ZoKrates:提供高级语言编写零知识电路的工具集 StarkWare的工具链:用于开发zkSTARK应用的专业工具 Aztec的Noir:新兴的零知识编程语言和工具链 // 使用Circom 定义电路(通常在单独的.circom文件中) const circuitSource = ` pragma circom 2.0.0; template Multiplier
默克尔树和简单的 zk-证明 ConnectKit v1.0.0[32] (React 组件连接钱包): 添加了支持以太坊登录, avatar 组件和 Nouns 主题 Zk-starter[33]: 使用 circom
辅助技术: 零知识证明 (ZKP) 库: 用于实现选择性披露和隐私保护,例如 SnarkJS、Circom 等。 加密算法库: 支持各种签名算法(如 ECDSA)、哈希函数。
React Native 包装器将 a16z 的 Helios 轻客户端嵌入到移动应用程序中 miniSTARK[35] : GPU 加速的 STARK 验证器 Nova Scotia[36]:使用 Circom
开发环境设置 为零知识证明开发准备环境: 工具链选择 Circom + SnarkJS:用于构建zk-SNARK电路 ZoKrates:高级语言开发zk-SNARKs Noir:新兴的零知识编程语言 Cairo:用于StarkNet的零知识编程语言 开发工作流 定义计算问题 设计电路/程序 编译和验证 可信设置(如需要) 集成到应用程序 # Circom和SnarkJS设置示例 # 1. 全局安装Circom和SnarkJS npm install -g circom snarkjs # 3. 创建一个简单的电路文件 (example.circom) cat > example.circom << EOL pragma circom 2.1.0; include "circomlib/poseidon.circom 编译电路 circom example.circom --wasm --r1cs # 7.
前端构建 Uniswap v3 克隆[30]的指南 UniStark[31]: 用 Warp 将 Uniswap v3 转成 Cairo(也进行了手动修改), 通过测试[32] Maze[33]: 为 Circom-PLONK
EIP712 JSON , ENS unicode 通过“convex optimization”进行 MEV CFMM 套利[49] 合并后的MEV 搜索[50] OxPARC zkPairing[51]:Circom
0, "No verification key set"); // 这里应该是实际的零知识证明验证逻辑 // 在实际实现中,会使用如ZoKrates、Circom