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/