导读

1
说在前面的话
1、预备知识

区块链 | Hyperledger Fabric 01 超级账本介绍
2、环境需求
在今天的内容之前,我们需要先检查一下自己的“背包”,才能让接下来的旅途走得更加悠然。
我们在测试网络文件夹打开终端:

1、Docker
首先我们先检查是否安装Docker和Docker compose,命令如下:
docker --versiondocker-compose --version

2、测试网络
然后我们检查测试网络是否存在:
./network.sh -h


区块链 | Hyperledger Fabric 02 超详细图解——Fabric2.3.3安装及常见报错解决方案
3、安装go
前面我们没有安装go,这是因为前面我们只是安装配置fabric,go并不是必须的。
现在我们要开始运行链码,即联盟链中的智能合约,官网中给的示例是go语言开发的。如果大家有其他语言的开发经验,如Java,可以跳过这个步骤。
首先我们需要下载go的安装包:
https://studygolang.com/dl
大家也可以在我的公众号【AI与区块链技术】回复go下载。
下载好之后,我们将其解压,然后将其移动到local文件夹:
tar -zxvf go1.17.2.linux-amd64.tar.gzsudo mv go /usr/local/

接下来我们配置一下环境变量,首先我们打开环境变量文件:
sudo gedit ~/.profile
下面的提示是已经完成了更改后的警告:

然后我们在最后添加:
export GOROOT=/usr/local/goexport GOPATH=$HOME/goexport PATH=$GOPATH/bin:$GOROOT/bin:$PATH
然后点击save保存并关闭。

然后我们重新加载一下新的环境变量:
source ~/.profile
接下来我们查看我们安装的版本,检测是否安装成功:
go version

2
运行Fabric案例
1、打开测试网络
cd fabric-samples/test-network
./network.sh up

Creating network "fabric_test" with the default driverCreating volume "docker_orderer.example.com" with default driverCreating volume "docker_peer0.org1.example.com" with default driverCreating volume "docker_peer0.org2.example.com" with default driverCreating orderer.example.com ... doneCreating peer0.org1.example.com ... doneCreating peer0.org2.example.com ... doneCreating cli ... doneCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES23bf079fc362 hyperledger/fabric-tools:latest "/bin/bash" 3 seconds ago Up Less than a second cli4170f2a781a1 hyperledger/fabric-peer:latest "peer node start" 16 seconds ago Up 3 seconds 0.0.0.0:7051->7051/tcp, :::7051->7051/tcp, 0.0.0.0:17051->17051/tcp, :::17051->17051/tcp peer0.org1.example.comf1cfa1e57865 hyperledger/fabric-peer:latest "peer node start" 16 seconds ago Up 3 seconds 0.0.0.0:9051->9051/tcp, :::9051->9051/tcp, 7051/tcp, 0.0.0.0:19051->19051/tcp, :::19051->19051/tcp peer0.org2.example.com81dcce22fc01 hyperledger/fabric-orderer:latest "orderer" 16 seconds ago Up 3 seconds 0.0.0.0:7050->7050/tcp, :::7050->7050/tcp, 0.0.0.0:7053->7053/tcp, :::7053->7053/tcp, 0.0.0.0:17050->17050/tcp, :::17050->17050/tcp orderer.example.com
2、查看容器
docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES23bf079fc362 hyperledger/fabric-tools:latest "/bin/bash" 4 minutes ago Up 4 minutes cli4170f2a781a1 hyperledger/fabric-peer:latest "peer node start" 4 minutes ago Up 4 minutes 0.0.0.0:7051->7051/tcp, :::7051->7051/tcp, 0.0.0.0:17051->17051/tcp, :::17051->17051/tcp peer0.org1.example.comf1cfa1e57865 hyperledger/fabric-peer:latest "peer node start" 4 minutes ago Up 4 minutes 0.0.0.0:9051->9051/tcp, :::9051->9051/tcp, 7051/tcp, 0.0.0.0:19051->19051/tcp, :::19051->19051/tcp peer0.org2.example.com81dcce22fc01 hyperledger/fabric-orderer:latest "orderer" 4 minutes ago Up 4 minutes 0.0.0.0:7050->7050/tcp, :::7050->7050/tcp, 0.0.0.0:7053->7053/tcp, :::7053->7053/tcp, 0.0.0.0:17050->17050/tcp, :::17050->17050/tcp orderer.example.com
Org1 (peer0.org1.example.com)Org2 (peer0.org2.example.com)
3、创建通道
接下来我们需要创建用于对等节点之间进行交易的Fabric通道。
通道是特定网络成员之间的专用通信层。通道只能由被邀请加入通道的组织使用,并且对网络的其他成员不可见。每个通道都有一个单独的区块链账本。被邀请的组织“加入”他们的对等节点来存储其通道账本并验证交易。
首先就是默认创建方式:
./network.sh createChannel
这种方式会创建名为mychannel的通道:

这个命令执行会有特别长的输出,并且会自动将两个peer节点添加到通道中:



如果我们想自己自定义通道名称,我们可以使用如下命令,其中channel1是通道名称:
./network.sh createChannel -c channel1

这两个通道除了名称不同,其他都是相通的,包括通道中的节点(因为我们目前只有两个peer节点)。也就是说,是允许多个节点或者多个组织之间存在多个通道的。
接下来我们继续创建一个通道:
./network.sh createChannel -c channel2

最后我们可以在文件夹下发现新建了一个channel-artifacts文件夹,里面有三个通道文件:

我们也可以在开启网络的时候,就直接同步创建通道:
./network.sh up createChannel
4、链码测试
-l,用于安装 Java 或 javascript 版本的链码。我们可以在 fabric-samples 目录的 asset-transfer-basic 文件夹中找到 asset-transfer (basic) 链码。此目录包含作为案例和用来突显 Fabric 特征的样本链码。
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go



go env -w GOPROXY=https://goproxy.io,directgo env -w GO111MODULE=on

Error: chaincode install failed with status: 500 - failed to invoke backing implementation of 'InstallChaincode': chaincode already successfully installedChaincode installation on peer0.org1 has failedDeploying chaincode failed
./network.sh down
./network.sh up createChannel

5、与网络交互
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/

export CORE_PEER_TLS_ENABLED=trueexport CORE_PEER_LOCALMSPID="Org1MSP"export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crtexport CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/mspexport CORE_PEER_ADDRESS=localhost:7051

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":[]}'
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":[]}'
2021-10-26 23:12:37.939 CST [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200

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}]

peer0.org1.example.compeer0.org2.example.com
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"]}'

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

peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'

6、关闭网络
到这里,我们测试网络的基本操作就完成啦,通过这个测试网络,我们就能大致了解联盟链的工作流程和参与的实体。最后我们将我们测试的网络关闭即可:
./network.sh down

3
说在后面的话
到这里,我们就了解了联盟链的基本概念,了解了Hyperledger Fabric的基本原理,安装与配置以及执行细节。在未来,我们会更加深入学习相关的知识。
一起加油啦!


长按二维码关注

点赞和在看数你最好看




