“区块链”这个词近几个月的社会出现频率越来越高,虽然很多人是冲着币圈去的,但是还是有很多技术宅是真正在研究区块链技术的。
今天老林就来给大家唠唠怎么搭建以太坊的私有链,小白入门级别的,大神请略过。
说明
一、为什么用到私有链?
在以太坊的共有链上部署智能合约、发起交易需要花费以太币。而通过修改配置,可以在本机搭建一套以太坊私有链,因为与公有链没关系,既不用同步公有链庞大的数据,也不用花钱购买以太币,很好地满足了智能合约开发和测试的要求,开发好的智能合约也可以很容易地切换接口部署到以太坊公有链上。
二、需要用到哪些工具?
- 以太坊客户端
以太坊客户端用于接入以太坊网络,进行账户管理、交易、挖矿、智能合约相关的操作。目前有多种语言实现的客户端,常用的有 Go 语言实现的 go-ethereum 客户端 Geth,支持接入以太坊网络并成为一个完整节点,也可作为一个 HTTP-RPC 服务器对外提供 JSON-RPC 接口。
其他的客户端有:- Parity:Rust 语言实现;
- cpp-ethereum:C++ 语言实现;
- ethereumjs-lib:JavaScript 语言实现;
- Ethereum(J):Java 语言实现;
- ethereumH:Haskell 语言实现;
- pyethapp: Python 语言实现;
- ruby-ethereum:Ruby 语言实现;
- 智能合约编译器
以太坊支持两种智能合约的编程语言:Solidity 和 Serpent。Serpent 语言面临一些安全问题,现在已经不推荐使用了。Solidity 语法类似 JavaScript,它编译器 solc 可以把智能合约源码编译成以太坊虚拟机 EVM 可以执行的二进制码。
现在以太坊提供更方便的在线 IDE —— Remix https://remix.ethereum.org 使用 Remix,免去了安装 solc 和编译过程,它可以直接提供部署合约所需的二进制码和 ABI。 - 以太坊钱包
以太坊提供了图形界面的钱包 Ethereum Wallet 和 Mist Dapp 浏览器。钱包的功能是 Mist 的一个子集,可用于管理账户和交易;Mist 在钱包基础上,还能操作智能合约。为了演示合约部署过程,本文使用了 Geth console 操作,没有用到 Mist,当然,使用 Mist 会更简单。
安装环境
这里以 Ubuntu 16.04 为例进行介绍。
一、安装以太坊客户端
两种方式可选:PPA 直接安装、源码编译安装。
-
PPA 直接安装
安装必要的工具包:1
apt install software-properties-common
添加以太坊源:
1 2
add-apt-repository -y ppa:ethereum/ethereum apt update
安装 go-ethereum:
1
apt install ethereum
安装完成后,可以使用
geth version
命令查看是否安装成功。 -
源码安装
因为 go-ethereum 使用 Go 语言编写,编译源码前需要配置好 Go 环境。配置 Go 语言环境
参照 https://golang.org/doc/install
简单地,以安装 go 1.9 为例:1 2
wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz
编辑
/etc/profile
或$HOME/.profile
,在文件最后添加环境变量:1
export PATH=$PATH:/usr/local/go/bin
编辑
$HOME/profile
或$HOME/.bashrc
,添加 go 工作目录环境变量:1
export GOPATH=$HOME/gopath
下载和编译 Geth
安装 C 编译器:1
apt install -y build-essential
下载最新源码:
1
git clone https://github.com/ethereum/go-ethereum
编译安装:
1 2
cd go-ethereum make geth
安装完成后,可以使用
geth version
命令查看是否安装成功。记得把生成的 geth 加入到系统的环境变量中。
我在这里用的是第一种方式,最后使用geth version 得到的结果是:
root@daniel-Aspire-E5-572G:/home/daniel# geth version
Geth
Version: 1.8.2-stable
Git Commit: b8b9f7f4476a30a0aaf6077daade6ae77f969960
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.9.4
Operating System: linux
GOPATH=
GOROOT=/usr/lib/go-1.9
二、安装 Solidity 编译器
Solidity 编译器也有多种方法安装,参照 http://solidity.readthedocs.io/en/latest/installing-solidity.html 这里介绍最简单快捷的安装方式:PPA 直接安装。
-
PPA 直接安装
1 2 3
add-apt-repository ppa:ethereum/ethereum apt update apt install solc
-
官方推荐使用基于浏览器的 IDE 环境:Remix https://remix.ethereum.org
私有链搭建
一、配置初始状态
要运行以太坊私有链,需要定义自己的创世区块,创世区块信息写在一个 JSON 格式的配置文件中。首先将下面的内容保存到一个 JSON 文件中,例如 genesis.json
。
{
"config": {
"chainID": 1909,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000001",
"difficulty": "0x400",
"extraData": "0x888",
"gasLimit": "0xffffffff",
"nonce": "0x1909201819092018",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
- chainID:指定了独立的区块链网络 ID。网络 ID 在连接到其他节点的时候会用到,以太坊公网的网络 ID 是 1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络 ID。