一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种联盟链多语言外部链码离线编译方法与系统与流程

2021-12-01 01:00:00 来源:中国专利 TAG:


1.本发明涉及区块链技术领域,具体涉及一种联盟链多语言外部链码离线编译方法与系统。


背景技术:

2.在联盟链中,链码的编译和启动过程是peer实现的一部分,不容易定制。所有安装在peer上的链码都是使用peer中的语言特定逻辑硬编码来创建。这个过程会生成一个启动执行链码的docker容器镜像作为客户端连接到peer。这种方式把链码的实现限制在了少数语言中,不能定制化特定语言链码,适应性和可扩展性较差,并且阻碍了链码作为一个长时间运行的服务。外部构建器和启动器通过允许操作员使用可以构建、启动和发现链码的程序扩展peer来解决这些限制。


技术实现要素:

3.针对背景技术中提出的问题,本发明提出了一种联盟链多语言外部链码离线编译方法,具体包括:
4.响应于外部链码离线编译请求,获得请求中的链码定义;
5.调用peer节点对链码定义进行背书,得到背书结果,其中,链码定义至少包括链码语言定义;
6.对背书结果进行验证,通过后将背书结果进行广播并对背书结果进行共识,共识通过后将链码定义打包成区块并添加到链上;
7.根据链码语言定义选择相应的外部构建器,并基于链码定义创建链码包,其中,链码包包括链码源路径和链码元数据;
8.通过链码源路径和链码元数据对所述链码包进行编译,得到链码;
9.对peer节点的证书、私钥及根ca证书进行验证;
10.验证通过后,基于所述链码元数据中的连接信息将peer节点与外部链码服务器进行连通,并调用创建的外部链码。
11.进一步的,所述链码语言定义用于定义链码语言信息,根据链码语言信息选择相应的外部构建器,其中,链码语言信息包括go语言链码、java语言链码、javascript语言链码,所述外部构建器包括go链码包外部构建器、java链码包外部构建器、javascript链码包外部构建器。
12.进一步的,所述基于链码语言定义选择相应的外部构建器,并基于链码定义创建链码包,具体包括:
13.初始化容器路由,根据yaml文件的配置信息初始化相应的外部构建器;
14.外部构建器的编译方法被调用时,循环所选类型中的所有外部构建器来调用detect组件,返回第一个满足条件的外部构建器即为选定的外部构建器;
15.外部构建器根据请求中的链码定义创建链码包。
16.进一步的,所述基于链码定义创建链码包步骤之前还包括配置外部构建器,具体为:
17.根据外部构建器的组件配置信息对包含的每个组件进行配置,其中,所述外部构建器包括detect组件、build组件、release组件及run组件,组件配置信息包括构建器路径、构建器名称、组件配置信息及脚本执行环境。
18.进一步的,还包括通过链码包配置信息对链码包进行配置的过程,其中,链码包配置信息包含链码源路径配置信息和链码元数据配置信息,所述链码元数据的配置项包括类型、路径和标签;
19.基于类型、路径和标签找到链码元数据,通过链码元数据的类型选择链码语言类型,基于链码源路径存储链码包。
20.进一步的,所述通过链码源路径和链码元数据对所述链码包进行编译,得到链码,包括以下步骤:
21.根据链码源路径调取链码源,根据链码元数据的配置信息调取链码元数据,使用编译器编译链码源和链码元数据得到链码。
22.另一方面,本发明提出了一种联盟链多语言外部链码离线编译系统,具体包括:
23.背书模块:调用peer节点对链码定义进行背书,得到背书结果;
24.验证模块:验证背书结果信息及验证peer节点的证书、私钥和根ca证书;
25.共识模块:调用orderer节点对背书结果进行共识;
26.构建器选择模块:根据链码语言定义选择链码包外部构建器类型;
27.链码创建模块:通过链码源路径和链码元数据对所述链码包进行编译,得到链码;
28.链码调用模块:基于所述链码元数据中的连接信息将peer节点与外部链码服务器进行连通,并调用创建的外部链码。
29.进一步的,所述构建器选择模块还用于根据链码语言信息选择相应的链码包外部构建器,链码语言定义定义了链码语言信息,包括go链码、java链码、javascript链码,相应的链码包外部构建器类型有go链码包外部构建器、java链码包外部构建器、javascript链码包外部构建器;
30.链码包创建模块还用于在peer节点最初启动时,初始化容器路由,用来对外提供调用,内部委托给不同的构建器实现;在初始化容器路由时,根据yaml文件的配置信息初始化外部构建器;外部构建器的编译方法被调用时,循环所选类型中的所有外部构建器来调用detect组件,返回第一个满足条件的外部构建器即为选定的外部构建器;外部构建器根据解析后的请求信息创建链码包,不报错则视为创建成功。
31.第三方面,本发明提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现以上任意一项所述的方法步骤。
32.第四方面,本发明提出了一种联盟链多语言外部链码离线编译装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以上任意一项所述的方法步骤。
33.本发明提出的一种联盟链多语言外部链码离线编译方法,在离线情况下,可以根据用户需求定制化编译外部链码,这种方式打破了链码语言限制,可定制化特定语言链码,
适应性和可扩展性较强,并且链码可以作为一个长时间运行的服务。利用外部构建器和启动器通过允许操作员使用可以构建、启动和发现链码的程序扩展peer来解决这些限制,为用户提供了更多的链码种类与编译方法。另外,启用外部链码服务器与peer之间的tls协议,使得调用外部链码时更加安全。
附图说明
34.为了更清楚地说明本技术实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
35.图1为一具体实施例中联盟链多语言外部链码离线编译方法流程示意图;
36.图2为一具体实施例中联盟链多语言外部链码离线编译系统架构示意图。
具体实施方式
37.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
38.在本说明书的描述中,参考术语“一实施例”、“一具体实施例”、“一实施例方式”、“例如”的描述意指结合该实施例或示例描述的具体特征、结构或者特点包含于本技术的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本技术的实施,其中的步骤顺序不作限定,可根据需要作适当调整。
39.如图1所示,是一种联盟链多语言外部链码离线编译方法,具体包括:
40.step01:响应于外部链码离线编译请求,请求来自于用户发起或系统发起;
41.step02:获取并解析所述请求,请求信息包括用户信息或系统信息、链码定义,链码定义包括链码语言定义、链码用途定义、链码版本、链码运行环境等,获得请求中的链码定义;
42.step03:peer节点对链码定义进行背书,使用签名算法对链码定义进行签名,返回签名后的背书结果;
43.step04:验证背书结果信息,用peer节点公钥加密链码定义,所得结果与背书结果一致时验证通过;
44.step05:当有多个orderer节点时,将背书结果广播至所有orderer节点,orderer节点对背书结果进行共识,当通过共识的orderer节点数量达到预设条件时共识通过;
45.step06:共识通过后由leader节点将链码定义打包成区块添加到链上;
46.step07:获取请求中的链码语言定义,根据链码语言定义选择链码包外部构建器类型,链码语言定义定义了链码语言信息,包括go链码、java链码、javascript链码等,根据链码语言信息选择相应的链码包外部构建器,相应的链码包外部构建器类型有go链码包外
部构建器、java链码包外部构建器、javascript链码包外部构建器;在外部构建器创建链码包之前需要配置外部构建器,外部构建器由detect、build、release、run这4个组件构成,配置信息包括构建器路径、构建器名称、组件配置信息及脚本执行环境,根据组件配置信息对4个组件进行配置;
47.step08:调用detect组件从相应外部构建器类型中选择外部构建器,在peer节点最初启动时,初始化容器路由,用来对外提供调用,内部委托给不同的构建器实现;在初始化容器路由时,根据yaml文件的配置信息初始化外部构建器;外部构建器的编译方法被调用时,循环所选类型中的所有外部构建器来调用detect组件,返回第一个满足条件的外部构建器即为选定的外部构建器;
48.step09:外部构建器根据解析后的请求信息创建链码包,不报错则视为创建成功;在创建链码包之前需要配置链码包,链码包配置信息包含链码源路径、链码元数据配置信息,链码元数据包含三个配置项:类型、路径和标签;
49.step10:调用build组件编译链码包得到链码,并启动链码,包括根据链码源路径调取链码源,根据链码元数据配置信息调取链码元数据,使用编译器编译链码源和链码元数据得到链码;
50.step11:验证peer节点的证书、私钥和根ca证书;
51.step12:验证通过后,启用外部链码服务器与peer之间的tls协议;
52.step13:调用release组件提供元数据,元数据包括couchdb状态数据库索引定义和外部链码服务的连接信息;根据元数据中的外部链码服务的连接信息连接peer节点与外部链码服务器;
53.step14:连接完成后即可调用创建的外部链码。
54.在另一具体实施例中,提出了一种联盟链多语言外部链码离线编译系统,如图2所示,系统具体包括:
55.请求解析模块:获取并解析所述请求,获得请求中的链码定义及获取请求中的链码语言定义;
56.背书模块:peer节点对链码定义进行背书,返回背书结果;
57.验证模块:验证背书结果信息及验证peer节点的证书、私钥和根ca证书;
58.共识模块:orderer节点对背书结果进行共识;
59.构建器选择模块:根据链码语言定义选择链码包外部构建器类型,调用detect组件从相应外部构建器类型中选择外部构建器;
60.链码创建模块:外部构建器根据请求信息创建链码包,以及调用build组件编译链码包得到链码,并启动链码;
61.链码调用模块:启用外部链码服务器与peer之间的tls协议,调用release组件提供元数据,元数据包括couchdb状态数据库索引定义和外部链码服务的连接信息;根据元数据中的外部链码服务的连接信息连接peer节点与外部链码服务器,连接完成后即可调用创建的外部链码。
62.构建器选择模块还用于:根据链码语言信息选择相应的链码包外部构建器,链码语言定义定义了链码语言信息,包括go链码、java链码、javascript链码,相应的链码包外部构建器类型有go链码包外部构建器、java链码包外部构建器、javascript链码包外部构
建器;
63.链码包创建模块还用于:在peer节点最初启动时,初始化容器路由,用来对外提供调用,内部委托给不同的构建器实现;在初始化容器路由时,根据yaml文件的配置信息初始化外部构建器;外部构建器的编译方法被调用时,循环所选类型中的所有外部构建器来调用detect组件,返回第一个满足条件的外部构建器即为选定的外部构建器;外部构建器根据解析后的请求信息创建链码包,不报错则视为创建成功。
64.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由权利要求指出。
65.应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献