以太坊作为全球领先的智能合约平台,其开发、测试和部署流程是每一位开发者必须掌握的技能,在实际将应用部署到主网(Mainnet)之前,测试网络(Testnet)提供了一个安全、低成本的环境,让开发者能够验证智能合约逻辑、调试代码、与 dApp 交互以及熟悉以太坊的工作原理,本文将详细介绍如何从零开始搭建以太坊测试网络,涵盖本地私有测试网络和公共测试网络的使用。
在深入搭建之前,我们先明确测试网络的重要性:
搭建以太坊测试网络主要有以下几种途径,开发者可以根据需求选择:
本地私有测试网络是学习和开发的首选,这里以常用的 Geth(Go-Ethereum)客户端为例进行讲解。

Geth 通过自定义配置文件来启动私有网络,创建一个配置文件,private.toml:
private_config.toml 内容示例:
[config]
chainid = 13337 # 自定义链ID,确保唯一性
genesis = {
config = {
chainId = 13337,
homesteadBlock = 0,
eip150Block = 0,
eip155Block = 0,
eip158Block = 0,
byzantiumBlock = 0,
constantinopleBlock = 0,
petersburgBlock = 0,
istanbulBlock = 0,
berlinBlock = 0,
londonBlock = 0,
mergeNetsplitBlock = 0,
shanghaiTime = 0,
},
timestamp = 1640995200, #创世块时间戳
gasLimit = 0x47b760, #创世块gas限制
alloc = {
# 可以预分配一些测试地址和以太币
# "0x742d35Cc6634C0532925a3b844Bc9e7595f8d5a3": { "balance": "0x200000000000000000000000000000000000000000000000000000000000000" }
}
}
使用此配置文件初始化创世块:
geth --datadir ./private_chain init private_config.toml
执行后,会在当前目录下创建 private_chain 文件夹,包含 geth、keystore 等子目录。
在终端中运行以下命令启动节点:
geth --datadir ./private_chain --networkid 13337 --http --http.addr "0.0.0.0" --http.port "8545" --http.api "personal,eth,net,web3" --ws --ws.addr "0.0.0.0" --ws.port "8546" --ws.api "personal,eth,net,web3" --allow-insecure-unlock
参数说明:

--datadir: 指定数据目录。--networkid: 设置网络 ID,与创世块配置中一致。--http: 启用 HTTP-RPC 服务。--http.addr 和 --http.port: HTTP-RPC 监听地址和端口。--http.api: 暴露的 HTTP API 接口。--ws 和 --ws.addr 和 --ws.port: 启用 WebSocket-RPC 服务及其地址端口。--ws.api: 暴露的 WebSocket API 接口。--allow-insecure-unlock: 允许在不加密的情况下解锁账户(仅开发测试环境使用,生产环境禁用)。启动后,节点会开始自举,由于是私有网络,它会立即开始挖矿(默认是 CPU 挖矿)。
打开一个新的终端, attach 到运行的节点:
geth attach http://localhost:8545
进入控制台后,可以进行以下操作:
personal.list(): 查看账户列表。personal.newPassword("your_password"): 创建新账户并设置密码。personal.unlockAccount(eth.accounts[0], "your_password"): 解锁账户,用于发送交易。eth.getBalance(eth.accounts[0]): 查询账户余额。eth.mining: 查看挖矿状态。miner.start(1): 开始挖矿(参数为线程数)。miner.stop(): 停止挖矿。在私有网络中,你可以通过挖矿快速获得测试币,或者使用 personal.sendTransaction 发送交易。
Goerli 是目前最活跃的以太坊公共测试网络之一,其共识机制是 Clique(PoA,权威证明),适合开发者快速接入。

同步区块:运行 Geth 并指定连接到 Goerli 网络。
geth --goerli --http --http.addr "0.0.0.0" --http.port "8545" --http.api "personal,eth,net,web3"
首次运行时,节点会开始同步 Goerli 网络的区块,这可能需要一些时间。
获取测试币:Goerli 的测试币可以通过官方或社区的水龙头(Faucet)获取。
开发交互:与本地私有网络类似,可以使用 geth attach http://localhost:8545 连接到公共测试节点,并进行账户管理、合约部署等操作。
对于大多数开发者而言,使用 Infura 或 Alchemy 等提供的公共测试网络 RPC 服务更为便捷。