智能合约部署方法、装置、电子设备及存储介质与流程

文档序号:18100701发布日期:2019-07-06 11:20阅读:163来源:国知局
智能合约部署方法、装置、电子设备及存储介质与流程

本发明涉及区块链领域,尤其涉及一种智能合约部署方法、装置、电子设备及存储介质。



背景技术:

现有的区块链智能合约系统(以太坊的solidity):目前区块链主要的智能合约系统是以以太坊系统为代表的solidity智能合约。solidity智能合约执行依赖于以太坊虚拟机evm。合约执行流程是第一步使用solidity语言编写合约脚本,第二步将合约脚本编译成evm字节码程序,第三步将编译好的合约程序部署到以太坊链上去,部署成功后会返回合约地址和合约调用的接口。第四步可以通过合约地址进行合约调用。

现有的技术的主要缺陷:

1)合约执行依赖的evm包含了大量的以太坊源码,与以太坊系统耦合度太高,对于其他区块链系统移植的复杂度高,可行性小。

2)合约代码需要借助编译工具编译后才可以进行部署,增加了使用复杂度。



技术实现要素:

有鉴于此,本发明实施例提供了一种智能合约部署方法、装置、电子设备及存储介质,至少部分的解决现有技术中存在的问题。

第一方面,本发明实施例提供了一种智能合约部署方法,包括:

检查接收的合约交易中的合约代码是否正确;

将合约代码正确的合约交易的账号余额传送给虚拟机;

将合约代码和合约相关参数传递给所述虚拟机,所述虚拟机将合约代码进行编译并执行,在执行过程中所述虚拟机按照代码操作码在所述账号余额中进行收费,所述代码操作码对所述虚拟机将合约代码进行编译得到的;

接收所述虚拟机返回的合约执行结果,完成智能合约部署。

作为本发明实施例的一种具体实现方式,所述虚拟机,包括:lua虚拟机。

作为本发明实施例的一种具体实现方式,所述检查接收的合约交易中的合约代码是否正确的步骤之前,包括:

lua虚拟机通过虚拟栈的方式与c++底层进行交互。

作为本发明实施例的一种具体实现方式,所述合约交易,包括:合约部署交易和合约调用交易;

所述合约部署交易:是将合约代码存储到区块链上,如果部署成功,则返回合约地址;

所述合约调用交易:是通过合约地址找到合约代码,并执行合约代码,如执行成功,则返回合约调用结果。

作为本发明实施例的一种具体实现方式,所述检查接收的合约交易中的合约代码是否正确,包括:

检查所述合约代码中有无多个init函数,如果有,则返回错误信息。

作为本发明实施例的一种具体实现方式,所述在执行过程中所述虚拟机按照代码操作码在所述账号余额中进行收费,包括:

如果所述账号余额不够,则执行失败,所述lua虚拟机返回错误信息。

作为本发明实施例的一种具体实现方式,所述接收所述虚拟机返回的合约执行结果,完成智能合约部署的步骤之前,包括:

当合约代码中需要操作区块链系统数据时,通过lua虚拟机的lua接口操作底层系统数据,合约代码执行结束,如果成功,lua虚拟机返回合约执行结果,否则返回失败原因,所述lua接口为所述lua虚拟机与c++底层进行交互的接口。

第二方面,本发明实施例还提供了一种智能合约部署装置,包括:

检查模块:用于检查接收的合约交易中的合约代码是否正确;

余额传送模块:用于将合约代码正确的合约交易的账号余额传送给虚拟机;

编译及执行模块:用于将合约代码和合约相关参数传递给所述虚拟机,所述虚拟机将合约代码进行编译并执行,在执行过程中所述虚拟机按照代码操作码在所述账号余额中进行收费,所述代码操作码对所述虚拟机将合约代码进行编译得到的;

反馈模块:用于接收所述虚拟机返回的合约执行结果,完成智能合约部署。

第三方面,本发明实施例还提供了一种电子设备,该电子设备包括:

至少一个处理器;以及,

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有能被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行第一方面任一所述的方法。

第四方面,本发明实施例还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行第一方面任一所述的方法。

本发明实施例提供的智能合约部署方法,通过将合约代码和合约相关参数传递给所述虚拟机,所述虚拟机将合约代码进行编译并执行,在执行过程中所述虚拟机按照代码操作码在所述账号余额中进行收费,接收所述虚拟机返回的合约执行结果,完成智能合约部署。将合约编译和执行过程交给虚拟机完成,简化合约部署步骤。从而达到降低使用复杂度的目的。

lua虚拟机与区块链底层耦合度小,可以方便的移植到其他c++为底层的区块链平台上。

采用同步方式,合约调用结束可以立即得到合约执行结果。

上述说明仅是本发明技术方案的概述,为了能更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为让本发明的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1为本发明实施例一提供的智能合约部署方法的流程图;

图2为现有技术中solidity合约执行方式示意图;

图3为本发明实施例一提供的lua合约执行方式的示意图;

图4为本发明实施例二提供的智能合约部署装置的原理框图。

具体实施方式

下面结合附图对本发明实施例进行详细描述。

应当明确,以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本发明,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。

还需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。

另外,在以下描述中,提供具体细节是为了便于透彻理解实例。然而,所属领域的技术人员将理解,可在没有这些特定细节的情况下实践所述方面。

实施例一:

如图1所示,本发明实施例提供一种智能合约部署方法,包括:

s101:检查接收的合约交易中的合约代码是否正确;

s102:将合约代码正确的合约交易的账号余额传送给虚拟机;

s103:将合约代码和合约相关参数传递给所述虚拟机,所述虚拟机将合约代码进行编译并执行,在执行过程中所述虚拟机按照代码操作码在所述账号余额中进行收费,所述代码操作码对所述虚拟机将合约代码进行编译得到的;

s104:接收所述虚拟机返回的合约执行结果,完成智能合约部署。

可选的,所述虚拟机,包括:lua虚拟机。

可选的,所述检查接收的合约交易中的合约代码是否正确的步骤之前,包括:

lua虚拟机通过虚拟栈的方式与c++底层进行交互。

可选的,所述合约交易,包括:合约部署交易和合约调用交易;

所述合约部署交易:是将合约代码存储到区块链上,如果部署成功,则返回合约地址;

所述合约调用交易:是通过合约地址找到合约代码,并执行合约代码,如执行成功,则返回合约调用结果。

可选的,所述检查接收的合约交易中的合约代码是否正确,包括:

检查所述合约代码中有无多个init函数,如果有,则返回错误信息。

可选的,所述在执行过程中所述虚拟机按照代码操作码在所述账号余额中进行收费,包括:

如果所述账号余额不够,则执行失败,所述lua虚拟机返回错误信息。

可选的,所述接收所述虚拟机返回的合约执行结果,完成智能合约部署的步骤之前,包括:

当合约代码中需要操作区块链系统数据时,通过lua虚拟机的lua接口操作底层系统数据,合约代码执行结束,如果成功,lua虚拟机返回合约执行结果,否则返回失败原因,所述lua接口为所述lua虚拟机与c++底层进行交互的接口。

可选的,所述接收所述虚拟机返回的合约执行结果,完成智能合约部署的步骤之后,包括:

将智能合约的交易信息转发给验证节点进行验证。

在一个具体的应用场景中,

本发明提出了针对现有智能合约系统evm与系统耦合度高,不易移植,合约需编译再部署的问题解决方法。包括以下几个组成部分:

1、功能剪裁的lua虚拟机evm:

虚拟机负责编译执行lua编写的智能合约,将合约的执行结果返回给c++的区块链底层,再区块链底层将合约执行结果返回给合约部署和调用者,同时虚拟机还负责合约的收费,收费标准按照合约代码编译后的字节码进行收费,程序计数器pc加1,执行相应的字节码,按照字节码的复杂程度进行收费。

2、c++编写的lua接口:

c++编写的接口是lua虚拟机与c++区块链底层交互的接口。通过这些接口,lua虚拟机可以操作底层区块链上的数据结构。例如查询账户余额,进行账户转账,都需要通过这些c++编写的接口来完成。

3、c++底层区块链系统:

区块链底层负责处理上层应用的交易请求,将合约交易转交给lua虚拟机,与lua虚拟机交互完成智能合约交易,接收lua虚拟机反馈的合约执行结果。

4、合约部署执行web应用:

web应用为合约编写,部署,执行提供图形化的应用。将用户的合约交易提交给区块链底层,同时将底层合约执行的结果反馈给用户。

1、每个节点都包含一个经过剪裁定制的lua虚拟机,lua通过虚拟栈的方式与c++节点底层进行交互。

2、智能合约分为两种交易,一种是合约部署交易,该交易是将合约代码存储到区块链上,如果部署成功,则返回合约地址,如果失败,则返回具体的错误原因。另外一种是合约调用交易,该交易通过合约地址找到合约代码,并执行合约,如果执行成功,则返回合约调用结果,否则返回合约调用的错误原因。

3、首先节点接收上层应用发来的合约交易,检查合约代码中有无多个init函数,如果有,则返回错误(合约代码中只能包含一个init函数)。

4、节点将合约调用者或者部署者的账号余额传送给lua虚拟机,在部署合约或者执行合约过程中lua虚拟机需要根据合约代码编译后的操作码进行收费。

5、节点将合约代码和合约部署或调用时参数传递给lua虚拟机,lua虚拟机将合约代码进行编译,执行,在执行过程中按照代码操作码进行收费,如果合约部署者或者调用者余额不够合约执行或者部署费用,合约部署或者执行失败,lua虚拟机返回错误给节点。

6、当合约代码中需要操作区块链系统数据时,通过c++编写的lua接口操作底层系统数据,合约代码执行结束,如果成功,lua虚拟机返回合约执行结果,否否返回失败原因

7、节点接收lua虚拟机返回的合约执行结果,如果成功,合约部署交易则返回合约地址,合约调用交易则返回合约调用的结果。如果失败则返回具体错误信息。

8、将合约交易转发给验证节点进行验证。

现有的solidity合约执行方式如图2所示,lua合约执行方式如图3所示。有图2和图3对比可以明显本发明技术方案降低了使用复杂度。

实施例二:

如图4所示,一种智能合约部署装置,包括:

检查模块401:用于检查接收的合约交易中的合约代码是否正确;

余额传送模块402:用于将合约代码正确的合约交易的账号余额传送给虚拟机;

编译及执行模块403:用于将合约代码和合约相关参数传递给所述虚拟机,所述虚拟机将合约代码进行编译并执行,在执行过程中所述虚拟机按照代码操作码在所述账号余额中进行收费,所述代码操作码对所述虚拟机将合约代码进行编译得到的;

反馈模块404:用于接收所述虚拟机返回的合约执行结果,完成智能合约部署。

实施例三:

本发明实施例还提供了一种电子设备,该电子设备包括:

至少一个处理器;以及,

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有能被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行实施例一所述的方法。

根据本发明实施例的电子设备包括存储器和处理器。

该存储器用于存储计算机可读指令。具体地,存储器可以包括一个或多个计算机程序产品,该计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。该易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。该非易失性存储器例如可以包括只读存储器(rom)、硬盘、闪存等。

该处理器可以是中央处理单元(cpu)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元,并且可以控制电子设备中的其它组件以执行期望的功能。在本发明的一个实施例中,该处理器用于运行该存储器中存储的该计算机可读指令。

本领域技术人员应能理解,为了解决如何获得良好用户体验效果的技术问题,本实施例中也可以包括诸如通信总线、接口等公知的结构,这些公知的结构也应包含在本发明的保护范围之内。

有关本实施例的详细说明可以参考前述各实施例中的相应说明,在此不再赘述。

实施例四:

本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行实施例一所述的方法。

根据本发明实施例的计算机可读存储介质,其上存储有计算机可读指令。当该计算机可读指令由处理器运行时,执行前述的本发明各实施例一方法的全部或部分步骤。

上述计算机可读存储介质包括但不限于:光存储介质(例如:cd-rom和dvd)、磁光存储介质(例如:mo)、磁存储介质(例如:磁带或移动硬盘)、具有内置的可重写非易失性存储器的媒体(例如:存储卡)和具有内置rom的媒体(例如:rom盒)。

有关本实施例的详细说明可以参考前述各实施例中的相应说明,在此不再赘述。

以上结合具体实施例描述了本发明的基本原理,但是,需要指出的是,在本发明中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本发明的各个实施例必须具备的。另外,上述发明的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本发明为必须采用上述具体的细节来实现。

在本发明中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序,本发明中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。

另外,如在此使用的,在以“至少一个”开始的项的列举中使用的“或”指示分离的列举,以便例如“a、b或c的至少一个”的列举意味着a或b或c,或ab或ac或bc,或abc(即a和b和c)。此外,措辞“示例的”不意味着描述的例子是优选的或者比其他例子更好。

还需要指出的是,在本发明的系统和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本发明的等效方案。

可以不脱离由所附权利要求定义的教导的技术而进行对在此所述的技术的各种改变、替换和更改。此外,本发明的权利要求的范围不限于以上所述的处理、机器、制造、事件的组成、手段、方法和动作的具体方面。可以利用与在此所述的相应方面进行基本相同的功能或者实现基本相同的结果的当前存在的或者稍后要开发的处理、机器、制造、事件的组成、手段、方法或动作。因而,所附权利要求包括在其范围内的这样的处理、机器、制造、事件的组成、手段、方法或动作。

提供所发明的方面的以上描述以使本领域的任何技术人员能够做出或者使用本发明。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本发明的范围。因此,本发明不意图被限制到在此示出的方面,而是按照与在此发明的原理和新颖的特征一致的最宽范围。

为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本发明的实施例限制到在此发明的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1