hyperledger-fabric 区块链链码打包与安装

本地打包链码为安装包提供给区块链环境安装使用
以 Golang 编写链码为例

环境准备

链码打包

准备源码

本文档中链码源码以 fabric-samples 库中 fabcar 为例

如何编写链码参考官方文档:Writing Your First Application

  1. 克隆 fabric-samples 项目

    shell
    1
    git clone https://github.com/hyperledger/fabric-samples.git /opt/codes/fabric-samples
  2. 进入 fabcar 目录

    shell
    1
    cd /opt/codes/fabric-samples/fabcar

打包

打包链码前需要设置环境变量指定 peer 的配置文件 core.yaml 路径。我这儿直接使用 fabric 库中 sampleconfig 路径下示例配置

shell
1
export FABRIC_CFG_PATH=/opt/codes/fabric/sampleconfig/

使用环境变量覆盖 core.yaml 中设置的链码构建使用镜像

shell
1
2
3
4
# 构建链码的镜像
export CORE_CHAINCODE_BULDER=hyperledger/fabric-ccenv:2.2
# GO 链码基础镜像
export CORE_CHAINCODE_GOLANG_RUNTIME=hyperledger/fabric-baseos:2.2

直接打包

此种方式打包的链码安装包中仅有链码源码,不包含相关依赖包,如果是在无公网且无自建 Go 代理库的情况,会出现安装失败的情况

shell
1
2
peer lifecycle chaincode package fabcar.tar.gz \
--path go/ --lang golang --label fabcar_1

打包完成后会在当前目录下生成 fabcar.tar.gz 文件,解压该包可看到如下内容:

fabcar.tar.gz
1
2
3
fabcar/
├── code.tar.gz
└── metadata.json

解压 code.tar.gz文件,压缩包内容如下:

code.tar.gz
1
2
3
4
5
6
code
└── src
├── fabcar.go
├── go.mod
├── go.sum
└── runfabcar.sh

可以对比 code.tar.gz 中内容与 /opt/codes/fabric-samples/fabcar/go/ 目录下源码文件对比,可以看到是一致的

/opt/codes/fabric-samples/fabcar/go/
1
2
3
4
5
/opt/codes/fabric-samples/fabcar/go/
├── fabcar.go
├── go.mod
├── go.sum
└── runfabcar.sh

govendor 方式打包

通过 govendor 管理依赖包,依赖包存放于项目工程根目录下 vendor 目录中,编译时直接使用本地依赖包。

根据 govendor 文档,我们使用的 go1.14.4 无需单独安装直接使用即可。

  1. 进入链码项目根目录

    shell
    1
    cd /opt/codes/fabric-samples/fabcar/go/
  2. 使用如下命令,创建 vendor 目录,并将依赖包复制到该目录下

    shell
    1
    go mod vendor
  3. 打包链码为安装包

    shell
    1
    2
    3
    4
    5
    6
    7
    8
    cd /tmp/

    export FABRIC_CFG_PATH=/opt/codes/fabric/sampleconfig/
    export CORE_CHAINCODE_BULDER=hyperledger/fabric-ccenv:2.2
    export CORE_CHAINCODE_GOLANG_RUNTIME=hyperledger/fabric-baseos:2.2

    peer lifecycle chaincode package fabcar.tar.gz \
    --path /opt/codes/fabric-samples/fabcar/go/ --lang golang --label fabcar_1

我们解压打包后的 fabcar.tar.gzcode.tar.gz 对比源码目录

  • tree -L 3 code

    code.tar.gz
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    code
    └── src
    ├── fabcar.go
    ├── go.mod
    ├── go.sum
    ├── runfabcar.sh
    └── vendor
    ├── github.com
    ├── golang.org
    ├── google.golang.org
    ├── gopkg.in
    └── modules.txt
  • tree -L 2 /opt/codes/fabric-samples/fabcar/go/

    /opt/codes/fabric-samples/fabcar/go/
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /opt/codes/fabric-samples/fabcar/go/
    ├── fabcar.go
    ├── go.mod
    ├── go.sum
    ├── runfabcar.sh
    └── vendor
    ├── github.com
    ├── golang.org
    ├── google.golang.org
    ├── gopkg.in
    └── modules.txt

可以看到链码安装包中和项目源码一致,都自带有依赖包

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...