尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Hardhat 3 快速上手指南:初始化、模板选择与测试/部署核心能力详解

Hardhat 3 快速上手指南:初始化、模板选择与测试/部署核心能力详解 Hardhat 3 快速上手指南初始化、模板选择与测试/部署核心能力详解【免费下载链接】hardhatHardhat is a development environment to compile, deploy, test, and debug your Ethereum software.项目地址: https://gitcode.com/GitHub_Trending/ha/hardhatHardhat 是一个面向专业开发者的以太坊开发环境专注于把日常开发中高频重复的工作——运行测试、自动检查代码错误、与智能合约交互——整合到统一且可扩展的工具链中。本文以仓库根目录 README.md 为骨架结合仓库内真实源码、模板与测试工程完整讲解 Hardhat 3 的安装初始化流程、三种初始化模板的差异、测试与部署的核心操作以及底层配置体系帮助你读完即可上手一个可运行、可扩展的 Solidity 项目。Hardhat 是什么面向专业以太坊开发者的集成环境根据仓库根目录 README.md 的定位说明Hardhat 是为专业人士打造的以太坊开发环境an Ethereum development environment for professionals由 Nomic Foundation 为以太坊社区构建。它的核心价值不是单一功能而是把开发者频繁执行的三类任务统一收拢运行测试running tests对合约做单元测试、集成测试与断言自动检查代码错误automatically checking code for mistakes编译期静态检查、类型检查与代码分析与智能合约交互interacting with smart contracts部署、调用、事件监听与脚本化操作。从仓库主包 packages/hardhat/package.json 可以看到当前仓库对应Hardhat 3.16.0它的描述是帮助智能合约开发者提升生产力的可扩展开发工具。README 中明确提示这份文档对应的是 Hardhat 3新的大版本此前广泛使用的 v2 分支在仓库中单独维护因此下文所有命令与配置均以 Hardhat 3 为准。快速开始一条命令完成安装与项目初始化README 给出的入门方式极简——在空目录中执行npx hardhat --init该命令会启动一个交互式初始化流程引导你完成从零到可运行项目的全部步骤包括选择初始化模板、写入配置文件与示例合约、安装依赖等。--init 背后的模板机制从源码结构看--init并非简单复制文件而是一套模板驱动的项目脚手架。仓库在 packages/hardhat/templates/README.md 中详细说明了模板约定每个模板是一个目录内含package.json与若干模板文件模板的package.json中description字段用于在初始化时向用户展示模板说明devDependencies与peerDependencies决定安装到新项目的依赖集合初始化时模板依赖版本中的workspace:前缀会被剥离转换为实际可发布的版本号模板中的gitignore文件会被重命名为新项目里的.gitignore这是为了规避 npm 打包时自动忽略.gitignore的限制而名为.gitignore的文件则会被忽略。三种官方初始化模板仓库 packages/hardhat/templates 目录下提供三套官方模板覆盖了主流技术栈组合模板目录技术栈组合定位Node Test Runner Viem01-node-test-runner-viemnode:test viem使用 Node.js 原生测试运行器与 viem 库Mocha Ethers.js02-mocha-ethersMocha Ethers.js经典 Mocha 测试框架与 ethers.jsMinimal最小化03-minimal仅 hardhat TypeScript最精简骨架适合自定义以01-node-test-runner-viem为例其 package.json 表明它默认引入nomicfoundation/hardhat-toolbox-viem、hardhat-ignition、viem、forge-std、typescript等依赖02-mocha-ethers的 package.json 则引入hardhat-toolbox-mocha-ethers、ethers、mocha、chai等依赖。而03-minimal的 package.json 只保留hardhat、types/node、typescript三项方便你完全按自己的偏好组装工具链。从依赖清单可以推断初始化时模板会通过peerDependencies一并安装hardhat-ignition、hardhat-verify、hardhat-network-helpers、hardhat-keystore等配套插件保证开箱即用。初始化后的项目结构以 Viem 模板为例模板的其余文件会在初始化时原样拷贝进新项目。以 01-node-test-runner-viem 为例初始化后你会得到如下骨架. ├── contracts/ # Solidity 合约源码 │ ├── Counter.sol │ └── Counter.t.sol # Foundry 兼容的 Solidity 单测 ├── ignition/modules/ # Ignition 部署模块 │ └── Counter.ts ├── scripts/ # 可执行脚本如发送 OP 交易示例 ├── test/ # TypeScript 集成测试 │ └── Counter.ts ├── hardhat.config.ts # Hardhat 配置文件 ├── package.json └── tsconfig.json其中示例合约 contracts/Counter.sol 是一个带状态与事件的计数器inc()每次调用使x自增并发出Increment(1)事件incBy(uint by)校验by 0后累加并发出对应事件——它同时覆盖了状态变更、require 校验与事件广播三个典型测试点是理解测试能力的最小载体。核心能力一运行测试test 命令模板 01-node-test-runner-viem/README.md 给出了最常用的测试入口npx hardhat test在 Hardhat 3 中测试可以分层运行。模板文档提供了两类细分命令npx hardhat test solidity # 只运行 SolidityFoundry 风格测试 npx hardhat test nodejs # 只运行 Node.js 侧测试其中 Solidity 侧的Counter.t.sol采用 Foundry 兼容的测试写法使熟悉 Foundry 的开发者可以无缝迁移Node.js 侧则支持两种主流测试框架——仓库分别以 packages/hardhat-mochaMocha和 packages/hardhat-node-test-runnerNode 原生node:test两个独立插件实现二者可以按模板选择其一或并存。模板测试文件 test/Counter.ts 展示了 Viem 风格的完整测试写法关键点包括通过network.create()创建隔离的测试网络实例再用viem.getPublicClient()获取公共客户端用viem.deployContract(Counter)按名称部署合约并得到实例用viem.assertions.emitWithArgs(counter.write.inc(), counter, Increment, [1n])断言调用触发了带参数的Increment事件用publicClient.getContractEvents({ address, abi, eventName, fromBlock, strict: true })回溯事件并聚合校验合约状态连续 10 次incBy(i)后事件累计值应等于counter.read.x()。这种事件级断言 状态聚合验证的组合正是 README 所说运行测试能力在工程中的典型落地。核心能力二自动检查代码错误Hardhat 的自动检查代码错误贯穿编译、分析、验证多个环节编译与 Solidity 多版本支持配置中的solidity字段声明编译器版本仓库还支持profiles机制为不同环境如default与production配置不同的编译设置详见下文配置节静态检查hardhat-verify插件负责合约源码验证仓库测试覆盖了 Etherscan、Blockscout、Sourcify 等验证渠道见 packages/hardhat-verify/src 与 packages/hardhat-verify/test类型安全模板默认启用 TypeScript配置与脚本均可获得类型推断与编译期错误提示端到端验证仓库 e2e/fixture-projects 下提供了compile、compile-fail、flatten、gas-reporter、test等测试工程其中compile-fail专门用于验证编译应当失败的场景——这正是自动检查代码错误能力的反面测试配置了错误契约或非法语法时Hardhat 必须在编译阶段给出明确报错。核心能力三与智能合约交互部署、脚本与网络用 Ignition 声明式部署Hardhat 3 的部署方案由 packages/hardhat-ignition 提供。模板文档给出的部署命令为# 部署到本地模拟链 npx hardhat ignition deploy ignition/modules/Counter.ts # 部署到 Sepolia 测试网 npx hardhat ignition deploy --network sepolia ignition/modules/Counter.tsIgnition 采用声明式模块描述部署流程模块定义在ignition/modules/下具备可复现、可断点续跑等特性是对 README与智能合约交互能力的正式化封装。本地模拟网络L1 与 OP 双链支持模板 hardhat.config.ts 展示了 Hardhat 3 的多网络配置模型其中最有特色的是本地模拟链networks: { hardhatMainnet: { type: edr-simulated, // EDR 本地模拟链 chainType: l1, // 模拟以太坊主网 }, hardhatOp: { type: edr-simulated, chainType: op, // 本地模拟 OP 主网含 L2 语义 }, sepolia: { type: http, // 通过 HTTP RPC 连接真实测试网 chainType: l1, url: configVariable(SEPOLIA_RPC_URL), accounts: [configVariable(SEPOLIA_PRIVATE_KEY)], }, },模板 01-node-test-runner-viem/README.md 特别说明项目演示了如何连接不同类型网络包括在本地模拟 OP 主网——这意味着你无需真实 L2 节点即可在本地复现 Optimistic 链的部署与交易语义。从源码看这类edr-simulated网络基于仓库的 EDR 引擎实现nomicfoundation/edr是 packages/hardhat/package.json 的核心依赖之一支持l1与op两种chainType。配置变量与密钥管理上例中的configVariable(SEPOLIA_RPC_URL)、configVariable(SEPOLIA_PRIVATE_KEY)是 Hardhat 3 的安全配置变量 API敏感信息如私钥、RPC 地址不再写死在配置文件中而是通过环境变量或 keystore 注入。模板文档提供了官方推荐做法——使用hardhat-keystore插件源码见 packages/hardhat-keystorenpx hardhat keystore set SEPOLIA_PRIVATE_KEY执行后按提示输入私钥即可在配置中以configVariable(SEPOLIA_PRIVATE_KEY)引用实现配置不入库、密钥不落盘到明文文件的工程规范。配置体系defineConfig、编译 profiles 与插件Hardhat 3 使用defineConfig提供类型安全的配置入口模板配置文件 hardhat.config.ts 完整展示了三个配置维度插件注册plugins: [hardhatToolboxViemPlugin]将 Toolbox 插件聚合了 viem、verify、ignition 等能力挂载进运行时Solidity 编译 profilesolidity: { profiles: { default: { version: 0.8.34 }, production: { version: 0.8.34, settings: { optimizer: { enabled: true, runs: 200 } }, }, }, },defaultprofile 用于日常开发不开启优化器编译更快productionprofile 开启优化器并设置runs: 200用于正式发布——两者共享同一份源码按需切换构建目标 3.网络矩阵如上节所示将本地模拟链L1/OP与真实测试网Sepolia统一声明在同一份配置中。此外仓库的 packages/hardhat/src 还沉淀了config.ts、hre.ts、plugins.ts等模块分别对应配置解析、Hardhat Runtime EnvironmentHRE与插件注册的底层实现docs/engineering-guidelines.md 则记录了该仓库自身的工程规范可作为深入理解 Hardhat 内部架构的起点。可扩展生态插件化架构与官方 ToolboxREADME 强调 Hardhat 面向专业人士其专业性的根基是插件化架构——packages/目录下除核心包外还维护着完整的第一方插件族测试框架hardhat-mocha、hardhat-node-test-runner客户端库适配hardhat-ethersethers.js、hardhat-viemviem断言与测试辅助hardhat-ethers-chai-matchers、hardhat-viem-assertions、hardhat-network-helpers部署与验证hardhat-ignition、hardhat-verify类型生成hardhat-typechain密钥管理hardhat-keystore一键集成hardhat-toolbox-viem、hardhat-toolbox-mocha-ethers分别把上述插件按技术栈打包成单一入口。两条 Toolbox 技术栈的分工清晰选择 viem 栈则使用node:test/viem 模板选择 ethers.js 栈则使用 Mocha/ethers 模板其余插件verify、ignition、keystore、network-helpers两栈共用。这也解释了初始化模板为何只需声明一个 Toolbox 依赖即可获得完整能力。版本注意与参与贡献Hardhat 3 与 Hardhat 2 的差异README 明确提示当前仓库对应 Hardhat 3 这个新的大版本v2 时代大量熟悉的行为任务系统、插件 API 等在 3.x 中已重构。若你的存量项目仍基于 v2应优先参考 v2 分支的文档与插件版本而不是直接套用本文命令。参与开发README 欢迎通过 issue 与 pull request 贡献代码开发环境搭建与提交规范见 CONTRIBUTING.md仓库的工程约束与代码风格可参考 docs/engineering-guidelines.md。同时仓库还提供了针对 E2E 场景的自动化验证脚本 e2e/run-fixture-projects.sh 与 e2e/test-project-initialization.sh后者专门用于回归测试项目初始化链路——也就是npx hardhat --init这一入口的可靠性。小结从 README 的一句话定位出发本文完整还原了 Hardhat 3 的实际使用链路npx hardhat --init交互式初始化 → 三选一模板Node Test Runner Viem / Mocha Ethers / Minimal→npx hardhat test运行测试含 Solidity 与 Node.js 两种维度→ 通过 Ignition 部署与edr-simulated本地模拟链交互 → 用defineConfig、编译 profiles、configVariable与 keystore 管理配置和密钥。所有命令、配置与能力均可在仓库 packages/hardhat/templates 的模板文件与packages/目录的插件源码中找到对应实现可作为进一步探索 Hardhat 3 内部机制的索引。【免费下载链接】hardhatHardhat is a development environment to compile, deploy, test, and debug your Ethereum software.项目地址: https://gitcode.com/GitHub_Trending/ha/hardhat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表