ZBLOG

Ubuntu系统下搭建以太坊私链完整指南

以太坊作为领先的智能合约平台,其公链虽然功能强大,但在开发、测试和学习阶段,搭建一个本地或私有的以太坊网络(私链)往往更为便捷和高效,本文将详细介绍如何在Ubuntu操作系统上从零开始搭建一个以太坊私链,涵盖环境准备、Geth安装、创世区块配置、节点启动以及常用交互命令。

环境准备

在开始之前,确保你的Ubuntu系统已经满足以下基本条件:

  1. 操作系统:推荐使用Ubuntu 20.04 LTS或更高版本,本文以Ubuntu 20.04为例。
  2. 硬件要求:私链对硬件要求不高,普通PC即可,建议至少2GB内存,10GB以上可用磁盘空间。
  3. 网络连接:虽然私链可以离线运行,但初始安装和更新软件需要网络连接。
  4. 用户权限:建议使用具有sudo权限的用户进行操作,避免直接使用root用户。

更新系统软件包列表并安装必要的工具:

sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential curl git wget

安装Geth

Geth(Go-Ethereum)是以太坊官方的Go语言实现客户端,是最常用的以太坊节点软件之一,我们将通过二进制文件方式安装Geth,这是最简单快捷的方法。

  1. 下载Geth: 访问Geth官方发布页面:https://geth.ethereum.org/downloads/,选择适合Ubuntu系统的最新稳定版amd64二进制文件,或者使用以下命令直接下载(请替换为最新版本号):

    # 假设最新版本为1.13.6,请自行替换
    GETH_VERSION="1.13.6"
    wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.13.6-4e9e9586.tar.gz
  2. 解压并安装

    tar -xzf geth-linux-amd64-${GETH_VERSION}-4e9e9586.tar.gz
    sudo cp geth-linux-amd64-${GETH_VERSION}-4e9e9586/geth /usr/local/bin/
  3. 验证安装

    geth version

    如果看到Geth的版本信息,则表示安装成功。

创建创世区块文件

每个以太坊网络都有一个创世区块(Genesis Block),它是区块链的起点,私链需要自定义创世区块配置。

  1. 创建创世配置文件: 在你的用户目录下创建一个名为ethereum的文件夹,并在其中创建一个genesis.json文件:

    mkdir -p ~/ethereum
    cd ~/ethereum
    nano genesis.json
  2. 编辑创世配置文件: 在genesis.json文件中输入以下内容(这是一个基本的私链创世配置示例):

    {
      "config": {
        "chainId": 15,          // 私链的ID,必须是唯一的,避免与公链和其他私链冲突
        "homesteadBlock": 0,
        "eip150Block": 0,
        "eip155Block": 0,
        "eip158Block": 0
      },
      "alloc": {},             // 预分配的账户,这里留空,后续手动创建
      "coinbase": "0x0000000000000000000000000000000000000000",
      "difficulty": "0x4000",  // 初始难度,私链可以设置得很低以便快速挖矿
      "extraData": "",
      "gasLimit": "0xffffffff",
      "nonce": "0x0000000000000042",
      "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "timestamp": "0x00"
    }
    • chainId:非常重要,确保你的私链ID是唯一的。
    • difficulty:初始难度值越低,挖出区块越容易。

    保存并退出nano编辑器(Ctrl+X,然后Y,回车)。

初始化创世区块

使用Geth的init命令,使用我们刚创建的genesis.json文件来初始化数据目录。

  1. 创建数据目录(可选,Geth会自动创建):

    mkdir -p ~/ethereum/data
  2. 初始化

    geth --datadir ~/ethereum/data init ~/ethereum/genesis.json

    如果看到Successfully initialised new Ethereum-style chain.的输出,表示创世区块已成功初始化,在~/ethereum/data目录下会生成gethkeystore等文件夹。

启动私链节点

现在可以启动我们的私链节点了。

  1. 基本启动命令

    geth --datadir ~/ethereum/data console
    • --datadir:指定数据目录。
    • console:启动JavaScript交互控制台,方便后续操作。

    启动后,你会看到类似Geth版本、节点信息、网络信息等的日志输出,节点会开始监听RPC端口(默认8545)和P2P端口(默认30303)。

  2. 常用启动参数

    • --networkid:指定网络ID,应与genesis.json中的chainId一致。
    • --nodiscover:禁止节点自动发现其他节点,适用于私链,避免连接到公链。
    • --maxpeers 0:限制最大连接节点数为0,即完全独立运行,不与其他节点连接(纯私链场景)。
    • --rpc:启用HTTP-RPC服务。
    • --rpcaddr "0.0.0.0":允许任何IP连接RPC服务(默认只允许本地连接)。
    • --rpcport "8545":指定RPC端口。
    • --rpccorsdomain "*": 允许所有来源的CORS请求(开发时方便,生产环境需谨慎)。
    • --mine:启用挖矿。
    • --minerthreads 1:指定挖矿线程数。
    • --etherbase "0xYourAccountAddress":指定挖矿收益账户地址(需要先创建账户)。

    一个更完整的启动命令(包含RPC和挖矿):

    geth --datadir ~/ethereum/data --networkid 15 --nodiscover --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain "*" --mine --minerthreads 1 console

私链常用交互命令

启动console后,你可以使用JavaScript API与私链进行交互。

  1. 查看账户信息

    // 查看所有账户
    eth.accounts
    // 查看当前默认账户(coinbase)
    eth.coinbase
  2. 创建新账户

    // 会提示输入密码,请妥善保存
    personal.newAccount("your_password")
    // 创建后,可以用 eth.accounts[0] 等方式访问
  3. 解锁账户(在进行交易或挖矿前可能需要):

    personal.unlockAccount(eth.accounts[0], "your_password")
  4. 开始/停止挖矿

    // 开始挖矿
    miner.start(1) // 1是线程数
    // 停止挖矿
    miner.stop()
  5. 查看余额

    // 查看第一个账户的余额,单位是Wei
    eth.getBalance(eth.accounts[0])
    // 转换为Ether
    eth.getBalance(eth.accounts[0]) / 1e18
  6. 转账(发送交易): 假设我们要从eth.accounts[0]eth.accounts[1]转账1个Ether。

    // 首先确保账户0有足够余额且已解锁
    personal.unlockAccount(eth.accounts[0], "your_password")
    // 发送交易
    eth.sendTransaction({
      from: eth.accounts[0],
      to: eth.accounts[1],
      value: web3.toWei(
分享:
扫描分享到社交APP