Hardhat-Circom 使用教程
1. 项目的目录结构及介绍
在开始使用 Hardhat-Circom 插件之前,首先需要了解项目的目录结构。以下是一个典型的项目结构:
best_dapp_ever/
├── circuits/ # 存放circom电路文件和相关的输入文件
│ ├── init.circom
│ ├── init.json
│ └── pot15_final.ptau
├── contracts/ # 生成的验证者智能合约文件存放于此
│ └── InitVerifier.sol
└── hardhat.config.js # Hardhat配置文件
circuits/
目录包含了circom电路文件(.circom
),输入文件(.json
),以及Powers of Tau文件(.ptau
)。contracts/
目录用于存放由插件生成的验证者智能合约(.sol
)文件。hardhat.config.js
是Hardhat的配置文件,用于配置插件和其他Hardhat相关设置。
2. 项目的启动文件介绍
在项目的根目录中,有一个名为 hardhat.config.js
的文件,这是Hardhat的配置文件。该文件用于设置项目的Solidity编译器版本、插件配置等信息。
以下是一个基本的 hardhat.config.js
文件示例:
module.exports = {
solidity: "0.6.7",
circom: {
inputBasePath: "./circuits",
ptau: "pot15_final.ptau",
circuits: [
{
name: "init"
}
]
}
};
在这个配置文件中,我们设置了以下内容:
solidity
:指定了Solidity编译器的版本。circom
:配置了circom相关的设置,包括输入目录、Powers of Tau文件以及电路列表。
3. 项目的配置文件介绍
在 hardhat.config.js
文件中,circom
部分是用于配置 Hardhat-Circom 插件的。以下是一些常见的配置选项:
inputBasePath
:(可选)指定输入文件的基路径,默认为./circuits/
。outputBasePath
:(可选)指定输出文件的基路径,默认为./circuits/
。ptau
:(必需)从Phase 1仪式中提供的Powers of Tau文件。circuits
:(必需)一个对象数组,每个对象描述了一个电路。
每个电路对象可以包含以下字段:
name
:(必需)电路的名称。version
:(可选)circom编译器的版本,默认为2。protocol
:(可选)构建电路时使用的协议,可以是"groth16"
或"plonk"
,默认为"groth16"
。circuit
:(可选)电路文件的路径,如果未指定,将从名称推断。input
:(可选)输入文件的路径,如果未指定,将从名称推断。wasm
:(可选)输出wasm文件的路径,如果未指定,将从名称推断。zkey
:(可选)输出zkey文件的路径,如果未指定,将从名称推断。
通过合理配置这些选项,可以更好地控制电路的编译过程和输出文件的存放位置。