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

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

fabric官方支持四种语言的chaincode开发,分别为go、java、node和evm。这里以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. 新能源物流车行业如何服务升级?地上铁联合火山引擎VeDI“破题”

    今年以来,克服种种不利因素影响,我国工业经济实现企稳回升,一些行业逆势而上,表现亮眼.尤其是新能源车行业,得益于技术创新与系列重大政策利好推动,在国内和国外市场均实现了快速增长,中国汽车工业协会最新统 ...

  2. Spring解决泛型擦除的思路不错,现在它是我的了。

    你好呀,我是歪歪. Spring 的事件监听机制,不知道你有没有用过,实际开发过程中用来进行代码解耦简直不要太爽. 但是我最近碰到了一个涉及到泛型的场景,常规套路下,在这个场景中使用该机制看起来会很傻 ...

  3. SpringBoot 配置 Swagger

    Profile Config 多环境不同配置 1.添加 Pom 文件 <dependency> <groupId>io.springfox</groupId> &l ...

  4. ADB移动端及Monkey常用命令

    ADB ADB全程Android Debug Bridge,是android sdk里的一个工具,用这个工具可以直接操作管理android模拟器或者真实的android设备 它的主要功能: 运行设备的 ...

  5. 解决延迟有 Wi-Fi 6 就够了!

    最近二狗子家里的路由器坏了,而家里的数据网络信号又非常差,失去了路由器基本上就等于和世界隔离,所以二狗子打算去附近商城随便买一个新的路由器,结果售货员张口就问:"买 Wi-Fi 6 的路由器 ...

  6. LT01 创建转储单

    一.LT01创建转储单 采购订单--MIGO收货--虚拟仓位--LT01上架--实体仓位--LT01下架--虚拟仓位--MIGO发料--生产订单 二.参考代码 "-------------- ...

  7. 【ToolChains】CLion(VS2019) + CMake + Vcpkg 的使用

    参考博客: https://blog.51cto.com/u_15075510/4201238 http://t.csdn.cn/pADDU https://zhuanlan.zhihu.com/p/ ...

  8. 为什么很多候选人投出去的简历石沉大海(面向Java方向)

    我最近在帮上海某培训学校里的毕业生做面试辅导,普遍发现很多候选人不是没能力,或者说能力没有差到没有面试机会的程度,但这些同学投出去的简历大多石沉大海,即使有回应,也大多是些外包外派公司或者小公司. 而 ...

  9. 人人都是 Serverless 架构师 | 弹幕应用开发实战

    作者 | 寒斜(阿里云云原生中间件前端负责人)​ 如何使用 Serverless 架构实现全双工通信的应用,Serverless 架构中数据库是如何使用的,本篇文章将为您揭开答案. ​ Serverl ...

  10. centos7.9 安装oracle11g

    安装环境: 操作系统:CentOS Linux release 7.9.2009 (Core)orcle安装包:linux.x64_11gR2_database_1of2.zip. linux.x64 ...