基于智能合约的事务请求处理方法、装置、设备和介质与流程

文档序号:18027330发布日期:2019-06-28 22:16阅读:306来源:国知局
基于智能合约的事务请求处理方法、装置、设备和介质与流程

本发明实施例涉及区块链技术领域,尤其涉及一种基于智能合约的事务请求处理方法、装置、设备和介质。



背景技术:

目前,区块链部署的智能合约,采用由区块链节点接收到发起的事务请求后,执行事务请求中的智能合约,并将执行结果存储到区块中的链上执行方式。

在上述执行方式中,发起事务请求的节点只需要发起对智能合约进行调用的事务请求,操作简单。但是在不同时间执行智能合约的结果不同,上述执行方式中,智能合约的调用请求被打包到事务请求之后,区块链节点可以随时发送或延迟发送,对应的,其他区块链节点收到后也可立即执行或延迟执行,因此,存在执行结果不确定的缺陷。



技术实现要素:

本发明实施例提供了一种智能合约的事务请求处理方法、装置、设备和介质,能够有效防止智能合约调用请求的延时执行,避免因延时执行导致的结果不确定性。

第一方面,本发明实施例提供了一种基于智能合约的事务请求处理方法,应用于区块链节点,该方法包括:

产生基于目标智能合约的事务请求;

根据本地数据对所述事务请求进行预执行操作,确定输入依赖数据集合和输出变更数据集合;

将所述事务请求、输入依赖数据集合和输出变更数据集合绑定,并传输至区块链网络,以请求区块链网络中的其他节点执行所述事务请求。

第二方面,本发明实施例还提供了一种基于智能合约的事务请求处理方法,应用于区块链节点,该方法包括:

获取在区块链网络中传输的事务请求、输入依赖数据集合和输出变更数据集合;

在执行所述事务请求过程中,确定所述事务请求所涉及的输入数据和输出数据;

将所述输入数据和输出数据,与获取的输入依赖数据集合和输出变更数据集合进行一致性比对;

依据比对结果,确定所述事务请求执行的有效性。

第三方面,本发明实施例还提供了一种基于智能合约的事务请求处理装置,配置于区块链节点,该装置包括:

事务请求产生模块,用于产生基于目标智能合约的事务请求;

数据集合确定模块,用于根据本地数据对所述事务请求进行预执行操作,确定输入依赖数据集合和输出变更数据集合;

传输模块,用于将所述事务请求、输入依赖数据集合和输出变更数据集合绑定,并传输至区块链网络,以请求区块链网络中的其他节点执行所述事务请求。

第四方面,本发明实施例还提供了一种基于智能合约的事务请求处理装置,配置于区块链节点,该装置包括:

获取模块,用于获取在区块链网络中传输的事务请求、输入依赖数据集合和输出变更数据集合;

数据确定模块,用于在执行所述事务请求过程中,确定所述事务请求所涉及的输入数据和输出数据;

数据比对模块,用于将所述输入数据和输出数据,与获取的输入依赖数据集合和输出变更数据集合进行一致性比对;

有效性确定模块,用于依据比对结果,确定所述事务请求执行的有效性。

第五方面,本发明实施例提供了一种设备,包括:

一个或多个处理器;

存储器,用于存储一个或多个程序;

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现第一方面中任意所述的基于智能合约的事务请求处理方法,或者实现第二方面中任意所述的基于智能合约的事务请求处理方法。

第六方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任意所述的基于智能合约的事务请求处理方法,或者实现第二方面中任意所述的基于智能合约的事务请求处理方法。

本发明实施例提供的基于智能合约的事务请求处理方法、装置、设备和介质,区块链节点在产生基于目标智能合约的事务请求后,将会根据本地数据对该事务请求进行预执行操作,确定输入依赖数据集合和输出变更数据集合,而后将所确定的输入依赖数据集合和输出变更数据集合,与该事务请求绑定并传输至区块链网络,以使区块链网络中的其他节点执行该事务请求。由于在不同时间执行智能合约的结果不同,本方案,事务请求的发起节点在向区块链网络传输事务请求时,一并将本地确定的该事务请求的输入依赖数据集合和输出变更数据集合一起传输,相当于提前构建了该事务请求有效的约束条件,便于后续其他节点依据该约束条件确定自身所执行的结果的有效性,进而能够有效防止智能合约调用请求的延时执行,避免因延时执行导致的结果不确定性。

附图说明

图1是本发明实施例一中提供的一种基于智能合约的事务请求处理方法的流程图;

图2是本发明实施例二中提供的一种基于智能合约的事务请求处理方法的流程图;

图3是本发明实施例三中提供的一种基于智能合约的事务请求处理方法的流程图;

图4是本发明实施例四中提供的一种基于智能合约的事务请求处理方法的流程图;

图5是本发明实施例五中提供的一种基于智能合约的事务请求处理方法的流程图;

图6是本发明实施例六中提供的一种基于智能合约的事务请求处理方法的流程图;

图7是本发明实施例七中提供的一种基于智能合约的事务请求处理装置的结构示意图;

图8是本发明实施八中提供的一种基于智能合约的事务请求处理装置的结构示意图;

图9是本发明实施例九中提供的一种设备的结构示意图。

具体实施方式

下面结合附图和实施例对本发明实施例作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明实施例,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明实施例相关的部分而非全部结构。

实施例一

图1为本发明实施例一提供的一种基于智能合约的事务请求处理方法的流程图,本实施例可适用于对于基于智能合约的事务请求,如何避免因延迟执行事务请求导致执行结果不确定的情况。整套基于智能合约的事务请求处理方法可以由事务请求的发起节点和执行该事务请求的其他节点配合执行。本发明实施例的方案由区块链网络中的区块链节点来执行,具体为区块链网络中事务请求的发起节点来执行,该节点可以是普通区块链节点,也可以是轻量级节点。其中,轻量级节点是指部署有区块链的部署数据,如智能合约、共识机制等,但是未存储或存储部分区块数据和事务数据的区块链网络节点,可以参与区块链的事务请求交互过程,轻量级节点一般可部署于终端设备中。

本发明实施例的方案可以由基于智能合约的事务请求处理装置来执行,该装置可采用硬件和/或软件的方式实现,并可集成于承载区块链节点的计算设备中。参见图1,该方法具体可以包括:

s110,产生基于目标智能合约的事务请求。

本实施例中,智能合约是指基于插件机制所编写的可供区块链网络中的节点调用并执行的代码段,一个智能合约的执行可实现至少一种功能或处理一类事务请求;可以是区块链创建时预先约定的,存储于创世区块中;还可以是在区块链的创建过程动态添加的,存储于某一区块内;也可以独立于区块链存储在区块链节点本地。可选的,区块链节点可部署多个智能合约,不同的智能合约可对应不同的功能。目标智能合约是指本机节点所部署的智能合约中的一个。

事务请求可以是本机节点本地产生事务处理需求,或者接收到某一触发机制如第三方设备(如客户端、终端设备或服务器等)发送的事务处理需求时,根据该事务处理需求确定目标智能合约,而后基于该目标智能合约所产生的用于请求区块链网络中的其他节点,如当前区块链生成节点处理某种事务的请求。

例如,本机节点在检测到用户在本机节点上点击事务按钮事件,则确定产生事务处理需求;之后可将事务处理需求界面展示给用户,并根据所获取的用户的输入和/或选择操作,确定目标智能合约;进而产生基于该目标智能合约的事务请求。

若本机节点依据用户的输入,确定调用目标智能合约“contract.add”对count进行加1处理,则所产生的基于目标智能合约的事务请求如下:

s120,根据本地数据对事务请求进行预执行操作,确定输入依赖数据集合和输出变更数据集合。

本实施例中,本地数据为区块链节点的本地化数据。可选的,若本机节点是普通区块链节点,则可以直接从本地获取到该数据;若本机节点为轻量级节点,则可以从区块链网络中的其他节点获取本地数据。

预执行操作即为本机节点在确定产生基于目标智能合约的事务请求之后,预先在本地执行该事务请求,而后再执行向区块链网络发送的操作。

可选的,事务请求在执行过程中需要依赖本地数据中一些已有数据,并可能更改、删除或新增一些数据,即对应于输入依赖数据和输出变更数据。输入依赖数据是指事务请求在执行过程中需要从本地数据中读取的数据;输出变更数据为事务请求执行后所要更新(如增加、更改或删除等)的数据。进而,输入依赖数据集合即由事务请求在执行过程中需要从本地数据中读取的所有数据所构成,也就是说,由事务请求的所有输入依赖数据所构成;具体可以是输入依赖数据明文构成,还可以是对输入依赖数据进行相关处理(如加密或压缩处理等)后构成等。

对应的,输出变更数据集合即由事务请求执行后所要更新(如增加、更改或删除等)的所有数据所构成,也就是说,由事务请求的所有输出变更数据所构成;具体可以是输出变更数据明文构成,还可以是对输出变更数据进行相关处理(如加密或压缩处理等)后构成等。

本实施例中,读取的数据或更新的数据可以包括参数名称和具体的参数值。示例性的,输入依赖数据集合可以包括预执行事务请求过程中所需要读取的参数名称和参数值;输出变更数据集合包括预执行所述事务请求后所要更新的参数名称和参数值。

具体的,本机节点可以对本地产生的基于目标智能合约的事务请求进行预执行操作,并在执行过程,基于本地数据确定输入依赖数据集合和输出变更数据集合。对于上述目标智能合约为“contract.add”的例子,若本地数据中count为3,本机节点在本地预执行该事务请求过程中,可以确定输入依赖数据集合为:{count=3};输出变更数据集合为:output为{count=4}。

由于本机节点所产生的事务请求是基于目标智能合约的事务请求,因此本机节点可以调用虚拟机运行该目标智能合约,进而实现对事务请求的预执行。示例性的,根据本地数据对事务请求进行预执行操作,确定输入依赖数据集合和输出变更数据集合可以包括:根据事务请求,在本地运行目标智能合约,确定目标智能合约执行过程中从本地数据中读取的数据,作为输入依赖数据,且向本地数据中进行写入的数据,作为输出变更数据,从而形成输入依赖数据集合和输出变更数据集合。

需要说明的是,事务请求执行后所要更新(如增加、更改或删除等)的数据,需要更新至本地数据中。

具体的,本机节点可以从事务请求中获取目标智能合约的名称,以及用户所输入的参数名称等;之后将该参数名称作为目标智能合约的输入,调用虚拟机,运行该目标智能合约;同时在目标智能合约的执行过程中,确定从本地数据中读取的数据,以及向本地数据中写入的数据,并将从本地数据中读取的数据作为输入依赖数据,将向本地数据中写入的数据作为输出变更数据;进而可依据输入依赖数据和输出变更数据可分别形式输入依赖数据集合和输出变更数据集合。

s130,将事务请求、输入依赖数据集合和输出变更数据集合绑定,并传输至区块链网络,以请求区块链网络中的其他节点执行事务请求。

本实施例中,将事务请求、输入依赖数据集合和输出变更数据集合绑定是指是指建立输入依赖数据集合和输出变更数据集合,与事务请求之间的关联关系;具体可以是将输入依赖数据集合和输出变更数据集合添加至事务请求的预设字段中。

具体的,本机节点在确定事务请求的输入依赖数据集合和输出变更数据之后,可以将输入依赖数据集合和输出变更数据集合添加至事务请求的预设字段中,而后将该事务请求传输至区块链网络;区块链网络中的其他节点获取到该事务请求之后,可以执行该事务请求,而后可依据事务请求输入的依赖数据集合和输出变更数据集合确定事务请求执行的有效性。区块链网络中的其他节点获取到该事务请求之后,还可以根据该事务请求的输入依赖数据集合和输出变更数据集合确定该事务请求与其他事务请求之间的依赖关系,进而依据依赖关系执行该事务请求等。

示例性的,输入依赖数据集合和输出变更数据集合,用于接收到事务请求的区块链节点在执行事务请求时进行依赖数据验证,以确定事务请求执行的有效性。

具体的,本机节点在确定事务请求的输入依赖数据集合和输出变更数据之后,可以将事务请求、输入依赖数据集合和输出变更数据集合绑定,并传输至区块链网络。区块链网络中的其他节点获取到该事务请求之后,可以执行该事务请求,具体可以在执行事务请求过程中,确定事务请求所涉及的输入数据和输出数据;而后将输入数据和输出数据,与获取的该事务请求的输入依赖数据集合和输出变更数据集合进行一致性比对;进而可依据比对结果,确定该事务请求执行的有效性。

本发明实施例提供的技术方案,区块链节点在产生基于目标智能合约的事务请求后,将会根据本地数据对该事务请求进行预执行操作,确定输入依赖数据集合和输出变更数据集合,而后将所确定的输入依赖数据集合和输出变更数据集合,与该事务请求绑定并传输至区块链网络,以使区块链网络中的其他节点执行该事务请求。由于在不同时间执行智能合约的结果不同,本方案,事务请求的发起节点在向区块链网络传输事务请求时,一并将本地确定的该事务请求的输入依赖数据集合和输出变更数据集合一起传输,相当于提前构建了该事务请求有效的约束条件,便于后续其他节点依据该约束条件确定自身所执行的结果的有效性,进而能够有效防止智能合约调用请求的延时执行,避免因延时执行导致的结果不确定性;此外,其他节点也可根据输入依赖数据集合和输出变更数据集合确定事务请求之间的依赖关系,以便最大化实现事务请求的并行处理,加快处理速度。

实施例二

图2为本发明实施例二提供的一种基于智能合约的事务请求处理方法的流程图,本实施例在上述实施例的基础上,提供了一种根据本地数据对事务请求进行预执行操作,确定输入依赖数据集合和输出变更数据集合的方式。参见图2,该方法具体可以包括:

s210,产生基于目标智能合约的事务请求。

s220,根据本地数据对事务请求进行预执行操作,以确定输入依赖数据和输出变更数据。

具体的,本机节点可以调用虚拟机,在本地预先执行所产生的事务请求;进而确定输入依赖数据和输出变更数据。

s230,对输入依赖数据进行加密处理或哈希处理,以形成输入依赖数据集合。

本实施例中,本机节点在确定输入依赖数据和输出变更数据之后,可以直接以数据明文形成输入依赖数据集合和输出变更数据集合。但是,为了保证数据的安全性,本机节点可以采用自身的密钥(如非对称密钥对中的私钥),或者区块链网络所指定的加密方式等,分别对输入依赖数据和输出变更数据进行加密处理。

此外,在带宽有限的情况下,为了加快传输速率,本机节点可以对输入依赖数据和输出变更数据进行压缩处理,以减少传输的数据量,进而加快传输速率。由于哈希运算具备高安全性,且能够缩小数据位,本实施例中,优选采用哈希运算对输入依赖数据和输出变更数据进行压缩处理。例如sha256(securehashalgorithm,安全散列算法)算法或md5算法等。

本机节点可以采用下述方式确定输入依赖数据集合,具体选择哪种方式,本机节点可以根据实际需求进行确定。具体的,1)本机节点可以采用自身的密钥对输入依赖数据进行加密处理,进而形成输入依赖数据集合;2)还可以采用哈希算法对输入依赖数据进行哈希处理,进而形成输入依赖数据集合;3)也可以先采用哈希算法对输入依赖数据进行哈希处理,而后采用自身的密钥对哈希处理结果进行加密处理,进而形成输入依赖数据集合。

s240,对输出变更数据进行加密处理或哈希处理,以形成输出变更数据集合。

与确定输入依赖数据集合的方式相同,本机节点可以采用下述方式确定输出变更数据集合,具体选择哪种方式,本机节点可以根据实际需求进行确定。具体的,1)本机节点可以采用自身的密钥对输出变更数据进行加密处理,进而形成输出变更数据集合;2)还可以采用哈希算法对输出变更数据进行哈希处理,进而形成输出变更数据集合;3)也可以先采用哈希算法对输出变更数据进行哈希处理,而后采用自身的密钥对哈希处理结果进行加密处理,进而形成输出变更数据集合。

s250,将事务请求、输入依赖数据集合和输出变更数据集合绑定,并传输至区块链网络,以请求区块链网络中的其他节点执行事务请求。

本发明实施例提供的技术方案,区块链节点在根据本地数据对所产生的事务请求进行预执行操作,确定输入依赖数据和输出变更数据之后,可以分别对输入依赖数据和输出变更数据进行哈希处理等,进而使形成的输入依赖数据集合和输出变更数据集合,具有较少的数据量以及较高的安全性等;进而,加快了向区块链网路传输输入依赖数据集合、输出变更数据集合以及事务请求的速率。

实施例三

图3为本发明实施例三提供的一种基于智能合约的事务请求处理方法的流程图,本实施例在上述实施例的基础上,对输入依赖数据集合和输出变更数据集合,在用于接收到事务请求的区块链节点在执行事务请求时进行依赖数据验证,以确定事务请求执行的有效性的场景下,进一步的优化。参见图3,该方法具体可以包括:

s310,产生基于目标智能合约的事务请求。

s320,根据本地数据对事务请求进行预执行操作,确定输入依赖数据集合和输出变更数据集合。

s330,将事务请求、输入依赖数据集合和输出变更数据集合绑定,并传输至区块链网络,以请求区块链网络中的其他节点执行事务请求。

s340,在等待预设时长后,轮询区块链,以确定区块链中是否存储有事务请求关联的事务数据。

本实施例中,预设时长是预先设定的,事务请求的发起节点在将事务请求发送至区块链网络后,想在链上查询该事务请求关联的事务数据所需要等待时间段,如10s。可选的,预设时长可根据实际情况进行灵活调整。

可选的,若本机节点是普通区块链节点,则可以轮询本地区块链,进而确定区块链中是否存储有该事务请求关联的事务数据。若本机节点是轻量级节点,则可以向区块链网络中的其他节点发送轮询请求,以请求其他节点反馈轮询结果,进而确定区块链中是否存储有该事务请求关联的事务数据。

需要说明的是,轮询区块链的频率,可根据本机节点实际所处的网络环境进行确定,如可以间隔2s轮询一次等。

具体的,本机节点在将事务请求、输入依赖数据集合和输出变更数据集合绑定,并传输至区块链网络之后,若等待了预设时长,则可以轮询区块链,以确定自身所发起的事务请求是否被其他节点执行,即确定区块链中是否存储有事务请求关联的事务数据。

s350,在确定区块链中未存储有事务请求关联的事务数据后,重新预执行事务请求以确定输入依赖数据集合和输出变更数据集合,并向区块链网络发送事务请求、以及重新确定的输入依赖数据集合和输出变更数据集合。

具体的,由于在不同时间执行智能合约的结果不同,本机节点在确定区块链中未存储有事务请求关联的事务数据后,需要重新执行s320和s330的过程,即重新预执行事务请求以确定输入依赖数据集合和输出变更数据集合,并向区块链网络发送事务请求、以及重新确定的输入依赖数据集合和输出变更数据集合。

可选的,本机节点在确定区块链中存储有事务请求关联的事务数据,则可以将本地预执行数据即输入依赖数据集合和输出变更数据集合删除。

需要说明的是,本机节点通过轮询区块链的方式,可以确定自身所发起的事务请求是否被执行;在确定未被执行的情况下,可采用s350的方式,来确保该事务请求最后能够被真正执行,避免出现无反馈的现象,以提升用户的满意度。

本发明实施例提供的技术方案,区块链节点在将事务请求、输入依赖数据集合和输出变更数据集合绑定,并传输至区块链网络之后,可以通过轮询区块链的方式,确定自身所发起的事务请求是否被其他节点执行,即确定区块链中是否存储有事务请求关联的事务数据;在确定区块链中未存储有事务请求关联的事务数据后,可重新在本地进行该事务请求的预执行操作,以及发送操作,以此方式来确保事务请求能够被真正执行。

实施例四

图4为本发明实施例四提供的一种基于智能合约的事务请求处理方法的流程图,本实施例可适用于对基于智能合约的事务请求进行处理的情况,尤其适用于对于基于智能合约的事务请求,如何避免因延迟执行事务请求导致执行结果不确定的情况。整套基于智能合约的事务请求处理方法可以由事务请求的发起节点和执行该事务请求的其他节点配合执行。其中,事务请求的发起节点可以采用实施例一至三中任意方式对事务请求进行处理。本发明实施例的方案由区块链网络中的区块链节点来执行,具体为区块链网络中获取到事务请求节点来执行,该节点可以是当前区块生成节点。本发明实施例的方案可以由基于智能合约的事务请求处理装置来执行,该装置可采用硬件和/或软件的方式实现,并可集成于承载区块链节点的计算设备中。参见图4,该方法具体可以包括:

s410,获取在区块链网络中传输的事务请求、输入依赖数据集合和输出变更数据集合。

本实施例中,输入依赖数据集合和输出变更数据集合由事务请求的发起节点在产生事务请求后,根据其本地数据对事务请求进行预执行操作所确定。具体的,输入依赖数据集合由事务请求在预执行过程中需要从本地数据中读取的所有数据所构成,也就是说,由事务请求的所有输入依赖数据所构成;具体可以是输入依赖数据明文构成,还可以是对输入依赖数据进行相关处理(如加密或压缩处理等)后构成等。对应的,输出变更数据集合由事务请求预执行后所要更新(如增加、更改或删除等)的所有数据所构成,也就是说,由事务请求的所有输出变更数据所构成;具体可以是输出变更数据明文构成,还可以是对输出变更数据进行相关处理(如加密或压缩处理等)后构成等。

示例性的,输入依赖数据集合和输出变更数据集合可以为数据明文,或者为经由加密处理得到的数据密文,或者为经由哈希处理得到的压缩数据。

读取的数据或更新的数据可以包括参数名称和具体的参数值。示例性的,输入依赖数据集合可以包括预执行事务请求过程中所需要读取的参数名称和参数值;输出变更数据集合包括预执行所述事务请求后所要更新的参数名称和参数值。

可选的,本实施例中,输入依赖数据集合和输出变更数据集合与事务请求具有关联关系,如,输入依赖数据集合和输出变更数据集合存储于事务请求的预设字段中。

具体的,本机节点可以从区块链网络中获取事务请求,而后从事务请求中提取输入依赖数据集合和输出变更数据集合。

s420,在执行事务请求过程中,确定事务请求所涉及的输入数据和输出数据。

本实施例中,输入数据是指本机节点在执行事务请求过程中所依赖(如所需要读取)的数据,可以包括参数名称和具体参数值;输出数据是指本机节点执行该事务请求后所需要更新(如新增、更改后删除等)的数据,也可以包括参数名称和具体参数值。

具体的,本机节点在从区块链网络中获取到事务请求之后,可以依据该事务请求确定所要调用的目标智能合约的名称,以及目标智能合约的输入参数,进而调用虚拟机,运行该目标智能合约;在目标智能合约的运行过程中,确定目标智能合约所需要读取的数据,以及所要更新的数据,进而确定该事务请求所涉及的输入数据和输出数据。

s430,将输入数据和输出数据,与获取的输入依赖数据集合和输出变更数据集合进行一致性比对。

具体的,本机节点在确定事务请求所涉及的输入数据和输出数据之后,可以先将输入数据和输出数据的数据形式(如可以是数据明文、数据密文或压缩数据等)处理成与,输入依赖数据集合和输出变更数据集合相同的数据形式;而后分别将输入数据与获取的输入依赖数据集合进行比对,将输出数据与获取的输出变更数据集合进行比对;若两者比对均一致,则确定比对通过;若两者中存在任意一个比对不一致,则确定比对未通过。

s440,依据比对结果,确定事务请求执行的有效性。

具体的,若输入数据与获取的输入依赖数据集合,以及输出数据与获取的输出变更数据集合,两者比对均一致,则确定比对通过,进而可确定该事务请求的执行是有效的,也就是说该事务请求是有效性的;若两者中存在任意一个比对不一致,则确定比对未通过,则可以确定该事务请求的执行是无效的,也就是说该事务请求是无效的。

示例性的,依据比对结果,确定事务请求执行的有效性可以包括:如果比对通过,则确定事务请求的执行结果有效,将执行结果作为事务数据存储于区块链中;否则,丢弃事务请求、输入依赖数据集合和输出变更数据集合。

具体的,若比对通过,则确定事务请求的执行结果是有效性的,则可以将执行结果作为事务数据写入当前区块中,并将当前区块传输至区块链网络,以便事务请求的发起节点可以获取。若比对未通过,则确定事务请求的执行结果是无效的,本机节点则可以将从区块链网络中获取的事务请求、输入依赖数据集合和输出变更数据集合丢弃,同时可将本次事务请求的执行结果丢弃等。

需要说明的是,由于在不同时间执行智能合约的结果不同,若网络延迟在可允许的范围内,可通过将发起节点预执行所确定的输入依赖数据集合和输出变更数据,与接收事务请求的节点所确定的输入数据和输出数据进行比对,确定接收事务请求的节点是否存在延迟执行事务请求的现象;若存在,这些有违发起用户本意的事务请求,最终将会被丢弃。

本发明实施例提供的技术方案,区块链节点通过将从区块链网络中获取的输入依赖数据集合和输出变更数据集合,与自身执行事务请求所确定的输入数据和输出数据进行一致性比对,进而可确定事务请求执行的有效性。相比于现有的技术方案,本实施例为确定事务请求执行的有效性提供了一种新思路,能够有效防止智能合约调用请求的延时执行,避免因延时执行导致的结果不确定性,进而保证区块链网络的良性运行。

实施例五

图5为本发明实施例五提供的一种基于智能合约的事务请求处理方法的流程图,本实施例在上述实施例的基础上,在输入依赖数据集合和输出变更数据集合为数据密文或压缩数据的场景下,对将输入数据和输出数据,与获取的输入依赖数据集合和输出变更数据集合进行一致性比对进行解释说明。参见图5,该方法具体可以包括:

s510,获取在区块链网络中传输的事务请求、输入依赖数据集合和输出变更数据集合。

s520,在执行事务请求过程中,确定事务请求所涉及的输入数据和输出数据。

s530,分别对输入数据和输出数据进行加密处理或哈希处理,得到本地数据密文或本地压缩数据。

本实施例中,若获取的输入依赖数据集合和输出变更数据集合的数据形式数据明文,则本机节点在执行s520之后可直接将输入数据和输出数据,与获取的输入依赖数据集合和输出变更数据集合进行一致性比对;若获取的输入依赖数据集合和输出变更数据集合的数据形式不是数据明文,是数据密文或压缩数据,本机节点需采用与发起节点相同的处理方式对输入数据和输出数据进行处理。

具体的,若获取的输入依赖数据集合和输出变更数据集合的数据形式为数据密文,则本机节点可以分别对输入数据和输出数据进行加密处理,进而得到本地数据密文。若获取的输入依赖数据集合和输出变更数据集合的数据形式为压缩数据,则本机节点可以分别对输入数据和输出数据进行哈希处理,进而得到本地压缩数据等。

s540,将输入数据和输出数据的本地数据密文或本地压缩数据,与获取的输入依赖数据集合和输出变更数据集合的数据密文或本地压缩数据进行一致性比对。

具体的,本机节点在将输入数据和输出数据处理成与,输入依赖数据集合和输出变更数据集合相同的数据形式(如本地数据密文或本地压缩数据)之后,可以将输入数据和输出数据的本地数据密文或本地压缩数据,与获取的输入依赖数据集合和输出变更数据集合的数据密文或本地压缩数据进行一致性比对,进而依据比对结果,确定事务请求执行的有效性。

s550,依据比对结果,确定事务请求执行的有效性。

本发明实施例提供的技术方案,区块链节点通过将从区块链网络中获取的输入依赖数据集合和输出变更数据集合,与自身执行事务请求所确定的输入数据和输出数据进行一致性比对,进而可确定事务请求执行的有效性。相比于现有的技术方案,本实施例为确定事务请求执行的有效性提供了一种新思路,能够有效防止智能合约调用请求的延时执行,避免因延时执行导致的结果不确定性,进而保证区块链网络的良性运行。

实施例六

图6为本发明实施例六提供的一种基于智能合约的事务请求处理方法的流程图,本实施例在上述实施例的基础上,提供了一种事务请求的发起节点与接收事务请求的节点配合,对事务请求进行处理,以确定事务请求执行的有效性的情况。参见图6,该方法具体可以包括:

s610,区块链节点产生基于目标智能合约的事务请求。

s620,区块链节点根据本地数据对事务请求进行预执行操作,确定输入依赖数据集合和输出变更数据集合。

s630,区块链节点将事务请求、输入依赖数据集合和输出变更数据集合绑定,并传输至区块链网络。

s640,其他节点获取在区块链网络中传输的事务请求、输入依赖数据集合和输出变更数据集合。

s650,其他节点在执行事务请求过程中,确定事务请求所涉及的输入数据和输出数据。

s660,其他节点将输入数据和输出数据,与获取的输入依赖数据集合和输出变更数据集合进行一致性比对。

s670,其他节点依据比对结果,确定事务请求执行的有效性。

本发明实施例提供的技术方案,区块链节点在产生基于目标智能合约的事务请求后,将会根据本地数据对该事务请求进行预执行操作,确定输入依赖数据集合和输出变更数据集合,而后将所确定的输入依赖数据集合和输出变更数据集合,与该事务请求绑定并传输至区块链网络;区块链网络中的其他节点获取到该事务请求之后,可以执行该事务请求,而后可依据事务请求输入的依赖数据集合和输出变更数据集合确定事务请求执行的有效性。由于在不同时间执行智能合约的结果不同,本方案,事务请求的发起节点在向区块链网络传输事务请求时,一并将本地确定的该事务请求的输入依赖数据集合和输出变更数据集合一起传输,相当于提前构建了该事务请求有效的约束条件,便于后续其他节点依据该约束条件确定自身所执行的结果的有效性,进而能够有效防止智能合约调用请求的延时执行,避免因延时执行导致的结果不确定性。

实施例七

图7为本发明实施例七提供的一种基于智能合约的事务请求处理装置的结构示意图,该装置可配置于区块链节点中,该装置可执行本发明实施例一至三所提供的基于智能合约的事务请求处理方法,具备执行方法相应的功能模块和有益效果。如图7所示,该装置包括:

事务请求产生模块710,用于产生基于目标智能合约的事务请求;

数据集合确定模块720,用于根据本地数据对事务请求进行预执行操作,确定输入依赖数据集合和输出变更数据集合;

传输模块730,用于将事务请求、输入依赖数据集合和输出变更数据集合绑定,并传输至区块链网络,以请求区块链网络中的其他节点执行事务请求。

本发明实施例提供的技术方案,区块链节点在产生基于目标智能合约的事务请求后,将会根据本地数据对该事务请求进行预执行操作,确定输入依赖数据集合和输出变更数据集合,而后将所确定的输入依赖数据集合和输出变更数据集合,与该事务请求绑定并传输至区块链网络,以使区块链网络中的其他节点执行该事务请求。由于在不同时间执行智能合约的结果不同,本方案,事务请求的发起节点在向区块链网络传输事务请求时,一并将本地确定的该事务请求的输入依赖数据集合和输出变更数据集合一起传输,相当于提前构建了该事务请求有效的约束条件,便于后续其他节点依据该约束条件确定自身所执行的结果的有效性,进而能够有效防止智能合约调用请求的延时执行,避免因延时执行导致的结果不确定性;此外,其他节点也可根据输入依赖数据集合和输出变更数据集合确定事务请求之间的依赖关系,以便最大化实现事务请求的并行处理,加快处理速度。

示例性的,数据集合确定模块720具体可以用于:

根据事务请求,在本地运行目标智能合约,确定目标智能合约执行过程中从本地数据中读取的数据,作为输入依赖数据,且向本地数据中进行写入的数据,作为输出变更数据,从而形成输入依赖数据集合和输出变更数据集合。

示例性的,输入依赖数据集合可以包括预执行事务请求过程中所需要读取的参数名称和参数值;输出变更数据集合可以包括预执行事务请求后所要更新的参数名称和参数值。

示例性的,数据集合确定模块720具体还可以用于:

根据本地数据对事务请求进行预执行操作,以确定输入依赖数据和输出变更数据;

对输入依赖数据进行加密处理或哈希处理,以形成输入依赖数据集合;

对输出变更数据进行加密处理或哈希处理,以形成输出变更数据集合。

示例性的,输入依赖数据集合和输出变更数据集合,用于接收到事务请求的区块链节点在执行事务请求时进行依赖数据验证,以确定事务请求执行的有效性。

示例性的,上述装置还可以包括:

轮询模块,用于在将事务请求、输入依赖数据集合和输出变更数据集合绑定,并传输至区块链网络之后,在等待预设时长后,轮询区块链,以确定区块链中是否存储有事务请求关联的事务数据;

重新执行模块,用于在确定区块链中未存储有事务请求关联的事务数据后,重新预执行事务请求以确定输入依赖数据集合和输出变更数据集合,并向区块链网络发送事务请求、以及重新确定的输入依赖数据集合和输出变更数据集合。

实施例八

图8为本发明实施例八提供的一种基于智能合约的事务请求处理装置的结构示意图,该装置可配置于区块链节点中,该装置可执行本发明实施例四至五所提供的基于智能合约的事务请求处理方法,具备执行方法相应的功能模块和有益效果。如图8所示,该装置包括:

获取模块810,用于获取在区块链网络中传输的事务请求、输入依赖数据集合和输出变更数据集合;

数据确定模块820,用于在执行事务请求过程中,确定事务请求所涉及的输入数据和输出数据;

数据比对模块830,用于将输入数据和输出数据,与获取的输入依赖数据集合和输出变更数据集合进行一致性比对;

有效性确定模块840,用于依据比对结果,确定事务请求执行的有效性。

本发明实施例提供的技术方案,区块链节点通过将从区块链网络中获取的输入依赖数据集合和输出变更数据集合,与自身执行事务请求所确定的输入数据和输出数据进行一致性比对,进而可确定事务请求执行的有效性。相比于现有的技术方案,本实施例为确定事务请求执行的有效性提供了一种新思路,能够有效防止智能合约调用请求的延时执行,避免因延时执行导致的结果不确定性,进而保证区块链网络的良性运行。

示例性的,输入依赖数据集合可以包括预执行事务请求过程中所需要读取的参数名称和参数值;输出变更数据集合可以包括预执行事务请求后所要更新的参数名称和参数值。

示例性的,输入依赖数据集合和输出变更数据集合可以为数据明文,或者为经由加密处理得到的数据密文,或者为经由哈希处理得到的压缩数据。

示例性的,若输入依赖数据集合和输出变更数据集合为数据密文或压缩数据,则数据比对模块830具体可以用于:

分别对输入数据和输出数据进行加密处理或哈希处理,得到本地数据密文或本地压缩数据;

将输入数据和输出数据的本地数据密文或本地压缩数据,与获取的输入依赖数据集合和输出变更数据集合的数据密文或本地压缩数据进行一致性比对。

示例性的,有效性确定模块840具体可以用于:

如果比对通过,则确定事务请求的执行结果有效,将执行结果作为事务数据存储于区块链中;

否则,丢弃事务请求、输入依赖数据集合和输出变更数据集合。

实施例九

图9为本发明实施例九提供的一种设备的结构示意图,图9示出了适于用来实现本发明实施例实施方式的示例性设备的框图。图9显示的设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。设备12典型可以是承担区块链网络节点功能的计算设备。

如图9所示,设备12以通用计算设备的形式表现。设备12的组件可以包括但不限于:一个或者多个处理器16,系统存储器28,连接不同系统组件(包括系统存储器28和处理器16)的总线18。

总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(isa)总线,微通道体系结构(mac)总线,增强型isa总线、视频电子标准协会(vesa)局域总线以及外围组件互连(pci)总线。

设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。

系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(ram)30和/或高速缓存存储器32。设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图9未显示,通常称为“硬盘驱动器”)。尽管图9中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如cd-rom,dvd-rom或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。系统存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明实施例各实施例的功能。

具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如系统存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明实施例所描述的实施例中的功能和/或方法。

设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该设备12交互的设备通信,和/或与使得该设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口22进行。并且,设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与设备12的其它模块通信。应当明白,尽管图中未示出,可以结合设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。

处理器16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的基于智能合约的事务请求处理方法。

实施例十

本发明实施例十还提供一种计算机可读存储介质,其上存储有计算机程序(或称为计算机可执行指令),该程序被处理器执行时用于执行一种基于智能合约的事务请求处理方法,该方法包括:

产生基于目标智能合约的事务请求;

根据本地数据对事务请求进行预执行操作,确定输入依赖数据集合和输出变更数据集合;

将事务请求、输入依赖数据集合和输出变更数据集合绑定,并传输至区块链网络,以请求区块链网络中的其他节点执行事务请求。

或者,

获取在区块链网络中传输的事务请求、输入依赖数据集合和输出变更数据集合;

在执行事务请求过程中,确定事务请求所涉及的输入数据和输出数据;

将输入数据和输出数据,与获取的输入依赖数据集合和输出变更数据集合进行一致性比对;

依据比对结果,确定事务请求执行的有效性。

本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、rf等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言或其组合来编写用于执行本发明实施例操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如”c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或设备上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明实施例进行了较为详细的说明,但是本发明实施例不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

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