Hyperledger Fabric 2.0 Chaincode Dev

基於 Fabric v2.0.1,以前的版本應該也能通用。

一、準備工作


Fabric Network

  • 單節點 Peer
  • 單節點 Orderer
  • 已經創建的Channel
  • Peer Join 該 Channel
  • Peer 啓用 external builder 參考 Fabric 2.0 external builder
  • Peer 預安裝了 Fake Chaincode

Mac or Linux 環境可以快速基於腳本搭建 Fabric Debug 環境

二、以 Dev 模式啓動 Peer


啓動 Peer 時帶上 dev mode 標識,通過命令行選項 --peer-chaincodedev 啓用 dev mode。

啓動命令如下:

bin/peer node start --peer-chaincodedev

正確啓動有如下關鍵日誌,注意 WARN 的日誌 peer 會選擇一個網卡地址監聽7052端口(見日誌信息 peer.chaincodeListenAddress )用於註冊 Chaincode

...
2020-03-17 17:38:00.099 CST [nodeCmd] serve -> INFO 00b Running in chaincode development mode
2020-03-17 17:38:00.099 CST [nodeCmd] serve -> INFO 00c Disable loading validity system chaincode
...
2020-03-17 17:38:00.099 CST [nodeCmd] createChaincodeServer -> WARN 00f peer.chaincodeListenAddress is not set, using 192.168.43.62:7052
...

三、啓動 Chaincode


Peer 以 dev mode 運行時,允許 Chaincode 從外部直接連接註冊到 Peer 。

2.0 Chaincode 啓動有所改變是以 Chaincode PackageID 爲標識註冊啓動的,調用時又會檢測 Chaincode 是否安裝,因此先 install 一個 fake Chaincode 使用這個 fake chaincode 的 PackageID 註冊。

將PackageID設置到環境變量 FAKE_PACKAGE_ID 供下面使用。

Chaincode 啓動是需要以下信息:

  • CORE_CHAINCODE_ID_NAME環境變量,指定 ChaincodePackageID ,這裏使用 $FAKE_PACKAGE_ID
  • CORE_PEER_TLS_ENABLED環境變量,指定是否啓用 TLS,啓用 TLS 還需要配置 TLS Key,Cert文件,這裏不啓用 TLS 運行(peer 也不能配置 TLS)
  • --peer.address命令行選項,peer 的註冊地址,見 peer 啓動日誌

注意,需要調試的 Chaincode 同樣需要 approvecommit 才能調用,並且要在 commit 之前啓動註冊(否則peer會自動運行fake chaincode )

首先運行 Chaincode (注意替換成自己的 peer address)

CORE_PEER_TLS_ENABLED=false CORE_CHAINCODE_ID_NAME=$FAKE_PACKAGE_ID ./module --peer.address 192.168.43.62:7052

IDE 運行
在這裏插入圖片描述

approve & commit

# 設置配置文件路徑
export FABRIC_CFG_PATH=/tmp/fabric
# approve 替換下面的變量,--init-required 選項根據自己chaincode覺得是否需要
bin/peer lifecycle chaincode approveformyorg --channelID $CHANNEL_NAME --name $CC_NAME --version $CC_VERSION --init-required --package-id $FAKE_PACKAGE_ID --sequence $CC_SEQUENCE --waitForEvent

# commit
bin/peer lifecycle chaincode commit --channelID $CHANNEL_NAME --name $CC_NAME --version $CC_VERSION --init-required --sequence $CC_SEQUENCE

我這裏設置了 --init-required 所以需要先 Init

# init
bin/peer chaincode invoke -o 127.0.0.1:7050 --peerAddresses 127.0.0.1:7051 -C wagaga -n $CC_NAME -I -c '{"Args":["Init", "a","1000","b", "1000"]}'

2020-03-17 17:59:32.799 CST [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200
# query
bin/peer chaincode query -C wagaga -n $CC_NAME -c '{"Args":["query","a"]}'
1000

在這裏插入圖片描述

四、注意事項


由於 2.0 Peer 啓動時會自動加載運行已經 commit 過的 Chaincode,如果Peer 重啓過,會自動啓動 Fake Chaincode,自己的 Chaincode 會註冊失敗。

解決方式:
啓動自己的 Chaincode 失敗後,停止後再啓動一次,停止時會向 Peer Deregister Chaincode 會把自動啓動的 chaincode 也 Deregister

五、另一種方式


2.0 新增了 Chaincode as Service ,支持 Peer 主動去連接 Chaincode (需要 external builder 配合支持)。

參考 官網 配置 Chaincode as Service

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章