日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

BCOS系统合约介绍

發(fā)布時(shí)間:2025/3/15 windows 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BCOS系统合约介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • BCOS系統(tǒng)合約介紹
    • 設(shè)計(jì)概述
    • 實(shí)現(xiàn)概述
      • 系統(tǒng)代理合約
      • 節(jié)點(diǎn)管理合約
      • 機(jī)構(gòu)證書合約
      • 權(quán)限管理合約
      • 全網(wǎng)配置合約
    • 自定義擴(kuò)展
      • 示例1-自定義業(yè)務(wù)配置合約
      • 示例2-自定義業(yè)務(wù)權(quán)限Filter合約

設(shè)計(jì)概述

BCOS區(qū)塊鏈為了滿足準(zhǔn)入控制、身份認(rèn)證、配置管理、權(quán)限管理等需求,在網(wǎng)絡(luò)啟動(dòng)之初,會(huì)部署一套功能強(qiáng)大、結(jié)構(gòu)靈活且支持自定義擴(kuò)展的智能合約,統(tǒng)稱系統(tǒng)合約。

系統(tǒng)合約原則上由區(qū)塊鏈管理員在網(wǎng)絡(luò)啟動(dòng)之初部署全網(wǎng)生效。若是在網(wǎng)絡(luò)運(yùn)行期間重新部署變更升級(jí),則需要在全網(wǎng)所有節(jié)點(diǎn)許可的情況下由區(qū)塊鏈管理員來執(zhí)行操作。

當(dāng)前BCOS系統(tǒng)合約主要有五個(gè)模塊,系統(tǒng)代理模塊、節(jié)點(diǎn)管理模塊、機(jī)構(gòu)證書模塊、權(quán)限管理模塊、全網(wǎng)配置模塊。系統(tǒng)合約模塊可以根據(jù)需要自定義擴(kuò)展,它既可以供區(qū)塊鏈核心調(diào)用也可以對(duì)DAPP提供服務(wù)。每個(gè)模塊由一個(gè)或多個(gè)智能合約來實(shí)現(xiàn)。模塊結(jié)構(gòu)圖如下:

實(shí)現(xiàn)概述

當(dāng)前BCOS對(duì)系統(tǒng)代理模塊、節(jié)點(diǎn)管理模塊、機(jī)構(gòu)證書模塊、權(quán)限管理模塊、全網(wǎng)配置模塊都做了對(duì)應(yīng)的合約實(shí)現(xiàn)。合約源代碼目錄為systemcontractv2/。下面依次介紹各個(gè)合約實(shí)現(xiàn)的接口與邏輯。

系統(tǒng)代理合約

SystemProxy.sol是系統(tǒng)代理模塊的實(shí)現(xiàn)合約。它實(shí)現(xiàn)了路由到合約地址的命名服務(wù),提供了系統(tǒng)合約的統(tǒng)一入口。內(nèi)部實(shí)現(xiàn)中是通過mapping類型成員變量_routes來維護(hù)所有的路由表信息。路由表信息項(xiàng)的數(shù)據(jù)結(jié)構(gòu)主要是:

struct SystemContract {address _addr; #合約地址bool _cache; #緩存標(biāo)志位uint _blocknumber; #生效區(qū)塊高度}

主要接口如下:

接口輸入?yún)?shù)輸出參數(shù)說明
getRoutestring key#路由名稱address, bool,uint # 合約地址,緩存標(biāo)志位,生效區(qū)塊高度獲取路由信息
setRoutestring key, address addr, bool cache# 路由名稱,合約地址,緩存標(biāo)志位,生效區(qū)塊高度設(shè)置路由信息,若該路由名稱已存在,則覆蓋

節(jié)點(diǎn)管理合約

NodeAction.sol是節(jié)點(diǎn)管理模塊的實(shí)現(xiàn)合約。它實(shí)現(xiàn)了對(duì)網(wǎng)絡(luò)中所有節(jié)點(diǎn)列表信息的登記、管理、維護(hù)功能。每當(dāng)網(wǎng)絡(luò)中有節(jié)點(diǎn)加入或退出都必須與節(jié)點(diǎn)管理合約進(jìn)行交互。

在BCOS中節(jié)點(diǎn)分為三種類型:核心節(jié)點(diǎn)、全節(jié)點(diǎn)、輕節(jié)點(diǎn)。

enum NodeType{None,Core, //核心 Full, //全節(jié)點(diǎn) Light //輕節(jié)點(diǎn) }

節(jié)點(diǎn)信息的數(shù)據(jù)結(jié)構(gòu)是:

struct NodeInfo{string id; #節(jié)點(diǎn)身份ID string ip; #機(jī)器IP uint port; #機(jī)器端口NodeType category; #節(jié)點(diǎn)類型string desc; #節(jié)點(diǎn)描述 string CAhash; #節(jié)點(diǎn)機(jī)構(gòu)證書哈希string agencyinfo; #節(jié)點(diǎn)其他信息uint idx; #節(jié)點(diǎn)序號(hào)uint blocknumber;#區(qū)塊高度}

主要接口如下:

接口輸入?yún)?shù)輸出參數(shù)說明
registerNodestring _id,string _ip,uint _port,NodeType _category,string _desc,string _CAhash,string _agencyinfo,uint _idx #節(jié)點(diǎn)身份ID、IP、端口、節(jié)點(diǎn)類型、節(jié)點(diǎn)描述、節(jié)點(diǎn)CA哈希、節(jié)點(diǎn)agency、節(jié)點(diǎn)序號(hào)bool #注冊(cè)結(jié)果注冊(cè)節(jié)點(diǎn) ,若該節(jié)點(diǎn)信息已存在,則忽略
cancelNodestring _id #節(jié)點(diǎn)身份IDbool #注冊(cè)結(jié)果注銷節(jié)點(diǎn),若該節(jié)點(diǎn)信息不存在,則忽略

機(jī)構(gòu)證書合約

CAAction.sol是機(jī)構(gòu)證書模塊的實(shí)現(xiàn)合約。它實(shí)現(xiàn)了對(duì)網(wǎng)絡(luò)中所有節(jié)點(diǎn)的機(jī)構(gòu)證書信息的登記、管理、維護(hù)功能。當(dāng)網(wǎng)絡(luò)啟用機(jī)構(gòu)證書驗(yàn)證功能的情況下,網(wǎng)絡(luò)中節(jié)點(diǎn)加入或退出都需要與機(jī)構(gòu)證書合約進(jìn)行交互。

機(jī)構(gòu)證書的數(shù)據(jù)結(jié)構(gòu)是:

struct CaInfo{string hash; #節(jié)點(diǎn)機(jī)構(gòu)證書哈希string pubkey; #證書公鑰string orgname; #機(jī)構(gòu)名稱uint notbefore; #證書啟用日期uint notafter; #證書失效時(shí)間CaStatus status; #證書狀態(tài)string whitelist;#IP白名單string blacklist;#IP黑名單uint blocknumber;#生效區(qū)塊高度}

主要接口如下:

接口輸入?yún)?shù)輸出參數(shù)說明
updatestring _hash,string _pubkey,string _orgname,uint _notbefore,uint _notafter,CaStatus _status,string _whitelist,string _blacklist # 證書哈希、證書公鑰、機(jī)構(gòu)名稱、 證書啟用日期、 證書失效時(shí)間、證書狀態(tài)、IP白名單、IP黑名單bool #更新結(jié)果更新證書信息, 若該證書信息不存在,則新建證書記錄
getstring _hash#證書哈希string,string,string,uint,uint,CaStatus,uint# 證書哈希、證書公鑰、機(jī)構(gòu)名稱、證書啟用日期、證書失效時(shí)間、證書狀態(tài)、生效區(qū)塊塊號(hào)查詢證書信息

權(quán)限管理合約

BCOS基于角色的身份權(quán)限設(shè)計(jì)有三要點(diǎn):一個(gè)外部賬戶只屬于一個(gè)角色;一個(gè)角色擁有一個(gè)權(quán)限項(xiàng)列表; 一個(gè)權(quán)限項(xiàng)由合約地址加上合約接口來唯一標(biāo)識(shí)。

當(dāng)前BCOS權(quán)限管理模塊主要由TransactionFilterChain.sol、TransactionFilterBase.sol、AuthorityFilter.sol、Group.sol四個(gè)合約來實(shí)現(xiàn)。

TransactionFilterChain是對(duì)Filter模型的實(shí)現(xiàn)框架。它在內(nèi)部維護(hù)了一個(gè)實(shí)現(xiàn)繼承于TransactionFilterBase的Filter合約地址列表。它對(duì)區(qū)塊鏈核心提供了統(tǒng)一的權(quán)限檢查接口process。process執(zhí)行過程中會(huì)對(duì)Filter合約地址列表中的所有Filter依次執(zhí)行process函數(shù),以完成所有需要的權(quán)限檢查。

TransactionFilterBase是Filter的基類合約。所有Filter必須要實(shí)現(xiàn)它的process接口。AuthorityFilter是繼承于TransactionFilterBase的角色權(quán)限Filter實(shí)現(xiàn)。它的process接口實(shí)現(xiàn)了對(duì)用戶所屬角色組的權(quán)限項(xiàng)進(jìn)行檢查邏輯。

Group是對(duì)角色的實(shí)現(xiàn)。它內(nèi)部維護(hù)了該角色的所有權(quán)限項(xiàng)的mapping標(biāo)志位。

主要接口如下:

合約接口輸入?yún)?shù)輸出參數(shù)說明
TransactionFilterBaseprocessaddress origin, address from, address to, string func, string input# 用戶外部賬戶、交易發(fā)起賬戶、合約地址、合約接口、交易輸入數(shù)據(jù)bool#處理結(jié)果權(quán)限檢查
GroupsetPermissionaddress to, string func, bool perrmission# 合約地址、合約接口、權(quán)限標(biāo)記bool#處理結(jié)果設(shè)置角色權(quán)限項(xiàng)

全網(wǎng)配置合約

ConfigAction.sol是全網(wǎng)配置模塊的實(shí)現(xiàn)合約。它維護(hù)了BCOS區(qū)塊鏈中全網(wǎng)運(yùn)行的可配置信息。 配置信息可以通過交易廣播上鏈來達(dá)到全網(wǎng)配置的一致性更新。原則上只能由區(qū)塊鏈管理員來發(fā)出全網(wǎng)配置更新交易。

ConfigAction.sol的內(nèi)部實(shí)現(xiàn)中維護(hù)了配置項(xiàng)信息的mapping 成員變量。

主要接口如下:

接口輸入?yún)?shù)輸出參數(shù)說明
setstring key, string value# 配置項(xiàng)、配置值設(shè)置配置項(xiàng)
getstring key #配置項(xiàng)string, uint# 配置值、生效區(qū)塊高度查詢配置值

當(dāng)前BCOS主要有以下全網(wǎng)配置項(xiàng):

配置項(xiàng)說明默認(rèn)值推薦值
maxBlockHeadGas塊最大GAS (16進(jìn)制)20000000020000000000
intervalBlockTime塊間隔(ms) (16進(jìn)制)10001000
maxBlockTranscations塊最大交易數(shù)(16進(jìn)制)10001000
maxNonceCheckBlock交易nonce檢查最大塊范圍(16進(jìn)制)10001000
maxBlockLimitblockLimit超過當(dāng)前塊號(hào)的偏移最大值(16進(jìn)制)10001000
maxTranscationGas交易的最大gas(16進(jìn)制)2000000020000000
CAVerifyCA驗(yàn)證開關(guān)FALSEFALSE

自定義擴(kuò)展

示例1-自定義業(yè)務(wù)配置合約

假設(shè)業(yè)務(wù)需要利用系統(tǒng)合約框架,自定義業(yè)務(wù)配置合約以對(duì)業(yè)務(wù)相關(guān)合約提供配置服務(wù)。大體可以參考以下步驟來擴(kuò)展:

  • 根據(jù)業(yè)務(wù)合約需求,實(shí)現(xiàn)業(yè)務(wù)配置合約的設(shè)置配置項(xiàng)接口set和查詢配置值接口get。
  • 部署業(yè)務(wù)配置合約,獲得業(yè)務(wù)配置合約鏈上地址。
  • 調(diào)用系統(tǒng)代理合約SystemProxy的setRoute接口,將業(yè)務(wù)配置合約地址注冊(cè)到路由表中。
  • 至此,業(yè)務(wù)配置合約已經(jīng)完成在系統(tǒng)代理合約的路由注冊(cè),已可在業(yè)務(wù)交易中調(diào)用。
  • 業(yè)務(wù)配置合約的使用方法:

  • 調(diào)用SystemProxy的getRoute接口運(yùn)行時(shí)獲得業(yè)務(wù)配置合約地址。
  • 通過業(yè)務(wù)配置合約地址調(diào)用查詢配置值接口get獲得配置值。
  • 示例2-自定義業(yè)務(wù)權(quán)限Filter合約

    假設(shè)業(yè)務(wù)需要增加業(yè)務(wù)權(quán)限校驗(yàn)邏輯,則可以利用權(quán)限管理合約的Filter機(jī)制來無縫擴(kuò)展。大體可以參考以下步驟來擴(kuò)展:

  • 繼承于TransactionFilterBase實(shí)現(xiàn)一個(gè)業(yè)務(wù)權(quán)限Filter合約,業(yè)務(wù)權(quán)限Filter合約根據(jù)業(yè)務(wù)需要的權(quán)限校驗(yàn)邏輯實(shí)現(xiàn)process接口。
  • 部署業(yè)務(wù)權(quán)限Filter合約,獲得對(duì)應(yīng)的合約地址。
  • 調(diào)用系統(tǒng)代理合約SystemProxy的getRoute接口,獲得TransactionFilterChain合約地址。
  • 調(diào)用TransactionFilterChain合約的addFilter接口,將業(yè)務(wù)權(quán)限Filter合約地址注冊(cè)到Filter合約列表中。
  • 至此,業(yè)務(wù)權(quán)限Filter合約已經(jīng)啟用。
  • 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

    總結(jié)

    以上是生活随笔為你收集整理的BCOS系统合约介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。