准备工作
我是在Mac笔记本上完成的一下操作,其他平台类似。在部署fabric之前需要为电脑安装一下几个软件:
Docker 可以从小鲸鱼官网下载桌面版安装,很方面启动、停止、重启docker服务。安装并启动后可在控制台使用 docker --version
命令测试是否正常。此次安装还自动添加了一个docker的工具docker-compose,这个工具在fabric的部署中会用到,同样可以使用 docker-compose --version
来检查是否安装正常。
目前fabric主要支持两种语言Go和NodeJS, 这两个语言的安装及配置可以参看Go programing language 和 Node.js
Hyperledger Fabric Samples是由官方给出的一个示例集合,包含好几个不同拓扑结构的fabric样例以及不同功能的chaincode源码,为我们学习的提供了很好的参考。获取方式
1 | git clone -b master https://github.com/hyperledger/fabric-samples.git |
最后一步准备工作是需要下载Fabric平台所需的binaries文件,包括cryptogen,configtxgen,configtxlator, 和peer这些工具不仅可以配合Samples使用,还可以提供很多方便强大的功能有机会在介绍,下载方式:
1 | curl -sSL https://goo.gl/fMh2s3 | bash |
启动Fabric网络
所有准备工作已经就绪,执行下面的文件就可以启动fabric网络:
1 | cd fabric-samples/first-network |
此处我们使用的是第一个示例Building Your First Network(BYFN), 打开源码或者输入./byfn.sh --help
就可以看到使用细节以及实现方式。
1 | ./byfn.sh --help |
fabric网络需要先generate,然后再通过传入参数up/down 来启动和终止网络。这个例子中会依据configtx.yaml设计的结构依次启动各个功能节点容器。
值得注意的是:
网络启动后会按照byfn.sh中的代码,创建通道->所有节点加入通道->更新anchor节点->部署“chaincode_example02” chaincode->验证chaincode的init/query/invoke是都可以正常执行。完成整个操作,网络默认运行10000s后关闭。我们在学习中为了方便可以通过-t 整个参数来修改运行时间。
1
./byfn.sh -m up -t 999999
网络默认使用的是goleveldb,如果想使用couchdb可以通过参数-s, 用docker ps 查看可以发现会启动一个couchdb的容器,本地访问http://localhost:5984/_utils 进入web管理界面:
1
./byfn.sh -m up -t 999999 -s couchdb
部署测试chaincode
部署和执行chaincode需要先进入CLI容器(docker 从fabric-tools镜像启动的container):
1 | docker exec -it cli bash |
上面提到过,因为byfn.sh脚本中已经完成了一些列设置。所以我们可以简单测试一下“chaincode_example02”这个chaincode的功能,完成转账查询等操作。已Go语言为例
1 | peer chaincode instantiate -o orderer.example.com:7050 --tls --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 $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')" |
查询a的余额
1 | peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}' |
完成a给b转账20
1 | peer chaincode invoke -o orderer.example.com:7050 --tls --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 $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}' |
已经自动部署了02 可以直接测试使用。
手动部署另外一个例子中提供的chaincode,marbles02(不同版本这个例子所在的路径有可能略有不同,在部署chaincode的时候如果报错修改命令中的路径即可).
1 | peer chaincode install -n marbles -v 1.0 -p github.com/chaincode/marbles02/go |
注:各个命令的语法可以使用help查看解释,例如-P (‘Org0MSP.member’,’Org1MSP.member’)” 表明要求背书结点至少选Org0MSP0和Org0MSP1中的一个。
调用chaincode中的invoke修改数据, 与上面类似
1 | peer chaincode invoke -o orderer.example.com:7050 --tls --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 $CHANNEL_NAME -n marbles -c '{"Args":["initMarble","marble1","blue","35","tom"]}' |
查询命令
1 | peer chaincode query -C $CHANNEL_NAME -n marbles -c '{"Args":["readMarble","marble2"]}' |
常用docker命令
- docker network prune #擦除环境设置,恢复干净的网络环境
- docker ps # list running container
- docker rm -f $(docker ps -aq) # remove container
- docker rmi -f $(docker images -q) # remove image
- docker logs -f cli # 查看日志