一种基于区块链的智能合约实现方法和装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种基于区块链的智能合约实现方法和装置。
背景技术
区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。
智能合约概念于1994年由Nick Szabo首次提出,但在区块链技术出现之前,由于缺少可信的执行环境,智能合约并没有被广泛应用。随着区块链的普及,智能合约技术得到飞速发展。由于区块链具有去中心化、不可篡改和高可用性的特点,将智能合约以数字化的形式写入区块链中,可保障对智能合约的存储、读取、执行整个过程透明可跟踪、不可篡改。
在基于区块链的智能合约的相关技术中,驱动智能合约执行且出现于一个共识周期内的交易必须在此共识周期的时间内执行完毕,以便于区块链网络上的各个节点对交易的执行结果进行确认,而在此共识周期的时间内未被执行完毕的交易则会被强制退出。然而,在短时间(例如15秒)内执行大量的交易(例如,几千甚至几万笔交易)必然会导致众多交易无法执行完毕而遭强制退出,从而导致交易确认失败,进而造成智能合约的实现受阻。
发明内容
本申请实施例提供一种基于区块链的智能合约实现方法和装置,能够在智能合约的实现过程中进行交易确认,从而达到状态一致性。
一方面,本申请实施例还提供一种基于区块链的智能合约实现方法,包括:
基于驱动智能合约的交易的标识,确定所述交易的类型,所述交易的类型包括第一类时长交易,所述第一类时长交易为执行时长大于预设值的交易;
在所述交易为所述第一类时长交易时,进行交易状态管理,以实现智能合约运行周期和共识周期的解耦。
可选地,在一个实施例中,所述在所述交易为所述第一类时长交易时,进行交易状态管理,以实现智能合约运行周期和共识周期的解耦包括:在所述交易为所述第一类时长交易时,每隔所述共识周期,获取所述交易的状态;如果所述交易的状态为就绪状态,对所述交易进行打包出块操作;如果所述交易的状态为非就绪状态时,禁止对所述交易进行打包出块操作。
可选地,在一个实施例中,所述在所述交易的状态为非就绪状态时,所述非就绪状态包括执行状态和挂起状态,如果所述交易的状态为非就绪状态,禁止对所述交易进行打包出块操作包括:如果所述交易的状态为挂起状态,将所述交易的状态从所述挂起状态转换为执行状态;在所述交易的状态为所述执行状态时,略过所述交易。
可选地,在一个实施例中,如果所述交易的状态为非就绪状态,禁止对所述交易进行打包出块操作还包括:如果处于所述执行状态的所述交易在时间片内执行完毕,将所述交易的状态从所述执行状态转换为所述就绪状态;如果处于所述执行状态的所述交易在所述时间片内未执行完毕,将所述交易的状态从所述执行状态转换为所述挂起状态;如果处于所述执行状态的所述交易在执行过程中出现异常或超时,将所述交易的状态从所述执行状态转换为回滚状态。
可选地,在一个实施例中,在所述智能合约受所述第一类时长交易驱动时,消耗的燃料的量随着所述智能合约运行时长的增长,呈线性或指数级增长。
可选地,在一个实施例中,所述交易的类型还包括第二类时长交易,所述第二类时长交易为执行时长不大于所述预设值的交易。所述方法还包括:在所述交易为所述第二类时长交易时,执行所述第二类时长交易。
可选地,在一个实施例中,所述预设值可以为所述共识周期,且所述预设值可以是可配置的。
另一方面,提供一种基于区块链的智能合约实现装置,包括:
确定模块,用于基于驱动智能合约的交易的标识,确定所述交易的类型,所述交易的类型包括第一类时长交易,所述第一类时长交易为执行时长大于预设值的交易;
管理模块,用于在所述交易为所述第一类时长交易时,进行交易状态管理,以实现智能合约运行周期和共识周期的解耦。
可选地,在一个实施例中,所述管理模块具体用于:在所述交易为所述第一类时长交易时,每隔所述共识周期,获取所述交易的状态;如果所述交易的状态为所述就绪状态,对所述交易进行打包出块操作;如果所述交易的状态为非就绪状态,禁止对所述交易进行打包出块操作。
可选地,在一个实施例中,所述非就绪状态包括执行状态和挂起状态,所述管理模块具体用于:在所述交易的状态为挂起状态时,将所述交易的状态从所述挂起状态转换为执行状态;在所述交易的状态为所述执行状态时,略过所述交易。
可选地,在一个实施例中,所述管理模块还用于:如果处于所述执行状态的所述交易在时间片内执行完毕,将所述交易的状态从所述执行状态转换为所述就绪状态;如果处于所述执行状态的所述交易在所述时间片内未执行完毕,将所述交易的状态从所述执行状态转换为所述挂起状态;如果处于所述执行状态的所述交易在执行过程中出现异常或超时,将所述交易的状态从所述执行状态转换为回滚状态。
可选地,在一个实施例中,在所述智能合约受所述第一类时长交易驱动时,消耗的燃料的量随着所述智能合约运行时长的增长,呈线性或指数级增长。
可选地,在一个实施例中,所述交易的类型还包括第二类时长交易,所述第二类时长交易为执行时长不大于所述预设值的交易,所述管理模块还用于:在所述交易为所述第二类时长交易时,执行所述第二类时长交易。
可选地,在一个实施例中,所述预设值可以为所述共识周期,且所述预设值是可配置的。
另一方面,提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机指令,当所述指令被运行时,执行上面任一种智能合约实现方法。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:
通过对驱动智能合约的交易按标识进行分类,在所述交易的执行时长大于预设值时,通过对所述交易的状态进行管理,实现智能合约运行周期和共识周期的解耦,使得出现于一个共识周期内的交易不再需要在所述共识周期内执行完毕,而是可以跨越多个共识周期而执行,从而能够在智能合约的实现过程中不会因交易遭强制退出而导致交易确认失败,从而达到状态一致性。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本申请实施例提供的一种基于区块链的智能合约实现方法的流程图;
图2是是本申请实施例提供的一种基于区块链的智能合约实现方法的流程图;
图3是本申请实施例提供的一种交易状态变化的示意图;
图4是本申请实施例提供的一种基于区块链的智能合约实现装置的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在描述本发明实施例之前,先对本申请中的一些术语进行阐释。
区块链:是一种无需中介参与,亦能在互不信任或弱信任的参与者之间维系一套不可篡改的账本记录的技术。区块链是由很多相互通信的节点组成的分布式***。区块链***根据应用场景和设计体系的不同,一般分为公有链、联盟链和私有链。公有链的各个节点是可以自由加入和退出网络,并参加链上数据的读写,运行时以扁平的拓扑结构互联互通,网络中不存在任何中心化的服务端节点。本申请实施例提供的智能合约实现方法可基于公有链。
区块链的基本概念可包括交易(Transaction)、区块(Block)和链(Chain)。其中:交易可指一次操作,导致账本状态的一次改变,如添加一条记录;区块是记录一段时间内发生的交易和状态结果,是对当前账本状态的一次共识;链是由一个个区块按照发生顺序串联而成,是整个状态变化的日志记录。如果把区块链作为一个状态机,则每次交易就是试图改变一次状态,而每次共识生成的区块,就是参与者对于区块中所有交易内容导致状态改变的结果进行确认。
节点:连接到区块链网络中的一个终端(例如,一台电脑)可以视为区块链中的一个节点。
区块链共识机制:可包括POS(proof of stake,权益证明机制)、POW(proof ofwork,工作量证明)、DPOS (Delegate Proof of Stake,股份授权证明)和PBFT(PracticalByzantine Fault Tolerance,实用拜占庭容错)。从概率角度,PBFT系列算法是确定的,一旦达成共识就不可逆转;而POW系列算法则是不确定的,随着时间推移,被推翻的概率越来越小。POW通过计算来反复猜测一个数值(nonce),使得区块链最后一个区块为基础,加上新的交易数据哈希(hash)后的结果满足预设的条件。保证在一段时间内,***中只能出现少数合法提案。这些少量的合法提案会在网络中进行广播,收到的用户进行验证后会基于它认为的最长链上继续用这个方法构造新的区块。
智能合约:是以数字形式定义的能够自动执行条款的合约,即智能合约的内容包括程序代码,可以通过执行该程序代码实现合约条款的自动执行。
在本申请中,基于区块链的智能合约构建及执行可分为如下几步:(1)多方用户共同参与制定一份智能合约;(2)智能合约通过对等(peer to peer, P2P)网络扩散并存入区块链;(3)区块链构建的智能合约自动执行。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1是本申请实施例提供的一种基于区块链的智能合约实现方法的流程图。参照图1,本申请实施例提供的基于区块链的智能合约实现方法可包括:
步骤12、基于驱动智能合约的交易的标识,确定所述交易的类型,所述交易的类型包括第一类时长交易,所述第一类时长交易为执行时长大于预设值的交易。
本申请实施例中的标识用于指示交易为何种类型。在本申请实施例中,交易可以分为第一类时长交易和第二类时长交易。其中,所述第一类时长交易为执行时长大于预设值的交易,所述第二类时长交易为执行时长不大于预设值的交易。换言之,第一类时长交易可以例如为长时长交易(Long-Range Transaction),第二类时长交易可以例如为短时长交易(Short-Range Transaction)。所述预设值在本申请实施例中可以根据实际需要而配置。例如,所述预设值为1毫秒、5毫秒、10毫秒或100毫秒等。在一个实施例中,所述预设值可以例如设置为一个共识周期的时长。
在本申请实施例中,第一类时长交易可以为需要占用较多的资源的交易,第二类时长交易可以为占用的资源较少的交易。这里提到的资源例如可以为CPU资源、内存资源和网络资源等。
在本申请实施例中,可以对驱动智能合约的每一交易都打上一个标识,此标识可以为发挥标识作用的任何形式,比如缩写字母的形式,例如A和B,其中,缩写字母A可以表示第一类时长交易,缩写字母B可以表示第二类时长交易;比如一或多个数字的形式,例如11和22,其中数字11可以表示第一类时长交易,数字22可以表示第二类时长交易;又比如一小段字符的形式,例如abc和qwe,其中abc可以表示第一类时长交易,qwe可以表示第二类时长交易。本申请实施例中的标识也可以采用其他形式,例如,数字、字母和特殊字符中的至少两种相混合的形式等。
当然,在本申请实施例中,还可以对交易设置一个默认的类型。由于交易发起方对第二类时长交易所触发的合约预计是能够比较快的执行完成的,所以可以将第二类时长交易设置为默认类型。默认类型的交易可以不设置标识,这样一来,可以通过判断交易是否携带标识来确定交易是第一类时长交易还是第二类时长交易。即,携带标识的交易为第一类时长交易,而不携带标识的交易为第二类时长交易。当然,在本申请实施例中,默认类型的交易也可以在需要时设置标识。
在本申请实施例中,交易的标识可由智能合约的程序设计人员预先设置,这样,交易在被执行时即可根据所述交易上携带的标识确定出所述交易属于何种类型的交易,进而方便进行后续处理。
在本申请实施例中,第二类时长交易可以在一个共识周期内执行完,并且可以采用单机并行处理或者网络分片的方法进行加速。对于第二类时长交易,若在小于共识周期的指定运行时间内没有执行完,则这个交易可被标记为交易失败,并可对其状态进行回滚。在本申请实施例中,第一类时长交易可能会执行比较复杂的应用逻辑,从而无法保证在极短时间(例如,一个共识周期)内完成。
步骤14、在所述交易为所述第一类时长交易时,进行交易状态管理,以实现智能合约运行周期和共识周期的解耦。
本申请实施例中的交易状态可包括:就绪状态、挂起状态和执行状态中的至少一种。智能合约运行周期和共识周期的解耦可表示,智能合约运行周期不再依赖于共识周期,也就是说,智能合约可以跨越多个共识周期而执行。
在本申请的一个实施例中,在所述交易为所述第二类时长交易时,可执行所述第二类时长交易。这样一来,通过对两种类型的交易进行区分,并进行不同处理,可以保证不同类型的交易都能得到妥善处理,以避免在智能合约的实现过程中交易确认失败,从而达到状态一致性。
需了解的是,本申请实施例提供的基于区块链的智能合约实现方法的各步骤的执行主体均可以是同一设备(例如,可为区块链网络中的任一节点),或者,该方法也可由不同设备作为执行主体。比如,步骤12的执行主体可以为设备1(例如,可为区块链网络中的一个节点),步骤14的执行主体可以为设备2(例如,可为区块链网络中的另一节点)。
同时需了解的是,本申请实施例中的基于区块链的智能合约实现方法,在实施时,确定运行要素(例如,时间,随机数和数据源)的过程可与现有技术保持一致,同时运行环境也可与相关技术保持基本一致。以时间的确定为例,可以将整个区块链看成一个时间戳服务器,并取得任意一个区块被构造时的时间戳,这样能完全保证各个分布式节点调用返回的结果都会一致。
本申请实施例通过对驱动智能合约的交易按标识进行分类,在所述交易的执行时长大于预设值时,通过对所述交易的状态进行管理,实现智能合约运行周期和共识周期的解耦,使得出现于一个共识周期内的交易不再需要在所述共识周期内执行完毕,而是可以跨越多个共识周期而执行,从而能够在智能合约的实现过程中进行交易确认,从而达到状态一致性。
可选地,在本申请的一个实施例中,步骤14中在所述交易为所述第一类时长交易时,进行交易状态管理,以实现智能合约运行周期和共识周期的解耦可包括:在所述交易为所述第一类时长交易时,每隔所述共识周期,获取所述交易的状态;如果所述交易的状态为所述就绪状态,对所述交易执行打包出块操作;如果所述交易的状态为非就绪状态时,禁止对所述交易进行打包出块操作。
在本文中提到的“打包出块操作”可表示,将交易打包成一个块发给区块链网络中的其他节点执行,以进行计算结果验证。在满足一定的条件下,例如若全网中超过三分之二的节点的计算结果相同,则可据此确定出块节点,并将出块节点出的块放入区块链中。
本申请实施例在处理第一类时长交易时,会在每一个共识周期先获取交易的状态,以确定交易的状态是否为就绪状态,只有处于就绪状态的交易才会进行打包出块操作,而处于其他状态的交易在当前共识周期并不会进行打包出块操作,这样一来,区块链网络中的各个节点在执行完处于就绪状态的交易后,能够进行交易确认,从而保证状态一致性。
在本申请的一个实施例中,所述非就绪状态包括执行状态和挂起状态,如果所述交易的状态为非就绪状态,禁止对所述交易进行打包出块操作可包括:如果所述交易的状态为挂起状态,将所述交易的状态从所述挂起状态转换为执行状态;如果所述交易的状态为所述执行状态,略过所述交易。本申请实施例在处理第一类时长交易时,若确定出交易的状态为挂起状态,通过将挂起状态转换为执行状态,可以便于后续对所述交易进行执行。
可选地,在本申请的一个实施例中,对于处于执行状态的交易,在处于所述执行状态的所述交易在时间片内执行完毕时,可将所述交易的状态从所述执行状态转换为所述就绪状态;在处于所述执行状态的所述交易在所述时间片内未执行完毕时,可将所述交易的状态从所述执行状态转换为所述挂起状态;在处于所述执行状态的所述交易在执行过程中出现异常或超时时,可将所述交易的状态从所述执行状态转换为回滚状态。本申请实施例对处理执行状态的交易基于具体情况进行状态切换,能够更好地实现对第一类时长交易的状态管理。
在本申请实施例中除了通过对交易进行分类和进行生命周期管理之外,还可以进行燃料(gas)的管理。从而,可以通过上面这三者的综合管理,能够更好地实现在智能合约的实现过程中进行交易确认,从而达到状态一致性,具体地,在本申请的一个实施例中,可对第一类时长交易驱动的智能合约做有偿管理,建立智能合约的运行时间和燃料消耗数量的对应关系。例如,在所述智能合约受所述第一类时长交易驱动时,消耗的燃料的量随着所述智能合约运行时长的增长,呈线性增长或指数级增长。这样一来,可以在经济成本上对第一类时长交易驱动的智能合约进行管控,确保不会有人通过第一类时长交易来作恶,比如恶意的长期占用***计算资源。
图2是本申请实施例提供的一种基于区块链的智能合约实现方法的流程图。参照图2,本申请实施例提供的基于区块链的智能合约实现方法可包括:
步骤22、基于驱动智能合约的交易的标识,确定所述交易的类型,所述交易的类型包括第一类时长交易和第二类时长交易。
其中,所述第一类时长交易为执行时长大于预设值的交易,所述第二类时长交易为执行时长不大于预设值的交易。
步骤24、在所述交易为所述第一类时长交易时,每隔所述共识周期,获取所述交易的状态,以确定所述交易的状态是否为就绪状态。
步骤26、在所述交易的状态为所述就绪状态时,对所述交易进行打包出块操作。
步骤28、在所述交易的状态为挂起状态时,将所述交易的状态从所述挂起状态转换为所述执行状态。
步骤30、在所述交易的状态为执行状态时,基于具体情况进行状态转换操作。步骤30可涵盖如下情形:
步骤301、在处于所述执行状态的所述交易在时间片内执行完毕时,将所述交易的状态从所述执行状态转换为所述就绪状态;
步骤302、在处于所述执行状态的所述交易在所述时间片内未执行完毕时,将所述交易的状态从所述执行状态转换为所述挂起状态;
步骤303、在处于所述执行状态的所述交易在执行过程中出现异常或超时时,将所述交易的状态从所述执行状态转换为回滚状态。
步骤32、在所述交易为所述第二类时长交易时,直接执行所述第二类时长交易。
需了解的是,图3所示各个步骤的相关内容可参照前文描述,在此不再赘述。
本文中提到的状态切换过程也可参照图3所示,由图3可知,假定交易A为第一类时长交易,交易A在受理后可以处于挂起状态。在共识周期T1,处于挂起状态的交易A可被调度执行,以从挂起状态转换成执行状态。若在共识周期T1,交易A尚未在时间片内执行完则回到挂起状态,并备于在下一个共识周期T2再执行。在共识周期T2,若交易A在时间片内执行完,则从执行状态转换成就绪状态,若在执行过程中出现异常或超时时,则从执行状态转换为回滚状态。在第N个共识周期Tn,其中N大于2,若交易A已处于就绪状态,则对交易A进行打包出块操作。需了解的是,图3所示示意图只是一种状态管理的示意说明,并不意为限制。
本申请实施例提供的基于区块链的智能合约实现方法,通过标识对交易进行分类处理,并通过状态管理来实现对第一类时长交易的生命周期管理,可以保证不同类型的交易都能得到妥善处理,以避免在智能合约的实现过程中交易确认失败,同时可以保证第一类时长交易可以跨越多个共识周期而执行,从而能够在智能合约的实现过程中进行交易确认,从而达到状态一致性。
同时需了解,在本申请实施例中除了通过对交易进行分类和进行生命周期管理之外,还可以进行燃料(gas)的管理。从而,可以通过上面这三者的综合管理,能够更好地实现在智能合约的实现过程中进行交易确认,从而达到状态一致性,具体地,在本申请的一个实施例中,可对第一类时长交易驱动的智能合约做有偿管理,建立智能合约的运行时间和燃料消耗数量的对应关系。例如,在所述智能合约受所述第一类时长交易驱动时,消耗的燃料的量随着所述智能合约运行时长的增长,呈线性增长或指数级增长。这样一来,可以在经济成本上对第一类时长交易驱动的智能合约进行管控,确保不会有人通过第一类时长交易来作恶,比如恶意的长期占用***计算资源。
图4是本申请实施例提供的一种基于区块链的智能合约实现装置的结构框图。参照图4,本申请实施例提供的基于区块链的智能合约实现装置40可包括:确定模块41和管理模块42。其中:
确定模块41,用于基于驱动智能合约的交易的标识,确定所述交易的类型,所述交易的类型包括第一类时长交易,所述第一类时长交易为执行时长大于预设值的交易;
管理模块42,用于在所述交易为所述第一类时长交易时,进行交易状态管理,以实现智能合约运行周期和共识周期的解耦。
可选地,在一个实施例中,所述管理模块42具体用于:在所述交易为所述第一类时长交易时,每隔所述共识周期,获取所述交易的状态;如果所述交易的状态为就绪状态,对所述交易进行打包出块操作;如果所述交易的状态为非就绪状态时,禁止对所述交易进行打包出块操作。
可选地,在一个实施例中,所述非就绪状态包括执行状态和挂起状态,所述管理模块42具体用于:如果所述交易的状态为挂起状态,将所述交易的状态从所述挂起状态转换为执行状态;如果所述交易的状态为所述执行状态,略过所述交易。
可选地,在一个实施例中,所述管理模块42还用于:如果处于所述执行状态的所述交易在时间片内执行完毕,将所述交易的状态从所述执行状态转换为所述就绪状态;如果处于所述执行状态的所述交易在所述时间片内未执行完毕,将所述交易的状态从所述执行状态转换为所述挂起状态;如果处于所述执行状态的所述交易在执行过程中出现异常或超时,将所述交易的状态从所述执行状态转换为回滚状态。
可选地,在一个实施例中,在所述智能合约受所述第一类时长交易驱动时,消耗的燃料的量随着所述智能合约运行时长的增长,呈线性或指数级增长。
可选地,在一个实施例中,所述交易的类型还包括第二类时长交易,所述第二类时长交易为执行时长不大于所述预设值的交易,所述管理模块42还用于:在所述交易为所述第二类时长交易时,执行所述第二类时长交易。
可选地,在一个实施例中,所述预设值可以为所述共识周期,且所述预设值是可配置的。
本申请实施例提供的基于区块链的智能合约实现装置,通过对驱动智能合约的交易按标识进行分类,在所述交易的执行时长大于预设值时,通过对所述交易的状态进行管理,实现智能合约运行周期和共识周期的解耦,使得出现于一个共识周期内的交易不再需要在所述共识周期内执行完毕,而是可以跨越多个共识周期而执行,从而能够在智能合约的实现过程中进行交易确认,从而达到状态一致性。
另外,本申请实施例可提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机指令,当所述指令被运行时,执行上面任一种智能合约实现方法。
本申请实施例提供的计算机可读存储介质,通过对驱动智能合约的交易按标识进行分类,在所述交易的执行时长大于预设值时,通过对所述交易的状态进行管理,实现智能合约运行周期和共识周期的解耦,使得出现于一个共识周期内的交易不再需要在所述共识周期内执行完毕,而是可以跨越多个共识周期而执行,从而能够在智能合约的实现过程中进行交易确认,从而达到状态一致性。
另外,本申请实施例还可提供一种区块链节点,所述区块链节点例如可以为电脑或服务器,且可包括存储介质和处理器。其中,所述存储介质,适于存储多条指令;所述处理器,适于执行存储介质上存储的各种指令。当所述存储介质上存储的指令被处理器运行时可实现上文所描述的任一种基于区块链的智能合约实现方法。
本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM) 和/或非易失性内存等形式,如只读存储器 (ROM) 或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体 (transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、***或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。