前提
好久不见,最近因为毕业的手续等问题,一直都没有更新,FISCO BCOS第二季task挑战赛如期展开啦,因为毕业的问题,也是非常遗憾的错过了上一期的task挑战赛,这一期一定双倍挑战,hhhhhh
Air版本FISCO BCOS采用all-in-one的封装模式,将所有模块编译成一个二进制(进程),一个进程即为一个区块链节点,包括网络、共识、接入等所有功能模块,适用于初学者入门、功能验证、POC产品。
所以我们这篇文章会更加注重的去讲3.0Air和2.0的区别,以便于各位更加轻松的向3.0进行转型
环境:Ubuntu20
FISCO BCOS V3.0 rc1
正文
首先咱们先看第一个区别,第一个区别最大的地方还是在体验上,起链的时候虽然一如既往的使用了build_chain,但是增加了许多新的选项参数,比如
build_chain 2.X 版本的help
| 参数 | 功能 | 
| -l<IP list>[必需] | “ip1:nodeNum1,ip2:nodeNum2”例如:“192.168.0.1:2192.168.0.2:3” | 
| -f<IP list file>[可选] | 按行拆分,每行应为“IP:nodeNum agencyName groupList p2p_port,channel_port, | 
| -v | <FISCO-BCOS二进制版本>默认为最新的v${Default_version}t, | 
| -e | <FISCO-BCOS二进制路径>默认从GitHub下载FISCO-BCOS。如果设置-e,则在指定位置使用二进制 | 
| -o | <输出方向>默认值/节点/ | 
| -p | <开始端口>默认30300202008545表示p2p_Port从30300开始,channel_Port从20200开始,jsonrpc_Port从8545开始 | 
| -q | <列出FISCO-BCOS发布>列出FISCO-BCOS发布版本 | 
| -i | <主机ip>默认127.0.0.1。如果设置-i,则侦听0.0.0.0 | 
| -s | <DB类型>默认RocksDB。选项可以是RocksDB/MySQL/Scalible,建议使用RocksDB | 
| -d | <docker mode>默认关闭。如果设置为-d,则使用docker构建 | 
| -c | <共识算法>默认PBFT。选项可以是pbft/rraft/rpbft,建议使用pbft | 
| -C | <Chain id>默认值1。可以设置uint。 | 
| -g | <生成国密节点>默认否 | 
| -z | <生成tar数据包>默认否 | 
| -t | <证书配置文件>默认自动生成 | 
| -6 | <使用ipv6>默认编号。如果设置为-6,则将IP视为ipv6 | 
| -k | <ca根的路径>默认自动生成,ca.crt和ca.key必须在路径中,如果使用中间值,则root.crt必须在路径 | 
| -K | <sm crypto ca root的路径>默认自动生成,gmca.crt和gmca.key必须在路径中,如果使用中间路径,则gmroot.crt必须在路径 | 
| -D | <使用部署模式>默认值为false,如果设置为-D,则使用部署模式目录结构并使tar | 
| -G | <channel use sm crypto ssl>默认为false,仅适用于国密模式 | 
| -X | <证书到期时间>默认36500天 | 
| -T | <启用调试日志>默认关闭。如果设置为-T,则启用调试日志 | 
| -R | <Channel use ecdsa crypto ssl>默认值为false。如果设置了-R,请为通道ssl使用ecdsa证书,否则将使用rsa证书 | 
| -S | <启用统计信息>默认关闭。如果设置为-S,则启用统计信息 | 
| -F | <禁用日志自动刷新>默认打开。如果设置为-F,则禁用日志自动清除 | 
| -E | <Enable free_storage_evm>默认关闭。如果设置为-E,则启用free_storage _evm | 
| -h | 帮助 | 
build_chain 3.X 版本的help

| 参数 | 功能 | 
| -C<Command>[可选]命令 | 现在支持“deploy”和“expand”,默认为deploy | 
| -g<group id>[可选] | 设置组id,默认值:group0 | 
| -I<chain id>[可选] | 设置chain id,默认值:chain0 | 
| -v<FISCO-BCOS二进制版本>[可选] | 默认为最新的v3.4.0 | 
| -l<IP list>[必需] | “ip1:nodeNum1,ip2:nodeNum2”例如:“192.168.0.1:2192.168.0.2:3” | 
| -L<fisco-bcos lightnode exec>[可选] | fisco-bdos 轻节点的好可执行文件,输入“download_binary”下载lightnode二进制文件或指定正确的lightnode二元路径 | 
| -e<fisco-bcos exec>〔可选〕 | fisco-bcosbinary exec -t<mtail exec>[可选]mtail二进制exec | 
| -o<output dir>〔可选〕 | 输出目录,默认值/节点 | 
| -p<启动端口>〔可选〕 | 默认3030020200表示p2p_port从30300开始,rpc_port从20200开始 | 
| -s<SM型号>[可选] | SM SSL连接与否,默认为false | 
| -H<HSM型号>[可选] | 是否使用HSM(硬件安全模块),默认为false | 
| -c<Config Path>〔展开节点时必需〕 | 指定展开节点的路径Config.ini、Config.generion和p2p连接文件nodes.json | 
| -d<CA cert path>[展开节点时必需] | 展开节点时,指定CA证书和私钥所在的路径 | 
| -D<docker模式>默认关闭 | 如果设置为-D,则使用docker构建 | 
| 如果设置为-D,则使用docker构建 | 当Auth模式时指定管理员帐户地址。 | 
| 当Auth模式时指定管理员帐户地址。 | 是否使用WASM虚拟机引擎,默认为false | 
| -R<Serial_mode>[可选] | 是否使用串行执行,默认为true | 
| -k<关键页大小>[可选] | 关键页大小,默认为10240 | 
| 关键页大小,默认为10240 | 节点监视器与否,默认值为false | 
| 节点监视器与否,默认值为false | 展开节点时,应指定ip和端口 | 
| 展开节点时,应指定ip和端口 | 展开节点时,指定prometheus所在的路径 | 
| -z<生成tar包>〔可选〕 | 将数据打包到链上生成tar包 | 
| -n<node-key path>[可选] | 设置要加载nodeid的节点密钥文件的路径 | 
| -N<node path>[可选] | -N<node path>[可选] | 
| -u<multi-ca-path>[可选] | -u<multi-ca-path>[可选] | 
| -h | 帮助 | 
我们可以通过脚本的新增参数发现,多乐许多不一样的地方,比如轻节点的概念,亦或者是-d的功能改成--D了,都有不同的变化,那么我们本篇就以启动一个FISCO BCOS V3.0 Air来试一下轻量级的变化
起链对比
V3.0 起链
bash ../tools/build_chain.sh -p 30300,20200 -l 127.0.0.1:4 -o nodes
V2.0起链
bash ../tools/build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545 -o nodes
返回消息对比
与2.0相比起链少了一个指定的8545的端口,默认的起链命令倒是没什么变化
相较于2.0来说多了很多返回的内容,例如:
Processing IP:127.0.0.1 Total:4
writing RSA key
[INFO] Generate nodes/127.0.0.1/sdk cert successful!
writing RSA key
[INFO] Generate nodes/127.0.0.1/node0/conf cert successful!
writing RSA key
[INFO] Generate nodes/127.0.0.1/node1/conf cert successful!
writing RSA key
[INFO] Generate nodes/127.0.0.1/node2/conf cert successful!
writing RSA key
[INFO] Generate nodes/127.0.0.1/node3/conf cert successful!
[INFO] Downloading get_account.sh from https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/tools/get_account.sh...
这里的返回指的是,创建了RSA的秘钥,RSA秘钥指的是非对称加密算法的秘钥,也就是我们所说的公私钥
[INFO] Admin account: 0x984a17c383a35dcc7da48924ca83c078ae384790
[INFO] Generate uuid success: 0578afd8-df1e-49ae-bf93-f01105e33500
[INFO] Generate uuid success: 8505abdf-5c60-45cf-b8d8-94ae641e1e5f
[INFO] Generate uuid success: dae56b62-0584-486c-821a-b5499dd3d2b9
[INFO] Generate uuid success: fd0d62e6-15a6-4422-bb3b-c9ade14a283e
这里的返回是UUID,UUID是我们分布式系统中常见的唯一性表示,就和物理mac地址一样
[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] enable HSM           : false
[INFO] Output dir           : nodes
[INFO] All completed. Files in nodes
这里就是一些基本情况的阐述
文件目录对比
最终生成的目录对比,我们发现3.0多了许多证书类,监控类的文件,这意味着我们的3.0更加安全,完善
V3.0nodes/
├── 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 # 停止脚本,用于停止所有节点V2.0nodes/
├── 127.0.0.1
│   ├── download_bin.sh
│   ├── download_console.sh
│   ├── fisco-bcos
│   ├── node0
│   │   ├── conf
│   │   │   ├── ca.crt
│   │   │   ├── group.1.genesis
│   │   │   ├── group.1.ini
│   │   │   ├── node.crt
│   │   │   ├── node.key
│   │   │   └── node.nodeid
│   │   ├── config.ini
│   │   ├── scripts
│   │   │   ├── load_new_groups.sh
│   │   │   ├── monitor.sh
│   │   │   ├── reload_sdk_allowlist.sh
│   │   │   └── reload_whitelist.sh
│   │   ├── start.sh
│   │   └── stop.sh
│   ├── node1
│   │   ├── conf
│   │   │   ├── ca.crt
│   │   │   ├── group.1.genesis
│   │   │   ├── group.1.ini
│   │   │   ├── node.crt
│   │   │   ├── node.key
│   │   │   └── node.nodeid
│   │   ├── config.ini
│   │   ├── scripts
│   │   │   ├── load_new_groups.sh
│   │   │   ├── monitor.sh
│   │   │   ├── reload_sdk_allowlist.sh
│   │   │   └── reload_whitelist.sh
│   │   ├── start.sh
│   │   └── stop.sh
│   ├── node2
│   │   ├── conf
│   │   │   ├── ca.crt
│   │   │   ├── group.1.genesis
│   │   │   ├── group.1.ini
│   │   │   ├── node.crt
│   │   │   ├── node.key
│   │   │   └── node.nodeid
│   │   ├── config.ini
│   │   ├── scripts
│   │   │   ├── load_new_groups.sh
│   │   │   ├── monitor.sh
│   │   │   ├── reload_sdk_allowlist.sh
│   │   │   └── reload_whitelist.sh
│   │   ├── start.sh
│   │   └── stop.sh
│   ├── node3
│   │   ├── conf
│   │   │   ├── ca.crt
│   │   │   ├── group.1.genesis
│   │   │   ├── group.1.ini
│   │   │   ├── node.crt
│   │   │   ├── node.key
│   │   │   └── node.nodeid
│   │   ├── config.ini
│   │   ├── scripts
│   │   │   ├── load_new_groups.sh
│   │   │   ├── monitor.sh
│   │   │   ├── reload_sdk_allowlist.sh
│   │   │   └── reload_whitelist.sh
│   │   ├── start.sh
│   │   └── stop.sh
│   ├── sdk
│   │   ├── ca.crt
│   │   ├── sdk.crt
│   │   ├── sdk.key
│   │   └── sdk.publickey
│   ├── start_all.sh
│   └── stop_all.sh
├── cert
│   ├── agency
│   │   ├── agency.crt
│   │   ├── agency.key
│   │   ├── agency.srl
│   │   ├── ca.crt
│   │   └── cert.cnf
│   ├── ca.crt
│   ├── ca.key
│   ├── ca.srl
│   └── cert.cnf
└── cert.cnf
起链返回内容
这里更新了启动进程不仅仅是返回启动成功,并且将进程号也一并返回了
V3.0try to start node0
try to start node1
try to start node2
try to start node3node3 start successfully pid=5947node2 start successfully pid=5957node1 start successfully pid=5962node0 start successfully pid=5951
V2.0try to start node0
try to start node1
try to start node2
try to start node3node2 start successfullynode1 start successfullynode0 start successfullynode3 start successfully
扩容节点对比
V3.0# 创建扩容配置存放目录
$ mkdir config# 拷贝根证书、根证书私钥
$ cp -r nodes/ca config# 从被扩容节点node0拷贝节点配置文件config.ini,创世块配置文件config.genesis以及节点连接配置文件nodes.json
$ cp nodes/127.0.0.1/node0/config.ini config/
$ cp nodes/127.0.0.1/node0/config.genesis config/
$ cp nodes/127.0.0.1/node0/nodes.json config/nodes.json.tmp# 设置新节点P2P和RPC监听端口
# macOS系统(设置P2P监听端口为30304,RPC监听端口为20204)
$ sed -i .bkp 's/listen_port=30300/listen_port=30304/g' config/config.ini
$ sed -i .bkp 's/listen_port=20200/listen_port=20204/g' config/config.ini
# linux系统(设置P2P监听端口为30304,RPC监听端口为20204)
$ sed -i 's/listen_port=30300/listen_port=30304/g' config/config.ini
$ sed -i 's/listen_port=20200/listen_port=20204/g' config/config.ini# 将新节点连接加入到nodes.json
$ sed -e 's/"nodes":\[/"nodes":\["127.0.0.1:30304",/' config/nodes.json.tmp > config/nodes.json
# 确认新节点连接信息: 127.0.0.1:30304加入成功
$ cat config/nodes.json
{"nodes":["127.0.0.1:30304","127.0.0.1:30300","127.0.0.1:30301","127.0.0.1:30302","127.0.0.1:30303"]}扩容节点
# 调用build_chain.sh扩容节点,新节点扩容到nodes/127.0.0.1/node4目录
# -c: 指定扩容配置config.ini, config.genesis和nodes.json路径
# -d: 指定CA证书和私钥的路径
# -o: 指定扩容节点配置所在目录
bash ../tools/build_chain.sh -C expand -c config -d config/ca -o nodes/127.0.0.1/node4cat ~fisco/nodes/127.0.0.1/node4/conf/node.nodeidcp -rf nodes/127.0.0.1/sdk/* console/conf/#这里可以根据自己的实际情况来改,我就不改了直接使用示例文件
cp -rf console/conf/config-example.toml console/conf/config.tomladdObserveraddSealer

V2.0curl -#LO https://raw.githubusercontent.com/FISCO-BCOS/FISCO-BCOS/master-2.0/tools/gen_node_cert.sh# -c指定机构证书及私钥所在路径
# -o输出到指定文件夹,其中node4/conf中会存在机构agency新签发的证书和私钥
# 成功会输出 All completed 提示
bash gen_node_cert.sh -c ../cert/agency -o node4cp node0/config.ini node0/start.sh node0/stop.sh node4/#修改node4/config.ini。对于[rpc]模块,修改channel_listen_port=20204和jsonrpc_listen_port=8549;对于[p2p]模块,修改listen_port=30304并在node.中增加自身节点信息;cp node0/conf/group.1.genesis node0/conf/group.1.ini node4/conf/bash node4/start.shcat node4/conf/node.nodeidgetObserverListaddSealer 这里我们可以发现,v3.0的扩容步骤明显多于且复杂于v2.0,所以我们这里可以,仔细的分析一下里面为什么要这么做
V3.0对于证书的要求明显是更加的严格了,引入了2.0所没有的证书文件,以及加密方式,但是对于轻量级的版本来说又不如pro或者max那版复杂,剩下的我们在下一篇中来分享搭建pro以及max版本所体会到的感受