自己動手部署區塊鏈-hyperledger/fabric-02__區塊鏈

來源:互聯網
上載者:User

1、環境架構說明:

系統採用容器的方式運行,構建過程簡單、各組件分工清晰:
1.Docker-compose:Docker 容器管理;
2.Go lang SDK:Go 語言開發、編譯環境;
3.Git:git 鏡像複製與提交;
4.Rest Client: rest API 測試;
容器主要運行有:MemberSrv 和Peer;

2.部署環境準備

3.安裝與部署
3.1從 DockerHub上拉取鏡像
a. 安裝和部署Docker以及docker-compose,詳細過程見《使用docker compose部署服務》。
b.拉取鏡像

[root@docker fabric]#docker pull hyperledger/fabric-peer:latest #拉取peer的鏡像[root@docker fabric]#docker pull hyperledger/fabric-membersrvc:latest#拉取memberserver的鏡像[root@docker fabric]# docker images#確認鏡像拉取成功REPOSITORY                                TAG                 IMAGE ID            CREATED             SIZEdocker.io/nginx                           latest              19146d5729dc        2 days ago          181.6 MBdocker.io/hyperledger/fabric-membersrvc   latest              b3654d32e4f9        9 weeks ago         1.417 GBdocker.io/hyperledger/fabric-peer         latest              21cb00fb27f4        9 weeks ago         1.423 GB

3.2 Docker-compose.yml 編寫

[root@docker fabric]# pwd/opt/fabric[root@docker fabric]# lsdocker-compose.yml  docker-compose.yml.old  INFO[root@docker fabric]# more docker-compose.ymlmembersrvc:  image: hyperledger/fabric-membersrvc  ports:    - "7054:7054"  command: membersrvcvp0:  image: hyperledger/fabric-peer  ports:    - "7050:7050"    - "7051:7051"    - "7053:7053"  environment:    - CORE_PEER_ADDRESSAUTODETECT=true    - CORE_VM_ENDPOINT=unix:///var/run/docker.sock    - CORE_LOGGING_LEVEL=DEBUG    - CORE_PEER_ID=vp0    - CORE_PEER_PKI_ECA_PADDR=membersrvc:7054    - CORE_PEER_PKI_TCA_PADDR=membersrvc:7054    - CORE_PEER_PKI_TLSCA_PADDR=membersrvc:7054    - CORE_SECURITY_ENABLED=true    - CORE_SECURITY_ENROLLID=test_vp0    - CORE_SECURITY_ENROLLSECRET=MwYpmSRjupbT  volumes:      - /var/run/:/var/run/  links:    - membersrvc  command: sh -c "sleep 5; peer node start --peer-chaincodedev"[root@docker fabric]# 

3.3 啟動
儲存 docker-compose.yml 到/opt/fabric目錄,運行docker-compose up 命令啟動2個容器(MemberServer和Peer).
到此,我們可以具備啟動和運行chaincode,並進行許可權管理的Fabric(雖然只有一個Peer):

[root@docker fabric]# docker-compose upCreating fabric_membersrvc_1Creating fabric_vp0_1Attaching to fabric_membersrvc_1, fabric_vp0_1

直到開機記錄顯示如下內容,說明啟動成功:

運行docker-compose ps 可以看到服務和對應的連接埠映射:

另外,常用操作:

[root@docker fabric]# docker-compose logs -f vp0#查看日誌[root@docker fabric]# docker-compose exec vp0 bash#exec到vp0

3.4運行與發布Chaincode
a.進入到peer裡 $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go 目錄下:

[root@docker fabric]# docker-compose exec vp0 bash


我們發現這個目錄裡有很多用例chaincode程式(基於go語言編寫),我們選擇chaincode_example2進行部署與測試。
b.部署chaincode_example。
拷貝chaincode_example02 到$GOPATH/src

root@e33e7f4dceb3:/opt/gopath/src# cp $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02/chaincode_example02.go $GOPATH/src/

c.在$GOPATH/src中進行編譯

root@e33e7f4dceb3:/opt/gopath/src# go build ./chaincode_example02.go root@e33e7f4dceb3:/opt/gopath/src# lschaincode_example02  chaincode_example02.go  github.com

編譯成功會在 GOPATH/src目錄產生chaincodeexample02檔案。d.發布chaincode在 GOPATH/src目錄產生chaincode_example02檔案。 d.發布chaincode 在GOPATH/src 下運行
CORE_CHAINCODE_ID_NAME=mycc CORE_PEER_ADDRESS=0.0.0.0:7051 ./chaincode_example02

直至出現“Received REGISTERED”字樣,代表成功。
3.5 deploy,invoke與query chaincode
a.login
CLI方式:

peer network login #使用者名稱和密碼在 membersrvc.yaml 檔案裡


Rest 方式:

b.deploy
CLI 方式

  CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode deploy -u jim -n mycc -c '{"Args": ["init", "a","100", "b", "200"]}'


Rest 方式:

c.Invoke
CLI 方式

  CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode invoke -u jim -l golang -n mycc -c '{"Args": ["invoke", "a", "b", "10"]}'

a 向b 轉10塊錢後,可以看到a 變成90,b變成210

Aval = 90, Bval = 210

Rest 方式:

d. query
CLI方式:

peer chaincode query -l golang -n mycc -c '{"Args": ["query", "b"]}' -u jim

Rest 方式:

查詢到b 得到了10塊錢,查a 的話,會得到-10.

總結:
1.上述過程示範了Fabric的搭建過程;
2.示範了chaincode的部署、共識執行和查詢;
3.示範了通過CLI和Rest api 方式與peer進行互動;

提示:chaincode chaincode_example02.go 用常式序社區上下載(https://raw.githubusercontent.com/hyperledger/fabric/master/examples/chaincode/go/chaincode_example02/chaincode_example02.go)的有問題,編譯不能通過,query時會逾時:

vp0_1         | 07:49:12.906 [rest] processChaincodeInvokeOrQuery -> ERRO af8 Error when querying chaincode: Error:Failed to execute transaction or query(Timeout expired while executing transaction)

peer 裡會出現:

14:57:01.368 [shim] DEBU : [ca1a01d3]Handling ChaincodeMessage of type: RANGE_QUERY_STATE(state:ready) Error starting Simple chaincode: Error handling message: [ca1a01d3-33e8-4fc2-be69-5ff8064f9b1a]Chaincode handler FSM cannot handle message (RANGE_QUERY_STATE) with payload size (10) while in state: ready

解決辦法:
採用$GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02,不用下載的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.