区块链系统的运行方法、装置、设备和存储介质转让专利

申请号 : CN202110652640.0

文献号 : CN113110920B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 万春辉樊冰新

申请人 : 北京百度网讯科技有限公司

摘要 :

本申请公开了一种区块链系统的运行方法、装置、设备和存储介质,涉及计算机技术领域,尤其涉及区块链技术,可用于云计算和云领域。具体实现方案为:通过区块链系统的内核引擎,获取待处理区块链数据;通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中基于合约组件接口产生合约组件调用请求,根据所述合约组件调用请求调用对应的合约组件;其中,所述合约组件用于执行智能合约对事务请求进行处理。执行本申请提供的技术方案可以提高区块链系统的适用性和可扩展性,从而降低区块链系统的研发成本。

权利要求 :

1.一种区块链系统的运行方法,所述方法包括:通过区块链系统的内核引擎,获取待处理区块链数据;

通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中基于合约组件接口产生合约组件调用请求,根据所述合约组件调用请求调用对应的合约组件;其中,所述合约组件用于执行智能合约对事务请求进行处理,所述合约组件接口是供所述内核引擎调用所述合约组件的标准合约组件功能接口;

通过所述合约组件执行所述合约组件调用请求,以执行智能合约来处理待处理区块链数据中的事务请求;

其中,通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中基于合约组件接口产生合约组件调用请求,根据所述合约组件调用请求调用对应的合约组件包括:

通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中调用合约组件适配器提供的合约组件接口;

通过所述合约组件适配器,在所述合约组件接口被调用时,根据合约组件的合约指令接口产生合约组件调用请求;

通过所述合约组件适配器,根据所述合约组件调用请求调用对应的合约组件。

2.根据权利要求1所述的方法,其中,通过所述合约组件适配器,在所述合约组件接口被调用时,根据合约组件的合约指令接口产生合约组件调用请求包括:通过所述合约组件适配器,在所述合约组件接口被调用时,从同类的合约组件集合中确定待调用合约组件;

根据待调用合约组件的合约指令接口产生所述合约组件调用请求。

3.根据权利要求1所述的方法,其中,通过所述合约组件适配器,在所述合约组件接口被调用时,根据合约组件的合约指令接口产生合约组件调用请求包括:通过所述合约组件适配器,在所述合约组件接口被调用时,将调用输入参数基于合约组件的合约指令接口转换为合约组件调用请求的输入参数,以产生所述合约组件调用请求。

4.根据权利要求1所述的方法,其中,通过所述合约组件适配器,在所述合约组件接口被调用时,根据合约组件的合约指令接口产生合约组件调用请求包括:通过所述合约组件适配器,在所述合约组件接口被调用时,根据合约组件接口与合约指令接口的映射关系,确定至少一个合约指令接口;

通过所述合约组件适配器,根据合约组件的合约指令接口产生合约组件调用请求。

5.根据权利要求1所述的方法,其中,合约组件接口包括下述至少一种:创建合约上下文接口;

创建数据读写沙盒环境接口;

获取系统合约注册句柄接口;

合约调用接口;

资源使用查询接口;

持有资源释放接口;

合约指令接口包括下述至少一种:单次执行的合约虚拟机实例创建接口;

合约执行接口;

获取资源消耗统计接口;

资源释放接口;

运行退出接口。

6.根据权利要求1所述的方法,其中,通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中基于合约组件接口产生合约组件调用请求,根据所述合约组件调用请求调用对应的合约组件包括:通过所述内核引擎,针对所述待处理区块链数据中的事务请求,基于合约组件接口产生合约执行调用请求,根据所述合约执行调用请求调用对应的合约组件,以启动虚拟机实例运行智能合约,执行所述事务请求。

7.根据权利要求1所述的方法,还包括:在区块链节点启动时,在合约组件适配器中注册合约组件的合约指令接口和合约组件配置参数;

通过所述内核引擎启动并实例化合约组件的虚拟机。

8.一种区块链系统的运行装置,所述装置包括:待处理区块链数据获取模块,用于通过区块链系统的内核引擎,获取待处理区块链数据;

合约组件调用请求产生模块,用于通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中基于合约组件接口产生合约组件调用请求,根据所述合约组件调用请求调用对应的合约组件;其中,所述合约组件用于执行智能合约对事务请求进行处理,所述合约组件接口是供所述内核引擎调用所述合约组件的标准合约组件功能接口;

智能合约执行模块,用于通过所述合约组件执行所述合约组件调用请求,以执行智能合约来处理待处理区块链数据中的事务请求;

其中,合约组件调用请求产生模块,包括:合约组件接口调用子模块,用于通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中调用合约组件适配器提供的合约组件接口;合约组件调用请求产生子模块,用于通过所述合约组件适配器,在所述合约组件接口被调用时,根据合约组件的合约指令接口产生合约组件调用请求;合约组件调用子模块,用于通过所述合约组件适配器,根据所述合约组件调用请求调用对应的合约组件。

9.一种电子设备,包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1‑7中任一项所述的方法。

10.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1‑7中任一项所述的区块链系统的运行方法。

说明书 :

区块链系统的运行方法、装置、设备和存储介质

技术领域

[0001] 本公开涉及计算机技术领域,尤其涉及区块链技术。

背景技术

[0002] 区块链行业在持续的快速发展,区块链技术发展初期主要的应用场景还是以数字货币和游戏为主。目前,区块链技术开始从支撑数字货币的底层技术,进入了全面探索赋能
产业的新阶段。
[0003] 目前主流的区块链实现方案,基本上都有明确的适用场景定位,由于传统方案大多都是面向数字货币类的应用场景,更加适合数字货币类的应用,在实际业务场景落地中
会遇到适用性的问题,需要深入框架做改造,改造成本和技术门槛都非常高。
[0004] 然而,深入框架进行改造的模式,使得改造难度大、成本高,改造后还无法自动跟进对应框架最新的更新。

发明内容

[0005] 本公开提供了一种区块链系统的运行方法、装置、设备和存储介质,以提高区块链针对于不同场景的适用性,降低开发难度和成本。
[0006] 根据本公开的一方面,提供了一种区块链系统的运行方法,所述方法包括:
[0007] 通过区块链系统的内核引擎,获取待处理区块链数据;
[0008] 通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中基于合约组件接口产生合约组件调用请求,根据所述合约组件调用请求调用对应的合约组件;其
中,所述合约组件用于执行智能合约对事务请求进行处理。
[0009] 根据本公开的另一方面,提供了一种区块链系统的运行装置,所述装置包括:
[0010] 待处理区块链数据获取模块,用于通过区块链系统的内核引擎,获取待处理区块链数据;
[0011] 合约组件调用请求产生模块,用于通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中基于合约组件接口产生合约组件调用请求,根据所述合约组件
调用请求调用对应的合约组件;其中,所述合约组件用于执行智能合约对事务请求进行处
理。
[0012] 根据本申请的另一方面,提供一种电子设备,该电子设备包括:
[0013] 至少一个处理器;以及
[0014] 与所述至少一个处理器通信连接的存储器;其中,
[0015] 所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如本申请实施例任一项所述的区块链系
统的运行方法。
[0016] 根据本申请的一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行如本申请实施例任一项所述的区块链系统的运
行方法。
[0017] 根据本申请的一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现如本申请实施例任一项所述的区块链系统的运行方法。
[0018] 本申请实施例的技术方案,能够提高区块链实现方案的可扩展性和适用性,从而降低区块链技术的研发成本。
[0019] 应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。

附图说明

[0020] 附图用于更好地理解本方案,不构成对本公开的限定。其中:
[0021] 图1是根据本申请实施例的一种区块链系统的运行方法的示意图;
[0022] 图2是根据本申请实施例的又一种区块链系统的运行方法的示意图;
[0023] 图3是根据本申请实施例的又一种区块链系统的运行方法的示意图;
[0024] 图4是根据本申请实施例的又一种区块链系统的运行方法的示意图;
[0025] 图5是根据本申请实施例的又一种区块链系统的运行方法的示意图;
[0026] 图6是根据本申请实施例的一种区块链系统的运行装置的示意图;
[0027] 图7是用来实现本申请实施例的区块链系统的运行方法的电子设备的框图。

具体实施方式

[0028] 以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识
到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同
样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
[0029] 本申请实施例所提供的区块链系统的运行方法,是在发明人构造的区块链内核架构的基础上提出的。
[0030] 区块链系统整体上可以分为两个部分,分别为区块链内核架构和区块链应用层。其中,区块链应用层是供用户基于区块链系统实现具体业务需求的,区块链应用层向用户
屏蔽了复杂的区块链底层技术,在用户了解区块链基本原理的情况下即可搭建区块链完成
业务需求。可以由区块链系统主程序来实现区块链应用层的服务端功能。区块链应用层还
可以包括客户端(client)和应用程序接口(API),从而提供用户交互界面或交互机制,实现
与用户的交互。在一个区块链系统中可以支撑一个或多个区块链应用层的业务功能。应用
层的客户端或API可通过专有组件与区块链内核架构进行交互,专有组件例如是对设定交
互端口的监听服务。
[0031] 本申请更为关注区块链的内核架构,内核架构至少包括:内核引擎层和内核组件层,还可以进一步包括基础组件层。其中,内核引擎层,定义了区块链内核核心流程,即区块
链运行过程中的各种业务逻辑的核心流程,例如,交易处理流程、矿工出块流程、和同步区
块流程等。本申请实施例中,所谓交易,是由区块链用户发起,需要由区块链节点基于区块
链系统进行处理,并将处理过程上链存储的事务请求,并不限于交易业务,可以是任何区块
链所需承载的应用业务或区块链管理事务请求。所谓矿工,即当前出块周期内有权限进行
出块的区块链节点,并不限于基于工作量证明共识机制(POW)来确定的出块节点,基于其他
共识机制确定的出块节点,也可称为矿工。并且,内核引擎采用了读写分离的设计来降低复
杂度,可以采用独立读组件的方式来实现读操作,实现了读操作可单独扩展。内核引擎层中
的内核引擎是可以由用户根据场景需要,进行无框架代码侵入的扩展定制,或者轻量级的
代码调整定制。即,开发人员可以基于内核组件的功能来开发内核引擎,无需再单独开发内
核组件。基于内核架构为用户提供了配置多种类内核引擎层的可能性,具体的可配置开发:
超级公链引擎(xuperos engine)、超级联盟链引擎(xchain engine)和用户自主实现的内
核引擎(other engine)等。
[0032] 内核组件层,是对内核组件编程规范的具体实现,内置非常完备的标准内核组件的实现,包括账本组件、共识组件、合约组件、网络组件、加密组件和权限组件等可供内核引
擎的开发者选用,同时开发者也可以低成本的按照内核组件编程规范开发适合自己场景的
内核组件,并将自主实现的内核组件无缝接入到各种内核引擎中。其中,内核组件编程规范
是用以抽象内核组件的规范。根据内核组件编程规范实现内核组件,可以为内核引擎调用
内核组件提供标准内核组件功能接口,使得内核引擎可以通过内核引擎层内的组件适配器
(如consensus、contract、ledge、network或者permission)确定的内核组件接口,基于内核
组件接口实现对内核组件的调用,再通过内核组件完成对待处理区块链数据的处理工作。
内核组件接口也可称为内核功能接口,是内核组件提供给内核引擎调用的、功能层级的接
口。无论哪种内核组件,无论内部如何实现组件功能,都可以提供规范化、统一的内核组件
接口,以方便内核引擎调用。
[0033] 基础组件层内设置有与区块链业务无关的基础公共组件,例如包括:基础存储、p2p网络库、密码学库、编解码库和日志库等。
[0034] 本申请提供的区块链内核架构是一种全新的高可扩展、广域场景适用的区块链通用内核框架,本架构的高度模块化的设计,保证了模块间松耦合,使得各模块都可以自由的
扩展替换。基于本架构,用户可以根据具体场景的需要和喜好,非常轻量级的开发具体的区
块链系统,本架构将区块链系统开发的难度降维到只是根据场景需要扩展部分子领域功
能,极大的降低区块链技术的研发成本。
[0035] 图1是根据本申请实施例的一种区块链系统的运行方法的示意图。本实施例可适用于在利用区块链对待处理区块链数据的情况。本实施例公开的区块链系统的运行方法可
以由区块链系统的运行装置来执行,该装置可以由软件和/或硬件的方式实现,配置于具备
计算和存储功能的电子设备中,例如可以由区块链节点来执行。参见图1,本实施例提供的
一种区块链系统的运行方法,包括:
[0036] S110、通过区块链系统的内核引擎,获取待处理区块链数据。
[0037] 其中,内核引擎为区块链内核核心流程,内核引擎获取的待处理区块链数据可以是由内核引擎的上一层,即应用层,从用户客户端获取待处理区块链数据以后,发送给内核
引擎的,也可以是内核引擎通过网络组件接收到用户客户端发送的待处理区块链数据,以
及内核引擎通过网络组件接收到区块链系统运行过程中如生成的新区块验证过程和区块
同步过程产生的待处理区块链数据。
[0038] 其中,待处理区块链数据是指需要由区块链节点处理的数据,示例性的,待处理区块链数据还可以包括治理数据,即用于管理网络的操作数据,具体的如变更出块节点,管理
节点和监控网络状态等操作数据,待处理区块链数据还可以是由内核引擎接收到的用户对
区块链中数据的查询请求。待处理区块链数据包括下述至少一项:待处理区块链事务请求、
待验证区块、待同步区块和区块链系统维护数据,待处理区块数据的具体内容在这里不限
定,具体依据实际情况确定。
[0039] S120、通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中基于合约组件接口产生合约组件调用请求,根据所述合约组件调用请求调用对应的合约组
件;其中,所述合约组件用于执行智能合约对事务请求进行处理。
[0040] 由于内核引擎只是区块链内核核心流程,若要满足待处理区块链数据的处理需求,内核引擎还需要和内核组件相互配合,通过调用内核组件执行设定组件功能完成对待
处理区块链数据的处理。
[0041] 具体的,内核引擎会在处理过程中根据待处理区块链数据,确定用于处理该待处理区块链数据的内核组件接口,并在确定内核组件接口后产生对应内核组件的调用请求。
其中,内核组件的数量为至少一个,具体数量和种类在这里不作限定,具体根据区块链系统
所适用的场景及其所需提供功能确定。但是值得注意的是,内核组件至少包括区块链专用
组件如合约组件、网络组件、账本组件或者共识组件。
[0042] 智能合约是实现链上数据可编程的关键,合约组件是区块链系统非常重要的内核组件之一,用于执行智能合约来处理待处理区块链数据中的事务请求,并将合约执行结果
反馈给所述内核引擎。
[0043] 内核引擎调用合约组件执行智能合约来处理待处理区块链数据中的事务请求,具体的,内核引擎根据当前待处理区块链数据的处理流程,在各内核组件接口中确定合约组
件接口,并基于合约组件接口产生合约组件调用请求,根据合约组件调用请求对应的合约
组件,通过合约组件执行智能合约来处理待处理区块链数据中的事务请求。
[0044] 其中,合约组件接口是在根据合约组件编程规范实现合约组件时,为便于内核引擎调用合约组件提供标准合约组件功能接口。合约组件调用请求是指由内核引擎基于合约
组件接口产生的,用于调用合约组件执行智能合约来处理待处理区块链数据中的事务请
求。值得注意的是,合约组件调用请求中所包括的参数的种类和参数数量,是根据预设合约
组件编程规范确定的,在这里不作限定,具体依据实际情况确定。示例性的,合约组件调用
请求包括:合约组件名称、输入参数、要求返回参数和回调函数等。
[0045] 在一个可选的实施例中,在通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中基于合约组件接口产生合约组件调用请求,根据所述合约组件调用请
求调用对应的合约组件;其中,所述合约组件用于执行智能合约对事务请求进行处理之后,
所述方法还包括:通过所述合约组件执行所述合约组件调用请求,以执行智能合约来处理
待处理区块链数据中的事务请求。
[0046] 即,在步骤S120 以后,可选的还包括步骤S130:通过所述合约组件执行所述合约组件调用请求,以执行智能合约来处理待处理区块链数据中的事务请求。
[0047] S130、通过所述合约组件执行所述合约组件调用请求,以执行智能合约来处理待处理区块链数据中的事务请求。
[0048] 合约组件在接收到合约组件调用请求以后,会根据合约调用请求中的各项参数如输入参数、回调函数和要求返回参数执行智能合约来处理待处理区块链数据中的事务请
求。
[0049] 本申请实施例的技术方案,通过内核引擎基于合约组件接口与合约组件相互配合,实现了通过执行智能合约来处理待处理区块链数据中的事务请求。本申请实施例中内
核引擎和合约组件均采用模块化设计,二者通过合约组件接口实现配合工作,从而实现了
模块间的松耦合,使得内核引擎和合约组件均可以自由扩展,进而扩展了区块链系统的场
景适用性,本申请实施例提出的区块链系统运行方法将区块链系统开发的难度降维到用户
只需要根据场景需求扩展合约组件或者内核引擎功能的程度,极大的降低区块链技术的研
发成本。
[0050] 图2是根据本申请实施例的另一种区块链系统的运行方法的示意图;本实施例是在上述实施例的基础上提出的一种可选方案。具体的,是对通过所述内核引擎,对所述待处
理区块链数据进行处理,并在处理过程中基于合约组件接口产生合约组件调用请求,根据
所述合约组件调用请求调用对应的合约组件的细化。
[0051] 参见图2,本实施例提供的区块链系统的运行方法包括:
[0052] S210、通过区块链系统的内核引擎,获取待处理区块链数据。
[0053] S220、通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中调用合约组件适配器提供的合约组件接口。
[0054] 内核引擎在获取到待处理区块链数据以后,会对待处理区块链数据进行处理。具体的,在处理过程中,内核引擎会在组件适配器提供的内核组件接口中确定用于处理该待
处理区块链数据的内核组件接口。内核引擎对待处理区块链数据进行处理的过程中,实质
是根据待处理区块链数据对选择对应功能内核组件的过程。内核组件的数量为至少一个,
示例性的,内核组件可以包括共识组件、账本组件、合约组件和网络组件中的至少一个。内
核组件的种类和数量在这里不作限定,具体依据实际情况确定。
[0055] 其中,组件适配器是配置于内核引擎层的,组件适配器用于将各内核组件的功能抽象为可供内核引擎直接调用的内核组件接口,组件适配器向内核引擎屏蔽内核组件的功
能实现细节。
[0056] 其中,内核组件接口是对内核组件可实现功能的抽象,区块链系统中的每个内核组件均存在对应的内核组件接口,一个内核组件接口可以对应多个内核组件。内核组件接
口由组件适配器提供给内核引擎,内核引擎只需要根据待处理区块链数据对需要的内核组
件功能进行选择,无需关心内核组件功能的具体实现。内核引擎通过调用内核组件接口即
可实现对内核组件的调用。
[0057] 可选的,在本申请实施例的区块链系统中每种内核组件均存在对应的组件适配器,示例性的,组件适配器可以包括:与共识组件对应的共识组件适配器(consensus)、与合
约组件对应的合约组件适配器(contract)、与网络组件对应的网络组件适配器(network)
和权限组件对应的权限组件适配器(permission)等组件适配器。
[0058] 在内核引擎需要执行智能合约来处理待处理区块链数据中的事务请求的情况下,内核引擎根据待处理区块链数据在合约组件适配器中确定合约组件接口,并通过调用合约
组件接口实现对合约组件的调用。
[0059] 其中,合约组件适配器为组件适配器中的一种,是配置于内核引擎层的,合约组件适配器充当翻译器的角色,合约组件适配器(contract)与合约组件相对应,用于将合约组
件的功能抽象为可供内核引擎直接调用的合约组件接口,合约组件适配器向内核引擎屏蔽
合约组件的功能实现细节。无论哪种合约组件,无论合约组件内部如何实现组件功能,但合
约组件适配器抽象出来的,为内核引擎提供的合约组件接口是规范化的接口。这样做可以
保持内核引擎和合约组件之间的松耦合关联关系,使得内核引擎和合约组件都可以自由的
扩展替换。
[0060] S230、通过所述合约组件适配器,在所述合约组件接口被调用时,根据合约组件的合约指令接口产生合约组件调用请求。
[0061] 考虑到内核引擎和合约组件的指令系统之间的差异,可能导致内核引擎的内核调用指令形式不能被合约组件直接识别处理的情况,在合约组件适配器中引入合约指令接
口。在内核引擎调用合约组件接口时,合约组件适配器根据被调用的合约组件接口,确定与
合约组件接口对应的合约指令接口。通过合约指令接口对内核引擎发送的合约组件调用指
令进行处理,将合约组件调用指令转换为合约组件可以直接识别的形式。
[0062] 不同于合约组件接口是面向内核引擎,为内核引擎提供合约组件接口规范化的调用接口;合约指令接口是面向与合约组件,在内核引擎调用合约组件的情况下,将合约组件
调用指令转化为对应合约组件可识别的形式。
[0063] 内核引擎根据合约组件接口和待处理区块链数据产生合约组件调用请求,再通过合约组件适配器中的合约指令接口将合约组件调用请求转化为对应合约组件可以直接识
别的指令级别调用请求。可选的,合约组件调用请求中包括合约组件名称、输入参数、要求
返回参数和回调函数等。
[0064] 为了使得合约组件可以适应多种不同的业务场景,本申请实施例在合约组件适配器配置了完备的合约组件接口和合约指令接口,供内核引擎选择。
[0065] 在一个可选的实施例中,合约组件接口包括下述至少一种:
[0066] 创建合约上下文接口,NewContext(cfg *ContextConfig) (Context,error),用于创建合约上下文;
[0067] 创建数据读写沙盒环境接口,NewStateSandbox(cfg *SandboxConfig) (StateSandbox, error),用于创建数据读写沙盒环境;
[0068] 获取系统合约注册句柄接口,GetKernRegistry()KernRegistry,用于获取系统合约注册句柄;
[0069] 合约调用接口,Invoke (method string, args map[string]「]byte) (*Response,error),用于调用合约;
[0070] 资源使用查询接口,ResourceUsed()Limits,用于查询资源使用情况;
[0071] 持有资源释放接口,Release()error,用于释放持有资源;
[0072] 合约指令接口包括下述至少一种:
[0073] 单次执行的合约虚拟机实例创建接口,CreateInstance(ctx *Context,cp ContractCodeProvider) (Instance, error),用于创建单次执行的合约虚拟机实例;
[0074] 合约执行接口,Exec()error,用于执行合约;
[0075] 获取资源消耗统计接口,ResourceUsed()contract.Limits,用于获取资源消耗统计结果;
[0076] 资源释放接口,Release(),用于释放资源;
[0077] 运行退出接口,Abort(msg string),用于运行退出。
[0078] 智能合约通常需要创建虚拟机,并在虚拟机中运行智能合约来对事务请求进行处理。
[0079] 在一个可选的实施例中,通过所述合约组件适配器,在所述合约组件接口被调用时,根据合约组件的合约指令接口产生合约组件调用请求包括:
[0080] 通过所述合约组件适配器,在所述合约组件接口被调用时,将调用输入参数基于合约组件的合约指令接口转换为合约组件调用请求的输入参数,以产生所述合约组件调用
请求。
[0081] 其中,调用输入参数是由内核引擎基于合约组件接口生成的,内核引擎和合约组件的指令系统的差异,使得调用输入参数很大可能性上是能被合约组件直接识别的。
[0082] 合约组件调用请求的输入参数,是指经过合约指令接口处理过的调用输入参数,是可以被对应合约组件直接识别的输入参数。
[0083] 在合约组件接口被调用时,合约组件适配器基于合约组件的合约指令接口,将合约组件的调用请求的输入参数进行转化,并根据转化后的输入参数产生合约组件调用请
求,产生合约组件调用请求可以直接被合约组件识别。示例性的,合约指令接口对调用输入
参数进行的转换可以对调用输入参数中的接口名称进行映射转换,还可以实现接口输入参
数的名称和类型转换。可以知道的是,合约组件接口和合约指令接口大致相同,但有些情况
下也可能不同。所以合约组件适配器需要起到接口名称映射转换,参数合法性校验和转换
的功能。
[0084] 合约组件接口是适配器暴露出来提供给内核引擎来调用的接口。在可选实施例中,合约指令接口也可以包括上述名称的接口,是合约组件可直接执行的接口。合约组件接
口与合约指令接口可以具备相同的功能,适配器根据内核引擎的调用直接调用合约指令接
口。或者,一个合约组件接口也可以经转换后,调用不同接口名称的一个或多个合约指令接
口来完成相应功能。
[0085] S240、通过所述合约组件适配器,根据所述合约组件调用请求调用对应的合约组件。
[0086] 合约组件适配器根据合约指令接口转化得到的合约组件调用请求,调用对应的合约组件,使得合约组件根据接收到合约组件调用请求,执行智能合约来处理待处理区块链
数据中的事务请求。
[0087] S250、通过所述合约组件执行所述合约组件调用请求,以执行智能合约来处理待处理区块链数据中的事务请求。
[0088] 合约组件在接收到合约组件调用请求以后,会根据合约调用请求中的各项参数如输入参数、回调函数和要求返回参数,执行智能合约来处理待处理区块链数据中的事务请
求。
[0089] 本申请实施例的技术方案通过合约引擎与合约组件相互配合,实现了执行智能合约来处理待处理区块链数据中的事务请求。本申请中内核引擎和合约组件均采用模块化设
计,二者通过合约组件适配器实现配合工作,从而实现了模块间的松耦合,合约组件适配器
向内核引擎提供合约组件接口,供内核引擎按需选择合约组件;另一方面,合约组件适配器
通过合约指令接口,将内核引擎的合约组件调用指令为合约组件能够识别的形式。合约组
件适配器的引入使得内核引擎和合约组件均可以自由扩展,进而扩展了区块链系统的场景
适用性,本申请的提出的区块链系统运行方法将区块链系统开发的难度降维到用户只需要
根据场景需求扩展合约组件或者内核引擎功能的程度,极大的降低区块链技术的研发成
本。
[0090] 图3是根据本申请实施例的另一种区块链系统的运行方法的示意图;本实施例是在上述实施例的基础上提出的一种可选方案。具体的,是对通过所述合约组件适配器,在所
述合约组件接口被调用时,根据合约组件的合约指令接口产生合约组件调用请求的细化。
[0091] 参见图3,本实施例提供的区块链系统的运行方法包括:
[0092] S310、通过区块链系统的内核引擎,获取待处理区块链数据。
[0093] S320、通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中调用合约组件适配器提供的合约组件接口。
[0094] S330、通过所述合约组件适配器,在所述合约组件接口被调用时,从同类的合约组件集合中确定待调用合约组件。
[0095] 在不同的落地场景中对合约组件的要求是不同的,可选的,根据合约组件的适用场景的差异对合约组件进行进一步的分类,也就是,在区块链系统中可以包括多个可适用
不同场景的合约组件,这些合约组件均可以执行智能合约来处理待处理区块链数据中的事
务请求。可选的,合约组件可以包括XML虚拟机(xvm)、原生代码虚拟机(native)和以太坊智
能合约虚拟机(EVM)。
[0096] 在内核引擎通过合约组件调用接口,调用合约组件时,合约组件适配器还需要根据具体的用户需求从同类的合约组件集合中确定待调用合约组件,即需要对功能大类下的
合约组件的子类型进行选择。具体的,用户需求是用户根据区块链系统的应用场景和业务
需求确定的,并在区块链的初始化阶段,注册到合约组件适配器的。
[0097] S340、根据待调用合约组件的合约指令接口产生所述合约组件调用请求。
[0098] 合约指令接口将内核引擎基于合约组件接口提供的调用输入参数,转化为合约组件可以直接识别的输入参数,基于转换得到的输入参数产生合约组件调用请求。
[0099] S350、通过所述合约组件适配器,根据所述合约组件调用请求调用对应的合约组件。
[0100] S360、通过所述合约组件执行所述合约组件调用请求,以执行智能合约来处理待处理区块链数据中的事务请求。
[0101] 本申请实施例的技术方案通过内核引擎与合约组件相互配合,实现了执行智能合约来处理待处理区块链数据中的事务请求。本申请中内核引擎和合约组件均采用模块化设
计,二者通过合约组件适配器实现配合工作,从而实现了模块间的松耦合,合约组件适配器
的引入使得内核引擎和合约组件均可以自由扩展。另一方面,通过合约组件适配器,在合约
组件接口被调用时,从同类的合约组件集合中确定待调用合约组件,根据待调用合约组件
的内核指令接口产生所述合约组件调用请求,满足了用户个性化需求,扩大区块链系统的
应用程场景,本申请的提出的区块链系统运行方法将区块链系统开发的难度降维到用户只
需要根据场景需求扩展合约组件或者内核引擎功能的程度,极大的降低区块链技术的研发
成本。
[0102] 图4是根据本申请实施例的另一种区块链系统的运行方法的示意图;本实施例是在上述实施例的基础上提出的一种可选方案。具体的,是对通过所述合约组件适配器,在所
述合约组件接口被调用时,根据合约组件的合约指令接口产生合约组件调用请求的细化。
[0103] 参见图4,本实施例提供的区块链系统的运行方法包括:
[0104] S410、通过区块链系统的内核引擎,获取待处理区块链数据。
[0105] S420、通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中调用合约组件适配器提供的合约组件接口。
[0106] S430、通过所述合约组件适配器,在所述合约组件接口被调用时,根据合约组件接口与合约指令接口的映射关系,确定至少一个合约指令接口。
[0107] 其中,合约组件接口与合约指令接口的映射关系是在区块链系统的初始化阶段注册到合约组件适配器中的。当区块链节点启动运行,对合约组件进行初始化时可完成注册。
[0108] 在合约组件接口被调用时,根据合约组件接口与合约指令接口的映射关系,可以在合约指令接口中确定与合约组件接口对应的内核指令接口。一个合约组件接口可以对应
多个合约指令接口。
[0109] S440、通过所述合约组件适配器,根据合约组件的合约指令接口产生合约组件调用请求。
[0110] 其中,合约组件调用请求是指合约组件可以识别,无需经过二次转换,直接执行的调用请求。合约组件调用请求是通过合约组件适配器根据合约组件的内核指令接口产生
的。
[0111] S450、通过所述合约组件适配器,根据所述合约组件调用请求调用对应的合约组件。
[0112] S460、通过所述合约组件执行所述合约组件调用请求,以执行智能合约来处理待处理区块链数据中的事务请求。
[0113] 本申请实施例的技术方案通过内核引擎基于合约组件接口与合约组件相互配合,实现通过执行智能合约来处理待处理区块链数据中的事务请求。本申请中内核引擎和合约
组件均采用模块化设计,二者通过合约组件适配器实现配合工作,从而实现了模块间的松
耦合,合约组件适配器向内核引擎提供合约组件接口,供内核引擎按需选择合约组件;另一
方面,合约组件适配器,在合约组件接口被调用时,根据合约组件接口与合约指令接口的映
射关系,确定合约指令接口,通过合约指令接口,将内核引擎的合约组件调用指令转换为合
约组件能够识别的形式。合约组件适配器的引入使得内核引擎和合约组件均可以自由扩
展,进而扩展了区块链系统的场景适用性,本申请的提出的区块链系统运行方法将区块链
系统开发的难度降维到用户只需要根据场景需求扩展合约组件或者内核引擎功能的程度,
极大的降低区块链技术的研发成本。
[0114] 图5是根据本申请实施例的另一种区块链系统的运行方法的示意图;本实施例是在上述实施例的基础上提出的一种可选方案。具体的,是对通过所述内核引擎,对所述待处
理区块链数据进行处理,并在处理过程中基于合约组件接口产生合约组件调用请求,根据
所述合约组件调用请求调用对应的合约组件的细化。
[0115] 参见图5,本实施例提供的区块链系统的运行方法包括:
[0116] S510、通过区块链系统的内核引擎,获取待处理区块链数据。
[0117] 可选的,待处理区块链数据可以是应用层客户端通过网络发送待处理区块链事务请求。示例性的,待处理区块链事务请求为在基于区块链的有奖竞猜场景下,由应用层客户
端发送的获奖账户确定请求。智能合约规定了获奖账户的确定方法,通过运行智能合约确
定获奖账户。
[0118] S520、通过所述内核引擎,针对所述待处理区块链数据中的事务请求,基于合约组件接口产生合约执行调用请求,根据所述合约执行调用请求调用对应的合约组件,以启动
虚拟机实例运行智能合约,执行所述事务请求。
[0119] 内核引擎根据待处理区块链数据中的事务请求,确定合约组件接口并基于合约组件接口生成合约执行调用请求,再由内核引擎根据合约执行调用请求调用合约组件,启动
虚拟机实例运行智能合约,执行事务请求。
[0120] S530、通过所述合约组件执行所述合约组件调用请求,以执行智能合约来处理待处理区块链数据中的事务请求。
[0121] 合约组件根据合约执行调用请求中智能合约标识,确定智能合约并运行智能合约虚拟机实例,通过运行智能合约虚拟机,处理待处理区块链数据中的事务请求,并由合约组
件将处理结果反馈给内核引擎。示例性的,通过运行智能合约虚拟机实例确定参与有奖竞
猜的获奖账户,并将获奖区块的区块标识作为合约处理结果反馈给内核引擎。
[0122] 在一个可选的实施例中,描述了在区块链系统时合约组件的启动过程。具体的,在区块链节点启动时,在合约组件适配器中注册合约组件的合约指令接口和合约组件配置参
数;通过所述内核引擎启动并实例化合约组件的虚拟机。
[0123] 在区块链节点启动过程中,在合约组件适配器中注册合约组件的合约指令接口和合约组件配置参数,其中,合约指令接口是面向合约组件的接口,用于在内核引擎调用合约
组件的情况下,将合约组件调用指令转化为对应合约组件可识别的形式。合约组件配置参
数用于配置调用合约组件时的基本参数,合约组件的配置参数包括合约组件的选型信息。
可选的,将全部的合约组件的合约指令接口注册到合约组件适配器中。具体,可在合约适配
器中注册合约组件的具体实现逻辑,即组件驱动,从而通过组件驱动实现合约组件接口的
注册。
[0124] 内核引擎启动并实例化合约组件,向合约组件分配计算资源和内存资源,使得合约组件可以执行智能合约来处理待处理区块链数据中的事务请求。
[0125] 在本申请实施例中,合约组件采用了模块化设计,合约组件均是在区块链的启动阶段,以init初始化注册的方式注册到区块链系统中的,使得在应用层向区块链中导入合
约组件包时,能够自动完成合约组件注册。开发人员只需要关注合约组件的接入规范,实现
规范约束的接口即可,组件驱动代码可以自由存放,无代码侵入。
[0126] 本申请实施例的技术方案通过内核引擎基于合约组件接口与合约组件相互配合,实现了对待处理区块链数据中的事务请求的处理。本申请实施例中内核引擎和合约组件均
采用模块化设计,二者通过合约组件接口实现配合工作,从而实现了模块间的松耦合,使得
内核引擎和合约组件均可以自由扩展,进而扩展了区块链系统的场景适用性,本申请实施
例提出的区块链系统运行方法将区块链系统开发的难度降维到用户只需要根据场景需求
扩展合约组件或者内核引擎功能的程度,极大的降低区块链技术的研发成本。
[0127] 图6是根据本申请实施例的区块链系统的运行装置的示意图;参见图6,本申请实施例公开了一种区块链系统的运行装置600,该装置600可以包括:待处理区块链数据获取
模块610和合约组件调用请求产生模块620。
[0128] 待处理区块链数据获取模块610,用于通过区块链系统的内核引擎,获取待处理区块链数据;
[0129] 合约组件调用请求产生模块620,用于通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中基于合约组件接口产生合约组件调用请求,根据所述合约组
件调用请求调用对应的合约组件;其中,所述合约组件用于执行智能合约对事务请求进行
处理;
[0130] 本申请实施例的技术方案,通过内核引擎基于合约组件接口与合约组件相互配合,实现了通过执行智能合约来处理待处理区块链数据中的事务请求。本申请实施例中内
核引擎和合约组件均采用模块化设计,二者通过合约组件接口实现配合工作,从而实现了
模块间的松耦合,使得内核引擎和合约组件均可以自由扩展,进而扩展了区块链系统的场
景适用性,本申请实施例提出的区块链系统运行方法将区块链系统开发的难度降维到用户
只需要根据场景需求扩展合约组件或者内核引擎功能的程度,极大的降低区块链技术的研
发成本。
[0131] 可选的,所述装置还包括:智能合约执行模块,具体用于在通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中基于合约组件接口产生合约组件调用请
求,根据所述合约组件调用请求调用对应的合约组件;其中,所述合约组件用于执行智能合
约对事务请求进行处理之后,通过所述合约组件执行所述合约组件调用请求,以执行智能
合约来处理待处理区块链数据中的事务请求。
[0132] 可选的,合约组件调用请求产生模块620,包括:合约组件接口调用子模块,用于通过所述内核引擎,对所述待处理区块链数据进行处理,并在处理过程中调用合约组件适配
器提供的合约组件接口;合约组件调用请求产生子模块,用于通过所述合约组件适配器,在
所述合约组件接口被调用时,根据合约组件的合约指令接口产生合约组件调用请求;合约
组件调用子模块,用于通过所述合约组件适配器,根据所述合约组件调用请求调用对应的
合约组件。
[0133] 可选的,合约组件调用请求产生子模块,包括:待调用合约组件确定单元,用于通过所述合约组件适配器,在所述合约组件接口被调用时,从同类的合约组件集合中确定待
调用合约组件;第一合约组件调用请求产生单元,用于根据待调用合约组件的合约指令接
口产生所述合约组件调用请求。
[0134] 可选的,合约组件调用请求产生子模块,具体用于通过所述合约组件适配器,在所述合约组件接口被调用时,将调用输入参数基于合约组件的合约指令接口转换为合约组件
调用请求的输入参数,以产生所述合约组件调用请求。
[0135] 可选的,合约组件调用请求产生子模块,包括:合约指令接口确定单元,用于通过所述合约组件适配器,在所述合约组件接口被调用时,根据合约组件接口与合约指令接口
的映射关系,确定至少一个合约指令接口;第二合约组件调用请求产生单元,用于通过所述
合约组件适配器,根据合约组件的合约指令接口产生合约组件调用请求。
[0136] 可选的,合约组件接口包括下述至少一种:创建合约上下文接口;创建数据读写沙盒环境接口;获取系统合约注册句柄接口;合约调用接口;资源使用查询接口;持有资源释
放接口;合约指令接口包括下述至少一种:单次执行的合约虚拟机实例创建接口;合约执行
接口;获取资源消耗统计接口;资源释放接口;运行退出接口。
[0137] 可选的,合约组件调用请求产生模块620,具体用于通过所述内核引擎,针对所述待处理区块链数据中的事务请求,基于合约组件接口产生合约执行调用请求,根据所述合
约执行调用请求调用对应的合约组件,以启动虚拟机实例运行智能合约,执行所述事务请
求。
[0138] 可选的,所述的装置600,还包括:合约组件注册模块,用于在区块链节点启动时,在合约组件适配器中注册合约组件的合约指令接口和合约组件配置参数;合约组件虚拟机
实例化模块,用于通过所述内核引擎启动并实例化合约组件的虚拟机。
[0139] 本申请实施例所提供的区块链系统的运行装置可执行本申请任意实施例所提供的区块链系统的运行方法,具备执行区块链系统的运行方法相应的功能模块和有益效果。
[0140] 根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
[0141] 图7示出了可以用来实施本公开的实施例的示例电子设备700的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字
助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种
形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算
装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限
制本文中描述的和/或者要求的本公开的实现。
[0142] 如图7所示,设备700包括计算单元701,其可以根据存储在只读存储器(ROM)702中的计算机程序或者从存储单元708加载到随机访问存储器(RAM)703中的计算机程序,来执
行各种适当的动作和处理。在RAM 703中,还可存储设备700操作所需的各种程序和数据。计
算单元701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至
总线704。
[0143] 设备700中的多个部件连接至I/O接口705,包括:输入单元706,例如键盘、鼠标等;输出单元707,例如各种类型的显示器、扬声器等;存储单元708,例如磁盘、光盘等;以及通
信单元709,例如网卡、调制解调器、无线通信收发机等。通信单元709允许设备700通过诸如
因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0144] 计算单元701可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元701的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工
智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及
任何适当的处理器、控制器、微控制器等。计算单元701执行上文所描述的各个方法和处理,
例如区块链系统的运行方法。例如,在一些实施例中,区块链系统的运行方法可被实现为计
算机软件程序,其被有形地包含于机器可读介质,例如存储单元708。在一些实施例中,计算
机程序的部分或者全部可以经由ROM 702和/或通信单元709而被载入和/或安装到设备700
上。当计算机程序加载到RAM 703并由计算单元701执行时,可以执行上文描述的区块链系
统的运行方法的一个或多个步骤。备选地,在其他实施例中,计算单元701可以通过其他任
何适当的方式(例如,借助于固件)而被配置为执行区块链系统的运行方法。
[0145] 本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统
的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实
现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算
机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器
可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出
装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至
少一个输出装置。
[0146] 用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处
理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的
功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件
包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0147] 在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可
读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电
子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合
适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计
算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM
或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD‑ROM)、光学储存设备、磁储存设备、或
上述内容的任何合适组合。
[0148] 为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视
器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来
将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的
反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用
任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0149] 可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算
系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界
面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部
件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数
字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网
(LAN)、广域网(WAN)、区块链网络和互联网。
[0150] 计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端‑服务器关系的计
算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或
云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在
的管理难度大,业务扩展性弱的缺陷。
[0151] 应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,
只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
[0152] 上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开
的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。