博客链接:https://hello2mao.github.io/2019/12/02/quorum-permission-model/
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/