1
鏈碼概念
網路執行環境我們已經啟動完成,現在我們從開發者的角度來認識一下完成交易所必須的智慧合約(在 Hyperledger Fabric 中被稱之為 Chaincode,也就是鏈上程式碼)的相關知識,以便於理解賬本中的資料到底是通過什麼方式進行操作。
Chaincode:鏈上程式碼,簡稱鏈碼,一般是指由開發人員使用Go語言(也支援Java等語言)編寫的應用程式程式碼,提供分散式賬本的狀態處理邏輯。鏈碼被部署在Fabric的網路節點中,能夠獨立執行在具有安全特性的受保護的 Docker 容器中,以 gRPC 協議與相應的 peer 節點進行通訊,以操作(初始化或管理)分散式賬本中的資料。可以根據不同的需求開發出不同的複雜的應用。
鏈碼分類
在 Hyperledger Fabric 中,鏈碼一般分為:
-
系統鏈碼
-
使用者鏈碼
2
Fabric提供了什麼-系統鏈碼
負責 Fabric 節點自身的處理邏輯, 包括系統配置、背書、校驗等工作
系統鏈碼僅支援 Go 語言, 在 Peer 節點啟動時會自動完成註冊和部署
系統鏈碼共有五種型別:
配置系統鏈碼(CSCC)
CSCC:Configuration System Chaincode,負責處理 Peer 端的 Channel 配置。
生命週期系統鏈碼(LSCC)
LSCC:Lifecycle System Chaincode,負責對使用者鏈碼的生命週期進行管理。
查詢系統鏈碼(QSCC)
QSCC:Query System Chaincode,提供賬本查詢 API。如獲取區塊和交易等資訊。
背書管理系統鏈碼(ESCC)
ESCC:Endorsement System Chaincode,負責背書(簽名)過程, 並可以支援對背書策略進行管理
對提交的交易提案的模擬執行結果進行簽名,,之後建立響應訊息返回給客戶端
驗證系統鏈碼(VSCC)
VSCC:Validation System Chaincode,處理交易的驗證,包括檢查背書策略以及多版本併發控制
3
什麼是使用者鏈碼
由應用程式開發人員根據不同場景需求及成員制定的相關規則,使用 Golang(或Java等)語言編寫的基於操作區塊鏈分散式賬本的狀態的業務處理邏輯程式碼,執行在鏈碼容器中,通過 Fabric 提供的介面與賬本狀態進行互動。
使用者鏈碼在整個應用程式中處於重要地位。因為它下可對賬本資料進行操作,上可以給企業級應用程式提供呼叫介面。所以一個沒有鏈碼的企業級應用程式,不能稱之為是基於區塊鏈的企業級應用程式。
4
鏈碼的生命週期管理
鏈碼開發編寫完成後,並不能立刻使用,而是必須經過一系列的操作之後才能應用在 Hyperledger Fabric 網路中進而處理客戶端提交的交易。這一系列的操作是由鏈碼的生命週期來負責管理。
管理 Chaincode 的生命週期共有五個命令:
-
install:將已編寫完成的鏈碼安裝在網路節點中。
-
instantiate:對已安裝的鏈碼進行例項化。
-
upgrade:對已有鏈碼進行升級。鏈程式碼可以在安裝後根據具體需求的變化進行升級。
-
package:對指定的鏈碼進行打包的操作。
-
singnpackage:簽名。
安裝、例項化、升級這三項操作不適用於系統鏈碼
鏈碼的生命週期管理命令現階段只有這五個,但未來還會支援 stop 和 start 命令, 用來停止和啟動鏈碼。
鏈程式碼成功安裝和例項化後,則處於活動狀態(正在執行),時刻準備執行處理提交的交易提案。
下一節開始我們會使用這些生命週期管理命令來實現對鏈碼的相關操作。
5
FAQ
文中所說的狀態與賬本資料是什麼關係?
狀態其實指的就是賬本中的資料。沒有其它另外的含義。
鏈碼可以訪問所有賬本中的狀態嗎?
一個鏈碼對應一個賬本,所以一般情況下鏈碼是不可以訪問其它賬本中的資料的。
內容來源:區塊鏈兄弟
作者:韓小東
課程推薦