sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum

搭建准备

搭建以太坊私有链,第一步是创建创世区块。在创建创世区块的过程中,会生成与之对应的文件夹和文件,这些文件和文件夹是用于该创建步骤的。网络 ID 具有重要性,在连接其他节点时会被运用到。公链 ID 为 1。为避免发生冲突,在运行私有链节点时,需要明确指定属于自己的网络 ID。

geth version

sudo apt-get install -y nodejs

里程碑事件

图5 安装Nodejs的过程

sudo apt-get install npm
sudo snap install solc 

2017 年 10 月 16 日,以太坊完成了拜占庭硬分叉。这次硬分叉引入了一些功能,其中包括简洁且非交互的零知识证明,即 zk - 。硬分叉带来了重大变化,使得以太坊的功能得以健全,并且还提供了新的能力。

EIP 规则

EIP 1283 对 EVM 的指令 gas 计算方式进行了修改,这样做预计可以降低合约的 gas 消耗。在我们的私链当中,eip 被设定为“0”。之所以这样设定,是因为我们的私链不会因为这些提议而出现分叉的情况。

sudo npm install -g truffle

关键参数

mkdir blockchain
cd blockchain
mkdir consortium_blockchain
cd consortium_blockchain
vim genesis.json

Nonce 是一个 64 位的随机数,其作用在于用于挖矿。它要与其他设置一同,符合以太坊 paper 4.3.4 中“Block, (44)”章节所设定的条件。在预置账号和币量方面,因为私有链挖矿相对较为容易,所以在有需要的时候能够自行创建。

vim genesis.json

重要设置

{
  "config": {
    "chainId": 8434,
    "homesteadBlock": 1,
    "eip150Block": 2,
    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "eip155Block": 3,
    "eip158Block": 3,
    "byzantiumBlock": 4,
    "alien": {
      "period": 2,
      "epoch": 300,
      "maxSignersCount": 5,
      "minVoterBalance": 100000000000000000000,
      "genesisTimestamp": 1536136198,
      "signers": [
            "0x393faea80893ba357db03c03ee73ad3e31257469",
            "0x30d342865deef24ac6b3ec2f3f8dba5109351571",
            "0xd410f95ede1d2da66b1870ac671cc18b66a97778"
      ]
    }
  },
  "nonce": "0x0",
  "timestamp": "0x5b8f92c2",
  "extraData": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "gasLimit": "0x47b760",
  "difficulty": "0x1",
  "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "alloc": {
    "cbfc29c31a31c869f9eb59a084d9019965978a7e": {
      "balance": "0x31d450f18af132720000000"
    },
    "393faea80893ba357db03c03ee73ad3e31257469": {
      "balance": "0xd3c21bcecceda1000000"
    },
    "30d342865deef24ac6b3ec2f3f8dba5109351571": {
      "balance": "0xd3c21bcecceda1000000"
    },
    "d410f95ede1d2da66b1870ac671cc18b66a97778": {
      "balance": "0xd3c21bcecceda1000000"
    },
    "a25dc63609ea7ea999033e062f2ace42231c0b69": {
      "balance": "0xd3c21bcecceda1000000"
    }
  },
  "number": "0x0",
  "gasUsed": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

限制 GAS 消耗的总量,在私有链中填入其最大的数值。可以连接 rpc 地址,在通常情况下能够使用本机的 IP 地址。倘若指定连接的 url 为“*”,那么任何 url 都能够连接到 rpc 实例。设置网络 ID 的目的是将不同的网络区分开。

实际操作

在控制台的使用方面,它拥有以太坊对象。利用 eth 对象能够对区块链实施操作。在 geth 终端中,能够启动挖矿操作,也能够创建账户。挖矿所得的奖励通常会进入本地的第一个账户,若要改变这种情况,可以使用 miner.setEtherbase 方法来进行设置。同时,还可以发送交易来转移以太币。

你在搭建以太坊私有链的过程中遇到过哪些困难?赶紧到评论区说一说,同时也不要忘记给这篇文章点赞以及进行分享!

geth --datadir "./myblockchain" init genesis.json

图11 创建创世区块成功的标志