搭链
1.搭链流程(使用Ubuntu系统)
利用build_chain.sh脚本快速搭链
步骤一:安装依赖
安装ubuntu依赖
sudo apt install -y curl openssl wget
步骤二:安装搭链脚本
# 下载建链脚本
curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v3.6.0/build_chain.sh
# 并赋予权限
chmod u+x build_chain.sh
#备用节点
https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/releases/v3.6.0/build_chain.sh
步骤三:搭建非国密联盟链
例如执行下面的指令,生成一条单群组4节点的FISCO链
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200
在输出All completed时代表成功,进行下一步
步骤四:FISCO BCOS,启动!
启动所有节点
bash nodes/127.0.0.1/start_all.sh
如出现以下代码则表示成功
node3 start successfully pid=36430
node2 start successfully pid=36427
node1 start successfully pid=36433
node0 start successfully pid=36428
*若失败则检查20200与30300端口是否被占用
步骤五:检查节点进程
检查进程是否启动
ps aux |grep -v grep |grep fisco-bcos
如出现以下代码则表示成功
fisco 35249 7.1 0.2 5170924 57584 s003 S 2:25下午 0:31.63 /home/fisco/nodes/127.0.0.1/node1/../fisco-bcos -c config.ini -g config.genesis
fisco 35218 6.8 0.2 5301996 57708 s003 S 2:25下午 0:31.78 /home/fisco/nodes/127.0.0.1/node0/../fisco-bcos -c config.ini -g config.genesis
fisco 35277 6.7 0.2 5301996 57660 s003 S 2:25下午 0:31.85 /home/fisco/nodes/127.0.0.1/node2/../fisco-bcos -c config.ini -g config.genesis
fisco 35307 6.6 0.2 5301996 57568 s003 S 2:25下午 0:31.93 /home/fisco/nodes//127.0.0.1/node3/../fisco-bcos -c config.ini -g config.genesis
*若进程数不为4为失败,同样检查端口是否被占用。
步骤六:检查日志输出
查看每个节点的网络连接数目(以node0为例)
tail -f nodes/127.0.0.1/node0/log/* |grep -i "heartBeat,connected count"
正常情况下会每间隔10秒输出连接信息,从输出日志可看出node0与另外3个节点均有连接,网络连接正常,如下图。
info|2022-08-15 19:38:59.270112|[P2PService][Service][METRIC]heartBeat,connected count=3
info|2022-08-15 19:39:09.270210|[P2PService][Service][METRIC]heartBeat,connected count=3
info|2022-08-15 19:39:19.270335|[P2PService][Service][METRIC]heartBeat,connected count=3
info|2022-08-15 19:39:29.270427|[P2PService][Service][METRIC]heartBeat,connected count=3
2.配置控制台
控制台提供了向FISCO BCOS节点部署合约、发起合约调用、查询链状态等功能。
步骤一:安装java环境
# ubuntu系统安装java
sudo apt install -y default-jdk
步骤二:安装控制台
cd ~/fisco && curl -LO https://github.com/FISCO-BCOS/console/releases/download/v3.6.0/download_console.sh && bash download_console.sh
#备用
cd ~/fisco && curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master/tools/download_console.sh && bash download_console.sh
步骤三:配置
拷贝控制台配置文件
cp -n console/conf/config-example.toml console/conf/config.toml
#若节点未采用默认端口,请将文件中的20200替换成节点对应的rpc端口,可通过节点config.ini的 ``[rpc].listen_port``配置项获取节点的rpc端口。
配置控制台证书
控制台与节点之间默认开启SSL连接,控制台需要配置证书才可连接节点。开发建链脚本在生成节点的同时,生成了SDK证书,可直接拷贝生成的证书供控制台使用。
cp -r nodes/127.0.0.1/sdk/* console/conf
步骤四:启动并使用控制台
启动!
cd ~/fisco/console && bash start.sh
输出FISCO BCOS时成功,否则请检查conf/config.toml中节点端口配置是否正确。
用控制台获取信息
# 获取节点列表信息
[group0]: /> getGroupPeers
peer0: 48fde62f1d2dc59a65bed2e3bb9bd199de26de6b9894e2201199726d6e9e98d090bb1d7e22c931b412728a832ffacdd2727b34fc808f5a755af6bc623c44aba6
peer1: 8e510d66644a8a6caa7e031f097f604501bc42a3851b817f65a18eede0c539f2d011349d470da74cb84a3cf88dbd64a4cc18369fa09b17dac4eec9f65975ecc2
peer2: 9d7ff3f0d3abd54054a99d17a6af27c839f8f7702a4335bdb502323c87a0d7978534a2479cfedb614e1548a869efe038fc49da442b5770aa52c0cc793ca13602
peer3: f0ffa45cee35dcc1bcf1e1ef7b7c3d96590c25ba75198a28ef5ceb89dc6bec310619cb6850231018c8d5a5d698eaf1e5669118e17ea79379211bd332896aa56a
# 获取共识节点列表信息
[group0]: /> getSealerList
[
Sealer{
nodeID='9d7ff3f0d3abd54054a99d17a6af27c839f8f7702a4335bdb502323c87a0d7978534a2479cfedb614e1548a869efe038fc49da442b5770aa52c0cc793ca13602',
weight=1
},
Sealer{
nodeID='f0ffa45cee35dcc1bcf1e1ef7b7c3d96590c25ba75198a28ef5ceb89dc6bec310619cb6850231018c8d5a5d698eaf1e5669118e17ea79379211bd332896aa56a',
weight=1
},
Sealer{
nodeID='8e510d66644a8a6caa7e031f097f604501bc42a3851b817f65a18eede0c539f2d011349d470da74cb84a3cf88dbd64a4cc18369fa09b17dac4eec9f65975ecc2',
weight=1
},
Sealer{
nodeID='48fde62f1d2dc59a65bed2e3bb9bd199de26de6b9894e2201199726d6e9e98d090bb1d7e22c931b412728a832ffacdd2727b34fc808f5a755af6bc623c44aba6',
weight=1
}
]
3.部署和调用合约
步骤一:编写HelloWorld合约
HelloWorld合约提供了两个接口get()
和set()
,用于获取/设置合约变量name
,合约内容如下:
pragma solidity >=0.6.10 <0.8.20;
contract HelloWorld {
string name;
constructor() public {
name = "Hello, World!";
}
function get() public view returns (string memory) {
return name;
}
function set(string memory n) public {
name = n;
}
}
步骤二: 部署HelloWorld合约
为了方便用户快速体验,HelloWorld合约已经内置于控制台中,位于控制台目录contracts/solidity/HelloWorld.sol
,参考下面命令部署
# 在控制台输入以下指令 部署成功则返回合约地址
[group0]: /> deploy HelloWorld
transaction hash: 0x796b573aece250bba891b9251b8fb464d22f41cb36e7cae407b2bd0a870f5b72
contract address: 0x6849F21D1E455e9f0712b1e99Fa4FCD23758E8F1
currentAccount: 0x7b047472a4516e9697446576f8c7fcc064f967fa
# 查看当前块高
[group0]: /> getBlockNumber
1
步骤三:调用HelloWorld合约
# 调用get接口获取name变量,此处的合约地址是deploy指令返回的地址
[group0]: /> call HelloWorld 0x6849F21D1E455e9f0712b1e99Fa4FCD23758E8F1 get
---------------------------------------------------------------------------------------------
Return code: 0
description: transaction executed successfully
Return message: Success
---------------------------------------------------------------------------------------------
Return value size:1
Return types: (string)
Return values:(Hello, World!)
---------------------------------------------------------------------------------------------
# 查看当前块高,块高不变,因为get接口不更改账本状态
[group0]: /> getBlockNumber
1
# 调用set方法设置name
[group0]: /> call HelloWorld 0x6849F21D1E455e9f0712b1e99Fa4FCD23758E8F1 set "Hello, FISCO BCOS"
transaction hash: 0x2f7c85c2c59a76ccaad85d95b09497ad05ca7983c5ec79c8f9d102d1c8dddc30
---------------------------------------------------------------------------------------------
transaction status: 0
description: transaction executed successfully
---------------------------------------------------------------------------------------------
Receipt message: Success
Return message: Success
Return value size:0
Return types: ()
Return values:()
---------------------------------------------------------------------------------------------
Event logs
Event: {}
# 查看当前块高,因为set接口修改了账本状态,块高增加到2
[group0]: /> getBlockNumber
2
# 退出控制台
[group0]: /> exit
完结!
*bulid_chain.sh 脚本工具
FISCO BCOS提供了bulid_chain.sh脚本帮助用户快速搭建FISCO BCOS联盟链。
bulid_chain.sh脚本用于快速生成一条链中节点的配置文件。
已学习使用选项
-P
指定节点P2P和RPC服务的监听的起始端口,P2P服务默认以30300为起始端口,RPC服务默认以20200为起始端口。
# 两个节点的P2P服务分别占用30300和30301端口
# RPC服务分别占用20200和20201端口
$ bash build_chain.sh -p 30300,20200 -l 127.0.0.1:2
-l
生成节点的IP与对应IP上部署的区块链节点数目,参数格式为
ip1:nodeNum1, ip2:nodeNum2
。
-c
脚本的命令,支持
deploy
与expand
,默认为deploy
:
-
deploy
: 用于部署新节点。 -
expand
用于节点扩容。
-h
查看脚本使用用法。
节点配置文件组织结构
生成的节点配置主要如下:
-
根证书和根证书私钥: 位于指定的配置生成目录的
ca
文件夹。 -
节点连接证书: 每个节点
conf
目录下均存放节点的网络连接证书,非国密节点证书和私钥主要包括ca.crt, ssl.crt, sslkey
,国密节点证书和私钥主要包括sm_ca.crt, sm_ssl.crt, sm_enssl.crt, sm_enssl.key, sm_ssl.key
。 -
节点签名私钥: 节点
conf
目录下的node.pem
,主要位于共识模块的签名。 -
SDK连接证书: 由
build_chain.sh
生成,客户端可拷贝该证书与节点建立SSL连接。 -
节点配置文件: 节点目录下的
config.ini
和config.genesis
配置,前者主要配置链信息,后者主要配置创世块。 -
启停脚本:
start.sh
和stop.sh
,用于启动和停止节点。 -
启停监控脚本:
monitor/start_monitor.sh
和monitor/stop_monitor.sh
,用于启动和停止节点监控。
列表如下
nodes/ ├── monitor │ ├── grafana # grafana配置文件 │ ├── prometheus # prometheus配置文件 │ ├── start_monitor.sh # 启动脚本,用于开启监控 │ ├── stop_monitor.sh # 停止脚本,用于停止监控 │ ├── compose.yaml # docker-compose配置文件 ├── 127.0.0.1 │ ├── fisco-bcos # 二进制程序 │ ├── mtail # 二进制程序 │ ├── node0 # 节点0文件夹 │ │ ├── mtail # mtail配置文件夹 │ │ │ ├── start_mtail_monitor.sh # 启动脚本,用于启动该节点mtail程序 │ │ │ ├── stop_mtail_monitor.sh # 停止脚本,用于停止该节点mtail程序 │ │ │ ├── node.mtail # mtail配置文件 │ │ ├── conf # 配置文件夹 │ │ │ ├── ca.crt # 链根证书 │ │ │ ├── cert.cnf │ │ │ ├── ssl.crt # ssl证书 │ │ │ ├── ssl.key # ssl连接证书私钥 │ │ │ ├── node.pem # 节点签名私钥文件 │ │ │ ├── node.nodeid # 节点id,公钥的16进制表示 │ │ ├── config.ini # 节点主配置文件,配置监听IP、端口、证书、日志等 │ │ ├── config.genesis # 创世配置文件,共识算法类型、共识超时时间和交易gas限制等 │ │ ├── nodes.json # 节点json信息,展示节点的ip和端口,示例:{"nodes": [127.0.0.1:30300]} │ │ ├── start.sh # 启动脚本,用于启动节点 │ │ └── stop.sh # 停止脚本,用于停止节点 │ ├── node1 # 节点1文件夹 │ │..... │ ├── node2 # 节点2文件夹 │ │..... │ ├── node3 # 节点3文件夹 │ │..... │ ├── sdk # SDK证书 │ │ ├── ca.crt # SSL连接根证书 │ │ ├── cert.cnf # 证书配置 │ │ ├── sdk.crt # SDK根证书 │ │ ├── sdk.key # SDK证书私钥 │ ├── start_all.sh # 启动脚本,用于启动所有节点 │ ├── stop_all.sh # 停止脚本,用于停止所有节点
容易遇到的问题
在下载脚本时,如果网络不好会报错或者下载乱码/空文档,可以换下载源或者开加速器解决。
4.WeBASE-Front搭建
步骤一:配置Java环境(jdk1.8)
解压到 /usr/local 下
改名 jdk1.8
如下配置 profile 文件
export JAVA_HOME=/usr/local/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
步骤二:准备工作
(1)下载安装包
wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.5.5/webase-front.zip
(2)解压
unzip webase-front.zip
cd webase-front
(3)拷贝sdk证书文件(build_chain的时候生成的)
将节点所在目录nodes/${ip}/sdk
下的所有文件拷贝到当前conf
目录,供SDK与节点建立连接时使用(SDK会自动判断是否为国密,且是否使用国密SSL)
- 链的
sdk
目录包含了ca.crt, sdk.crt, sdk.key
和gm
文件夹,gm
文件夹包含了国密SSL所需的证书 - 拷贝命令可使用
cp -r nodes/${ip}/sdk/* ./conf/
- 注,只有在建链时手动指定了
-G
(大写)时节点才会使用国密SSL步骤三:启动!
服务启停命令如下
启动: bash start.sh
停止: bash stop.sh
检查: bash status.sh
启动成功将出现如下日志
Application() - main run success...
步骤四:状态检查
成功部署后,可以根据以下步骤确认各个子服务是否启动成功
(1)检查各子系统进程
通过ps
命令,检查节点与节点前置的进程是否存在
- 包含:节点进程
nodeXX
,节点前置进程webase.front
检查方法如下,若无输出,则代表进程未启动,需要到webase-front/log
中查看日志的错误信息,并根据错误提示或根据WeBASE-Front常见问题进行错误排查
检查节点进程
$ ps -ef | grep node
输出如下,此处部署了两个节点node0, node1
root 29977 1 1 17:24 pts/2 00:02:20 /root/fisco/webase/webase-deploy/nodes/127.0.0.1/node1/../fisco-bcos -c config.ini
root 29979 1 1 17:24 pts/2 00:02:23 /root/fisco/webase/webase-deploy/nodes/127.0.0.1/node0/../fisco-bcos -c config.ini
检查节点前置webase-front的进程
$ ps -ef | grep webase.front
输出如下
root 31805 1 0 17:24 pts/2 00:01:30 /usr/local/jdk/bin/java -Djdk.tls.namedGroups=secp256k1 ... conf/:apps/*:lib/* com.webank.webase.front.Application
(2)检查进程端口
通过netstat
命令,检查节点与节点前置的端口监听情况
检查方法如下,若无输出,则代表进程端口监听异常,需要到webase-front/log
中查看日志的错误信息,并根据错误提示或根据WeBASE-Front常见问题进行错误排查
检查节点channel端口(默认为20200)是否已监听
$ netstat -anlp | grep 20200
输出如下
tcp 0 0 0.0.0.0:20200 0.0.0.0:* LISTEN 29069/fisco-bcos
检查webase-front端口(默认为5002)是否已监听
$ netstat -anlp | grep 5002
输出如下
tcp6 0 0 :::5002 :::* LISTEN 2909/java
步骤五:访问
访问 http://{deployIP}:{frontPort}/WeBASE-Front,示例
http://localhost:5002/WeBASE-Front
开放节点前置端口:如果希望通过浏览器(Chrome Safari或Firefox)直接访问webase-front节点前置的页面,则需要开放节点前置端口frontPort
(默认5002)
容易遇到的问题
============== Starting WeBASE-Front ==============
==============WeBASE-Front start fail. Please check through the log file (default path: ./webase-front/log/). ==============
============== Starting WeBASE ==============
==============WeBASE-Node-Manager start fail. Please check through the log file (default path: ./webase.deploy/log/). ==============
=======================================================
Server com.webank.webase.front.Application Port 5002.....................[Failed]. Please check message through the log file (default path:./log/)
=======================================================
————————————————
原因为5000端口未开放
解决如下
sudo apt-get install iptables
安装相应持续化规则扩展包,安装iptables-persistent后 开放端口需要root权限
sudo apt-get install iptables-persistent
开放端口5000,5002
sudo iptables -I INPUT -p tcp --dport 5000 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 5002 -j ACCEPT
扩容节点
1.下载证书脚本
(在nodes/127.0.0.1下运行)
curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master-2.0/tools/gen_node_cert.sh
DLC-星型多群组部署
- 打开build_chain.sh可以修改默认共识算法和过期天数
- 多群组搭建可以通过复制BcosBuilder/pro/conf中的build-toml,按要求修改配置并重命名为config.toml。随后用-c指定配置文件。
- Init_auth_address=””获取:
curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/tools/get_gm_account.sh && chmod u+x get_gm_account.sh && bash get_gm_account.sh
在执行之后有以下输出,使用的
init_auth_address
就是使用下面的Account Address
[INFO] Account Address : 0xd5eff0641c2f69a8deed9510e374aa3e94066a66 [INFO] Private Key (pem) : accounts/0xd5eff0641c2f69a8deed9510e374aa3e94066a66.pem [INFO] Public Key (pem) : accounts/0xd5eff0641c2f69a8deed9510e374aa3e94066a66.pem.pub