BCOS系统合约介绍
- BCOS系統合約介紹
- 設計概述
- 實現概述
- 系統代理合約
- 節點管理合約
- 機構證書合約
- 權限管理合約
- 全網配置合約
- 自定義擴展
- 示例1-自定義業務配置合約
- 示例2-自定義業務權限Filter合約
設計概述
BCOS區塊鏈為了滿足準入控制、身份認證、配置管理、權限管理等需求,在網絡啟動之初,會部署一套功能強大、結構靈活且支持自定義擴展的智能合約,統稱系統合約。
系統合約原則上由區塊鏈管理員在網絡啟動之初部署全網生效。若是在網絡運行期間重新部署變更升級,則需要在全網所有節點許可的情況下由區塊鏈管理員來執行操作。
當前BCOS系統合約主要有五個模塊,系統代理模塊、節點管理模塊、機構證書模塊、權限管理模塊、全網配置模塊。系統合約模塊可以根據需要自定義擴展,它既可以供區塊鏈核心調用也可以對DAPP提供服務。每個模塊由一個或多個智能合約來實現。模塊結構圖如下:
實現概述
當前BCOS對系統代理模塊、節點管理模塊、機構證書模塊、權限管理模塊、全網配置模塊都做了對應的合約實現。合約源代碼目錄為systemcontractv2/。下面依次介紹各個合約實現的接口與邏輯。
系統代理合約
SystemProxy.sol是系統代理模塊的實現合約。它實現了路由到合約地址的命名服務,提供了系統合約的統一入口。內部實現中是通過mapping類型成員變量_routes來維護所有的路由表信息。路由表信息項的數據結構主要是:
struct SystemContract {address _addr; #合約地址bool _cache; #緩存標志位uint _blocknumber; #生效區塊高度}主要接口如下:
| getRoute | string key#路由名稱 | address, bool,uint # 合約地址,緩存標志位,生效區塊高度 | 獲取路由信息 |
| setRoute | string key, address addr, bool cache# 路由名稱,合約地址,緩存標志位,生效區塊高度 | 無 | 設置路由信息,若該路由名稱已存在,則覆蓋 |
節點管理合約
NodeAction.sol是節點管理模塊的實現合約。它實現了對網絡中所有節點列表信息的登記、管理、維護功能。每當網絡中有節點加入或退出都必須與節點管理合約進行交互。
在BCOS中節點分為三種類型:核心節點、全節點、輕節點。
enum NodeType{None,Core, //核心 Full, //全節點 Light //輕節點 }節點信息的數據結構是:
struct NodeInfo{string id; #節點身份ID string ip; #機器IP uint port; #機器端口NodeType category; #節點類型string desc; #節點描述 string CAhash; #節點機構證書哈希string agencyinfo; #節點其他信息uint idx; #節點序號uint blocknumber;#區塊高度}主要接口如下:
| registerNode | string _id,string _ip,uint _port,NodeType _category,string _desc,string _CAhash,string _agencyinfo,uint _idx #節點身份ID、IP、端口、節點類型、節點描述、節點CA哈希、節點agency、節點序號 | bool #注冊結果 | 注冊節點 ,若該節點信息已存在,則忽略 |
| cancelNode | string _id #節點身份ID | bool #注冊結果 | 注銷節點,若該節點信息不存在,則忽略 |
機構證書合約
CAAction.sol是機構證書模塊的實現合約。它實現了對網絡中所有節點的機構證書信息的登記、管理、維護功能。當網絡啟用機構證書驗證功能的情況下,網絡中節點加入或退出都需要與機構證書合約進行交互。
機構證書的數據結構是:
struct CaInfo{string hash; #節點機構證書哈希string pubkey; #證書公鑰string orgname; #機構名稱uint notbefore; #證書啟用日期uint notafter; #證書失效時間CaStatus status; #證書狀態string whitelist;#IP白名單string blacklist;#IP黑名單uint blocknumber;#生效區塊高度}主要接口如下:
| update | string _hash,string _pubkey,string _orgname,uint _notbefore,uint _notafter,CaStatus _status,string _whitelist,string _blacklist # 證書哈希、證書公鑰、機構名稱、 證書啟用日期、 證書失效時間、證書狀態、IP白名單、IP黑名單 | bool #更新結果 | 更新證書信息, 若該證書信息不存在,則新建證書記錄 |
| get | string _hash#證書哈希 | string,string,string,uint,uint,CaStatus,uint# 證書哈希、證書公鑰、機構名稱、證書啟用日期、證書失效時間、證書狀態、生效區塊塊號 | 查詢證書信息 |
權限管理合約
BCOS基于角色的身份權限設計有三要點:一個外部賬戶只屬于一個角色;一個角色擁有一個權限項列表; 一個權限項由合約地址加上合約接口來唯一標識。
當前BCOS權限管理模塊主要由TransactionFilterChain.sol、TransactionFilterBase.sol、AuthorityFilter.sol、Group.sol四個合約來實現。
TransactionFilterChain是對Filter模型的實現框架。它在內部維護了一個實現繼承于TransactionFilterBase的Filter合約地址列表。它對區塊鏈核心提供了統一的權限檢查接口process。process執行過程中會對Filter合約地址列表中的所有Filter依次執行process函數,以完成所有需要的權限檢查。
TransactionFilterBase是Filter的基類合約。所有Filter必須要實現它的process接口。AuthorityFilter是繼承于TransactionFilterBase的角色權限Filter實現。它的process接口實現了對用戶所屬角色組的權限項進行檢查邏輯。
Group是對角色的實現。它內部維護了該角色的所有權限項的mapping標志位。
主要接口如下:
| TransactionFilterBase | process | address origin, address from, address to, string func, string input# 用戶外部賬戶、交易發起賬戶、合約地址、合約接口、交易輸入數據 | bool#處理結果 | 權限檢查 |
| Group | setPermission | address to, string func, bool perrmission# 合約地址、合約接口、權限標記 | bool#處理結果 | 設置角色權限項 |
全網配置合約
ConfigAction.sol是全網配置模塊的實現合約。它維護了BCOS區塊鏈中全網運行的可配置信息。 配置信息可以通過交易廣播上鏈來達到全網配置的一致性更新。原則上只能由區塊鏈管理員來發出全網配置更新交易。
ConfigAction.sol的內部實現中維護了配置項信息的mapping 成員變量。
主要接口如下:
| set | string key, string value# 配置項、配置值 | 無 | 設置配置項 |
| get | string key #配置項 | string, uint# 配置值、生效區塊高度 | 查詢配置值 |
當前BCOS主要有以下全網配置項:
| maxBlockHeadGas | 塊最大GAS (16進制) | 200000000 | 20000000000 |
| intervalBlockTime | 塊間隔(ms) (16進制) | 1000 | 1000 |
| maxBlockTranscations | 塊最大交易數(16進制) | 1000 | 1000 |
| maxNonceCheckBlock | 交易nonce檢查最大塊范圍(16進制) | 1000 | 1000 |
| maxBlockLimit | blockLimit超過當前塊號的偏移最大值(16進制) | 1000 | 1000 |
| maxTranscationGas | 交易的最大gas(16進制) | 20000000 | 20000000 |
| CAVerify | CA驗證開關 | FALSE | FALSE |
自定義擴展
示例1-自定義業務配置合約
假設業務需要利用系統合約框架,自定義業務配置合約以對業務相關合約提供配置服務。大體可以參考以下步驟來擴展:
業務配置合約的使用方法:
示例2-自定義業務權限Filter合約
假設業務需要增加業務權限校驗邏輯,則可以利用權限管理合約的Filter機制來無縫擴展。大體可以參考以下步驟來擴展:
https://github.com/toxotguo/BCOS-Development-Guide/blob/master/BCOS%E7%B3%BB%E7%BB%9F%E5%90%88%E7%BA%A6%E4%BB%8B%E7%BB%8D.md
總結
以上是生活随笔為你收集整理的BCOS系统合约介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跨链资产原子转移工具包 Decred a
- 下一篇: 重构智能合约(上):非确定性的幽灵