一种执行智能合约的方法、区块链节点和存储介质技术

技术编号:26034704 阅读:25 留言:0更新日期:2020-10-23 21:12
本说明书提供一种执行智能合约的方法、区块链节点和存储介质。一种执行智能合约的方法实施例包括:区块链节点接收创建智能合约的请求,所述请求中包括所述智能合约的字节码;所述区块链节点完成所述智能合约的部署后,开始将所述智能合约的字节码通过JIT编译为机器码并存储;所述区块链节点执行部署的所述智能合约时,如果本地没有存储有所述智能合约的字节码对应的机器码,则对所述智能合约的字节码进行解释执行。通过上述本申请的实施例,所述区块链节点可以大幅提升执行智能合约的速度。

【技术实现步骤摘要】
一种执行智能合约的方法、区块链节点和存储介质
本说明书实施例属于区块链
,尤其涉及一种执行智能合约的方法、区块链节点和存储介质。
技术介绍
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链2.0时代中出现了智能合约,将区块链的应用范围提升到了一个新高度。有了智能合约,区块链能做不再是单一的转账交易,而是还可以调用一段代码,而这段代码可以由用户自定义。
技术实现思路
本说明书在于提供一种执行智能合约的方法、区块链节点和存储介质。本说明书实施例提供的一种执行智能合约的方法、区块链节点和存储介质,通过以下方式实现:一种执行智能合约的方法,包括:区块链节点接收创建智能合约的请求,所述请求中包括所述智能合约的字节码;所述区块链节点完成所述智能合约的部署后,开始将所述智能合约的字节码通过JIT编译为机器码并存储;所述区块链节点执行部署的所述智能合约时,如果本地没有存储有所述智能合约的字节码对应的机器码,则对所述智能合约的字节码进行解释执行。一种执行智能合约的方法,包括:区块链节点部署所述智能合约的字节码后,开始将所述智能合约的字节码通过JIT编译为机器码并存储;所述区块链节点执行部署的所述智能合约时,如果本地没有存储有所述智能合约的字节码对应的机器码,则对所述智能合约的字节码进行解释执行。一种执行智能合约的区块链节点,执行上述任一项所述的方法。一种执行智能合约的区块链节点,包括:处理器,存储器,存储有程序,其中在所述处理器执行所述程序时,执行上述任一项所述的方法。一种存储介质,用于存储程序,其中所述程序在被执行时进行上述任一项的操作。通过上述本申请的实施例,局部编译尚未完成的情况下,对所述智能合约的字节码进行解释执行,从而可以在局部编译的同时保证区块链业务请求的正常处理。附图说明为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1是一实施例中编译执行和解释执行的原理示意图;图2是一实施例中解释执行和JIT的原理示意图;图3为一个实施例的创建智能合约的图示过程;图4为一个实施例的调用智能合约的图示过程;图5为一个实施例中创建智能合约和调用智能合约的示意图;图6-1是一实施例中的执行智能合约的流程图;图6-2是另一实施例中的执行智能合约的流程图;图7是一实施例中的区块链节点的模块结构图;图8是一实施例中的创建智能合约和调用智能合约的示意图;图9为一实施例中的创建智能合约和调用智能合约过程中包含虚拟机执行过程的示意图。具体实施方式为了使本
的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。区块链1.0时代通常是指在2009年到2014年之间,以比特币为代表的区块链应用发展阶段,它们主要致力于解决货币和支付手段的去中心化问题。从2014年开始,开发者们越来越注重于解决比特币在技术和扩展性方面的不足。2013年底,VitalikButerin发布了以太坊白皮书《以太坊:下一代智能合约和去中心化应用平台》,将智能合约引入区块链,打开了区块链在货币领域以外的应用,从而开启了区块链2.0时代。智能合约是一种基于规定触发规则的,可自动执行的计算机合约,也可以看作是传统合约的数字版本。智能合约这一概念最早由跨领域法律学者、密码学研究工作者尼克·萨博(NickSzabo)在1994年提出。这项技术曾一度因为缺乏可编程数字系统和相关技术而没有被用于实际产业中,直到区块链技术和以太坊的出现为其提供了可靠的执行环境。由于区块链技术采用的块链式账本,产生的数据不可篡改或者删除,且整个账本将不断新增账本数据,从而保证了历史数据的可追溯;同时,去中心化的运行机制避免了中心化因素的影响。基于区块链技术的智能合约不仅可以发挥智能合约在成本、效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可篡改。智能合约本质上是一段可由计算机执行的程序。智能合约与现在广泛使用的计算机程序一样,可以通过高级语言(例如C语言、C++语言等)编写而成。由高级语言编写好的智能合约的程序代码,一般可以通过“编译器”转换为计算机的CPU可以识别和运行的“机器码”,进而可以由CPU执行这样的机器码(或者称为“微处理器指令”)。这种方式一般称为“编译执行”。编译执行一般不具有跨平台的可扩展性。由于存在不同厂商、不同品牌和不同代的CPU,而这些不同的CPU支持的指令集很多情况下是不同的,如x86指令集,ARM指令集等,且同一厂商同一品牌但不同代的CPU(如不同代的IntelCPU)支持的指令集也不完全相同,因此,用同样的高级语言编写的同样的程序代码,在不同CPU上被编译器转换出来的机器码可能不同。具体的,编译器在转换高级语言编写的程序代码到机器码的过程中,会结合具体的CPU指令集的特点(如向量指令集等)进行优化以提升程序执行的速度,而此类优化往往与具体的CPU硬件相关。这样,同样的机器码,一个在x86上可以运行,但另一个在ARM上就可能无法运行;甚至同样是x86平台,随着时间的推移,指令集也不断丰富和扩展,这就导致不同代的x86平台运行的机器码也有不同。而且,由于执行机器码需要由操作系统内核对CPU进行调度,因此即使是同样的硬件,在不同操作系统下支持运行的机器码也可能不同。不同于编译执行,还存在一种“解释执行”的程序运行方式。比如Java语言,将Java源代码通过Java的编译器编译成标准的字节码(bytecode),这里编译器不针对任何实际的硬件处理器的指令集,而是定义了一套抽象的标准指令集。编译成的标准字节码一般无法在硬件CPU上直接运行,因此引入了一个虚拟机,即JVM,JVM运行在特定的硬件处理器上,用以解释和执行编译后的标准字节码。JVM是JavaVirtualMachine(Java虚拟机)的缩写,是一种虚构出来的计算机,往往通过在实际的计算机上仿真模拟各种计算机功能来实现。JVM屏蔽了与具体的硬件平台、操作系统等相关的信息,使Java程序只需要是生成的可在Java虚拟机上运行的标准字节码,就可以在多种平台上不加修改地运行。Java语言的一个非常重要的特点就是与平台的无关性。而使用本文档来自技高网
...

【技术保护点】
1.一种执行智能合约的方法,包括:/n区块链节点接收创建智能合约的请求,所述请求中包括所述智能合约的字节码;/n所述区块链节点完成所述智能合约的部署后,开始将所述智能合约的字节码通过JIT编译为机器码并存储;/n所述区块链节点执行部署的所述智能合约时,如果本地没有存储有所述智能合约的字节码对应的机器码,则对所述智能合约的字节码进行解释执行。/n

【技术特征摘要】
1.一种执行智能合约的方法,包括:
区块链节点接收创建智能合约的请求,所述请求中包括所述智能合约的字节码;
所述区块链节点完成所述智能合约的部署后,开始将所述智能合约的字节码通过JIT编译为机器码并存储;
所述区块链节点执行部署的所述智能合约时,如果本地没有存储有所述智能合约的字节码对应的机器码,则对所述智能合约的字节码进行解释执行。


2.如权利要求1所述的方法,所述区块链节点完成所述智能合约的部署后,开始将所述智能合约的字节码通过JIT编译为机器码,包括:
所述区块链节点完成创建所述智能合约后开始对所述智能合约的字节码进行JIT编译;或,
所述区块链节点完成创建所述智能合约后,利用相对空闲的时间段对所述智能合约的字节码进行JIT编译;或,
所述区块链节点接收到调用创建的所述智能合约的交易请求后,对所述智能合约的字节码进行JIT编译。


3.如权利要求1所述的方法,所述将所述智能合约的字节码通过JIT编译为机器码并存储,包括:
对所述智能合约的字节码进行翻译和/或执行的过程中识别热点字节码进行编译并存储;
和/或,
对所述智能合约的字节码进行翻译和/或执行的过程中进行优化编译并存储。


4.如权利要求3所述的方法,所述识别热点字节码的粒度包括函数级别或代码块级别。


5.如权利要求1所述的方法,所述区块链节点执行部署的所述智能合约时,如果本地没有存储所述智能合约的机器码,对所述智能合约的字节码进行解释执行,包括:
所述区块链节点执行部署的所述智能合约时,如果本地没有存储所述智能合约的机器码,所述区块链节点还查询当前对所述智能合约的字节码的JIT编译情况,如果正处于JIT编译中,则对所述智能合约的字节码进行解释执行;
或,
所述区块链节点执行部署的所述智能合约时,如果本地没有存储所述智能合约的机器码,所述区块链节点还查询当前对所述智能合约的字节码的JIT编译情况,如果尚未开始JIT编译,则启动JIT编译,并对所述智能合约的字节码进行解释执行。


6.如权利要求1所述的方法,所述区块链节点对所述智能合约的字节码进行解释执行,包括:
所述区块链节点对所述智能合约中对应于所调用函数的字节码进行解释执行。


7.如权利要求1所述的方法,所述区块链节点执行部署的所述智能合约时,如果本地存储有所述智能合约的机器码,则执行所述机器码。


8.如权利要求7所述的方法,所述区块链节点执行所述机器码,包括:
所述区块链节点执行存储的所述智能合约中对应于所调用函数和/或代码块的机器码。


9.如权利要求1-8中任一项所述的方法,所述存储为缓存。


10.一种执行智能合约的方法,包括:
区块链节点部署所述智能合约的字节码后,开始将所述智能合约的字节码通过JIT编译为机器码并存储;
所述区块链节点执行部署的所述智能合约...

【专利技术属性】
技术研发人员:刘琦
申请(专利权)人:支付宝杭州信息技术有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1