基於 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
:環境變量,指定Chaincode
的PackageID ,這裏使用$FAKE_PACKAGE_ID
值CORE_PEER_TLS_ENABLED
:環境變量,指定是否啓用TLS
,啓用 TLS 還需要配置 TLS Key,Cert文件,這裏不啓用 TLS 運行(peer 也不能配置 TLS)--peer.address
:命令行選項,peer 的註冊地址,見 peer 啓動日誌
注意,需要調試的 Chaincode 同樣需要 approve
、commit
才能調用,並且要在 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