节点准入管理介绍
本文档对节点准入管理进行介绍性说明,实践方法参见《节点准入管理操作文档》。
概述
单链多账本
区块链技术是一种去中心化、公开透明的分布式数据存储技术,能够降低信任成本,实现安全可靠的数据交互。然而区块链的交易数据面临着隐私泄露威胁:
- 对于公有链,一节点可任意加入网络,从全局账本中获得所有数据;
- 对于联盟链,虽有网络准入机制,但节点加入区块链后即可获取全局账本的数据。作为联盟链的FISCO BCOS,对链上隐私这一问题,提出了单链多账本的解决方案。FISCO BCOS通过引入群组概念,使联盟链从原有一链一账本的存储/执行机制扩展为一链多账本的存储/执行机制,基于群组维度实现同一条链上的数据隔离和保密。
配置类型
划分维度 | 配置类型 | |
影响范围 | 网络配置 | 全局性质的配置,节点的配置影响该节点所在的整个网络,节点对整个网络使用同一份配置,文件名为config.* |
群组配置 | 节点的配置影响该节点所在的单个群组,每个群组各有一份配置,文件名为group.X.*,其中X为群组号 | |
是否可改 | 固定配置 | 只使用首次配置内容,后续对配置的修改无效,文件后缀为.genesis |
可改配置 | 配置后续可改动,节点重启生效,文件后缀为.ini | |
存放位置 | 本地存储 | 配置存放在本地文件,用户可直接修改,用户修改自身文件能重启生效的配置项 |
链上存储 | 配置存放在区块链上,对其修改需群组共识,目前没有需全网共识的内容,需新链重置或通过交易修改生效的配置项 |
节点准入配置项
涉及节点转入管理相关的配置项有:P2P节点连接列表,节点证书,CA黑名单,群组节点初始列表和群组节点系统表。
P2P节点连接列表 | 记录本节点期望与哪些节点建立网络通信 | 网络配置 | 可改配置 | 本地存储 |
节点证书 | 证明自己是由可信第三方许可的节点 | 网络配置 | 可改配置 | 本地存储 |
CA黑名单 | 记录本节点禁止与哪些节点建立网络通信 | 网络配置 | 可改配置 | 本地存储 |
群组节点初始列表 | 记录创世块阶段参与共识/同步的节点列表 | 群组配置 | 固定配置 | 本地存储 |
群组节点系统表 | 记录当前参与一群组共识/同步的节点列表 | 群组配置 | 可改配置 | 链上存储 |
模块架构
首次初始化流程
节点在首次启动时,对其所属的各个群组,以群组为单位将固定配置文件的内容写入第0块并直接提交上链。初始化的具体逻辑为:
接口及配置描述
节点配置文件层级
config.ini
、群组固定配置文件group.N.genesis
和群组可改配置文件group.N.ini
,其中N
为节点所在的群组号。对于网络/群组可改配置文件,如果文件中没有显式定义某配置项的值,程序将使用该配置项的默认值。
配置文件示例
对于网络可改配置文件config.ini
,节点准入管理涉及P2P节点连接列表[p2p]
、节点证书[network_security]
、CA黑名单[certificate_blacklist]
。[certificate_blacklist]
可缺少。配置项举例如下:
- [p2p]
- ;p2p listen ip
- listen_ip=0.0.0.0
- ;p2p listen port
- listen_port=30300
- ;nodes to connect
- node.0=127.0.0.1:30300
- node.1=127.0.0.1:30301
- node.2=127.0.0.1:30302
- node.3=127.0.0.1:30303
- ;certificate blacklist
- [certificate_blacklist]
- ;crl.0 should be nodeid, nodeid's length is 128
- ;crl.0=
- ;certificate configuration
- [network_security]
- ;directory the certificates located in
- data_path=conf/
- ;the node private key file
- key=node.key
- ;the node certificate file
- cert=node.crt
- ;the ca certificate file
- ca_cert=ca.crt
对于群组固定配置文件group.N.genesis
,节点准入管理涉及群组节点初始列表[consensus]。配置项举例如下:
- ;consensus configuration
- [consensus]
- ;consensus algorithm type, now support PBFT(consensus_type=pbft) and Raft(consensus_type=raft)
- consensus_type=pbft
- ;the max number of transactions of a block
- max_trans_num=1000
- ;the node id of leaders
- node.0=79d3d4d78a747b1b9e59a3eb248281ee286d49614e3ca5b2ce3697be2da72cfa82dcd314c0f04e1f590da8db0b97de466bd08e27eaa13f85df9b60e54d6a1ec8
- node.1=da527a4b2aeae1d354102c6c3ffdfb54922a092cc9acbdd555858ef89032d7be1be499b6cf9a703e546462529ed9ea26f5dd847110ff3887137541bc651f1c32
- node.2=160ba08898e1e25b31e24c2c4e3c75eed996ec56bda96043aa8f27723889ab774b60e969d9bd25d70ea8bb8779b7070521d9bd775dc7636f4b2b800d2fc8c7dd
- node.3=a968f1e148e4b51926c5354e424acf932d61f67419cf7c5c00c7cb926057c323bee839d27fe9ad6c75386df52ae2b30b2e7ba152b0023979d25dee25b20c627f
群组节点系统表定义
name | string | No | PRI | 各行同一值,分布式存储基于此key实现全表查询 |
type | string | No | 节点类型(sealer/observer) | |
nodeid | string | No | 节点NodeID | |
enable_num | string | No | 该节点类型生效的区块高度 | |
_status | string | No | 分布式存储通用字段,“0”可用“1”删除 |
群组系统表接口定义
群组系统表实现群组层的白名单机制(对比CA黑名单实现网络的黑名单机制)。群组系统表提供的接口有:
- contract ConsensusSystemTable
- {
- // 修改一节点为共识节点
- function addSealer(string nodeID) public returns(int256);
- // 修改一节点为观察节点
- function addObserver(string nodeID) public returns(int256);
- // 把该节点从群组系统表中移除
- function remove(string nodeID) public returns(int256);
- }
功能展望
- 可改配置目前为修改后重启生效,后续可实现动态加载,修改实时生效;
- CA黑名单目前实现了基于节点的黑名单,后续可考虑基于机构的黑名单。
当前内容版权归 FISCO BCOS 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 FISCO BCOS .