最新在线看的黄网|伊人久久久久久久网站|日本a视频专区二|欧美A级无码毛片|有扫五av在线播放|好屌日aV在线播放|内射福利视频导航|极品少妇一区二区视频|无吗在线一区播放|性爱黄色视频不卡

WIN10 Ubuntu20.04 Fabric 2.0安裝部署

一、前置環(huán)境安裝

1 安裝pip,curl,git工具包

2 安裝docker

3 安裝docker-compose

4 GO語(yǔ)言依賴

二、Fabric2.2 開(kāi)發(fā)環(huán)境

1 創(chuàng)建文件夾并拉取 fabric 源碼

? ? ? ? ?2 下載實(shí)驗(yàn)所需樣例及 docker 鏡像

3 網(wǎng)絡(luò)環(huán)境測(cè)試

4 問(wèn)題

三、測(cè)試自己的鏈碼

1 啟動(dòng) Fabric 網(wǎng)絡(luò)

2 部署鏈碼

3 調(diào)用結(jié)果


WIN10 Ubuntu20.04?Fabric?2.0安裝部署

虛擬機(jī)配置:


一、前置環(huán)境安裝

1 安裝pip,curl,git工具包

在安裝相關(guān)工具包前更新所需軟件,否則安裝時(shí)部分包會(huì)安裝失敗。

更新指令:sudoapt-getupdate  sudoapt-getupgrade

sudo apt install git

sudo apt install curl

sudo apt install python-pip

pip install?--upgrade pip

2 安裝docker

安裝 docker前為確保docker版本先卸載原有 docker 版本 ,重新安裝

卸載指令:sudo apt-get remove docker docker-engine docker.io

安裝 docker 指令:sudo apt install docker.io

查看 docker 版本:?docker -v

重啟服務(wù)

sudo systemctl daemon-reload

sudo systemctl restart docker

3 安裝docker-compose

安裝指令:sudo apt install docker-compose

查看指令:docker-compose -v

允許其他用戶執(zhí)行 compose 相關(guān)命令

執(zhí)行指令:sudo chmod +x /usr/share/doc/docker-compose

4 GO語(yǔ)言依賴

安裝依賴包:sudo apt install libtool libltdl-dev

下載GO語(yǔ)言安裝包并解壓安裝,指令下載的是go1.14.6

安裝指令:wget https://studygolang.com/dl/golang/go1.14.6.linux-amd64.tar.gz

解壓指令:sudo tar -xzvf go1.14.6.linux-amd64.tar.gz -C /usr/local/

配置環(huán)境變量 ,加在文件末尾

配置指令:sudo vim/etc/profile 

export PATH= $PATH:/usr/local/go/bin

export GOROOT= /usr/local/go

export GOPATH= $HOME/go

export PATH= $PATH:$GOPATH/bin:$GOPATH/bin

錯(cuò)誤:vim:command not found

缺少 vim 工具,安裝指令:sudo apt-get install vim-gtk,類(lèi)似錯(cuò)誤同樣處理。

生效指令:source /etc/profile

檢查是否安裝成功:go version

重啟虛擬機(jī),檢查環(huán)境

GO 語(yǔ)言:go1.14.6linux/amd64

Docker-compose:docker-composeversion1.25.0

Docker:dockerversion19.03.8


二、Fabric2.2 開(kāi)發(fā)環(huán)境

1 創(chuàng)建文件夾并拉取 fabric 源碼

mkdir -p go/src/github.com/hyperledger/

cd?go/src/github.com/hyperledger/

安裝指令:

git clone "https://github.com/hyperledger/fabric.git"

cd fabric/

cd scripts/

2 下載實(shí)驗(yàn)所需樣例及 docker 鏡像

可以直接運(yùn)行sudo./bootstrap.sh下載官方樣例和所需docker鏡像,但是運(yùn)行特別慢,失敗可以重新運(yùn)行,或者修改 bootstrap.sh 腳本運(yùn)行:

vim ~/?go/src/github.com/hyperledger/fabric/scripts/bootstrap.sh

圖片左邊改成右邊,:wq!保存退出

回到原來(lái)的文件夾運(yùn)行指令:sudo./bootstrap.sh
修改后的腳本下載時(shí)只會(huì)進(jìn)行鏡像拉取,因此需要手動(dòng)下載 fabric-samples 及二進(jìn)制文件。

cd?~/?go/src/github.com/hyperledger/fabric/scripts

git clone https://github.com/hyperledger/fabric-samples.git

這里很容易因?yàn)榫W(wǎng)絡(luò)問(wèn)題下載不全鏡像,之后的運(yùn)行會(huì)出問(wèn)題,如果出問(wèn)題,多運(yùn)行幾次,下全缺失的鏡像

下好 fabric-samples 文件后下載二進(jìn)制文件并解壓。

wget https://github.com/hyperledger/fabric/releases/download/v2.2.1/hyperledger-fabric-lin ux-amd64-2.2.1.tar.gz

sudo tar -xzvf?hyperledger-fabric-lin ux-amd64-2.2.1.tar.gz

3 網(wǎng)絡(luò)環(huán)境測(cè)試

進(jìn)入管理員權(quán)限,不會(huì)頻繁出環(huán)境變量的錯(cuò)誤

啟動(dòng) fabric 網(wǎng)絡(luò):sudo ./network.sh up

在網(wǎng)絡(luò)上建立通道:sudo ./network.sh createChannel

在通道上啟動(dòng)鏈碼:sudo ./network.sh deployCC 

啟動(dòng)鏈碼后在 test-network 目錄上進(jìn)行環(huán)境變量設(shè)置并使之生效。

source /etc/profile
執(zhí)行查詢指令:

peer chaincode query -C mychannel -n fabcar -c? '{"Args":["queryAllCars"]}'

查詢出現(xiàn)錯(cuò)誤后進(jìn)入 fabcar 文件執(zhí)行./startFabric.sh,重新啟動(dòng)網(wǎng)絡(luò)再查詢

cd /opt/gopath/src/github.com/hyperledger/fabric/scripts/famples-samples/fabcar

sudo ./startFabric.sh

關(guān)閉網(wǎng)絡(luò):./network.sh down

4 問(wèn)題

解決辦法:對(duì) go 換源,之后重新啟動(dòng)鏈碼。

執(zhí)行指令:go env -w GO111MODULE=on

? ? ? ? ?go env -w GOPROXY=https://goproxy.cn,direct

三、測(cè)試自己的鏈碼

例子:資產(chǎn)交易平臺(tái):? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

鏈接里的代碼是基于1.4的,需要把開(kāi)頭這個(gè)部分替換掉

"github.com/hyperledger/fabric-chaincode-go/shim"

"github.com/hyperledger/fabric-protos-go/peer"

把這里的鏈碼復(fù)制到fabcar.go文件里替換保存

1 啟動(dòng) Fabric 網(wǎng)絡(luò)

刪除運(yùn)行中的 docker,以免之前實(shí)驗(yàn)的遺留部分有所影響,關(guān)閉網(wǎng)絡(luò)。

執(zhí)行指令:./network.sh down

建立新的測(cè)試網(wǎng)絡(luò):./network.sh up 和 ./network.sh createChannel。

執(zhí)行后可創(chuàng)建一個(gè)通道 mychannel 和兩個(gè)組織 Org1,Org2.每個(gè) 組織有一個(gè) peer 且已經(jīng)加入通道中。

2 部署鏈碼

部署鏈碼主要分為四部分:打包鏈碼、安裝打包的鏈碼、各組織對(duì)鏈碼內(nèi)容和定義達(dá)成一致、向 channel 中提交鏈碼。

1 打包鏈碼

先對(duì)鏈碼打包,進(jìn)入 fabric-samples/chaincode/fabcar/go 文件,使用 go module,查看 go.mod 文件并安裝鏈碼依賴包。

鏈碼依賴包安裝完成后,回到 test-network 目錄。

root權(quán)限下

cd /home/用戶名/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/chaincode/fabcar/go

cat go.mod

GO111MODULE=on go mod vendor

cd /home/用戶名/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network


使用 peerCLI 來(lái)打包鏈碼,添加 Peer 到 CLI 命令路徑中,并設(shè)置相關(guān)路徑, 設(shè)置完成后查看 peer 版本來(lái)確認(rèn)是否安裝成功。

export PATH=${PWD}/../bin:$PATH

export FABRIC_CFG_PATH=$PWD/../config/

peer version

打包鏈碼:

peer lifecycle chaincode package fabcar.tar.gz --path../chaincode/fabcar/go/ --langgolang --labelfabcar_1

2 安裝打包的鏈碼

首先在 Org1 的 peer 上安裝,可以通過(guò)設(shè)置環(huán)境變量來(lái)指定 peer 操作的是 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
peer lifecycle chaincode install fabcar.tar.gz

同樣,在 Org2 的 peer 上安裝鏈碼:

export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051

peer lifecycle chaincode install fabcar.tar.gz

輸出的結(jié)果是一樣的

3 審議鏈碼定義

查找 peer 上的 packageID 并將其保存到環(huán)境變量中。

peer lifecycle chaincode queryinstalled

export CC_PACKAGE_ID=______________________________//這里是剛查出來(lái)的id

用 Org1 和 Org2 分別審議鏈碼,這里環(huán)境變量還在Org2下

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

再審議Org1

//回到org1的環(huán)境
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_ADDRESS=localhost:7051

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

4 向 Channel 中提交鏈碼定義

檢查一下哪些成員同意了鏈碼定義

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name fabcar --version 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json

通道內(nèi)所有組織都同意了鏈碼定義之后,鏈碼定義就可以提交到 channel 中。

peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1.0 --sequence 1 --tls true --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example. com/msp/tlscacerts/tlsca.example.com-cert.pem --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.examp le.com/tls/ca.crt

//確認(rèn)是否提交到通道上

peer lifecycle chaincode querycommitted 

3 調(diào)用結(jié)果

之前用的root權(quán)限,所以每次注冊(cè)的操作都要對(duì)相關(guān)的安全證書(shū)定義,注冊(cè)的代碼比較長(zhǎng),查詢的不需要

//用戶1注冊(cè)
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 fabcar --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 '{"Args":["userRegister", "user1", "user1"]}'

//資產(chǎn)1登記
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 fabcar --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 '{"Args":["assetEnroll", "asset1", "asset1", "metadata", "user1"]}'

//用戶2注冊(cè)
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 fabcar --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 '{"Args":["userRegister", "user2", "user2"]}'

//1資產(chǎn)轉(zhuǎn)讓2
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 fabcar --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 '{"Args":["assetExchange", "user1", "asset1", "user2"]}'

//用戶1注銷(xiāo)
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 fabcar --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 '{"Args":["userDestroy", "user1"]}'

//用戶1查詢
sudo peer chaincode query -C mychannel -n token -c '{"Args":["queryUser", "user1"]}'

//資產(chǎn)1查詢
sudo peer chaincode query -C mychannel -n token -c '{"Args":["queryAsset", "asset1"]}'

//用戶2查詢
sudo peer chaincode query -C mychannel -n token -c '{"Args":["queryUser", "user2"]}'

//資產(chǎn)交易記錄查詢
sudo peer chaincode query -C mychannel -n token -c '{"Args":["queryAssetHistory", "asset1"]}'

sudo peer chaincode query -C mychannel -n token -c '{"Args":["queryAssetHistory", "asset1", "all"]}'
阿里企業(yè)郵箱、網(wǎng)易企業(yè)郵箱、新網(wǎng)企業(yè)郵箱
【標(biāo)準(zhǔn)版】400元/年/5用戶/無(wú)限容量
【外貿(mào)版】500元/年/5用戶/無(wú)限容量
其它服務(wù):網(wǎng)站建設(shè)、企業(yè)郵箱、數(shù)字證書(shū)ssl、400電話、
聯(lián)系方式:電話:13714666846 微信同號(hào)

聲明:本站所有作品(圖文、音視頻)均由用戶自行上傳分享,或互聯(lián)網(wǎng)相關(guān)知識(shí)整合,僅供網(wǎng)友學(xué)習(xí)交流,若您的權(quán)利被侵害,請(qǐng)聯(lián)系 管理員 刪除。

本文鏈接:http://www.goalq.com.cn/article_32804.html