当前位置: 首页 > news >正文

hardhat 项目目录介绍

使用 npx hardhat init初始化一个 Hardhat 项目后,会生成一个结构清晰的目录,每个部分都有其特定用途。下面是一个表格汇总了主要的目录和文件及其作用,方便你快速了解:

contracts/

存放项目的 ​​Solidity 智能合约源代码​​(.sol文件)

项目核心,编译时会处理此目录下的合约。

test/

存放项目的​​测试脚本​

。Hardhat 通常使用 Mocha 测试框架和 Chai 断言库,测试文件可以是 .js或 .ts文件。

编写单元测试和集成测试来验证合约逻辑至关重要。

scripts/​ ignition/

存放​​部署脚本​​,用于将合约部署到区块链网络

。在较新版本的 Hardhat 中,ignition/modules/目录用于定义部署模块(如使用 Ignition 引擎)。

部署脚本允许你指定部署参数和要部署的合约。老版本项目可能使用 scripts/目录存放部署脚本

hardhat.config.js​ hardhat.config.ts

Hardhat 项目的​​核心配置文件​

。用于配置 Solidity 编译器版本、网络、插件等。

根据初始化时的选择,可能是 .js(JavaScript) 或 .ts(TypeScript) 文件。

artifacts/

​编译产物目录​​。在运行 npx hardhat compile后生成,存放合约的 ABI (应用程序二进制接口)、字节码 (bytecode) 等元数据

此目录内容由 Hardhat 自动生成,通常无需手动修改。

cache/

​编译缓存目录​​。Hardhat 用于缓存编译信息,以加速后续的编译过程

可以安全删除,下次编译时会重新生成,但可能会延长编译时间。

node_modules/

存放项目的 ​​npm 依赖包​​。由 npm install或 yarn install命令创建。

此目录通常不在版本控制(如 git)中管理。

package.json

​项目依赖管理和脚本定义文件​​。记录了项目所需的依赖包、版本信息以及可运行的脚本命令(如 compiletest

你可以通过 npm run <script-name>来运行这里定义的脚本。

Hardhat Ignition​​。它是一个​​声明式的智能合约部署系统​​,用于管理和自动化以太坊智能合约的部署流程

// 从 'hardhat/config' 中导入 HardhatUserConfig 类型。
// 这主要用于 TypeScript 项目,为配置文件提供类型检查和自动补全,确保配置对象的结构正确。
import type { HardhatUserConfig } from "hardhat/config";// 从 '@nomicfoundation/hardhat-toolbox-viem' 插件库中导入一个插件函数。
// 此插件集成了许多常用的 Hardhat 插件和工具(如测试、部署、交互等),但使用的是 Viem 库而非 Ethers.js。
import hardhatToolboxViemPlugin from "@nomicfoundation/hardhat-toolbox-viem";// 从 'hardhat/config' 导入 configVariable 函数。
// 这是一个安全读取环境变量的辅助函数,通常用于获取敏感信息(如私钥、RPC URL),避免将其硬编码在配置文件中。
import { configVariable } from "hardhat/config";// 使用 HardhatUserConfig 类型来声明 config 常量,这确保了该对象符合 Hardhat 配置的预期结构。
const config: HardhatUserConfig = {// plugins 数组用于配置要启用的 Hardhat 插件。// 这里启用了 hardhat-toolbox-viem 插件,它提供了许多开发任务和功能。plugins: [hardhatToolboxViemPlugin],// solidity 字段用于配置 Solidity 编译器。solidity: {// 新增的 profiles 配置允许为不同的场景(如开发、生产)定义不同的编译选项。profiles: {// 'default' 配置文件是当未指定特定配置时使用的默认配置。default: {// 指定 Solidity 编译器的版本version: "0.8.28",},// 'production' 配置文件可用于生产环境部署,通常需要开启优化器以节省 Gas。production: {version: "0.8.28",// settings 字段用于更细致的编译器配置。settings: {// optimizer 配置优化器optimizer: {enabled: true, // 启用优化器runs: 200, // 设置优化器运行次数。较高的 runs 值会尝试生成更节省运行时 Gas 的代码,但可能会增加部署成本。},},},},},// networks 对象用于配置 Hardhat 可以连接的各种网络。networks: {// 定义一个名为 'hardhatMainnet' 的本地模拟网络,类型为 'edr-simulated',模拟 L1 主链环境。// 这通常是 Hardhat 内部网络的一个增强或特定配置,用于本地开发和测试。hardhatMainnet: {type: "edr-simulated", // 使用 Hardhat 的 EDR (Ethereum Development Runtime) 模拟器chainType: "l1", // 指定链类型为 Layer 1},// 定义另一个名为 'hardhatOp' 的本地模拟网络,模拟 Optimistic Rollup (OP) 链环境。hardhatOp: {type: "edr-simulated",chainType: "op", // 指定链类型为 Optimism (Layer 2)},// 定义一个名为 'sepolia' 的外部测试网配置,类型为 'http',表示通过 HTTP RPC 端点连接。sepolia: {type: "http", // 网络连接类型为 HTTPchainType: "l1", // 指定链类型为 Layer 1// 使用 configVariable 函数从环境变量中获取 Sepolia 测试网的 RPC URL。// 在实际项目中,你需要在项目根目录下的 `.env` 文件中定义 SEPOLIA_RPC_URL。url: configVariable("SEPOLIA_RPC_URL"),// 使用 configVariable 函数从环境变量中获取部署账户的私钥。// 同样,需要在 `.env` 文件中定义 SEPOLIA_PRIVATE_KEY。// 注意:数组形式允许配置多个账户私钥。accounts: [configVariable("SEPOLIA_PRIVATE_KEY")],},},
};// 使用 ES Module 的语法导出 config 对象作为默认导出。
// Hardhat 会自动读取此文件中的默认导出作为其配置。
export default config;


文章转载自:

http://kn3yTDub.kpbgp.cn
http://9nZtDH62.kpbgp.cn
http://yr2NnwqO.kpbgp.cn
http://Y4VdPy4d.kpbgp.cn
http://G3XIRSNM.kpbgp.cn
http://brClqBX9.kpbgp.cn
http://6fXZpcjG.kpbgp.cn
http://bE0xQUmE.kpbgp.cn
http://aaNxFKq9.kpbgp.cn
http://OSLTi6um.kpbgp.cn
http://T6n8gWIR.kpbgp.cn
http://xUmdZgAe.kpbgp.cn
http://kyNkomg1.kpbgp.cn
http://vocvF1px.kpbgp.cn
http://7Otl17jL.kpbgp.cn
http://ZGAn6HVt.kpbgp.cn
http://46uDqk6x.kpbgp.cn
http://6BfWWWBz.kpbgp.cn
http://VilniIjy.kpbgp.cn
http://MBiSFCYi.kpbgp.cn
http://au88jiEy.kpbgp.cn
http://yePSgiHT.kpbgp.cn
http://siOZCOZn.kpbgp.cn
http://PT1oOLe2.kpbgp.cn
http://AhbPHPzk.kpbgp.cn
http://SIYnCCbg.kpbgp.cn
http://2SYSxfc9.kpbgp.cn
http://L3OsCNf8.kpbgp.cn
http://y03ZTLHx.kpbgp.cn
http://L0KfoFdp.kpbgp.cn
http://www.dtcms.com/a/378325.html

相关文章:

  • IROS 2025 多智能体深度强化学习算法实现Crazyflie无人机在复杂环境中协同追逐
  • 光平面标定 (Laser Plane Calibration) 的原理和流程
  • sqbks二面(准备)
  • Linux云计算系统安全:PAM
  • DenseNet详解与实现
  • 计算机毕业设计 基于Hadoop豆瓣电影数据可视化分析设计与实现 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试
  • 25.9.11 QTday1作业
  • unity 陶艺制作模拟
  • Unity 三维数学方法
  • 【氮化镓】GaN基半导体器件电离辐射损伤基可靠性综述
  • 音视频demo
  • 相机Camera日志分析之三十六:相机Camera常见日志注释
  • 250911算法练习:递归
  • 双目相机原理
  • AI教育白皮书解读 | 医学教育数智化转型新机遇,“人工智能+”行动实践正当时
  • vue3自定义无缝轮播组件
  • 【每日算法】合并两个有序链表 LeetCode
  • 瑞萨RA家族新成员RA4C1,符合DLMS SUITE2表计安全规范、超低功耗、支持段码显示,专为智能表计应用开发
  • 【maxscript】矩阵对齐-武器残影
  • Java 黑马程序员学习笔记(进阶篇4)
  • XR 和 AI 在 Siggraph 2025 上主导图形的未来,获取gltf/glb格式
  • TikTok矩阵有哪些运营支撑方案?
  • 《基于深度学习的近红外条纹投影三维测量》-论文总结
  • 优选算法 100 题 —— 2 滑动窗口
  • MongoDB 在线安装-一键安装脚本(CentOS 7.9)
  • DeepSeek辅助编写的利用quick_xml把xml转为csv的rust程序
  • Rider中的Run/Debug配置对应的本地文件
  • 综合项目实践:基于基础语法核心的Python项目
  • 开始 ComfyUI 的 AI 绘图之旅-Flux.1图生图(八)
  • 供应商管理系统包含哪些模块?