CN112258325B - 一种智能合约执行方法、装置及存储介质 - Google Patents
一种智能合约执行方法、装置及存储介质 Download PDFInfo
- Publication number
- CN112258325B CN112258325B CN202011523845.0A CN202011523845A CN112258325B CN 112258325 B CN112258325 B CN 112258325B CN 202011523845 A CN202011523845 A CN 202011523845A CN 112258325 B CN112258325 B CN 112258325B
- Authority
- CN
- China
- Prior art keywords
- contract
- complexity
- internal variable
- execution
- contract method
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
Abstract
本发明公开了一种智能合约执行、装置和存储介质,以解决传统方案经常出现合约调用失败的情况,实用性较差的问题。方法部分包括:可以依据设置合约方法设置的内部变量,去获取反映了合约实际执行情况的当前内部变量值、最终内部变量值,重新调整执行的调整复杂度,并依据所述调整复杂度执行所述合约方法,有利于合约方法执行的成功率,提高了实用性。
Description
技术领域
本发明涉及区块链技术领域,尤其涉及一种智能合约执行方法、装置及存储介质。
背景技术
智能合约的执行,需要区块链GAS,该GAS是衡量智能合约的执行操作所需的计算量的单位,也称为“燃料”。智能合约的执行都是要在一定的区块链GAS(GAS limit)消耗内完成执行,如果在一定的区块链GAS消耗内未执行完该智能合约,将导致该智能合约执行失败,只能抛错给合约调用者,发明人意识到,随着区块链在大数据领域的应用越来越多,智能合约的合约函数越来越复杂,由于GAS limit的影响,智能合约执行失败将频繁出现,不利于智能合约的应用,实用性较差。
发明内容
本发明实施例提供一种智能合约执行方法、装置及存储介质,以解决智能合约执行失败将频繁出现,不利于智能合约的应用,实用性较差的问题。
第一方面,提供了一种智能合约执行方法,包括如下步骤:调用智能合约的合约方法,并执行所述合约方法,所述智能合约的每个合约方法引入对应的内部变量,所述内部变量随对应所述合约方法的执行复杂度而自增;当在区块链GAS消耗完后为未执行完所述合约方法时,根据所述合约方法的预估复杂度、所述合约方法对应的当前内部变量值和最终内部变量值,获取调整复杂度,其中,所述最终内部变量值为所述合约方法被执行完时,所述合约方法对应的内部变量的最终自增值;依据所述调整复杂度执行所述合约方法。
进一步,根据预估复杂度、合约方法对应的当前内部变量值和最终内部变量值,获取调整复杂度,指的是:
通过如下公式获取调整复杂度:
进一步,依据调整复杂度执行合约方法之后,该方法还包括如下步骤a-e。
a、判断合约方法是否执行完;
b、当依据调整复杂度执行合约方法时未执行完该合约方法,则将当前的所述调整复杂度作为新的预估复杂度,并依据所述新的预估复杂度重新计算得到新的调整复杂度;
c、依据新的调整复杂度再次执行合约方法;
e、重复执行步骤a-c,直至合约方法被执行完,或者直至重复次数超过预设次数且合约方法未被执行完。
进一步,方法还包括如下步骤:当依据调整复杂度执行合约方法时执行完合约方法,则向合约调用端反馈调整成功确认信息,所述调整成功确认信息包含所述调整复杂度。
进一步,方法还包括如下步骤:当直至重复次数超过预设次数且合约方法未被执行完,则向合约调用端反馈合约执行错误信息。
进一步,方法还包括如下步骤:当在所述区块链GAS未消耗完前执行完所述合约方法,则根据所述预估复杂度、GAS最大极限值、GAS实际消耗值、当前内部变量值和最终内部变量值,获取推荐复杂度,其中,所述GAS实际消耗值为执行完所述合约方法所消耗的实际区块链GAS值;将推荐复杂度反馈给合约调用端。
进一步,上述根据预估复杂度、GAS最大极限值、GAS实际消耗值、当前内部变量值和最终内部变量值,获取推荐复杂度,指的是:
通过如下公式获取推荐复杂度:
a+b=1,a>0,b>0,0<c<1;
其中,VR表示所述推荐复杂度,GASLimit表示所述GAS最大极限值,GASreality表示所述GAS实际消耗值,a、b和c为调试参数,VC表示所述预估复杂度,所述Pi表示所述当前内部变量值。
第二方面,提供了一种智能合约执行装置,包括执行模块和获取模块,其中:
执行模块,用于调用智能合约的合约方法,并执行所述合约方法,所述智能合约的每个合约方法引入对应的内部变量,所述内部变量随对应所述合约方法的执行复杂度而自增;
获取模块,用于当在区块链GAS消耗完后为未执行完所述合约方法时,根据所述合约方法的预估复杂度、所述合约方法对应的当前内部变量值和最终内部变量值,获取调整复杂度,其中,所述最终内部变量值为所述合约方法被执行完时,所述合约方法对应的内部变量的最终自增值;
所述执行模块,用于依据所述调整复杂度执行所述合约方法。
第三方面,提供了一种智能合约执行装置,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述智能合约执行方法的步骤。
第四方面,提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现上述智能合约执行方法的步骤。
上述智能合约执行方法所提供的方案中,通过在智能合约的合约内部引入内部变量的方式,去获取执行合约方法时的具体执行情况,当在区块链GAS消耗完后为未执行完所述合约方法时,说明之前的合约调用时,由于合约复杂度限制,导致无法执行,从而在GAS消耗完后依旧未执行完所述合约方法,因此,本发明可以依据设置的内部变量,去获取反映了合约实际执行情况的当前内部变量值、最终内部变量值,重新调整执行的调整复杂度,并依据所述调整复杂度执行所述合约方法,有利于合约方法执行的成功率,提高了实用性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例中区块链系统的一系统框架示意图;
图2是本发明一实施例中智能合约执行方法的一流程示意图;
图3是本发明一实施例中智能合约的内部结构示意图;
图4是本发明一实施例中智能合约执行方法的另一流程示意图;
图5是本发明一实施例中智能合约执行装置的一结构示意图;
图6是本发明一实施例中智能合约执行装置的另一结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种智能合约执行方法,该智能合约方法应用如图1所示的区块链系统中,该区块链系统包括区块链平台和合约调用端,区块链平台中部署有智能合约,合约调用端通过智能合约的合约地址,可以从该区块链平台中调用该智能合约,以使区块链平台的合约执行引擎执行对应的智能合约,从而完成智能合约的合约方法的调用,以完成对应的执行逻辑。其中,基于传统的方案,在智能合约的调用并执行过程中,易受GASlimit的影响导致合约调用和执行失败的情况,本发明实施例提供了一种新的智能合约执行方法,下面对本发明实施例所提供的智能合约执行方法进行详细的描述。
请参阅图2所示,本发明实施例所提供的智能合约执行方法,包括如下步骤:
S10:调用智能合约的合约方法,并执行合约方法。
在向区块链平台部署完智能合约之后,合约调用端便可利用该智能合约的合约地址,向区块链平台发送智能合约调用交易请求,以调用该智能合约的合约方法,以使合约执行引擎能调用并执行该智能合约的合约方法。
如图3所示,该部署至区块链平台的智能合约,与传统的智能合约所有差异,该智能合约包括多个合约方法,如包括合约方法1、合约方法2、...、合约方法i,本发明实施例中,对每个合约方法引入用于评估该合约方法执行百分比的内部变量P,也就是说,对每个合约方法引入用于评估该合约方法执行复杂度情况的内部变量P,如果有多个方法则引入多个相应的内部变量,所引入的内部变量的数量与智能合约的合约方法的数量相对应,也即:每个合约方法对应一内部变量,可分别记作:P1,P2,P3,...,Pi;另外,还会在合约内部的每个合约方法中,分别引入对应的内部方法increment(),也即,包括与上述i个合约方法一一对应的increment(),可记为:increment(P1)、increment(P2)、...、increment(Pi)。
其中,内部increment()会对应合约方法的执行,对进行相应的内部变量进行自增,自增的数值体现了对应合约方法的复杂度。举个简单例子,若合约方法i用于计算1+2+...+100,会预计做了99次加法,所以相应的内部变量Pi自增为99,复杂度为99。需要说明的是,该例子在此仅为便于说明本发明实施例中的复杂度是什么意思,在以及应用中,合约方法往往比较复杂和多样,在此不一一举例说明。另外需要说明的,这里以每次加法的复杂度为“1”为例进行说明,对于其他操作,例如乘法或者其他运算、调用操作,均有对应的复杂度,在此不一一限定和说明。
S20:当区块链GAS消耗完后为未执行完合约方法时,根据预估复杂度、当前内部变量值、最终内部变量值,获取调整复杂度。
S30:依据调整复杂度执行合约方法。
本发明实施例中,在执行智能合约时间,需先获取预估复杂度,并依据预估复杂度Ve执行合约方法。再举例说明,比如合约方法中做加法循环,开发者知道计算1+2+3…+100000000,共计算了100000000次加法,那么100000000便是该合约方法对应预估复杂度。需要说明的是,上述例子仅为示例性说明,并不对本发明造成限定。另外,智能合约是由开发人员所编写,开发人员具有了解智能合约中,每个合约方法的预估复杂度,在实现本方案中,可以将智能合约的每个预估复杂度传递该合约执行引擎,以便合约执行引擎获取到该预估复杂度。
其中,所述最终内部变量值为所述合约方法被执行完时,所述合约方法对应的内部变量的最终自增值。在一些应用场景中,由于当前合约执行引擎还未执行完合约方法,合约执行引擎可以由该合约方法的上个成功执行完的合约调用端获取到。
可以理解,根据执行合约方法之后,存在两种情况,一种是在区块链GAS未消耗完前执行完合约方法,另一种是,在区块链GAS消耗完后依旧未执行完合约方法。在本发明实施例中,当在区块链GAS消耗完后为未执行完合约方法时,便根据预估复杂度、当前内部变量值、最终内部变量值,获取调整复杂度。
需要说明的是,合约方法的当前内部变量值指的是执行完该合约方法后,引入的内部方法进行自增后的内部变量值,也就是说,当前执行该合约方法时执行到何种复杂度,举个例子,比如合约方法中做加法循环,计算1+2+3…+100000000,可能GAS消耗完前,计算到1+2+3…+9999,那么9999便是该合约方法对应的当前内部变量值,依据执行合约方法时未执行完对应的当前内部变量值,便可知道当前该合约方法执行到那种复杂度,便于依据该当前内部变量值和最终内部变量值,去选择出合适的执行复杂度,也即调整复杂度。再举个简单的例子,例如一合约方法,调用该合约方法用于计算1+2+3…+100000000,可能计算到1+2+3…+100000000时,GAS消耗完了,但计算1+2+3…—+100,GAS绰绰有余,100对应的便是该合约方法对应的最终内部变量值。
可见,本发明实施例中,利用内部方法和内部变量,可反映出区块链GAS消耗完后对应的当前该合约方法的内部变量的自增值,从而了解到合约执行情况,也即执行到那种复杂度,从而基于利用上述方法计算出调整复杂度继续执行合约方法,以减少或避免在GAS消耗完后为未执行完合约方法。例如,在第二次调用时,由于知道了执行1+2+3…+100000000时,执行不完,那么就可以调整执行复杂度,只1+2+3+...600000,在GAS消耗完前执行相应的操作,以避免一次性执行不完该合约方法导致调用失败。
可见,在本发明实施例中,提供了智能合约执行方法,通过内部引入内部方法和内部变量的方式,去获取执行合约方法时的具体执行情况,当在GAS消耗完后为未执行完合约方法时,说明之前的合约调用时,执行复杂度不合理,导致GAS消耗完后依旧未执行完合约方法,因此,本发明实施例会利用反映了合约实际执行复杂度情况的当前内部变量值、最终内部变量值,重新获取调整复杂度,并依据调整复杂度执行合约方法,有利于提高合约方法执行的成功率。
其中,作为一个示例,根据预估复杂度、当前内部变量值、最终内部变量值,获取调整复杂度,指的是通过如下公式获取调整复杂度:
可以理解的是,通过上述公式的计算逻辑可以看出,是择优选取下次调用时执行复杂度的过程,从而逼近更优的能避免执行失败的执行进度,得到调整复杂度VA。
在一实施例中,依据调整复杂度VA执行合约方法之后,方法还包括如下步骤:
a、判断合约方法是否执行完;
b、当依据调整复杂度VA执行合约方法时未执行完所述合约方法,将当前的调整复杂度VA作为新的预估复杂度VC,并依据所述新的预估复杂度重新计算得到新的调整复杂度VA;
c、依据新的调整复杂度VA执行合约方法;
d、重复执行步骤a-c,直至合约方法被执行完,或者直至重复次数超过预设次数且合约方法未被执行完。
该实施例中,当第一次调整得到调整复杂度VA并执行时,若发现合约方法还是未执行完,则会继续将上轮计算的调整复杂度VA作为公式(1)的VC,从而计算出新的调整复杂度VA并再次执行合约方法,如此反复,直至合约方法被执行完,或者直至重复次数超过预设次数且合约方法未被执行完。可以看出,本发明实施例中,通过不断逼近的方式,使得选出合适的调整复杂度再次执行合约。当依据调整复杂度VA执行合约方法时执行完,则向合约调用端反馈包含有调整复杂度的调整成功确认信息,以便下次合约调用端可以依据相应的调整复杂度VA,去执行合约方法。当直至重复次数超过预设次数且合约方法未被执行完,则向合约调用端反馈合约执行错误信息。其中,该重复次数可以依据经验所设定,具体不做限定。在一实施例中,当直至重复次数超过预设次数且合约方法未被执行完,则向合约调用端反馈合约执行错误信息。例如,该重复次数可以是3次,如果反复执行3次方法依旧没有执行完则向合约调用者抛错。在一实施例中,相反的,当依据调整复杂度VA执行合约方法时执行完,则向合约调用端反馈调整成功确认信息,以提供给合约调用者下次调用时参考。
可见,在该实施例中,当GAS消耗完后依据未执行完合约方法时,会导致调用失败,本发明实施例中,会自动重试,从而找出最合适的执行复杂度再次调用,能快速逼近最优的复杂度去调用和执行合约方法。
在一实施例中,如图4所述,该方法还包括如下步骤:
S40:当在区块链GAS未消耗完前执行完合约方法时,根据预估复杂度、GAS最大极限值、GAS实际消耗值、内部变量值和最终内部变量值,获取推荐复杂度,其中,所述GAS实际消耗值为执行完所述合约方法所消耗的实际区块链GAS值。
S50:将推荐复杂度反馈给合约调用端。
如前面,根据预估复杂度执行合约方法之后,存在两种情况,一种是在区块链GAS未消耗完前执行完合约方法,另一种是,在区块链GAS消耗完后依旧未执行完合约方法。在本发明实施例中,当在区块链GAS未消耗完前执行完合约方法时,会获取GAS最大极限值和合约方法的GAS实际消耗值,并获取合约方法当前的内部变量值和最终内部变量值,并进一步结合预估复杂度、GAS最大极限值、GAS实际消耗值、内部变量值和最终内部变量值,获取推荐复杂度,用于传给下个合约调用端调用或者自调复杂度时参考。
需要说明的是,GAS最大极限值是指当前区块链平台提供的GAS最大消耗极限值,合约方法的GAS实际消耗值,是指执行该合约方法所实际消耗的GAS值,合约方法的当前内部变量值指的是执行完该合约方法后,引入的内部方法进行自增后的内部变量值。
本发明中,当在GAS未消耗完前执行完合约方法,可以充分依据执行完的情况获取到相关参数,从而计算出合适的推荐复杂度,用于下次调用时使用,或者用于合约内部自动调整时使用。这里想说明的是,经过执行完合约方法,根据预估复杂度、GAS最大极限值、GAS实际消耗值、内部变量值和最终内部变量值,可以获取一个用于下次使用的,以减少或避免会调用失败的情况出现。具体地,根据预估复杂度、GAS最大极限值、GAS实际消耗值、内部变量值和最终内部变量值,获取推荐复杂度,指的是通过如下公式进行计算:
a+b=1,a>0,b>0,0<c<1;
其中,其中,VR表示推荐复杂度,GASLimit表示GAS最大极限值,GASreality表示GAS实际消耗值,a、b和c为调试参数,VC表示预估复杂度,Pi表示当前内部变量值。当再次调用合约方法时,合约调用端便可依据推荐复杂度Vr执行合约方法,从而提高合约调用的成功率,可见,本发明实施例中,能自动重试,且能快速逼近最优的执行复杂度,也可以自动调整执行复杂度的值,或者由调用者自行决定执行复杂度,灵活度高。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
在一实施例中,提供一种智能合约执行装置,该智能合约执行装置与上述实施例中智能合约执行方法一一对应。如图5所示,该智能合约执行装置包括执行模块101和获取模块102。各功能模块详细说明如下:
执行模块101,调用智能合约的合约方法,并执行所述合约方法,所述智能合约的每个合约方法引入对应的内部变量,所述内部变量随对应所述合约方法的执行复杂度而自增;
获取模块102,用于当在区块链GAS消耗完后为未执行完所述合约方法时,根据所述合约方法的预估复杂度、所述合约方法对应的当前内部变量值和最终内部变量值,获取调整复杂度,其中,所述最终内部变量值为所述合约方法被执行完时,所述合约方法对应的内部变量的最终自增值;
所述执行模块101,用于依据所述调整复杂度执行所述合约方法。
在一实施例中,所述获取模块,具体用于:通过如下公式获取所述调整复杂度:
在一实施例中,
所述执行模块还用于:a、判断所述合约方法是否执行完;
所述获取模块还用于:b、当依据所述调整复杂度执行所述合约方法时未执行完所述合约方法,则将当前的所述调整复杂度作为新的预估复杂度,并依据所述新的预估复杂度重新计算得到新的调整复杂度;
所述执行模块还用于:c、依据所述新的调整复杂度再次执行所述合约方法;并重复执行所述步骤a-c,直至所述合约方法被执行完,或者直至所述重复次数超过预设次数且所述合约方法未被执行完。
在一实施例中,所述智能合约执行装置还包括发送模块,所述发送模块,用于当依据所述调整复杂度执行所述合约方法时执行完所述合约方法,则向合约调用端反馈调整成功确认信息,所述调整成功确认信息包含所述调整复杂度。
在一实施例中,所述发送模块还用于:当直至所述重复次数超过预设次数且所述合约方法未被执行完,则向所述合约调用端反馈合约执行错误信息。
在一实施例中,所述获取模块还用于:当在所述区块链GAS未消耗完前执行完所述合约方法,则根据所述预估复杂度、GAS最大极限值、GAS实际消耗值、当前内部变量值和最终内部变量值,获取推荐复杂度,其中,所述GAS实际消耗值为执行完所述合约方法所消耗的实际区块链GAS值;
所述发送模块还用于:将所述推荐复杂度反馈给所述合约调用端。
在一实施例中,所述获取模块,具体用于:
通过如下公式获取所述推荐复杂度:
a+b=1,a>0,b>0,0<c<1;
其中,VR表示所述推荐复杂度,GASLimit表示所述GAS最大极限值,GASreality表示所述GAS实际消耗值,a、b和c为调试参数,VC表示所述预估复杂度,所述Pi表示所述当前内部变量值。
上述智能合约执行装置所提供的方案中,提供了智能合约执行方法,通过内部引入内部方法和内部变量的方式,去获取执行合约方法时的具体执行情况,当在GAS消耗完后为未执行完所述合约方法时,说明之前的合约调用时,由于合约复杂度限制,导致无法执行,从而在GAS消耗完后依旧未执行完所述合约方法,因此,本发明实施例会利用反映了合约实际执行情况的当前内部变量值、最终内部变量值,重新调整执行的调整复杂度,并依据所述调整复杂度执行所述合约方法,有利于合约方法执行的成功率。
关于智能合约执行装置的具体限定可以参见上文中对于智能合约执行方法的限定,在此不再赘述。上述智能合约执行装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种智能合约执行装置,该智能合约执行装置是区块链平台中的合约执行引擎,其内部结构图可以如图6所示。该智能合约执行装置包括通过系统总线连接的处理器、存储器、网络接口。其中,该智能合约执行装置的处理器用于提供计算和控制能力。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该智能合约执行装置的网络接口用于与外部的合约调用端通过连接通信。该计算机程序被处理器执行时以实现一种智能合约执行方法。
在一个实施例中,提供了一种智能合约执行装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
调用智能合约的合约方法,并执行所述合约方法,所述智能合约的每个合约方法引入对应的内部变量,所述内部变量随对应所述合约方法的执行复杂度而自增;
当在区块链GAS消耗完后为未执行完所述合约方法时,根据所述合约方法的预估复杂度、所述合约方法对应的当前内部变量值和最终内部变量值,获取调整复杂度,其中,所述最终内部变量值为所述合约方法被执行完时,所述合约方法对应的内部变量的最终自增值;
依据所述调整复杂度执行所述合约方法。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
调用智能合约的合约方法,并执行所述合约方法,所述智能合约的每个合约方法引入对应的内部变量,所述内部变量随对应所述合约方法的执行复杂度而自增;
当在区块链GAS消耗完后为未执行完所述合约方法时,根据所述合约方法的预估复杂度、所述合约方法对应的当前内部变量值和最终内部变量值,获取调整复杂度,其中,所述最终内部变量值为所述合约方法被执行完时,所述合约方法对应的内部变量的最终自增值;
依据所述调整复杂度执行所述合约方法。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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)等。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (10)
1.一种智能合约执行方法,其特征在于,包括:
调用智能合约的合约方法,并执行所述合约方法,所述智能合约的每个合约方法引入对应的内部变量,所述内部变量为用于评估当前所述合约方法执行百分比的内部变量,所述内部变量的当前内部变量值随所述合约方法当前的执行复杂度而自增;
当在区块链GAS消耗完后为未执行完所述合约方法时,根据所述合约方法的预估复杂度、所述合约方法对应的当前内部变量值和最终内部变量值获取调整复杂度,其中,所述最终内部变量值为所述合约方法被执行完时,所述合约方法对应的内部变量的最终自增值,所述最终自增值为通过上个成功执行完所述合约方法的合约调用端获取到;
依据所述调整复杂度执行所述合约方法。
3.如权利要求1或2所述的智能合约执行方法,其特征在于,所述依据所述调整复杂度执行所述合约方法之后,所述方法还包括如下步骤:
a、判断所述合约方法是否执行完;
b、当依据所述调整复杂度执行所述合约方法时未执行完所述合约方法,则将当前的所述调整复杂度作为新的预估复杂度,并依据所述新的预估复杂度重新计算得到新的调整复杂度;
c、依据所述新的调整复杂度再次执行所述合约方法;
d、重复执行步骤a-c,直至所述合约方法被执行完,或者直至所述重复次数超过预设次数且所述合约方法未被执行完。
4.如权利要求3所述的智能合约执行方法,其特征在于,所述方法还包括:
当依据所述调整复杂度执行所述合约方法时执行完所述合约方法,则向合约调用端反馈调整成功确认信息,所述调整成功确认信息包含所述调整复杂度。
5.如权利要求3所述的智能合约执行方法,其特征在于,所述方法还包括:
当直至所述重复次数超过预设次数且所述合约方法未被执行完,则向所述合约调用端反馈合约执行错误信息。
6.如权利要求1所述的智能合约执行方法,其特征在于,所述方法还包括:
当在所述区块链GAS未消耗完前执行完所述合约方法,则根据所述预估复杂度、GAS最大极限值、GAS实际消耗值、当前内部变量值和最终内部变量值,获取推荐复杂度,其中,所述GAS实际消耗值为执行完所述合约方法所消耗的实际区块链GAS值;
将所述推荐复杂度反馈给所述合约调用端。
8.一种智能合约执行装置,其特征在于,包括:
执行模块,用于调用智能合约的合约方法,并执行所述合约方法,所述智能合约的每个合约方法引入对应的内部变量,所述内部变量为用于评估当前所述合约方法执行百分比的内部变量,所述内部变量的当前内部变量值随对应所述合约方法当前的执行复杂度而自增;
获取模块,用于当在区块链GAS消耗完后为未执行完所述合约方法时,根据所述合约方法的预估复杂度、所述合约方法对应的当前内部变量值和最终内部变量值,获取调整复杂度,其中,所述最终内部变量值为所述合约方法被执行完时,所述合约方法对应的内部变量的最终自增值;
所述执行模块,用于依据所述调整复杂度执行所述合约方法。
9.一种智能合约执行装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述智能合约执行方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述智能合约执行方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011523845.0A CN112258325B (zh) | 2020-12-22 | 2020-12-22 | 一种智能合约执行方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011523845.0A CN112258325B (zh) | 2020-12-22 | 2020-12-22 | 一种智能合约执行方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112258325A CN112258325A (zh) | 2021-01-22 |
CN112258325B true CN112258325B (zh) | 2021-05-28 |
Family
ID=74225825
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011523845.0A Active CN112258325B (zh) | 2020-12-22 | 2020-12-22 | 一种智能合约执行方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112258325B (zh) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11144893B2 (en) * | 2017-10-30 | 2021-10-12 | Nec Corporation | Method and system for securing smart contracts in blockchains |
CN109710385A (zh) * | 2018-12-29 | 2019-05-03 | 杭州趣链科技有限公司 | 一种基于Java虚拟机的智能合约复杂度限制方法 |
CN110135986B (zh) * | 2019-04-23 | 2024-01-16 | 武汉大学 | 一种基于区块链智能合约实现的可搜索加密文件数据方法 |
-
2020
- 2020-12-22 CN CN202011523845.0A patent/CN112258325B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112258325A (zh) | 2021-01-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110555769A (zh) | 区块链交易数据处理方法、装置、计算机设备和存储介质 | |
CN114625507B (zh) | 基于有向无环图的任务调度方法、系统、设备及存储介质 | |
US20200379748A1 (en) | Upgrading method and apparatus | |
CN111224733A (zh) | 时间校准方法、装置、计算机设备和存储介质 | |
CN112258325B (zh) | 一种智能合约执行方法、装置及存储介质 | |
CN110955591B (zh) | 系统性能评估方法、装置、计算机设备和存储介质 | |
CN110933022A (zh) | 区块处理方法、装置、计算机设备及存储介质 | |
CN114385485A (zh) | 接口测试方法、装置、设备及存储介质 | |
CN110727509A (zh) | 任务调度方法、装置、计算机设备和存储介质 | |
CN109190888A (zh) | 项目评估分配方法、装置、终端设备及存储介质 | |
CN113553088A (zh) | 补丁包发布方法、装置、计算机设备和存储介质 | |
CN110647439A (zh) | 确认区块链系统部署方法、装置、计算机设备及存储介质 | |
CN111047322A (zh) | 基于区块链的智能合约部署方法、装置及硬件设备 | |
CN115576810A (zh) | 一种实时告警的自动化测试方法、系统、介质及计算装置 | |
CN109358981B (zh) | 存储器读取错误纠正方法、系统、计算机设备和存储介质 | |
CN111736893B (zh) | 一种软件包版本核验方法及相关装置 | |
CN115330572A (zh) | 数据处理方法、数据核算系统、设备、介质和程序产品 | |
CN108710557B (zh) | 分布式软件程序数据一致性的判断方法及系统 | |
CN110457205A (zh) | 接口测试方法、装置、计算机设备和存储介质 | |
CN111198758A (zh) | 基于SSH的Windows软件启动方法、装置和计算机设备 | |
US20220269244A1 (en) | Control method, apparatus, system, device and medium for production equipment | |
CN115408249B (zh) | 压力测试方法、装置、计算机设备和存储介质 | |
CN115543850A (zh) | 应用程序接口测试方法、装置、计算机设备及存储介质 | |
CN115936611A (zh) | 产品链路巡检方法、电子设备及存储介质 | |
CN116932387A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |