以太坊私有链搭建教程

一、搭建环境

1、Windows 7 64位 2、Ubuntu 16.04 64位

二、安装工具—— 以太坊客户端

以太坊客户端用于接入以太坊网络,进行账户管理、交易、挖矿、智能合约相关的操作。目前有多种语言实现的客户端,常用的有 Go 语言实现的 go-ethereum 客户端 Geth,支持接入以太坊网络并成为一个完整节点。 1、Windows 7环境下安装Geth客户端 下载地址:https://geth.ethereum.org/downloads/ 下载完成后,按照引导步骤安装即可。 安装时Geth会被直接添加到系统环境变量中,安装完成后,打开cmd,键入 geth version·可查看是否安装成功。
2、Ubuntu 16.04 环境下安装Geth客户端 安装必要的工具包:
sudo apt-get install software-properties-common
添加以太坊源:
add-apt-repository -y ppa:ethereum/ethereum apt-get update
安装go-ethereum:
sudo apt-get install ethereum
安装完成后,使用 geth version查看是否安装成功。
Tips: 本文直接使用 Geth 的命令控制台进行操作,所以无需再安装以太坊钱包。以太坊钱包是基于以太坊客户端开发的图形化操作工具,可以让用户更加方便的进行账户管理、交易等。常用的以太坊钱包是Ethereum Wallet 和 Mist。下载地址:https://github.com/ethereum/mist/releases

以下操作不区分系统环境,Windows 7 和 Ubuntu 16.04 下操作基本一致。

三、创建初始文件

要创建以太坊私有链,需要定义自己的创世区块,创世区块信息写在一个 JSON 格式的配置文件中。首先将下面的内容保存到一个 JSON 文件中,命名 genesis.json 。
{  
  "config": {  
    "chainID": 6666,  
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "alloc": {},
  "coinbase": "0x0000000000000000000000000000000000000000",
  "difficulty": "0x400",
  "extraData": "0x00",
  "gasLimit": "0x2fefd8",
  "nonce": "0xdeadbeefdeadbeef",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00"
}
其中,chainID 指定了独立的区块链网络 ID。网络 ID 在连接到其他节点的时候会用到,以太坊公网的网络 ID 是 1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络 ID。不同 ID 网络的节点无法相互连接。配置文件还对当前挖矿难度 difficulty、区块 Gas 消耗限制 gasLimit 等参数进行了设置。

四、初始化:写入创世区块

在系统上新建一个目录mychain,将之前创建的genesis.json保存该目录下,同时再新建一个目录mydata用以存放区块链数据。此时目录结构为:
mychain ├── mydata └── genesis.json
进入mychain目录中,执行命令:
geth --datadir mydata init genesis.json
运行上面的命令,会读取 genesis.json 文件,根据其中的内容,将创世区块写入到区块链中。如果看到以下的输出内容,说明初始化成功了。
初始化成功后,会在数据目录 mydata中生成 gethkeystore 两个文件夹。其中 geth/chaindata 中存放的是区块数据,keystore 中存放的是账户数据。

五、启动私有链

初始化完成后,就有了一条自己的私有链,之后就可以启动自己的私有链节点并做一些操作,在mychain目录下打开终端输入以下命令即可启动节点:
geth --identity "TestNode" --rpc --rpcport "8545" --datadir mydata --port "30303" --networkid 6666 --nodiscover console
  • –identity:指定节点 ID;
  • –rpc:表示开启 HTTP-RPC 服务;
  • –rpcport:指定 HTTP-RPC 服务监听端口号(默认为 8545);
  • –datadir:指定区块链数据的存储位置;
  • –port:指定和其他节点连接所用的端口号(默认为 30303);
  • –networkid: 指定私有链网络号;
  • –nodiscover:关闭节点发现机制,防止加入有同样初始配置的陌生节点。
运行上面的命令后,就启动了区块链节点并进入了该节点的控制台:
... Welcome to the Geth JavaScript console! instance: Geth/TestNode/v1.8.5-stable-cbdaa0ca/linux-amd64/go1.10.1 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
进入控制台后,可对私有链进行创建账户、交易、挖矿、部署智能合约等一系列操作。具体内容将在下一篇以太坊私有链Geth控制台操作教程中介绍。
原文地址:https://g2ex.github.io/2017/09/12/ethereum-guidance/ 本文只在此基础上做小修整,仅用以个人备忘。