我这里使用4台虚拟机来模拟实际网络,在这四台虚拟机里分别搭建了quorum节点。
我这里使用quorum maker 工具来搭建quorum
quorum maker 是一个带UI界面的自动化搭建quorum的工具。
git clone https://github.com/synechron-finlabs/quorum-maker.git
附上Github地址里面自带了英文版的安装使用指南
https://github.com/synechron-finlabs/quorum-maker/wiki
拷贝完后,还需要安装docker
脚本我已经写好了,这个脚本实现自动安装docker容器
#! /bin/bash
sudo apt-get purge libappstream3 -y
sudo apt-get update
echo 更新软件列表成功
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common lrzsz -y
echo 安装CURL成功
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
echo 添加阿里云地址成功
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
echo 添加阿里云地址成功X
sudo apt-get update
echo 二次更新软件列表成功
sudo apt-get install docker-ce -y
echo 安装docker容器成功
sudo groupadd docker
echo 创建docker容器用户组成功
sudo gpasswd -a $(whoami) docker
echo 添加用户到用户组
newgrp docker
echo 更新docker用户组
sudo service docker restart
echo 重启docker
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
echo 添加加速器链接
docker version
sudo systemctl restart docker
echo 重启DOcker服务
sudo apt install docker-compose -y
我这里用的是node+web3来编译部署合约,当然也可以用truffle框架,不过我个人不喜欢用truffle框架。
这里附上我另一篇文章nodejs+npm+web3+solc环境搭建。
当然这个quorum maker里面集成了自动部署合约的功能。在他的右上角有一个自动部署合约的按钮。
上面拷贝好代码后我们进入目录并且运行初始化脚本
cd quorum-maker && ./setup.sh
第一次运行脚本还需要下载docker镜像,它会自动识别并且拉取所需镜像,等待镜像下载完毕后重新执行./setup.sh即可。
docker镜像里面包含了quorum环境。
再次运行 ./setup.sh
出现了一个漂亮的界面。
我们在第一台虚拟机上执行创建网络
下面我们切换到其他虚拟机上
这时候他会像第一台主机请求连接
我们切换到第一台主机视角进入浏览器输入 http://localhost:22004/dashboard 进入当前节点UI管理界面
右上角出现了节点加入请求,我们点开它就可以了、如果这时候没有显示就刷新下页面。如果还是没有就检查是否填错了信息
quorum maker 还提供了白名单功能。需要连接的节点我们可以提前将那个节点的IP加入白名单。当那个节点连接的时候就无须验证自动加入网络。
这是quorum maker提供的API 。更多接口可以在他的github上找到。
https://github.com/synechron-finlabs/quorum-maker/wiki
我这里是通过nodejs来调用/updateWhitelist的post请求的
之前调用的时候不知道IP需要以什么格式加入白名单。最终搞懂了是以 ["需要加入的IP地址"] 对象格式发送post请求来加入白名单。这个点在官方的github上都没写,浪费了我一个上午的时间来尝试.
现在附上代码
var request = require('request');
var url="http://localhost:22004/updateWhitelist";
var requestData=["192.168.1.141"]
httprequest(url,requestData);
function httprequest(url,data){
request({
url: url,
method: "POST",
json: true,
headers: {
"content-type": "application/json",
},
body: requestData
}, function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // 请求成功的处理逻辑
}
});
};
如果想一次性加入多个IP到白名单的话加个逗号即可
["192.168.1.1",“192.168.1.22”]
加入白名单后需要连接之后才能被激活。如果不连接不停地更新白名单的话,之后加的IP会覆盖掉前面的。
除非一次性写入