掌桥专利:专业的专利平台
掌桥专利
首页

基于区块链平台的智能合约部署和调用方法及相关设备

文献发布时间:2023-06-19 10:32:14


基于区块链平台的智能合约部署和调用方法及相关设备

技术领域

本发明属于区块链领域,尤其涉及基于区块链平台的智能合约部署和调用方法、装置、计算机设备及计算机存储介质。

背景技术

目前,基于区块链平台的智能合约执行方法主要包括:直接用Solidity智能合约、用WASM智能合约字节码技术或将Solidity智能合约通过中间语言文件转为WASM字节码文件。

由于现有的区块链中的大多数智能合约是使用Solidity编写的,因此使用Solidity智能合约的学习成本很低,这点使它成为最广泛的一种使用方式,但是由于Solidity智能合约的自身设计原因导致其执行效率会随着业务越来越复杂而变得越来越低下,且该原因目前无法被克服。

而使用WASM智能合约字节码技术,主要是通过使用RUST/C++等开发语言编写智能合约,然后通过对应的编译器编译智能合约为WASM字节码,再将WASM字节码部署到区块链上。这种方式需要利用区块链平台的WASM解释器解释执行WASM字节码从而进行WASM智能合约的调用。由于WASM字节码通常可以通过一些技术手段进行优化,进而得到很好的执行效率,所以WASM智能合约相对于Solidity智能合约执行效率有所提升,但是只适用于部署新的智能合约的情况,当区块链平台已经存在Solidity智能合约的时候,若开发新的智能合约对原有智能合约进行替换,会增加开发成本和开发风险,而且使用WASM智能合约需要开发者学习多种智能合约开发语言,以便使用各种语言的WASM智能合约开发接口与区块链平台进行适配,这加大了区块链平台以及开发者的开发难度。

对于将Solidity智能合约通过中间语言文件转为WASM字节码文件,主要是使用Solidity编写智能合约,然后通过一些编译器将Solidity转为中间语言文件,然后再将中间语言文件转为WASM字节码文件,然后再部署到区块链平台。这种方式跟使用WASM智能合约字节码技术类似,适用于新部署的Solidity智能合约,所以这种方式对于原有的区块链上已经部署的智能合约并不能起作用,而对于开发者来说,往往希望能够提高已经部署到区块链的智能合约的执行效率,因此如何提升区块链上的智能合约的执行效率,且不加大区块链和开发者的开发难度是目前亟待解决的问题。

综上可知,上述现有技术存在区块链平台上智能合约的执行效率低和开发难度大的问题。

发明内容

本发明实施例提供一种基于区块链平台的智能合约部署和调用方法、装置、计算机设备及存储介质,以解决在区块链平台上智能合约的执行效率低和开发难度大的问题。

一种基于区块链平台的智能合约部署方法,包括:

从软件开发工具包获取Solidity合约部署交易;

在所述区块链平台中不存在与所述Solidity合约部署交易对应的合约部署地址时,解析所述Solidity合约部署交易,并得到相应的Solidity字节码BIN合约文件和接口描述ABI文件;

在根据所述Solidity字节码BIN合约文件确认所需部署的智能合约的类型为Solidity合约后,对所述Solidity字节码BIN合约文件进行翻译以得到WASM字节码BIN合约文件;

将所述Solidity字节码BIN合约文件、所述接口描述ABI文件以及所述WASM字节码BIN合约文件存储至所述区块链平台以供调用。

一种基于区块链平台的智能合约调用方法,包括:

在区块链平台已部署好合约文件的情况下,当需要进行合约文件调用时,从软件开发工具包获取合约调用交易;

在所述区块链平台中存在与所述合约调用交易对应的合约调用地址时,解析所述合约调用交易,并得到相应的接口描述ABI文件、合约调用地址及函数信息;

根据所述合约调用交易在所述区块链平台中查找所述合约调用地址是否存在对应的WASM字节码BIN合约文件;

在未查找到所述WASM字节码BIN合约文件时,从所述区块链平台中提取与所述合约调用地址对应的Solidity字节码BIN合约文件;

当所述区块链平台的压力小于预设压力阈值时,将所述Solidity字节码BIN合约文件翻译成WASM字节码BIN合约文件,并根据所述合约调用交易对所述WASM字节码BIN合约文件进行执行调用;

当所述区块链平台的压力不小于所述预设压力阈值时,根据所述合约调用交易对Solidity字节码BIN合约文件进行执行调用;

将所述Solidity字节码BIN合约文件、所述接口描述ABI文件以及所述WASM字节码BIN合约文件存储至所述区块链平台以供调用。

一种基于区块链平台的智能合约部署装置,包括:

部署交易获取模块,用于从软件开发工具包获取Solidity合约部署交易;

部署交易解析模块,用于在所述区块链平台中不存在与所述Solidity合约部署交易对应的合约部署地址时,解析所述Solidity合约部署交易,并得到相应的Solidity字节码BIN合约文件和接口描述ABI文件;

文件翻译模块,用于在根据所述Solidity字节码BIN合约文件确认所需部署的智能合约的类型为Solidity合约后,对所述Solidity字节码BIN合约文件进行翻译以得到WASM字节码BIN合约文件;

第一存储模块,用于将所述Solidity字节码BIN合约文件、所述接口描述ABI文件以及所述WASM字节码BIN合约文件存储至所述区块链平台以供调用。

一种基于区块链平台的智能合约调用装置,包括:

调用交易获取模块,用于在区块链平台已部署好合约文件的情况下,当需要进行合约文件调用时,从软件开发工具包获取合约调用交易;

调用交易解析模块,用于在所述区块链平台中存在与所述合约调用交易对应的合约调用地址时,解析所述合约调用交易,并得到相应的接口描述ABI文件、合约调用地址及函数信息;

地址查找模块,用于根据所述合约调用交易在所述区块链平台中查找所述合约调用地址是否存在对应的WASM字节码BIN合约文件;

文件提取模块,用于在未查找到所述WASM字节码BIN合约文件时,从所述区块链平台中提取与所述合约调用地址对应的Solidity字节码BIN合约文件;

第一执行调用模块,用于当所述区块链平台的压力小于预设压力阈值时,将所述Solidity字节码BIN合约文件翻译成WASM字节码BIN合约文件,并根据所述合约调用交易对所述WASM字节码BIN合约文件进行执行调用;

第二执行调用模块,用于当所述区块链平台的压力不小于所述预设压力阈值时,根据所述合约调用交易对Solidity字节码BIN合约文件进行执行调用;

第二存储模块,用于将所述Solidity字节码BIN合约文件、所述接口描述ABI文件以及所述WASM字节码BIN合约文件存储至所述区块链平台以供调用。

一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述基于区块链平台的智能合约部署方法或基于区块链平台的智能合约调用方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述基于区块链平台的智能合约部署方法或基于区块链平台的智能合约调用方法的步骤。

上述基于区块链平台的智能合约部署和调用方法、装置、计算机设备及存储介质,通过从软件开发工具包获取Solidity合约部署交易,解析Solidity合约部署交易,并得到相应的Solidity字节码BIN合约文件和接口描述ABI文件,把Solidity字节码BIN合约文件翻译成WASM字节码BIN合约文件,然后将Solidity字节码BIN合约文件、接口描述ABI文件以及WASM字节码BIN合约文件存储至区块链平台,在对智能合约进行调用时,从软件开发工具包获取合约调用交易,根据合约调用交易在区块链平台中查找合约调用地址对应的WASM字节码BIN合约文件,在未查找到WASM字节码BIN合约文件时,从所述区块链平台中提取与合约调用地址对应的Solidity字节码BIN合约文件,将Solidity字节码BIN合约文件翻译成WASM字节码BIN合约文件,并根据所述合约调用交易对所述WASM字节码文件进行执行调用或根据所述合约调用交易对Solidity字节码BIN合约文件进行执行调用,提高了区块链平台上智能合约的部署效率,降低了开发人员的开发难度,并且在区块链平台对智能合约进行调用时,可直接对已储存的智能合约进行调用,提高了智能合约的执行效率。

附图说明

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

图1是本发明一实施例中基于区块链平台的智能合约部署方法和基于区块链平台的智能合约调用方法的一应用环境示意图;

图2是本发明一实施例中基于区块链平台的智能合约部署方法和基于区块链平台的智能合约调用方法的又一应用环境示意图;

图3是本发明一实施例中基于区块链平台的智能合约部署方法的一流程图;

图4是本发明一实施例中基于区块链平台的智能合约调用方法的一流程图;

图5是本发明一实施例中基于区块链平台的智能合约部署装置的结构示意图;

图6是本发明一实施例中基于区块链平台的智能合约调用装置的结构示意图;

图7是本发明一实施例中计算机设备的一示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供的基于区块链平台的智能合约部署方法,可应用在如图1所示的应用环境中,其中,计算机设备/终端设备/……通过网络与服务器进行通信。其中,计算机设备/终端设备/……可以但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

在本发明一实施例中,如图3所示,提供一种基于区块链平台的智能合约部署方法,以该方法应用在图1中的服务器为例进行说明,包括如下步骤S301至S304。

在步骤S301之前,由智能合约开发者编写Solidity智能合约,使用Solidity编译器编译Solidity智能合约源代码得到部署所需的Solidity字节码BIN(Binar,二进制)文件以及接口描述ABI(Application Binary Interface,应用程序二进制接口)文件,基于Solidity字节码BIN合约文件以及接口描述ABI文件,使用区块链平台对应的软件开发工具包构成合约部署交易,合约部署交易构成完成之后,使用区块链账户对合约部署交易进行签名。

以下对步骤S301至S304进行具体说明:

步骤S301、从软件开发工具包获取Solidity合约部署交易。

具体的,从软件开发工具包获取Solidity合约部署交易给区块链平台进行合约部署地址识别。Solidity合约部署交易包括交易发起者账户地址、Solidity字节码BIN合约文件和接口描述ABI文件等信息。

此处需要说明的是:

Solidity是一门面向合约的、为实现智能合约而创建的高级编程语言,而字节码(Byte-code)文件是一种包含执行程序、由一序列操作码/数据对组成的二进制文件,字节是计算机里的数据量单位。

软件开发工具包(Software decelopment kit,SDK)被认为是合约调用交易或者合约部署交易的发起方,也可以被称为区块链平台的用户。

Solidity字节码BIN(Binar,二进制)文件是Solidity字节码BIN合约文件源代码编译之后的二进制可读文件,包含可执行的所有指令。

接口描述ABI(Application Binary Interface,应用程序二进制接口)文件,本发明实施例中指的是Solidity字节码BIN合约文件的源代码编译之后的接口文件,主要是方便软件工具包进行合约部署交易的构成、合约调用交易的构成以及执行调用后的执行结果的解析。

在步骤S301获取Solidity合约部署交易,并发送给区块链平台后,在本发明实施例中根据Solidity合约部署交易中的合约部署地址是否为空,判断在区块链平台中是否存在与Solidity合约部署交易对应的合约部署地址,若存在,则区块链平台判定Solidity合约部署交易为智能合约调用交易,若不存在,则区块链平台判定Solidity合约部署交易为合约部署交易。

步骤S302、在区块链平台中不存在与Solidity合约部署交易对应的合约部署地址时,解析Solidity合约部署交易,并得到相应的Solidity字节码BIN合约文件和接口描述ABI文件。

步骤S303、在根据所述Solidity字节码BIN合约文件确认所需部署的智能合约的类型为Solidity合约后,对Solidity字节码BIN合约文件进行翻译以得到WASM字节码BIN合约文件。

例如,solidity字节码BIN合约文件的信息以”0x6d736100”开头,则确认所需部署的智能合约的类型为WASM合约,否则为Solidity合约。根据solidity字节码BIN合约文件的信息,判断此次部署的智能合约为Solidity合约,对Solidity字节码BIN合约文件进行翻译以得到WASM字节码BIN合约文件。其中,WASM全称为WebAssembly,是一种开放标准,为可执行程序定义了一种可移植的二进制代码格式,以及一种相应的文本汇编语言,以及用于促进此类程序与其宿主环境之间的交互的接口,其可在网页上启用高性能应用程序,还可在其他环境(包括独立环境)中执行和集成,使用WebAssembly编写合约相对于其他的语言编写智能合约更加的通用以及执行更加迅速。

在步骤S303中,对Solidity字节码BIN合约文件进行翻译以得到WASM字节码BIN合约文件的步骤具体包括以下步骤a和b:

a、识别Solidity字节码BIN合约文件的Solidity执行指令。

b、将Solidity执行指令翻译成WASM执行指令,根据所有WASM执行指令得到WASM字节码BIN合约文件。

具体的,上述步骤b中将Solidity执行指令翻译成WASM执行指令的方式包括如下直接翻译方式和外部调用方式:

(1)直接翻译方式包括如下方式:

方式一:

a1、在Solidity执行指令和WASM执行指令的数据格式相同且功能相同时,将Solidity执行指令翻译成WASM执行指令。

a2、根据所述WASM执行指令构成WASM字节码BIN合约文件。

为了更好的理解上述步骤a1,现结合实例对步骤a1作进一步的说明:

例如,Solidity执行指令为ADD,该指令需要从操作数栈中弹出2个参数作为参与加法计算的各个参数,然后将加法计算结果又压入操作数栈中,而该指令在WASM执行指令中有着对应的一个指令,名为“i32.add”,因此可将Solidity执行指令ADD直接翻译替换成WASM执行指令i32.add,WASM执行指令i32.add与Solidity执行指令ADD具有相同的计算效果。

方式二:

b1、在Solidity执行指令和WASM执行指令的数据格式相同但功能不相同时,在所述区块链平台中对所述Solidity执行指令的操作数栈和内存进行模拟处理以得到模拟操作数栈和模拟内存。

b2、在所述模拟操作数栈和所述模拟内存中对Solidity执行指令进行预执行,得到相应的预执行结果和预执行时的跳转路径。

b3、分析所述预执行结果和所述跳转路径,以从所述模拟操作数栈以及所述模拟内存中获得Solidity执行指令的执行路径。

b4、分析所述执行路径,以得到Solidity执行指令所对应的执行条件。

b5、根据所述执行条件将Solidity执行指令翻译为WASM执行指令。

b6、根据所述WASM执行指令构成所述WASM字节码BIN合约文件。

在上述步骤b4和b5中,执行条件包括但不限于数据操作类型、数据长度以及堆栈深度等。

为了更好的理解上述步骤b1至b5,此处结合实例对上述步骤b1至b5作进一步的说明:

例如,solidity执行指令中的jump指令表示跳转指令,wasm执行指令中的br指令表示换行指令,br指令与jump指令数据格式相同而功能不同。为了Solidity执行指令中的jump指令翻译为WASM执行指令中的br指令,需要在所述区块链平台中对Solidity执行指令中的jump指令的操作数栈和内存进行模拟处理以得到模拟操作数栈和模拟内存,通过Solidity执行指令中的jump指令在模拟操作数栈和模拟内存中进行指令预执行时产生的具体跳转路径(如从计数器1位置跳到3位置)可以知道jump指令的数据长度、堆栈深度等执行条件,从而将jump指令的数据长度、堆栈深度等执行条件应用到br指令,实现Solidity执行指令中的jump指令翻译为WASM执行指令中的br指令。

方式三:

c1、在Solidity执行指令和WASM执行指令的数据格式不互通时,结合所述ABI接口文件获取所述Solidity执行指令的操作数类型。

c2、根据所述操作数类型将Solidity执行指令翻译成WASM执行指令。

c3、根据所述WASM执行指令构成所述WASM字节码BIN合约文件。

对于上述步骤c1,在Solidity执行指令和WASM执行指令的数据格式不互通时,翻译指令的过程中需要知道各种指令对应的操作数类型,而使用Solidity编译器编译Solidity智能合约源代码得到部署所需的Solidity字节码BIN合约文件后就丢失了Solidity执行指令的操作数类型,但由于所有指令的操作数都是uint256类型的,因此通过结合ABI接口文件可以得知操作数类型,从而根据操作数类型将Solidity执行指令翻译成WASM执行指令。

为了更好的理解上述步骤c1至c2,现结合实例对上述步骤c1至c2作进一步的说明:

例如,Solidity执行指令为SUB,首先根据接口描述ABI文件得到SUB指令所对应的操作数类型以及数据长度,进而将其翻译为对应的WASM执行指令i32.sub或者i64.sub。

(2)外部调用方式包括如下方式:

d1、在Solidity执行指令和WASM执行指令之间的内部指令构成不一致时,将所述Solidity执行指令中的call调用指令翻译成适用于所述WASM执行指令中的call调用指令。

d2、根据所述WASM执行指令中的call调用指令,从所述区块链平台调用预定义函数信息,并根据所述WASM执行指令中的call调用指令和所述预定义函数信息构成所述WASM字节码BIN合约文件;所述预定义函数信息为在所述区块链平台的虚拟机内部预先定义的,用于与所述区块链平台交互的函数信息。

在上述步骤d2中,通过WASM执行指令中的call调用指令调用在区块链平台的虚拟机内部定义的与区块链平台交互的预定义函数信息,该预定义函数信息与合约调用交易中的函数信息相同,以实现跨合约调用,达到与Solidity执行指令具有相同的计算效果。

为了更好的说明Solidity执行指令和WASM执行指令之间的翻译关系,提供Solidity执行指令和WASM执行指令之间的指令翻译关系对应表,如表1所示。

表1

需要特别说明的是,如果指令翻译过程中遇到错误,那么将停止翻译,后续等到合约修改后被再次调用时继续尝试翻译,如果多次翻译失败,则区块链平台将不会再尝试翻译,直接进行solidity字节码BIN合约文件的部署,防止多次无效的翻译对区块链平台产生过大的性能损耗。

此外,在执行上述步骤S303的同时,本实施例还包括以下步骤:

进行WASM字节码BIN合约文件的内存初始化、函数索引信息构建、全局对象构建以及执行引擎构建。

步骤S304、将Solidity字节码BIN合约文件、接口描述ABI文件以及WASM字节码BIN合约文件存储至区块链平台。

具体的,步骤S304包括:

将Solidity字节码BIN合约文件、接口描述ABI文件以及WASM字节码BIN合约文件存储到区块链平台的数据库;

在数据库中生成与WASM字节码BIN合约文件对应的WASM智能合约地址;

将WASM字节码BIN合约文件和WASM智能合约地址形成一一对应的映射关系并存储在区块链平台的内存。

需要特别说明的是,在区块链平台的数据库中生成与WASM字节码BIN合约文件对应的WASM智能合约地址,该WASM智能合约地址与solidity字节码BIN合约文件的地址可以是一样的,有利用后续在对合约文件执行调用的时候可以根据solidity字节码BIN合约文件的地址直接调用WASM字节码BIN文件,也可以根据需要,使得在数据库中生成与WASM字节码BIN合约文件对应的WASM智能合约地址与solidity字节码BIN合约文件的地址是不一样的,这样可以通过在solidity字节码BIN合约文件、WASM字节码BIN合约文件和WASM智能合约地址或solidity字节码BIN合约文件的地址之间建立唯一映射关系,有利用后续在对合约文件执行调用的时候,在查询solidity字节码BIN合约文件的地址或WASM智能合约地址时,可以同时查询到相应的solidity字节码BIN合约文件、WASM字节码BIN合约文件,并根据需要执行相应合约文件的调用。

在步骤S304中,该方法应用在如图2所示的应用环境中,其中,区块链由若干个相互间能够进行通信的节点组成,每个节点可以看做是一个块存储,各块存储用于保存数据,每一个数据节点之间都包含所有数据,所述块存储数据具备完整历史记录,可快速复原拓展,区域链分为公有链、私有链和联盟链,公有链是任何节点都是开放的,每个人都可以参与到这个区块链计算,而且任何人都可以下载获得完整区块链数据,私有链是有些区块链并不希望这个系统任何人都可参与,不对外公开,适用于特定机构的内部数据管理与审计或开放测试等,联盟链是参与每个节点的权限都完全对等,大家在不需要完全互信的情况下就可以实现数据的可信交换,联盟链的各个节点通常有与之对应的实体机构组织,通过授权后才能加入与退出网络,在使用整个区块链备份系统的过程中,需使用数字签字,数字签字设计一个哈希函数、发送者的公钥、发送者的私钥,区块链具备完整的分布式存储特性,其实是更加庞大的网络数据存储同时使用了“哈希算法”形式的数据结构保存基础数据。

上述步骤S304中,将Solidity字节码BIN合约文件、WASM字节码BIN合约文件和WASM智能合约地址形成一一对应的映射关系,并存储于区块链数据库存储中可以利用区块链的特性提高数据的安全性,使得在进行合约文件调用时,提升了区块链平台中智能合约的执行效率及区块链平台的共识效率。

本发明实施例提供的基于区块链平台的智能合约调用方法,可应用在如图1所示的应用环境中,其中,计算机设备/终端设备/……通过网络与服务器进行通信。其中,计算机设备/终端设备/……可以但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

在本发明一实施例中,如图4所示,提供一种基于区块链平台的智能合约调用方法,以该方法应用在图1中的服务器为例进行说明,包括如下步骤S401至S407。

步骤S401、在区块链平台已部署好合约文件的情况下,当需要进行合约文件调用时,从软件开发工具包获取合约调用交易。

此处需要说明的是:在步骤S401之前,由软件工具包根据返回的合约部署结果以及部署后的智能合约地址等信息构成合约调用交易,合约调用交易构成完成后,利用发送交易区块链账户对合约调用交易进行签名。

基于上述内容,步骤S401中从软件开发工具包获取合约调用交易具体为:软件开发工具包将签名后的合约调用交易发送给区块链平台。其中,合约调用交易的内容包括合约调用地址、合约调用函数、接口描述ABI文件等信息。

步骤S402、在所述区块链平台中存在与所述合约调用交易对应的合约调用地址时,解析所述合约调用交易,并得到相应的接口描述ABI文件、合约调用地址及函数信息。

步骤S403、根据所述合约调用交易在所述区块链平台中查找所述合约调用地址是否存在对应的WASM字节码BIN合约文件。

具体的,对于上述合约调用地址,其来源于:智能合约被部署到区块链平台后,区块链平台会返回合约部署的结果以及部署后的智能合约在区块链平台中的调用地址(即上述的合约调用地址),软件工具包可以根据此合约地址进行区块链合约的调用。

在所述区块链平台中存在与合约调用交易对应的合约调用地址时,区块链平台判定此次交易为合约调用交易,并根据合约调用交易在区块链平台中查找合约调用地址是否存在对应的WASM字节码BIN合约文件,如果存在对应的WASM字节码BIN合约文件,则直接进行对应的WASM字节码BIN合约文件的执行调用。

此处需要特别说明的是,在根据合约调用交易在区块链平台中查找合约调用地址是否存在对应的WASM字节码BIN合约文件的时候,除了可以先判断在根据合约调用交易在区块链平台中查找合约调用地址是否存在对应的WASM字节码BIN合约文件,然后根据判断结果决定是对WASM字节码BIN合约文件进行执行调用还是取出solidity字节码BIN合约文件进行执行调用外,还可以在判断的时候,同时取出solidity字节码BIN合约文件,若不存在对应的WASM字节码BIN合约文件的时候,则可直接进行solidity字节码BIN合约文件的执行调用,以进一步提高智能合约的执行效率。

步骤S404、在未查找到所述WASM字节码BIN合约文件时,从所述区块链平台中提取与所述合约调用地址对应的Solidity字节码BIN合约文件。

具体的,解析出合约调用交易的具体内容,然后根据合约调用交易中包含的合约调用地址识别到此次交易是一笔智能合约调用的交易后,区块链平台首先在内存中查找合约调用地址所对应的WASM字节码BIN合约文件,如果内存中不存在对应合约调用地址的WASM字节码BIN合约文件,则从区块链数据库中查找该合约调用地址对应的WASM字节码BIN合约文件,如果找不到该合约调用地址对应的WASM字节码BIN合约文件,则从区块链数据库中取出与该合约调用地址对应的Solidity字节码BIN合约文件。

步骤S405、当所述区块链平台的压力小于预设压力阈值时,将Solidity字节码BIN合约文件翻译成WASM字节码BIN合约文件,并根据所合约调用交易对WASM字节码文件进行执行调用。

此处需要说明的是,区块链平台的压力是指当前区块链平台上运行所有交易过程中所呈现出可承载的能力状态。当压力未超出预设压力阈值时,表明区块链平台可承载文件翻译任务,因此便可执行上述步骤S405。Solidity字节码BIN合约文件翻译成WASM字节码BIN合约文件的过程在基于区块链平台的智能合约部署方法的过程中做了详细说明,此处不再重复赘述。

需要特别说明的是,如果指令翻译过程中遇到错误,那么将停止翻译,后续等到合约修改后被再次调用或者区块链平台压力小于预设压力阈值时继续尝试翻译,如果多次翻译失败,则区块链平台将不会再尝试翻译,直接进行solidity字节码BIN合约文件的执行调用,防止多次无效的翻译对区块链平台产生过大的性能损耗。

在步骤S405中,根据合约调用交易对WASM字节码BIN合约文件进行执行调用的步骤包括以下步骤A、B及C:

A、根据合约调用交易查找WASM字节码BIN合约文件中与合约调用交易对应的WASM函数信息;

B、当存在WASM函数信息时,从WASM字节码BIN合约文件中取出WASM函数信息对应的WASM代码段;

C、在区块链平台的虚拟机中执行WASM代码段的所有指令,直至执行到返回指令或停止指令为止,并生成WASM指令执行结果发送给软件开发工具包。

对于上述步骤A、其具体是:

根据合约调用交易中的合约调用函数、函数参数等信息查找WASM字节码BIN合约文件中与合约调用交易对应的WASM函数信息。

对于上述步骤B,其具体是:

当根据合约调用交易中的合约调用函数、函数参数等信息查找WASM字节码BIN合约文件中与合约调用交易对应的WASM函数信息时,从WASM字节码BIN合约文件中取出WASM函数信息对应的WASM代码段。而对于没有查找到WASM字节码BIN合约文件中与合约调用交易对应的WASM函数信息的情况,区块链平台判定此次交易是一笔非法交易,停止进行WASM字节码BIN合约文件的执行调用。

对于上述步骤C,其具体是:

在区块链平台的虚拟机中按照WASM代码段中所有指令的排列顺序依次执行WASM代码段中的所有指令。

基于上述步骤C,在区块链平台的虚拟机中执行WASM代码段的所有指令还包括:

在执行WASM代码段的过程中,若遇到WASM代码段中所包含函数信息,则直接执行函数信息。

在执行WASM代码段的指令的过程中,若遇到虚拟机定义的与区块链平台交互的函数信息,则调用函数信息,然后执行函数信息。

其中,虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。比较著名的虚拟机便是java虚拟机。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

步骤S406、当区块链平台的压力不小于预设压力阈值时,根据合约调用交易对Solidity字节码BIN合约文件进行执行调用。

此处需要说明的是,在区块链平台的压力超出预设压力阈值时,表明区块链平台无法承载文件翻译任务,因此则上述步骤S406具体可根据合约调用交易包含的合约调用函数、参数信息等对Solidity字节码文件进行执行调用。

具体的,在步骤S406中,根据合约调用交易对Solidity字节码BIN合约文件进行执行调用的步骤包括:

1、根据合约调用交易查找Solidity字节码BIN合约文件中与合约调用交易对应的Solidity函数信息;

具体的,根据合约调用交易包含的合约调用函数、参数信息等查找Solidity字节码文件中与合约调用交易对应的Solidity函数信息。

2、当查找到Solidity函数信息时,在区块链平台的虚拟机中执行Solidity代码段的指令,直至执行到返回指令或停止指令为止,并生成Solidity指令执行结果发送给软件开发工具包。

具体的,当查找到Solidity函数信息时,在区块链平台的虚拟机中按照Solidity代码段的指令排序依次执行Solidity代码段的指令,直至执行到返回指令或停止指令为止,并生成Solidity指令执行结果发送给软件开发工具包,在执行调用过程中,虚拟机与数栈、内存和区块链数据库进行交互,并记录区块链数据库在交互过程中发生的变更。当没有查找到Solidity函数信息时,停止进行Solidity字节码BIN合约文件的执行调用。

此外,在上述步骤1之后还包括以下步骤:

当查找不到Solidity函数信息时,则确定合约调用交易为非法交易,并停止Solidity字节码BIN合约文件的执行调用。

步骤S407、将所述Solidity字节码BIN合约文件、所述接口描述ABI文件以及所述WASM字节码BIN合约文件存储至所述区块链平台以供调用。

具体的,步骤S407包括:

将Solidity字节码BIN合约文件、接口描述ABI文件以及WASM字节码BIN合约文件存储到区块链平台的数据库;

在数据库中生成与WASM字节码BIN合约文件对应的WASM智能合约地址;

将WASM字节码BIN合约文件和WASM智能合约地址形成一一对应的映射关系并存储在区块链平台的内存。

需要特别说明的是,在区块链平台数据库中生成与WASM字节码BIN合约文件对应的WASM智能合约地址,该WASM智能合约地址与solidity字节码BIN合约文件的地址可以是一样的,有利用后续在对合约文件执行调用的时候可以根据solidity字节码BIN合约文件的地址直接调用WASM字节码BIN文件,也可以根据需要,使得在数据库中生成与WASM字节码BIN合约文件对应的WASM智能合约地址与solidity字节码BIN合约文件的地址是不一样的,这样可以通过在solidity字节码BIN合约文件、WASM字节码BIN合约文件和WASM智能合约地址或solidity字节码BIN合约文件的地址之间建立唯一映射关系,有利用后续在对合约文件执行调用的时候,在查询solidity字节码BIN合约文件的地址或WASM智能合约地址时,可以同时查询到相应的solidity字节码BIN合约文件、WASM字节码BIN合约文件,并根据需要执行相应合约文件的调用。

在步骤S407中,该方法应用在如图2所示的应用环境中,其中,区块链由若干个相互间能够进行通信的节点组成,每个节点可以看做是一个块存储,各块存储用于保存数据,每一个数据节点之间都包含所有数据,所述块存储数据具备完整历史记录,可快速复原拓展,区域链分为公有链、私有链和联盟链,公有链是任何节点都是开放的,每个人都可以参与到这个区块链计算,而且任何人都可以下载获得完整区块链数据,私有链是有些区块链并不希望这个系统任何人都可参与,不对外公开,适用于特定机构的内部数据管理与审计或开放测试等,联盟链是参与每个节点的权限都完全对等,大家在不需要完全互信的情况下就可以实现数据的可信交换,联盟链的各个节点通常有与之对应的实体机构组织,通过授权后才能加入与退出网络,在使用整个区块链备份系统的过程中,需使用数字签字,数字签字设计一个哈希函数、发送者的公钥、发送者的私钥,区块链具备完整的分布式存储特性,其实是更加庞大的网络数据存储同时使用了“哈希算法”形式的数据结构保存基础数据。

上述步骤S407中,将Solidity字节码BIN合约文件、WASM字节码BIN合约文件和WASM智能合约地址形成一一对应的映射关系,并存储于区块链数据库存储中可以利用区块链的特性提高数据的安全性,使得在进行合约文件调用时,提升了区块链平台中智能合约的执行效率及区块链平台的共识效率。

本发明实施例提出的基于区块链平台的智能合约调用和部署方法,通过从软件开发工具包获取Solidity合约部署交易,解析Solidity合约部署交易,并得到相应的Solidity字节码BIN合约文件和接口描述ABI文件,把Solidity字节码BIN合约文件翻译成WASM字节码BIN合约文件,然后将Solidity字节码BIN合约文件、接口描述ABI文件以及WASM字节码BIN合约文件存储至区块链平台,在对智能合约进行调用时,首先会判断内存中是否存在已经转换后的WASM字节码BIN合约文件,如果存在WASM字节码BIN合约文件,则直接调用WASM字节码BIN合约文件,否则将调用传统的solidity字节码BIN合约文件。在区块链平台的压力小于预设压力阈值会将solidity字节码BIN合约文件转换为WASM字节码BIN合约文件,然后保存在内存和区块链数据库中,并生成与WASM字节码文件对应的地址,等到下次软件工具包再次调用对应地址的Solidity字节码BIN合约文件的时候,可以直接在区块链平台中的内存或者区块链数据库中找到对应的WASM字节码BIN合约文件,进而将对Solidity字节码BIN合约文件的调用转变为对WASM字节码BIN合约文件的调用。通过将Solidity字节码BIN合约文件转为WASM字节码BIN合约文件的这种方式,极大地提升了区块链平台中智能合约的执行效率及区块链平台的共识效率,提升了区块链系统的整体执行性能,增大了区块链系统的吞吐量,通过将Solidity字节码BIN合约文件转为WASM字节码BIN合约文件的这种方式无需学习新的智能合约开发语言,节约了开发成本,极大的提高了智能合约的开发效率以及最大化复用原有的Solidity字节码BIN合约文件,并且能够得到同样功能的WASM字节码BIN合约文件的执行快速效果,简化了开发流程,降低了开发人员的开发难度。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

在一实施例中,如图5所示,提供一种基于区块链平台的智能合约部署装置,该区块链平台的智能合约部署装置与上述实施例中区块链平台的智能合约部署方法一一对应。如图5所示,该区块链平台的智能合约部署和调用装置包括部署交易获取模块50、部署交易解析模块51、文件翻译模块52、第一存储模块53,各功能模块详细说明如下:

部署交易获取模块50,用于从软件开发工具包获取Solidity合约部署交易;

部署交易解析模块51,用于在所述区块链平台中不存在与所述Solidity合约部署交易对应的合约部署地址时,解析所述Solidity合约部署交易,并得到相应的Solidity字节码BIN合约文件和接口描述ABI文件;

文件翻译模块52,用于在根据所述Solidity字节码BIN合约文件确认所需部署的智能合约的类型为Solidity合约后,对所述Solidity字节码BIN合约文件进行翻译以得到WASM字节码BIN合约文件;

第一存储模块53,用于将所述Solidity字节码BIN合约文件、所述接口描述ABI文件以及所述WASM字节码BIN合约文件存储至所述区块链平台以供调用。

进一步的,文件翻译模块52包括第一文件翻译单元、第二文件翻译单元、第三文件翻译单元,其中,

第一文件翻译单元包括第一翻译单元和第一构成单元,各个功能单元的详细说明具体如下:

第一翻译单元,用于在Solidity执行指令和WASM执行指令的数据格式相同且功能相同时,将Solidity执行指令翻译成WASM执行指令。

第一构成单元,用于根据所述WASM执行指令构成WASM字节码BIN合约文件。

第二文件翻译单元包括模拟处理单元、跳转路径获取单元、执行路径获取单元、路径分析单元、第二翻译单元和第二构成单元,各个功能单元的详细说明具体如下:

模拟处理单元,用于在Solidity执行指令和WASM执行指令的数据格式相同但功能不相同时,在所述区块链平台中对所述Solidity执行指令的操作数栈和内存进行模拟处理以得到模拟操作数栈和模拟内存。

跳转路径获取单元,用于在所述模拟操作数栈和所述模拟内存中对Solidity执行指令进行预执行,得到相应的预执行结果和预执行时的跳转路径。

执行路径获取单元,用于分析所述预执行结果和所述跳转路径,以从所述模拟操作数栈以及所述模拟内存中获得Solidity执行指令的执行路径。

路径分析单元,用于分析所述执行路径,以得到Solidity执行指令所对应的执行条件。

第二翻译单元,用于根据所述执行条件将Solidity执行指令翻译为WASM执行指令。

第二构成单元,用于根据所述WASM执行指令构成所述WASM字节码BIN合约文件。

第三文件翻译单元包括类型获取单元、第三翻译单元和第三构成单元,各个功能单元的详细说明具体如下:

类型获取单元、用于在Solidity执行指令和WASM执行指令的数据格式不互通时,结合所述ABI接口文件获取所述Solidity执行指令的操作数类型。

第三翻译单元,用于根据所述操作数类型将Solidity执行指令翻译成WASM执行指令。

第三构成单元,用于根据所述WASM执行指令构成所述WASM字节码BIN合约文件。

进一步的,文件翻译模块52包括第四文件翻译单元,其中,

第四文件翻译单元包括第四翻译单元和第四构成单元,各个功能单元的详细说明具体如下:

第四翻译单元,用于在Solidity执行指令和WASM执行指令之间的内部指令构成不一致时,将所述Solidity执行指令中的call调用指令翻译成适用于所述WASM执行指令中的call调用指令;

第四构成单元,用于根据所述WASM执行指令中的call调用指令,从所述区块链平台调用预定义函数信息,并根据所述WASM执行指令中的call调用指令和所述预定义函数信息构成所述WASM字节码BIN合约文件;所述预定义函数信息为在所述区块链平台的虚拟机内部预先定义的,用于与所述区块链平台交互的函数信息。

进一步的,文件翻译模块52还可以包括识别指令单元和指令翻译单元,对各单元详细说明具体如下:

识别指令单元,用于识别Solidity字节码BIN合约文件的Solidity执行指令。

指令翻译单元,用于将Solidity执行指令翻译成WASM执行指令,根据所有WASM执行指令得到WASM字节码BIN合约文件

进一步的,文件翻译模块52还包括初始化单元,初始化单元详细说明具体如下:

初始化单元,用于进行WASM字节码BIN合约文件的内存初始化、函数索引信息构建、全局对象构建以及执行引擎构建。

进一步地,第一存储模块53包括第一存储单元、地址生成单元和第二存储单元,对各单元详细说明具体如下:

第一存储单元,用于将Solidity字节码BIN合约文件、接口描述ABI文件以及WASM字节码BIN合约文件存储到区块链平台的数据库。

地址生成单元,用于在数据库中生成与WASM字节码BIN合约文件对应的WASM智能合约地址。

第二存储单元,用于将WASM字节码BIN合约文件和WASM智能合约地址形成一一对应的映射关系并存储在区块链平台的内存。

在一实施例中,如图6所示,提供一种基于区块链平台的智能合约调用装置,该区块链平台的智能合约调用装置与上述实施例中区块链平台的智能合约调用方法一一对应。如图6所示,该区块链平台的智能合约调用装置包括调用交易获取模块60、调用交易解析模块61、地址查找模块62、文件提取模块63、第一执行调用模块64、第二执行调用模块65、第二存储模块66,各功能模块详细说明如下:

调用交易获取模块60,用于在区块链平台已部署好合约文件的情况下,当需要进行合约文件调用时,从软件开发工具包获取合约调用交易。

调用交易解析模块61,用于在所述区块链平台中存在与所述合约调用交易对应的合约调用地址时,解析所述合约调用交易,并得到相应的接口描述ABI文件、合约调用地址及函数信息。

地址查找模块62,用于根据所述合约调用交易在所述区块链平台中查找所述合约调用地址是否存在对应的WASM字节码BIN合约文件。

文件提取模块63,用于在未查找到所述WASM字节码BIN合约文件时,从所述区块链平台中提取与所述合约调用地址对应的Solidity字节码BIN合约文件。

第一执行调用模块64,用于当所述区块链平台的压力小于预设压力阈值时,将所述Solidity字节码BIN合约文件翻译成WASM字节码BIN合约文件,并根据所述合约调用交易对所述WASM字节码BIN合约文件进行执行调用。

第二执行调用模块65,用于当所述区块链平台的压力不小于所述预设压力阈值时,根据所述合约调用交易对Solidity字节码BIN合约文件进行执行调用。

第二存储模块66,用于将所述Solidity字节码BIN合约文件、所述接口描述ABI文件以及所述WASM字节码BIN合约文件存储至所述区块链平台以供调用。

进一步的,第一执行调用模块64包括第二文件翻译模块和执行调用模块,其中,第二文件翻译模块包括第五文件翻译单元、第六文件翻译单元、第七文件翻译单元,各个单元具体说明如下,

第五文件翻译单元包括第五翻译单元和第五构成单元,各个功能单元的详细说明具体如下:

第五翻译单元,用于在Solidity执行指令和WASM执行指令的数据格式相同且功能相同时,将Solidity执行指令翻译成WASM执行指令。

第五构成单元,用于根据所述WASM执行指令构成WASM字节码BIN合约文件。

第六文件翻译单元包括第六模拟处理单元、第六跳转路径获取单元、第六执行路径获取单元、第六路径分析单元、第六翻译单元和第六构成单元,各个功能单元的详细说明具体如下:

第六模拟处理单元,用于在Solidity执行指令和WASM执行指令的数据格式相同但功能不相同时,在所述区块链平台中对所述Solidity执行指令的操作数栈和内存进行模拟处理以得到模拟操作数栈和模拟内存。

第六跳转路径获取单元,用于在所述模拟操作数栈和所述模拟内存中对Solidity执行指令进行预执行,得到相应的预执行结果和预执行时的跳转路径。

第六执行路径获取单元,用于分析所述预执行结果和所述跳转路径,以从所述模拟操作数栈以及所述模拟内存中获得Solidity执行指令的执行路径。

第六路径分析单元,用于分析所述执行路径,以得到Solidity执行指令所对应的执行条件。

第六翻译单元,用于根据所述执行条件将Solidity执行指令翻译为WASM执行指令。

第六构成单元,用于根据所述WASM执行指令构成所述WASM字节码BIN合约文件。

第七文件翻译单元包括第七类型获取单元、第七翻译单元和第七构成单元,各个功能单元的详细说明具体如下:

第七类型获取单元、用于在Solidity执行指令和WASM执行指令的数据格式不互通时,结合所述ABI接口文件获取所述Solidity执行指令的操作数类型。

第七翻译单元,用于根据所述操作数类型将Solidity执行指令翻译成WASM执行指令。

第七构成单元,用于根据所述WASM执行指令构成所述WASM字节码BIN合约文件。

进一步的,第二文件翻译模块包括第八文件翻译单元,其中,

第八文件翻译单元包括第四翻译单元和第四构成单元,各个功能单元的详细说明具体如下:

第八翻译单元,用于在Solidity执行指令和WASM执行指令之间的内部指令构成不一致时,将所述Solidity执行指令中的call调用指令翻译成适用于所述WASM执行指令中的call调用指令;

第八构成单元,用于根据所述WASM执行指令中的call调用指令,从所述区块链平台调用预定义函数信息,并根据所述WASM执行指令中的call调用指令和所述预定义函数信息构成所述WASM字节码BIN合约文件;所述预定义函数信息为在所述区块链平台的虚拟机内部预先定义的,用于与所述区块链平台交互的函数信息。

进一步的,执行调用模块包括第一函数信息查找单元和第一提取单元和第一指令执行单元,对各单元详细说明具体如下:

第一函数信息查找单元,用于根据合约调用交易查找WASM字节码BIN合约文件中与合约调用交易对应的WASM函数信息。

第一提取单元,用于当存在WASM函数信息时,从WASM字节码BIN合约文件中取出WASM函数信息对应的WASM代码段。

第一执行指令单元,用于在区块链平台的虚拟机中执行WASM代码段的所有指令,直至执行到返回指令或停止指令为止,并生成WASM指令执行结果发送给软件开发工具包。

进一步地,第二执行调用模块65包括第二函数信息查找单元和第二指令执行单元,对各单元详细说明具体如下:

第二函数信息查找单元,用于根据合约调用交易查找Solidity字节码BIN合约文件中与合约调用交易对应的Solidity函数信息。

第二指令执行单元,用于当查找到Solidity函数信息时,在区块链平台的虚拟机中执行Solidity代码段的指令,直至执行到返回指令或停止指令为止,并生成Solidity指令执行结果发送给软件开发工具包。

进一步地,第二函数信息查找单元还包括停止执行调用单元,对停止执行调用单元详细说明具体如下:

停止执行调用单元,用于当查找不到Solidity函数信息时,则确定合约调用交易为非法交易,并停止Solidity字节码BIN合约文件的执行调用。

进一步地,第二存储模块66包括第二存储单元、第二合约地址生成单元和第三存储单元,对各单元详细说明具体如下:

第二存储单元,用于将Solidity字节码BIN合约文件、接口描述ABI文件以及WASM字节码BIN合约文件存储到区块链平台的数据库。

第二合约地址生成单元,用于在数据库中生成与WASM字节码BIN合约文件对应的WASM智能合约地址。

第三存储单元,用于将WASM字节码BIN合约文件和WASM智能合约地址形成一一对应的映射关系并存储在区块链平台的内存。

其中上述模块/单元中的“第一”和“第二”等序号的意义仅在于将不同的模块/单元加以区分,并不用于限定哪个模块/单元的优先级更高或者其它的限定意义。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块,本申请中所出现的模块的划分,仅仅是一种逻辑上的划分,实际应用中实现时可以有另外的划分方式。

关于基于区块链平台的智能合约部署装置的具体限定可以参见上文中对于基于区块链平台的智能合约部署方法的限定,在此不再赘述。上述基于区块链平台的智能合约部署装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

关于基于区块链平台的智能合约调用装置的具体限定可以参见上文中对于基于区块链平台的智能合约调用方法的限定,在此不再赘述。上述基于区块链平台的智能合约调用装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储基于区块链平台的智能合约部署和调用方法中涉及到的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于区块链平台的智能合约部署方法。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储基于区块链平台的智能合约部署和调用方法中涉及到的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于区块链平台的智能合约调用方法。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中基于区块链平台的智能合约部署和调用方法的步骤,例如图3所示的步骤301至步骤304及该方法的其它扩展和相关步骤的延伸。或者,处理器执行计算机程序时实现上述实施例中基于区块链平台的智能合约部署装置的各模块/单元的功能,例如图5所示模块50至模块53的功能。为避免重复,这里不再赘述。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中基于区块链平台的智能合约部署和调用方法的步骤,例如图4所示的步骤401至步骤407及该方法的其它扩展和相关步骤的延伸。或者,处理器执行计算机程序时实现上述实施例中基于区块链平台的智能合约调用装置的各模块/单元的功能,例如图6所示模块60至模块66的功能。为避免重复,这里不再赘述。

所述处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。

所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述计算机装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、视频数据等)等。

所述存储器可以集成在所述处理器中,也可以与所述处理器分开设置。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例中基于区块链平台的智能合约部署方法的步骤,例如图3所示的步骤301至步骤304及该方法的其它扩展和相关步骤的延伸。或者,计算机程序被处理器执行时实现上述实施例中基于区块链平台的智能合约部署和调用装置的各模块/单元的功能,例如图5所示模块50至模块53的功能。为避免重复,这里不再赘述。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例中基于区块链平台的智能合约部署和调用方法的步骤,例如图4所示的步骤401至步骤407及该方法的其它扩展和相关步骤的延伸。或者,计算机程序被处理器执行时实现上述实施例中基于区块链平台的智能合约部署和调用装置的各模块/单元的功能,例如图6所示模块60至模块66的功能。为避免重复,这里不再赘述。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

相关技术
  • 基于区块链平台的智能合约部署和调用方法及相关设备
  • 基于区块链的智能合约调用方法及装置、电子设备
技术分类

06120112587907