以太坊作为目前最流行的智能合约平台,其公有链虽然功能强大,但对于学习、测试、企业内部应用或特定场景的开发来说,搭建一个本地或私有网络更为便捷和安全,本文将详细介绍如何在Windows 10操作系统上,从零开始搭建一个以太坊私有链,助你快速进入区块链开发测试的实践环节。

准备工作:环境与工具

在开始之前,请确保你的Windows 10系统已满足以下条件和准备好所需工具:

  1. 硬件要求

    • CPU:至少双核处理器,推荐四核及以上。
    • 内存:至少4GB RAM,推荐8GB或以上,运行节点和编译智能合约会占用较多内存。
    • 硬盘:至少20GB可用空间,用于存储区块链数据。
  2. 软件环境

    • 操作系统:Windows 10 64位 (版本1803或更高更佳)。
    • Git:用于下载和管理以太坊相关源代码或脚本,从Git官网下载并安装,安装时使用默认选项即可。
    • Node.js 和 npm:许多以太坊开发工具基于Node.js,从Node.js官网下载LTS版本并安装,安装完成后,打开命令行工具(如CMD或PowerShell),输入 node -vnpm -v 验证安装是否成功。
    • Python:某些构建工具可能需要Python 2.7或3.x,建议从Python官网安装最新版,并在安装时勾选“Add Python to PATH”选项。
    • Visual C++ Build Tools:编译一些Go或C++项目时可能需要,可以从Microsoft官网下载“Build Tools for Visual Studio”,选择“使用C++的桌面开发”工作负载。
  3. 核心工具选择

    • 我们将选择 Geth (Go-Ethereum) 作为以太坊客户端节点软件,它是目前最流行和功能最完整的以太坊实现之一。
    • 辅助工具:可以准备一个以太坊钱包如MetaMask(浏览器插件),方便与私有链交互。

下载并安装Geth客户端

Geth是以太坊的官方Go语言实现,它是一个命令行工具,可以用来启动节点、管理账户、挖矿、与网络交互等。

  1. 下载Geth

    • 访问Geth的官方发布页面:https://geth.ethereum.org/downloads/
    • 在Windows部分,找到最新的稳定版(如Windows (64-bit) (Archive)),下载对应的.zip压缩包。
  2. 安装与配置Geth

    • 将下载的.zip压缩包解压到一个你方便记忆和管理的目录,C:\ethereum\,解压后你会看到 geth.exe 等文件。
    • 为了方便在命令行任何位置使用Geth,建议将Geth的解压目录添加到系统的环境变量 PATH 中。
      • 在Windows搜索栏中搜索“编辑系统环境变量”,打开“系统属性”对话框。
      • 点击“环境变量...”按钮。
      • 在“系统变量”(或“用户变量”)中找到名为 Path 的变量,选中后点击“编辑...”。
      • 点击“新建”,然后添加Geth的解压目录路径(如 C:\ethereum\)。
      • 依次点击“确定”保存所有设置。
    • 验证安装:打开一个新的命令提示符(CMD)或PowerShell窗口,输入 geth version,如果能看到Geth的版本信息,则表示安装成功。

初始化以太坊私有链

私有链在启动前需要进行初始化,创世区块(Genesis Block)是区块链的起点,它定义了私有链的初始参数。

  1. 创建创世区块配置文件

    • 在你喜欢的位置(C:\ethereum\node1\)创建一个新的文本文件,命名为 genesis.json
    • 用文本编辑器(如VS Code、记事本等)打开 genesis.json,并粘贴以下内容,这是一个基本的创世区块配置示例:
    {
      "config": {
        "chainId": 15,          // 私有链的ID,用于区分不同的以太坊网络,15只是一个示例,你可以自定义,不要与公有链冲突
        "homesteadBlock": 0,
        "eip150Block": 0,
        "eip155Block": 0,
        "eip158Block": 0
      },
      "alloc": {},             // 预先分配的账户,这里留空,后续手动创建
      "coinbase": "0x0000000000000000000000000000000000000000", // 矿工地址,初始为空
      "difficulty": "0x4000", // 初始难度,私有链可以设置得很低,方便挖矿
      "extraData": "",         // 附加数据,可选
      "gasLimit":
    随机配图
    "0xffffffff", // Gas限制,设置为最大值 "nonce": "0x0000000000000042", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": "0x00" }
    • 说明
      • chainId:非常重要,确保你的私有链ID与公有链(主网1,Ropsten3,Rinkeby4,Kovan42等)不同。
      • difficulty:私有链初始难度可以设置较低,如 "0x4000""0x2000",这样挖矿会更容易。
  2. 初始化节点

    • 打开命令提示符(CMD)或PowerShell,进入你创建 genesis.json 文件的目录(cd C:\ethereum\node1)。
    • 执行以下命令进行初始化:
      geth --datadir "./data" init genesis.json
      • --datadir "./data":指定区块链数据存储的目录,如果不存在会自动创建,你也可以指定其他路径。
    • 如果看到 Successfully wrote genesis configuration 等提示,表示初始化成功,此时在 data 目录下会生成 gethkeystore 等文件夹。

启动私有链节点

初始化完成后,就可以启动私有链节点了。

  1. 基本启动命令

    • 在同一个命令行窗口中,执行以下命令启动节点:
      geth --datadir "./data" console
      • --datadir "./data":指定数据目录,与初始化时保持一致。
      • console:启动后直接进入JavaScript交互控制台,方便执行命令。
    • 节点启动后,会开始尝试连接其他节点(由于是私有链, initially不会有其他节点),并开始同步(如果有预定义的创世区块,这里就是自身),你会看到类似的信息输出,包括节点ID、网络信息等。
  2. 常用启动参数(可选)

    • --networkid "666":指定网络ID,与 genesis.json 中的 chainId 可以不同,但通常建议保持一致,用于P2P网络发现,确保666这个ID未被其他网络使用。
    • --nodiscover:禁止节点自动发现其他节点,适用于完全私有的网络。
    • --maxpeers 0:限制最大连接 peer 数为0,即不与其他节点连接,纯单机模式。
    • --rpc:启用HTTP-RPC服务,允许外部应用(如MetaMask、Web3.js应用)连接。
    • --rpcaddr "0.0.0.0":允许RPC服务监听所有网络接口,默认是127.0.0.1。
    • --rpcport "8545":指定RPC服务端口,默认是8545。
    • --rpccorsdomain "*":允许跨域请求,开发时方便,生产环境请谨慎设置。
    • --mine:启用挖矿。
    • --minerthreads "1":指定挖矿使用的线程数,默认是所有可用的CPU核心。
    • --etherbase "0xYourAddress":指定挖矿奖励接收地址,需要是已创建的账户地址。

    一个更完整的启动命令(