curl -sSL https://bit.ly/2ysbOFE | bash -s
由于此命令国内无法运行成功,可以去github种找到该脚本文件,连接如下
https://github.com/hyperledger/fabric/blob/v2.2.0/scripts/bootstrap.sh
复制该脚本信息,打开终端,并且创建一个sh文件并保存
创建和编辑sh文件命令:
创建命令:touch bootstrap.sh 编辑命令:gedit bootstrap.sh
执行sh文件:
赋予文件权限:sudo chmod u+x bootstrap.sh 运行该文件:sudo ./bootstrap.sh
如图所示:
出现fabric-samples:
文件解锁
sudo chmod -R 777 fabric-samples
ls:
执行:
cd test-network
运行network.sh脚本文件
./network.sh up
需要注意的是启动测试网络时候可能出错,如图所示:
需要下载:
https://github.com/hyperledger/fabric/releases/download/v2.2.0/hyperledger-fabric-linux-amd64-2.4.0.tar.gz
下载完成后解压到fabric-samples文件夹中,在fabric-samples目录里进行解压,解压命令如下
tar -zxvf hyperledger-fabric-linux-amd64-2.2.0.tar.gz
将这个文件在fabric-samples文件夹解压后会有bin和config文件
完成后fabric-samples包含:
cd到bin目录下,将bin中的文件复制到/usr/local/bin中
sudo cp * /usr/local/bin
fabric docker 镜像:
docker images
注意在这里会有一个问题可能没有docker镜像,说明二进制文件有问题,解决方法:
回到bootstrp.sh中
1.执行编辑 gedit bootstrap.sh 2.注释掉cloneSamplesRepo和pullBinaries函数 3.执行脚本 sudo ./bootstrap.sh
最后回到bin目录,执行命令即可
docker images
至此fabric下载安装结束。
运行测试网络前,将fabric-samples/test-network/docker/目录下的三个yaml文件中的 name:fabric_test 注释掉,另外将docker-compose-test-net.yaml文件中的 CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_test 修改为 docker_test,此文件中有两处要修改
sudo ./network.sh up
可以看到三个容器已经开启,两个peer节点容器,一个order节点容器
节点查询:
sudo docker ps -a
sudo ./network.sh createChannel
创建成功后,我们需要为go语言安装依赖包,否则调用链码出错,切换到/fabric-samles/asset-transfer-basic/chaincode-go目录下,执行命令
go mod vendor
国内下载速度较慢,容易出错,换代理源:
go env -w GOPROXY=https://goproxy.cn,direct
执行完毕后,再次执行go mod vendor。ls结果所示:
在test-network目录下启动链码:
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
若出现Error:failed to normalize chaincode path:failed to determine module root:"go"
1.go:未找到命令
解决方法:输入go version查看go是否配置好环境,若没有则重新配置
2.log.txt权限不够
解决方法:log.txt权限不够是因为文件被锁住,输入sudo chmod -R 777 log.txt解锁
3.其他权限不够问题,不要加sudo解决,sudo会导致path环境找不到
解决方法:将文件全部解锁:
sudo chmod -R 777 ~/go
4.go list问题
解决方法:因为go版本太高,需要将版本降级
解决方法:更换代理,输入命令
go env -w GOPROXY=https://goproxy.io.direct go env -w GO111MODULE=on
解决上述问题后,执行启动安装链码结果:
执行添加环境变量,保证能找到你的配置文件路径:
export PATH=${PWD}/../bin:$PATH export FABRIC_CFG_PATH=$PWD/../config/
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
链码与组织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 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 query -C mychannel -n basic -c {"Args":["GetAllAssets"]}
调用链码进行资产转移:
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"]}