在以太坊私有链的开发、测试或企业级部署过程中,我们经常会遇到需要为特定账户“凭空”增加 ETH 余额的场景,与公链必须通过挖矿或转账获得代币不同,私链赋予了开发者对网络完全的控制权。
本文将详细介绍三种在以太坊私链中为账户充值余额的常用方法,帮助你高效地进行开发和测试。
修改 Genesis 文件(预分配资金)
这是最原始也是最推荐的方法,适用于在私链启动之前就确定好初始资金分配的情况。
在创世区块配置文件(通常是 genesis.json)中,你可以通过 alloc 字段直接为指定地址预分配 ETH。
操作步骤:
- 打开你的
genesis.json文件。 - 找到
alloc对象。 - 添加目标账户地址和余额(注意:单位是 Wei,1 ETH = 10^18 Wei)。
{
"config": { ... },
"difficulty": "200",
"gasLimit": "2100000",
"alloc": {
"0xYourTargetAddressHere": {
"balance": "1000000000000000000000000"
// 这里是100万个ETH(后面跟了24个零,即10^24 Wei)
}
}
}
注意:如果你使用的是 Geth 客户端,且之前已经初始化过该链,你需要删除原有的链数据目录(如 ~/.ethereum/privatenet)并重新执行 geth init genesis.json 才能生效。
使用 Geth Console 通过矿工账户转账
如果你的私链已经在运行,且开启了挖矿功能(或者你有 Coinbase 账户的私钥),最简单的方法是使用 Geth 控制台直接转账。
前提条件: 私链正在运行,且矿工账户有余额(或者你是矿工,可以立刻挖出新的 ETH)。
操作步骤:
-
进入控制台:
geth attach ipc:/path/to/your/geth.ipc
-
解锁矿工账户: 默认情况下,Coinbase(矿工)账户通常是第一个账户,如果需要密码,请输入。
personal.unlockAccount(eth.accounts[0])
-
执行转账: 从矿工账户向目标账户发送 ETH。
eth.sendTransaction({ from: eth.accounts[0], to: "0xTargetAddress", value: web3.toWei(1000, "ether") }) -
验证余额: 稍等片刻(等待出块确认),查询余额:
web3.fromWei(eth.getBalance("0xTargetAddress"), "ether")
使用 Hardhat 或 Ganache(开发环境专用)
如果你是在本地进行 DApp 开发,通常不会直接使用 Geth 搭建原始私链,而是使用 Hardhat Network 或 Ganache,这些工具提供了非常便捷的“充值”方式。
Hardhat:
在 Hardhat 中,你可以通过配置 hardhat.config.js 来定义网络,或者直接在测试脚本中通过 ethers 库从默认账户转账,Hardhat 节点默认会创建拥有 10000 ETH 的账户。
<

| 场景 | 推荐方法 | 优点 |
|---|---|---|
| 初始化新链 | 修改 genesis.json |
永久生效,无需消耗 Gas |
| 链运行中,有矿工 | Geth Console 转账 | 灵活,模拟真实交易 |
| DApp 本地调试 | Hardhat / Ganache | 自动化,无需手动配置 |
通过以上方法,你可以轻松解决以太坊私链开发中的资金短缺问题,专注于业务逻辑的实现。