一种基于有向无环图的交易方法及系统与流程

文档序号:18064182发布日期:2019-07-03 03:17阅读:120来源:国知局
一种基于有向无环图的交易方法及系统与流程

本发明涉及区块链技术领域,特别涉及一种基于有向无环图的交易方法及系统。



背景技术:

现有技术中,通常使用基于dag(有向无环图)结构的分布式账本技术的项目如iota,byteball等用来解决区块链发展至今的去中心化,可扩展性,安全等三个方面的平衡瓶颈。然而由于大部分交易之间并没有很强的因果关系,在dag模型中,没有矿工统一打包交易这一步骤,每个节点对于网络的理解在每一时刻都有可能不同,这导致所有的交易呈现一个无序的状态,而无序的交易与状态一致性是互相矛盾的。基于dag的结构的交易也带来了一致性的不可控等问题,且区块不再遵循序列来排列之后,在各区块里的交易冲突事件将会大幅提升,比如双花等问题。



技术实现要素:

为了解决现有技术的问题,本发明实施例提供了一种基于有向无环图的交易方法及系统,以克服现有技术中基于dag的结构的交易呈现一个无序的状态,从而导致一致性的不可控等问题。

为解决上述一个或多个技术问题,本发明采用的技术方案是:

一方面,提供了一种基于有向无环图的交易方法,所述方法包括如下步骤:

s1:为参与交易的各节点按序编号,在所述各节点中设立共识节点,并设定共识的时间间隔、共识交易数量;

s2:所述参与交易的各节点为各自交易申请交易编号,所述交易编号按序增加且全局唯一;

s3:根据所述时间间隔或所述共识交易数量选定第一交易,将创世交易或前次关键路径的末端交易到所述第一交易的路径作为候选的关键路径;

s4:所述共识节点对所述候选的关键路径进行确认,若所述创世交易或前次关键路径的末端交易到第二交易之间的所有交易均被确认,则选取所述创世交易或前次关键路径的末端交易到所述第二交易的路径为本次关键路径;

s5:确定所述本次关键路径为主链的增长方向并广播至所述参与交易的各节点写入一致性的账本;

s6:基于所述共识的时间间隔或共识交易数量,重复步骤s2至s5。

进一步的,所述步骤s2包括:

所述各节点按各自编号大小轮流预先申请自己的客户端的交易数量;

节点申请的交易数量剩余的数量低于预设阈值时,则发起下一轮申请;

交易提交时每个节点对交易内容进行比较,在设定的时间内将内容相同的交易过滤掉,不分配交易编号;

将创世交易的编号设置为0,其他交易的编号按序增加。

进一步的,所述步骤s3具体包括:

s3.1:在所述时间间隔或所述共识交易数量到达后,选定编号为n或共识交易数量的交易为第一交易,其中n为系统中交易的数量;

s3.2:所述共识节点对所述第一交易进行共识投票,若投票通过,则将创世交易或前次关键路径的末端交易到所述第一交易的路径作为候选的关键路径。

进一步的,所述第二交易为所述候选的关键路径上的任意一个交易。

进一步的,所述步骤s4具体包括:

s4.1:所述共识节点对所述候选的关键路径进行确认,若是所述候选的关键路径上的交易没有均被确认,则执行步骤s4.2或步骤s4.3;

s4.2:所述共识节点对所有未被确认的交易进行共识投票,若投票通过则把所述未被确认的交易的确认通过,若投票不通过,则对所述未被确认的交易的前一个交易进行共识投票,循环操作直到在关键路径上找到第二交易,从创世交易或前次关键路径的末端交易到所述第二交易之间的所有交易都被确认;

s4.3:所述共识节点在所述候选的关键路径上检查从创世交易到未被确认的交易的前一个交易,循环操作直到在所述候选的关键路径上找到第二交易,从创世交易或前次关键路径的末端交易到所述第二交易之间的所有交易都被确认;

s4.4:选取所述创世交易或前次关键路径的末端交易到所述第二交易的路径为本次关键路径。

另一方面,提供了一种基于有向无环图的交易系统,所述系统包括:

设置模块,用户为参与交易的各节点按序编号,在所述各节点中设立共识节点,并设定共识的时间间隔、共识交易数量;

编号模块,用于所述参与交易的各节点为各自交易申请交易编号,所述交易编号按序增加且全局唯一;

第一选取模块,用于根据所述时间间隔或所述共识交易数量选定第一交易,将创世交易或前次关键路径的末端交易到所述第一交易的路径作为候选的关键路径;

第二选取模块,用于所述共识节点对所述候选的关键路径进行确认,若所述创世交易或前次关键路径的末端交易到第二交易之间的所有交易均被确认,则选取所述创世交易或前次关键路径的末端交易到所述第二交易的路径为本次关键路径;

广播模块,用于确定所述本次关键路径为主链的增长方向并广播至所述参与交易的各节点写入一致性的账本。

进一步的,所述编号模块包括:

数量申请单元,用于所述各节点按各自编号大小轮流预先申请自己的客户端的交易数量;

判定单元,用于判定节点申请的交易数量剩余的数量是否低于预设阈值;

过滤单元,用于交易提交时每个节点对交易内容进行比较,在设定的时间内将内容相同的交易过滤掉,不分配交易编号;编号单元,用于将创世交易的编号设置为0,其他交易的编号按序增加。

进一步的,所述第一选取模块包括:

交易选取单元,用于在所述时间间隔或所述共识交易数量到达后,选定编号为n或共识交易数量的交易为第一交易,其中n为系统中交易的数量;

候选路径选取单元,用于所述共识节点对所述第一交易进行共识投票,若投票通过,则将创世交易或前次关键路径的末端交易到所述第一交易的路径作为候选的关键路径。

进一步的,所述第二交易为所述候选的关键路径上的任意一个交易。

进一步的,所述第二选取模块包括:

确认单元,用于所述共识节点对所述候选的关键路径进行确认;

共识单元,用于所述共识节点对所有未被确认的交易进行共识投票,若投票通过则把所述未被确认的交易的确认通过,若投票不通过,则对所述未被确认的交易的前一个交易进行共识投票,循环操作直到在关键路径上找到第二交易,从创世交易或前次关键路径的末端交易到所述第二交易之间的所有交易都被确认;

查询单元,用于所述共识节点在所述候选的关键路径上检查从创世交易到未被确认的交易的前一个交易,循环操作直到在所述候选的关键路径上找到第二交易,从创世交易或前次关键路径的末端交易到所述第二交易之间的所有交易都被确认;

关键路径选取单元,用于选取所述创世交易或前次关键路径的末端交易到所述第二交易的路径为本次关键路径。

本发明实施例提供的技术方案带来的有益效果是:

本发明实施例提供的基于有向无环图的交易方法及系统,对交易进行预申请和按序分配编号,避免了交易冲突,并设计了有向无环图的主链生成方法,通过主链确定了交易账本在节点之间的一致性和交易先后的顺序性。

附图说明

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

图1是根据一示例性实施例示出的基于有向无环图的交易方法的流程图;

图2是根据一示例性实施例示出的有向无环图的示意图;

图3是根据一示例性实施例示出的基于有向无环图的交易系统的结构示意图。

具体实施方式

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

图1是根据一示例性实施例示出的基于有向无环图的交易方法的流程图,参照图1所示,该方法包括如下步骤:

s1:为参与交易的各节点按序编号,在所述各节点中设立共识节点,并设定共识的时间间隔、共识交易数量。

具体的,为参与交易的各节点按序编号,在参与交易的各节点(包括各区块链节点或各系统节点)中设立共识节点或见证者节点,这些共识节点或见证者节点可以对dag图(有向无环图)上的关键路径、交易进行共识确认。参照与2所示,图2是根据一示例性实施例示出的有向无环图的示意图。为参与交易的各节点设定进行共识的时间间隔和共识交易数量,系统各节点可通过networktimeprotocol(ntp)进行时间同步。例如,节点编号可以为1,2,…n,共识的时间间隔记为t,共识交易数量记为txnum。这里需要说明的是,本发明实施例中,对共识节点优先编号,即将共识节点的编号优先设定为1,2,3…等,且共识节点或见证者节点的数量至少为4个。

s2:所述参与交易的各节点为各自交易申请交易编号,所述交易编号按序增加且全局唯一。

具体的,用户通过各节点的客户端提交交易,交易编号按序增加。在本发明实施例中,需保证所有交易的交易编号全局唯一。

s3:根据所述时间间隔或所述共识交易数量选定第一交易,将创世交易或到前次关键路径的末端交易到所述第一交易的路径作为候选的关键路径。

具体的,在共识的时间间隔或共识交易数量达到设定的值时,选定一个交易(即第一交易),将创世交易或前次关键路径的末端交易到该交易(即第一交易)的路径作为候选的关键路径。例如,假设创世交易编号为0,第一次关键路径是从0到40(40为确认后的交易的编号,即第一交易的编号),第二次关键路径编号则是从40到n,即第二次关键路径是从40开始,而不是从创世交易开始的。

s4:所述共识节点对所述候选的关键路径进行确认,若所述创世交易或前次关键路径的末端交易到第二交易之间的所有交易均被确认,则选取所述创世交易或前次关键路径的末端交易到所述第二交易的路径为本次关键路径。

具体的,关键路径是指从创世交易或前次关键路径的末端交易到指定的编号的交易之间具有最大长度的路径,在关键路径上的交易叫做关键交易。这里需要说明的是,这里的确认是指被2个或2个以上其他交易确认。基于有向无环图(dag)结构模式中,一般被2笔其它交易确认过的交易可以被作为关键路径上的关键交易的候选者之一。交易确认交易是dag模型的通用做法,确认的过程是对上一次交易认可,包括交易的哈希值和交易的内容并且会链接其所确认的交易。每一笔交易看作一个点的话,那它被某一笔交易确认就相当于两点之间搭了一条通路,这样的确认关系是单向的。例如交易a确认交易b:a.confirm(交易b哈希,交易b源账户,交易b目的账户,交易金额,其它参数)会判断交易是否合理。

s5:确定所述本次关键路径为主链的增长方向并广播至所述参与交易的各节点写入一致性的账本。

具体的,将选定的关键路径作为主链的增长方向,并广播至所述参与交易的所有节点,所有节点将该信息写入一致性的账本。这里需要说明的是,在本发明实施例中,新的交易只能确认已有主链上的交易。

s6:基于所述共识的时间间隔或共识交易数量,重复步骤s2至s5。

具体的,在共识的时间间隔或共识交易数量达到设定的值时,重复上述步骤s2至s5,确定新的关键路径。这里需要说明的是,后续的关键路径以上一次路径终端的交易(即前次关键路径的末端交易)作为起始交易对主链进行增长。

作为一种较优的实施方式,本发明实施例中,所述步骤s2包括:

所述各节点按各自编号大小轮流预先申请自己的客户端的交易数量;

节点申请的交易数量剩余的数量低于预设阈值时,则发起下一轮申请;

交易提交时每个节点对交易内容进行比较,在设定的时间内将内容相同的交易过滤掉,不分配交易编号;

将创世交易的编号设置为0,其他交易的编号按序增加。

具体的,为保证所有交易的交易编号全局唯一,本发明实施例中,各节点会预先申请自己的客户端的交易数量,每个节点按各自编号大小轮流申请,记录如下:(系统当前节点申请前的最大交易编号值、申请轮次、节点编号、本次交易申请的起始编号、本次交易申请的结束编号)。例如,(21,2,1,22,40),其中21代表系统当前节点申请前的最大交易编号为21,2代表当前申请轮次为第二轮,1是当前节点编号,22和40分别代表本次交易申请的起始编号和结束编号;(50,2,3,51,100),50代表系统当前节点申请前的最大交易编号为50,即代表节点1和节点2的申请后的交易编号值为50。

这里需要说明的是,在本发明实施例中,可以设置节点申请的交易数量剩余的数量低于40%(这个值可根据用户的需求进行配置)时,发起下一轮申请。交易提交时每个节点对交易内容进行比较,在设定的时间内(比如20秒或1分钟)内容相同的交易会被过滤掉,不分配交易编号。

另外在本发明实施例中,优选为将创世交易的编号设置为0,其他交易的编号按序增加。但需注意的是,所有的交易的编号全局唯一,且在设定的时间内,内容相同的交易会被过滤掉,不重新分配交易编号。

作为一种较优的实施方式,本发明实施例中,所述步骤s3具体包括:

s3.1:在所述时间间隔或所述共识交易数量到达后,选定编号为n或共识交易数量的交易为第一交易,其中n为系统中交易的数量。

具体的,在共识的时间间隔或共识交易数量达到设定的值后,选定编号等于当前系统中交易的数量的交易或共识交易数量为第一交易。例如,在共识的时间间隔达到设定的值后,而当前系统中交易的数量为n,则选取编号为n的交易作为第一交易,或者,在共识交易数量达到设定的值后,则选取编号为共识交易数量的交易作为第一交易。

这里需要说明的是,按照上述方式选定第一交易,可以最大化关键路径。比如系统交易数量为10000,因为之前的步骤中确保了交易是按序编号。那么从某一交易a到10000,从a到900,如果a到10000是关键路径,那么不用再考虑900到10000的交易。从大到小缩小范围确认关键路径减少确定关键的时间,提高效率。

s3.2:所述共识节点对所述第一交易进行共识投票,若投票通过,则将创世交易或前次关键路径的末端交易到所述第一交易的路径作为候选的关键路径。

具体的,第一交易选定后,共识节点对所述第一交易进行共识投票,若投票通过,则将创世交易或前次关键路径的末端交易到所述第一交易的路径作为候选的关键路径。这里需要说明的是,在本发明实施例中,共识投票遵循bft(tendermint)或pbft算法(n=3f+1,n代表节点总数,f代表故障节点或者恶意节点)。

作为一种较优的实施方式,本发明实施例中,所述第二交易为所述候选的关键路径上的任意一个交易。

具体的,也就是说,在本发明实施例中,第二交易可以是第一交易本身,也可以是候选的关键路径上的任意一个交易,即从创世交易到第一交易之间的任意一个交易。

作为一种较优的实施方式,本发明实施例中,所述步骤s4具体包括:

s4.1:所述共识节点对所述候选的关键路径进行确认,若是所述候选的关键路径上的交易没有均被确认,则执行步骤s4.2或步骤s4.3。

具体的,共识节点对候选的关键路径进行确认(确认指被2个或2个以上的其它交易确认),若是候选的关键路径上存在一个交易(即第二交易),从创世交易到该交易(即第二交易)之间的所有交易均被确认,则选取创世交易到该交易(即第二交易)的路径为关键路径。若是候选的关键路径上的交易没有均被确认,则有两种方式处理,分别参照步骤s4.2或步骤s4.3。这里需要说明的是,若是候选的关键路径上的交易均被确认,则选定候选的关键路径为关键路径,此时第二交易即为第一交易。

s4.2:所述共识节点对所有未被确认的交易进行共识投票,若投票通过则把所述未被确认的交易的确认通过,若投票不通过,则对所述未被确认的交易的前一个交易进行共识投票,循环操作直到在关键路径上找到第二交易,从创世交易或前次关键路径的末端交易到所述第二交易之间的所有交易都被确认。

具体的,所有共识节点对所有未被确认的交易进行共识投票,同样的,这里共识投票遵循bft(tendermint)或pbft算法(n=3f+1,n代表节点总数,f代表故障节点或者恶意节点)。若投票通过,则把该未被确认的交易的确认次数记为2,即把该未被确认的交易确认通过,否则若投票不通过,则对未被确认的交易的前一个交易进行共识投票,循环操作直到在关键路径上找到一个交易(即第二交易),从创世交易或前次关键路径的末端交易到该交易(即第二交易)之间的所有交易都被确认。

s4.3:所述共识节点在所述候选的关键路径上检查从创世交易到未被确认的交易的前一个交易,循环操作直到在所述候选的关键路径上找到第二交易,从创世交易或前次关键路径的末端交易到所述第二交易之间的所有交易都被确认。

具体的,所有共识节点不对未被确认的交易进行共识投票,而是在候选的关键路径上检查从创世交易到未被确认的交易的前一个交易是否被确认,循环操作,直到在候选的关键路径上找到一个交易(即第二交易),从创世交易到该交易(即第二交易)之间的所有交易都被确认。

s4.4:选取所述创世交易或前次关键路径的末端交易到所述第二交易的路径为本次关键路径。

具体的,从创世交易或前次关键路径的末端交易到第二交易的所有交易均在本次关键路径上,且创世交易到第二交易之间的所有交易都被确认。

图3是根据一示例性实施例示出的基于有向无环图的交易系统的结构示意图,参照图3所示,该系统包括:

设置模块,用户为参与交易的各节点按序编号,在所述各节点中设立共识节点,并设定共识的时间间隔、共识交易数量;

编号模块,用于所述参与交易的各节点为各自交易申请交易编号,所述交易编号按序增加且全局唯一;

第一选取模块,用于根据所述时间间隔或所述共识交易数量选定第一交易,将创世交易或前次关键路径的末端交易到所述第一交易的路径作为候选的关键路径;

第二选取模块,用于所述共识节点对所述候选的关键路径进行确认,若所述创世交易或前次关键路径的末端交易到第二交易之间的所有交易均被确认,则选取所述创世交易或前次关键路径的末端交易到所述第二交易的路径为本次关键路径;

广播模块,用于确定所述本次关键路径为主链的增长方向并广播至所述参与交易的各节点写入一致性的账本。

作为一种较优的实施方式,本发明实施例中,所述编号模块包括:

数量申请单元,用于所述各节点按各自编号大小轮流预先申请自己的客户端的交易数量;

判定单元,用于判定节点申请的交易数量剩余的数量是否低于预设阈值;

过滤单元,用于交易提交时每个节点对交易内容进行比较,在设定的时间内将内容相同的交易过滤掉,不分配交易编号;

编号单元,用于将创世交易的编号设置为0,其他交易的编号按序增加。

作为一种较优的实施方式,本发明实施例中,所述第一选取模块包括:

交易选取单元,用于在所述时间间隔或所述共识交易数量到达后,选定编号为n或共识交易数量的交易为第一交易,其中n为系统中交易的数量;

候选路径选取单元,用于所述共识节点对所述第一交易进行共识投票,若投票通过,则将创世交易或前次关键路径的末端交易到所述第一交易的路径作为候选的关键路径。

作为一种较优的实施方式,本发明实施例中,所述第二交易为所述候选的关键路径上的任意一个交易。

作为一种较优的实施方式,本发明实施例中,所述第二选取模块包括:

确认单元,用于所述共识节点对所述候选的关键路径进行确认;

共识单元,用于所述共识节点对所有未被确认的交易进行共识投票,若投票通过则把所述未被确认的交易的确认通过,若投票不通过,则对所述未被确认的交易的前一个交易进行共识投票,循环操作直到在关键路径上找到第二交易,从创世交易或前次关键路径的末端交易到所述第二交易之间的所有交易都被确认;

查询单元,用于所述共识节点在所述候选的关键路径上检查从创世交易到未被确认的交易的前一个交易,循环操作直到在所述候选的关键路径上找到第二交易,从创世交易或前次关键路径的末端交易到所述第二交易之间的所有交易都被确认;

关键路径选取单元,用于选取所述创世交易或前次关键路径的末端交易到所述第二交易的路径为本次关键路径。

综上所述,本发明实施例提供的技术方案带来的有益效果是:

本发明实施例提供的基于有向无环图的交易方法及系统,对交易进行预申请和按序分配编号,避免了交易冲突,并设计了有向无环图的主链生成方法,通过主链确定了交易账本在节点之间的一致性和交易先后的顺序性。

需要说明的是:上述实施例提供的基于有向无环图的交易系统在触发交易业务时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的基于有向无环图的交易系统与基于有向无环图的交易方法实施例属于同一构思,即该方法是基于该系统的,其具体实现过程详见方法实施例,这里不再赘述。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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