天天看點

Fabric_超詳細的fabric網絡搭建04-Peer節點相關操作

4.Peer操作

容器啟動之後,需要圍繞peer節點進行以下操作:

  1. 建立通道(隻需操作一次)
  2. 将所有組織的所有節點加入到通道中
  3. 給所有的peer節點安裝鍊碼
  4. 鍊碼初始化(隻需初始化一次,資料會自動同步到其它節點)
  5. 鍊碼調用

先進入容器

  • docker exec -it cli bash

1.建立通道

peer channel create --help

-o, --orderer string: orderer節點的位址

-c, --channelID: 通道的名字,建立通道檔案的時候通過configtxgen指定過

-f, --file string: 指定生成的通道所使用的檔案

–tls: 和orderer通信時是否對資料加密,不寫或false為不加密,true為加密

–cafile string: orderer的證書,orderer證書的節點目錄為/msp/tlscacerts/xxxx.pem , 這個路徑必須是絕對路徑

在容器中不斷地去找cafile的目錄,大緻過程如下:

Fabric_超詳細的fabric網絡搭建04-Peer節點相關操作
  • 建立通道
#使用一變量接收路徑
tlsfile=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/github.com/msp/tlscacerts/tlsca.github.com-cert.pem
peer channel create -o orderer.github.com:7050 --tls true --cafile $tlsfile -c githubchannel -f ./channel-artifacts/channel.tx
           

orderer.github.com:7050 為orderer節點檔案docker-compose-base.yaml中聲明的變量

$tlsfile 接收變量的值

-c 通道ID ,之前生成通道檔案時configtxgen指定的ID為githubchannel

這時檔案夾中會多出來一個githubchannel.block通道檔案.

建立通道過程中的問題:

# 錯誤1
Error: got unexpected status: BAD_REQUEST -- error authorizing update: error validating ReadSet: readset expected key [Group]  /Channel/Application at version 0, but got version 1
# 第一種情況: 通道已經建立出來了, 再次建立
# 第二種情況: 第一次啟動了一個網絡, 關閉(容器也銷毀了), 但是再次啟動網絡, 建立通道時出現錯誤,這個是因為第一次啟動網絡生成的資料儲存在了挂載是資料卷目錄, 這些目錄沒有被删除,
# 解決: 可以使用docker volume prune -> 删除所有沒有被使用的資料卷

# 錯誤2
error validating DeltaSet: policy for [Group]  /Channel/Application not satisfied: Failed to reach implicit threshold of 1 sub-policies, required 1 remaining
# 原因:
# 這個問題的原因是用configtxgen生成創始塊的時候,配置檔案configtx.yaml指定了錯誤的msp目錄。 導緻生成的區塊中包含的證書其它使用者的證書。
# 比如修改了 crypto-config.yaml -> 生成了新的證書
# 解決: 
# 必須要重新生成:創始區塊和通道檔案 -> configtxgen
           
2.加入通道

peer channel --help

join: 加入通道

list: 檢視目前節點加入的通道

peer channel join [flags]

-b, --blockpath string: 加入的通道,這裡即githubchannel.block

peer channel join -b githubchannel.block #加入
peer channel list #檢視
           
3.錨節點更新

在用戶端檔案docker-compose-cli.yaml中第89行,由于channel-artifacts檔案夾被挂載到了容器内部的,是以在容器也可以看到相關檔案,錨節點的更新檔案就放在這裡.

Fabric_超詳細的fabric網絡搭建04-Peer節點相關操作
Fabric_超詳細的fabric網絡搭建04-Peer節點相關操作
  • 更新go組織的peer節點為錨節點(更新cpp組織,需要讓用戶端連到cpp組織上某個peer節點)
peer channel update -o orderer.github.com:7050 --tls --cafile $tlsfile -c githubchannel -f ./channel-artifacts/goAnchor.tx
           
4.安裝鍊碼

peer chaincode install [flags]

-l, --lang string: 鍊碼語言

-n, --name string: 鍊碼的名字

-p, --path string: 鍊碼路徑 go鍊碼:相對路徑$GOPATH/src; node.js/java鍊碼: 絕對路徑

-v, --version string: 鍊碼版本

  • 先将chaincode_example02.go 這個鍊碼檔案拷貝到testfabric/chaincode/目錄中:
~/hyperledger-fabric/fabric-samples/chaincode/chaincode_example02/go$ cp chaincode_example02.go ~/testfabric/chaincode/
           

因為用戶端檔案docker-compose-cli.yaml中chaincode檔案夾挂載在了容器中,在容器内部可以看到這個go檔案

Fabric_超詳細的fabric網絡搭建04-Peer節點相關操作
Fabric_超詳細的fabric網絡搭建04-Peer節點相關操作
  • 安裝鍊碼:
peer chaincode install -n githubcc -v 1.0 -p github.com/chaincode
           
-p後的路徑是gopath/src後的路徑

如果得到下面<status:200 payload:“OK”>的結果,說明安裝成功

2019-03-10 14:46:11.041 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-03-10 14:46:11.041 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2019-03-10 14:46:11.870 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" > 

           
  • 打包鍊碼:
peer chaincode package -n githubcc -v 1.0 -p github.com/chaincode chaincode.out
           

得到chaincode.out打封包件,之後可以直接使用進行鍊碼的安裝

安裝代碼為:

peer chaincode install 檔案名

繼續閱讀