本文默認HyperLedger Fabric 2.4 環境已經搭好且啟動 test-network 網路測驗完成,
如果在啟動 test-network 網路測驗的程序中出現錯誤問題,可參考我這篇博客:
(二)HyperLedger Fabric 2.4 test-network啟動測驗網路時遇到的問題_煙斂寒林的博客-CSDN博客
如果是環境還沒搭好或者基本工具還未安裝的可參考我這篇博客:
(一)HyperLedger Fabric 2.4 環境搭建_煙斂寒林的博客-CSDN博客
一、開啟測驗網路
首先進入到test-network路徑下:
cd fabric-samples/test-network
啟動測驗網路 :
./network.sh up
測驗網路由兩個peer節點,一個order節點組成,當我們進行測驗網路部署時,不會有channel被建立,
此時查看docker容器:
docker ps
如圖,可以看到當前運行的三個Docker容器就是由剛才的up命令創建的:

每個與Fabric網路互動的節點需要屬于一個作為網路成員的組織,這些組織所組成的組被稱為consortium(聯盟),這個測驗網路有兩個聯盟成員Org1和Org2,還有一個為網路提供排序服務的排序組織,
Peers是Fabric網路的基礎組件,它存盤區塊鏈的賬本,并在交易提交到賬本之前驗證交易,Peers也運行包含著業務邏輯的智能合約,由此來管理賬本上的資產,
網路中的每個Peer都屬于聯盟的一個成員,在測驗網路中peer0.org1.example.com和peer0.org2.example.com各有一個peer,
每個Fabric網路也包含一個排序服務,用于將交易進行排序,這樣可以讓peer節點專注于驗證交易和提交到賬本,
在order節點收到來自客戶端的交易之后,會按照順序添加到一個塊中,然后分發到各個peer中,加入區塊鏈賬本,此外order節點還可以作業系統的channel,定義哪些組織是聯盟成員,
測驗網路中用了一個Raft排序節點來提供排序服務,這個節點所屬組織為orderer.example.com,在測驗網路中只有一個order節點,但是在真實的網路中,可能會有被多個組織操作的多個排序節點,不同的排序節點會利用Raft共識演算法在網路中來達成交易的一致,
二、創建Channel
Channel是一個用于特定網路成員之間通信的私有層,只有被邀請加入Channel的成員才能夠使用它,對網路中其他成員不可見,每個Channel都有一個單獨的區塊鏈賬本,被邀請加入Channel的peer可以存盤Channel的賬本然后驗證Channel的交易,
(1)運行如下命令可以創建一個名為mychannel(默認通道名)的Channel連接Org1和Org2,
./network.sh createChannel
出現如下錯誤:

scripts/createChannel.sh:行40: osnadmin: 未找到命令
Channel creation failed
錯誤原因:
原因尚未可知,據網上查閱,好像因為我本地安裝的時Fabric2.4版本,而拉去的fabric-samples是2.2版本,后續版本有個新改動,所以會引起錯誤,
解決方法:
把拉去的fabric-samples也換成2.4版本,

如圖,創建成功,
(2)也可以利用-c來自定義Channel的名稱,通過指定不同的名稱可以創建多個Channel,
./network.sh createChannel -c channel1
(3)如果想要在啟動測驗網路的同時創建Channel,可以同時使用up和createChannel兩個引數,
./network.sh up createChannel
三、下載go依賴
正常來說下一步應該部署鏈碼,但此時鏈碼所在路徑還缺少go依賴,所以我們要獲取依賴,
在正式獲取依賴之前,先要更改go env設定,使用下面兩個命令:
export GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
此時就把go proxy切換成中國代理,這樣才能下載vendor依賴,
查看是否切換成功:
go env
出現跟下圖一樣的就是成功了:

進入鏈碼所在路徑(測驗用例的鏈碼路徑如下)
cd /opt/app/go/fabric/scripts/fabric-samples/asset-transfer-basic/chaincode-go
下載依賴:
go mod vendor
成功后在鏈碼路徑會出現vendor檔案夾,完成,
四、在通道上啟動鏈碼chaincode(智能合約)
在創建channel之后,可以使用智能合約來和channel的賬本互動,運行在網路成員上的應用可以呼叫智能合約來改變賬本上的資產,也可以查詢智能合約來讀取賬本上的資料,
多重簽名用于保證利用智能合約創建的交易的有效性,在提交到賬本之前,智能合約會被多個組織簽名,這樣可以防止一個組織篡改賬本,只有交易是連續的,而且被足夠多的組織簽名之后,才會提交到賬本中,指明channel中組織的策略也是chaincode定義的部分,
在Fabric中,智能合約以chaincode的形式部署在網路中,一個智能合約會安裝在一個組織的peers中,之后才能部署在Channel中,這樣才可以用于區塊鏈賬本互動和交易,Channel中的成員需要同意chaincode中的定義,這些定義建立了chaincode的治理,只有足夠多的成員同意了定義,才能將這個定義提交到channel中,來進行使用,
(1)使用network.sh創建通道之后,可以使用以下命令在通道上啟動鏈碼(默認使用go語言),記得切換回 /fabric-samples/test-network 目錄:
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
ccn代表鏈碼名稱,ccp代表鏈碼路徑,ccl代表鏈碼的編程語言,
如圖,啟動成功:

五、與網路互動
當測驗網路成功啟動之后,可以利用命令列的peer命令與網路互動,它允許用戶呼叫部署好的智能合約,更新channel或者安裝和部署新的智能合約,
首先確保自己位于test-network目錄下,
進入CLI容器,進行invoke互動,需要幾行命令設定CLI的路徑:
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
先設定為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
用下面的命令初始化賬本:
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 query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
成功后回傳:
[{"AppraisedValue":300,"Color":"blue","ID":"asset1","Owner":"Tomoko","Size":5},{"AppraisedValue":400,"Color":"red","ID":"asset2","Owner":"Brad","Size":5},{"AppraisedValue":500,"Color":"green","ID":"asset3","Owner":"Jin Soo","Size":10},{"AppraisedValue":600,"Color":"yellow","ID":"asset4","Owner":"Max","Size":10},{"AppraisedValue":700,"Color":"black","ID":"asset5","Owner":"Adriana","Size":15},{"AppraisedValue":800,"Color":"white","ID":"asset6","Owner":"Michel","Size":15}]
通過命令改變一筆資產的所有者:
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":"TransferAsset","Args":["asset6","Christopher"]}'
成功后如圖:

接下來可以更換成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
查詢賬本:
peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'
成功后回傳:

六、關閉測驗網路
./network.sh down
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/399622.html
標籤:區塊鏈
上一篇:面向工業場景,如何實作綠色智能?
