FISCO BCOS从零实战(详细)(一)

一:简介说明

1.1项目架构

参考链接: FISCO BCOS 技术文档-版本和兼容性
FISCO BCOS 3.x

接入层:接入层主要负责区块链连接的能力,包括提供P2P能力的“对外网关服务”和提供给SDK访问的“对内网关服务”。在联盟链的体系中,“对外网关服务”管理了机构对外连接的出入口,负责机构级别的安全认证。“对内网关服务”则提供给机构内的客户端(应用端)访问入口。两个网关服务都可以平行扩展、多活部署、负载均衡,满足高可用要求。

调度层:调度层是区块链内核运转调度的“大脑中枢”系统,负责整个区块链系统运行调度,包括网络分发调度、交易池管理、共识机制、计算调度等模块。其中,网络分发模块主要是与接入层实现互联通信功能,处理消息分发逻辑;交易池管理主要负责交易的接收、签名验证、淘汰等功能;共识机制负责交易排序、区块打包以及对区块结果进行分布式共识,确保一致性;计算调度则完成交易验证(核心是智能合约的验证)的调度处理,实现并行验证,是整个系统吞吐量的关键。

计算层:这里主要负责交易验证,需要将交易解码放入合约虚拟机中执行,得到交易执行结果。交易验证是整个区块链的核心,尤其是基于智能合约的区块链系统,交易验证的计算可能需要花费较大的CPU开销。因此,如何实现并行化交易验证,通过集群化模式实现交易验证计算的平行扩展是非常重要的。

存储层:存储层负责落盘存储交易、区块、账本状态等数据,存储层重点关注如何支撑海量数据的存储,采用分布式存储集群的方式可实现存储容量可扩展。分布式存储业界已有许多稳定可复用的开源组件(如TiKV),这层将复用成熟组件。

管理层:管理层是为整个区块链系统各模块实现可视化管理的平台,包括部署、配置、日志、网络路由等管理功能。FISCO BCOS 3.0系统架构基于开源微服务框架Tars构建,这层的能力复用成熟的Tars-Framwork管理组件。

1.2版本信息

硬件推荐配置
CPU2.4GHz * 8核
内存8GB
存储4TB
网络带宽10Mb

本文使用硬件
CPU: Intel® CoreTMI7-10875H CPU @ 2.30GHz * 8核
内存 : 虚拟机8GB
存储 : 虚拟机100GB

本文使用软件系统

FISCO-BCOS v3.0.1推荐版本最低版本说明
Console3.0.13.0.0
Java SDK3.0.13.0.0
CPP SDK3.0.03.0.0
Solidity0.8.11最低 0.4.25,最高 0.8.11需根据合约版本下载编译器(控制台)
WBC-Liquid1.0.0-rc31.0.0-rc3

二:快速搭建

参考链接: 搭建第一个区块链网络
搭建Air版本FISCO BCOS联盟链

安装centos依赖

sudo yum install -y curl openssl openssl-devel wget

输出结果:

已加载插件:fastestmirror, langpacksLoading 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正在更新: curlx86_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-develx86_64 1.15.1-54.el7_9 updates 273 k libcom_err-develx86_64 1.42.9-19.el7 base 32 k libselinux-develx86_64 2.5-15.el7base187 k libsepol-develx86_64 2.5-10.el7base 77 k libverto-develx86_64 0.2.5-4.el7 base 12 k pcre-develx86_64 8.32-17.el7 base480 k zlib-develx86_64 1.2.7-20.el7_9updates50 k为依赖而更新: krb5-libs x86_64 1.15.1-54.el7_9 updates 810 k krb5-workstationx86_64 1.15.1-54.el7_9 updates 821 k libcurl x86_64 7.29.0-59.el7_9.1 updates 223 k libkadm5x86_64 1.15.1-54.el7_9 updates 179 k openssl-libsx86_64 1:1.0.2k-25.el7_9 updates 1.2 M zlibx86_64 1.2.7-20.el7_9updates90 k事务概要============================================================================================安装1 软件包 (+8 依赖软件包)升级2 软件包 (+6 依赖软件包)总下载量:6.6 MDownloading 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: NOKEYkeyutils-libs-devel-1.5.8-3.el7.x86_64.rpm 的公钥尚未安装(1/17): keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm |37 kB00: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 kB00:00:00 (3/17): krb5-libs-1.15.1-54.el7_9.x86_64.rpm | 810 kB00:00:00 (4/17): krb5-devel-1.15.1-54.el7_9.x86_64.rpm| 273 kB00:00:00 (5/17): krb5-workstation-1.15.1-54.el7_9.x86_64.rpm| 821 kB00:00:00 (6/17): libcurl-7.29.0-59.el7_9.1.x86_64.rpm | 223 kB00:00:00 (7/17): libkadm5-1.15.1-54.el7_9.x86_64.rpm| 179 kB00:00:00 (8/17): libcom_err-devel-1.42.9-19.el7.x86_64.rpm|32 kB00:00:00 (9/17): libsepol-devel-2.5-10.el7.x86_64.rpm |77 kB00:00:00 (10/17): libselinux-devel-2.5-15.el7.x86_64.rpm| 187 kB00:00:00 (11/17): libverto-devel-0.2.5-4.el7.x86_64.rpm |12 kB00:00:00 (12/17): openssl-1.0.2k-25.el7_9.x86_64.rpm| 494 kB00:00:00 (13/17): openssl-libs-1.0.2k-25.el7_9.x86_64.rpm | 1.2 MB00:00:00 (14/17): zlib-1.2.7-20.el7_9.x86_64.rpm|90 kB00:00:00 (15/17): zlib-devel-1.2.7-20.el7_9.x86_64.rpm|50 kB00:00:00 (16/17): pcre-devel-8.32-17.el7.x86_64.rpm | 480 kB00:00:00 (17/17): openssl-devel-1.0.2k-25.el7_9.x86_64.rpm| 1.5 MB00:00:00 --------------------------------------------------------------------------------------------总计4.8 MB/s | 6.6 MB00:00:01 从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 检索密钥导入 GPG key 0xF4A80EB5: 用户ID : "CentOS-7 Key (CentOS 7 Official Signing Key) " 指纹 : 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-7Running transaction checkRunning transaction testTransaction test succeededRunning 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_643/25 正在更新: libkadm5-1.15.1-54.el7_9.x86_644/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_647/25 正在安装: libverto-devel-0.2.5-4.el7.x86_648/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_6411/25 正在安装: keyutils-libs-devel-1.5.8-3.el7.x86_6412/25 正在安装: krb5-devel-1.15.1-54.el7_9.x86_64 13/25 正在安装: 1:openssl-devel-1.0.2k-25.el7_9.x86_6414/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_6417/25 清理: 1:openssl-1.0.2k-19.el7.x86_6418/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_6421/25 清理: libkadm5-1.15.1-50.el7.x86_64 22/25 清理: krb5-libs-1.15.1-50.el7.x86_6423/25 清理: 1:openssl-libs-1.0.2k-19.el7.x86_64 24/25 清理: zlib-1.2.7-18.el7.x86_6425/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_645/25 验证中: libsepol-devel-2.5-10.el7.x86_64 6/25 验证中: libverto-devel-0.2.5-4.el7.x86_647/25 验证中: libkadm5-1.15.1-54.el7_9.x86_648/25 验证中: 1:openssl-libs-1.0.2k-25.el7_9.x86_649/25 验证中: 1:openssl-devel-1.0.2k-25.el7_9.x86_6410/25 验证中: zlib-devel-1.2.7-20.el7_9.x86_6411/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_6416/25 验证中: libcurl-7.29.0-59.el7_9.1.x86_6417/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_6420/25 验证中: krb5-workstation-1.15.1-50.el7.x86_64 21/25 验证中: 1:openssl-1.0.2k-19.el7.x86_6422/25 验证中: libcurl-7.29.0-59.el7.x86_6423/25 验证中: curl-7.29.0-59.el7.x86_64 24/25 验证中: krb5-libs-1.15.1-50.el7.x86_6425/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.el7libselinux-devel.x86_64 0:2.5-15.el7libsepol-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.el7zlib-devel.x86_64 0:1.2.7-20.el7_9更新完毕:curl.x86_64 0:7.29.0-59.el7_9.1openssl.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_9zlib.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 -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v3.0.1/build_chain.sh && chmod u+x build_chain.sh

输出结果:

######################################################################## 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_64tar: 忽略未知的扩展头关键字‘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 node0try to start node1try to start node2try 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

输出结果:

root56968 10.20.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.genesisroot569709.50.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.genesisroot569729.30.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.genesisroot569749.40.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=3info|2022-10-06 15:33:55.672023|[P2PService][Service][METRIC]heartBeat,connected count=3info|2022-10-06 15:34:05.672172|[P2PService][Service][METRIC]heartBeat,connected count=3info|2022-10-06 15:34:15.672484|[P2PService][Service][METRIC]heartBeat,connected count=3