fabric go语言链码打包并在其他Peer节点部署
Posted sanqima
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fabric go语言链码打包并在其他Peer节点部署相关的知识,希望对你有一定的参考价值。
在fabric中,当链码编译通过后,需要将其打包成.out、.cc结尾的package包,供其他的peer节点使用,使用的命令为peer chaincode package XXX。下面,介绍将fabric-samples/chaincode-docker-devmode/chaincode/fabtoken/testToken的golang工程打包的方法。
1、安装govendor工具
go env -w GOPROXY=https://goproxy.cn,direct
go get -u -v github.com/kardianos/govendor
2、进入链码目录,初始化vendor
这里以进入fabric-samples/chaincode-docker-devmode/chaincode/fabtoken/testToken链码目录为例,进行说明,如图(1)所示。
cd fabric-samples/chaincode-docker-devmode/chaincode/fabtoken/testToke
govendor init
3、导出链码需要的依赖包到vendor
govendor add +external
4、进入cli容器,打包链码
## 启动cli容器
cd fabric-samples/chaincode-docker-devmode
docker-compose up -d
docker exec -it cli bash
## 将链码打包为testToken.out文件
peer chaincode package testToken.out -n testToken -v 1.0 -p chaincodedev/chaincode/fabtoken/testToken -c '{"Args":["init","{\\"name\\":\\"HelloWorldToken\\", \\"symbol\\":\\"HWT\\", \\"decimals\\":\\"8\\"}"]}'
peer chaincode package file -n [name] -v [version]
-n 表示链码的名称
-v 表示链码的版本
如上所示,该链码的名称为testToken,版本为1.0
打包完成后,会在当前chaincode-docker-devmode目录下看到一个名称为testToken.out的文件,这个文件就是链码的打包文件。
5、发送链码到远程目录
本地主机:192.168.30.163:8888
远程主机:192.168.30.191:8888
将链码.exe和链码.out文件,通过scp命令拷贝到远程主机里。
5.1 编译链码
编译testToken工程,得到testToken.exe可执行程序。
cd $GOPATH/src/github.com/hyperledger/fabric-samples/chaincode-docker-devmode/chaincode/fabtoken/testToken
go build --ldflags "-s -w" -o testToken.exe
5.2 推送链码到远程主机
将链码.exe和链码.out文件,都通过scp命令拷贝到远程主机的$mydocker/chaincode/fabtoken/testToken目录里,即拷贝到远程主机的如下目录:
/usr/local/gocode/src/github.com/hyperledger/fabric-samples/chaincode-docker-devmode/chaincode/fabtoken/testToken
在本地主机,依次使用如下命令:
## 1) 在本地主机,定义一个临时变量mydocker,用来保存路径参数
export mydocker=/usr/local/gocode/src/github.com/hyperledger/fabric-samples/chaincode-docker-devmode
## 2) 进入chaincode-docker-devmode目录
cd $mydocker
scp -P 8888 testToken.out root@192.168.30.191:$mydocker/chaincode/fabtoken/testToken
## 3) 进入testToken目录
cd $mydocker/chaincode/fabtoken/testToken
scp -P 8888 testToken.exe root@192.168.30.191:$mydocker/chaincode/fabtoken/testToken
如图(3)、图(4)所示。
6、在Peer节点部署链码
在Peer节点上有2种部署链码的方式:1) 通过源码来部署;2) 通过已经打包好的链码文件,比如.out、.cc文件来安装部署。
这里,介绍将testToken.out打包文件,安装到192.168.30.191的Peer节点上。
6.1 启动peer节点里的容器
cd fabric-samples/chaincode-docker-devmode
docker-compose up -d
6.2 监听7052端口
sudo docker exec -it chaincode bash
cd fabtoken/testToken
CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=testToken:1.0 CORE_PEER_TLS_ENABLED=false ./testToken.exe -peer.address peer:7052
6.3 进入cli容器,安装链码
sudo docker exec -it cli bash
cd chaincode/fabtoken/testToken
peer chaincode install -v 1.0 testToken.out
6.4 实例化链码
在cli容器里,输入命令:
peer chaincode instantiate -C myc -n testToken -v 1.0 -c '{"Args":["init","{\\"name\\":\\"HelloWorldToken\\", \\"symbol\\":\\"HWT\\", \\"decimals\\":\\"8\\"}"]}'
6.5 查询链码
查询HWT的总量:1000000000.00000000(10亿个,精度为8)
peer chaincode invoke -C myc -n testToken -c '{"Args":["GetTotalSupply"]}'
效果如下:
这说明testToken.out链码,在192.168.30.191的Peer节点上,部署成功。
7、参考文献
以上是关于fabric go语言链码打包并在其他Peer节点部署的主要内容,如果未能解决你的问题,请参考以下文章