天天看點

Hyperledger Fabric 1.0快速搭建 ---運作e2e_cli項目實踐

一、準備工作

我所用的liunx系統是centos7

在開始之前我們要做相應的準備,golang docker  docker-compose git 的安裝

golang安裝參考:https://blog.csdn.net/qq_36956154/article/details/82225429

docker安裝參考:https://blog.csdn.net/qq_36956154/article/details/81095465

docker-compost參考:https://blog.csdn.net/qq_36956154/article/details/82223950

git安裝可直接安裝使用指令:yum install -y git即可

在這些都安裝完以後進行下一步

下一篇:運作frist_network項目實踐

二、下載下傳Fabric源碼

在go的工作路徑下建立src/github.com/hyperledger檔案夾

mkdir -p src/github.com/hyperledger
cd /opt/golang/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git
//在這裡下載下傳的是最新版本的,網上大多數資料是fabric-1.0.0版本的資料
//網上的做法是下載下傳最新的版本以後運作 git checkout -b v1.0.0 指令切換到1.0.0分支下
//但是我這麼做以後在後面運作e2e_cli項目的時候出現錯誤,應該是版本不相容的錯誤
//fabric 和 鏡像的版本 和 cryptogen的版本要一緻才能運作起來
//是以我的解決辦法是直接下載下傳1.0.0版本的fabric項目
git clone https://gerrit.hyperledger.org/r/fabric -b v1.0.0
//這樣可以確定項目的版本是1.0.0版本的           

下載下傳完以後在hyperledger下會有一個fabric檔案夾(這個fabric已經是1.0.0版本的了)

[[email protected] hyperledger]# ll
total 4
drwxr-xr-x. 27 root root 4096 Sep  1 07:46 fabric
           

2.1下載下傳fabric鏡像

在fabric中的e2e_cli項目有一個download-dockerimages.sh,運作以後會幫我把所需要的鏡像都下載下傳好

[[email protected] hyperledger]# cd fabric/examples/e2e_cli/
[[email protected] e2e_cli]# ll
total 84
drwxr-xr-x. 2 root root    60 Sep  1 08:04 base
drwxr-xr-x. 2 root root   111 Sep  1 08:05 channel-artifacts
-rw-r--r--. 1 root root  5013 Sep  1 07:46 configtx.yaml
drwxr-xr-x. 4 root root    59 Sep  1 08:05 crypto-config
-rw-r--r--. 1 root root  3858 Sep  1 07:46 crypto-config.yaml
-rw-r--r--. 1 root root  2677 Sep  1 07:46 docker-compose-cli.yaml
-rw-r--r--. 1 root root  2005 Sep  1 07:46 docker-compose-couch.yaml
-rw-r--r--. 1 root root  2517 Sep  1 07:46 docker-compose-e2e-template.yaml
-rw-r--r--. 1 root root  2725 Sep  1 08:05 docker-compose-e2e.yaml
-rw-r--r--. 1 root root  2119 Sep  1 07:46 download-dockerimages.sh
-rw-r--r--. 1 root root 41711 Sep  1 07:46 end-to-end.rst
drwxr-xr-x. 3 root root    23 Sep  1 07:46 examples
-rwxr-xr-x. 1 root root  3588 Sep  1 07:46 generateArtifacts.sh
-rwxr-xr-x. 1 root root  2617 Sep  1 07:46 network_setup.sh
drwxr-xr-x. 2 root root    23 Sep  1 07:46 scripts
[[email protected] e2e_cli]# bash download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0
//運作此指令以後會下載下傳所需鏡像,在設定阿裡雲國内鏡像加速以後下載下傳會很快,但也會根據網絡情況而定
           

下載下傳以後運作docker images,會看到以下鏡像

[[email protected] e2e_cli]# docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
hyperledger/fabric-tools       latest              0403fd1c72c7        13 months ago       1.32GB
hyperledger/fabric-tools       x86_64-1.0.0        0403fd1c72c7        13 months ago       1.32GB
hyperledger/fabric-couchdb     latest              2fbdbf3ab945        13 months ago       1.48GB
hyperledger/fabric-couchdb     x86_64-1.0.0        2fbdbf3ab945        13 months ago       1.48GB
hyperledger/fabric-kafka       latest              dbd3f94de4b5        13 months ago       1.3GB
hyperledger/fabric-kafka       x86_64-1.0.0        dbd3f94de4b5        13 months ago       1.3GB
hyperledger/fabric-zookeeper   latest              e545dbf1c6af        13 months ago       1.31GB
hyperledger/fabric-zookeeper   x86_64-1.0.0        e545dbf1c6af        13 months ago       1.31GB
hyperledger/fabric-orderer     latest              e317ca5638ba        13 months ago       179MB
hyperledger/fabric-orderer     x86_64-1.0.0        e317ca5638ba        13 months ago       179MB
hyperledger/fabric-peer        latest              6830dcd7b9b5        13 months ago       182MB
hyperledger/fabric-peer        x86_64-1.0.0        6830dcd7b9b5        13 months ago       182MB
hyperledger/fabric-javaenv     latest              8948126f0935        13 months ago       1.42GB
hyperledger/fabric-javaenv     x86_64-1.0.0        8948126f0935        13 months ago       1.42GB
hyperledger/fabric-ccenv       latest              7182c260a5ca        13 months ago       1.29GB
hyperledger/fabric-ccenv       x86_64-1.0.0        7182c260a5ca        13 months ago       1.29GB
hyperledger/fabric-ca          latest              a15c59ecda5b        13 months ago       238MB
hyperledger/fabric-ca          x86_64-1.0.0        a15c59ecda5b        13 months ago       238MB
           

三、遇到的錯誤:

1.這個時候運作 bash network_setup.sh up指令

Hyperledger Fabric 1.0快速搭建 ---運作e2e_cli項目實踐

如果紅箭頭所指的不是1.0.0那你就有可能版本不對,可以先檢視以下項目的版本是不是1.0.0的版本

2.運作到一半的時候還會遇到以下錯誤

Error: Error endorsing chaincode: rpc error: code = Unknown desc = Error starting container: API error (404): {"message":"network e2ecli_default not found"}           

解決辦法:

[[email protected] e2e_cli]# cd base/
[[email protected] base]# ll
total 12
-rw-r--r--. 1 root root 4566 Sep  1 07:46 docker-compose-base.yaml
-rw-r--r--. 1 root root  991 Sep  1 08:04 peer-base.yaml
[[email protected] base]# vi peer-base.yaml

//e2e_cli目錄是固定的,啟動後會建立一個docker network以此為名字,這裡是e2e_cli。如果修改該目錄,要修改/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/base目錄下的peer-base.yaml
将網絡名改成如下名稱即可
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2e_cli_default           
Hyperledger Fabric 1.0快速搭建 ---運作e2e_cli項目實踐

3.還有一種錯誤就是會報沒有這個檔案的錯誤No such file 這個是你沒有生成密鑰檔案

解決辦法:cryptogen這個工具跟你項目版本有可能不對是以還是去保證你 frbric項目和 鏡像  和  cryptogen這三個版本一緻才能生成正确的密鑰檔案。

四、編譯

把這些修改以後再運作bash network_setup.sh up   會自動進行以下操作:

編譯生成Fabric公私鑰、證書的程式,程式在目錄:fabric/release/linux-amd64/bin

基于configtx.yaml生成創世區塊和通道相關資訊,并儲存在channel-artifacts檔案夾。

基于crypto-config.yaml生成公私鑰和證書資訊,并儲存在crypto-config檔案夾中。

基于docker-compose-cli.yaml啟動1Orderer+4Peer+1CLI的Fabric容器。

在CLI啟動的時候,會運作scripts/script.sh檔案,這個腳本檔案包含了建立Channel,加入Channel,安裝Example02,運作Example02等功能。

當出現以下界面時代表你運作成功,建構的fabric網絡正常,可以繼續學習了

2018-09-01 12:06:22.810 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2018-09-01 12:06:22.810 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
2018-09-01 12:06:22.810 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2018-09-01 12:06:22.810 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
2018-09-01 12:06:22.811 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C08BE81AADC0510...6D7963631A0A0A0571756572790A0161 
2018-09-01 12:06:22.811 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: C3FE35C92F1F40D85B35A3165A3ED9D6485EA439D888A257D4ED7125942B936C 
Query Result: 90
2018-09-01 12:06:30.439 UTC [main] main -> INFO 007 Exiting.....
===================== Query on PEER3 on channel 'mychannel' is successful ===================== 

===================== All GOOD, End-2-End execution completed ===================== 


 _____   _   _   ____            _____   ____    _____ 
| ____| | \ | | |  _ \          | ____| |___ \  | ____|
|  _|   |  \| | | | | |  _____  |  _|     __) | |  _|  
| |___  | |\  | | |_| | |_____| | |___   / __/  | |___ 
|_____| |_| \_| |____/          |_____| |_____| |_____|
           

五、手動測試e2e_cli項目

我們可以直接在上面fabric網絡啟動起來,并跑完測試例子的基礎上進行手動測試:

我實在虛拟機中把e2e_cli項目跑起來以後用xshell連接配接虛拟機(相當于再開一個指令行界面)

運作docker ps 檢視啟動的容器

[[email protected] e2e_cli]# docker ps
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS              PORTS                                                                       NAMES
2b36d108e91f        dev-peer1.org2.example.com-mycc-1.0   "chaincode -peer.add…"   13 minutes ago      Up 13 minutes                                                                                   dev-peer1.org2.example.com-mycc-1.0
d06f9004a5a5        dev-peer0.org1.example.com-mycc-1.0   "chaincode -peer.add…"   13 minutes ago      Up 13 minutes                                                                                   dev-peer0.org1.example.com-mycc-1.0
1670d2a72e19        dev-peer0.org2.example.com-mycc-1.0   "chaincode -peer.add…"   13 minutes ago      Up 13 minutes                                                                                   dev-peer0.org2.example.com-mycc-1.0
4506e3c2130d        hyperledger/fabric-tools              "/bin/bash -c './scr…"   14 minutes ago      Up 14 minutes                                                                                   cli
a5bd5036153a        hyperledger/fabric-peer               "peer node start"        14 minutes ago      Up 14 minutes       0.0.0.0:8051->7051/tcp, 0.0.0.0:8052->7052/tcp, 0.0.0.0:8053->7053/tcp      peer1.org1.example.com
8380e3c27dd6        hyperledger/fabric-peer               "peer node start"        14 minutes ago      Up 14 minutes       0.0.0.0:9051->7051/tcp, 0.0.0.0:9052->7052/tcp, 0.0.0.0:9053->7053/tcp      peer0.org2.example.com
6fb04bac1569        hyperledger/fabric-peer               "peer node start"        14 minutes ago      Up 14 minutes       0.0.0.0:7051-7053->7051-7053/tcp                                            peer0.org1.example.com
746e275a1e6f        hyperledger/fabric-peer               "peer node start"        14 minutes ago      Up 14 minutes       0.0.0.0:10051->7051/tcp, 0.0.0.0:10052->7052/tcp, 0.0.0.0:10053->7053/tcp   peer1.org2.example.com
5c271be54a47        hyperledger/fabric-orderer            "orderer"                14 minutes ago      Up 14 minutes       0.0.0.0:7050->7050/tcp                                                      orderer.example.com
           

上面三個dev開頭的容器是三個鍊碼容器,一個fabric-tools充當用戶端cli, 4個fabric-peer, 一個fabric-order提供節點共識服務。

接下裡我們執行:docker exec -it cli bash  進入cli容器,進行操作測試:  

在example02上面已經對a進行了初始化,是以我們不用再初始化了,直接進行查詢:

 peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

[email protected]:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
2018-09-01 12:59:58.605 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2018-09-01 12:59:58.605 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
2018-09-01 12:59:58.605 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2018-09-01 12:59:58.605 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
2018-09-01 12:59:58.605 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C08CE9AAADC0510...6D7963631A0A0A0571756572790A0161 
2018-09-01 12:59:58.605 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: 0E152D959839872E72E69C36F0EDD7C821874F7540A6770D78468EC01B4E6B28 
Query Result: 90
2018-09-01 12:59:58.614 UTC [main] main -> INFO 007 Exiting.....
           

查詢的結果是:Query Result: 90 說明a現在有90元 

下面我們做一個交易,a向b轉賬20元。

[email protected]:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem  -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'
2018-09-01 13:02:04.777 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2018-09-01 13:02:04.778 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
2018-09-01 13:02:04.783 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2018-09-01 13:02:04.783 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
2018-09-01 13:02:04.784 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C08CC9BAADC0510...696E766F6B650A01610A01620A023230 
2018-09-01 13:02:04.784 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: 220E8B34AD256599F6FEE61F6CF12062116EB72F08565D0F024F94FAD36E4BAF 
2018-09-01 13:02:04.799 UTC [msp/identity] Sign -> DEBU 007 Sign: plaintext: 0A95070A6708031A0C08CC9BAADC0510...EBC518E367DA8D647824B03CCC78737C 
2018-09-01 13:02:04.799 UTC [msp/identity] Sign -> DEBU 008 Sign: digest: D822109D40C483201696DD75B38638B9E48B0D412EAB76CC43FAF0DD7CCE72FD 
2018-09-01 13:02:04.802 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> DEBU 009 ESCC invoke result: version:1 response:<status:200 message:"OK" > payload:"\n \016Yg?/\374\326\342{'\300\274\023\252\326\302d\212\013\231\355A\033\240\376\276\2470K\277\204\327\022Y\nE\022\024\n\004lscc\022\014\n\n\n\004mycc\022\002\010\003\022-\n\004mycc\022%\n\007\n\001a\022\002\010\004\n\007\n\001b\022\002\010\004\032\007\n\001a\032\00270\032\010\n\001b\032\003230\032\003\010\310\001\"\013\022\004mycc\032\0031.0" endorsement:<endorser:"\n\007Org1MSP\022\200\006-----BEGIN -----\nMIICGTCCAb+gAwIBAgIQXY5Nh/+T/6zngZ3L+vJCmDAKBggqhkjOPQQDAjBzMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu\nb3JnMS5leGFtcGxlLmNvbTAeFw0xODA5MDExMjQyNDdaFw0yODA4MjkxMjQyNDda\nMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T\nYW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMC5vcmcxLmV4YW1wbGUuY29tMFkw\nEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/wxgP8uPz1M2GL+MOtRjj5guGVZfKx8w\ntkJIG4syQ5cwGITf/9QuKm3NCtcPOHhKPdZPUDgrNbqk4P7QEzwY/KNNMEswDgYD\nVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAg973lj17wp0Qz\nOi2uCQqSkvQj7WNPM5cqPDcJ3ADnhfUwCgYIKoZIzj0EAwIDSAAwRQIhAPpn54dr\nDwQxW6O06ko4VVQzAYnRFt9oMluKpU9cAZ8LAiBqZDh6Qm0GMXITfS5IDUAOmDgp\neUfJ8cLbJvFwyCmveg==\n-----END -----\n" signature:"0E\002!\000\346\3746\272\262\345l\0054\3212`\336\212\002\271[(Ns\035\353\315\025\031\270\235!\246\273\024}\002 >\371\351\262\\\266\352Yjy\223\022\247\251(\341\353\305\030\343g\332\215dx$\260<\314xs|" > 
2018-09-01 13:02:04.802 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 00a Chaincode invoke successful. result: status:200 
2018-09-01 13:02:04.803 UTC [main] main -> INFO 00b Exiting.....
           

然後再查詢a賬戶的餘額

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

[email protected]:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
2018-09-01 13:03:29.804 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2018-09-01 13:03:29.804 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
2018-09-01 13:03:29.804 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2018-09-01 13:03:29.804 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
2018-09-01 13:03:29.805 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C08A19CAADC0510...6D7963631A0A0A0571756572790A0161 
2018-09-01 13:03:29.805 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: AB2C610D2D0D2525E24FCBEAE91ECEC317AA4B6A226D9C56F370705FC1F89BB4 
Query Result: 70
2018-09-01 13:03:29.814 UTC [main] main -> INFO 007 Exiting.....
           

可以看到a的餘額現在是70 a已經像b賬戶轉了20元,通過exit來退出該容器。

至此,例子和環境都成功了。最後執行bash network_setup.sh down, 進行網絡的關閉和清理。

我寫這個的時候剛剛學習fabric,寫的也許很亂,等我再深入的了解以後也許會再梳理一遍,感謝網上大神的資料。

下一篇: boost asio

繼續閱讀