全部產品
Search
文件中心

:部署鏈碼

更新時間:Oct 25, 2024

鏈碼是Hyperledger Fabric技術架構中對智能合約的實現,支援業界流行的程式設計語言Golang,Node.js和Java,並不斷完善支援其他程式設計語言。本文介紹如何為通道部署新的鏈碼。

說明

本章節適用於購買Fabric v2.2 或 v2.5執行個體的使用者,如果您是Fabric v1.4執行個體的使用者,請參見管理鏈碼(V1.4)部署鏈碼。

鏈碼服務化

在2022年9月29日之後部署的鏈碼執行個體,預設會開啟鏈碼服務化功能。

鏈碼服務化之前

Hyperledger Fabric的鏈碼容器基於Docker構建和運行,鏈碼執行個體與Peer執行個體的數量關係是一對一的關係,隨著業務規模地逐漸擴大,容器越來越多,一方面加大了營運人員的工作複雜程度,另一方面也給使用者增加了資源成本。

鏈碼服務化之後

Hyperledger Fabric的鏈碼容器基於K8s構建和運行,在最佳化資源配置、可靠性、穩定性方面都有很大的提升。具體來說,主要包含以下幾個優點:

  • 鏈碼資源的彈性管理

    預設情況下,在一個組織內,一份鏈碼啟動一個容器,並將鏈碼作為服務提供給peer調用。基於原生K8s,組織內所有Peer節點通過訪問同一個鏈碼服務,可以共用一個鏈碼容器,從而實現對鏈碼資源的彈性管理。

    說明

    如您在業務上對鏈碼的擴縮容有需求,可通過提交工單聯絡售後工程師為您提供進一步服務。

  • 高可用性

    鏈碼容器被部署到K8s後,由原生K8s確保服務可靠性及擴縮容能力。

  • 穩定性增強

    鏈碼構建一次之後,即可被組織內的節點複用。當peer節點重啟時,可以省略掉原本的構建鏡像的步驟,快速拉起鏈碼容器,減小抖動。

打包鏈碼

使用者首先要在Hyperledger Fabric開發環境中進行鏈碼的開發,測試及打包:

  • 鏈碼開發指南請參考智能合約簡介

  • 鏈碼測試通過後需要用命令peer lifecycle chaincode package進行打包。打包時建議包含所需依賴,以Golang鏈碼為例,通過以下步驟將依賴檔案置於vendor目錄下:

    1. 使用 govendor 載入依賴

      1. 安裝govendor工具

        go get -u -v github.com/kardianos/govendor
      2. 進入到鏈碼專案的目錄,初始化vendor目錄;

        govendor init
      3. 將GOPATH中本工程使用到的依賴包自動移動到vendor目錄中;

        govendor add +external
    2. 使用 go mod 載入依賴

      1. 初始化 mod

        go mod init
      2. 將依賴自動打包到 vendor 中

        go mod vendor
  • 打包命令具體內容請參見peer lifecycle chaincode命令。注意:

    1. 打包 Golang 鏈碼時,-p 參數要指向鏈碼 main package 所在的目錄在 $GOPATH/src 下的相對路徑;打包 Java 鏈碼時,-p 參數要指向Java的工程目錄;打包 Node.js 鏈碼時,-p 參數要指向包含 package.json 檔案的 Node.js 專案根目錄;-p 參數不要使用 “./xxx”的相對路徑格式。

    2. 如果鏈碼語言是 Golang, 則可以省略 -l 選項;如果鏈碼語言是 Node.js或者java,則使用參數 -l node 或者 -l java。

    3. 使用--label指定鏈碼的預設鏈碼名稱及版本

  • 以下樣本將 $GOPATH/src/github.com/hyperledger/fabric-samples/chaincode/sacc 目錄下的 Golang 鏈碼原始碼打包為 sacc.tar.gz 鏈碼標籤為 sacc_1_0。

    peer lifecycle chaincode package -p github.com/hyperledger/fabric-samples/chaincode/sacc --label sacc_1_0 -l Golang sacc.tar.gz

    peer 下載地址:

  • Mac: hyperledger-fabric-darwin-amd64-2.2.0.tar.gz

  • Linux: hyperledger-fabric-linux-amd64-2.2.0.tar.gz


新鏈碼的部署需要經過以下三個步驟,如果要升級通道中已有的鏈碼,請參見升級鏈碼

  1. 上傳鏈碼

  2. 安裝鏈碼

  3. 提交鏈碼定義

上傳鏈碼

  1. 登入阿里雲BaaS控制台

  2. 概覽頁面,找到我的組織地區,找到目標組織,單擊組織的名稱。

  3. 單擊鏈碼包管理標籤頁。

  4. 單擊上傳鏈碼

  5. 在彈出的對話方塊中,上傳在開發環境已經打包的鏈碼,具體打包方法參見上述的打包鏈碼

  6. 單擊確定

    image.png

    上傳鏈碼成功後,鏈碼包管理標籤頁的列表中會出現該鏈碼,其中標籤列顯示的鏈碼名稱是您在本地打包鏈碼時指定的。

安裝鏈碼

前提條件

您已上傳鏈碼。

操作步驟

  1. 登入阿里雲BaaS控制台

  2. 概覽頁面,找到我的組織地區,找到目標組織,單擊組織的名稱。

  3. 單擊鏈碼包管理標籤頁。

  4. 找到要安裝的鏈碼,在操作列中單擊安裝,即可將此鏈碼安裝在主要組織。

  5. 安裝過程中,進行一次鏈碼的先行編譯,檢查鏈碼包可能存在的問題。

    image

    此操作根據鏈碼依賴的複雜程度,需要數秒到數分鐘。安裝完成後,狀態未安裝變為已安裝操作列中的安裝變為提交定義

提交鏈碼定義

前提條件

您已上傳鏈碼並安裝鏈碼。

操作步驟

  1. 登入阿里雲BaaS控制台

  2. 概覽頁面,找到我的組織地區,找到目標組織,單擊組織的名稱。

  3. 單擊鏈碼包管理標籤頁。

  4. 找到要提交定義的鏈碼,在操作列中單擊提交定義

  5. 根據參數說明在彈框中填寫參數資訊。

    image.png

    參數

    說明

    名稱

    系統自動顯示您在本地打包鏈碼時指定的鏈碼名稱。您可以保留該名稱,也可以修改為新的鏈碼名稱。

    說明

    已經使用過的鏈碼名稱不能再次提交鏈碼定義。

    版本

    您提交鏈碼定義時,需要為鏈碼定義一個版本號碼

    部署通道

    選擇鏈碼部署的通道,部署成功後,該通道內的所有組織均可看到該鏈碼。關於如何建立通道,請參見建立通道

    是否初始化

    • 支援:如果您的鏈碼實現了Init,需要先通過SDK發送特殊的初始化交易後,鏈碼才能被調用。即在被使用前需要進行初始化,則此處選擇 支援

    • 不支援:如果您的鏈碼未使用Init,不需要進行初始化,則此處選擇 不支援

    背書策略

    背書策略舉例:

    • OR ('org0MSP.peer','org1MSP.peer')表示此通道中的兩個組織任何一方背書即可。

    • AND ('org0MSP.peer','org1MSP.peer')表示需要此通道中的兩個組織背書。

    • OutOf (a,'org0MSP.member','org1MSP.member','org2MSP.member'):當a為1時表示此通道中的三個組織任何一方背書即可,當a為2時表示至少需要兩個通道中的組織背書才行,當a等於組織數時,背書情況等同於AND。

    說明

    其中*.peer中的*由上圖中的MSP ID決定。

    進階

    單擊 進階,您可以在 隱私集配置 輸入框中輸入您鏈碼的隱私集JSON定義資訊(如果您的鏈碼不需要使用隱私資料功能,您可以跳過此參數的設定)。隱私集JSON定義舉例: [{"name": "collectionName", "policy": "OR('org0MSP.peer')", "memberOnlyRead": false, "requiredPeerCount": 0, "maxPeerCount": 3, "blockToLive": 0}]表示鏈碼需要使用一個叫做collectionName的隱私資料命名空間, 只有組織 Org0 的節點才能擷取該命名空間內的隱私資料。

    重要

    一旦隱私集的 name 和 blockToLive 被設定,您將不能在升級時對這兩個值做修改。更多資訊可以參考 Using Private Data in Fabric

  6. 單擊提交

    操作成功後,您可以在鏈碼標籤頁下查看該鏈碼的狀態資訊,即通道狀態變為共識中組織狀態顯示為處理完成,單擊操作列下的審批詳情可以查看該鏈碼的基本資料。

    image

  7. 通道內其他組織確認並完成鏈碼的提交定義。

    說明

    預設需要通道內50%的組織通過確認,才能最終提交鏈碼定義。

    1. 其他組織成員登入阿里雲BaaS控制台

    2. 概覽頁面,找到我的組織地區,找到目標組織,單擊組織的名稱。

    3. 單擊鏈碼標籤頁,在操作欄下單擊去處理

    4. 在彈出的鏈碼處理頁中,確認該鏈碼提交的定義是否符合要求,如果符合,可直接單擊提交完成確認。

      當通道內50%以上的組織完成確認後,鏈碼部署成功,在鏈碼頁簽下,可以看到通道狀態由原來的共識中變成運行中,操作欄增加了升級顯示日誌的操作。

      image

      說明

      如果提交的鏈碼定義不符合要求,其他組織可以選擇不執行去處理,重新上傳自己的鏈碼包、安裝並提交鏈碼定義,此時提交的參數與原來提交的參數不一致,在鏈碼頁簽下,會存在多條共識資訊。

下一步

建立使用者通過SDK訪問區塊鏈網路