以太坊开发自定义网络完全指南,从零搭建你的私有链
在以太坊开发过程中,直接在主网(Mainnet)上测试智能合约不仅成本高昂,而且不可控,公共测试网(如 Sepolia、Goerli)虽然免费,但网络状况不受自己掌控,测试币获取也可能遇到困难,搭建一个自定义网络(Custom Network / 私有链)成为许多开发者和企业的不二之选。
本文将手把手教你如何使用 Geth 客户端搭建一个属于自己的以太坊自定义网络,涵盖创世区块配置、节点初始化、多节点互联、交易测试等完整流程。
为什么需要自定义网络?
自定义网络主要有以下应用场景:
- 智能合约开发与调试:无需消耗真实 Gas,快速迭代
- 企业级联盟链:银行、供应链等机构间搭建许可制区块链
- 区块链学习研究:深入理解共识机制、出块流程、P2P 网络
- CI/CD 自动化测试:为集成测试提供确定性的测试环境
环境准备
1 安装 Geth
Geth(Go Ethereum)是以太坊最流行的客户端,以 Ubuntu 为例:
sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get update sudo apt-get install ethereum
macOS 用户可以直接使用 Homebrew:
brew tap ethereum/ethereum brew install ethereum
安装完成后验证:
geth version
2 创建工作目录
mkdir my-private-chain && cd my-private-chain
配置创世区块
自定义网络的一切始于创世区块(Genesis Block)配置文件 genesis.json,这里推荐使用 Clique(PoA,权威证明) 共识机制,无需挖矿即可快速出块,非常适合开发和联盟链场景。
{
"config": {
"chainId": 666666,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"clique": {
"period": 15,
"epoch": 30000
}
},
"difficulty": "1",
"gasLimit": "8000000000",
"alloc": {
"0x你的账户地址": {
"balance": "100000000000000000000000"
}
}
}
关键参数说明:
| 参数 | 说明 |
|---|---|
chainId |
链的唯一标识,务必避开已知公网 ID(如 1、5、11155111),防止重放攻击 |
clique.period |
出块间隔(秒),设为 15 表示每 15 秒出一个块 |
gasLimit |
每个区块的 Gas 上限 |
alloc |
预分配代币的账户,无需挖矿即有余额 |
初始化并启动节点
1 创建账户
geth account new --datadir ./node1
系统会要求设置密码,并返回一个账户地址,记下它。
2 初始化创世区块
geth init --datadir ./node1 genesis.json
看到 Successfully wrote genesis state 即表示初始化成功。
3 启动节点
geth --datadir ./node1 \ --networkid 666666 \ --port 30303 \ --http --http.addr 0.0.0.0 --http.port 8545 \ --http.api eth,net,web3,personal,miner,admin \ --http.corsdomain "*" \ --allow-insecure-unlock \ --nodiscover \ console
参数解析:
--networkid:必须与chainId保持一致--nodiscover:关闭节点自动发现,避免连接到陌生节点--http:开启 HTTP-RPC 服务,供 DApp 和 Remix 等工具连接console:进入交互式 JavaScript 控制台
Clique 出块:设置签名者
PoA 网络需要将初始账户注册为签名者(Signer),首先查询 Coinbase 地址:
eth.coinbase // "0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
方法一:修改 genesis.json 中的 extradata 字段,格式为:
0x + 64个0 + 去掉0x的签名者地址 + 130个0
然后重新执行 geth init(需删除 datadir 重新初始化)。
方法二:启动时通过 --mine --miner.etherbase 指定,节点会自动开始签名出块。
启动挖矿(PoA 中即为签名出块):
miner.start(1)
稍等片刻后查询区块高度:
eth.blockNumber
多节点组网
单节点网络无法体现区块链的去中心化特性,下面添加第二个节点:
# 初始化第二个节点(使用同一份 genesis.json) geth init --datadir ./node2 genesis.json # 启动时换一个端口 get
发布于:2026-10-05,除非注明,否则均为原创文章,转载请注明出处。

