鏈碼是Hyperledger Fabric技術架構中對智能合約的實現,支援業界流行的程式設計語言Golang,Node.js和Java。本文介紹如何為通道部署新的鏈碼。
本章節適用於購買Fabric 1.4版本執行個體的使用者,如果您是Fabric 2.2 版本執行個體的使用者,請參見管理鏈碼(V2.2)部署鏈碼。
使用者首先要在Hyperledger Fabric開發環境中進行鏈碼的開發,測試及打包:
鏈碼開發指南請參見Chaincode for Developers
鏈碼測試通過後需要用命令
peer chaincode package進行打包。打包時建議包含所需依賴,以Golang鏈碼為例,通過以下步驟將依賴檔案置於vendor目錄下:安裝govendor工具
go get -u -v github.com/kardianos/govendor進入到鏈碼專案目錄,初始化vendor目錄;
govendor init將GOPATH中本工程使用到的依賴包自動移動到vendor目錄中;
govendor add +external
打包命令具體內容請參見peer chaincode命令。注意:
打包 Golang 鏈碼時,-p 參數要指向鏈碼 main package 所在的目錄在 $GOPATH/src 下的相對路徑;打包 Java 鏈碼時,-p 參數要指向Java的工程目錄;打包 Node.js 鏈碼時,-p 參數要指向包含 package.json 檔案的 Node.js 專案根目錄;-p 參數不要使用 “./xxx”的相對路徑格式。
如果鏈碼語言是 Golang, 則可以省略 -l 選項;如果鏈碼語言是 Node.js或者java,則使用參數 -l node 或者 -l java。
如果鏈碼的初始化方法不需要傳入參數,則可以省略 -c 選項。
不要添加 -i,-S選項。
以下樣本將 $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/example02 目錄下的 Golang 鏈碼原始碼打包為ccpack.out, 鏈碼名為mycc,版本1.0。
peer chaincode package ccpack.out -n mycc -p github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd -c '{"Args":["init","a","100","b","200"]}' -v 1.0peer下載地址:
新鏈碼的部署需要經過以下三個步驟,如果要升級通道中已有的鏈碼,請參見升級鏈碼:
上傳鏈碼
安裝鏈碼
執行個體化鏈碼
上傳鏈碼
登入阿里雲BaaS控制台。
在概覽頁面,找到我的組織地區,找到目標組織,單擊組織的名稱。
單擊鏈碼標籤頁。
單擊上傳鏈碼。
在彈出的對話方塊中,上傳在開發環境已經打包的鏈碼,打包方法如上所述。
選擇需要部署該鏈碼的通道。如果是新部署的鏈碼,請注意不要和任何一個通道內已存在的鏈碼同名。
填寫背書策略。
背書策略舉例:
OR ('Org1MSP.peer','Org2MSP.peer')表示此通道中的兩個組織任何一方背書即可;AND ('Org1MSP.peer','Org2MSP.peer')表示需要此通道中的兩個組織背書。單擊確定。
上傳鏈碼成功後,鏈碼標籤頁的列表中會出現該鏈碼。其中鏈碼列顯示的鏈碼名稱以及版本列顯示的鏈碼版本號碼都是您在本地打包鏈碼時指定的。
安裝鏈碼
前提條件
您已上傳鏈碼。
操作步驟
登入阿里雲BaaS控制台。
在概覽頁面,找到我的組織地區,找到目標組織,單擊組織的名稱。
單擊鏈碼標籤頁。
找到要安裝的鏈碼,在操作列中單擊安裝,即可將此鏈碼安裝在主要組織。

安裝完成後,安裝狀態由未安裝變為已安裝,操作列中的安裝變為執行個體化。
如果您上傳鏈碼時設定的背書策略為需要多個組織執行此鏈碼,那麼還需要在其他組織的頁面中進行安裝。
執行個體化鏈碼
前提條件
您已上傳鏈碼以及安裝鏈碼。
操作步驟
登入阿里雲BaaS控制台。
在概覽頁面,找到我的組織地區,找到目標組織,單擊組織的名稱。
單擊鏈碼標籤頁。
找到要安裝的鏈碼,在操作列中單擊執行個體化。
在彈出的對話方塊中,系統自動顯示您上傳鏈碼時填寫的背書策略。您可以保留該策略,也可以修改為新的策略。
背書策略舉例:
OR ('Org1MSP.peer','Org2MSP.peer')表示此通道中的兩個組織任何一方背書即可;AND ('Org1MSP.peer','Org2MSP.peer')表示需要此通道中的兩個組織背書。在對話中單擊 進階 , 您可以在 隱私集配置 輸入框中輸入您鏈碼的隱私集JSON定義資訊(如果您的鏈碼不需要使用隱私資料功能,您可以跳過本步驟)。
隱私集JSON定義舉例:
[{"name": "collectionName", "policy": "OR('Org1MSP.peer')", "memberOnlyRead": false, "requiredPeerCount": 0, "maxPeerCount": 3, "blockToLive": 0}]表示鏈碼需要使用一個叫做collectionName的隱私資料命名空間, 只有組織Org1的節點才能擷取該命名空間內的隱私資料。注意, 一但隱私集的
name和blockToLive被設定,您將不能在升級時對這兩個值做修改。更多資訊可以參考 Using Private Data in Fabric。單擊執行個體化。

此操作根據鏈碼依賴的複雜程度,需要數秒到數分鐘。操作成功後通道狀態會由未執行個體化變為運行中,操作列的值變為空白。