博客鏈接: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/