以太坊开发的第一步不是写智能合约,而是拥有一条完全由你控制的私有链:它数据量轻、无 Gas 消耗、想转账就转账,想回滚就回滚。本文将以最简洁的流程,带你完成安装 → 启动 → 链上转账的完整闭环。
核心关键词
以太坊私链 | Geth 安装 | genesis 配置 | Docker 运行私链 | EVM 本地测试 | 可验证转账交易
1. 什么是以太坊私链?
以太坊主网节点需要同步 1TB+ 的数据,开发调试十分费力。私链把“共识网络”收敛到本地,占用资源极低,开发者可随意重启、报错、回滚,依旧保持:
- 完全兼容EVM 字节码,solidity 合约无需修改即可部署
- 可自定义 gas 价格、出块速度、挖矿奖励
- 解锁账户、直接转账,无真实经济损失
👉 想直观感受“区块=账本页” 是怎么被链起来的?点这 30 秒动画一看就懂
2. 安装 Geth(以太坊官方客户端)
Geth 用 Go 编写,跨平台、性能高,是 90% 开发者的首选。
2.1 常见方式
| 途径 | 命令/地址 | 备注 |
|---|---|---|
| 直接下载 | 见官网 geth.ethereum.org/downloads | 选择本地系统对应版本 |
| Docker | docker pull ethereum/client-go | 提示:镜像约 300 MB |
后文使用Docker,避免宿主环境差异。
3. 配置 genesis 文件
创世块(genesis)是私链的起点,决定链 ID、初始账户余额、出块难度等所有元数据。
新建目录:
mkdir -p ~/eth-private/{data,config}在 ~/eth-private/config/genesis.json 写入:
{
"config": {
"chainId": 2024,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"ethash": {}
},
"difficulty": "1",
"gasLimit": "8000000",
"alloc": {
"0x5e00b4e110975f62414aae1f7ef9a959cb4782b7": { "balance": "1000000000000000000000" }
}
}- chainId:唯一标识,不与主网/测试网冲突
- alloc:预先给开发者地址充 1000 ETH,方便测试
4. 一键启动私链(Docker 模式)
# 1. 初始化数据目录
docker run --rm -v ~/eth-private:/data \
ethereum/client-go init /data/config/genesis.json --datadir /data/node
# 2. 启动节点 + 挖矿 + RPC
docker run -it --name eth-private -p 8545:8545 -v ~/eth-private:/data \
ethereum/client-go --datadir /data/node \
--http --http.addr 0.0.0.0 --http.api personal,eth,net,web3,miner \
--nodiscover --networkid 2024 --mine --miner.etherbase 0x5e00b4e110975f62414aae1f7ef9a959cb4782b7 \
console当看到持续打印
🔨 mined potential block number=1 hash=...就代表私链启动成功,挖矿奖励已打入你的地址。
5. 用 geth attach 进入交互
在另一终端执行:
docker exec -it eth-private geth attach /data/node/geth.ipc常用命令速查:
eth.accounts查看所有账户eth.getBalance(eth.accounts[0])用 wei 为单位web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")转 ether 显示personal.newAccount("password")创建新账户
6. 发起你的第一笔链上转账
6.1 解锁账户
personal.unlockAccount(eth.accounts[0], "password", 300) // 解锁 5 分钟6.2 发送交易
const tx = eth.sendTransaction({
from: eth.accounts[0],
to: eth.accounts[1],
value: web3.toWei("10", "ether"),
gas: 21000
})控制台立即返回 transaction hash,但状态为 pending,表示尚未被打包。
6.3 打包交易
miner.start(1)
admin.sleepBlocks(1)
miner.stop()再查询:
eth.getTransactionReceipt(tx)确认 status: 0x1,恭喜你完成第一次区块链转账!
👉 区块高度不断增长,资产却在链路清晰可查——体验实时浏览器最新链上数据
7. 快速 FAQ
Q1:私链挖矿为什么一两秒就出一个块?
A:我们将 difficulty 设为 1,CPU 轻松求解,模拟“无成本”共识,方便测试。
Q2:可以把 chainId 改成和主网一样的 1 吗?
A:绝对不行。这会导致 Metamask 把你的私链误认为主网,交易可能被重放到真实环境,造成资金损失。
Q3:私链丢了数据怎么办?
A:直接删除 ~/eth-private/node,重新执行 init 即可瞬间“重生”。
Q4:想关掉挖矿只当 RPC 节点?
A:去掉 --mine 参数即可,gas 可由后续手动 miner.start() 再产生。
Q5:如何接入 Remix 部署智能合约?
A:把上述 http.addr 改为 0.0.0.0,Remix 选择 Web3 Provider,地址填 http://localhost:8545,即可秒连私链。
Q6:私链最大能跑多少 TPS?
A:取决于本机 CPU;单核通常可支持 200+ TPS(针对单矿工模式测试),已远超常规开发需求。
结语
一条属于你的以太坊私链已就绪:只需两行命令即可重启、任意回滚资产。掌握这一小步,你就拥有了低成本实验所有 Web3 创意的能力。接下来,不妨在私链上部署第一个 NFT 合约,彻底告别测试网排队拥堵的烦恼。