智能合约的调度方法及装置与流程

文档序号:15931344发布日期:2018-11-14 01:41阅读:314来源:国知局

本发明涉及智能合约的技术领域,更具体而言,涉及智能合约的调度方法及装置。

背景技术

智能合约是代码和数据的集合,也叫“可编程合约”。一般而言,智能合约是通过程序编码定义的,并且预设了执行条件;当触发执行条件时执行行为。其中的“智能”是执行上的智能,也就是说,如果达到某个预设条件,则合约自动执行。

当前,基于区块链技术的智能合约的主要基于ibm超级账本(hyperledger)、fabric区块链框架中的chaincode以及以太坊(ethereum)区块链框架中的chaincode等。通常情况下,智能合约的生成和实现包括利用前端编写智能合约程序代码(例如,使用solidity、java、go和python等计算机语言),然后通过远程调用方式在合约虚拟机中对智能合约程序进行调度和执行。

然而,当前智能合约的调度和执行存在若干缺陷。当前的各个智能合约类似于各个独立的程序(或代码),每个程序在不同的虚拟机中单独执行,而且每个智能合约通常只执行一次。这样,一方面造成智能合约运行效率的低下,并且难以实现智能合约的长时间、周期性的执行。

背景技术部分公开的信息只是为了加强对本发明的一般背景的理解,不应视为承认或默认这种信息构成本领域技术人员已知的现有技术。



技术实现要素:

鉴于背景技术中的上述问题,本发明要解决的技术问题包括以下问题中的一个或多个:如何提高智能合约(特别是多个智能合约)的运行效率,如何提高智能合约设计和运行的灵活性和多样性。

为此,本发明提供一种智能合约的调度方法,包括以下步骤:读取和扫描步骤,读取智能合约并对其进行扫描,从而获得智能合约的状态;选择和构建步骤,根据所述读取和扫描步骤中获得的智能合约的状态,选择智能合约并且基于选择的智能合约构建智能合约队列;遍历和执行步骤,遍历所述选择和构建步骤中获得的智能合约队列,执行所述智能合约队列中满足前置条件的智能合约的任务。

优选的,所述读取和扫描步骤进一步包括:从区块链上读取智能合约,对智能合约及其执行状态和执行结果进行持久化存储,并且以预定扫描频率和预定扫描时间对持久化存储的智能合约进行扫描。

优选的,在所述读取和扫描步骤中获得的智能合约的状态包括创建、进行中、终止、完成和销毁中的一种。

优选的,所述选择和构建步骤进一步包括:选择状态为创建或进行中的智能合约,并基于选择的智能合约构建智能合约队列。

优选的,读取智能合约并对其进行扫描包括:所述遍历和执行步骤进一步包括:根据智能合约的任务的状态,对任务是否满足所述前置条件进行判断,并且执行满足所述前置条件的任务。

此外,本发明提供一种智能合约的调度装置,包括:读取和扫描模块,配置为读取智能合约并对其进行扫描,从而获得智能合约的状态;选择和构建模块,配置为根据所述读取和扫描模块中获得的智能合约的状态,选择智能合约并且基于选择的智能合约构建智能合约队列;遍历和执行模块,配置为遍历所述选择和构建模块中获得的智能合约队列,执行所述智能合约队列中满足前置条件的智能合约的任务。

优选的,所述读取和扫描模块进一步配置为:从区块链上读取智能合约,对智能合约及其执行状态和执行结果进行持久化存储,并且以预定扫描频率和预定扫描时间对持久化存储的智能合约进行扫描。

优选的,在所述读取和扫描模块中获得的智能合约的状态包括创建、进行中、终止、完成和销毁中的一种。

优选的,所述选择和构建模块进一步配置为:选择状态为创建或进行中的智能合约,并基于选择的智能合约构建智能合约队列。

优选的,所述遍历和执行模块进一步配置为:根据智能合约的任务的状态,对任务是否满足所述前置条件进行判断,并且执行满足所述前置条件的任务

根据本发明能够实现的有益效果包括以下中的一个或多个:提高智能合约的运行效率,提高智能合约设计和运行的灵活性和多样性。

附图说明

图1是根据本发明实施例的智能合约的调度方法的流程图。

图2是根据本发明实施例的智能合约的调度装置的示意性框图。

为了清楚地进行描述,省略了与本发明技术实质无密切关系的部分;并且在说明书和附图中,相同或相似的元件由相同的附图标记表示。应理解的是,为了说明本发明的基本原理及各个特征,附图呈现一定程度的简化表示,本发明的范围并不限于附图中表示的形式。

具体实施方式

下面将结合附图详细描述本发明的实施例。尽管结合示例性实施例描述了本发明,但应该理解,本说明书并未意欲将本发明限制于这些示例性实施例。相反,本发明不仅意欲覆盖这些示例性实施例,而且也覆盖包含在由所附权利要求书限定的本发明的实质和范围内的各种替代、修改、等价形式。

图1是根据本发明实施例的智能合约的调度方法的流程图。

根据本发明的实施例,智能合约的调度方法包括以下步骤:

s101:读取和扫描步骤,读取智能合约并对其进行扫描,从而获得智能合约的状态;

s102:选择和构建步骤,根据读取和扫描步骤中获得的智能合约的状态,选择智能合约并且基于选择的智能合约构建智能合约队列;

s103:遍历和执行步骤,遍历选择和构建步骤中获得的智能合约队列,执行智能合约队列中满足前置条件的智能合约的任务。

根据本发明实施例的智能合约的调度方法可以应用于合约虚拟机,即智能合约的适当运行环境。当然,本领域技术人员应该理解,本发明的智能合约的调度方法还可以应用于任何其他适用于对智能合约进行调度的场景。

读取和扫描步骤进一步包括:从区块链上读取智能合约,对智能合约及其执行状态和执行结果进行持久化存储,并且以预定扫描频率和预定扫描时间对持久化存储的智能合约进行扫描。

区块链是按照一定顺序将数据区块进行链式组合而形成的分布式数据结构。利用区块链的去中心化、数据不可篡改等特性,存储在区块链中的智能合约对各个节点透明公开,从而能够实现智能合约的公开性和有效性。根据本发明的优选实施例,智能合约是从区块链上读取的,而且在调度执行智能合约的任务之后,可以将任务产出和智能合约的当前状态发送至区块链记录,从而形成公开、不可篡改的智能合约环境和系统。

预定扫描频率和预定扫描时间可以根据实际需要进行设置。

在读取和扫描步骤中获得的智能合约的状态包括创建、进行中、终止、完成和销毁中的一种。

选择和构建步骤进一步包括:选择状态为创建或进行中的智能合约,并基于选择的智能合约构建智能合约队列。

本领域技术人员应该理解,本实施例中列出的智能合约的各种具体状态仅起到对本发明智能合约状态进行示例性说明的作用。也可以使用本领域技术人员能够想到的其他术语对有执行需求或待生效的智能合约的状态进行描述,这些不同的描述都在本发明的范围之内。对于下文中提到的智能合约的任务的各种状态,情况也是如此。

遍历和执行步骤进一步包括:根据智能合约的任务的状态,对任务是否满足前置条件进行判断,并且执行满足前置条件的任务。

根据本发明实施例的智能合约包括任务作为基本执行单元,每个任务都有一个执行状态,例如:未开始,进行中,休眠、丢弃、终止和完成。而且,不同的任务具有不同的属性,任务具有的常规属性包括:任务名称、任务类型、前置条件、后置条件等,其中前置条件也称为触发条件,满足该条件时启动任务执行;后置条件也称为状态流转条件,满足该条件时任务流转到下一个状态。当智能合约被分解为多个任务时,每个任务为未开始状态;当智能合约被加载到合约队列中时,每个任务为休眠状态;当任务满足相应的前置条件时为进行中状态;当任务满足相应的后置条件时为完成状态;当任务为智能合约的可选任务且未被选中时为丢弃状态;当任务满足异常边界条件时为终止状态。

根据本发明的实施例,例如,如果智能合约队列中当前智能合约(其状态为创建或进行中)的当前任务状态是“进行中”,则判断是否满足该任务的前置条件。如果满足前置条件,则开始执行此任务。任务执行完毕后,可以将此任务的产出和智能合约当前的状态(比如:到当前为止的所有产出)发送至区块链记录。

根据本发明的实施例,如果智能合约的状态不是创建或进行中,或者智能合约的状态是创建或进行中但当前任务状态不是“进行中”,或者智能合约的状态是创建或进行中并且当前任务状态是“进行中”但不满足任务前置条件,可以将读取的智能合约放到智能合约队列的队尾,即跳过该智能合约,然后继续遍历过程,执行下一个智能合约。另外,如果当前智能合约的状态为“终止”、“完成”或“销毁”,则可以从智能合约队列去掉该智能合约。

现有技术中对于多个智能合约的一次性执行,可能在特定情况下(如逻辑错误、签名错误等)造成合约执行的停滞和低效。根据本发明的智能合约的调度方法,利用周期执行、长期执行、轮换执行等技术手段,可以实现工作流的执行形式,从而能够提高智能合约的运行效率,提高智能合约设计和运行的灵活性和多样性。

通过另一实施例,对本发明进行说明如下。

公开了一种基于可视化的智能合约的实现方法,应用于合约虚拟机,包括以下步骤:

接收来自应用端的目标智能合约,并对所述目标智能合约,以及所述目标智能合约的执行状态和执行结果进行持久化存储,所述目标智能合约的执行状态包括创建、进行中、终止、完成和销毁;

具体的,对应于目标智能合约的属性集中的创建时间、生效起始时间、生效截止时间,目标智能合约的执行状态包括创建、进行中、终止、完成和销毁。当前时间大于创建时间时目标智能合约处于创建状态;当前时间大于生效起始时间时目标智能合约处于进行中状态;当前时间大于生效截止时间时目标智能合约处于完成状态;目标智能合约满足异常边界条件时处于终止状态;当触发合约销毁动作时目标智能合约处于销毁状态。

目标智能合约的执行结果包括执行成功和执行失败。

需要说明的是,在前述步骤之后还包括:

实时获取所述目标智能合约的执行状态。

还需要说明的是,在前述步骤之后还包括:根据用户的查询请求,对持久化存储的所述目标智能合约进行查询,并将查询结果发送到所述用户。

所述查询请求可以为对智能合约的执行状态的查询。

定时对持久化存储的多个智能合约进行扫描,将处于创建状态或进行中状态的智能合约加载到合约队列中;

需要说明的是,扫描时间和扫描频率可以根据实际需要预先进行设定。

遍历所述合约队列,确定当前智能合约;

合约队列中智能合约是以一定的顺序在队列中进行排序的,在初始状态时,队列中第一个智能合约为当前智能合约。

判断所述当前智能合约中是否存在满足相应前置条件的任务;若存在,执行:将所述任务加载到执行单元中,并执行所述任务;若不存在,执行跳过当前智能合约,按照遍历顺序,将所述当前智能合约的下一个智能合约作为当前智能合约,并返回执行判断所述当前智能合约中是否存在满足相应前置条件的任务。

基于上述智能合约的实现过程,每个所述任务的状态包括未开始、进行中、休眠、丢弃、终止和完成,当所述目标智能合约被分解为多个任务时,每个所述任务为未开始状态;当所述目标智能合约被加载到所述合约队列中时,每个所述任务为休眠状态;当所述任务满足相应的前置条件时为进行中状态;当所述任务满足相应的后置条件时为完成状态;当所述任务为所述目标智能合约的可选任务且未被选中时为丢弃状态;当所述任务满足异常边界条件时为终止状态。

本实施例公开的基于可视化的智能合约的实现方法,在合约虚拟机端,对来自应用端的目标智能合约进行持久化存储,并定时对持久化存储的多个智能合约进行扫描,将处于创建状态或进行中状态的智能合约加载到合约队列中,以工作流的方式,在合约队列中对当前智能合约中满足相应前置条件的任务进行调度执行,实现了智能合约的智能调度和可持续执行。

图2是根据本发明实施例的智能合约的调度装置的示意性框图。

基于本发明的智能合约的调度方法,图2中公开了一种智能合约的调度装置200,包括:读取和扫描模块201,配置为读取智能合约并对其进行扫描,从而获得智能合约的状态;选择和构建模块202,配置为根据读取和扫描模块中获得的智能合约的状态,选择智能合约并且基于选择的智能合约构建智能合约队列;遍历和执行模块203,配置为遍历选择和构建模块中获得的智能合约队列,执行智能合约队列中满足前置条件的智能合约的任务。

读取和扫描模块201进一步配置为:从区块链上读取智能合约,对智能合约及其执行状态和执行结果进行持久化存储,并且以预定扫描频率和预定扫描时间对持久化存储的智能合约进行扫描。

在读取和扫描模块中获得的智能合约的状态包括创建、进行中、终止、完成和销毁中的一种。

选择和构建模块202进一步配置为:选择状态为创建或进行中的智能合约,并基于选择的智能合约构建智能合约队列。

遍历和执行模块203进一步配置为:根据智能合约的任务的状态,对任务是否满足前置条件进行判断,并且执行满足前置条件的任务。

参照根据本发明的智能合约的调度方法,智能合约的调度装置200能够实现上文描述的类似技术效果。

此外,根据本发明一个简化实施例,本发明的智能合约的调度方法可以包括以下内容。

从区块链上读取智能合约,加载到智能合约队列的队尾,其中智能合约由多个任务组成,每个智能合约具有某种状态(例如,创建、进行中、终止、完成和销毁),每个任务也具有某种状态(例如,未开始、进行中、休眠、丢弃、终止和完成)。智能合约在同一个组、集群或虚拟机里面轮番执行。轮番的过程例如可以是,先执行对头的智能合约,判断其是否满足执行条件;如满足则执行该智能合约;如不满足则把它放到队尾,再对下一个智能合约进行判断。判断是否满足执行条件例如可以包括:首先考虑智能合约状态,如果智能合约状态为“创建中”或“进行中”,则考虑当前执行的任务。在考虑任务时也考虑任务状态,比如任务状态是否是“进行中”,如果是,则判断是否满足任务前置条件;如果满足,则合约虚拟机开始执行此任务(此时才真正执行了这个任务,换言之执行了这个智能合约的一个任务)。任务执行完毕后,将此任务的产出和智能合约当前的状态(比如:到当前为止的所有产出)发送至区块链记录。此外如果智能合约状态或任务状态不匹配或者未满足任务前置条件,则将此智能合约放到队尾,执行下一个智能合约;如果在考虑智能合约状态时当前队头智能合约的状态为“终止”、“完成”或“销毁”,则从队列去掉该智能合约。

上文以举例说明的目的,呈现了本发明的特定示例性实施例。上文的描述并不意图对本发明进行无遗漏的穷举,也不意图将本发明限制为所公开的确切形式。显然,本领域技术人员根据上文的描述可以进行很多改变和变化。选择并描述这些示例性实施例是为了解释本发明的特定原理及其实际应用,从而使本领域技术人员能够制造并使用本发明的各个示例性实施例,及其各种替代和修改形式。事实上,本发明的范围由所附的权利要求及其等效形式限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1