摘要:Hardhat 2.29 本机实跑:compile 出 artifacts、hardhat node 起本地 JSON-RPC、scripts/deploy.js 部署到 localhost。不必测试网 ETH;与 Remix 第一课区分;私钥仅本地公开测试钥。

写完 Solidity 合约之后,常见下一步是在本机搭一个可重复的工程:编译出 ABI/字节码、起本地节点、再用脚本部署或调用。Hardhat 就是干这件事的开发环境。本文用 Hardhat 2.29.1 + Solidity 0.8.28,在本机跑通 compile → node → run scripts/deploy.js --network localhost;不碰主网、不需要测试网 ETH。Remix 第一课见 Solidity 与 Remix 本地/VM 部署;链上只读用 web3.py / ethers 见文末相关阅读。官方文档已提示 Hardhat 3 可用,Hardhat 2 仍维护至约 2027(以官网为准);本场按仍广泛使用的 2.x 工程结构演示。

一、官方怎么描述 Hardhat

Hardhat 文档「Compiling your contracts」说明:内置 compile 任务会编译合约,产物默认进 artifacts/;重复编译时若无变更会提示 Nothing to compile。

Hardhat 初始化:编译、本地节点与脚本结构怎么跑通-程序旅途
图1:hardhat.org「Compiling your contracts」:npx hardhat compile 示例输出 Compiled 1 contract successfully;产物在 artifacts/;界面英文,2026-10-10 实拍

典型目录(本场演示):

路径 作用
hardhat.config.js Solidity 版本、networks 等配置
contracts/ .sol 源码(示例 Lock.sol)
scripts/ 部署/调用脚本(示例 deploy.js)
artifacts/ 编译产物 ABI + bytecode
test/ 测试(本场未展开)

二、本机编译:npx hardhat compile

2026-10-10 Asia/Shanghai,在临时目录 hardhat-demo 执行(Node.js 22 + Hardhat 2.29.1):首次会下载 solc 0.8.28,然后输出 Compiled 1 Solidity file successfully (evm target: paris)。随后 artifacts/contracts/Lock.sol/ 下出现 Lock.json(含 ABI 与 bytecode)。

Hardhat 初始化:编译、本地节点与脚本结构怎么跑通-程序旅途
图2:本机终端:Downloading compiler 0.8.28 → Compiled 1 Solidity file successfully;ls 可见 contracts/Lock.sol、scripts/deploy.js、artifacts/.../Lock.json;2026-10-10
npx hardhat compile
# 期望看到 Compiled … successfully
ls contracts/ scripts/ artifacts/contracts/Lock.sol/

三、本地节点:npx hardhat node

另开一个终端跑 npx hardhat node,会在 http://127.0.0.1:8545/ 起 HTTP/WebSocket JSON-RPC,并打印一组公开已知的本地账户(各约 10000 ETH)。这些私钥仅供本机演示——切勿充值到主网或任何真网。

Hardhat 初始化:编译、本地节点与脚本结构怎么跑通-程序旅途
图3:本机 npx hardhat node:Started … at http://127.0.0.1:8545/;Account #0 0xf39F…2266;WARNING 标明密钥公开已知;图中私钥已截断;chainId 31337;2026-10-10
和 Remix VM 的差别
Remix VM 在浏览器里模拟;Hardhat node 是本机 JSON-RPC,钱包/脚本可用 --network localhost 连上。
和 Sepolia 的差别
本地节点不出块到公网,不需要水龙头;要上测试网再配 networks.sepolia(本场不做真部署)。
安全底线
截图与日志里的 Hardhat 默认私钥人人知道;主网用它们会丢币。

四、脚本结构:run + --network localhost

Hardhat 2 文档「Writing scripts with Hardhat」说明可用 npx hardhat run script.js 跑脚本,脚本里通过 Hardhat Runtime Environment 拿 ethers 等。本场 scripts/deploy.js 用 hre.ethers.deployContract("Lock", …) 把示例合约部署到本地节点。

Hardhat 初始化:编译、本地节点与脚本结构怎么跑通-程序旅途
图4:本机:npx hardhat run scripts/deploy.js --network localhost → Lock with 0.001 ETH … deployed to 0x5FbDB2315678afecb367f032d93F642f64180aa3;并列出工程树;2026-10-10
Hardhat 初始化:编译、本地节点与脚本结构怎么跑通-程序旅途
图5:v2.hardhat.org「Writing scripts with Hardhat」:用 Hardhat CLI 跑脚本、或把 Hardhat 当库;示例 npx hardhat run;界面英文,2026-10-10 实拍
# 终端 A
npx hardhat node
# 终端 B
npx hardhat run scripts/deploy.js --network localhost

本场部署输出示例(仅本地):合约地址 0x5FbDB2…0aa3,锁定约 0.001 ETH(本地假币)。数字以你本机输出为准。

五、和已发文怎么衔接、别踩的坑

  1. 不要当成 Remix 第二课复读:Remix 适合浏览器里改一行就部署;Hardhat 适合仓库化、脚本化、可重复 CI。
  2. mapping / 事件核对仍可用 Remix VM 或本机,见 Solidity mapping 与事件。
  3. 只读链上状态用 web3.py / ethers,不必为了读余额去跑 Hardhat node,见 web3.py 连 Sepolia、ethers.js 读合约。
  4. 需要钱包看测试网/主网时,可用欧易 Web3(创建步骤可填 CHENGXULVTU);买少量 Gas 币可在 币安 或 欧易——本场本地演示完全不需要。

相关阅读

说明:配图为 2026-10-10 Hardhat 官方文档与本机真实终端输出;本地账户私钥已截断展示。本文不涉及主网资金,不构成投资建议。版本与命令以你安装的 Hardhat / 官方文档为准。