本发明涉及金融科技(fintech)技术领域,尤其涉及一种区块链(blockchain)的抗分叉检测方法及装置。
背景技术:
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。在金融领域的区块链技术中,私有交易处理是一个重要的研究问题。
目前实现私有交易的方案有两类:一类是在交易处理过程中对私有交易进行识别后另行处理;一类是通过多群组的方案实现特定节点间的私有交易。但是第一类的处理方式会给区块链提高处理复杂度,而对于第二类的处理方式,其创建的群组会存在对资源长期占用的问题,造成资源浪费。
技术实现要素:
本发明实施例提供一种基于区块链的私有交易处理方法及装置,相比现有技术,能够实现低资源占用率,不会增加区块链的处理复杂度。
第一方面,本发明实施例提供一种基于区块链的私有交易处理方法,包括:
交易发起方向区块链中私有交易的多个交易可见方发送查询信息,以使所述多个交易可见方确认是否可以执行所述私有交易;
所述交易发起方在接收到所述多个交易可见方返回的执行确认信息后,执行私有交易,得到执行结果;
所述交易发起方向所述多个交易可见方广播所述私有交易和所述执行结果,以使所述多个交易可见方执行所述私有交易并比较执行结果;
所述交易发起方在预设时间内接收到所述多个交易可见方返回的执行成功信息后,将执行所述私有交易涉及的数据存储到私有数据库,并确定所述私有交易的验证数据,将所述私有交易的验证数据存储到所述区块链;
所述交易发起方向所述多个交易可见方广播数据存储通知,以使所述多个交易可见方将执行所述私有交易涉及的数据存储到自身的私有数据库。
上述技术方案中,通过在本地执行私有交易,将执行私有交易涉及的数据存储在私有数据库,并将私有交易的验证数据发送到区块链存储,相比现有方案,可以实现低资源占用率,不增加区块链处理复杂度。
可选的,所述交易发起方执行私有交易,得到执行结果,包括:
所述交易发起方锁定所述私有交易涉及的账户资源,基于所述私有交易涉及的账户当前的数据状态,本地执行所述私有交易,得到所述私有交易执行后的数据状态,并存储在本地缓存中。
可选的,所述交易发起方将执行所述私有交易涉及的数据存储到私有数据库,并确定所述私有交易的验证数据,包括:
所述交易发起方将本地缓存中的执行所述私有交易涉及的数据存储到本地的私有数据库中;
所述交易发起方确定所述私有交易的哈希值;根据执行所述私有交易涉及的数据确定所述私有交易的默克尔树的根节点的哈希值;根据执行所述私有交易涉及的数据中未修改的数据确定所述未修改的数据对应的默克尔树的验证路径;
所述交易发起方将所述私有交易的哈希值、所述私有交易的默克尔树的根节点的哈希值、所述未修改的数据对应的默克尔树的验证路径以及所述私有交易的交易可见方的标识信息确定为所述私有交易的验证数据。
可选的,所述方法还包括:
所述交易发起方若在预设时间内未接收到所有的交易可见方返回的执行成功信息,则向所述多个交易可见方发送终止交易的通知,以使所述多个交易可见方终止执行交易,释放所述锁定的账户资源。
第二方面,本发明实施例提供一种基于区块链的私有交易处理方法,包括:
交易可见方获取区块链中的交易发起方广播的私有交易以及所述交易发起方的执行结果;
所述交易可见方在本地执行所述私有交易,得到执行结果,并将所述执行结果与所述交易发起方的执行结果进行比较,向所述交易发起方发送是否执行成功信息;
所述交易可见方在接收到所述交易发起方发送的数据存储通知后,将执行所述私有交易涉及的数据存储到私有数据库。
可选的,所述交易可见方在本地执行所述私有交易,得到执行结果,并将所述执行结果与所述交易发起方的执行结果进行比较,向所述交易发起方发送是否执行成功信息,包括:
所述交易可见方锁定所述私有交易涉及的账户资源,基于所述私有交易涉及的账户当前的数据状态,本地执行所述私有交易,得到所述私有交易执行后的数据状态,并存储在本地缓存中;
所述交易可见方对比所述交易发起方的执行结果与所述私有交易执行后的数据状态是否一致,若一致,则确定执行成功,向所述交易发起方发送执行成功信息;否则确定执行失败,向所述交易发起方发送执行失败信息。
可选的,所述交易可见方将执行所述私有交易涉及的数据存储到私有数据库,并确定所述私有交易的验证数据,包括:
所述交易可见方将本地缓存中执行所述私有交易涉及的数据存储到本地的私有数据库中。
可选的,所述方法还包括:
在确认所述交易发起方处于宕机状态时,所述交易可见方向所述区块链中的第一交易可见方发送询问,若确定所述第一交易可见方已提交本地缓存中数据,则执行与所述第一交易可见方相同的操作;所述第一交易可见方为所述区块链中其它交易可见方中的任一交易可见方;
所述交易可见方若确定所述第一交易可见方未执行所述私有交易,则所述交易发起方已终止交易;
所述交易可见方若确定所述第一交易可见方执行完成所述私有交易,则继续询问所述区块链中除所述第一交易可见方的其它交易可见方,直到确认所述区块链中所有的交易可见方均执行完所述私有交易后,向工作人员发出系统阻塞通知。
可选的,所述方法还包括:
所述交易可见方在重启后或周期性的监听所述区块链上的验证数据,若确定存在缺失数据,则从所述区块链上的其它可见方获取所述验证数据;
所述交易可见方根据所述验证数据中的私有交易的哈希值验证所述私有交易的正确性和完整性,并在验证通过后执行所述私有交易,得到执行结果;
所述交易可见方基于所述执行结果和所述验证数据中的未修改的数据的默克尔树的验证路径,确定出所述私有交易的默克尔树的根节点的哈希值;
所述交易可见方在确定所述私有交易的默克尔树的根节点的哈希值与所述验证数据中的默克尔树的根节点的哈希值一致时,将执行所述私有交易涉及的数据存储到本地私有数据库中。
第三方面,本发明实施例提供一种基于区块链的私有交易处理装置,包括:
发送单元,用于向区块链中私有交易的多个交易可见方发送查询信息,以使所述多个交易可见方确认是否可以执行所述私有交易;
处理单元,用于在接收到所述多个交易可见方返回的执行确认信息后,执行私有交易,得到执行结果;
所述发送单元,还用于向所述多个交易可见方广播所述私有交易和所述执行结果,以使所述多个交易可见方执行所述私有交易并比较执行结果;
所述处理单元,还用于在预设时间内接收到所述多个交易可见方返回的执行成功信息后,将执行所述私有交易涉及的数据存储到私有数据库,并确定所述私有交易的验证数据,将所述私有交易的验证数据存储到所述区块链;
所述发送单元,还用于向所述多个交易可见方广播数据存储通知,以使所述多个交易可见方将所述私有交易的相关数据存储到自身的私有数据库。
可选的,所述处理单元具体用于:
锁定所述私有交易涉及的账户资源,基于所述私有交易涉及的账户当前的数据状态,本地执行所述私有交易,得到所述私有交易执行后的数据状态,并存储在本地缓存中。
可选的,所述处理单元具体用于:
将本地缓存中的执行所述私有交易涉及的数据存储到本地的私有数据库中;
确定所述私有交易的哈希值;根据执行所述私有交易涉及的数据确定所述私有交易的默克尔树的根节点的哈希值;根据执行所述私有交易涉及的数据中未修改的数据确定所述未修改的数据对应的默克尔树的验证路径;
将所述私有交易的哈希值、所述私有交易的默克尔树的根节点的哈希值、所述未修改的数据对应的默克尔树的验证路径以及所述私有交易的交易可见方的标识信息确定为所述私有交易的验证数据。
可选的,所述处理单元还用于:
若在预设时间内未接收到所有的交易可见方返回的执行成功信息,则向所述多个交易可见方发送终止交易的通知,以使所述多个交易可见方终止执行交易,释放所述锁定的账户资源。
第四方面,本发明实施例提供一种基于区块链的私有交易处理装置,包括:
获取单元,具体用于获取区块链中的交易发起方广播的私有交易以及所述交易发起方的执行结果;
处理单元,具体用于在本地执行所述私有交易,得到执行结果,并将所述执行结果与所述交易发起方的执行结果进行比较,向所述交易发起方发送是否执行成功信息;在接收到所述交易发起方发送的数据存储通知后,将执行所述私有交易涉及的数据存储到私有数据库。
可选的,所述处理单元具体用于:
锁定所述私有交易涉及的账户资源,基于所述私有交易涉及的账户当前的数据状态,本地执行所述私有交易,得到所述私有交易执行后的数据状态,并存储在本地缓存中;
对比所述交易发起方的执行结果与所述私有交易执行后的数据状态是否一致,若一致,则确定执行成功,向所述交易发起方发送执行成功信息;否则确定执行失败,向所述交易发起方发送执行失败信息。
可选的,所述处理单元具体用于:
将本地缓存中执行所述私有交易涉及的数据存储到本地的私有数据库中。
可选的,所述处理单元还用于:
在确认所述交易发起方处于宕机状态时,向所述区块链中的第一交易可见方发送询问,若确定所述第一交易可见方已提交本地缓存中数据,则执行与所述第一交易可见方相同的操作;所述第一交易可见方为所述区块链中其它交易可见方中的任一交易可见方;
若确定所述第一交易可见方未执行所述私有交易,则所述交易发起方已终止交易;
若确定所述第一交易可见方执行完成所述私有交易,则继续询问所述区块链中除所述第一交易可见方的其它交易可见方,直到确认所述区块链中所有的交易可见方均执行完所述私有交易后,向工作人员发出系统阻塞通知。
可选的,所述处理单元还用于:
在重启后或周期性的监听所述区块链上的验证数据,若确定存在缺失数据,则从所述区块链上的其它可见方获取所述验证数据;
根据所述验证数据中的私有交易的哈希值验证所述私有交易的正确性和完整性,并在验证通过后执行所述私有交易,得到执行结果;
基于所述执行结果和所述验证数据中的未修改的数据的默克尔树的验证路径,确定出所述私有交易的默克尔树的根节点的哈希值;
在确定所述私有交易的默克尔树的根节点的哈希值与所述验证数据中的默克尔树的根节点的哈希值一致时,将执行所述私有交易涉及的数据存储到本地私有数据库中。
第五方面,本发明实施例还提供一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述基于区块链的私有交易处理方法。
第六方面,本发明实施例还提供一种计算机可读非易失性存储介质,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行上述基于区块链的私有交易处理方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种系统架构的示意图;
图2为本发明实施例提供的一种基于区块链的私有交易处理方法的流程示意图;
图3为本发明实施例提供的一种私有交易处理系统的架构的示意图;
图4为本发明实施例提供的一种基于区块链的私有交易处理装置的结构示意图;
图5为本发明实施例提供的一种基于区块链的私有交易处理装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种系统架构。如图1所示,该系统架构可以包括区块链100和多个用户客户端200;
其中,多个用户客户端200可以为不同的机构使用的客户端,该多个用户客户端200中的部分用户客户端设有本地私有数据库,用于在本地处理私有交易。
区块链100包括多个区块链节点,该多个区块链节点由多个区块组成,用于存储用户客户端200发送的验证数据。
需要说明的是,上述图1所示的结构仅是一种示例,本发明实施例对此不做限定。
基于上述描述,图2详细的示出了本发明实施例提供的一种基于区块链的私有交易处理方法的流程,该流程可以由基于区块链的私有交易处理装置执行。下面将通过交易发起方和交易可见方交互的方式来描述该私有交易处理的流程。
如图2所示,该流程具体包括:
步骤201,交易发起方发送查询信息。
在本发明实施例中,当交易发起方需要处理私有交易时,可以向区块链中私有交易的多个交易可见方发送查询信息,以使该多个交易可见方确认是否可以执行私有交易。
步骤202,交易可见方发送执行确认信息。
交易可见方在接收到交易发起方的查询信息后,可以根据自身情况来确定是否可以执行该私有交易,如果可以,则返回执行确认信息,如果不可以,则返回执行否定信息。
步骤203,交易发起方执行私有交易,得到执行结果。
当交易发起方接收到所有的交易可见方返回的执行确认信息之后,就可以执行该私有交易,具体的,交易发起方锁定私有交易涉及的账户资源,基于私有交易涉及的账户当前的数据状态,本地执行私有交易,得到私有交易执行后的数据状态,并存储在本地缓存中。
步骤204,交易发起方广播私有交易和执行结果。
当交易发起方执行私有交易完成后,就可以向区块链中的多个交易可见方广播私有交易和执行结果,以使多个交易可见方执行私有交易并比较执行结果。
步骤205,交易可见方执行私有交易,得到执行结果。
当交易可见方得到交易发起方广播的私有交易和执行结果后,就可以在本地执行私有交易,具体的,交易可见方锁定私有交易涉及的账户资源,基于私有交易涉及的账户当前的数据状态,本地执行私有交易,得到私有交易执行后的数据状态,并存储在本地缓存中。交易可见方对比交易发起方的执行结果与私有交易执行后的数据状态是否一致,若一致,则确定执行成功;否则确定执行失败。
步骤206,交易可见方发送执行成功信息。
在步骤205中,若交易可见方在确定执行成功后,就向交易发起方发送执行成功信息。若交易可见方在确定执行失败后,则向交易发起方发送执行失败信息。
步骤207,交易发起方将执行私有交易涉及的数据存储到私有数据库,并确定私有交易的验证数据,将私有交易的验证数据存储到区块链。
交易发起方在步骤203中执行完私有交易之后,会启动一个定时器,设置预设时间,在预设时间内接收到所有交易可见方发送的执行成功信息后,就可以进行提交数据的操作,具体的,可以交易发起方将本地缓存中的执行私有交易涉及的数据存储到本地的私有数据库中。确定所述私有交易的哈希值;根据执行私有交易涉及的数据确定所述私有交易的默克尔树的根节点的哈希值;根据执行所述私有交易涉及的数据中未修改的数据确定所述未修改的数据对应的默克尔树的验证路径。最后可以将私有交易的哈希值、私有交易的默克尔树的根节点的哈希值、未修改的数据对应的默克尔树的验证路径以及私有交易的交易可见方的标识信息确定为私有交易的验证数据。
当得到验证数据后,就可以将验证数据进行上链操作。区块链中的任一节点都可以看到该验证数据。该验证数据可以保证私有交易的完整性。
可选的,若在预设时间内未接收到所有的交易可见方返回的执行成功信息,则交易发起方可以向多个交易可见方发送终止交易的通知,以使多个交易可见方终止执行交易,释放锁定的账户资源。
该多个交易可见方在接收到终止交易的通知后,就可以抛弃缓存中的数据,并在操作完成后释放锁定的账户资源。
步骤208,交易发起方广播数据存储通知。
当交易发起方提交数据之后,就可以向区块链中的多个交易可见方广播数据存储通知,以使多个交易可见方将执行私有交易涉及的数据存储到自身的私有数据库,并将私有交易的验证数据存储到区块链。
步骤209,交易可见方将执行私有交易涉及的数据存储到私有数据库,并确定私有交易的验证数据,将私有交易的验证数据存储到区块链。
交易可见方在接收到交易发起方广播的数据存储通知之后,就可以进行提交数据的操作,具体的,交易可见方将本地缓存中执行私有交易涉及的数据存储到本地的私有数据库中。
需要说明的是,本发明实施例还设有异常情况处理机制,具体的,在确认交易发起方处于宕机状态时,交易可见方向区块链中的第一交易可见方发送询问,并进行下述几种处理:
第一种:
交易可见方若确定第一交易可见方已提交本地缓存中数据,则执行与第一交易可见方相同的操作。该第一交易可见方为区块链中其它交易可见方中的任一交易可见方。
第二种:
交易可见方若确定第一交易可见方未执行私有交易,则交易发起方已终止交易。
第三种:
交易可见方若确定第一交易可见方执行完成私有交易,则继续询问所述区块链中除第一交易可见方的其它交易可见方,直到确认区块链中所有的交易可见方均执行完私有交易后,向工作人员发出系统阻塞通知。
此外,还可以解决数据不一致的问题,具体的,交易可见方在重启后或周期性的监听区块链上的验证数据,若确定存在缺失数据,则从区块链上的其它可见方获取验证数据。然后根据验证数据中的私有交易的哈希值验证私有交易的正确性和完整性,并在验证通过后执行私有交易,得到执行结果。基于执行结果和验证数据中的未修改的数据的默克尔树的验证路径,确定出私有交易的默克尔树的根节点的哈希值。最后在确定私有交易的默克尔树的根节点的哈希值与验证数据中的默克尔树的根节点的哈希值一致时,将执行私有交易涉及的数据存储到本地私有数据库中,并将验证数据存储到区块链中。
为了更好的解释本发明实施例,下面将在具体的实施场景下来描述上述私有交易处理的过程。
本发明实施例提供的私有交易处理系统由用户服务及区块链节点服务组成。每个用户服务各自部署一个或多个区块链节点组成区块链网络,并通过该节点与区块链进行交互,实现链上数据的写入及读取。后续例子假设有四个用户(记为1234),对应地部署了节点abcd组成区块链。具体架构可以如图3所示。
用户的数据存储有两个位置,分别为公共数据库及私有数据库。
其中公共数据库为区块链网路,即每个用户的公共数据库是一致的,且对其他用户可见。每个用户可通过其部署的区块链节点与区块链进行交互,写入或读取链上信息。公共数据库主要记录了私有交易及数据状态等hash后的内容,用于验证交易。
每个用户的私有数据库根据私有交易的可见方进行划分,以可见方的有序标识进行区分(对于本例,用户1有“1_2”和“1_2_3”两个私有数据库)。用户1与用户2之间发生的私有交易会记录在用户1和用户2各自的私有数据库“1_2”中,用户1、2和3之间发生的私有交易会记录在用户1、2和3各自的私有数据库“1_2_3”中。
以下流程假设用户1发起一笔私有交易,交易可见方为用户123。
流程①:交易发起方查询状态。
交易发起方(用户1)启动一个定时器,期间询问其他交易可见方(用户23)是否能够执行交易。交易可见方根据自身情况(该私有交易涉及的账户资源是否被锁),返回确定或者否定信息。交易发起方如果在定时器超时时间内没有收到所有交易可见方的确定信息(即超时或存在至少一个交易可见方返回否定信息),本轮交易流程结束。交易发起方在收到所有交易可见方的确定信息后,进入流程②。
流程②:交易发起方广播交易。
交易发起方(用户1)锁定私有交易涉及的账户资源,执行交易。执行完毕启动另一个定时器,期间向交易可见方(用户23)广播交易内容及本地执行结果,等待交易可见方对交易的执行结果。
流程③:交易可见方锁定资源执行交易。
交易可见方在收到私有交易后,锁定私有交易涉及的账户资源。交易可见方基于锁定的账户当前的数据状态本地执行交易。交易执行前后的数据状态在内存中记录,不会对原有落盘存储的数据状态产生影响。交易可见方会比较与交易发起方的交易执行结果后通知交易发起方(成功或者失败)。此时相关账户资源保持锁定状态。
流程④:交易发起方决策。
(1)交易发起方当且仅当在限定时间内收到所有交易可见方均成功的回复,发起方才通知交易可见方提交缓存的数据。发起方也在本地提交数据到私有数据库,同时发起正常交易将以下信息上链:a、私有交易的hash值;b、所有私有数据构建merkle(默克尔)树根节点的hash值;c、其他未修改的私有数据所构建的merkle验证路径;d、交易可见方的标识。上述数据将在节点节间进行同步,交易可见方以外的其他用户也可访问到上述数据。(2)交易发起方如在限定时间内没有收到所有交易可见方均成功的回复,将向交易可见方发送终止交易的通知。
流程⑤:交易可见方响应。
交易可见方根据流程④中交易发起方通知的内容(提交数据/终止交易)进行相应的操作,或将本地缓存的数据提交到私有数据库,或将抛弃本地缓存的数据。操作完成后释放锁定的账户资源。
上述流程可能存在的一些异常情况及相应处理方案。
(1)单点问题:
交易发起方在整个流程中起到协调作用,一旦交易发起方的服务宕机,将影响所有交易可见方的正常运行,此时由于资源被锁定,处于阻塞状态无法执行其他交易。
对于上述情况,本发明实施例引入“互询机制”。部分交易可见方(比如用户2)去询问其他可见方(比如用户3)的执行情况。如果用户3完成了流程⑤,执行了提交数据或者终止交易操作,用户2可以直接地执行与用户3相同的操作;如果用户3还没有进入流程③,可以推断交易发起方发出了“终止交易”的通知;如果用户3完成了流程③,用户2可以继续询问另外的交易可见方。只有当所有交易可见方只完成了流程③但是没进入流程⑤时,系统将陷入长时间的阻塞状态,需人工兜底介入处理。
(2)数据不一致性:
上述流程存在数据不一致的可能性。比如在流程④,交易发起方通知交易可见方进行数据提交,可能由于网络原因或者部分交易可见方的服务宕机,系统将存在部分交易可见方提交了数据而其他交易可见方没有提交数据的情况,于是产生了数据不一致性。
对于上述情况,本发明实施例引入“监听机制”。所有交易可见方可以在重启后或定期监听上述流程④中上链的hash值等信息。缺失了部分私有交易的交易可见方,可以从其他可见方获取交易相关信息并执行验证。私有交易的hash值可验证私有交易内容的正确性和完整性。交易可见方在执行私有交易后,基于该交易所修改的数据状态,连同所获取的验证路径串联计算出merkle树根节点的hash值,与所获取的根节点的hash值进行比较。如果两个值相同,则交易执行方修改本地私有数据库,实现所有交易可见方之间的数据一致性。
在本发明实施例中,交易发起方向区块链中私有交易的多个交易可见方发送查询信息,在接收到多个交易可见方返回的执行确认信息后,执行私有交易,得到执行结果,向多个交易可见方广播私有交易和所述执行结果,在预设时间内接收到多个交易可见方返回的执行成功信息后,将执行私有交易涉及的数据存储到私有数据库,并确定私有交易的验证数据,将私有交易的验证数据存储到所述区块链,向多个交易可见方广播数据存储通知,以使多个交易可见方将执行私有交易涉及的数据存储到自身的私有数据库链。通过在本地执行私有交易,将执行私有交易涉及的数据存储在私有数据库,并将私有交易的验证数据发送到区块链存储,相比现有方案,可以实现低资源占用率,不增加区块链处理复杂度。
基于相同的技术构思,图4示例性的示出了本发明实施例提供的一种基于区块链的私有交易处理装置的结构,该装置可以执行基于区块链的私有交易处理流程。
如图4所示,该装置具体包括:
发送单元401,用于向区块链中私有交易的多个交易可见方发送查询信息,以使所述多个交易可见方确认是否可以执行所述私有交易;
处理单元402,用于在接收到所述多个交易可见方返回的执行确认信息后,执行私有交易,得到执行结果;
所述发送单元401,还用于向所述多个交易可见方广播所述私有交易和所述执行结果,以使所述多个交易可见方执行所述私有交易并比较执行结果;
所述处理单元402,还用于在预设时间内接收到所述多个交易可见方返回的执行成功信息后,将执行所述私有交易涉及的数据存储到私有数据库,并确定所述私有交易的验证数据,将所述私有交易的验证数据存储到所述区块链;
所述发送单元401,还用于向所述多个交易可见方广播数据存储通知,以使所述多个交易可见方将所述私有交易的相关数据存储到自身的私有数据库。
可选的,所述处理单元402具体用于:
锁定所述私有交易涉及的账户资源,基于所述私有交易涉及的账户当前的数据状态,本地执行所述私有交易,得到所述私有交易执行后的数据状态,并存储在本地缓存中。
可选的,所述处理单元402具体用于:
将本地缓存中的执行所述私有交易涉及的数据存储到本地的私有数据库中;
确定所述私有交易的哈希值;根据执行所述私有交易涉及的数据确定所述私有交易的默克尔树的根节点的哈希值;根据执行所述私有交易涉及的数据中未修改的数据确定所述未修改的数据对应的默克尔树的验证路径;
将所述私有交易的哈希值、所述私有交易的默克尔树的根节点的哈希值、所述未修改的数据对应的默克尔树的验证路径以及所述私有交易的交易可见方的标识信息确定为所述私有交易的验证数据。
可选的,所述处理单元402还用于:
若在预设时间内未接收到所有的交易可见方返回的执行成功信息,则向所述多个交易可见方发送终止交易的通知,以使所述多个交易可见方终止执行交易,释放所述锁定的账户资源。
基于相同的技术构思,图5示例性的示出了本发明实施例提供的一种基于区块链的私有交易处理装置的结构,该装置可以执行基于区块链的私有交易处理流程。
如图5所示,该装置具体包括:
获取单元501,具体用于获取区块链中的交易发起方广播的私有交易以及所述交易发起方的执行结果;
处理单元502,具体用于在本地执行所述私有交易,得到执行结果,并将所述执行结果与所述交易发起方的执行结果进行比较,向所述交易发起方发送是否执行成功信息;在接收到所述交易发起方发送的数据存储通知后,将执行所述私有交易涉及的数据存储到私有数据库。
可选的,所述处理单元502具体用于:
锁定所述私有交易涉及的账户资源,基于所述私有交易涉及的账户当前的数据状态,本地执行所述私有交易,得到所述私有交易执行后的数据状态,并存储在本地缓存中;
对比所述交易发起方的执行结果与所述私有交易执行后的数据状态是否一致,若一致,则确定执行成功,向所述交易发起方发送执行成功信息;否则确定执行失败,向所述交易发起方发送执行失败信息。
可选的,所述处理单元502具体用于:
将本地缓存中执行所述私有交易涉及的数据存储到本地的私有数据库中。
可选的,所述处理单元502还用于:
在确认所述交易发起方处于宕机状态时,向所述区块链中的第一交易可见方发送询问,若确定所述第一交易可见方已提交本地缓存中数据,则执行与所述第一交易可见方相同的操作;所述第一交易可见方为所述区块链中其它交易可见方中的任一交易可见方;
若确定所述第一交易可见方未执行所述私有交易,则所述交易发起方已终止交易;
若确定所述第一交易可见方执行完成所述私有交易,则继续询问所述区块链中除所述第一交易可见方的其它交易可见方,直到确认所述区块链中所有的交易可见方均执行完所述私有交易后,向工作人员发出系统阻塞通知。
可选的,所述处理单元502还用于:
在重启后或周期性的监听所述区块链上的验证数据,若确定存在缺失数据,则从所述区块链上的其它可见方获取所述验证数据;
根据所述验证数据中的私有交易的哈希值验证所述私有交易的正确性和完整性,并在验证通过后执行所述私有交易,得到执行结果;
基于所述执行结果和所述验证数据中的未修改的数据的默克尔树的验证路径,确定出所述私有交易的默克尔树的根节点的哈希值;
在确定所述私有交易的默克尔树的根节点的哈希值与所述验证数据中的默克尔树的根节点的哈希值一致时,将执行所述私有交易涉及的数据存储到本地私有数据库中。
基于相同的技术构思,本发明实施例还提供了一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用存储器中存储的程序指令,按照获得的程序执行上述基于区块链的私有交易处理方法。
基于相同的技术构思,本发明实施例还提供了一种计算机可读非易失性存储介质,包括计算机可读指令,当计算机读取并执行计算机可读指令时,使得计算机执行上述基于区块链的私有交易处理方法。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
1.一种基于区块链的私有交易处理方法,其特征在于,包括:
交易发起方向区块链中私有交易的多个交易可见方发送查询信息,以使所述多个交易可见方确认是否可以执行所述私有交易;
所述交易发起方在接收到所述多个交易可见方返回的执行确认信息后,执行私有交易,得到执行结果;
所述交易发起方向所述多个交易可见方广播所述私有交易和所述执行结果,以使所述多个交易可见方执行所述私有交易并比较执行结果;
所述交易发起方在预设时间内接收到所述多个交易可见方返回的执行成功信息后,将执行所述私有交易涉及的数据存储到私有数据库,并确定所述私有交易的验证数据,将所述私有交易的验证数据存储到所述区块链;
所述交易发起方向所述多个交易可见方广播数据存储通知,以使所述多个交易可见方将执行所述私有交易涉及的数据存储到自身的私有数据库。
2.如权利要求1所述的方法,其特征在于,所述交易发起方执行私有交易,得到执行结果,包括:
所述交易发起方锁定所述私有交易涉及的账户资源,基于所述私有交易涉及的账户当前的数据状态,本地执行所述私有交易,得到所述私有交易执行后的数据状态,并存储在本地缓存中。
3.如权利要求1所述的方法,其特征在于,所述交易发起方将执行所述私有交易涉及的数据存储到私有数据库,并确定所述私有交易的验证数据,包括:
所述交易发起方将本地缓存中的执行所述私有交易涉及的数据存储到本地的私有数据库中;
所述交易发起方确定所述私有交易的哈希值;根据执行所述私有交易涉及的数据确定所述私有交易的默克尔树的根节点的哈希值;根据执行所述私有交易涉及的数据中未修改的数据确定所述未修改的数据对应的默克尔树的验证路径;
所述交易发起方将所述私有交易的哈希值、所述私有交易的默克尔树的根节点的哈希值、所述未修改的数据对应的默克尔树的验证路径以及所述私有交易的交易可见方的标识信息确定为所述私有交易的验证数据。
4.如权利要求1至3任一项所述的方法,其特征在于,所述方法还包括:
所述交易发起方若在预设时间内未接收到所有的交易可见方返回的执行成功信息,则向所述多个交易可见方发送终止交易的通知,以使所述多个交易可见方终止执行交易,释放所述锁定的账户资源。
5.一种基于区块链的私有交易处理方法,其特征在于,包括:
交易可见方获取区块链中的交易发起方广播的私有交易以及所述交易发起方的执行结果;
所述交易可见方在本地执行所述私有交易,得到执行结果,并将所述执行结果与所述交易发起方的执行结果进行比较,向所述交易发起方发送是否执行成功信息;
所述交易可见方在接收到所述交易发起方发送的数据存储通知后,将执行所述私有交易涉及的数据存储到私有数据库。
6.如权利要求5所述的方法,其特征在于,所述交易可见方在本地执行所述私有交易,得到执行结果,并将所述执行结果与所述交易发起方的执行结果进行比较,向所述交易发起方发送是否执行成功信息,包括:
所述交易可见方锁定所述私有交易涉及的账户资源,基于所述私有交易涉及的账户当前的数据状态,本地执行所述私有交易,得到所述私有交易执行后的数据状态,并存储在本地缓存中;
所述交易可见方对比所述交易发起方的执行结果与所述私有交易执行后的数据状态是否一致,若一致,则确定执行成功,向所述交易发起方发送执行成功信息;否则确定执行失败,向所述交易发起方发送执行失败信息。
7.如权利要求5所述的方法,其特征在于,所述交易可见方将执行所述私有交易涉及的数据存储到私有数据库,包括:
所述交易可见方将本地缓存中执行所述私有交易涉及的数据存储到本地的私有数据库中。
8.如权利要求5至7任一项所述的方法,其特征在于,所述方法还包括:
在确认所述交易发起方处于宕机状态时,所述交易可见方向所述区块链中的第一交易可见方发送询问,若确定所述第一交易可见方已提交本地缓存中数据,则执行与所述第一交易可见方相同的操作;所述第一交易可见方为所述区块链中其它交易可见方中的任一交易可见方;
所述交易可见方若确定所述第一交易可见方未执行所述私有交易,则所述交易发起方已终止交易;
所述交易可见方若确定所述第一交易可见方执行完成所述私有交易,则继续询问所述区块链中除所述第一交易可见方的其它交易可见方,直到确认所述区块链中所有的交易可见方均执行完所述私有交易后,向工作人员发出系统阻塞通知。
9.如权利要求5至7任一项所述的方法,其特征在于,所述方法还包括:
所述交易可见方在重启后或周期性的监听所述区块链上的验证数据,若确定存在缺失数据,则从所述区块链上的其它可见方获取所述验证数据;
所述交易可见方根据所述验证数据中的私有交易的哈希值验证所述私有交易的正确性和完整性,并在验证通过后执行所述私有交易,得到执行结果;
所述交易可见方基于所述执行结果和所述验证数据中的未修改的数据的默克尔树的验证路径,确定出所述私有交易的默克尔树的根节点的哈希值;
所述交易可见方在确定所述私有交易的默克尔树的根节点的哈希值与所述验证数据中的默克尔树的根节点的哈希值一致时,将执行所述私有交易涉及的数据存储到本地私有数据库中。
10.一种基于区块链的私有交易处理装置,其特征在于,包括:
发送单元,用于向区块链中私有交易的多个交易可见方发送查询信息,以使所述多个交易可见方确认是否可以执行所述私有交易;
处理单元,用于在接收到所述多个交易可见方返回的执行确认信息后,执行私有交易,得到执行结果;
所述发送单元,还用于向所述多个交易可见方广播所述私有交易和所述执行结果,以使所述多个交易可见方执行所述私有交易并比较执行结果;
所述处理单元,还用于在预设时间内接收到所述多个交易可见方返回的执行成功信息后,将执行所述私有交易涉及的数据存储到私有数据库,并确定所述私有交易的验证数据,将所述私有交易的验证数据存储到所述区块链;
所述发送单元,还用于向所述多个交易可见方广播数据存储通知,以使所述多个交易可见方将执行所述私有交易涉及的数据存储到自身的私有数据库。
11.如权利要求10所述的装置,其特征在于,所述处理单元具体用于:
锁定所述私有交易涉及的账户资源,基于所述私有交易涉及的账户当前的数据状态,本地执行所述私有交易,得到所述私有交易执行后的数据状态,并存储在本地缓存中。
12.如权利要求10所述的装置,其特征在于,所述处理单元具体用于:
将本地缓存中的执行所述私有交易涉及的数据存储到本地的私有数据库中;
确定所述私有交易的哈希值;根据执行所述私有交易涉及的数据确定所述私有交易的默克尔树的根节点的哈希值;根据执行所述私有交易涉及的数据中未修改的数据确定所述未修改的数据对应的默克尔树的验证路径;
将所述私有交易的哈希值、所述私有交易的默克尔树的根节点的哈希值、所述未修改的数据对应的默克尔树的验证路径以及所述私有交易的交易可见方的标识信息确定为所述私有交易的验证数据。
13.如权利要求10至12任一项所述的装置,其特征在于,所述处理单元还用于:
若在预设时间内未接收到所有的交易可见方返回的执行成功信息,则向所述多个交易可见方发送终止交易的通知,以使所述多个交易可见方终止执行交易,释放所述锁定的账户资源。
14.一种基于区块链的私有交易处理装置,其特征在于,包括:
获取单元,具体用于获取区块链中的交易发起方广播的私有交易以及所述交易发起方的执行结果;
处理单元,具体用于在本地执行所述私有交易,得到执行结果,并将所述执行结果与所述交易发起方的执行结果进行比较,向所述交易发起方发送是否执行成功信息;在接收到所述交易发起方发送的数据存储通知后,将执行所述私有交易涉及的数据存储到私有数据库。
15.如权利要求14所述的装置,其特征在于,所述处理单元具体用于:
锁定所述私有交易涉及的账户资源,基于所述私有交易涉及的账户当前的数据状态,本地执行所述私有交易,得到所述私有交易执行后的数据状态,并存储在本地缓存中;
对比所述交易发起方的执行结果与所述私有交易执行后的数据状态是否一致,若一致,则确定执行成功,向所述交易发起方发送执行成功信息;否则确定执行失败,向所述交易发起方发送执行失败信息。
16.如权利要求14所述的装置,其特征在于,所述处理单元具体用于:
将本地缓存中执行所述私有交易涉及的数据存储到本地的私有数据库中。
17.如权利要求14至16任一项所述的装置,其特征在于,所述处理单元还用于:
在确认所述交易发起方处于宕机状态时,向所述区块链中的第一交易可见方发送询问,若确定所述第一交易可见方已提交本地缓存中数据,则执行与所述第一交易可见方相同的操作;所述第一交易可见方为所述区块链中其它交易可见方中的任一交易可见方;
若确定所述第一交易可见方未执行所述私有交易,则所述交易发起方已终止交易;
若确定所述第一交易可见方执行完成所述私有交易,则继续询问所述区块链中除所述第一交易可见方的其它交易可见方,直到确认所述区块链中所有的交易可见方均执行完所述私有交易后,向工作人员发出系统阻塞通知。
18.如权利要求14至16任一项所述的装置,其特征在于,所述处理单元还用于:
在重启后或周期性的监听所述区块链上的验证数据,若确定存在缺失数据,则从所述区块链上的其它可见方获取所述验证数据;
根据所述验证数据中的私有交易的哈希值验证所述私有交易的正确性和完整性,并在验证通过后执行所述私有交易,得到执行结果;
基于所述执行结果和所述验证数据中的未修改的数据的默克尔树的验证路径,确定出所述私有交易的默克尔树的根节点的哈希值;
在确定所述私有交易的默克尔树的根节点的哈希值与所述验证数据中的默克尔树的根节点的哈希值一致时,将执行所述私有交易涉及的数据存储到本地私有数据库中。
19.一种计算设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行权利要求1至9任一项所述的方法。
20.一种计算机可读非易失性存储介质,其特征在于,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行如权利要求1至9任一项所述的方法。
技术总结