本文參考網上安裝 fabric 程序,包含遇到的問題及解決辦法,
1、Fabric 介紹
Hyperledger Fabric 是一個開源的企業級許可分布式賬本技術(Distributed Ledger Technology,DLT)平臺,專為在企業環境中使用而設計,智能合約,在 Fabric 中稱之為“鏈碼”,作為受信任的分布式應用程式,從區塊鏈中獲得信任,在節點中達成基本共識,它是區塊鏈應用的業務邏輯,
Fabric 由以下模塊化的組件組成:
- 可插拔的排序服務對交易順序建立共識,然后向節點廣播區塊;
- 可插拔的成員服務提供者負責將網路中的物體與加密身份相關聯;
- 可選的P2P gossip 服務通過排序服務將區塊發送到其他節點;
- 智能合約(“鏈碼”)隔離運行在容器環境(例如 Docker)中,它們可以用標準編程語言撰寫,但不能直接訪問賬本狀態;
- 賬本可以通過配置支持多種 DBMS;
- 可插拔的背書和驗證策略,每個應用程式可以獨立配置,
2、環境安裝程序
本次安裝環境使用 VMware Workstation 虛擬機安裝 CentOS7,其中需要安裝 Docker、Fabric、golang等,具體安裝程序如下:
(1)安裝前配置
更新yum:yum update
yum源配置:
cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
yum makecache
其他軟體下載:
yum install -y curl vim gcc gcc-c++ git
增加docker yum 源:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(2)docker 安裝
洗掉之前的docker配置:
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
使用官方腳本自動安裝:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
使用 docker --version 命令查看版本:

(3)docker-compose 安裝
使用curl命令從網址中拉入檔案到/usr/local/bin/docker-compose檔案下:docker-compose地址
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
給docker-compose檔案加上權限:
sudo chmod +x /usr/local/bin/docker-compose
檢驗docker-compose是否安裝成功:
docker-compose version

(4)安裝 go 環境
安裝git:
yum install -y git
cd /opt
mkdir golang
cd golang
wget https://studygolang.com/dl/golang/go1.14.10.linux-amd64.tar.gz
tar -zxvf go1.14.10.linux-amd64.tar.gz
設定環境變數:
vim /etc/profile
追加內容:
export GOPATH=/opt/gopath
export GOROOT=/opt/golang/go
export PATH=$GOROOT/bin:$PATH
export FABRIC=$GOPATH/src/github.com/hyperledger/fabric
重繪查看版本:
source /etc/profile
go version
go env
(5)拉取 fabric 原始碼
獲取原始碼:
mkdir -p ~/go/src/github.com/hyperledger
cd ~/go/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git

相關檔案和鏡像下載:(下載的fabric-samples會在scripts檔案夾下)
cd fabric/scripts
./bootstrap.sh # 執行腳本下載檔案和鏡像

(6)測驗網路
進入test-network:
cd fabric-samples/test-network
運行以下命令洗掉所有運行中任何容器:
./network.sh down

通過以下命令來啟動網路:
./network.sh up

運行以下命令以列出計算機上運行的所有Docker容器,可以看到該network.sh腳本創建的三個節點:
docker ps -a

5.創建頻道,使用network.sh腳本創建頻道,運行以下命令以使用默認名稱創建頻道mychannel
./network.sh createChannel
成功后可以看到以下結果:

啟動鏈碼:
./network.sh deployCC
遇到錯誤1:

替換執行命令:
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
遇到錯誤2:

執行命令設定 GOPROXY:
go env -w GOPROXY=https://goproxy.cn,direct
再次執行生成鏈碼命令,可以看到以下結果:

啟用測驗網路后,可以使用peerCLI與網路進行互動,peerCLI允許您從CLI呼叫已部署的智能合約,更新通道或安裝和部署新的智能合約,
在test-network中執行以下命令:
二進制檔案添加到您的CLI路徑:
export PATH=${PWD}/../bin:$PATH
設定FABRIC_CFG_PATH為指向存盤庫中的core.yaml檔案fabric-samples:
export FABRIC_CFG_PATH=$PWD/../config/
設定環境變數,允許以peer Org1的形式操作CLI:
# Environment variables for 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
用于安裝和啟動資產轉移(基本)鏈碼,呼叫(Go)鏈碼的功能以在分類帳上放置資產的初始串列:
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":[]}'
初始化成功可以看到以下內容:

從CLI查詢分類帳,運行以下命令以獲取已添加到渠道分類帳的資產串列:
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"]}'
命令執行成功可以看到以下結果:
2021-09-19 20:37:48.166 CST [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200
關閉測驗網路:
./network.sh down
該命令將停止并洗掉節點和鏈碼容器,洗掉組織加密材料,并從Docker注冊表中移除鏈碼映像,該命令還會從以前的運行中洗掉通道工件和docker卷,從而在遇到任何問題時允許您再次運行,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/301826.html
標籤:區塊鏈
下一篇:現金流動負債比率 和 ROE詳解
