以太坊作为目前最知名的智能合约平台之一,其公链虽然功能强大,但对于开发者而言,在进行应用测试、学习智能合约开发或进行某些不希望公开的实验时,搭建一个本地或私有的以太坊网络(即“私链”)则更为便捷和安全,本文将详细介绍如何在Windows操作系统上,从零开始搭建一个以太坊私链。
在开始之前,请确保你的Windows系统满足以下条件:
wsl --install 来安装(需要Windows 10版本2004及以上)。Geth(Go-Ethereum)是以太坊官方的Go语言实现,是最常用的以太坊客户端之一,我们将使用它来搭建私链。
使用预编译二进制文件(推荐)

下载Geth: 访问Geth的官方发布页面,找到Windows对应的预编译二进制文件(通常是 windows-amd64 版本的zip压缩包)。 geth-windows-amd64-1.13.6-9666d30e.zip (版本号可能更新)
解压并配置环境变量:
C:\Program Files\geth。C:\Program Files\geth 添加到系统的环境变量 Path 中,以便在命令行中直接调用 geth 命令。
Path 变量,点击“编辑”。C:\Program Files\geth。验证安装: 打开一个新的命令提示符(CMD)或PowerShell窗口,输入以下命令:

geth version
如果显示Geth的版本信息,则表示安装成功。
通过WSL安装(如果已安装WSL)
如果你更习惯Linux环境,可以通过WSL安装Geth:
sudo apt updatesudo apt install geth -ygeth version以太坊的每个网络都有一个创世区块(Genesis Block),它是区块链的起点,私链需要自定义创世区块配置文件。
创建创世配置文件: 在你的工作目录(C:\Ethereum 或 ~/ethereum)下,创建一个名为 genesis.json 的文件,你可以使用记事本、VS Code等文本编辑器。

编写创世配置内容: 以下是一个简单的私链创世配置文件示例:
{
"config": {
"chainId": 15, // 私链的ID,用于区分不同的以太坊网络,自定义一个非0且不同于公链的ID(主网1,Ropsten3,Rinkeby4,Goerli5)
"constantinopleblock": 0, // 启用Constantinople分叉的区块号,设为0表示立即启用
"eip150block": 0, // 启用EIP150分叉的区块号
"eip155block": 0, // 启用EIP155分叉的区块号
"eip158block": 0 // 启用EIP158分叉的区块号
},
"alloc": {}, // 预分配地址的以太币,这里留空
"coinbase": "0x0000000000000000000000000000000000000000", // 矿工地址
"difficulty": "0x40000", // 初始难度,私链可以设置得很低以便快速出块
"extraData": "", // 附加信息,可以留空或填写自定义信息
"gasLimit": "0xffffffff", // Gas限制
"nonce": "0x0000000000000042", // 随机数
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", // 与nonce配合使用
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", // 父区块哈希,创世区块为0
"timestamp": "0x00" // 时间戳
}
chainId 是私链的唯一标识,非常重要,不要与已知公链冲突。difficulty 设置较低值(如 0x40000 或 0x2000)可以让私链出块更快,方便测试。初始化创世区块: 打开命令提示符或PowerShell,进入你创建 genesis.json 文件的目录。
cd C:\Ethereum
然后运行以下命令(如果使用WSL,则进入对应Linux目录):
geth --datadir "./data" init genesis.json
--datadir "./data" 指定了数据存储目录,./data 会在当前目录下创建,你也可以指定其他路径。data 目录下看到 geth 和 keystore 等文件夹。我们可以启动私链节点了。
基本启动命令: 在命令提示符或PowerShell中,继续在 genesis.json 所在目录运行:
geth --datadir "./data" console
--datadir "./data":指定数据目录,必须与初始化时一致。console:启动JavaScript交互式控制台,方便我们与节点交互。启动参数说明:
--networkid 15:指定网络ID,必须与 genesis.json 中的 chainId 一致,如果genesis.json中已配置,此处可省略,但显式指定更清晰。--nodiscover:禁止自动发现其他节点,因为是私链,不需要发现其他网络中的节点。--maxpeers 0:限制最大连接节点数为0,即不接受外部连接,也可以设置为一个较小的数,如 --maxpeers 1。--mine:启动挖矿。--minerthreads 1:指定挖矿线程数,默认是CPU的逻辑核心数。--rpc:启用HTTP-RPC服务。--rpcaddr "localhost":RPC服务监听的地址。--rpcport "8545":RPC服务监听的端口。--rpccorsdomain "*":允许跨域访问的域名,开发时可设为 ,生产环境请谨慎设置。带挖矿和RPC的启动示例(推荐): 为了方便后续与私链交互(例如使用Truffle、MetaMask或直接调用RPC),建议启动时开启RPC和挖矿:
geth --datadir "./data" --networkid 15 --nodiscover --rpc --rpcaddr "localhost" --rpcport "8545" --rpccorsdomain "*" console
启动后,你会看到Geth的启动日志,包括节点信息、同步情况等,最后会进入 > 提示符的JavaScript控制台。
进入Geth控制台后,你可以执行各种以太坊命令。
// 查