Fabric Chaincode 開發者模式除錯

2021-10-10 06:18:20 字數 2051 閱讀 4157

在fabric開發中,chaincode的測試是乙個令人比較頭疼的問題,一是由於實際情況中chaincode中的儲存和查詢是依賴於peer節點上的狀態資料庫的,所以無法在本地直接測試;二是由於chaincode是執行於容器中的,這導致我們很難獲取在**中列印的日誌。

如果直接在實際開發環境中測試chaincode就更麻煩了,每一次除錯都需要重啟整個網路(有可能還是多機部署的),並且要建立和加入通道,安裝以及例項化鏈碼,這嚴重影響了測試的效率。下面介紹兩種測試鏈碼的手段,一種是開發者 (dev) 模式,在本地單機搭建乙個簡單的網路來進行測試;另一種是單元測試 (ut),可以無需啟動節點環境,自動化測試所有介面。

fabric-samples/chaincode-docker-devmode
首先分析一下目錄中的docker-compose-******.yaml檔案:

該網路中包含1個orderer節點,1個peer節點,1個chaincode容器(負責執行我們要測試的鏈碼),1個cli容器(負責傳送請求來測試鏈碼)。

有兩點需要注意的:

終端一:啟動網路

首先進入開發者模式目錄:

cd fabric-samples/chaincode-docker-devmode
啟動網路:

docker-compose -f docker-compose-******.yaml up
當看到going to wait for newer blocks時表示啟動成功,此時網路中存在四個容器(1 orderer,1 peer, 1 chaincode, 1 cli),建立了通道myc並將peer成功加入。

終端二:編譯鏈碼

進入chaincode容器

docker exec -it chaincode bash
編譯想要測試的chaincode:

cd sacc

go build

成功執行後單當前目錄下會出現生成的可執行檔案。此時需要啟動這個可執行檔案:

core_peer_address=peer:7052 core_chaincode_id_name=mycc:0 ./sacc
注:這裡有個不解的小問題,官網教程中的埠是peer:7051,並且當前peer確實也在監聽7051,但是寫成7051就會報錯:error starting ******asset chaincode: error sending chaincode register

當出現starting up ...的提示就說明鏈碼啟動成功了,在這個終端二里可以輸出chaincode中的日誌(比如通過fmt.print()列印的內容)。

終端三:在cli中測試鏈碼

進入cli容器:

docker exec -it cli bash
安裝和例項化鏈碼(例項化設定了a的初始值10):

peer chaincode install -p chaincodedev/chaincode/sacc -n mycc -v 0

peer chaincode instantiate -n mycc -v 0 -c '' -c myc

進行測試:

呼叫set()介面將a的值設定為20:

peer chaincode invoke -n mycc -c '' -c myc
呼叫get()介面查詢a的值,發現a的值已經更新為20,測試完畢。

peer chaincode query -n mycc -c '' -c myc

開發者模式之 單例模式

前序 本文為 androdi原始碼及開發模式 的學習筆記。定義 確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。使用情景 確保某個類有且只有乙個物件的情景,避免每次使用都重複建立物件,而消耗過多資源。例如,建立乙個物件需要消耗的資源過多,如要訪問io或資料庫資源,這是就要考慮單例模...

python Chrome 開發者模式消失的方法

最近使用 chrome瀏覽器跑selenium python 自動化指令碼執行過程中,總是出現這樣的對話方塊 同樣,為了規避chrome的問題,我想換瀏覽器,使用firefox,可悲劇的是 firefox瀏覽器的時候,執行自動化測試指令碼的時候,發現只能開啟firefox瀏覽器卻不能開啟網頁的解決方...

win10開發者模式

1.偶然逛開源中國的時候看到了一篇文章 說是開發者應該轉向win10而放棄linux當時很不以為然。還有所說的vs code 無非就是盜版的atom嗎?後來自己決定親自體驗下,說實話,作為乙個php開發者來說!這種方式確實好過linux下wine辦公軟體好很多!2.先將window開啟開發人員模式 ...