Fabric2.3 智能合約的打包及安裝
- 打包智能合約
- 安裝鏈碼包
打包智能合約
我們需要先打包鏈碼,然后才能將其安裝到我們的peer節點上,要注意的是,如果要安裝的智能合約是用 Go,JavaScript,TypeScript 語言寫的話,這三種語言打包的程序是不一樣的, 這里主要介紹的是Go語言,(如果有想看其它語言的可以評論區留言)
在我們打包鏈碼前,我們需要安裝鏈碼相關依賴項,在Fabric samples目錄下找到檔案夾asset-transfer-basic/chaincode-go
// 進入指定目錄
cd fabric-samples/asset-transfer-basic/chaincode-go
這里我們使用 Go 模塊來安裝鏈碼依賴項,依賴項列在目錄中的go.mod檔案中,需要先花點時間檢查此檔案,
$ cat go.mod
module github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go
go 1.14
require (
github.com/golang/protobuf v1.3.2
github.com/hyperledger/fabric-chaincode-go v0.0.0-20200424173110-d7076418f212
github.com/hyperledger/fabric-contract-api-go v1.1.0
github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e
github.com/stretchr/testify v1.5.1
)
該go.mod檔案將 Fabric 合約 API 匯入到智能合約包中,可以把asset-transfer-basic/chaincode-go/chaincode/smartcontract.go在文本編輯器中打開,查看SmartContract智能合約開始時如何使用合約 API 定義型別:
// SmartContract provides functions for managing an Asset
type SmartContract struct {
contractapi.Contract
}
該SmartContract型別之后將用于為智能合約中定義的函式創建交易背景關系,這些函式將資料讀取和寫入區塊鏈分類賬,
// CreateAsset issues a new asset to the world state with given details.
func (s *SmartContract) CreateAsset(ctx contractapi.TransactionContextInterface, id string, color string, size int, owner string, appraisedValue int) error {
exists, err := s.AssetExists(ctx, id)
if err != nil {
return err
}
if exists {
return fmt.Errorf("the asset %s already exists", id)
}
asset := Asset{
ID: id,
Color: color,
Size: size,
Owner: owner,
AppraisedValue: appraisedValue,
}
assetJSON, err := json.Marshal(asset)
if err != nil {
return err
}
return ctx.GetStub().PutState(id, assetJSON)
}
要安裝智能合約依賴項,請從asset-transfer-basic/chaincode-go目錄運行以下命令,
GO111MODULE=on go mod vendor
如果命令成功,go 包將安裝在一個vendor檔案夾中,
現在我們有了我們的依賴項,我們可以創建鏈碼包,導航回test-network檔案夾中的作業目錄,以便我們可以將鏈代碼與其他網路打包在一起,
cd ../../test-network
可以使用peerCLI 創建所需格式的鏈碼包,該peer二進制檔案所在的bin檔案夾處于fabric-samples目錄下,使用以下命令將這些二進制檔案添加到您的 CLI 路徑:
export PATH=${PWD}/../bin:$PATH
然后還需要將FABRIC_CFG_PATH設定為指向存盤庫fabric-samples中的core.yaml檔案:
export FABRIC_CFG_PATH=$PWD/../config/
要確認可以使用peerCLI,請檢查二進制檔案的版本,二進制檔案需要版本2.0.0或更高版本才能運行
peer version
現在你就可以創建一個鏈碼包了,通過peer lifecycle chaincode package 指令即可:
peer lifecycle chaincode package basic.tar.gz --path ../asset-transfer-basic/chaincode-go/ --lang golang --label basic_1.0
此命令將在當前目錄中創建一個叫basic.tar.gz的包,--lang標志用于指定鏈代碼語言,--path標志提供智能合約代碼的位置,該路徑必須是完全路徑或相對于您當前作業目錄的路徑,--label標志用于指定一個鏈碼標簽,該標簽將在安裝后標識打包的鏈碼,建議標簽包含鏈碼名稱和版本,
現在我們創建了鏈碼包,我們可以在測驗網路的對等節點上安裝鏈碼,
安裝鏈碼包
在我們打包asset-transfer (basic)的智能合約后,我們可以在我們的peer上安裝鏈碼,鏈碼需要安裝在每個需要對交易的進行背書的peer節點上,因為我們要將背書策略設定為要求來自 Org1 和 Org2 的背書,所以我們需要在兩個組織運營的節點上安裝鏈碼:
1. peer0.org1.example.com
2. peer0.org2.example.com
讓我們先在 Org1 節點上安裝鏈碼,設定以下環境變數,以peerOrg1 管理員用戶身份操作CLI,CORE_PEER_ADDRESS將被設定為指向peerORG1,即peer0.org1.example.com,
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
執行 peer lifecycle chaincode install 命令以在 peer 上安裝鏈碼:
peer lifecycle chaincode install basic.tar.gz
如果命令成功,peer 將生成并回傳包識別符號,此包 ID 將用于在下一步中批準鏈碼,成功的話應該會看到類似于以下內容的輸出:
2020-07-16 10:09:57.534 CDT [cli.lifecycle.chaincode] submitInstallProposal -> INFO 001 Installed remotely: response:<status:200 payload:"\nJbasic_1.0:e2db7f693d4aa6156e652741d5606e9c5f0de9ebb88c5721cb8248c3aead8123\022\tbasic_1.0" >
2020-07-16 10:09:57.534 CDT [cli.lifecycle.chaincode] submitInstallProposal -> INFO 002 Chaincode code package identifier: basic_1.0:e2db7f693d4aa6156e652741d5606e9c5f0de9ebb88c5721cb8248c3aead8123
我們現在可以在 Org2 節點上安裝鏈碼,設定以下環境變數以作為 Org2 管理員操作并定位 Org2 peer,peer0.org2.example.com,
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051
執行 peer lifecycle chaincode install 命令以在 peer 上安裝鏈碼:
peer lifecycle chaincode install basic.tar.gz
安裝鏈碼的時候這個搭建的程序是由peer完成的,所以如果智能合約代碼有問題,錯誤資訊將從鏈碼回傳,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/302568.html
標籤:區塊鏈
上一篇:ETH穩健斬獲
