FISCO BCOS从零实战(详细)(一)
一:简介说明
1.1项目架构
参考链接: FISCO BCOS 技术文档-版本和兼容性 FISCO BCOS 3.x
接入层:接入层主要负责区块链连接的能力,包括提供P2P能力的“对外网关服务”和提供给SDK访问的“对内网关服务”。在联盟链的体系中,“对外网关服务”管理了机构对外连接的出入口,负责机构级别的安全认证。“对内网关服务”则提供给机构内的客户端(应用端)访问入口。两个网关服务都可以平行扩展、多活部署、负载均衡,满足高可用要求。
调度层:调度层是区块链内核运转调度的“大脑中枢”系统,负责整个区块链系统运行调度,包括网络分发调度、交易池管理、共识机制、计算调度等模块。其中,网络分发模块主要是与接入层实现互联通信功能,处理消息分发逻辑;交易池管理主要负责交易的接收、签名验证、淘汰等功能;共识机制负责交易排序、区块打包以及对区块结果进行分布式共识,确保一致性;计算调度则完成交易验证(核心是智能合约的验证)的调度处理,实现并行验证,是整个系统吞吐量的关键。
计算层:这里主要负责交易验证,需要将交易解码放入合约虚拟机中执行,得到交易执行结果。交易验证是整个区块链的核心,尤其是基于智能合约的区块链系统,交易验证的计算可能需要花费较大的CPU开销。因此,如何实现并行化交易验证,通过集群化模式实现交易验证计算的平行扩展是非常重要的。
存储层:存储层负责落盘存储交易、区块、账本状态等数据,存储层重点关注如何支撑海量数据的存储,采用分布式存储集群的方式可实现存储容量可扩展。分布式存储业界已有许多稳定可复用的开源组件(如TiKV),这层将复用成熟组件。
管理层:管理层是为整个区块链系统各模块实现可视化管理的平台,包括部署、配置、日志、网络路由等管理功能。FISCO BCOS 3.0系统架构基于开源微服务框架Tars构建,这层的能力复用成熟的Tars-Framwork管理组件。
1.2版本信息
| 硬件推荐配置 |
---|
CPU | 2.4GHz * 8核 | 内存 | 8GB | 存储 | 4TB | 网络带宽 | 10Mb |
本文使用硬件 CPU: Intel? CoreTMI7-10875H CPU @ 2.30GHz * 8核 内存 : 虚拟机8GB 存储 : 虚拟机100GB
本文使用软件系统
FISCO-BCOS v3.0.1 | 推荐版本 | 最低版本 | 说明 |
---|
Console | 3.0.1 | 3.0.0 | | Java SDK | 3.0.1 | 3.0.0 | | CPP SDK | 3.0.0 | 3.0.0 | | Solidity | 0.8.11 | 最低 0.4.25,最高 0.8.11 | 需根据合约版本下载编译器(控制台) | WBC-Liquid | 1.0.0-rc3 | 1.0.0-rc3 | |
二:快速搭建
参考链接: 搭建第一个区块链网络 搭建Air版本FISCO BCOS联盟链
安装centos依赖
sudo yum install -y curl openssl openssl-devel wget
输出结果:
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
软件包 wget-1.14-18.el7_6.1.x86_64 已安装并且是最新版本
正在解决依赖关系
--> 正在检查事务
---> 软件包 curl.x86_64.0.7.29.0-59.el7 将被 升级
---> 软件包 curl.x86_64.0.7.29.0-59.el7_9.1 将被 更新
--> 正在处理依赖关系 libcurl = 7.29.0-59.el7_9.1,它被软件包 curl-7.29.0-59.el7_9.1.x86_64 需要
---> 软件包 openssl.x86_64.1.1.0.2k-19.el7 将被 升级
---> 软件包 openssl.x86_64.1.1.0.2k-25.el7_9 将被 更新
--> 正在处理依赖关系 openssl-libs(x86-64) = 1:1.0.2k-25.el7_9,它被软件包 1:openssl-1.0.2k-25.el7_9.x86_64 需要
---> 软件包 openssl-devel.x86_64.1.1.0.2k-25.el7_9 将被 安装
--> 正在处理依赖关系 zlib-devel(x86-64),它被软件包 1:openssl-devel-1.0.2k-25.el7_9.x86_64 需要
--> 正在处理依赖关系 krb5-devel(x86-64),它被软件包 1:openssl-devel-1.0.2k-25.el7_9.x86_64 需要
--> 正在检查事务
---> 软件包 krb5-devel.x86_64.0.1.15.1-54.el7_9 将被 安装
--> 正在处理依赖关系 libkadm5(x86-64) = 1.15.1-54.el7_9,它被软件包 krb5-devel-1.15.1-54.el7_9.x86_64 需要
--> 正在处理依赖关系 krb5-libs(x86-64) = 1.15.1-54.el7_9,它被软件包 krb5-devel-1.15.1-54.el7_9.x86_64 需要
--> 正在处理依赖关系 libverto-devel,它被软件包 krb5-devel-1.15.1-54.el7_9.x86_64 需要
--> 正在处理依赖关系 libselinux-devel,它被软件包 krb5-devel-1.15.1-54.el7_9.x86_64 需要
--> 正在处理依赖关系 libcom_err-devel,它被软件包 krb5-devel-1.15.1-54.el7_9.x86_64 需要
--> 正在处理依赖关系 keyutils-libs-devel,它被软件包 krb5-devel-1.15.1-54.el7_9.x86_64 需要
---> 软件包 libcurl.x86_64.0.7.29.0-59.el7 将被 升级
---> 软件包 libcurl.x86_64.0.7.29.0-59.el7_9.1 将被 更新
---> 软件包 openssl-libs.x86_64.1.1.0.2k-19.el7 将被 升级
---> 软件包 openssl-libs.x86_64.1.1.0.2k-25.el7_9 将被 更新
---> 软件包 zlib-devel.x86_64.0.1.2.7-20.el7_9 将被 安装
--> 正在处理依赖关系 zlib = 1.2.7-20.el7_9,它被软件包 zlib-devel-1.2.7-20.el7_9.x86_64 需要
--> 正在检查事务
---> 软件包 keyutils-libs-devel.x86_64.0.1.5.8-3.el7 将被 安装
---> 软件包 krb5-libs.x86_64.0.1.15.1-50.el7 将被 升级
--> 正在处理依赖关系 krb5-libs(x86-64) = 1.15.1-50.el7,它被软件包 krb5-workstation-1.15.1-50.el7.x86_64 需要
---> 软件包 krb5-libs.x86_64.0.1.15.1-54.el7_9 将被 更新
---> 软件包 libcom_err-devel.x86_64.0.1.42.9-19.el7 将被 安装
---> 软件包 libkadm5.x86_64.0.1.15.1-50.el7 将被 升级
---> 软件包 libkadm5.x86_64.0.1.15.1-54.el7_9 将被 更新
---> 软件包 libselinux-devel.x86_64.0.2.5-15.el7 将被 安装
--> 正在处理依赖关系 libsepol-devel(x86-64) >= 2.5-10,它被软件包 libselinux-devel-2.5-15.el7.x86_64 需要
--> 正在处理依赖关系 pkgconfig(libsepol),它被软件包 libselinux-devel-2.5-15.el7.x86_64 需要
--> 正在处理依赖关系 pkgconfig(libpcre),它被软件包 libselinux-devel-2.5-15.el7.x86_64 需要
---> 软件包 libverto-devel.x86_64.0.0.2.5-4.el7 将被 安装
---> 软件包 zlib.x86_64.0.1.2.7-18.el7 将被 升级
---> 软件包 zlib.x86_64.0.1.2.7-20.el7_9 将被 更新
--> 正在检查事务
---> 软件包 krb5-workstation.x86_64.0.1.15.1-50.el7 将被 升级
---> 软件包 krb5-workstation.x86_64.0.1.15.1-54.el7_9 将被 更新
---> 软件包 libsepol-devel.x86_64.0.2.5-10.el7 将被 安装
---> 软件包 pcre-devel.x86_64.0.8.32-17.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
============================================================================================
Package 架构 版本 源 大小
============================================================================================
正在安装:
openssl-devel x86_64 1:1.0.2k-25.el7_9 updates 1.5 M
正在更新:
curl x86_64 7.29.0-59.el7_9.1 updates 271 k
openssl x86_64 1:1.0.2k-25.el7_9 updates 494 k
为依赖而安装:
keyutils-libs-devel x86_64 1.5.8-3.el7 base 37 k
krb5-devel x86_64 1.15.1-54.el7_9 updates 273 k
libcom_err-devel x86_64 1.42.9-19.el7 base 32 k
libselinux-devel x86_64 2.5-15.el7 base 187 k
libsepol-devel x86_64 2.5-10.el7 base 77 k
libverto-devel x86_64 0.2.5-4.el7 base 12 k
pcre-devel x86_64 8.32-17.el7 base 480 k
zlib-devel x86_64 1.2.7-20.el7_9 updates 50 k
为依赖而更新:
krb5-libs x86_64 1.15.1-54.el7_9 updates 810 k
krb5-workstation x86_64 1.15.1-54.el7_9 updates 821 k
libcurl x86_64 7.29.0-59.el7_9.1 updates 223 k
libkadm5 x86_64 1.15.1-54.el7_9 updates 179 k
openssl-libs x86_64 1:1.0.2k-25.el7_9 updates 1.2 M
zlib x86_64 1.2.7-20.el7_9 updates 90 k
事务概要
============================================================================================
安装 1 软件包 (+8 依赖软件包)
升级 2 软件包 (+6 依赖软件包)
总下载量:6.6 M
Downloading packages:
No Presto metadata available for updates
警告:/var/cache/yum/x86_64/7/base/packages/keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm 的公钥尚未安装
(1/17): keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm | 37 kB 00:00:00
curl-7.29.0-59.el7_9.1.x86_64.rpm 的公钥尚未安装
(2/17): curl-7.29.0-59.el7_9.1.x86_64.rpm | 271 kB 00:00:00
(3/17): krb5-libs-1.15.1-54.el7_9.x86_64.rpm | 810 kB 00:00:00
(4/17): krb5-devel-1.15.1-54.el7_9.x86_64.rpm | 273 kB 00:00:00
(5/17): krb5-workstation-1.15.1-54.el7_9.x86_64.rpm | 821 kB 00:00:00
(6/17): libcurl-7.29.0-59.el7_9.1.x86_64.rpm | 223 kB 00:00:00
(7/17): libkadm5-1.15.1-54.el7_9.x86_64.rpm | 179 kB 00:00:00
(8/17): libcom_err-devel-1.42.9-19.el7.x86_64.rpm | 32 kB 00:00:00
(9/17): libsepol-devel-2.5-10.el7.x86_64.rpm | 77 kB 00:00:00
(10/17): libselinux-devel-2.5-15.el7.x86_64.rpm | 187 kB 00:00:00
(11/17): libverto-devel-0.2.5-4.el7.x86_64.rpm | 12 kB 00:00:00
(12/17): openssl-1.0.2k-25.el7_9.x86_64.rpm | 494 kB 00:00:00
(13/17): openssl-libs-1.0.2k-25.el7_9.x86_64.rpm | 1.2 MB 00:00:00
(14/17): zlib-1.2.7-20.el7_9.x86_64.rpm | 90 kB 00:00:00
(15/17): zlib-devel-1.2.7-20.el7_9.x86_64.rpm | 50 kB 00:00:00
(16/17): pcre-devel-8.32-17.el7.x86_64.rpm | 480 kB 00:00:00
(17/17): openssl-devel-1.0.2k-25.el7_9.x86_64.rpm | 1.5 MB 00:00:00
--------------------------------------------------------------------------------------------
总计 4.8 MB/s | 6.6 MB 00:00:01
从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 检索密钥
导入 GPG key 0xF4A80EB5:
用户ID : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
指纹 : 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
软件包 : centos-release-7-9.2009.0.el7.centos.x86_64 (@anaconda)
来自 : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在更新 : zlib-1.2.7-20.el7_9.x86_64 1/25
正在更新 : krb5-libs-1.15.1-54.el7_9.x86_64 2/25
正在更新 : 1:openssl-libs-1.0.2k-25.el7_9.x86_64 3/25
正在更新 : libkadm5-1.15.1-54.el7_9.x86_64 4/25
正在更新 : libcurl-7.29.0-59.el7_9.1.x86_64 5/25
正在安装 : zlib-devel-1.2.7-20.el7_9.x86_64 6/25
正在安装 : libcom_err-devel-1.42.9-19.el7.x86_64 7/25
正在安装 : libverto-devel-0.2.5-4.el7.x86_64 8/25
正在安装 : libsepol-devel-2.5-10.el7.x86_64 9/25
正在安装 : pcre-devel-8.32-17.el7.x86_64 10/25
正在安装 : libselinux-devel-2.5-15.el7.x86_64 11/25
正在安装 : keyutils-libs-devel-1.5.8-3.el7.x86_64 12/25
正在安装 : krb5-devel-1.15.1-54.el7_9.x86_64 13/25
正在安装 : 1:openssl-devel-1.0.2k-25.el7_9.x86_64 14/25
正在更新 : curl-7.29.0-59.el7_9.1.x86_64 15/25
正在更新 : krb5-workstation-1.15.1-54.el7_9.x86_64 16/25
正在更新 : 1:openssl-1.0.2k-25.el7_9.x86_64 17/25
清理 : 1:openssl-1.0.2k-19.el7.x86_64 18/25
清理 : krb5-workstation-1.15.1-50.el7.x86_64 19/25
清理 : curl-7.29.0-59.el7.x86_64 20/25
清理 : libcurl-7.29.0-59.el7.x86_64 21/25
清理 : libkadm5-1.15.1-50.el7.x86_64 22/25
清理 : krb5-libs-1.15.1-50.el7.x86_64 23/25
清理 : 1:openssl-libs-1.0.2k-19.el7.x86_64 24/25
清理 : zlib-1.2.7-18.el7.x86_64 25/25
验证中 : libselinux-devel-2.5-15.el7.x86_64 1/25
验证中 : keyutils-libs-devel-1.5.8-3.el7.x86_64 2/25
验证中 : zlib-1.2.7-20.el7_9.x86_64 3/25
验证中 : 1:openssl-1.0.2k-25.el7_9.x86_64 4/25
验证中 : pcre-devel-8.32-17.el7.x86_64 5/25
验证中 : libsepol-devel-2.5-10.el7.x86_64 6/25
验证中 : libverto-devel-0.2.5-4.el7.x86_64 7/25
验证中 : libkadm5-1.15.1-54.el7_9.x86_64 8/25
验证中 : 1:openssl-libs-1.0.2k-25.el7_9.x86_64 9/25
验证中 : 1:openssl-devel-1.0.2k-25.el7_9.x86_64 10/25
验证中 : zlib-devel-1.2.7-20.el7_9.x86_64 11/25
验证中 : krb5-devel-1.15.1-54.el7_9.x86_64 12/25
验证中 : curl-7.29.0-59.el7_9.1.x86_64 13/25
验证中 : krb5-workstation-1.15.1-54.el7_9.x86_64 14/25
验证中 : libcom_err-devel-1.42.9-19.el7.x86_64 15/25
验证中 : krb5-libs-1.15.1-54.el7_9.x86_64 16/25
验证中 : libcurl-7.29.0-59.el7_9.1.x86_64 17/25
验证中 : libkadm5-1.15.1-50.el7.x86_64 18/25
验证中 : 1:openssl-libs-1.0.2k-19.el7.x86_64 19/25
验证中 : zlib-1.2.7-18.el7.x86_64 20/25
验证中 : krb5-workstation-1.15.1-50.el7.x86_64 21/25
验证中 : 1:openssl-1.0.2k-19.el7.x86_64 22/25
验证中 : libcurl-7.29.0-59.el7.x86_64 23/25
验证中 : curl-7.29.0-59.el7.x86_64 24/25
验证中 : krb5-libs-1.15.1-50.el7.x86_64 25/25
已安装:
openssl-devel.x86_64 1:1.0.2k-25.el7_9
作为依赖被安装:
keyutils-libs-devel.x86_64 0:1.5.8-3.el7 krb5-devel.x86_64 0:1.15.1-54.el7_9
libcom_err-devel.x86_64 0:1.42.9-19.el7 libselinux-devel.x86_64 0:2.5-15.el7
libsepol-devel.x86_64 0:2.5-10.el7 libverto-devel.x86_64 0:0.2.5-4.el7
pcre-devel.x86_64 0:8.32-17.el7 zlib-devel.x86_64 0:1.2.7-20.el7_9
更新完毕:
curl.x86_64 0:7.29.0-59.el7_9.1 openssl.x86_64 1:1.0.2k-25.el7_9
作为依赖被升级:
krb5-libs.x86_64 0:1.15.1-54.el7_9 krb5-workstation.x86_64 0:1.15.1-54.el7_9
libcurl.x86_64 0:7.29.0-59.el7_9.1 libkadm5.x86_64 0:1.15.1-54.el7_9
openssl-libs.x86_64 1:1.0.2k-25.el7_9 zlib.x86_64 0:1.2.7-20.el7_9
完毕!
“sudo” : 意为以管理员身份运行
参考链接: sudo 命令
“yum” : 是一个在CentOS中的Shell前端软件包管理器。能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
参考链接: yum 命令
“install” : 安装命令
参考链接: install命令
“-y” : 当安装过程提示选择全部为"yes"
“curl”
“openssl”
“openssl-devel”
“wget”
创建操作目录
cd ~ && mkdir -p fisco && cd fisco
下载安装脚本
curl -
输出结果:
######################################################################## 100.0%
搭建4节点非国密联盟链
请确保机器的30300-30303,20200-20203,8545-8548端口没有被占用。
在fisco目录下执行下面的指令,生成一条单群组4节点的FISCO链:
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200
其中-p选项指定起始端口,分别是p2p监听端口、rpc监听端口
输出结果:
[INFO] Downloading tassl binary from https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/tools/tassl-1.1.1b/tassl-1.1.1b-linux-x86_64.tar.gz...
--2022-10-06 15:31:40-- https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/tools/tassl-1.1.1b/tassl-1.1.1b-linux-x86_64.tar.gz
正在解析主机 osp-1257653870.cos.ap-guangzhou.myqcloud.com (osp-1257653870.cos.ap-guangzhou.myqcloud.com)... 112.49.57.187, 112.49.57.178, 112.49.57.151, ...
正在连接 osp-1257653870.cos.ap-guangzhou.myqcloud.com (osp-1257653870.cos.ap-guangzhou.myqcloud.com)|112.49.57.187|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1780655 (1.7M) [application/x-gzip]
正在保存至: “tassl-1.1.1b-linux-x86_64.tar.gz”
100%[==================================================>] 1,780,655 3.29MB/s 用时 0.5s
2022-10-06 15:31:41 (3.29 MB/s) - 已保存 “tassl-1.1.1b-linux-x86_64.tar.gz” [1780655/1780655])
._tassl-1.1.1b-linux-x86_64
tar: 忽略未知的扩展头关键字‘LIBARCHIVE.xattr.com.apple.quarantine’
tassl-1.1.1b-linux-x86_64
[INFO] Downloading fisco-bcos binary from https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/releases/v3.0.1/fisco-bcos-linux-x86_64.tar.gz ...
######################################################################## 100.0%
[INFO] Generate ca cert successfully!
Processing IP:127.0.0.1 Total:4
[INFO] Generate ./nodes/127.0.0.1/sdk cert successful!
[INFO] Generate ./nodes/127.0.0.1/node0/conf cert successful!
[INFO] Generate ./nodes/127.0.0.1/node1/conf cert successful!
[INFO] Generate ./nodes/127.0.0.1/node2/conf cert successful!
[INFO] Generate ./nodes/127.0.0.1/node3/conf cert successful!
[INFO] Generate uuid success: a710aa05-ecd6-49c9-909b-7bad5296e0d5
[INFO] Generate uuid success: 573df05f-c6c0-4031-9c47-2e055adc0347
[INFO] Generate uuid success: 40abbb61-3e0c-4a88-9280-94892a707328
[INFO] Generate uuid success: c39ae3d8-7a37-4abb-bc84-857fa210b028
==============================================================
[INFO] GroupID : group0
[INFO] ChainID : chain0
[INFO] fisco-bcos path : bin/fisco-bcos
[INFO] Auth mode : false
[INFO] Start port : 30300 20200
[INFO] Server IP : 127.0.0.1:4
[INFO] SM model : false
[INFO] Output dir : ./nodes
[INFO] All completed. Files in ./nodes
启动所有节点
bash nodes/127.0.0.1/start_all.sh
输出结果:
try to start node0
try to start node1
try to start node2
try to start node3
node0 start successfully pid=56970
node1 start successfully pid=56972
node2 start successfully pid=56974
node3 start successfully pid=56968
检查进程是否启动
ps aux |grep -v grep |grep fisco-bcos
输出结果:
root 56968 10.2 0.3 1136916 25376 pts/0 Sl 15:33 0:03 /root/fisco/nodes/127.0.0.1/node3/../fisco-bcos -c config.ini -g config.genesis
root 56970 9.5 0.2 1132816 20340 pts/0 Sl 15:33 0:03 /root/fisco/nodes/127.0.0.1/node0/../fisco-bcos -c config.ini -g config.genesis
root 56972 9.3 0.2 1136916 20304 pts/0 Sl 15:33 0:03 /root/fisco/nodes/127.0.0.1/node1/../fisco-bcos -c config.ini -g config.genesis
root 56974 9.4 0.2 1145108 22472 pts/0 Sl 15:33 0:03 /root/fisco/nodes/127.0.0.1/node2/../fisco-bcos -c config.ini -g config.genesis
查看每个节点的网络连接数目 以node0为例:
tail -f nodes/127.0.0.1/node0/log/* |grep -i "heartBeat,connected count"
正常情况下会每间隔10秒输出连接信息,从输出日志可看出node0与另外3个节点均有连接,网络连接正常:
info|2022-10-06 15:33:45.671633|[P2PService][Service][METRIC]heartBeat,connected count=3
info|2022-10-06 15:33:55.672023|[P2PService][Service][METRIC]heartBeat,connected count=3
info|2022-10-06 15:34:05.672172|[P2PService][Service][METRIC]heartBeat,connected count=3
info|2022-10-06 15:34:15.672484|[P2PService][Service][METRIC]heartBeat,connected count=3
|