CN112799674B - 区块链中智能合约的执行方法、装置及节点设备 - Google Patents
区块链中智能合约的执行方法、装置及节点设备 Download PDFInfo
- Publication number
- CN112799674B CN112799674B CN202110080216.3A CN202110080216A CN112799674B CN 112799674 B CN112799674 B CN 112799674B CN 202110080216 A CN202110080216 A CN 202110080216A CN 112799674 B CN112799674 B CN 112799674B
- Authority
- CN
- China
- Prior art keywords
- intelligent contract
- node
- contract
- target
- attribute information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 63
- 230000000875 corresponding effect Effects 0.000 claims description 35
- 238000012795 verification Methods 0.000 claims description 32
- 238000004590 computer program Methods 0.000 claims description 26
- 238000012545 processing Methods 0.000 claims description 16
- 230000003993 interaction Effects 0.000 claims description 8
- 230000002596 correlated effect Effects 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种区块链中智能合约的执行方法、装置及节点设备,其中方法包括:接收执行智能合约的执行请求;若目标节点的节点属性信息与智能合约的合约属性信息相匹配,则调用目标节点中部署的目标程序编译执行器执行智能合约并返回执行结果。采用本发明实施例可提高在区块链执行智能合约的便捷性以及降低了区块链实现的复杂性。
Description
技术领域
本申请涉及区块链技术领域,尤其涉及一种区块链中智能合约的执行方法、装置及节点设备。
背景技术
智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议,智能合约允许在没有第三方情况下进行可行交易。区块链是一种多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储、难以篡改、防止抵赖的记账技术。由于区块链技术的这些优势,使得基于区块链技术的智能合约不仅可以发挥智能合约在成本效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。
目前智能合约在区块链网络中的执行都需要依赖虚拟机,由虚拟机执行智能合约。但是这种智能合约的执行方法,要求区块链网络的节点中需要安装虚拟机,这样不仅消耗节点的存储空间消耗,而且在这种情况下想要实现区块链,就必须要实现虚拟机,增加了区块链实现难度。因此,在区块链技术领域中,如何有效地执行智能合约成为当今研究的热点问题。
发明内容
本发明实施例提供了一种区块链中智能合约的执行方法、装置及节点设备,通过节点中部署的目标程序编译执行器执行智能合约,无需在节点中安装虚拟机,节省了节点的存储空间,也降低了区块链实现的复杂度。
一方面,本发明实施例提供了一种区块链中智能合约的执行方法,所述区块链包括目标节点,该目标节点中部署有目标程序编译执行器,所述方法包括:
接收执行智能合约的执行请求;
若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则调用所述目标节点中部署的所述目标程序编译执行器执行所述智能合约并返回执行结果。
一方面,本发明实施例提供了一种区块链中智能合约的执行装置,所述区块链包括目标节点,所述目标节点中部署有目标程序编译执行器,所述执行装置运行有如下单元:
接收单元,用于接收执行智能合约的执行请求;
处理单元,用于若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则调用所述目标节点中部署的所述目标程序编译执行器执行所述智能合约并返回执行结果。
在一个实施例中,所述目标节点的节点属性信息包括所述目标节点所支持的编程语言相关信息和所述目标节点的硬件信息;所述智能合约的合约属性信息包括编写所述智能合约的编程语言相关信息和运行所述智能合约的硬件设备所需满足的第一要求;
所述目标节点所支持的编程语言相关信息包括所述目标节点所支持的目标编程语言,以及所述目标节点中部署的支持所述目标编程语言的目标程序编译执行器属性信息;所述智能合约的编程语言相关信息包括编程所述智能合约的第一编程语言和运行所述第一编程语言的程序编译执行器所需满足的第二要求;
所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配是指:所述目标节点的硬件信息满足所述第一要求,以及所述目标编程语言与所述第一编程语言相同,且所述目标程序编译器属性信息满足所述第二要求。
在一个实施例中,区块链中智能合约的执行装置还包括存储单元和通知单元;接收单元,还用于接收部署智能合约的部署请求;存储单元,用于若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则存储所述智能合约;通知单元,用于通知所述区块链中的其他节点所述目标节点已部署智能合约,以使其他节点基于所述目标节点的通知对所述智能合约部署进行共识验证,并在共识验证成功后将所述智能合约写入区块。
在一个实施例中,所述存储单元在若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则存储所述智能合约时,执行如下步骤:
检测所述智能合约是否满足合约编写要求;如果所述智能合约满足所述合约编写要求,则确定所述智能合约的编程语言所属语言类型;基于所述智能合约的编程语言所属语言类型对所述智能合约进行存储。
在一个实施例中,所述存储单元在基于所述智能合约的编程语言所属语言类型对所述智能合约进行存储时,执行如下步骤:
如果所述智能合约的编程语言所属语言类型为编译型语言,则调用所述目标程序编译执行器对所述智能合约对应的源代码进行编译处理得到编译结果,并将所述编译结果和所述智能合约对应的源代码进行关联存储;如果所述智能合约的编程语言所属语言类型为解释型语言,则存储所述智能合约对应的源代码。
在一个实施例中,所述处理单元在调用所述目标程序编译执行器执行所述智能合约时,执行如下步骤:
确定所述智能合约的编程语言所属语言类型;若所述智能合约的编程语言所属语言类型为编译型语言,则从存储中加载所述智能合约对应的源代码的编译结果,并调用所述目标程序编译执行器执行所述编译结果;若所述智能合约的编程语言所属语言类型为解释型语言,则从存储中加载所述智能合约对应的源代码,并调用所述目标程序编译执行器对所述源代码进行编译及执行。
在一个实施例中,所述处理单元,还用于若所述目标节点的节点属性信息与所述智能合约的执行条件不匹配,则将所述执行请求广播至所述至少一个节点中的其他节点,以指示所述其他节点执行所述智能合约;接收单元,还用于接收所述其他节点执行所述智能合约的执行结果,并返回所述执行结果。
在一个实施例中,所述处理单元在调用所述目标程序编译执行器执行所述智能合约,并返回执行结果时,执行如下步骤:
调用所述目标程序编译执行器执行所述智能合约得到执行结果,并将所述执行结果广播至所述区块链中的其他节点,以指示若所述其他节点的节点属性与所述智能合约的合约属性信息相匹配,则所述其他节点对所述执行结果进行共识验证;若所述其他节点对所述执行结果的共识验证通过,则返回所述执行结果。
一方面,本发明实施例提供了一种节点设备,其特征在于,包括:处理器,适于实现一条或多条计算机程序;以及计算机存储介质,所述计算机存储介质存储有一条或多条计算机程序,所述一条或多条计算机程序适于由所述处理器加载并执行:
接收执行智能合约的执行请求;若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则调用所述目标节点中部署的所述目标程序编译执行器执行所述智能合约并返回执行结果。
一方面,本发明实施例提供了一种计算机存储介质,其特征在于,所述计算机存储介质中存储有计算机程序,所述计算机程序被处理器执行时,用于执行如下步骤:
接收执行智能合约的执行请求;若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则调用所述目标节点中部署的所述目标程序编译执行器执行所述智能合约并返回执行结果。
一方面,本发明实施例提供了一种计算机程序产品或计算机程序,所述计算机程序产品包括计算机程序,所述计算机程序存储在计算机存储介质中;节点设备的处理器从所述计算机存储介质中读取所述计算机程序,所述处理器执行所述计算机程序,使得节点设备执行:
接收执行智能合约的执行请求;若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则调用所述目标节点中部署的所述目标程序编译执行器执行所述智能合约并返回执行结果。
本发明实施例中,当目标节点接收到执行智能合约的执行请求时,检测目标节点的节点属性信息与智能合约的合约属性信息是否匹配,如果匹配,则调用目标节点中部署的目标程序编译执行器执行智能合约并返回执行结果。与现有技术中智能合约的执行方法相比,本发明实施例智能合约的执行无需在目标节点中安装虚拟机,而是基于目标节点中已安装的目标程序编译执行器执行的,因此,本发明实施例减少了目标节点中的存储控件消耗,并且减少了区块链实现的复杂度。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本发明实施例提供的一种区块链网络的结构示意图;
图1b是本发明实施例提供的一种区块链的结构图的示意图;
图1c是现有技术提供的一种区块链中节点的结构示意图;
图1d是本发明实施例提供的一种区块链中节点的结构示意图;
图2是本发明实施例提供的一种区块链中智能合约的执行方法流程示意图;
图3是本发明实施例提供的另一种区块链中智能合约的执行方法的流程示意图;
图4是本发明实施例提供的一种区块链中智能合约的部署流程图;
图5是本发明实施例提供的一种区块链中智能合约执行的流程图;
图6是本发明实施例提供的一种区块链中智能合约的执行装置的结构示意图;
图7是本发明实施例提供的一种节点设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
在描述本发明实施例的区块链中智能合约的执行方法之前,通过下面内容对区块链进行简单的介绍,并介绍区块链中智能合约的执行方法的相关技术,然后由此引出本发明实施例提出的智能合约的执行方法以及基于该执行方法,对区块链中节点的结构的改进。
区块链是一种多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储、难以篡改、防止抵赖的记账技术,也就是分布式账本技术。基于区块链技术的区块链网络可以理解成一个数据共享系统,该数据共享系统用于进行节点与节点之间的数据共享。
参见图1a,为本发明实施例提供的一种区块链网络的结构示意图。图1a所示的区块链网络中,100表示区块链网络,区块链网络100中可包括多个节点101,多个节点101可以是接入区块链网络100中的终端设备或者服务器。其中,所述终端可以是智能收集、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、智能车载等。所述服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。
在一个实施例中,区块链网络100中每个节点101在进行正常工作时可以接收输入到区块链网络100中的信息,并基于接收到的输入信息维护区块链网络内的共享数据。为了保证区块链网络内的信息互通,区块链网络中的每个节点101之间可以存在信息连接,节点中间可以通过上述信息连接进行信息传输。例如,当区块链网络中的任意节点101接收到输入信息时,区块链网络中的其他节点101便根据共识算法获取该输入信息,将该输入信息作为共享数据中的数据进行存储,使得区块链网络中全部节点101上存储的数据均一致。
对于区块链网络中的每个节点101,均具有与其对应的节点标识,而且区块链网络中的每个节点101均可以存储有区块链网络中其他节点101的节点标识,以便后续根据其他节点101中可维护一个如下表所述的节点标识列表,将节点名称和节点标识对应存储至节点标识列表中。其中,节点标识可以为IP(Internet Protocol,网络之间互联的协议)地址以及其他任一种能够用于标识该节点的信息,表1中仅以IP地址为例进行说明。
表1
节点名称 | 节点标识 |
节点1 | 117.114.151.174 |
节点2 | 117.116.189.145 |
… | … |
节点N | 119.123.789.258 |
在一个实施例中,区块链网络中的每个节点中均存储一条相同的区块链。区块链由多个区块组成,参见图1b为本发明实施例提供的一种区块链的结构示意图。图1b所示的区块链中可以包括多个区块比如区块1、区块2以及区块3.每个区块中包括本区块的哈希值,以及前一个区块的哈希值,各个区块通过哈希值进行连接形成区块链。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
基于上述描述可知,区块链中存储的数据具有不可篡改性,区块链网络的这一优点为智能合约的提供了良好的运行环境。
本发明实施例提出了一种区块链中智能合约的执行方案,区块链中的任一节点无需安装虚拟机,根据该任一节点中部署的程序编译执行器比如C++、Java、Python和Go等,以及任一节点的硬件信息比如所支持的操作系统、中央处理器(Central Processing Unit,CPU)属性为该任一节点设置节点属性信息;当需要执行智能合约时,判断任一节点的节点属性信息是否符合智能合约的执行,如果符合,则调用任一节点中部署的程序编译执行器来执行智能合约,并将执行结果写回到区块链中。与该任一节点具有相同节点属性的其他节点可以采用上述相同方法执行智能合约,最终达到共识。如此一来,只要区块链中节点的数量和种类足够多,就可以处理多种编程语言编写的智能合约。不仅省去了安装虚拟机的存储空间消耗,也丰富了智能合约的编写语言种类。
基于上述区块链中智能合约的执行方案,本发明实施例提供了一种新的区块链中节点的结构,参见图1c,为本发明实施例提供的一种节点的结构示意图。图1c所示的节点的结构中可以包括本机编译执行程序交互模块,该本机编译执行程序交互模块可以与节点中安装的程序编译执行器进行交互。当节点接收到智能合约的执行请求时,该节点可以通过本机编译执行程序交互调用该节点中程序编译执行器,以通过程序编译执行器执行所述智能合约。
由前述可知,现有技术中区块链中智能合约的执行需要依赖虚拟机,也就是说节点中需要安装虚拟机,比如,在以太坊区块链中运行智能合约的虚拟机为EVM。参见图1d,为本发明实施例中现有技术的节点的结构示意图,由图1d可见,如果任一节点想要运行智能合约,该任一节点中需要安装有虚拟机模块,当检测到智能合约的执行请求时,调用虚拟机执行该智能合约。任一节点中都安装有虚拟机,会消耗节点的存储空间,另外,区块链网络中想要运行智能合约,首先需要实现虚拟机,这样一来,增加了区块链网络的实现难度。
本发明实施例提供的节点的结构,与现有技术中节点的结构相比,任一节点中的虚拟机模块被替换为本机编译执行程序交互模块,该本机编译执行程序交互模块可以与该与节点本机中安装的程序编译执行器进行交互。通过本机中的程序编译执行器执行智能合约,节省了节点的存储空间,并且,区块链网络中想要运行智能合约,也无需实现虚拟机,从而降低了区块链网络的实现难度。
从图1c中可见,区块链网络中的节点中除了包括本机编译执行程序交互模块,还可以包括账本、共识、交易池、存储、对等网络P2P、远程过程调用协议(Remote ProcedureCall Protocol,RPC)接口以及公共库等模块。其中,交易池用于存储该节点接收到的还未被共识验证的交易;账本模块可以看成是前述的区块链,是用于存储数据的;共识模块用于对打包的区块进行共识验证,并在验证通过后将区块连接到区块链上。对等网络用于实现节点和节点之间的通信,RPC接口用于实现远程过程调用。
基于上述的区块链中智能合约的执行方案和节点的结构,本发明实施例提供了一种区块链中智能合约的执行方法。参见图2,为本发明实施例提供的一种区块链中智能合约的执行方法的流程示意图,图2所示的区块链中智能合约的执行方法可由目标节点执行,图2所示的执行方法可包括如下步骤:
步骤S201、接收智能合约的执行请求。
在一个实施例中,智能合约的执行请求用于指示目标节点执行智能合约,目标节点可以是指区块链包括的多个节点中任意一个,该目标节点本地安装了目标程序编译执行器,目标程序编译执行器用于执行使用与其对应的编程语言编写的程序。例如,目标程序编译执行器对应的编程语言为C,那么目标程序编译执行器用于执行使用C编写的程序;再如,目标程序编译执行器对应的编程语言为Java,那么目标程序编译执行器用于执行使用java编写的程序。
在一个实施例中,由于区块链中各个节点本身支持的程序编译执行器有限,为了调用各个节点中已安装的程序编译执行器执行智能合约,首先需要根据每个节点所支持的编程语言和每个节点的硬件信息为相应节点配置节点属性信息,以及在编写智能合约时,设置智能合约的合约属性信息,这样后面当任一节点接收到智能合约的执行请求时,确定节点属性信息与合约属性信息是否匹配,若匹配则调用节点中的程序编译执行器执行智能合约。
下面以区块链中的目标节点为例,分别介绍如何为任一节点设置节点属性信息,以及如何在编写智能合约时,设置智能合约的合约属性信息。
作为一种可选的实施方式,目标节点的节点属性信息可以包括目标节点所支持的编程语言相关信息和目标节点的硬件信息。其中,目标节点所支持的编程语言相关信息包括目标节点所支持的目标编程语言,以及目标节点中部署的支持所述目标编程语言的目标程序编译执行器属性信息,所述目标程序编译执行器属性信息包括目标程序编译执行器的版本和路径信息。例如,目标节点所支持的目标编程语言为Java,运行Java的目标程序编译执行器的版本为1.8.0,路径为XXXX;再如,目标节点所支持的目标编程语言为Python,运行Python的目标程序编译执行器的版本为3.7.1,路径为XXXX。
可选的,目标节点的硬件信息可以包括目标节点中运行的操作系统,以及目标节点中CPU类型,例如,目标节点中运行的操作系统为windows,CPU类型为x86-64。
在一个实施例中,可以通过下面代码表示为目标节点设置的节点属性信息:
上述描述了如何为目标节点设置节点属性信息,下面介绍一下如何在编写智能合约时为智能合约设置合约属性信息,以及合约属性信息都包括哪些内容。具体实现中,区块链可以在智能合约编写时设置一些规范要求,比如指定运行智能合约的程序编译执行器的版本,指定运行智能合约的节点中的硬件要求,比如只支持在CPU为x86系统下运行,不支持ARM结构等等,然后将这些规范要求整理成智能合约的合约属性信息。
在一个实施例中,智能合约的合约属性信息可以包括:所述智能合约的合约属性信息包括编写所述智能合约的编程语言相关信息和运行所述智能合约的节点的硬件信息所需满足的第一要求。运行所述智能合约的节点的硬件信息所需满足的第一要求可以理解为如果一个节点想要运行智能合约,那么该节点的硬件信息需要符合第一要求,该第一要求中可以规定了操作系统类型以及CPU类型,比如第一要求指示操作系统类型为window,CPU类型为x86。
可选的,所述智能合约的编程语言相关信息包括编程所述智能合约的第一编程语言和支持所述第一编程语言的程序编译执行器所需满足的第二要求。支持所述第一编程语言的程序编译执行器所需满足的第二要求中可以规定了程序编译执行器版本号要求,比如第一编程语言为Java,运行Java的程序编译执行器为jdk,第二要求中规定了jdk的版本大于1.4.0。
综合上述描述可知,目标节点的节点属性信息与智能合约的合约属性信息相匹配是指:目标节点的硬件信息满足第一要求,以及目标编程语言与第一编程语言相同,且目标程序编译器属性信息满足第二要求。
步骤S202、若目标节点的节点属性信息与智能合约的合约属性信息相匹配,则调用目标节点中部署的目标程序编译执行器执行智能合约并返回执行结果。
应当理解的,如果目标节点的节点属性信息与智能合约的合约属性信息相匹配,则表明目标节点中安装的目标程序编译执行器可以用于执行智能合约,那么调用目标节点中部署的目标程序编译执行器执行智能合约并返回执行结果。
在一个实施例中,调用目标程序编译执行器执行智能合约,并返回执行结果之前,需要将执行结果广播给区块链网络中其他节点,如果其他节点的节点属性信息与目标节点的节点属性信息相匹配,则其他节点会对执行结果进行共识验证,验证通过后再向用户返回执行结果。具体实现中,调用目标程序编译执行器执行智能合约得到执行结果,并将执行结果广播至区块链网络中的其他节点,以指示若其他节点的节点属性信息与智能合约的合约属性信息相匹配,则其他节点对执行节点进行共识验证;若其他节点对执行结果的共识验证通过后,则返回执行结果。
可见,本发明实施例中由于不是每个节点都能用于执行智能合约,那么对智能合约的执行结果的共识验证流程也和现有技术的验证流程不同。现有技术中一般几个节点组成一个共识治理委员会,治理委员会的成员可以对任意一个业务请求的执行结果进行共识验证。
区别于现有技术中通过共识委员会指定的节点进行共识验证,本发明实施例中需要选取节点属性信息与智能合约的合约属性信息相匹配的节点作为来对目标节点的执行结果进行共识验证。
本发明实施例中,当目标节点接收到执行智能合约的执行请求时,检测目标节点的节点属性信息与智能合约的合约属性信息是否匹配,如果匹配,则调用目标节点中部署的目标程序编译执行器执行智能合约并返回执行结果。与现有技术中智能合约的执行方法相比,本发明实施例智能合约的执行无需在目标节点中安装虚拟机,而是基于目标节点中已安装的目标程序编译执行器执行的,因此,本发明实施例减少了目标节点中的存储控件消耗,并且减少了区块链实现的复杂度。
基于上述的区块链中智能合约的执行方法,本发明实施例提供了另一种区块链中智能合约的执行方法。参见图3,为本发明实施例提供的另一种区块链中智能合约的执行方法的流程示意图。与图2所示实施例中不同的是,图3所示的执行方法中通过步骤S301和步骤S302介绍如何在区块链中部署智能合约,然后再通过步骤S303和步骤S304介绍如何调用目标节点中部署的目标程序编译执行器,来执行智能合约。图3所示的执行方法可由区块链中的目标节点执行,目标节点是区块链包括的多个节点中任意一个,且目标节点中部署有目标程序编译执行器。图3所示的区块链中智能合约的执行方法可包括如下步骤:
步骤S301、接收部署智能合约的部署请求。
在一个实施例中,部署请求用于指示目标节点部署智能合约,目标节点部署智能合约的大致流程是:目标节点将智能合约存储在本地,然后通知区块链中其他节点目标节点已经部署了智能合约,以使其他节点基于该通知对智能合约的部署进行共识验证,并在共识验证成功后确定智能合约部署成功。
可选的,目标节点在将智能合约存储在本地之前,会先检测目标节点的节点属性信息与智能合约的合约属性信息是否相匹配,若匹配,则通过步骤S302存储所述智能合约;若目标节点的节点属性信息与智能合约的合约属性信息不匹配,则目标节点可以将该部署请求广播给区块链中的其他节点,以使其他节点在区块链中部署智能合约。
步骤S302、若目标节点的节点属性信息与智能合约的合约属性信息相匹配,则存储智能合约,并通知区块链中的其他节点目标节点已存储智能合约,以使其他节点基于该通知对智能合约部署进行共识验证,并在共识验证成功后确定智能合约的部署成功。
在一个实施例中,为了保证区块链网络中部署的智能合约的准确性,目标节点检测出目标节点的节点属性信息与智能合约的合约属性信息相匹配之后,存储智能合约之前,还需要检测智能合约是否满足编写要求,如果智能合约不满足编写要求,则可以不存储智能合约,并可以输出智能合约不满足编写要求的提示信息,以提示智能合约编写者重新智能合约;如果智能合约满足编写要求,则存储智能合约。其中,编写要求中可以规定了智能合约的编写需要满足的一些规则,比如智能合约中不能出现不确定的计算如浮点数、智能合约的编程语言书写是否规范等等。
需要说明的是,由于现有技术中区块链中智能合约的运行都是依靠虚拟机执行的,一种虚拟机仅支持一种编程语言,比如在以太坊区块链网络中,虚拟机为EVM,所支持的编程语言为Solidity;再如IOST是v8绑定的JS智能合约虚拟机,所支持的编程语言为JavaScript。这就导致了编写智能合约的编程语言比较单一,另外,由于虚拟机的特殊性,采用以上编程语言编写得到智能合约难以进行调试和测试。而本发明实施例中,智能合约的执行是依赖于节点中已安装的程序编译执行器,由于程序编译执行器的种类众多,那么编写智能合约的编程语言也比较丰富,并且采用本发明实施例的方法编写的智能合约可以通过安装与编写智能合约的编程语言相匹配的程序编译执行器,便可以实现对智能合约的调试和测试。
在检测出智能合约的满足编写要求后,目标节点可以将智能合约进行存储。应当理解的,目前的编程语言可以分为解释型语言和编译型语言,对于采用解释型语言和编译型语言编写的智能合约存储方式是不相同的,因此,目标节点在对智能合约进行存储时,可以执行如下步骤:确定所述智能合约的编程语言所属语言类型;基于所述智能合约的编程语言所属语言类型对所述智能合约进行存储。
在一个实施例中,基于所述智能合约的编程语言所属语言类型对所述智能合约进行存储,包括:如果所述智能合约的编程语言所属语言类型为编译型语言,则调用所述目标程序编译执行器对所述智能合约对应的源代码进行编译处理得到编译结果,并将所述编译结果和所述智能合约对应的源代码进行关联存储;如果所述智能合约的编程语言所属语言类型为解释型语言,则存储所述智能合约对应的源代码。
简单来说,编译型语言编写的程序在被执行之前需要一个编译过程,编译成为机器语言,后面需要运行该类编程语言编写的程序,无需重新编译,直接运行编译得到的编译结果即可,常见的属于编译型语言的编程语言可以包括C,C++以及objective等等;解释型语言编写的程序不需要预先编译,在运行时进行编译,常见的属于解释型语言的编程语言可以包括Python。
由此可见,如果智能合约的编程语言所属语言类型为编译型语言,则需要对智能合约的源代码进行编译,将编译结果进行存储;如果智能合约的编程语言所属编程语言类型为解释型语言,则可以直接存储智能合约对应的源代码。
在一个实施例中,目标节点成功存储了智能合约后,可以通知区块链网络中其他节点目标节点中已存储了智能合约,其他节点根据该通知对智能合约的部署进行共识验证,如果共识验证通过,则确定智能合约部署成功。可选的,智能合约部署成功后可以存储区块链中。
基于步骤S301和步骤S302的描述,本发明实施例中在区块链网络中部署智能合约的流程可如图4所示,概括为:目标节点接收部署智能合约的部署请求,提交到区块链网络中的任意请求都可以看做是一个交易,也就是说目标节点接收部署智能合约的部署交易;接收到的部署交易后,目标节点检测目标节点的节点属性信息是否支持智能合约的合约属性信息;如果不支持,则将该部署交易广播给其他节点,以指示其他节点进行智能合约的部署;如果支持,则进一步检查智能合约的是否满足编写规范;如果满足,则判断智能合约所属语言类型,若智能合约为编译型语言,则调用目标节点中目标程序编译执行器对智能合约的源代码进行编译,存储编译结果,可选的,该编译结果可以是机器能够识别的字节码;若智能合约为解释型语言,则存储智能合约对应的源代码。
总结来说,采用本发明实施例的方法部署智能合约,可以丰富编写智能合约的编程语言类型,同时也使得智能合约在部署到区块链网络之前被调试和测试,保证了智能合约的准确性。
步骤S303、接收智能合约的执行请求。
在一个实施例中,步骤S303中包括的一些可行实施方式可参见图2实施例中相关步骤的描述,在此不再赘述。
步骤S304、调用目标节点中部署的目标程序编译执行器执行智能合约并返回执行结果。
由前述可知,目标节点是根据编写智能合约的编程语言所属语言类型对智能合约进行存储的,那么在调用目标节点中的目标程序编译执行器执行智能合约时,也需要考虑智能合约的编程语言所属语言类型。
具体地,调用目标节点中部署的目标程序编译执行器执行智能合约,包括:确定所述智能合约的编程语言所属语言类型;若所述智能合约的编程语言所属语言类型为编译型语言,则从存储中加载所述智能合约对应的源代码的编译结果,并调用所述目标程序编译执行器执行所述编译结果;若所述智能合约的编程语言所属语言类型为解释型语言,则从存储中加载所述智能合约对应的源代码,并调用所述目标程序编译执行器对所述源代码进行编译及执行。
基于步骤S303、步骤S304以及图2实施例中描述,本发明实施例中目标节点对智能合约的执行请求的处理过程可通过图5的流程图所示,可以概括为:目标节点接收到执行智能合约的执行请求(也可以成为一个执行交易);目标节点检测目标节点的节点属性信息和智能合约的合约属性信息是否匹配;如果匹配,则确定智能合约的编程语言所属语言类型,若是编译型语言,则从存储中获取编译结果(由前述可知,该编译结果可以是字节码),并调用目标节点中安装的目标程序编译执行器执行编译结果,得到执行结果;若是解释型语言,则从存储中加载智能合约对应的源代码,并调用目标节点中安装的目标程序编译执行器执行编译并执行该源代码,得到执行结果。
如果目标节点检测到目标节点的节点属性信息和智能合约的合约属性信息不匹配,则可以将执行请求广播给区块链网络中的其他节点,以使其他节点代用其他节点中的程序编译执行器执行智能合约得到执行结果;目标节点接收节点执行智能合约得到的执行结果。
在得到对智能合约进行执行的执行结果后,目标节点可以将执行结果返回给发送执行请求的合约调用方。
本发明实施例中,在目标节点的节点属性信息和智能合约的合约属性信息相匹配的情况下,目标节点部署智能合约。由前述可知,目标节点的节点属性信息包括目标节点所支持的编程语言相关信息,比如目标节点所支持的目标编程语言以及运行目标编程语言的目标程序编译执行器,节点属性信息和合约属性信息相匹配可以包括目标节点所支持的目标编程语言包括编写智能合约的第一编程语言。也就说明了,本发明实施例中智能合约的第一编程语言可以是多样的,不仅仅局限于某个节点中所支持的编程语言,本发明实施例中丰富了智能合约的编程语言。
在智能合约部署完成后,如果接收到执行智能合约的执行请求,可以调用目标节点中安装的目标程序编译执行器执行智能合约并返回执行结果。与现有技术中智能合约的执行方法相比,本发明实施例智能合约的执行无需在目标节点中安装虚拟机,而是基于目标节点中已安装的目标程序编译执行器执行的,因此,本发明实施例减少了目标节点中的存储控件消耗,并且减少了区块链实现的复杂度。
基于上述的区块链中智能合约的执行方法实施例,本发明实施例提供了一种区块链中智能合约的执行装置。参见图6,为本发明实施例提供的一种区块链中智能合约的执行装置的结构示意图,所述区块链包括目标节点,所述目标节点中部署有目标程序编译执行器,图6所示的执行装置可运行如下单元:
接收单元601,用于接收执行智能合约的执行请求;
处理单元602,用于若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则调用所述目标节点中部署的所述目标程序编译执行器执行所述智能合约并返回执行结果。
在一个实施例中,目标节点的节点属性信息包括所述目标节点所支持的编程语言相关信息和所述目标节点的硬件信息;所述智能合约的合约属性信息包括编写所述智能合约的编程语言相关信息和运行所述智能合约的节点的硬件信息所需满足的第一要求;
所述目标节点所支持的编程语言相关信息包括所述目标节点所支持的目标编程语言,以及所述目标节点中部署的支持所述目标编程语言的目标程序编译执行器属性信息;所述智能合约的编程语言相关信息包括编程所述智能合约的第一编程语言和运行所述第一编程语言的程序编译执行器所需满足的第二要求;
所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配是指:所述目标节点的硬件信息满足所述第一要求,以及所述目标编程语言包括所述第一编程语言,且所述目标程序编译器属性信息满足所述第二要求。
在一个实施例中,所述执行装置还包括存储单元603和通知单元604;所述接收单元601,还用于接收部署智能合约的部署请求;所述存储单元603,用于若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则存储所述智能合约;所述通知单元604,用于通知所述区块链中的其他节点所述目标节点已存储智能合约,以使所述其他节点基于所述通知对所述智能合约部署进行共识验证,并在共识验证成功后确定所述智能合约部署成功。
在一个实施例中,所述存储单元603在若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则存储所述智能合约时,执行如下步骤:
检测所述智能合约是否满足合约编写要求;如果所述智能合约满足所述合约编写要求,则确定所述智能合约的编程语言所属语言类型;基于所述智能合约的编程语言所属语言类型对所述智能合约进行存储。
在一个实施例中,所述存储单元603在基于所述智能合约的编程语言所属语言类型对所述智能合约进行存储时,执行如下步骤:
如果所述智能合约的编程语言所属语言类型为编译型语言,则调用所述目标程序编译执行器对所述智能合约对应的源代码进行编译处理得到编译结果,并将所述编译结果和所述智能合约对应的源代码进行关联存储;如果所述智能合约的编程语言所属语言类型为解释型语言,则存储所述智能合约对应的源代码。
在一个实施例中,所述处理单元602在调用所述目标程序编译执行器执行所述智能合约时,执行如下步骤:
确定所述智能合约的编程语言所属语言类型;若所述智能合约的编程语言所属语言类型为编译型语言,则从存储中加载所述智能合约对应的源代码的编译结果,并调用所述目标程序编译执行器执行所述编译结果;若所述智能合约的编程语言所属语言类型为解释型语言,则从存储中加载所述智能合约对应的源代码,并调用所述目标程序编译执行器对所述源代码进行编译及执行。
在一个实施例中,所述通知单元604,还用于若所述目标节点的节点属性信息与所述智能合约的执行条件不匹配,则将所述执行请求广播至所述至少一个节点中的其他节点,以指示所述其他节点执行所述智能合约;接收所述其他节点执行所述智能合约的执行结果,并返回所述执行结果。
在一个实施例中,所述处理单元602在调用所述目标程序编译执行器执行所述智能合约,并返回执行结果时,执行如下步骤:调用所述目标程序编译执行器执行所述智能合约得到执行结果,并将所述执行结果广播至所述区块链中的其他节点,以指示若所述其他节点的节点属性信息与所述智能合约的合约属性信息相匹配,则所述其他节点对所述执行结果进行共识验证;若所述其他节点对所述执行结果的共识验证通过,则返回所述执行结果。
根据本发明的一个实施例,图2和图3所示的区块链中智能合约的执行方法所涉及各个步骤可以是由图6所示的区块链中智能合约的执行装置中的各个单元来执行的。例如,图2所述的步骤S201可由图6所示的区块链中智能合约的执行装置中的接收单元601来执行,步骤S202可由图6所示的区块链中智能合约的执行装置中处理单元602来执行;再如,图3所示的步骤S401和步骤S403均可由图6所示的区块链中智能合约的执行装置中的接收单元601来执行;步骤S402可由图6所示的区块链中智能合约的执行装置中存储单元603和通知单元604来执行,步骤S404可由图6所示的区块链中智能合约的执行装置中处理单元602来执行。
根据本发明的另一个实施例,图6所示的区块链中智能合约的执行装置中的各个单元可以分别或全部合并为一个或若干个另外的单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本发明的实施例的技术效果的实现。上述单元是基于逻辑功能划分的,在实际应用中,一个单元的功能也可以由多个单元来实现,或者多个单元的功能由一个单元实现。在本发明的其它实施例中,基于信息共享装置也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由多个单元协作实现。
根据本发明的另一个实施例,可以通过在包括中央处理单元(CPU)、随机存取存储介质(RAM)、只读存储介质(ROM)等处理元件和存储元件的例如计算机的通用计算设备上运行能够执行如图2和图3所示的相应方法所涉及的各步骤的计算机程序(包括程序代码),来构造如图6中所示的区块链中智能合约的执行装置,以及来实现本发明实施例区块链中智能合约的执行方法。所述计算机程序可以记载于例如计算机可读存储介质上,并通过计算机可读存储介质装载于上述计算设备中,并在其中运行。
本发明实施例中,当目标节点接收到执行智能合约的执行请求时,检测目标节点的节点属性信息与智能合约的合约属性信息是否匹配,如果匹配,则调用目标节点中部署的目标程序编译执行器执行智能合约并返回执行结果。与现有技术中智能合约的执行方法相比,本发明实施例智能合约的执行无需在目标节点中安装虚拟机,而是基于目标节点中已安装的目标程序编译执行器执行的,因此,本发明实施例减少了目标节点中的存储控件消耗,并且减少了区块链实现的复杂度。
基于上述的方法实施例以及装置实施例,本发明实施例还提供了一种节点设备。参见图7,为本发明实施例提供的一种节点设备的结构示意图。图7所示的节点设备可至少包括处理器701、输入接口702、输出接口703以及计算机存储介质704。其中,处理器701、输入接口702、输出接口703以及计算机存储介质704可通过总线或其他方式连接。
计算机存储介质704可以存储在节点设备的存储器中,所述计算机存储介质704用于存储计算机程序,所述处理器801用于执行所述计算机存储介质704存储的计算机程序。处理器701(或称CPU(Central Processing Unit,中央处理器))是节点设备的计算核心以及控制核心,其适于实现一条或多条计算机程序,具体适于加载并执行:
接收执行智能合约的执行请求;若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则调用所述目标节点中部署的所述目标程序编译执行器执行所述智能合约并返回执行结果。
本发明实施例还提供了一种计算机存储介质(Memory),所述计算机存储介质是节点设备中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机存储介质既可以包括节点设备的内置存储介质,当然也可以包括节点设备所支持的扩展存储介质。计算机存储介质提供存储空间,该存储空间存储了节点设备的操作系统。并且,在该存储空间中还存放了适于被处理器701加载并执行的一条或多条的计算机程序。需要说明的是,此处的计算机存储介质可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器;可选的还可以是至少一个位于远离前述处理器的计算机存储介质。
在一个实施例中,所述计算机存储介质可由处理器701加载并执行计算机存储介质中存放的一条或多条计算机程序,以实现上述图2和图3所示的区块链中智能合约的执行方法的相应步骤。具体实现中,计算机存储介质中的一条或多条计算机程序由处理器701加载并执行如下步骤:
接收执行智能合约的执行请求;若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则调用所述目标节点中部署的所述目标程序编译执行器执行所述智能合约并返回执行结果。
在一个实施例中,所述目标节点的节点属性信息包括所述目标节点所支持的编程语言相关信息和所述目标节点的硬件信息;所述智能合约的合约属性信息包括编写所述智能合约的编程语言相关信息和运行所述智能合约的节点的硬件信息所需满足的第一要求;
所述目标节点所支持的编程语言相关信息包括所述目标节点所支持的目标编程语言,以及所述目标节点中部署的支持所述目标编程语言的目标程序编译执行器属性信息;所述智能合约的编程语言相关信息包括编程所述智能合约的第一编程语言和运行所述第一编程语言的程序编译执行器所需满足的第二要求;
所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配是指:所述目标节点的硬件信息满足所述第一要求,以及所述目标编程语言包括所述第一编程语言,且所述目标程序编译器属性信息满足所述第二要求。
在一个实施例中,在接收执行智能合约的执行请求之前,所述处理器701还用于执行:接收部署智能合约的部署请求;若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则存储所述智能合约,并通知所述区块链中的其他节点所述目标节点已存储智能合约,以使所述其他节点基于所述通知对所述智能合约部署进行共识验证,并在共识验证成功后确定所述智能合约部署成功。
在一个实施例中,所述处理器701在所述若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则存储所述智能合约时,执行如下步骤:检测所述智能合约是否满足合约编写要求;如果所述智能合约满足所述合约编写要求,则确定所述智能合约的编程语言所属语言类型;基于所述智能合约的编程语言所属语言类型对所述智能合约进行存储。
在一个实施例中,所述处理器701在所述基于所述智能合约的编程语言所属语言类型对所述智能合约进行存储时,执行如下步骤:
如果所述智能合约的编程语言所属语言类型为编译型语言,则调用所述目标程序编译执行器对所述智能合约对应的源代码进行编译处理得到编译结果,并将所述编译结果和所述智能合约对应的源代码进行关联存储;如果所述智能合约的编程语言所属语言类型为解释型语言,则存储所述智能合约对应的源代码。
在一个实施例中,所述处理器701在调用所述目标程序编译执行器执行所述智能合约时,执行如下步骤:确定所述智能合约的编程语言所属语言类型;若所述智能合约的编程语言所属语言类型为编译型语言,则从存储中加载所述智能合约对应的源代码的编译结果,并调用所述目标程序编译执行器执行所述编译结果;若所述智能合约的编程语言所属语言类型为解释型语言,则从存储中加载所述智能合约对应的源代码,并调用所述目标程序编译执行器对所述源代码进行编译及执行。
在一个实施例中,所述处理器701,还用于执行:若所述目标节点的节点属性信息与所述智能合约的执行条件不匹配,则将所述执行请求广播至所述至少一个节点中的其他节点,以指示所述其他节点执行所述智能合约;接收所述其他节点执行所述智能合约的执行结果,并返回所述执行结果。
在一个实施例中,所述处理器701在调用所述目标程序编译执行器执行所述智能合约,并返回执行结果时,执行如下步骤:
调用所述目标程序编译执行器执行所述智能合约得到执行结果,并将所述执行结果广播至所述区块链中的其他节点,以指示若所述其他节点的节点属性信息与所述智能合约的合约属性信息相匹配,则所述其他节点对所述执行结果进行共识验证;若所述其他节点对所述执行结果的共识验证通过,则返回所述执行结果。
本发明实施例中,当目标节点接收到执行智能合约的执行请求时,检测目标节点的节点属性信息与智能合约的合约属性信息是否匹配,如果匹配,则调用目标节点中部署的目标程序编译执行器执行智能合约并返回执行结果。与现有技术中智能合约的执行方法相比,本发明实施例智能合约的执行无需在目标节点中安装虚拟机,而是基于目标节点中已安装的目标程序编译执行器执行的,因此,本发明实施例减少了目标节点中的存储控件消耗,并且减少了区块链实现的复杂度。
根据本申请的一个方面,本发明实施例还提供了一种计算机产品或计算机程序,该计算机产品中包括计算机程序,该计算机程序存储在计算机可读存储介质中。处理器701从计算机可读存储介质中读取该计算机程序,处理器701执行该计算机程序,使得终端执行图2和图3所示的区块链中智能合约的执行方法,具体地:接收执行智能合约的执行请求;若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则调用所述目标节点中部署的所述目标程序编译执行器执行所述智能合约并返回执行结果。
本发明实施例中,当目标节点接收到执行智能合约的执行请求时,检测目标节点的节点属性信息与智能合约的合约属性信息是否匹配,如果匹配,则调用目标节点中部署的目标程序编译执行器执行智能合约并返回执行结果。与现有技术中智能合约的执行方法相比,本发明实施例智能合约的执行无需在目标节点中安装虚拟机,而是基于目标节点中已安装的目标程序编译执行器执行的,因此,本发明实施例减少了目标节点中的存储控件消耗,并且减少了区块链实现的复杂度。
Claims (10)
1.一种区块链中智能合约的执行方法,其特征在于,所述区块链包括目标节点,所述目标节点本地中部署有目标程序编译执行器,所述目标节点包括用于与所述目标程序编译执行器进行交互的本机编译执行程序交互模块,所述方法包括:
接收执行智能合约的执行请求;
若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则通过所述本机编译执行程序交互模块调用所述目标节点中部署的所述目标程序编译执行器执行所述智能合约并返回执行结果;
其中,所述目标节点的节点属性信息包括所述目标节点所支持的编程语言相关信息和所述目标节点的硬件信息;所述智能合约的合约属性信息包括编写所述智能合约的编程语言相关信息和运行所述智能合约的节点的硬件信息所需满足的第一要求;
所述目标节点所支持的编程语言相关信息包括所述目标节点所支持的目标编程语言,以及所述目标节点中部署的支持所述目标编程语言的目标程序编译执行器属性信息;所述智能合约的编程语言相关信息包括编程所述智能合约的第一编程语言和运行所述第一编程语言的程序编译执行器所需满足的第二要求;
所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配是指:所述目标节点的硬件信息满足所述第一要求,以及所述目标编程语言包括所述第一编程语言,且所述目标程序编译器属性信息满足所述第二要求。
2.如权利要求1所述的方法,其特征在于,在接收执行智能合约的执行请求之前,所述方法还包括:
接收部署智能合约的部署请求;
若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则存储所述智能合约,并通知所述区块链中的其他节点所述目标节点已存储智能合约,以使所述其他节点基于所述通知对所述智能合约部署进行共识验证,并在共识验证成功后确定所述智能合约部署成功。
3.如权利要求2所述的方法,其特征在于,所述若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则存储所述智能合约,包括:
检测所述智能合约是否满足合约编写要求;
如果所述智能合约满足所述合约编写要求,则确定所述智能合约的编程语言所属语言类型;
基于所述智能合约的编程语言所属语言类型对所述智能合约进行存储。
4.如权利要求3所述的方法,其特征在于,所述基于所述智能合约的编程语言所属语言类型对所述智能合约进行存储,包括:
如果所述智能合约的编程语言所属语言类型为编译型语言,则调用所述目标程序编译执行器对所述智能合约对应的源代码进行编译处理得到编译结果,并将所述编译结果和所述智能合约对应的源代码进行关联存储;
如果所述智能合约的编程语言所属语言类型为解释型语言,则存储所述智能合约对应的源代码。
5.如权利要求4所述的方法,其特征在于,所述调用所述目标程序编译执行器执行所述智能合约,包括:
确定所述智能合约的编程语言所属语言类型;
若所述智能合约的编程语言所属语言类型为编译型语言,则从存储中加载所述智能合约对应的源代码的编译结果,并调用所述目标程序编译执行器执行所述编译结果;
若所述智能合约的编程语言所属语言类型为解释型语言,则从存储中加载所述智能合约对应的源代码,并调用所述目标程序编译执行器对所述源代码进行编译及执行。
6.如权利要求1所述的方法,其特征在于,所述方法还包括:
若所述目标节点的节点属性信息与所述智能合约的执行条件不匹配,则将所述执行请求广播至所述至少一个节点中的其他节点,以指示所述其他节点执行所述智能合约;
接收所述其他节点执行所述智能合约的执行结果,并返回所述执行结果。
7.如权利要求1所述的方法,其特征在于,所述调用所述目标程序编译执行器执行所述智能合约,并返回执行结果,包括:
调用所述目标程序编译执行器执行所述智能合约得到执行结果,并将所述执行结果广播至所述区块链中的其他节点,以指示若所述其他节点的节点属性信息与所述智能合约的合约属性信息相匹配,则所述其他节点对所述执行结果进行共识验证;
若所述其他节点对所述执行结果的共识验证通过,则返回所述执行结果。
8.一种区块链中智能合约的执行装置,其特征在于,所述区块链包括目标节点,所述目标节点本地中部署有目标程序编译执行器,所述目标节点包括用于与所述目标程序编译执行器进行交互的本机编译执行程序交互模块,所述装置可运行:
接收单元,用于接收执行智能合约的执行请求;
处理单元,用于若所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配,则通过所述本机编译执行程序交互模块调用所述目标节点中部署的所述目标程序编译执行器执行所述智能合约并返回执行结果;
其中,所述目标节点的节点属性信息包括所述目标节点所支持的编程语言相关信息和所述目标节点的硬件信息;所述智能合约的合约属性信息包括编写所述智能合约的编程语言相关信息和运行所述智能合约的节点的硬件信息所需满足的第一要求;
所述目标节点所支持的编程语言相关信息包括所述目标节点所支持的目标编程语言,以及所述目标节点中部署的支持所述目标编程语言的目标程序编译执行器属性信息;所述智能合约的编程语言相关信息包括编程所述智能合约的第一编程语言和运行所述第一编程语言的程序编译执行器所需满足的第二要求;
所述目标节点的节点属性信息与所述智能合约的合约属性信息相匹配是指:所述目标节点的硬件信息满足所述第一要求,以及所述目标编程语言包括所述第一编程语言,且所述目标程序编译器属性信息满足所述第二要求。
9.一种节点设备,其特征在于,包括:
处理器,适用于实现一条或多条计算机程序;以及
计算机存储介质,所述计算机存储介质存储有一条或多条计算机程序,所述一条或多条计算机程序适于由所述处理器加载并执行如权利要求1-7任一项所述的区块链中智能合约的执行方法。
10.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机程序,所述计算机程序被处理器执行时,用于执行如权利要求1-7任一项所述的区块链中智能合约的执行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110080216.3A CN112799674B (zh) | 2021-01-19 | 2021-01-19 | 区块链中智能合约的执行方法、装置及节点设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110080216.3A CN112799674B (zh) | 2021-01-19 | 2021-01-19 | 区块链中智能合约的执行方法、装置及节点设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112799674A CN112799674A (zh) | 2021-05-14 |
CN112799674B true CN112799674B (zh) | 2024-03-26 |
Family
ID=75810969
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110080216.3A Active CN112799674B (zh) | 2021-01-19 | 2021-01-19 | 区块链中智能合约的执行方法、装置及节点设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112799674B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109032706A (zh) * | 2018-07-16 | 2018-12-18 | 百度在线网络技术(北京)有限公司 | 智能合约执行方法、装置、设备和存储介质 |
CN109872157A (zh) * | 2017-12-01 | 2019-06-11 | 北京欧链科技有限公司 | 区块链中执行智能合约的方法及装置 |
CN112015399A (zh) * | 2020-08-31 | 2020-12-01 | 京东数字科技控股股份有限公司 | 一种生成智能合约的数据处理方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10725744B2 (en) * | 2018-12-27 | 2020-07-28 | Silver Rocket Data Technology (Shanghai) Co., Ltd | Method for adapting to blockchain and device, terminal and medium performing the same |
-
2021
- 2021-01-19 CN CN202110080216.3A patent/CN112799674B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109872157A (zh) * | 2017-12-01 | 2019-06-11 | 北京欧链科技有限公司 | 区块链中执行智能合约的方法及装置 |
CN109032706A (zh) * | 2018-07-16 | 2018-12-18 | 百度在线网络技术(北京)有限公司 | 智能合约执行方法、装置、设备和存储介质 |
CN112015399A (zh) * | 2020-08-31 | 2020-12-01 | 京东数字科技控股股份有限公司 | 一种生成智能合约的数据处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112799674A (zh) | 2021-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110297689B (zh) | 智能合约执行方法、装置、设备及介质 | |
CN112104709B (zh) | 智能合约的处理方法、装置、介质及电子设备 | |
CN110058864B (zh) | 微服务的部署方法及装置 | |
CN103019874B (zh) | 基于数据同步实现异常处理的方法及装置 | |
CN111090581B (zh) | 智能合约测试方法、装置、计算机设备和存储介质 | |
CN109032631B (zh) | 应用程序补丁包获取方法、装置、计算机设备及存储介质 | |
CN106339237B (zh) | 针对JavaEE领域WEB应用的插件加载框架及方法 | |
CN110780870A (zh) | 一种业务执行方法、装置、设备及存储介质 | |
CN111179086A (zh) | 一种基于WebAssembly的智能合约虚拟机 | |
CN109039751A (zh) | 配置路由的方法、装置、计算机设备和存储介质 | |
US20240176881A1 (en) | Detection of malicious behavior of applet | |
CN112948272A (zh) | 基于生产环境的数据测试系统功能方法、装置及相关设备 | |
CN114168190A (zh) | 接口文档生成方法、装置、计算机设备和存储介质 | |
CN110443044B (zh) | 区块链客户端漏洞挖掘方法、装置、设备及存储介质 | |
CN112799674B (zh) | 区块链中智能合约的执行方法、装置及节点设备 | |
CN113419738A (zh) | 接口文档的生成方法、装置及接口管理设备 | |
CN112925523A (zh) | 对象比较方法、装置、设备及计算机可读介质 | |
WO2023125755A1 (zh) | 基于大规模集群的服务请求处理方法、装置、设备及介质 | |
CN112199080A (zh) | vuejs项目webpack构建方法及设备 | |
CN112579156A (zh) | 一种业务事件的处理系统以及处理方法、装置和设备 | |
US20240232329A9 (en) | Verification of serverless applications using fuzzing techniques | |
CN112637074B (zh) | web静态资源协调方法、装置及分发系统 | |
US11960560B1 (en) | Methods for analyzing recurring accessibility issues with dynamic web site behavior and devices thereof | |
CN115134228B (zh) | 环境链路供给与检测方法、装置、设备、介质和程序产品 | |
CN115423629A (zh) | 交易的处理方法与装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40044625 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |