1. 概述
Quorum在最新发布的v2.3.0中增强了区块链的权限模型,详见v.2.3.0
在以前的版本中,节点的许可管理是通过静态文件管理的。当节点启动时,如果设置了–permissioned参数,节点就会查找文件名为permissioned-nodes.json的文件,此文件包含此节点可以连接并接受来自其连接的节点白名单。因此,启用权限后,只有permissioned-nodes.json文件中列出的节点才能成为网络的一部分。如果指定了–permissioned参数,但没有节点添加到permissioned-nodes.json文件,则该节点既不能连接到任何节点也不能接受任何接入的连接。
这一个基于静态文件的权限模型显然存在很多问题,所以在最新的v2.3.0中,quorum修改为基于智能合约的RBAC权限模型,从而提供了更多的灵活性。
2. 新的权限模型概览
基于智能合约的RBAC权限模型能够把整个quorum网络按如下图所示的维度进行划分:

其中:
Network:整个quorum网络Organization:组织Sub Organization:子组织Account:账户Voter:能够进行投票的账户Role:角色Node:一个quorum节点
有以下几点值得注意:
- 联盟链划分为多个
组织,组织内还可以划分子组织。 - 联盟管理员通过
投票和表决来批准新的组织加入quorum网路。 - 组织管理员能够进行
RBAC的管理。 - 子组织也能进行自己的
RBAC管理。
这样以后,整个quorum网络的组织管理的拓扑如下:

3. 实现原理
整个基于RBAC的权限模型的实现完全是基于智能合约实现的。
在智能合约的设计上,采取了逻辑和数据的分离,通过proxy来访问,从而可以做到智能合约逻辑部分的升级。如下所示:

PermissionsUpgradable.sol:存储逻辑合约地址的合约PermissionsInterface.sol:对外提供接口,对内proxy到逻辑合约PermissionsImplementation.sol:逻辑合约,合约实际逻辑都在这个合约内OrgManager.sol:数据合约,存储组织相关数据AccountManager.sol:数据合约,存储账户相关数据NodeManager.sol:数据合约,存储节点先关数据RoleManager.sol:数据合约,存储角色先关数据VoterManager.sol:数据合约,存储投票人先关数据
4. 启动
- 部署所有智能合约
- 创建配置文件:
permission-config.json - 初始化
PermissionsUpgradable.sol的init方法
5. API
新的权限管理提供了很对新的API,详见:https://docs.goquorum.com/en/latest/Permissioning/Permissioning%20apis/