以太坊搭建私有链和部署智能合约
文章目录
1. 实验环境
VMWare虚拟机 + CentOs 7 + Golang
2. 以太坊安装
2.1 安装相关组件
为了避免后续安装过程出错,这里提前安装一些需要用到的组件和依赖。如果不确定之前有没有安装过这些组件也没关系,检测到安装就不会重复安装。-y表示安装过程中弹出的问题一律回答yes。
yum update -y && yum install git wget bzip2 vim gcc-c++ ntp epel-release nodejs cmake -y
- 相关组件的作用
组件 | 作用 |
---|---|
git | 版本管理工具,用于后面从github克隆geth |
wget | Linux命令行的下载工具,用于后面下载cmake |
bzip2 | 无损压缩软件 |
vim | 编辑工具,用于后面编辑一些环境配置文件 |
gcc-c++ | c/c++编译工具,用于后面geth的编译 |
ntp | 网络时钟同步组件 |
nodejs | 用于前端js开发的包管理软件 |
epel | 网络第三方的linux安装包源 |
2.2 安装及配置Golang环境
- 我的虚拟机之前已经装过Golang环境,因此这里不再重现和赘述。
- 贴一篇我当时配golang环境时写的博客:golang开发环境配置
2.3 克隆并编译geth
- 从github上clone下来go-ethereum(简称geth)
git clone https://github.com/ethereum/go-ethereum.git
- 进入geth根目录并编译
cd go-ethereum && make all
- 配置环境变量
# 打开环境配置文件
vim ~/.profile
# 新增path
export PATH=$PATH:$GOPATH/bin:$HOME/go-ethereum/build/bin
# 让更改生效
source ~/.profile
- 验证是否配置成功
在终端输入geth -h有一堆帮助信息出来即可
2.4 安装及配置cmake环境
智能合约编译需要cmake,之前yum install cmake的版本只有2.8不够,这里需要去官网下载其独立安装包。这里我用的是最新版本3.12.3。
- 下载到用户根目录$HOME
cd && wget https://cmake.org/files/v3.12/cmake-3.12.3.tar.gz
- 解压
tar -xzvf cmake-3.12.3.tar.gz
- 进入cmake根目录并编译安装
cd cmake-3.12.3
./bootstrap && make && make install
- 配置环境变量
# 打开环境配置文件
vim ~/.profile
# 新增path
export PATH=$PATH:$GOPATH/bin:$HOME/go-ethereum/build/bin:$HOME/cmake/bin
# 让更改生效
source ~/.profile
- 验证是否配置成功
在终端输入cmake -h或cmake -version有一堆帮助信息出来或者有版本信息出来均可
2.5 防火墙
因为之前在配置golang私有云桌面的时候把防火墙关闭了,我在这里就不需要考虑。
- 你可以选择关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- 也可以只添加防火墙规则,允许某几个geth使用一些默认端口。
firewall-cmd --zone=public --add-port=8087/tcp --permanent
firewall-cmd --zone=public --add-port=30303/tcp --permanent
- mark一下:启用防火墙的命令
systemctl enable firewalld
systemctl start firewalld
2.6 时钟同步
因为区块链需要同步网络时间,所以需要启用网络时间同步
systemctl enable ntpd
systemctl start ntpd
3. 私有链创世区块搭建
- 编写创世区块的配置文件genesis.json。里面可以设置一些挖矿难度,默认的挖矿账户和最大手续费等。
{
"nonce": "0x0000000000000042",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0x80000000",
"difficulty": "0x400",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x2D356ee3F5b8718d8690AFCD31Fe2CB5E602677e",
"alloc": {
},
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
}
}
- 初始化创世区块节点信息
geth --datadir node0 init genesis.json
- 得到如下信息,说明初始化成功
- 执行geth的控制台,将输出重定向到geth.log中
geth --datadir node0 console 2>> geth.log
- 一些基本的操作
- 新建账户、查看账户及账户余额
- 查看挖矿的账户、当前区块数等
- 新建账户、查看账户及账户余额