- 🎉區塊鏈系列
- 🎉點贊 👍 收藏 ?留言 📝 支持博主!
- 🎉歡迎訂閱專欄《區塊鏈100例》~🙉
- 🎉歡迎您的光臨~?
寫在前面
超級賬本Fabric的搭建對于新手來說,可能會有點難,我自己搭了好久,慢慢排查問題才搭出來,
因為節點有很多個,思路不清楚的話很難搭建成功,
目錄
- 寫在前面
- 1. 生成可執行檔案
- 2. 更改節點資訊
- 3. CLI的生成
- 4. 實體化鏈碼
- 5.注意點
- 5.1 鏡像問題
- 5.2 節點問題
- 5.3 example02 原始碼解讀
1. 生成可執行檔案
- 下載
fabric原始碼
注意是選擇發行版本1.0的,

把這個壓縮包丟到虛擬機上面,注意路徑一定要這個!!!然后解壓出來后重命名成fabric

進入到fabric -> fabric -> examples - > e2e_cli中執行這個 network_setup.sh 檔案
./network_setup.sh up

然后再release/linux-amd64/bin這里就能看到對應的可執行檔案了
**注意一點:**要提前安裝好gcc環境

只要這里有這些就行了!主要是用到這些可執行的檔案,然后cp到go/bin目錄下

然后就行了!
2. 更改節點資訊
打開剛剛下載好的檔案
- 更改節點資訊,方便后續生成
對應模塊
我們打開examples -> e2e_cli -> docker-compose-cli.yaml修改成這個樣子,讓他這個路徑修改生成到當前檔案處,

再打開examples -> e2e_cli -> base - > peer-base.yaml 修改成hyperledger_default,

然后我們再打開examples -> e2e_cli -> base - > docker-compose-base.yaml 把修改節點資訊
一定要保證這些節點下的域名相互對應!


3. CLI的生成
然后我們把這些檔案拉到 go -> src 中目錄中即可,

- 生成模板組態檔
cryptogen generate --config crypto-config.yaml

- 生成創世塊
configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./genesis.block

有這個genesis.block 檔案即可

- 生成通道
configtxgen -profile TwoOrgsChannel -channelID fanonechannel -outputCreateChannelTx ./channel.tx

生成這個channel.tx即可,

- 放置
通道和創世塊檔案

- 啟動CLI,啟動這個CLI即可!
docker-compose -f docker-compose-cli.yaml up -d

檢驗是否成功
docker ps -a

全部都up起來就可以了,
如果有哪個節點沒有up就一定要把他日志列印出來
docker logs id(節點id)
4. 實體化鏈碼
- 鏈碼是一種用于部署代碼到 Hyperledger Fabric 區塊鏈網路中的通用容器,
- 鏈碼中定義一個或多個相關聯的
智能合約,- 每個智能合約在鏈碼中有一個
唯一的標識名,- 應用程式通過合約名稱去訪問
鏈碼容器內的指定的智能合約,
- 進入容器中
docker exec -it cli bash

- 客戶端創建通道
peer channel create -o orderer.example.com:7050 -c fanonechannel -f ./channel-artifacts/channel.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem
引數說明
-o:orderer節點地址,域名/ip:埠號(7050)
-c:要創建的通道id,必須小寫,需要和之前生成的通道時候的id一樣
-f:configtxgen生成的通道檔案,./channel-artifacts/channel.tx
-t:創建通道的超時時長,默認5s
--tls:通信是否使用tls加密,true或false,和之前的配置保持一致
--cafile:tls證書檔案,必須是絕對路徑,pem后綴的檔案peer節點路徑/crypto/ordererOrganization/.../msp/tlscacerts/tlsca.xx.pem
出現這個檔案即可

- 加入通道
peer channel join -b fanonechannel.block

- 查看是否加入成功
peer channel list

- 安裝鏈碼
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go

- 實體化鏈碼
peer chaincode instantiate -o orderer.example.com:7050 -C fanonechannel -c '{"Args":["init","a","50","b","100"]}' -n mycc -P "OR ('Org1MSP.member','Org2MSP.member')" -v 1.0 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem
引數說明
-o :orderer節點的地址,域名:7050
-C :channelId
-c :json格式引數
-l :語言
-n :chaincode的名字,安裝鏈碼的時候的名字
-P :背書策略,交易規則,指定都哪些節點參與
-v :鏈碼版本
--tls :是否使用tls加密,true或false
--cafile :order節點下的pem檔案路徑 order節點路徑:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/orderer.com/msp/tlscacerts/tlsca.orderer.com-cert.pem
例子
peer chaincode instantiate
-o orderer.orderer.com:7050
-C fanonechannel
-c '{"Args":["init","a","50","b","100"]}'
-n example02
-P "OR ('Peer1Orgs.member','Peer2Orgs.member')"
-v 1.0
--tls true
--cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem

成功的話,會在docker中生成鏡像

- 驗證實體化成功
peer chaincode query -C fanonechannel -n mycc -c '{"Args":["query","a"]}'
查詢即可

出現這個剛剛初始化的a的值就是50,就可以了,
5.注意點
也不難吧,但我搞了半個月,,
5.1 鏡像問題
如果用官方的鏡像腳本是不行的!會拉取不完全,你以為完成了,但是是不完全的,

要一個一個拉取,注意拉取順序,不能跳過的,
docker pull hyperledger/fabric-tools:x86_64-1.0.0
docker pull hyperledger/fabric-orderer:x86_64-1.0.0
docker pull hyperledger/fabric-peer:x86_64-1.0.0
docker pull hyperledger/fabric-couchdb:x86_64-1.0.0
docker pull hyperledger/fabric-kafka:x86_64-1.0.0
docker pull hyperledger/fabric-ca:x86_64-1.0.0
docker pull hyperledger/fabric-ccenv:x86_64-1.0.0
docker pull hyperledger/fabric-baseimage:x86_64-0.4.7
docker pull hyperledger/fabric-javaenv:x86_64-1.0.0
docker pull hyperledger/fabric-zookeeper:x86_64-1.0.0
如果你覺得很慢的話,就換一下國內的docker鏡像源
在虛擬機上創建這個檔案/etc/docker/daemon.json
然后輸入
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
也可以用其他的
# Docker中國區官方鏡像
https://registry.docker-cn.com
# 網易
http://hub-mirror.c.163.com
# ustc
https://docker.mirrors.ustc.edu.cn
# 中國科技大學
https://docker.mirrors.ustc.edu.cn
# 阿里云容器服務
https://cr.console.aliyun.com/
然后重新啟動docker服務就好了
systemctl restart docker.service
拉取完全部的鏡像之后,把這個標簽改成latest
docker tag hyperledger/fabric-tools:x86_64-1.0.0 hyperledger/fabric-tools
docker tag hyperledger/fabric-orderer:x86_64-1.0.0 hyperledger/fabric-orderer
docker tag hyperledger/fabric-peer:x86_64-1.0.0 hyperledger/fabric-peer
docker tag hyperledger/fabric-couchdb:x86_64-1.0.0 hyperledger/fabric-couchdb
docker tag hyperledger/fabric-kafka:x86_64-1.0.0 hyperledger/fabric-kafka
docker tag hyperledger/fabric-ca:x86_64-1.0.0 hyperledger/fabric-ca
docker tag hyperledger/fabric-ccenv:x86_64-1.0.0 hyperledger/fabric-ccenv
docker tag hyperledger/fabric-baseimage:x86_64-0.4.7 hyperledger/fabric-baseimage
docker tag hyperledger/fabric-javaenv:x86_64-1.0.0 hyperledger/fabric-javaenv
docker tag hyperledger/fabric-zookeeper:x86_64-1.0.0 hyperledger/fabric-zookeeper
驗證是否拉取成功
docker images
出現這些鏡像即可

注意一點:如果鏡像更新的話,之前的配置都要重新進行配置,所以鏡像一定要配置好
5.2 節點問題
一定要注意這些節點要對應他所對應的節點名稱!!!不要peer1下面有peer0之類的!

5.3 example02 原始碼解讀
Init函式:
初始化兩個賬戶,并把賬戶金額寫道賬本中,除了`init`引數,還需要四個引數,兩個賬戶和對應的金額
Invoke函式`:
invoke: '{"Args":["invoke","a","b","1"]}'
delete:'{"Args":["delete","a"]}'
query:-c '{"Args":["query","a"]}'
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/306471.html
標籤:其他
