本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。

在fabric的chaincode开发时,有时候需要用到第三方库提供的功能。这些库有些是没有go的实现,或开发者只提供了库,这时候就需要从chaincode中调用第三方库。而fabric的chaincode都是运行在docker容器中,此时就需要将需要用的第三方库编译到dockers容器中。

fabric官方支持四种语言的chaincode开发,分别为gojavanodeevm。这里以Go为例,介绍如何在chaincode中调用第三方库。示例中用到的所有文件都可以从这里找到。

本文使用fabric-samples v1.4.6中提供的first-network来搭建fabric网络。关于fabric网络开发环境的搭建,详见我的另一篇文章,这里就不再赘述了。

1 使用静态库

在fabric网络中,默认启用静态库支持。所以使用静态库时,只需将所需的静态库编译到fabric镜像中即可。研究过fabric源码你会发现,fabric网络的基本配置都是通过core.yaml文件提供的,chaincode的配置也不例外。

1.1 重编镜像

在默认情况下,chaincode会在fabric-ccenv:latest中编译成可执行程序,所以我们需要重写编译fabric-ccenv镜像,将chaincode需要的所有依赖都打包到镜像中,并将新生成的镜像tag为latest

Dockerfile的内容如下:

From hyperledger/fabric-ccenv:1.4.6
COPY payload/calc.h /usr/local/include
COPy payload/libcalc.a /usr/local/lib

1.2 修改配置

在ccenv中生成的可执行程序会与chaincode.LANG.runtime指定的镜像一起生成chaincode运行的容器,例如,golang的chaincode使用的时fabric-baseos:$(ARCH)-$(BASE_VERSION)镜像。这里我把替换成了fabric-ccenv:latest,这样可以保证chaincode运行时的所有依赖都能正常加载。

1.3 启动网络

本示例中使用的库只提供了简单的加减乘除功能。拿到后只需放到fabric-samples/chaincode/路径下,将修改后的core.yaml映射到所有peer节点的/etc/hyperledger/fabric路径下,即可使用first-network下的byfn.sh脚本启动网络。chaincode使用方法如下:

peer chaincode install -n calc -v 1.0 -l golang -p github.com/chaincode/calc
peer chaincode instantiate -o orderer.example.com:7050 --tls true --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 mychannel -n calc -l golang -v 1.0 -c '{"Args":["init"]}' -P 'OR ('\''Org1MSP.peer'\'','\''Org2MSP.peer'\'')'
peer chaincode query -C mychannel -n calc -c '{"Args":["add","1","2"]}'

2 使用动态库

2.1 重编镜像

与使用静态库相同,使用动态库时首先还是需要从新编译ccenv镜像,将所有的依赖都打包到镜像中。

2.2 修改配置

chaincode.golang.runtime指定的镜像替换成fabric-ccenv:latest。因为使用的go的chaincode,还需要将chaincode.golang.dynamicLink改为true来启用动态库链接。

2.3 启动网络

启动网络的操作与静态库的操作一样。

chaincode中使用第三方库的更多相关文章

  1. 详细地jsoncpp编译方法 和 vs2010中导入第三方库的方法

    详细地jsoncpp编译方法 和 vs2010中导入第三方库的方法 一 编译链接 1 在相应官网下载jsoncpp 2 解压得到jsoncpp-src-0.5.0文件 3 打开jsoncpp-src- ...

  2. Android Studio中导入第三方库

    之前开发Android都是使用的eclipse,近期因为和外国朋友Timothy一起开发一款应用,他是从WP平台刚切换使用Android的,使用的开发环境时Android Studio,为了便于项目的 ...

  3. xcode中的第三方库配置问题总结

    xcode中的第三方库配置总结 在导入第三方库的时候,总是会遇到许多的问题.在这里,我记录一下学到的一些知识点.写得比较乱.只要是想要记录下来,在第三方库导入的时候,遇到的一些问题. 参考网址: ht ...

  4. Android中集成第三方库的方法和问题

    Android中集成第三方库的方法和问题 声明: 1. 本文參考了网上同学们的现有成果,在此表示感谢,參考资料在文后有链接. 2. 本文的重点在第三部分,是在开发中遇到的问题及解决的方法.第一,第二部 ...

  5. 关于pycharm中安装第三方库时报错的解决办法(一)

    记录自己的生活!   一.事发背景 在pycharm中直接安装第三方库时因为版本问题总是无法安装成功,事情不大,但是很重要.   二.经过 最开始我自己电脑上安装了Python3.6和Python2. ...

  6. json库的编译方法和vs2010中导入第三方库的方法

    json库的编译方法和vs2010中导入第三方库的方法 一.去相应官网下载json.cpp文件 Jsoncpp下载:https://sourceforge.net/projects/jsoncpp/  ...

  7. VC中引用第三方库,常见的库冲突问题

    Q:VC中引用第三方库,常见的库冲突问题 环境:[1]VS2008 [2]WinXP SP3 A1(方法一): [S1]第三方库(Binary形式的)如果同主程序冲突,则下载第三方库的源码[S2]保持 ...

  8. VS中添加第三方库及相对路径设置

    原文 VS中添加第三方库及相对路径设置 对于一些第三方的SDK,一般会包含头文件(*.h),静态库文件(*.lib)和动态库文件(*.dll). 1.  文件位置:为了提高程序的可移植性,将第三库放在 ...

  9. Python中使用第三方库xlrd来写入Excel文件示例

    Python中使用第三方库xlrd来写入Excel文件示例 这一篇文章就来介绍下,如何来写Excel,写Excel我们需要使用第三方库xlwt,和xlrd一样,xlrd表示read xls,xlwt表 ...

  10. 在Fabric ChainCode中导入第三方包(以状态机为例)

    在企业级应用开发中,经常会涉及到流程和状态,而有限状态机(FSM)则是对应的一种简单实现,如果复杂化,就上升到Workflow和BPM了.我们在Fabric ChainCode的开发过程中,也很可能涉 ...

随机推荐

  1. 鸿蒙HarmonyOS实战-工具安装和Helloworld案例

    前言 HarmonyOS是华为自主开发的操作系统,它在2020年9月正式发布.它最初被称为鸿蒙OS,后来更名为HarmonyOS.HarmonyOS旨在提供一种可在各种设备上无缝运行的统一操作系统,包 ...

  2. print('Hello World!')的新玩法

    相信很多同学入门Python的第一行代码都是print('Hello World!') print是初学者最先接触的Python函数,但是很多人可能到现在也不完全清楚它的用法. print(*obje ...

  3. SAP发布HTTP接口

    1.创建类 引用标准接口 改写集成的接口方法 此处仅实现POST方法,将传入的JSON报文转为函数传入参数,调用获取物料接口,并将返回的物料信息,转换为JSON报文返回 METHOD if_http_ ...

  4. 【OpenSSL】​Visual Studio 2019配置OpenSSL 3.0开发环境

    OpenSSL从1.0.2版本升级为3.0.3版本后,需要对代码进行重构.如果不可用的代码太多,需要重新开一个项目.重新配置开发环境. [第一步]登录http://slproweb.com/,下载Wi ...

  5. Codeforces Round #732 (Div. 2) A ~ D 个人题解记录

    比赛链接:Here 1546A - AquaMoon and Two Arrays 选定两个数组元素执行以下操作: \(a_i,a_j (1\le i,j \le n)\) 一个 +1 另一个 -1, ...

  6. 航拍倾斜摄影 Web 3D GIS 数字孪生智慧火电厂

    前言 7 月份,245 个国家气象站日最高气温突破 7 月历史极值:同时,疫情防控形势向好,企业加快复工达产节奏,电力负荷屡创新高.煤电作为我国最主要的电源,用不足 50% 的装机占比,生产了全国约 ...

  7. Mathpix:屏幕截图 ➡ latex 公式,一键转换

    安利一天能免费使用 10 次且好用的工具 Mathpix.

  8. SpringCloud集成Seata并使用Nacos做注册中心与配置中心

    本文为博主原创,未经允许不得转载: 目录: 1. 下载并启动Seata Server,并指定nacos作为配置中心和注册中心 2. 同步seata server的配置到nacos 3. 启动Seata ...

  9. PR 调整时间线宽度

    1.问题 这里的宽度太小,不好进行下一步的调整 2.解决方法 方法一 按下=可以放宽 按下-(=左边的那个键)可以缩小宽度 方法二 拖动下方的滑动条即可 方法三 按住ALT+滚轮,即可调节

  10. CSS 3D - rotate旋转90度看不到的原理 和 解决方法

    原理: 旋转元素的坐标有三个 :X(向右),   Y(向左) ,   Z(向电脑屏幕的你) 当没有位移旋转元素时,元素 Z 坐标也会同着一起旋转 ,当一个物品旋转到90度时,我们只能看到它的厚度,而d ...