水龙头领不到测试币?手把手用 Hardhat 本地环境零门槛学以太坊交易

你是不是也被 Alchemy、Chainlink、Infura 水龙头的各种门槛拦住了?这篇教你绕过所有水龙头,本地环境直接开练。


一、水龙头为什么这么难领?

按照教程走 Sepolia 测试网,理想情况是:打开水龙头 → 粘贴地址 → 领币 → 发交易。

但实际操作时,你大概率会遇到以下情况:

水龙头 拦住你的理由
Alchemy 主网至少要有 0.001 ETH
Chainlink 同上,也需要主网余额
Infura 需要完成 Linea PoH(人类证明),流程又长又绕
sepoliafaucet.com IP 被识别为机房/VPN,直接拒
pk910.de 同样可能 IP 受限

更尴尬的是:不开代理,人机验证加载不出来;开了代理,IP 被识别为机房。死循环。

解决方案:用 Hardhat 在本地开一条以太坊测试链。 自带 20 个账户、每个 10000 ETH,交易结构、Gas 计算和真实链完全一样,零门槛。


二、环境准备

2.1 检查 Node.js

bash 复制代码
node -v    # 需要 v18+
npm -v

没有的话去 nodejs.org 下载 LTS 版本安装。

2.2 创建项目

bash 复制代码
mkdir web3-learning
cd web3-learning
npm init -y

2.3 安装 Hardhat

注意:写这篇文章时 Hardhat 3 刚发布,很多插件还没适配。用 Hardhat 2 最稳。

bash 复制代码
npm install --save-dev "hardhat@^2.22.0" "@nomicfoundation/hardhat-toolbox@hh2"

如果 package.json 里是 "type": "module",改成 "commonjs"

bash 复制代码
npm pkg set type="commonjs"

2.4 配置文件

创建 hardhat.config.js

javascript 复制代码
require("@nomicfoundation/hardhat-toolbox");

module.exports = {
  solidity: "0.8.28",
  networks: {
    hardhat: {
      chainId: 31337,
    },
  },
};

三、启动本地链

bash 复制代码
npx hardhat node

启动成功后会看到 20 个测试账户,每个都有 10000 ETH

bash 复制代码
Account #0: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 (10000 ETH)
Private Key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

Account #1: 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 (10000 ETH)
Private Key: 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d
...

验证节点是否在运行:

bash 复制代码
curl -X POST 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 的私钥:

bash 复制代码
0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

导入后余额显示 10000 ETH

同样方式导入 Account #1(私钥 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d),用于收币测试。


五、发第一笔交易

  1. MetaMask 切换到 Hardhat Local 网络
  2. 选择 Account #0,点击 发送
  3. 粘贴 Account #1 的地址:0x70997970C51812dc3A010C7d01b50e0d17dc79C8
  4. 金额输入 0.01 ETH
  5. 确认 → 几秒内完成

MetaMask 显示交易确认后,你会得到类似这样的交易哈希:

bash 复制代码
0x7cd23f5370f80f80d0afaf49b1918813966500f4e1a63cfcb6194237edbfee09

六、查看交易和区块(JSON-RPC 替代 Etherscan)

本地链没有 Etherscan,但可以用 JSON-RPC 直接查,数据完全一样。

6.1 查交易详情

bash 复制代码
curl -X POST 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 查区块信息

bash 复制代码
curl -X POST 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 手续费怎么算?

bash 复制代码
手续费 = 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 部署验证。90% 的开发时间都应该在本地。


八、总结

  • 水龙头领不到币?Hardhat 本地环境是最佳替代方案
  • 一条命令 npx hardhat node,20 个账户各 10000 ETH
  • MetaMask 连 127.0.0.1:8545,跟真实链体验完全一致
  • JSON-RPC 替代 Etherscan,命令行直接查交易和区块
  • 普通转账固定 21000 Gas,手续费 = Gas × Gas Price
  • 先在本地跑通,再上测试网------这才是 Web3 开发的标准流程

相关推荐
因_崔斯汀2 小时前
Three.js 3D 地图特效与材质实现指南
前端
angerdream2 小时前
手把手编写儿童手机远程监控App之vue3用 AI Agent生成菜单
前端
cidy_982 小时前
Git Pull 代码冲突后完整回退教程
前端
JING小白2 小时前
Day 1 重学Vue:响应式系统的“底层逻辑”变更,Vue2旧时代的终结与Vue3新时代的开启
前端·vue.js
张就是我1065922 小时前
一个 ZIP 文件,把 webshell 写到了不该在的地方
前端
张就是我1065922 小时前
SPIP 的一个漏洞:你以为过滤了,其实没过滤干净
前端
一tiao咸鱼2 小时前
我用 Claude 做了一个 AI 面试刷题系统,支持 DeepSeek / 阿里 / GPT 帮你打分
前端
掘金一周3 小时前
对车完全小白,不知买油买电还是买混动,求建议| 沸点周刊 7.2
前端·人工智能·后端
妙码生花3 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十六):目录结构更新、完善 token 系统(AI 表示 token 入库无需加密?)
前端·后端·ai编程