- 准备golang chaincode源文件
本地创建目录:
$ mkdir -p chaincode/input/src # used for chaincode source files
$ mkdir -p chaincode/output # generate compile output chaincode
把chaincode所有源文件拷贝到chaincode/input/src目录下面。
后面我们会设置GOPATH=chaincode/input下面,所以这里有一级src的子目录。
以example02为例,最后的目录包含内容:
chaincode/input/src/example02_cc/go/example02_cc.go
- 编译
CHAINCODEPATH=<abspath>/chaincode # here absolute path is required
docker run --rm \
--volume ${CHAINCODEPATH}:/chaincode \
fabric-ccenv:latest \
bash -c 'GOPATH=/chaincode/input:$GOPATH go build -ldflags "-linkmode external -extldflags '-static'" -o /chaincode/output/chaincode example02_cc/go'
编译成功后,输出结果是:
$ file chaincode/output/chaincode
chaincode/output/chaincode: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=XXXXXX, not stripped
- 生成chaincode image
创建Dockerfile.cc
FROM fabric-baseos:amd64-0.4.15
ADD chaincode/output/chaincode /usr/local/bin # the chaincode/output/chaincode is output of step 2
LABEL org.hyperledger.fabric.chaincode.id.name="<cc_name>" \ # e.g., example02
org.hyperledger.fabric.chaincode.id.version="<cc_version>" \ # e.g., v0
org.hyperledger.fabric.chaincode.type="GOLANG" \
org.hyperledger.fabric.version="1.4.1" \
org.hyperledger.fabric.base.version="0.4.15"
ENV CORE_CHAINCODE_BUILDLEVEL=1.4.1
build:
IMAGENAME=dev-04012e29-683a-426b-8361-ff3a7bdffe9c-peer0-example02-v0-9c495ebac36eef760c4320ab27cbd9da77c4d8cda779ef26588b4733b99a5a44
docker build -t ${IMAGENAME}:latest -f Dockerfile.cc .
注意这里IMAGENAME我还没有找到算法是如何生成的,总之fabric能够每次生成的image name都是相同的。
有疑问加站长微信联系(非本文作者)