12 6 系統鏈碼

2021-09-16 19:36:10 字數 2733 閱讀 1149

系統鏈碼(system chaincode)是超級賬本fabric專案在設計上的一大創新。

而系統鏈碼則負責fabric節點自身的處理邏輯,包括系統配置、背書、校驗等工作。這些處理過程最初通過硬編碼 (hard-coded)的方式固化在系統中。fabric通過系統鏈碼的形式來實現,執行在peer主程序內,兼顧了邏輯實現和管理的靈活性,以及通訊 的效能。

系統鏈碼目前僅支援go語言,在peer節點啟動時會自動完成註冊和部署,以程序內邏輯形式跟主程序進行互動。

目前,fabric中包括五大型別的系統鏈碼,主要功能如表12-4所示。

表12-4 fabric五大型別系統鏈碼

這些鏈碼的實現都在fabric/core/scc路徑下,下面分別予以講解。

1.配置系統鏈碼

configuration system chaincode,即配置系統鏈碼,顧名思義,是負責配置管理的系統鏈碼,支援被從鏈外進行呼叫。

cscc主要**實現在core/scc/cscc路徑下,目前支援如下型別的invoke方法:

·joinchain:當某個節點申**入某條通道時被呼叫。負責根據傳入的初始區塊引數生成所加入通道的創世區塊,並完成賬本、通道相關資料結構的初始化工作。呼叫後,節點本地將維護所加入通道的資料結構,並建立初始區塊;

·getconfigblock:當需要獲取節點在某個通道上配置時候被呼叫。該方法獲取指定通道的配置區塊(未更新時等價於初始區塊)的內容;

·updateconfigblock:當需要更新節點在某個通道上的配置時被呼叫。根據傳入的區塊資料生成區塊結構,替換掉現有的配置區塊結構。替換後,配置區塊資料將跟該通道內的初始區塊不再一致;

·getchannels:需要獲取到節點所加入所有通道列表時被呼叫。該方法獲取該節點已經加入的所有通道的資訊。

2.背書管理系統鏈碼

endorsement system chaincode,即背書管理系統鏈碼。負責背書(簽名)過程,並可以支援對背書策略進行管理,僅支援鏈內系統呼叫。

escc主要**實現在core/scc/escc路徑下,目前提供了invoke方法,會對傳入的鏈碼提案的模擬執行結果進行簽名,之後建立響應訊息返回給客戶端。

3.生命週期系統鏈碼

lifecycle system chaincode,即生命週期系統鏈碼,負責對使用者鏈碼的生命週期進行管理,支援被從鏈外進行呼叫。

lscc主要**實現在core/scc/lscc路徑下。

鏈碼的生命週期包括安裝、部署、公升級、許可權管理、獲取資訊等環節。這些操作都可以通過對lscc進行invoke來實現:

·install:安裝意味著將使用者鏈碼相關檔案打包,放置到節點的檔案系統,預設在/var/hyperledger/production/chaincodes/路徑下面;

·deploy:意味著鏈碼被部署和例項化(instantiate),生成鏈碼容器。在此過程中會檢查通道的acl,從本地拿到鏈碼資料,檢查instantiation policy;

·upgrade:公升級鏈碼時被呼叫。檢查instantiation policy,通過則對本地檔案進行替換,並生成新的鏈碼容器;

·getccinfo:獲取鏈碼資訊時被呼叫。檢查節點對該通道是否有讀許可權,通過則返回指定鏈碼的資訊;

·getccdata:獲取鏈碼資料時被呼叫。檢查節點對該通道是否有讀許可權,通過則返回指定鏈碼的完整資料;

·getchaincodes:獲取節點在通道上的鏈碼資訊,檢查節點是否具有管理員許可權,通過則返回在通道上的所有的鏈碼資訊,包括已安裝和已例項化的。

4.查詢系統鏈碼

query system chaincode,查詢系統鏈碼,負責提供一些賬本和鏈資訊的查詢方法,包括getchaininfo、getblockbynumber、 getblockbyhash、gettransactionbyid、getblockbytxid等,支援被從鏈外進行呼叫。qscc主要**實現在 core/scc/qscc路徑下:

·getchaininfo:獲取區塊鏈的資訊,包括高度值、當前區塊hash值、上乙個區塊hash值等;

·getblockbynumber:根據給定的高度,返回對應區塊的資料;

·getblockbyhash:根據給定的區塊頭hash值,返回對應區塊的資料;

·gettransactionbyid:根據給定的txid,返回對應交易的資料;

·getblockbytxid:根據給定的txid,返回包含該交易的區塊的資料。

5.驗證系統鏈碼

verification system chaincode,驗證系統鏈碼,負責擔任committer角色的節點對從orderer收到的一批交易進行寫入前的再次驗證,僅支援鏈內系統呼叫。

vscc主要**實現在core/scc/vscc路徑下。該鏈碼比較簡單,提供了invoke方法,其主要過程為:

·首先解析出交易結構,並對交易結構格式進行校驗;

·檢查交易的讀集合中元素版本跟本地賬本中版本一致;

·檢查帶有合法的背書資訊(目前主要是檢查簽名資訊);

·通過則返回正確,否則返回錯誤訊息。

'); (window.slotbydup = window.slotbydup || ).push(); })();

'); (window.slotbydup = window.slotbydup || ).push(); })();

YXcms建站系統 v1 2 6

如果你現在正在被各種大型建站系統繁瑣的功能而困擾,如果您的 雖然只用得上其中很小一部分功能卻不得不安裝一大堆東西,面對各種複雜操作的同時還要忍受因為體積龐大而帶來的執行效率低下的問題。那麼這一款cms應該更加適合你的需要。用最少的 做更多的事情是yxcms的設計理念。完成同樣的工作yxcms會用更簡...

邊界鏈碼 歸一化鏈碼與一階差分鏈碼

鏈碼 又稱為freeman碼 是用曲線起始點的座標和邊界點方向 來描述曲線或邊界的方法,常被用來在影象處理 計算機圖形學 模式識別等領域中表示曲線和區域邊界。它是一種邊界的編碼表示法,將影象中畫素的絕對位置轉換成了相對位置,用邊界方向作為編碼依據,為簡化邊界的描述,一般描述的是邊界點集。常用的鏈碼按...

超級賬本鏈碼

fabric中的智慧型合約稱為 鏈碼 chaincode 鏈碼部署在節點上,採用容器技術形成隔離的執行環境。鏈碼的生命週期管理主要包括鏈碼的安裝 例項化 呼叫和終止等。作為聯盟鏈方案,fabric包含管理成員身份的功能。參與區塊鏈網路成員身份必須是明確的,成員之間知道批次組織身份資訊,每個交易都有明...