天天看点

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
           
fabric go语言链码打包并在其他Peer节点部署

图(1) 导出testToken工程所需要的golang包

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 [email protected]:$mydocker/chaincode/fabtoken/testToken

## 3) 进入testToken目录
cd $mydocker/chaincode/fabtoken/testToken
scp -P 8888 testToken.exe [email protected]:$mydocker/chaincode/fabtoken/testToken

           

    如图(3)、图(4)所示。

fabric go语言链码打包并在其他Peer节点部署

图(2) 拷贝testToken.out到远程主机

fabric go语言链码打包并在其他Peer节点部署

图(3) 拷贝testToken.exe到远程主机

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

    效果如下:

fabric go语言链码打包并在其他Peer节点部署

图(4) HWT的总量为10亿个,精度为8

    这说明testToken.out链码,在192.168.30.191的Peer节点上,部署成功。

7、参考文献

    阿里云区块链服务Baas–部署链码