学以太坊不一定要死磕测试网水龙头。Hardhat 本地节点自带 10000 ETH,出块秒到,是 Web3 开发者的标准学习路径。
一、为什么推荐从本地环境开始?
很多教程第一步就让你去 Sepolia 测试网领币,但实际操作时经常遇到网络验证、账户余额等门槛,还没开始写代码就卡住了。
Hardhat 是以太坊官方推荐的开发框架,它的本地节点功能专为学习调试设计:
| 特点 | 说明 |
|---|---|
| 开箱即用 | 一条命令启动,无需注册任何平台 |
| 无限测试币 | 20 个账户各 10000 ETH,随便花 |
| 秒级出块 | 收到交易立刻确认,不用等 12 秒 |
| 完全本地 | 所有数据在本地,放心折腾 |
| 与主网一致 | 交易结构、Gas 计算完全相同 |
这是业界标准做法——90% 的以太坊开发调试都在本地完成,测试网只是最后的部署验证环节。
二、环境准备
2.1 检查 Node.js
node-v# 需要 v18+npm-v没有的话去 nodejs.org 下载 LTS 版本安装。
2.2 创建项目
mkdirweb3-learningcdweb3-learningnpminit-y2.3 安装 Hardhat
注意:写这篇文章时 Hardhat 3 刚发布,很多插件还没适配。用 Hardhat 2 最稳。
npminstall--save-dev"hardhat@^2.22.0""@nomicfoundation/hardhat-toolbox@hh2"如果 package.json 里是"type": "module",改成"commonjs":
npmpkgsettype="commonjs"2.4 配置文件
创建hardhat.config.js:
require("@nomicfoundation/hardhat-toolbox");module.exports={solidity:"0.8.28",networks:{hardhat:{chainId:31337,},},};三、启动本地链
npx hardhatnode启动成功后会看到 20 个测试账户,每个都有10000 ETH:
Account #0: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 (10000 ETH) Private Key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 Account #1: 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 (10000 ETH) Private Key: 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d ...验证节点是否在运行:
curl-XPOST http://127.0.0.1:8545\-H"Content-Type: application/json"\-d'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'# 返回 {"result":"0x0"} 表示链已启动四、MetaMask 接入本地链
4.1 添加 Hardhat Local 网络
MetaMask → 网络下拉 → 添加网络 → 手动添加:
| 参数 | 值 |
|---|---|
| 网络名称 | Hardhat Local |
| RPC URL | http://127.0.0.1:8545 |
| 链 ID | 31337 |
| 货币符号 | ETH |
MetaMask 会提示"符号不匹配"——因为 31337 不在它的已知列表里。点继续就行,这是你自己的本地链,没有骗子。
4.2 导入测试账户
MetaMask → 头像 → 导入账户 → 粘贴 Account #0 的私钥:
0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80导入后余额显示10000 ETH。
同样方式导入 Account #1(私钥0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d),用于收币测试。
五、发第一笔交易
- MetaMask 切换到Hardhat Local网络
- 选择 Account #0,点击发送
- 粘贴 Account #1 的地址:
0x70997970C51812dc3A010C7d01b50e0d17dc79C8 - 金额输入
0.01ETH - 确认 → 几秒内完成
MetaMask 显示交易确认后,你会得到类似这样的交易哈希:
0x7cd23f5370f80f80d0afaf49b1918813966500f4e1a63cfcb6194237edbfee09六、查看交易和区块(JSON-RPC 替代 Etherscan)
本地链没有 Etherscan,但可以用 JSON-RPC 直接查,数据完全一样。
6.1 查交易详情
curl-XPOST http://127.0.0.1:8545\-H"Content-Type: application/json"\-d'{ "jsonrpc":"2.0", "method":"eth_getTransactionByHash", "params":["你的交易哈希"], "id":1 }'返回关键字段解读:
| 字段 | 含义 | 示例值 |
|---|---|---|
hash | 交易唯一标识 | 0x7cd2... |
from | 发送方地址 | 0xf39F... |
to | 接收方地址 | 0x7099... |
value | 转账金额(wei) | 0x2386f26fc10000= 0.01 ETH |
gas | Gas 限制 | 0x5209= 21001 |
gasPrice | Gas 单价(wei) | 0x6fc23ac0= 1.875 gwei |
blockNumber | 所在区块 | 0x1 |
6.2 查区块信息
curl-XPOST http://127.0.0.1:8545\-H"Content-Type: application/json"\-d'{ "jsonrpc":"2.0", "method":"eth_getBlockByNumber", "params":["0x1", false], "id":1 }'关键字段:
| 字段 | 含义 | 示例值 |
|---|---|---|
number | 区块高度 | 0x1= 1 |
hash | 区块哈希 | 0x5d3c... |
transactions | 包含的交易列表 | 1 笔交易 |
gasUsed | 实际消耗 Gas | 0x5208= 21000 |
gasLimit | 区块 Gas 上限 | 0x3938700= 6000 万 |
timestamp | 时间戳 | Unix 时间戳 |
6.3 手续费怎么算?
手续费 = Gas Used × Gas Price = 21000 × 1875000000 wei = 0.000039 ETH普通 ETH 转账固定消耗21000 Gas,这是以太坊的设计。合约调用才需要更多。
七、本地 vs 测试网对比
| 对比项 | Sepolia 测试网 | 本地 Hardhat |
|---|---|---|
| 获取测试币 | 需通过在线平台申领 | 自带 10000 ETH |
| 出块速度 | ~12 秒 | 秒出 |
| 查看交易 | etherscan.io | curl+ JSON-RPC |
| 隐私 | 交易上公链 | 完全本地,不上链 |
| 多人协作 | 可以 | 需部署到测试网 |
| 学习效果 | 一样 | 一样 |
| 适合阶段 | 部署验证 | 前期学习 + 调试 |
建议路径:先在本地 Hardhat 把交易、合约、测试全跑通,再上 Sepolia 部署验证。这是 Web3 开发的标准工作流。
八、总结
- Hardhat 本地环境是 Web3 入门最高效的起点
- 一条命令
npx hardhat node,20 个账户各 10000 ETH - MetaMask 连
127.0.0.1:8545,链上操作体验完全一致 - JSON-RPC 直接查交易和区块,无需依赖第三方浏览器
- 普通转账固定 21000 Gas,手续费 = Gas × Gas Price
- 本地跑通 → 测试网部署,这是标准开发流程