Fabric使用自己的鏈碼進行測試-go語言

書接前文

Fabric鏈碼部署-go語言

通過上面這篇文章,你可以部署好自己的鏈碼

(后面很多命令是否需要修改,都是根據上面這篇文章來的,如果零基礎的話建議先看上面這篇)

就進行下一步

在測試網絡上運行自己的鏈碼


目錄

1、導航到test-network目錄

1.1 打開日志Logspout(可選)

2、啟動測試網絡

3、測試網絡的組成

4、創建一個通道

5、在通道上啟動鏈碼

6、與網絡交互

6.1 配置對等CLI

6.2 運行Org1

6.2.1 設置環境變量

6.2.2?初始化賬本

6.2.3?查詢賬本

6.2.4 修改賬本

6.3 運行Org2


1、導航到test-network目錄

打開終端窗口 ,直接cd

下面是我的路徑的位置

cd ./go/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network

你的可能不一樣,這里或許要微調

不過只要到這個目錄就可以

1.1 打開日志Logspout(可選)

此步驟不是必需的,但對于鏈碼故障排除非常有用。

要監控智能合約的日志,管理員可以使用logspout工具查看一組Docker容器的聚合輸出。

該工具將來自不同?Docker?容器的輸出流收集到一個位置,從而可以輕松地從單個窗口查看發生的情況。

這可以幫助管理員在安裝智能合約時或開發者調用智能合約時調試問題。

由于某些容器純粹是為了啟動智能合約而創建的,并且只存在很短的時間,因此從網絡收集所有日志會很有幫助。

Logspout?工具將不斷地將日志傳輸到的終端,因此將需要使用新的終端窗口。

可以通過運行以下命令來啟動?Logspout(直接復制,不需要改)

./monitordocker.sh fabric_test

如果你啟動失敗,可能是這個位置沒有對應文件,我上一篇博客里有提到怎么復制,從哪復制,建議參考

2、啟動測試網絡

可以在test-network 目錄中找到用于啟動網絡的腳本。


?如果你先前啟動了網絡,建議先進行一下關閉先前網絡的操作,以免后面出一些預料之外的錯誤

方式為(直接復制,不需要改)

./network.sh down

之后直接輸入:(直接復制,不需要改)

./network.sh up

就開始啟動網絡了

你會看到類似這些內容的輸出,就說明成功了

從這里可以看到節點對應的端口信息,后面會用到,不過每次都是一樣的,知道在這里找就可以

3、測試網絡的組成

部署測試網絡后,可以花一些時間檢查其組件。

運行以下命令以列出計算機上運行的所有 Docker 容器。(直接復制,不需要改)

docker ps -a

應該能看到由 network.sh 腳本創建的三個節點

測試網絡包括兩個對等組織:Org1 和 Org2。

它還包括一個維護網絡排序服務的單一排序節點組織。

網絡中的每個對等點都需要屬于一個組織。

在測試網絡中,每個組織各運行一個對等點:peer0.org1.example.com?和peer0.org2.example.com

示例網絡使用由排序節點組織運營的單節點 Raft 排序服務。

您可以看到在您的計算機上運行的排序節點為?orderer.example.com

4、創建一個通道

現在我們的機器上運行了對等節點和排序節點,我們可以使用腳本為 Org1 和 Org2 之間的事務創建 Fabric 通道。

運行以下命令創建一個默認名稱為 mychannel 的通道:(直接復制,不需要改)

./network.sh createChannel

如果命令成功,您可以在日志中看到以下消息:


還可以使用通道標志來創建具有自定義名稱的頻道。

例如,以下命令將創建一個名為channel1的通道:

./network.sh createChannel -c channel1

通道標志還允許您通過指定不同的通道名稱來創建多個通道。

創建mychannel或channel1后,您可以使用以下命令創建第二個名為channel2的頻道:

./network.sh createChannel -c channel2

如果您想一步啟動網絡并直接創建通道,您可以同時使用 up 和 createChannel 模式:

./network.sh up createChannel

5、在通道上啟動鏈碼

通道啟動之后

下一步就是啟動自己的鏈碼了

通過下面命令進行啟動(這里需要改)

./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/test-protocol-go -ccl go
  • deployCC是這個腳本中定義的一個命令或子命令,它是用來在peer0.org1.example.com?和peer0.org2.example.com?上安部署鏈碼的功能,然后將鏈代碼部署在使用通道標志指定的通道上,如果未指定通道,則部署在mychannel?上
  • -ccn basic指定了鏈碼的名稱,這里設置為basic,這意味著你將要部署一個名為basic的鏈碼。(這個名稱是官方示例里給的,自己可以修改,但是后面對應位置也要改)
  • -ccp ../asset-transfer-basic/test-protocol-go用于指定鏈碼的路徑,../asset-transfer-basic/test-protocol-go是鏈碼所在的目錄路徑。
  • -ccl go指定鏈碼的語言類型,這里是go,意味著使用的是 Go 編程語言編寫的鏈碼。

注意,你需要修改的地方是鏈碼的路徑,也就是-ccp之后的部分,需要將路徑修改成你的鏈碼的存儲位置

如果你不清楚應該如何提前部署己的鏈碼,看我上一篇文章(開頭有鏈接)

成功后是這個樣子?

6、與網絡交互

6.1 配置對等CLI

使用對等 CLI (peer CLI)與您的網絡進行交互

對等?CLI?允許您從?CLI調用已部署的智能合約、更新通道或安裝和部署新的智能合約。

使用以下命令將二進制文件添加到您的 CLI 路徑:(直接復制,不需要改)

export PATH=${PWD}/../bin:$PATH
  • export:這個命令用于設置環境變量,使得后續的命令可以在當前Shell會話中使用。
  • PATH是一個環境變量,它用于指定系統在哪些目錄中查找可執行文件。當你在命令行中輸入一個命令時,系統會根據PATH的值在指定的目錄中查找這個命令的可執行文件。
  • ${PWD}:是一個變量,表示當前工作目錄的路徑。
  • ../bin:表示當前工作目錄的上一級目錄中的bin目錄。..表示上一級目錄,bin則是一個通常用于存放可執行文件的目錄。
  • :$PATH:表示將新設置的目錄${PWD}/../bin添加到原始PATH變量中的值的末尾,使用冒號分隔。

還需要將?FABRIC_CFG_PATH設置為指向?Fabric-samples 存儲庫中的 core.yaml?文件:(直接復制,不需要改)

export FABRIC_CFG_PATH=$PWD/../config/
  • export:這個命令用于設置環境變量,使得后續的命令可以在當前Shell會話中使用。
  • FABRIC_CFG_PATH是一個環境變量,它用于指定Hyperledger Fabric配置文件的路徑。
  • $PWD:是一個環境變量,代表當前工作目錄的路徑。
  • ../config/:表示當前工作目錄的上一級目錄中的config目錄。..表示上一級目錄,config則是存放Fabric配置文件的目錄。

core.yamlHyperledger Fabric節點的配置文件,用于配置節點的各種參數和設置。這個文件包含了節點的基本配置信息,影響著節點的行為、功能和性能。

Fabric中,每個節點(如對等節點、排序節點等)都有自己的core.yaml配置文件,用于定義節點的特定設置。

6.2 運行Org1

6.2.1 設置環境變量

現在可以設置環境變量,以允許您將對等?CLI?作為?Org1?進行操作:(直接復制,不需要改)

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
  1. CORE_PEER_TLS_ENABLED=true:啟用對等節點的TLS安全傳輸。這表示對等節點將使用安全的TLS協議進行通信。
  2. CORE_PEER_LOCALMSPID="Org1MSP":指定了對等節點所屬的本地組織的MSP(成員服務提供者)ID。這里設置為"Org1MSP",表示該對等節點隸屬于組織"Org1"。
  3. CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt:設置了對等節點TLS連接時使用的根證書文件路徑。這個證書文件用于驗證與對等節點通信的遠程端的TLS證書的合法性。
  4. CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp:指定了對等節點的MSP配置路徑,其中包含了與該對等節點關聯的身份驗證相關信息,比如管理員身份的證書、私鑰等。
  5. CORE_PEER_ADDRESS=localhost:7051:設置了對等節點的地址和端口號,指明其他節點在本地主機(localhost)上的通信地址為7051端口。這是對等節點的gRPC通信地址,其他節點可以使用這個地址與該節點進行通信。

6.2.2?初始化賬本

運行以下命令初始化賬本:(直接復制,不需要改)

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"InitLedger","Args":[]}'

更直觀的表示為:(這里是方便你看的,復制的話復制上面這個就可以)

peer chaincode invoke \  # 調用鏈碼命令-o localhost:7050 \  # 排序服務節點的地址和端口號--ordererTLSHostnameOverride orderer.example.com \  # 排序服務節點的TLS主機名--tls \  # 使用TLS連接--cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" \  # 用于驗證排序服務節點TLS證書的根證書文件路徑-C mychannel \  # 指定鏈碼所在的通道名稱-n basic \  # 指定要調用的鏈碼的名稱--peerAddresses localhost:7051 \  # 要調用的對等節點的地址和端口號--tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" \  # 用于驗證對等節點TLS證書的根證書文件路徑--peerAddresses localhost:9051 \  # 另一個要調用的對等節點的地址和端口號--tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" \  # 用于驗證另一個對等節點TLS證書的根證書文件路徑-c '{"function":"InitLedger","Args":[]}'  # 指定要調用的鏈碼函數及其參數

最后一行調用了InitLedger函數,這個在我們的鏈碼里是有的

如果成功,應該看到類似以下的輸出:

-> INFO 001 Chaincode invoke successful. result: status:200

這條信息表示鏈碼調用成功。status:200表示調用返回了一個 HTTP 200 狀態碼,通常代表著成功的響應。這表明了鏈碼函數的執行在區塊鏈網絡中被成功地觸發,并且成功完成了所需的操作。

6.2.3?查詢賬本

現在可以從 CLI 查詢分類帳。

(我的理解是查詢不需要背書,所以就一行很簡單的代碼,但是修改需要背書,就需要標出網絡中的其余節點用以聯系)

運行以下命令以獲取已添加到通道分類帳的資產列表:(直接復制,不需要改,前提是你的鏈碼和我的一樣(上一篇博客))

peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllIdentities"]}'
  • peer chaincode query: 這部分指明了使用peer命令行工具,并調用其中的chaincode query子命令,用于執行鏈碼的查詢操作。
  • -C mychannel: 指定了要執行查詢的通道名稱,這里是mychannel
  • -n basic: 指定了要查詢的鏈碼的名稱為basic
  • -c '{"Args":["GetAllIdentities"]}': 這是指定了要調用的鏈碼函數及其參數的部分。在這里,調用了鏈碼中的GetAllAssets函數,它是一個查詢函數,用于獲取所有資產的信息。

如果成功,應該看到以下輸出:

6.2.4 修改賬本

使用以下命令通過調用鏈碼來更新現有的數據:(直接復制,不需要改,前提是你的鏈碼和我的一樣(上一篇博客))

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"UpdateIdentity","Args":["identity4","P","S","V"]}'

上述語句的功能是修改id為identity4的數據

成功會返回下列輸出

2023-12-12 09:07:59.485 CST 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery -> Chaincode invoke successful. result: status:200 

我們再次輸出全部數據看一下

peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllIdentities"]}'

?可以看到已經更改了

先前這些操作都是通過Org1進行的,如果你想通過Org2進行,通過下面的方式進入Org2

6.3 運行Org2

設置以下環境變量以運行Org2?:(直接復制,不需要改)

export CORE_PEER_TLS_ENABLED=true
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

設置好這些環境變量之后就ok了

后面直接調用函數就可以,方式和6.2.2-6.2.4一樣,除了函數名和輸入給函數的參數那一塊需要自行更改之外,其他的直接復制

7、關閉網絡

鏈碼里所有的函數都可以在剛剛通過Org1或者Org2進行測試

讀者可以自己多試試

測試完之后就要關閉網絡

注意:如果你沒有關閉網絡,下次再部署網絡時會出現難以預料的錯誤!!!

./network.sh down

通過上面這條語句就可以關閉網絡

8、常見問題

我這里就說說我遇到的問題


8.1?connection refused

在第5步啟動鏈碼時,如果是第一次啟動鏈碼,會從GitHub下載一些依賴,可能會出現connection refused問題

建議去配一下GitHub的SSH密鑰連接,就可以解決


8.2 不要sudo

上面的所有語句都不要加sudo

如果出現提示說權限不足,先退到上級文件夾,改一下這個文件夾的權限,設置為最高就可以

就是那個777的命令,去搜一下如何修改文件權限就能找到


我遇到的就這兩個錯誤

其他的錯誤也有,不過如果按照我上篇文章和這篇文章的步驟來的話,應該是都可以避開的

這篇教程就到此結束

后面我繼續肝一下官方文檔里的CA部分,如果搞明白了會繼續出新教程

如果能幫到你的話順手留個贊奧,謝謝好心人/doge

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215686.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215686.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215686.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PDF文件的限制編輯,如何設置?

想要給PDF文件設置一個密碼防止他人對文件進行編輯,那么我們可以對PDF文件設置限制編輯,設置方法很簡單,我們在PDF編輯器中點擊文件 – 屬性 – 安全,在權限下拉框中選中【密碼保護】 然后在密碼保護界面中,我們勾選【…

系列十、SpringBoot + MyBatis + Redis實現分布式緩存(基于注解方式)

一、概述 上篇文章 系列九、SpringBoot MyBatis Redis實現分布式緩存 介紹了基于xml方式實現分布式緩存的效果,當前大家使用的技術棧基本是springboot各種框架的組合,而springboot顯著的一個特點就是去xml配置,那么在無xml配置的情形下&…

CStdioFile

CStdioFile 文件創建、數據寫入、寫入路徑 void StdReferenceDWG::RefDrawCrvt(StdOneReference& ref) {char* old_locale _strdup(setlocale(LC_CTYPE, NULL));setlocale(LC_CTYPE, "chs");//設定CString strPath StdTool::GetCurPath() _T("襯圖\\Re…

界面控件DevExpress中文教程 - 如何用Office File API組件填充PDF表單

DevExpress Office File API是一個專為C#, VB.NET 和 ASP.NET等開發人員提供的非可視化.NET庫。有了這個庫,不用安裝Microsoft Office,就可以完全自動處理Excel、Word等文檔。開發人員使用一個非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…

基于SpringBoot的就業信息管理系統設計與實現(源碼+數據庫+文檔)

摘 要 在新冠肺炎疫情的影響下,大學生的就業問題已經變成了一個引起人們普遍重視的社會焦點問題。在這次疫情的沖擊之下,大學生的就業市場的供求雙方都受到了不同程度的影響,大學生的就業情況并不十分樂觀。目前,各種招聘平臺上…

Netty高性能的原因

Netty 之所以具有高性能,主要得益于以下幾個方面的設計和實現: 異步非阻塞: Netty采用基于事件驅動的異步非阻塞模型,即 Reactor 模式。這意味著它能夠處理大量并發連接而不會因為I/O操作而阻塞線程。不會因為每個連接都需要一個單…

云原生之使用Docker部署Mariadb數據庫

目錄 一、什么是云原生 二、Docker介紹 三、Mariadb數據庫介紹 四、如何使用Docker部署Mariadb數據庫 一、什么是云原生 云原生是一種綜合性的技術和方法論,旨在對應用程序進行全生命周期的管理,包括開發、部署、運行和擴展。它倡導將應用程序設計為…

moviepy基本參數用法大全

閱讀本文檔的前置說明: 本文檔用于講解Python的moviepy庫的自帶函數的用法,主要目的是講一下每個函數的每個參數的含義,無需一開始就全部掌握,粗略看一下就行,可以在后面自己開發過程,遇到不會用的函數再回…

大模型應用_AutoGPT

1 功能 整體功能,想解決什么問題 單獨使用 ChatGPT 時,只提供基本的聊天,無法實現具體的功能,如果想提供某種功能,則需要結合程序實現。AutoGPT目標是建立和使用 AI Agent,設定一個或多個目標,…

數據庫——字段拆分與合并

一、GP或PostgreSQL 1.字段拆分成行 unnest(string_to_array(test, ,)) 例如某一字段值為"a,b,c,d",使用string_to_array將其拆分為數組,然后使用unnest將數組平鋪成一張表 SELECT unnest(string_to_array(555,666,777, ,)) 2.字段拆分成列…

【EI征稿倒計時3天】第四屆IEEE信息科學與教育國際學術會議(ICISE-IE 2023)

第四屆IEEE信息科學與教育國際學術會議(ICISE-IE 2023) 2023 4th International Conference on Information Science and Education(ICISE-IE 2023) ICISE-IE2024已上線嶺南師范學院官網(點擊查看) 第四屆IEEE信息科學與教育國…

雙熒光素酶報告基因檢測(五)

關于雙熒光素酶報告基因檢測中遇到的問題及解決措施 問題1:為什么要用熒光素酶實驗來做檢測,不用其他報告基因來做,GFP可以嗎? 采用熒光素酶來做實驗是由其自身的優勢所決定的:(1)蛋白不需要翻…

@Transactional失效問題

作者簡介:大家好,我是smart哥,前中興通訊、美團架構師,現某互聯網公司CTO 聯系qq:184480602,加我進群,大家一起學習,一起進步,一起對抗互聯網寒冬 關于Transactional 日…

解讀 | 為什么有很多名人讓人們警惕人工智能

大家好,我是極智視界,歡迎關注我的公眾號,獲取我的更多前沿科技分享 邀您加入我的知識星球「極智視界」,星球內有超多好玩的項目實戰源碼和資源下載,鏈接:https://t.zsxq.com/0aiNxERDq 這個話題總能引起很…

六、ZGC深度剖析

一、引言 對于Java 程序員來說,JVM 幫助我們做了很多事情。 JVM是虛擬機,能夠識別字節碼,就是class文件或者你打包的jar文件,運行在操作系統上。 JVM幫我們實現了跨平臺,你只需要編譯一次,就可以在不同的…

在線課堂知識付費小程序源碼系統 開發組合PHP+MySQL:用手機隨時隨地地學習,講師親自在線授業解惑 帶安裝部署教程

近年來,人們對于學習的需求也日益增加。傳統的課堂教學已經無法滿足人們的學習需求,而在線課堂則能夠讓人們隨時隨地地進行學習。同時,隨著知識付費的興起,越來越多的講師也愿意將自己的知識和經驗分享給更多的人。因此&#xff0…

Mysql社區版日志審計插件

過去從Mysql官方自帶general.log日志的相比其他插件性能是最差的,我們考慮參考行業中較好的插件是MariaDB Audit Plugin, 可惜并不兼容mysql 5.7與mysql 8.0以上版本。 采用github開源項目,該項目支持MySQL 5.7和MySQL 8.0兩個分支。 https://github.c…

如何管理醫療設備用電?這才是最佳方法!

隨著社會對可持續發展和環保的關注不斷上升,蓄電池監控系統作為能源存儲和管理的關鍵技術,正在嶄露頭角。 蓄電池監控系統不僅為能源行業帶來了新的可能性,同時也為各個領域的能源使用者提供了更加智能、高效的解決方案。 客戶案例 工業生產…

ansible部署安裝Tomcat

我們需要用到的文件jdk以及tomcat安裝包 下載鏈接:https://pan.baidu.com/s/1sjG8Yl8k-SUbOv7KwKXZMA 提取碼:t71z 準備n臺機器(我這里就簡單部署三臺機器) ansible的安裝部署以及配置可以看博主之前的文章自動化運維工具-ansible部署 ansib…

建筑可視化數據大屏匯總,UI源文件(PC端大屏設計)

酷炫的大屏設計讓數據更好的展現,方便業務人員分析數據,輔助領導決策。現在分享大屏Photoshop源文件,以下為部分截圖示意。 劃重點:文末可獲得完整素材包~ 01 科技建筑平臺數據可視化 02 建筑公司可視化數據匯總平臺 03 深藍…