摘要:系統(tǒng)合約介紹一鍵部署區(qū)塊鏈,快速體驗系統(tǒng)合約設(shè)計概述區(qū)塊鏈為了滿足準(zhǔn)入控制身份認(rèn)證配置管理權(quán)限管理等需求,在網(wǎng)絡(luò)啟動之初,會部署一套功能強(qiáng)大結(jié)構(gòu)靈活且支持自定義擴(kuò)展的智能合約,統(tǒng)稱系統(tǒng)合約。它對區(qū)塊鏈核心提供了統(tǒng)一的權(quán)限檢查接口。
FISCO BCOS系統(tǒng)合約介紹
一鍵部署區(qū)塊鏈,快速體驗系統(tǒng)合約
設(shè)計概述FISCO BCOS區(qū)塊鏈為了滿足準(zhǔn)入控制、身份認(rèn)證、配置管理、權(quán)限管理等需求,在網(wǎng)絡(luò)啟動之初,會部署一套功能強(qiáng)大、結(jié)構(gòu)靈活且支持自定義擴(kuò)展的智能合約,統(tǒng)稱系統(tǒng)合約。
系統(tǒng)合約原則上由區(qū)塊鏈管理員在網(wǎng)絡(luò)啟動之初部署全網(wǎng)生效。若是在網(wǎng)絡(luò)運行期間重新部署變更升級,則需要在全網(wǎng)所有節(jié)點許可的情況下由區(qū)塊鏈管理員來執(zhí)行操作。
當(dāng)前FISCO BCOS系統(tǒng)合約主要有五個模塊,系統(tǒng)代理模塊、節(jié)點管理模塊、機(jī)構(gòu)證書模塊、權(quán)限管理模塊、全網(wǎng)配置模塊。系統(tǒng)合約的模塊可以根據(jù)需要自定義擴(kuò)展,它既可以供區(qū)塊鏈核心調(diào)用也可以對DAPP提供服務(wù)。每個模塊由一個或多個智能合約來實現(xiàn)。模塊結(jié)構(gòu)圖如下:
模塊圖
實現(xiàn)概述當(dāng)前FISCO BCOS對系統(tǒng)代理模塊、節(jié)點管理模塊、機(jī)構(gòu)證書模塊、權(quán)限管理模塊、全網(wǎng)配置模塊都做了對應(yīng)的合約實現(xiàn)。合約源代碼目錄為systemcontractv2/。下面依次介紹各個合約實現(xiàn)的接口與邏輯。
系統(tǒng)代理合約SystemProxy.sol是系統(tǒng)代理模塊的實現(xiàn)合約。它實現(xiàn)了路由到合約地址的命名服務(wù),提供了系統(tǒng)合約的統(tǒng)一入口。內(nèi)部實現(xiàn)中是通過mapping類型成員變量_routes來維護(hù)所有的路由表信息。路由表信息項的數(shù)據(jù)結(jié)構(gòu)主要是:
struct SystemContract { address _addr; #合約地址 bool _cache; #緩存標(biāo)志位 uint _blocknumber; #生效區(qū)塊高度 }
主要接口如下:
接口 | 輸入?yún)?shù) | 輸出參數(shù) | 說明 |
---|---|---|---|
getRoute | string key#路由名稱 | address, bool,uint # 合約地址,緩存標(biāo)志位,生效區(qū)塊高度 | 獲取路由信息 |
setRoute | string key, address addr, bool cache# 路由名稱,合約地址,緩存標(biāo)志位,生效區(qū)塊高度 | 無 | 設(shè)置路由信息,若該路由名稱已存在,則覆蓋 |
NodeAction.sol是節(jié)點管理模塊的實現(xiàn)合約。它實現(xiàn)了對網(wǎng)絡(luò)中所有節(jié)點列表信息的登記、管理、維護(hù)功能。每當(dāng)網(wǎng)絡(luò)中有節(jié)點加入或退出都必須與節(jié)點管理合約進(jìn)行交互。
在FISCO BCOS中節(jié)點分為三種類型:核心節(jié)點、全節(jié)點、輕節(jié)點。
enum NodeType{ None, Core, //核心 Full, //全節(jié)點 Light //輕節(jié)點 }
節(jié)點信息的數(shù)據(jù)結(jié)構(gòu)是:
struct NodeInfo{ string id; #節(jié)點身份ID string ip; #機(jī)器IP uint port; #機(jī)器端口 NodeType category; #節(jié)點類型 string desc; #節(jié)點描述 string CAhash; #節(jié)點機(jī)構(gòu)證書哈希 string agencyinfo; #節(jié)點其他信息 uint idx; #節(jié)點序號 uint blocknumber;#區(qū)塊高度 }
主要接口如下:
接口 | 輸入?yún)?shù) | 輸出參數(shù) | 說明 |
---|---|---|---|
registerNode | string _id,string _ip,uint _port,NodeType _category,string _desc,string _CAhash,string _agencyinfo,uint _idx #節(jié)點身份ID、IP、端口、節(jié)點類型、節(jié)點描述、節(jié)點CA哈希、節(jié)點agency、節(jié)點序號 | bool #注冊結(jié)果 | 注冊節(jié)點 ,若該節(jié)點信息已存在,則忽略 |
cancelNode | string _id #節(jié)點身份ID | bool #注冊結(jié)果 | 注銷節(jié)點,若該節(jié)點信息不存在,則忽略 |
CAAction.sol是機(jī)構(gòu)證書模塊的實現(xiàn)合約。它實現(xiàn)了對網(wǎng)絡(luò)中所有節(jié)點的機(jī)構(gòu)證書信息的登記、管理、維護(hù)功能。當(dāng)網(wǎng)絡(luò)啟用機(jī)構(gòu)證書驗證功能的情況下,網(wǎng)絡(luò)中節(jié)點加入或退出都需要與機(jī)構(gòu)證書合約進(jìn)行交互。
機(jī)構(gòu)證書的數(shù)據(jù)結(jié)構(gòu)是:
struct CaInfo{ string hash; #節(jié)點機(jī)構(gòu)證書哈希 string pubkey; #證書公鑰 string orgname; #機(jī)構(gòu)名稱 uint notbefore; #證書啟用日期 uint notafter; #證書失效時間 CaStatus status; #證書狀態(tài) string whitelist;#IP白名單 string blacklist;#IP黑名單 uint blocknumber;#生效區(qū)塊高度 }
主要接口如下:
接口 | 輸入?yún)?shù) | 輸出參數(shù) | 說明 |
---|---|---|---|
update | string _hash,string _pubkey,string _orgname,uint _notbefore,uint _notafter,CaStatus _status,string _whitelist,string _blacklist # 證書哈希、證書公鑰、機(jī)構(gòu)名稱、 證書啟用日期、 證書失效時間、證書狀態(tài)、IP白名單、IP黑名單 | bool #更新結(jié)果 | 更新證書信息, 若該證書信息不存在,則新建證書記錄 |
get | string _hash#證書哈希 | string,string,string,uint,uint,CaStatus,uint# 證書哈希、證書公鑰、機(jī)構(gòu)名稱、證書啟用日期、證書失效時間、證書狀態(tài)、生效區(qū)塊塊號 | 查詢證書信息 |
FISCO BCOS基于角色的身份權(quán)限設(shè)計有三要點:一個外部賬戶只屬于一個角色;一個角色擁有一個權(quán)限項列表; 一個權(quán)限項由合約地址加上合約接口來唯一標(biāo)識。
當(dāng)前FISCO BCOS權(quán)限管理模塊主要由TransactionFilterChain.sol、TransactionFilterBase.sol、AuthorityFilter.sol、Group.sol四個合約來實現(xiàn)。
TransactionFilterChain是對Filter模型的實現(xiàn)框架。它在內(nèi)部維護(hù)了一個實現(xiàn)繼承于TransactionFilterBase的Filter合約地址列表。它對區(qū)塊鏈核心提供了統(tǒng)一的權(quán)限檢查接口process。process執(zhí)行過程中會對Filter合約地址列表中的所有Filter依次執(zhí)行process函數(shù),以完成所有需要的權(quán)限檢查。
TransactionFilterBase是Filter的基類合約。所有Filter必須要實現(xiàn)它的process接口。AuthorityFilter是繼承于TransactionFilterBase的角色權(quán)限Filter實現(xiàn)。它的process接口實現(xiàn)了對用戶所屬角色組的權(quán)限項進(jìn)行檢查邏輯。
Group是對角色的實現(xiàn)。它內(nèi)部維護(hù)了該角色的所有權(quán)限項的mapping標(biāo)志位。
主要接口如下:
合約 | 接口 | 輸入?yún)?shù) | 輸出參數(shù) | 說明 |
---|---|---|---|---|
TransactionFilterBase | process | address origin, address from, address to, string func, string input# 用戶外部賬戶、交易發(fā)起賬戶、合約地址、合約接口、交易輸入數(shù)據(jù) | bool#處理結(jié)果 | 權(quán)限檢查 |
Group | setPermission | address to, string func, bool perrmission# 合約地址、合約接口、權(quán)限標(biāo)記 | bool#處理結(jié)果 | 設(shè)置角色權(quán)限項 |
ConfigAction.sol是全網(wǎng)配置模塊的實現(xiàn)合約。它維護(hù)了FISCO BCOS區(qū)塊鏈中全網(wǎng)運行的可配置信息。 配置信息可以通過交易廣播上鏈來達(dá)到全網(wǎng)配置的一致性更新。原則上只能由區(qū)塊鏈管理員來發(fā)出全網(wǎng)配置更新交易。
ConfigAction.sol的內(nèi)部實現(xiàn)中維護(hù)了配置項信息的mapping 成員變量。
主要接口如下:
接口 | 輸入?yún)?shù) | 輸出參數(shù) | 說明 |
---|---|---|---|
set | string key, string value# 配置項、配置值 | 無 | 設(shè)置配置項 |
get | string key #配置項 | string, uint# 配置值、生效區(qū)塊高度 | 查詢配置值 |
當(dāng)前FISCO BCOS主要有以下全網(wǎng)配置項:
配置項 | 說明 | 默認(rèn)值 | 推薦值 |
---|---|---|---|
maxBlockHeadGas | 塊最大GAS (16進(jìn)制) | 200000000 | 20000000000 |
intervalBlockTime | 塊間隔(ms) (16進(jìn)制) | 1000 | 1000 |
maxBlockTranscations | 塊最大交易數(shù)(16進(jìn)制) | 1000 | 1000 |
maxNonceCheckBlock | 交易nonce檢查最大塊范圍(16進(jìn)制) | 1000 | 1000 |
maxBlockLimit | blockLimit超過當(dāng)前塊號的偏移最大值(16進(jìn)制) | 1000 | 1000 |
maxTranscationGas | 交易的最大gas(16進(jìn)制) | 20000000 | 20000000 |
CAVerify | CA驗證開關(guān) | FALSE | FALSE |
假設(shè)業(yè)務(wù)需要利用系統(tǒng)合約框架,自定義業(yè)務(wù)配置合約以對業(yè)務(wù)相關(guān)合約提供配置服務(wù)。大體可以參考以下步驟來擴(kuò)展:
根據(jù)業(yè)務(wù)合約需求,實現(xiàn)業(yè)務(wù)配置合約的設(shè)置配置項接口set和查詢配置值接口get。
部署業(yè)務(wù)配置合約,獲得業(yè)務(wù)配置合約鏈上地址。
調(diào)用系統(tǒng)代理合約SystemProxy的setRoute接口,將業(yè)務(wù)配置合約地址注冊到路由表中。
至此,業(yè)務(wù)配置合約已經(jīng)完成在系統(tǒng)代理合約的路由注冊,已可在業(yè)務(wù)交易中調(diào)用。
業(yè)務(wù)配置合約的使用方法:
調(diào)用SystemProxy的getRoute接口運行時獲得業(yè)務(wù)配置合約地址。
通過業(yè)務(wù)配置合約地址調(diào)用查詢配置值接口get獲得配置值。
示例2-自定義業(yè)務(wù)權(quán)限Filter合約假設(shè)業(yè)務(wù)需要增加業(yè)務(wù)權(quán)限校驗邏輯,則可以利用權(quán)限管理合約的Filter機(jī)制來無縫擴(kuò)展。大體可以參考以下步驟來擴(kuò)展:
繼承于TransactionFilterBase實現(xiàn)一個業(yè)務(wù)權(quán)限Filter合約,業(yè)務(wù)權(quán)限Filter合約根據(jù)業(yè)務(wù)需要的權(quán)限校驗邏輯實現(xiàn)process接口。
部署業(yè)務(wù)權(quán)限Filter合約,獲得對應(yīng)的合約地址。
調(diào)用系統(tǒng)代理合約SystemProxy的getRoute接口,獲得TransactionFilterChain合約地址。
調(diào)用TransactionFilterChain合約的addFilter接口,將業(yè)務(wù)權(quán)限Filter合約地址注冊到Filter合約列表中。
至此,業(yè)務(wù)權(quán)限Filter合約已經(jīng)啟用。
獲取更多精彩內(nèi)容
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/23968.html
摘要:和比特幣協(xié)議有所不同的是,以太坊的設(shè)計十分靈活,極具適應(yīng)性。超級賬本區(qū)塊鏈的商業(yè)應(yīng)用超級賬本超級賬本是基金會下的眾多項目中的一個。證書頒發(fā)機(jī)構(gòu)負(fù)責(zé)簽發(fā)撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 從比特幣開始 一個故事告訴你比特幣的原理及運作機(jī)制 這篇文章的定位會比較科普,盡量用類比的方法將比特幣的基本原理講出來...
摘要:以太坊背后的主要人物是。以太坊通過在區(qū)塊鏈上引入智能合約,徹底改變了加密世界。以太坊使用名為以太坊虛擬機(jī)的虛擬機(jī)執(zhí)行其智能合約。以太坊最終將利用協(xié)議轉(zhuǎn)向權(quán)益證明。截至目前,以太坊在可擴(kuò)展性方面都失敗了。 不同的區(qū)塊鏈智能合約和區(qū)塊鏈技術(shù)現(xiàn)在風(fēng)靡一時。越來越多的人出于某種原因試圖進(jìn)入這個神奇的世界。如果你是這項技術(shù)的新手并正在尋找基于區(qū)塊鏈的開發(fā)平臺的快速入門,那么本指南非常適合你。我們...
摘要:在協(xié)議結(jié)束時,智能合約被視為已履行并仍存儲在區(qū)塊鏈網(wǎng)絡(luò)中。這組條件和事件代表了最基本的一次性智能合約。智能合約用例智能合約越來越受歡迎,并已在各種區(qū)塊鏈項目中實施。 與區(qū)塊鏈技術(shù)一樣,智能合約在商業(yè)領(lǐng)域也非常有價值。 為了讓我們的讀者徹底了解智能合約是什么以及它們?nèi)绾斡绊懍F(xiàn)代商業(yè)的交易方式,我們準(zhǔn)備了本指南。 集中商業(yè)模式正在給去中心化的模式讓路 傳統(tǒng)的商業(yè)關(guān)系模型都是集中式的,始終存...
摘要:在協(xié)議結(jié)束時,智能合約被視為已履行并仍存儲在區(qū)塊鏈網(wǎng)絡(luò)中。這組條件和事件代表了最基本的一次性智能合約。智能合約用例智能合約越來越受歡迎,并已在各種區(qū)塊鏈項目中實施。 與區(qū)塊鏈技術(shù)一樣,智能合約在商業(yè)領(lǐng)域也非常有價值。 為了讓我們的讀者徹底了解智能合約是什么以及它們?nèi)绾斡绊懍F(xiàn)代商業(yè)的交易方式,我們準(zhǔn)備了本指南。 集中商業(yè)模式正在給去中心化的模式讓路 傳統(tǒng)的商業(yè)關(guān)系模型都是集中式的,始終存...
閱讀 1382·2021-11-22 15:25
閱讀 3390·2021-10-21 09:38
閱讀 1600·2021-10-19 13:21
閱讀 1025·2021-09-06 15:00
閱讀 1705·2019-08-30 15:44
閱讀 2613·2019-08-29 15:40
閱讀 3480·2019-08-29 13:44
閱讀 2090·2019-08-26 16:56