通过上一篇文章我们已经将fabric的基本环境搭建成功,接下来我们开始运行使用并初步认识fabric。
创建项目目录 mkdir -p ~/go/src/github.com/hyperledger
cd ~/go/src/github.com/hyperledger
拉取fabric项目 git clone https://github.com/hyperledger/fabric.git
切换fabric版本 cd fabric
git checkout v2.0.0
拉取fabric镜像 先进入到scripts目录
cd ~/go/src/github.com/hyperledger/fabric/scripts
注意: 此处我们需要修改当前目录下的bootstrap.sh脚本
通过阅读bootstrap脚本我们可以知道,此脚本先会拉去fabric-samples脚本,再切换分支,但由于官方切换的分支为2.0.0,可实际上现在官方提供的版本库中没有这个分支,所以会导致无法切换,而且回去拉取环境所用的二进制文件,但国内网络是无法访问的,从而导致后面的操作失败,所以我们选择手动拉取fabric-samples脚本再切换到v2.0.0-beta分支,在这之前此脚本仅仅作为拉取镜像的操作,操作如下:
进入编辑页面
vim ~/go/src/github.com/hyperledger/fabric/scripts/bootstrap.sh
修改脚本
#DOCKER=true #SAMPLES=true #BINARIES=true
为
DOCKER=true SAMPLES=false BINARIES=false
此出我们修改脚本之后,bootstrap.sh只进行拉取镜像的操作
开始运行脚本 ./bootstrap.sh
拉去的镜像如下
拉去镜像之后下面我们进入目录 cd ~/go/src/github.com/hyperledger
然后开始拉取fabric-samples git clone https://github.com/hyperledger/fabric-samples.git
拉取成功后切换到v2.0.0-beta分支 git checkout v2.0.0-beta
进入目录 cd ~/go/src/github.com/hyperledger/fabric-samples
紧接着我们需要下所需要的二进制文件 wget https://github.com/hyperledger/fabric/releases/download/v2.0.1/hyperledger-fabric-linux-amd64-2.0.1.tar.gz
然后在当前目录解压包 tar -xzvf hyperledger-fabric-linux-amd64-2.0.1.tar.gz
然后进入目录 cd ~/go/src/github.com/hyperledger/fabric-samples/first-network
然后运行命令 ./byfn.sh up
出现end之后就代表我们运行成功了!!
我们查看一下启动的服务 docker ps
查看镜像完全正常,说明我们已经部署成功一个单机多节点的fabric-samples的简单例子了
接下来我们开始在这个基础上加一个组织进去,通过手动加入一个新的组织,来更清楚的认识fabric的机制
遇到问题?
中间可能会遇到链码无法打包的问题
在以下代码中报错,原因是链码依赖找不到,需要到链码所在的文件夹下下载依赖
peer lifecycle chaincode package mycc.tar.gz --pathgithub.com/hyperledger/fabric-samples/chaincode/abstore/go/ --lang golang --label mycc_1在github.com/hyperledger/fabric-samples/chaincode/abstore/go/ 目录执行以下代码进行修复
cd fabric-samples/chaincode/abac/gogo env -w GOPROXY=https://goproxy.io,directgo env -w GO111MODULE=ongo mod vendor部分docker无法运行
请检查配置是否按以上要求运行
本地测试安装链码查询链码操作上链
#查询已安装的链码 docker exec cli peer lifecycle chaincode queryinstalled #安装链码 docker exec cli peer lifecycle chaincode package mycc.tar.gz --path \ github.com/hyperledger/fabric-samples/chaincode/abstore/go/ --lang golang --label mycc_1
#查询已安装链码的组织 docker exec cli peer lifecycle chaincode approveformyorg --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --channelID mychannel --name mycc --version 1 --init-required --package-id mycc_1:4622fb602aa60c6368716a70474dc9d9ba2776200f70eccca07a4df4360eaff3 --sequence 1 --waitForEvent
docker exec cli peer lifecycle chaincode approveformyorg --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --channelID mychannel --name mycc --version 1 --init-required --package-id mycc_1:4622fb602aa60c6368716a70474dc9d9ba2776200f70eccca07a4df4360eaff3 --sequence 1 --waitForEvent
#上链 docker exec cli peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --isInit -c '{"Args":["Init","a","100","b","100"]}'
#上链赋值 docker exec cli peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --isInit -c '{"Args":["Init","b","999999","b","999999999999"]}'
docker exec cli peer chaincode invoke -o orderer.finebaas.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/finebaas.com/orderers/orderer.finebaas.com/msp/tlscacerts/tlsca.finebaas.com-cert.pem -C mychannel -n mycc --peerAddresses peer0.org1.finebaas.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.finebaas.com/peers/peer0.org1.finebaas.com/tls/ca.crt --peerAddresses peer0.org2.finebaas.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.finebaas.com/peers/peer0.org2.finebaas.com/tls/ca.crt --isInit -c '{"Args":["Init","b","999999","b","999999999999"]}'
#查询docker exec cli peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
#安装docker exec cli peer lifecycle chaincode install mycc.tar.gz
#查询docker exec cli peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'