一种基于区块链的交易一致性的处理方法、设备以及系统与流程

文档序号:18903227发布日期:2019-10-18 22:15阅读:397来源:国知局
一种基于区块链的交易一致性的处理方法、设备以及系统与流程

本发明关于数据处理技术领域,特别是关于区块链系统中交易数据的处理技术,具体的讲是一种基于区块链的交易一致性的处理方法、基于区块链的交易一致性的处理系统、计算机设备以及计算机可读存储介质。



背景技术:

本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。

对于传统的非区块链系统,保证系统间的一致性有许多种方案,最常见的如“尝试-确认-取消”的模型,通过各系统同时尝试交易可以正常执行后再提交确认交易,并在出现异常后取消交易的方式来保证系统的一致性,但由于区块链的特性,并无法实现“尝试”的动作,交易的执行情况基于网络,一旦交易提交后共识生效则即确认,故此种方法无法应用在区块链系统中。

由于区块链底层技术多种多样,对于应用与节点不一致的问题的讨论也基于不同的技术底层。目前主要的解决方案是在交易上增加最大可确认区块数,从底层上限制在交易发送到网络后,如果当前区块已经超过某个交易规定的最大可确认区块数,交易还未被网络共识确认,则认定交易失败,同时整个网络在进行共识时也不会确认超过最大可确认区块数的交易。具体来说,即交易中规定到第n个块后,当前交易还未被整个网络共识确认,则该交易被置为失败,其他节点在第n个块后收到该交易也认定为失败。在使用这种方法的系统中,区块链中的节点在发送交易后不断的扫描读取当前区块链网络的最新区块中的已确认交易,如果到原交易指定的块数的区块生成后仍然未找到在之前的区块中找到该交易的确认信息,则认为该交易失败,并返回应用层交易失败信息。

在交易上增加最大可确认区块数的方式只限于区块会不断生成的区块链技术,如比特币,以太坊等,即没有区块也会生成空区块。但是对于商业领域常用的联盟链技术如fabric等区块链底层技术,在没有交易时不会生成新的区块,所以区块的产生不是均匀的,这使的交易中规定的最大可确认区块产生的时间不可控,使得使用最大可确认区块数来保证底层和应用的一致的方法可用性极大降低。

因此,如何提供一种新的方案,其能够解决上述技术问题是本领域亟待解决的技术难题。



技术实现要素:

有鉴于此,本发明提供了一种基于区块链的交易一致性的处理方法、基于区块链的交易一致性的处理系统、计算机设备以及计算机可读存储介质,通过设置特殊的交易重发机制,在保证不出现交易重放的情况下减少交易未明带来的影响,引入交易序号以及交互序号,可以保证区块链系统在运行时应用、节点以及网络间的交易一致性。

为了实现上述目的,本发明提供了一种基于区块链的交易一致性的处理方法,所述方法包括:

节点接收区块链应用发送的交易请求,所述交易请求包含交易对应的交易序号,所述节点为区块链中的一个节点;

在所述交易请求中添加与所述交易序号对应的交互序号,将添加后的交易请求发送至区块链网络以进行交易执行和网络共识确认;

接收所述区块链网络返回的交易结果;

将所述交易结果发送至所述区块链应用。

本发明的目的之一是,提供了一种基于区块链的交易一致性的处理系统,所述系统包括区块链应用、区块链网络以及多个节点;

其中,所述区块链应用,用于发送交易请求,所述交易请求包含交易对应的交易序号;

所述节点包括:

交易请求接收模块,用于接收所述交易请求;

交易请求添加模块,用于在所述交易请求中添加与所述交易序号对应的交互序号;

交易请求发送模块,用于将添加后的交易请求发送至所述区块链网络以进行交易执行和网络共识确认;

交易结果接收模块,用于接收所述区块链网络返回的交易结果;

交易结果发送模块,用于将所述交易结果发送至所述区块链应用。

本发明的目的之一是,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现一种基于区块链的交易一致性的处理方法。

本发明的目的之一是,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行一种基于区块链的交易一致性的处理方法。

本发明的有益效果在于,提供了一种基于区块链的交易一致性的处理方法、基于区块链的交易一致性的处理系统、计算机设备以及计算机可读存储介质,通过设置特殊的交易重发机制,在保证不出现交易重放的情况下减少交易未明带来的影响,引入交易序号以及交互序号,分别用来保证交易在多次重试情况下的唯一性和在交易序号冲突情况下的异常情况排查,增加交易取消交易,在多次交易执行失败的情形下主动申明失败防止交易未明,可以保证区块链系统在运行时应用、节点以及网络间的交易一致性。

为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种基于区块链的交易一致性的处理方法的实施方式一的流程图;

图2为本发明实施例提供的一种基于区块链的交易一致性的处理方法的实施方式二的流程图;

图3为本发明实施例提供的一种基于区块链的交易一致性的处理方法的实施方式三的流程图;

图4为本发明实施例提供的一种基于区块链的交易一致性的处理方法的实施方式四的流程图;

图5为本发明实施例提供的一种基于区块链的交易一致性的处理方法的实施方式五的流程图;

图6为本发明实施例提供的一种基于区块链的交易一致性的处理方法的实施方式六的流程图;

图7为本发明实施例提供的一种基于区块链的交易一致性的处理系统的结构示意图;

图8为本发明实施例提供的一种基于区块链的交易一致性的处理系统中节点的实施方式一的结构示意图;

图9为本发明实施例提供的一种基于区块链的交易一致性的处理系统中节点的实施方式二的结构示意图;

图10为本发明实施例提供的一种基于区块链的交易一致性的处理系统中节点的实施方式三的结构示意图;

图11为本发明实施例提供的一种基于区块链的交易一致性的处理系统中节点的实施方式四的结构示意图;

图12为本发明实施例提供的一种基于区块链的交易一致性的处理系统中节点的实施方式五的结构示意图;

图13为本发明实施例提供的一种基于区块链的交易一致性的处理系统中节点的实施方式六的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本领域技术技术人员知道,本发明的实施方式可以实现为一种系统、装置、方法或计算机程序产品。因此,本发明公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。

下面首先介绍本发明涉及的术语。

区块链系统:一种基于分布式账本的去中心化交易系统。

区块链节点:实现了区块链协议的设施,负责智能合约运行,分布式账本更新,共识确认等区块链功能,在下文中简称节点。

区块链网络:由若干个区块链节点通过约定的区块链通信协议组成的分布式网络,实现整个区块链功能的整体网络。

区块链应用:基于区块链技术开发并提供相关业务服务的软件应用。

智能合约:自动化脚本代码组成的代码。

共识:区块链网络中,多个分布式节点对交易进行沟通协商,确保所有节点交易一致的过程。

区块链交易:区块链上的交易即对智能合约的某个方法的调用,通过区块链网络的共识后达成一致,各节点按照区块链交易来更新自己的本地账本。

区块链系统的底层网络是基于分布式网络,任意两个节点间的通信可能动态路由为网络中的不同路径,这一方面是整个网络具备极强的健壮性,但另一方面也可能使得在通讯一旦出现异常时增加了错误可能出现的形式。在区块链业务应用通过特定api与区块链节点进行交互,将特定的信息通过区块链交易添加到区块链共享账本的过程中,虽然交易成功后则可以明确确定交易在全网的所有节点都执行成功,但如果一旦出现超时未返回,则该交易可能的情况是无法预估的,有可能在传播的某个环节彻底丢失,也有可能在分布式网络中的某个节点转发时因各种原因被阻塞,且该交易可能在未来的某个时间节点又重新出现在网络中。这种情况为区块链业务应用和区块链节点的交互带来了一致性的风险,即在交易超时失败时交易的状态是未明的,上层业务系统将超时交易简单的定义为失败交易是很危险的,如果该交易在未来重新出现在网络中则可能导致“重放攻击”,即相同的交易在网络上出现两次,直接影响整个网络的安全性。

区块链系统基于其强大的信用保证和强壮的系统架构,逐步在各行业落地了相关的应用系统。在区块链商业应用实施过程中,一个关键的问题是如何保证区块链网络和区块链应用间的交易一致性,本发明通过区块链上的智能合约与区块链接口程序规范结合形成一套上层区块链应用和区块链节点交互解决方案,为各种支持智能合约的区块链底层解决与上层应用的交易一致性问题。本发明使得区块链应用在与区块链网络交互时明确交易的执行结果,避免出现交易未明的情况,减少交易超时对系统造成的影响。

本发明对应用于区块链节点的多次交互,使得节点可以主动对未明的交易进行强制失败,使得该机制可以广泛应用于金融领域等对系统可用性要求极高的区块链系统中。

具体的,图1为本发明实施例提供的一种基于区块链的交易一致性的处理方法的流程图,请参阅图1,本发明提供的基于区块链的交易一致性的处理方法包括:

s101:节点接收区块链应用发送的交易请求,所述交易请求包含交易对应的交易序号,所述节点为区块链中的一个节点;

s102:在所述交易请求中添加与所述交易序号对应的交互序号,将添加后的交易请求发送至区块链网络以进行交易执行和网络共识确认;

s103:接收所述区块链网络返回的交易结果;

s104:将所述交易结果发送至所述区块链应用。

在本发明中,还可保存所述交易请求对应的交易序号以及交互序号,所述交易序号以及交互序号通过节点标识或时间戳或哈希算法生成。

本发明关注的重点是在区块链应用通过区块链节点将交易提交到区块链网络上并通过共识生效的过程中,确保区块链应用与区块链底层之间的交易一致性。为达到此目的,除需要节点将交易执行的情况及时返回给区块链应用外,还需要一套机制避免交易在提交到网络后无法获得返回的交易未明的情况。

智能合约规定了整个区块链业务系统的运行模式,在本发明中,为了实现对交易过程中的一致性控制,要求智能合约在实现基础的交易的方法外,创造性的引入两个概念:

1.交易序号(uuid)

交易序号是区块链应用在向节点提交交易申请时加入的,要求全局严格唯一;在节点中安装的智能合约中规定同一个uuid只能生效一次,重复uuid的交易会被标记为失败。当节点在向区块链网络发送交易时,可能会出现交易超时的情况,此时需要节点将交易进行重发。由于超时的交易并非一定是失败的,在不取消之前交易的情况下进行交易重发有可能导致同一笔交易在区块链上出现多次,即交易重放,在交易中加入uuid即可防止同一笔交易多次生效。由于uuid要求全局唯一,区块链应用需要通过节点标识、时间戳以及hash算法等手段保证uuid的全局唯一性。

2.交互序号(nonce)

交互序号是节点在收到交易请求执行交易后打包进交易的,节点在收到区块链应用发送的交易后,在保持uuid不变外会在交易中增加一个nonce,在技术上要求对于同一个uuid,多个节点在分布式且离线情况下生成的nonce互不相同,故在操作上可以将其当做全局唯一操作。对于确认的交易中一个uuid对应一个nonce,通过引入nonce的机制,来确定交易是具体在哪次交互时成功的,来防止在特殊情况下交易的不明确情况。

因此,在图1所示的正常交易处理流程中:

1.区块链应用根据交易接口打包交易,并在交易中增加一个全局唯一的交易序号(uuid),将交易请求发送到节点;

2.节点收到交易请求后,在原交易的基础上,生成对应其uuid的交互序号(nonce)并打包到交易请求中,将交易请求发送到区块链网络上,同时将nonce值进行保存;

3.区块链网络对交易执行执行和共识,返回明确的交易处理结果给节点;

4.节点收到交易后将该uuid对应的处理结果返回给区块链应用。

图2为本发明实施例提供的一种基于区块链的交易一致性的处理方法的实施方式二的流程图,请参阅图2,本发明提供的基于区块链的交易一致性的处理方法在实施方式二中的交易出现超时并进行重发的处理流程包括:

s201:节点接收区块链应用发送的交易请求,所述交易请求包含交易对应的交易序号,所述节点为区块链中的一个节点;

s202:在所述交易请求中添加与所述交易序号对应的交互序号,将添加后的交易请求发送至区块链网络;

s203:节点未收到所述区块链网络返回的与所述交易请求对应的交易结果。在本发明的一种实施方式中,可预先设定一第一时间阈值,当节点将添加后的交易请求发送至区块链网络后超过第一时间阈值未收到区块链网络返回的与所述交易请求对应的交易结果时,可确定发生超时。

s204:将添加后的交易请求重新发送至所述区块链网络以进行交易执行和网络共识确认,重发后交易正常执行,因此区块链网络对交易执行和共识,并返回明确的交易结果给节点。

s205:接收所述区块链网络返回的交易结果;

s206:将所述交易结果发送至所述区块链应用。

图3为本发明实施例提供的一种基于区块链的交易一致性的处理方法的实施方式三的流程图,请参阅图3,本发明提供的基于区块链的交易一致性的处理方法在实施方式三中的交易序号重复的处理流程包括:

s301:节点接收区块链应用发送的交易请求,所述交易请求包含交易对应的交易序号,所述节点为区块链中的一个节点;

s302:在所述交易请求中添加与所述交易序号对应的交互序号,将添加后的交易请求发送至区块链网络;

s303:节点未收到所述区块链网络返回的与所述交易请求对应的交易结果。在本发明的一种实施方式中,可预先设定一第一时间阈值,当节点将添加后的交易请求发送至区块链网络后超过第一时间阈值未收到区块链网络返回的与所述交易请求对应的交易结果时,可确定发生超时。

s304:将添加后的交易请求重新发送至所述区块链网络,区块链网络在执行交易后发生交易序号(uuid)重复的错误,交易序号重复信息被返回给节点,即节点接收到所述区块链网络返回的交易序号重复信息;

s305:通过所述区块链网络查询获得所述交易序号的已生效交易对应的交互序号值;

s306:判断所述交互序号值与添加后的交易请求中的交互序号是否一致;

s307:当判断为是时,所述节点向所述区块链应用发送交易成功信息;

s308:否则,所述节点向所述区块链应用发送错误信息。

也即,在查询到区块链网络上实际生效的uuid对应的nonce后,将实际生效nonce和保存的本次节点交互的nonce进行对比,如果nonce对比的结果一致,说明交易在本次交互的多次重试中成功,节点返回给区块链应用交易成功信息,如果nonce对比结果不一致,说明该uuid在本次交互前就已经在网络上被占用了,节点返回给区块链应用错误信息。

在本发明中,还引入一个动作:交易取消(cancel),即在区块链上申明某个特定uuid的交易取消,之后所有此uuid的交易再次出现都不会记为成功;在节点发现有交易提交多次一直未明时,可以通过强制取消的方式来保证交易不会在之后网络上重放成功,保证节点返回给应用的交易失败信息是准确的,从而导致交易的不一致。

具体的,图4为本发明实施例提供的一种基于区块链的交易一致性的处理方法的实施方式四的流程图,请参阅图4,本发明提供的基于区块链的交易一致性的处理方法在实施方式四中的交易出现超时并进行多次重发仍不成功,进行交易取消的处理流程包括:

s401:节点接收区块链应用发送的交易请求,所述交易请求包含交易对应的交易序号,所述节点为区块链中的一个节点;

s402:在所述交易请求中添加与所述交易序号对应的交互序号,将添加后的交易请求发送至区块链网络;

s403:节点未收到所述区块链网络返回的与所述交易请求对应的交易结果。在本发明的一种实施方式中,可预先设定一第一时间阈值,当节点将添加后的交易请求发送至区块链网络后超过第一时间阈值未收到区块链网络返回的与所述交易请求对应的交易结果时,可确定发生超时。

s404:将添加后的交易请求重新发送n次至所述区块链网络,所述n为预先设定的次数阈值;

s405:未收到所述区块链网络返回的交易结果;

s406:发送所述交易序号至所述区块链网络以申明所述交易序号作废,区块链网络处理cancel交易,将该uuid记为失败,返回节点cancel交易成功信息;

s407:接收所述区块链网络返回的取消交易成功信息;

s408:向所述区块链应用发送交易失败信息。

图5为本发明实施例提供的一种基于区块链的交易一致性的处理方法的实施方式五的流程图,请参阅图5,本发明提供的基于区块链的交易一致性的处理方法在实施方式五中的交易出现超时并进行多次重发仍不成功后进行交易取消时出现交易序号重复的处理流程包括:

s501:节点接收区块链应用发送的交易请求,所述交易请求包含交易对应的交易序号,所述节点为区块链中的一个节点;

s502:在所述交易请求中添加与所述交易序号对应的交互序号,将添加后的交易请求发送至区块链网络;

s503:节点未收到所述区块链网络返回的与所述交易请求对应的交易结果。在本发明的一种实施方式中,可预先设定一第一时间阈值,当节点将添加后的交易请求发送至区块链网络后超过第一时间阈值未收到区块链网络返回的与所述交易请求对应的交易结果时,可确定发生超时。

s504:将添加后的交易请求重新发送n次至所述区块链网络,所述n为预先设定的次数阈值;

s505:未收到所述区块链网络返回的交易结果;

s506:发送所述交易序号至所述区块链网络以申明所述交易序号作废,区块链网络在处理cancel交易时,发生被取消的uuid重复的错误,交易序号重复信息被返回给节点;

s507:接收到所述区块链网络返回的交易序号重复信息;

s508:通过所述区块链网络查询获得所述交易序号的已生效交易对应的交互序号值;

s509:判断所述交互序号值与添加后的交易请求中的交互序号是否一致;

s510:当判断为是时,所述节点向所述区块链应用发送交易成功信息;

s511:否则,所述节点向所述区块链应用发送错误信息。

也即,在查询到区块链网络上实际生效的uuid对应的nonce后,将实际生效nonce和保存的本次节点交互的nonce进行对比,如果nonce对比的结果一致,说明交易在本次交互的多次重试中成功,节点返回给区块链应用交易成功信息,如果nonce对比结果不一致,说明该uuid在本次交互前就已经在网络上被占用了,节点返回给区块链应用错误信息。

图6为本发明实施例提供的一种基于区块链的交易一致性的处理方法的实施方式六的流程图,请参阅图6,本发明提供的基于区块链的交易一致性的处理方法在实施方式六中的交易在超时并进行多次重发仍不成功,且进行交易取消也发生超时的处理流程包括:

s601:节点接收区块链应用发送的交易请求,所述交易请求包含交易对应的交易序号,所述节点为区块链中的一个节点;

s602:在所述交易请求中添加与所述交易序号对应的交互序号,将添加后的交易请求发送至区块链网络;

s603:节点未收到所述区块链网络返回的与所述交易请求对应的交易结果。在本发明的一种实施方式中,可预先设定一第一时间阈值,当节点将添加后的交易请求发送至区块链网络后超过第一时间阈值未收到区块链网络返回的与所述交易请求对应的交易结果时,可确定发生超时。

s604:将添加后的交易请求重新发送n次至所述区块链网络,所述n为预先设定的次数阈值;

s605:未收到所述区块链网络返回的交易结果;

s606:发送所述交易序号至所述区块链网络以申明所述交易序号作废,区块链网络处理cancel交易,将该uuid记为失败,返回节点cancel交易成功信息;

s607:未接收到所述区块链网络返回的取消交易成功信息;

s608:向所述区块链应用发送特殊报错信息,此时应用系统已不可用,需要运维介入解决系统问题。

如上即是本发明提供的一种基于区块链的交易一致性的处理方法在多个实施方式的具体流程,本发明关注的重点是在区块链应用通过区块链节点将交易提交到区块链网络上并通过共识生效的过程中,确保应用与区块链底层之间的交易一致性。为达到此目的,除需要节点将交易执行的情况及时返回给应用外,还需要一套机制避免交易在提交到网络后无法获得返回的交易未明的情况。为达到此目的,本发明通过在区块链应用、节点和网络层进行一系列的协议约定,具体的:

1.智能合约:智能合约规定了整个区块链业务系统的运行模式,在本发明中,要求智能合约在实现基础的交易的方法外,还需要提供三个机制。

首先是所有的业务交易接口中需要包含交易序号(uuid)和交互序号(nonce),智能合约需要确认uuid的唯一性,对于上送交易中uuid已存在或这被标注为强制失败的交易进行拒接,同时对于合法的成功交易将uuid和与其相应nonce进行存储;

其次是需要提供nonce的查询接口,节点可以通过上送uuid,来查询该uuid对应的nonce,对于不存在的uuid和已经被标注为强制失败的uuid则也返回实际情况;

最后需要提供交易取消(cancel)的方法,节点通过cancel交易调用该方法,并上送需要强制失败的uuid,智能合约需要检查已保存的uuid列表,对于已经存在的uuid(无论是有正常交易或是之前已经被标注为强制失败),返回本次操作失败的报错信息给节点,对于未出现的uuid则负责将该uuid标识为强制失败并保存,以便之后的查询和判断。

2.应用:区块链应用是交易的发起者,其需要按照智能合约中规定的特殊格式组织业务输入,并且增加一个全局唯一的业务标识uuid作为参数,由于uuid要求全局唯一,应用需要通过节点标识、时间戳以及hash算法等手段保证uuid的全局唯一性;将交易发送给节点后等待节点对交易进行处理,并获得节点返回的明确的交易结果。

3.节点:节点在本发明中起调度整个交易流程的关键作用。

a.节点负责接受应用发送的交易,在交易中应用发送的交易序号(uuid)的基础上再增加交互序号(nonce),由于nonce在操作上可以按照全局唯一处理,其生成可以参考uuid的处理方法,同时减少位数来保证生成效率;交易打包后发送到区块链网络进行交易执行和网络共识确认,在收到明确的交易结果后返回交易执行的结果给应用;明确的交易结果包括:交易执行成功,和明确的错误信息,如交易上送格式错误,交易逻辑报错等。节点需要把该uuid对应的nonce进行保存以便查询。

b.在节点收到应用的交易且发送到网络后,网络未返回交易的任何状态,则该交易进行未明状态,则节点使用交易原uuid和对应nonce进行交易重发,如果重发后交易获得明确返回则将结果返回应用。重发可以进行多次,由于智能合约限制了相同的uuid交易只能生效一次,故重发交易并不会导致交易的重放(同一笔交易被多次执行),同uuid的多次交易只会成功一次。

c.在节点发送交易到网络并交易发生未明后,在重发交易的过程中,如果重发的交易受到智能合约报出的uuid重复错误,说明该uuid已经在区块链上生效,这可能有两种情况导致:首先是这笔交易之前确实已经在区块链上生效过了,本次交易应用上送的uuid有误,交易是失败的;另一种情况则是在本次重发交易的过程中,之前尝试的交易成功了;具体说由于重发交易的原因是之前的交易发送尝试超时未返回,发生了交易未明,但是超时的交易还是可能在之后成功,并且将该uuid标记为成功,故在重发交易时会报错为uuid重复,这种情况对本次交易来看是成功的,节点需要返回应用交易成功。由于两种情况下节点返回给应用的结果不一样,故需要对这两种情况进行区分,故节点需要调用智能合约中对uuid和nonce查询的功能,获得该uuid的已生效交易对应的nonce值,并查询该nonce是与本次交易过程中使用的nonce一致:如果该生效交易对应的nonce与本次交易使用的nonce不一致,则交易是之前已经生效过的,节点返回错误信息给应用;如果该生效交易对应的nonce与本次交易使用的nonce一致,则交易在多次的重试中已经有一次使得交易生效成功,节点返回交易成功信息给应用。

d.如果节点在多次重试将交易发送到网络上,但多次重试一直处于返回超时的交易未明状态,且重试次数超过了设置的重试次数最大限制,则节点组织交易取消(cancel)交易,申明该uuid对应的交易失效,并返回错误信息给应用。特殊的,如果cancel交易本身也失效,则说明整个区块链网络已经不可用,节点不再进行cancel交易的重发,其将返回特殊的报错信息给应用,并且需要采取特殊措施,包括运维介入等手段排查并恢复系统。此外cancel交易本身也可能会获得uuid重复错误,此种情况下执行过程与上一种情况对uuid重复错误处理流程相同,节点根据判断nonce来返回正确或错误信息给应用。

本发明还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现一种基于区块链的交易一致性的处理方法。

本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行一种基于区块链的交易一致性的处理方法。

应当注意,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。在介绍了本发明示例性实施方式之后,接下来,参考附图对本发明示例性实施方式的系统进行介绍。该系统的实施可以参见上述整体的实施,重复之处不再赘述。

区块链是一种分布式账本结束,在分布式p2p网络上的每个节点都保存了完整的一份数据账本,于此同时在各节点都安装部署了相同的智能合约以操作自己的账本;节点在向网络提交交易并经过整个网络的共识后,交易被打包进入最新的区块中,所有节点都会接受到此区块,并按照此交易执行智能合约并更新自己的账本,这个过程即区块链交易上链的过程;区块链将所有交易按顺序打包成区块存储,并通过hash算法保证区块严格按照顺序排列成链,在交易完全一致的情况下交易更新账本的逻辑即智能合约也是一致的,这保证了链上所有节点的账本数据是严格一致且不可篡改的;应用通过节点提交的区块链交易一旦经过网络的共识算法确认上链成功,则此交易对区块链网络上的所有节点来说都是明确生效、不可篡改的。

在区块链系统运行的过程中,一旦交易通过节点提交后,未能在网络上经过共识确认上链成功之前,该交易处于未明状态,即无法确认该交易最终的执行状态,其有可能消失在网络中,也有可能在某个的时间节点又重新出现并执行;长时间的交易未明则导致了应用与区块链的不一致,进一步导致系统风险。此种情况出现的原因可能有很多种,如应用,发送节点本身应用终止,网络阻塞和波动,交易本身执行问题等。为解决这种问题,需要一套方案来在交易发生未明时重试交易,且在交易一直处于未明状态时申明交易失败,来保证应用于区块链系统的交易一致性。

一个典型的区块链业务应用通过节点与区块链网络的交互过程如图7所示,区块链应用100将交易请求提交给区块链的一个节点200,节点200把交易经过处理后(如执行智能合约)广播到整个区块链网络300,区块链网络300确认了此交易上链成功后节点会从最新的区块中获得通知,最后节点可以通知应用交易已经成功。

为了实现对交易过程中的一致性控制,本发明引入两个概念:首先是交易序号(uuid),它是应用在向节点提交交易申请时加入的,要求全局严格唯一;在节点中安装的智能合约中规定同一个uuid只能生效一次,重复uuid的交易会被标记为失败。当节点在向区块链网络发送交易时,可能会出现交易超时的情况,此时需要节点将交易进行重发。由于超时的交易并非一定是失败的,在不取消之前交易的情况下进行交易重发有可能导致同一笔交易在区块链上出现多次,即交易重放,在交易中加入uuid即可防止同一笔交易多次生效。

交互序号(nonce)则是节点在收到交易请求执行交易后打包进交易的,节点在收到应用发送的交易后,在保持uuid不变外会在交易中增加一个nonce,在技术上要求对于同一个uuid,多个节点在分布式且离线情况下生成的nonce互不相同,故在操作上可以将其当做全局唯一操作。对于确认的交易中一个uuid对应一个nonce;通过引入nonce的机制,来确定交易是具体在哪次交互时成功的,来防止在特殊情况下交易的不明确情况。

除此之外还需要引入另一个动作:交易取消(cancel),即在区块链上申明某个特定uuid的交易取消,之后所有此uuid的交易再次出现都不会记为成功;在节点发现有交易提交多次一直未明时,可以通过强制取消的方式来保证交易不会在之后网络上重放成功,保证节点返回给应用的交易失败信息是准确的,从而导致交易的不一致。

图7为本发明实施例提供的一种基于区块链的交易一致性的处理系统的结构示意图,请参阅图7,该系统包括区块链应用100、区块链网络300以及多个节点200。其中,所述区块链应用100,用于发送交易请求,所述交易请求包含交易对应的交易序号。

图8为本发明实施例提供的一种基于区块链的交易一致性的处理系统中节点的实施方式一的结构示意图,请参阅图8,在实施方式一中,所述节点包括:

交易请求接收模块201,用于接收所述交易请求;

交易请求添加模块202,用于在所述交易请求中添加与所述交易序号对应的交互序号;

交易请求发送模块203,用于将添加后的交易请求发送至所述区块链网络以进行交易执行和网络共识确认;

交易结果接收模块204,用于接收所述区块链网络返回的交易结果;

交易结果发送模块205,用于将所述交易结果发送至所述区块链应用。

在本发明的其他实施方式中,节点还可包括交易序号保存模块,用于保存所述交易请求对应的交易序号以及交互序号,所述交易序号以及交互序号通过节点标识或时间戳或哈希算法生成。

图9为本发明实施例提供的一种基于区块链的交易一致性的处理系统中节点的实施方式二的结构示意图,请参阅图9,在实施方式二中,所述节点还包括:

交易请求重发模块206,用于当所述交易结果接收模块未收到所述区块链网络返回的与所述交易请求对应的交易结果时,将添加后的交易请求重新发送至所述区块链网络以进行交易执行和网络共识确认。重发后交易正常执行,因此区块链网络对交易执行和共识,并返回明确的交易结果给节点。

图10为本发明实施例提供的一种基于区块链的交易一致性的处理系统中节点的实施方式三的结构示意图,请参阅图10,在实施方式三中,所述节点还包括:

重复信息接收模块207,用于接收所述区块链网络返回的交易序号重复信息;

序号值查询模块208,用于通过所述区块链网络查询获得所述交易序号的已生效交易对应的交互序号值;

错误信息发送模块209,用于当所述交互序号值与添加后的交易请求中的交互序号不一致时,向所述区块链应用发送错误信息;

成功信息发送模块210,用于当所述交互序号值与添加后的交易请求中的交互序号一致时,向所述区块链应用发送交易成功信息。

也即,在查询到区块链网络上实际生效的uuid对应的nonce后,将实际生效nonce和保存的本次节点交互的nonce进行对比,如果nonce对比的结果一致,说明交易在本次交互的多次重试中成功,节点返回给区块链应用交易成功信息,如果nonce对比结果不一致,说明该uuid在本次交互前就已经在网络上被占用了,节点返回给区块链应用错误信息。

图11为本发明实施例提供的一种基于区块链的交易一致性的处理系统中节点的实施方式四的结构示意图,请参阅图11,在实施方式四中,所述节点还包括:

交易序号申明模块211,用于当所述交易请求重发模块将添加后的交易请求重新发送n次至所述区块链网络且未收到所述区块链网络返回的交易结果时,发送所述交易序号至所述区块链网络以申明所述交易序号作废,所述n为预先设定的次数阈值;

取消成功接收模块212,用于接收所述区块链网络返回的取消交易成功信息;

失败信息发送模块213,用于向所述区块链应用发送交易失败信息。

图12为本发明实施例提供的一种基于区块链的交易一致性的处理系统中节点的实施方式五的结构示意图,请参阅图12,在实施方式五中,所述节点还包括:

第一判断模块214,用于当所述交易序号申明模块发送所述交易序号至所述区块链网络后判断所述重复信息接收模块是否接收到所述区块链网络返回的交易序号重复信息,当判断为是时,执行所述序号值查询模块。

图13为本发明实施例提供的一种基于区块链的交易一致性的处理系统中节点的实施方式六的结构示意图,请参阅图13,在实施方式六中,所述节点还包括:

第二判断模块215,用于当所述交易序号申明模块发送所述交易序号至所述区块链网络时判断所述取消成功接收模块是否接收到所述区块链网络返回的取消交易成功信息;

特殊信息发送模块216,用于当所述第二判断模块判断为否时,向所述区块链应用发送特殊报错信息。

如上即是本发明提供的一种基于区块链的交易一致性的处理系统,利用交易重发的机制,在交易超时后进行重新尝试,提升交易正常执行的概率;采用交易序号(uuid)标识交易唯一性,防止交易在超时重发时,同一笔交易多次在网络执行形成交易重放;采用交互序号(nonce)标识交易是在节点和网络的哪次交互中生效的,防止在交易重发并遇到uuid重复的错误时,无法判断交易实际的执行情况;引入交易取消(cancel)机制,在多次重试交易仍然超时的情况下主动申请交易失败,避免交易未明的情况,保证系统间的交易一致性。

此外,尽管在上文详细描述中提及了系统的若干单元模块,但是这种划分仅仅并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。同样,上文描述的一个单元的特征和功能也可以进一步划分为由多个单元来具体化。以上所使用的术语“模块”和“单元”,可以是实现预定功能的软件和/或硬件。尽管以下实施例所描述的模块较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

综上所述,本发明提供了一种基于区块链的交易一致性的处理方法、基于区块链的交易一致性的处理系统、计算机设备以及计算机可读存储介质,可以保证区块链系统在运行时应用、节点以及网络间的交易一致;可适用性较广,执行智能合约的区块链底层都可以套用此套机制以实现对交易一致性的保证;多次重试方法减少了单次交易超时未明情况对整个系统的影响,同时也保证了交易的安全。

对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmablelogicdevice,pld)(例如现场可编程门阵列(fieldprogrammablegatearray,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logiccompiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardwaredescriptionlanguage,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advancedbooleanexpressionlanguage)、ahdl(alterahardwaredescriptionlanguage)、confluence、cupl(cornelluniversityprogramminglanguage)、hdcal、jhdl(javahardwaredescriptionlanguage)、lava、lola、myhdl、palasm、rhdl(rubyhardwaredescriptionlanguage)等,目前最普遍使用的是vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage)与verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。

控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(applicationspecificintegratedcircuit,asic)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc625d、atmelat91sam、microchippic18f26k20以及siliconelabsc8051f320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。

本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机系统(可以是个人计算机,服务器,或者网络系统等)执行本申请各个实施例或者实施例的某些部分所述的方法。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持系统或便携式系统、平板型系统、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子系统、网络pc、小型计算机、大型计算机、包括以上任何系统或系统的分布式计算环境等等。

本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理系统来执行任务。在分布式计算环境中,程序模块可以位于包括存储系统在内的本地和远程计算机存储介质中。

虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。

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