Fisco BCOS 配置管理

节点配置

介绍了节点和账本配置方法,包括端口、证书、日志、群组、共识、存储、交易池、同步、流控等配置项。

FISCO BCOS支持多账本,每条链包括多个独立账本,账本间数据相互隔离,群组间交易处理相互隔离,每个节点包括一个主配置config.ini和多个账本配置 group.group_id.genesis group.group_id.ini

config.ini:主配置文件,主要配置RPC、P2P、SSL证书、账本配置文件路径、兼容性等信息。

group.group_id.genesis ∶群组配置文件,群组内所有节点一致,节点启动后,不可手动更改该配置。主要包括群组共识算法、存储类型、最大gas限制等配置项。

group.group_id.ini:群组可变配置文件,包括交易池大小等,配置后重启节点生效。

关于配置

配置P2P:

当前版本FISCO BCOS必须在config.ini配置中配置连接节点的P和Port,P2P相关配置包括:

listen_ip : P2P监听IP,默认设置为0.e.0.0 。

listen_port:节点P2P监听端口。

• **node, ***︰节点需连接的所有节点 ip:Port或DomainName:Port。该选项支持域名,但建议需

要使用的用户手动编译源码。

配置账本文件路径:

[group]配置本节点所属的所有群组配置路径︰

group_data_path:群组数据存储路径。

group_config_path:群组配置文件路径。

配置证书信息:

基于安全考虑,FISCO BCOS节点间采用SSL加密通信,[network_security]配置SSL连接的证书信息

• data_path : 证书和私钥文件所在目录。

• key : 节点私钥相对于data_path 的路径。

• cert : 证书node.crt相对于data_path的路径。

• ca_cert : ca证书文件路径。

• ca_path : ca证书文件夹,多ca时需要。

配置黑名单列表

cr1.idx:黑名单节点的Node lD,节点Node ID可通过 node .nodeid文件获取; icx是黑名单节点的索引。

配置日志信息

配置节点兼容性

https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/manual/configuration.html

组员(群组系统)配置

介绍了组员节点的加入和推出方法,包括节点加入/退出网络、节点加入/推出群组、转化成共识节点、观察者节点及游离节点等操作

共识配置

[consensus]涉及共识相关配置,包括:

• consensus_type:共识算法类型,目前支持PBFT,Raft和rPBFT,默认使用PBFT共识算法;

• max_trans_num:一个区块可打包的最大交易数,默认是1000,链初始化后,可通过控制

台动态调整该参数;

• consensus_timeout:PBFT共识过程中,每个区块执行的超时时间,默认为3s,单位为秒,

可通过控制台动态调整该参数;

• node.idx:共识节点列表,配置了参与共识节点的Node ID,节点的Node ID可通过

${data_path}/node.nodeid文件获取(其中${data_path}可通过主配置config.ini的

[network_security].data_path配置项获取)

状态模式配置

• state用于存储区块链状态信息,位于genesis文件中[state]:

• type:state类型,目前支持storage state和MPT state,默认为storage state,storage

state将交易执行结果存储在系统表中,效率较高,MPT state将交易执行结果存储在MPT树

中,效率较低,但包含完整的历史信息。

gas配置

FISCO BCOS兼容以太坊虚拟机(EVM),为了防止针对EVM的DOS攻击,EVM在执行交易时,引入了gas概念,用来度量智能合约执行过程中消耗的计算和存储资源,包括交易最大gas限制和区块最大gas限制,若交易或区块执行消耗的gas超过限制(gas limit),则丢弃交易或区块。

FISCO BCOS是联盟链,简化了gas设计,仅保留交易最大gas限制,区块最大gas通过共识配置的max_trans_num和交易最大gas限制一起约束。FISCO BCOS通过genesis的[tx].gas_limit来配置交易最大gas限制,默认是300000000,链初始化完毕后,可通过控制台指令动态调整gas限制。

EVM配置

FISCO BCOS v2.4.0引入Free Storage Gas衡量模式,提升CPU和内存在Gas消耗中的占比。

Free Storage Gas模式的开启和关闭通过genesis文件的evm.enable_free_storage配置项控制。

• evm.enable_free_storage设置为true:开启Free Storage Gas模式

账本可变配置说明

数据库相关配置项

• scroll_threshold_multiple:当type为Scalable时,此配置项用于配置区块数据库的切换阈

值,按scroll_threshold_multiple*1000。默认为2,区块数据按每2000块存储在不同的

RocksDB实例中。

• db_ip:当type为MySQL时,需要配置该字段,表示MySQL的IP地址。

• db_port:当type为MySQL时,需要配置该字段,表示MySQL的端口号。

• db_username:当type为MySQL时,需要配置该字段,表示MySQL的用户名。

• db_passwd:当type为MySQL时,需要配置该字段,表示MySQL用户对应的密码。

• db_name:当type为MySQL时,需要配置该字段,表示MySQL中使用的数据库名。

• init_connections:当type为MySQL时,可选配置该字段,表示与MySQL建立的初始连接数,默认15。使用默认值即可。

• max_connections:当type为MySQL时,可选配置该字段,表示与MySQL建立的最大连接数,默认20。使用默认值即可。

交易池配置

FISCO BCOS将交易池容量配置开放给用户,用户可根据自己的业务规模需求、稳定性需求以

及节点的硬件配置动态调整交易池配置。

交易池容量限制

为防止过多交易堆积在交易池内占用太多内存,FISCO BCOS提供了[tx_pool].limit和

[tx_pool].memory_limit两个配置项来限制交易池容量:

• [tx_pool].limit: 限制交易池内可以容纳的最大交易数目,默认为150000,超过该限制后,客户端发到节点的交易会被拒绝。

• [tx_pool].memory_limit: 交易池内交易占用的内存大小限制,默认为512MB,超过该限制后,客户端发到节点的交易会被拒绝。

交易池推送线程数配置

为提升区块链系统性能,FISCO BCOS采用了交易回执异步推送逻辑,当交易上链后,交易池内的推送线程会把交易上链的回执异步推送给客户端,为防止推送线程过多占用较多的系统资源,也为了防止推送线程过少影响交易推送的时效性,FISCO BCOS提供了

[tx_pool].notify_worker_num配置项来配置异步推送线程数目:

• [tx_pool].notify_worker_num:异步推送线程数目,默认为2,建议该值不超过8

组员节点管理

FISCO BCOS引入了游离节点、观察者节点和共识节点,这三种节点类型可通过控制台相互转换。

组员

共识节点:参与共识的节点,拥有群组的所有数据(搭链时默认都生成共识节点)。

观察者节点:不参与共识,但能实时同步链上数据的节点。

非组员

游离节点:已启动,待等待加入群组的节点。处在一种暂时的节点状态,不能获取链上的数据

配置CA黑白名单

介绍了如何通过配置CA黑白名单,实现拒绝与无关的链的节点或指定节点建立连接,或实现仅允许与白名单中的节点建立链接。

存储加密

介绍了设置落盘加密的流程,保证了运行联盟链的数据在硬盘上的安全性

账户权限控制

介绍了基于角色的账户权限控制方法。

设置SDK白名单

介绍了设计节点所服务的SDK证书白名单方法。

Fisco BCOS 测试

1.通过Java SDK进行压力测试

(以在Ubuntu系统中安装OpenJDK 11为例)

1
2
3
4
5
6
7
8
# 安装open JDK 11
$ sudo apt install openjdk-11-jdk
# 验证Java版本
$ java --version
# 输出以下内容:
# openjdk 11.0.10 2021-01-19
# OpenJDK Runtime Environment (build 11.0.10+9-Ubuntu-0ubuntu1.20.04)
# OpenJDK 64-Bit Server VM (build 11.0.10+9-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

编译源码

1
2
3
4
5
6
7
# 下载源码
$ git clone https://github.com/FISCO-BCOS/java-sdk-demo
$ cd java-sdk-demo
# 切换到2.0版本
$ git checkout main-2.0
# 编译源码
$ ./gradlew build

配置Demo

1
2
3
4
5
6
7
8
$ cd dist
# 拷贝证书(假设SDK证书位于~/fisco/nodes/127.0.0.1/sdk目录,请根据实际情况更改路径)
$ cp -r ~/fisco/nodes/127.0.0.1/sdk/* conf
# 拷贝配置文件
# 注:
# 默认搭建的FISCO BCOS区块链系统Channel端口是20200,若修改了该端口,请同步修改config.toml
中的[network.peers]配置选项
$ cp conf/config-example.toml conf/config.toml

执行示例压力测试程序

1
2
3
4
5
6
7
8
9
10
# CRUD测试插入1000笔#CRUD合约压测
# 压测CRUD insert
# count:压测的交易总量#tps:压测QPS
# groupId:压测群组
java -cp 'conf/: lib/*: apps/*’ org.fisco. bcos. sdk.demo. perf. PerformanceTable
[insert] [count][tps)
[groupId]
示例
java -cp 'conf/: lib/*:apps/*’ org.fisco.bcos. sdk. demo. perf.PerformanceTable
insert 1000 100 1