一、环境
1. Ubuntu虚拟机4台
name | ip | role |
node1 | 192.168.92.129 | bootNode |
node2 | 192.168.92.130 | |
node3 | 192.168.92.131 | |
node4 | 192.168.92.132 |
2. 安装golang
版本为1.11或更高
因为sudo apt install golang目前安装的版本是1.10,所以需要通过手动安装,若之前已经通过apt安装了golang,则可以参考。
#下载
wget https://dl.google.com/go/go1.15.3.linux-amd64.tar.gz
#解压
sudo tar -C /usr/local -xzf go1.15.3.linux-amd64.tar.gz
#建立软连接
sudo ln -s /usr/local/go/bin/* /usr/bin/
#设置环境变量
sudo vim ~/.bashrc
在文件末尾插入下面2行,保存退出
export GOPATH="$HOME/go"
export PATH="$PATH:/usr/local/go/bin:$GOPATH/bin"
#使配置文件生效
source ~/.bashrc
测试是否安装成功
go version
查看环境变量
go env
3.安装git
sudo apt-get install git
# 查看是否安装成功
git --version
4. 安装gcc
GCC版本需要升级到4或5以上,可以先gcc --version查看是否已经安装及其版本。
sudo apt-get update
sudo apt-get install build-essential
gcc --version
二、安装XuperChain
1. 编译XuperChain
只需要在一台机器上进行编译,然后拷贝到其它机器
1.1 在node1编译
#创建一个xuper文件夹作为工作目录
mkdir ~/xuper
cd ~/xuper
#使用git下载源码到本地
git clone https://github.com/xuperchain/xuperchain.git
#编译
cd src/github.com/xuperchain/xuperchain
make
若报错:
"https://proxy.golang.org/github.com/%21burnt%21sushi/toml/@v/v0.3.1.mod": dial tcp 216.58.200.49:443: connect: connection refused
Makefile:22: recipe for target 'build-release' failed
则可以换一个国内能访问的代理地址,执行命令:
go env -w GOPROXY=https://goproxy.cn
重新执行编译。
在output目录下,主要目录有data, logs, conf, plugins等, 二进制文件有xchain,xchain-cli
各目录的功能如下表:
目录名 | 功能 |
output/ | 节点根目录 |
├─ conf | xchain.yaml: xchain服务的配置信息(注意端口冲突) plugins.conf: 插件的配置信息 |
├─ data | 数据的存放目录,创世块信息,以及共识和合约的样例 |
│ ··· ├─ blockchain | 账本目录 |
│ ··· ├─ keys | 此节点的地址,具有全局唯一性 |
│ ··· ├─ netkeys | 此节点的网络标识ID,具有全局唯一性 |
│ ··· └─ config | 包括创始的共识,初始的资源数,矿工奖励机制等 |
├─ logs | 程序日志目录 |
├─ plugins | so扩展的存放目录 |
├─ xchain | xchain服务的二进制文件 |
├─ xchain-cli | xchain客户端工具 |
└─ wasm2c | wasm工具(智能合约会用到) |
1.2 将output文件夹拷贝到其它机器
在其它机器(node2,3,4)新建目录
mkdir -p ~/xuper/xuperchain/
将node1中的output文件夹发送到其它机器
scp -r /home/shijianfeng/xuper/xuperchain/output/ shijianfeng@192.168.92.130:~/xuper/xuperchain/
scp -r /home/shijianfeng/xuper/xuperchain/output/ shijianfeng@192.168.92.131:~/xuper/xuperchain/
scp -r /home/shijianfeng/xuper/xuperchain/output/ shijianfeng@192.168.92.132:~/xuper/xuperchain/
2.部署xchain服务
2.1 创建区块链
在node1节点创建区块链
在启动xchain服务之前,我们首先需要创建一条链(创世区块),xchain客户端工具提供了此功能
cd ~/xuper/xuperchain/output/
# 创建xuper链
./xchain-cli createChain
使用 config/xuper.json 中的配置创建了一条链(此时 data/blockchain 中会生成 xuper 目录,里面即是我们创建的链的账本等文件)
启动该节点
# 启动服务节点
nohup ./xchain &
2.2 指定bootNode节点
首先需要有一个节点作为“bootNode”,其他节点启动前都配置这个“bootNode”的地址即可实现
对于bootNode节点,我们需要先获取它的netURL,具体命令如下:
./xchain-cli netURL get -H 192.168.92.129:37101
如此我们会获得一个类似于 /ip4/127.0.0.1/tcp/47101/p2p/QmVxeNubpg1ZQjQT8W5yZC9fD7ZB1ViArwvyGUB53sqf8e
样式的返回。
使用时将上述命令中的127.0.0.1
改为机器的实际ip192.168.92.129
2.3 生成其它节点的私钥与netURL
在每个节点目录中分别进行操作
cd ~/xuper/xuperchain/output/
./xchain-cli account newkeys -f
./xchain-cli netURL gen
2.4 修改其它节点的配置
对其他的节点,我们需要修改其服务配置 conf/xchain.yaml 中p2p一节
vim conf/xchain.yaml
p2p:
module: p2pv2
// port是节点p2p网络监听的默认端口
port: 47101
// 节点加入网络所连接的种子节点的链接信息,
bootNodes:
- "/ip4/192.168.92.129/tcp/47101/p2p/QmVxeNubpg1ZQjQT8W5yZC9fD7ZB1ViArwvyGUB53sqf8e"
2.5 启动其它节点
修改完配置后,即可在每一个节点使用相同配置创建链,然后分别启动bootNode和其他节点,即完成了多节点环境的部署
# 启动服务节点
nohup ./xchain &
3. 确认服务状态
可以在各个节点,另其一个命令行窗口,使用系统状态的命令检查环境是否正常
./xchain-cli status -H 192.168.92.129:37101
多次执行上面的命令,如果trunkHeigh变化,则代表区块链启动成功。
通过变更 -H 参数,查看每个节点的状态,若所有节点高度都是一致变化的,则证明环境部署成功
三、基本功能使用
1. XuperChain环境部署 — xuperchain-doc 文档
参考
1. XuperChain环境部署 — xuperchain-doc 文档
2. 多节点部署 — xuperchain-doc 文档