首页> 中国专利> 一种交易源目地址分离处理方法及系统

一种交易源目地址分离处理方法及系统

摘要

本发明公开了一种交易源目地址分离处理方法及系统,包括以下步骤:S1:区块依次接收并筛选若干笔交易;S2:通过若干线程对交易池内的交易进行并行处理:若当前并行处理的交易之间的目的地址相同,则通过对该目的地址加锁依次执行各笔交易;若当前并行处理的交易之间的源地址相同,则根据该源地址的账户交易序号的优先级依次执行各笔交易;若当前并行处理的交易中源地址的账户交易序号存在断号,则将该交易放入缓存区滞后执行。本发明不仅解决交易并行处理中的数据覆盖问题,而且解决了其数据处理顺序的问题,同时解决了地址既作源地址又作目的地址的问题,实现了真正的区块链交易并行处理,大大提高了交易处理的执行效率。

著录项

  • 公开/公告号CN112732831A

    专利类型发明专利

  • 公开/公告日2021-04-30

    原文格式PDF

  • 申请/专利权人 上海简苏网络科技有限公司;

    申请/专利号CN202011638966.X

  • 发明设计人 丁有振;王顺利;

    申请日2020-12-31

  • 分类号G06F16/27(20190101);G06F16/23(20190101);G06Q40/04(20120101);

  • 代理机构31236 上海汉声知识产权代理有限公司;

  • 代理人胡晶

  • 地址 201702 上海市青浦区双联路158号2层K区235室

  • 入库时间 2023-06-19 10:48:02

说明书

技术领域

本发明属于区块链技术领域,尤其涉及一种交易源目地址分离处理方法及系统。

背景技术

区块链技术基于其不可伪造、全程留痕、可以追溯、公开透明、集体维护等特征,在现实生活中实现了各种各样的功能,不仅得到了安全、可靠的保障,而且极大地方便了现实生活的方方面面。

同时正是因为区块链独特的特性,也使得原本现实当中的简单交易处理在区块链中变得十分复杂,具体而言,在现有技术中,区块链交易处理技术中还存在着以下缺陷:

1)在一个区块中,如果单纯的拒绝重复地址,会带来一个问题,即一个账户在一个区块中只能转出或接收一笔交易,这样不仅对用户来说限制太大,而且会导致交易处理的效率低下;

2)在一个区块中,如果一个交易做了源地址,就不可以再做目的地址也即是,在一个区块中,可以有多笔交易指向同一个目的地址,也可以有一个源地址发出多笔目的地址不同的交易,但是不可以一个地址在某些交易中做源地址,在另一些地址中做目的地址,这样就使得多笔交易同时处理过程变的非常复杂,从而导致交易处理的效率低下,同时也会造成交易与交易之间会存在数据覆盖问题;

3)在一个区块中,如果要进行并行处理,若两笔交易的目的地址或源地址相同,则交易与交易之间会存在数据覆盖问题;

具体通过一例子对上述问题说明:

比如在区块链中,假设A账户有50块,B账户有60块,C账户有70块,现在有两笔交易,A给B转账20,B给C转账40。如果正常顺序执行,那么两笔交易执行完后,A还有30块,B有40块,C有110。但如果这两笔交易并行执行,那么B账户的结果在不同节点就是不同的。假设第二笔交易先执行,第一笔交易对B账户的变动覆盖了第二笔交易对B账户的变动,那么两笔交易执行完后,B账户有80块,反之,如果第二笔覆盖第一笔,那么B账户还有20块,如果并行化时也正常执行了,那么B有40块,所以简单的两笔交易,因为执行顺序不同,就可能产生不同结果,会出现数据覆盖的问题。

而且同时上述还需解决顺序问题,当一个地址同时出现在不同交易的源地址和目的地址上时,交易顺序也会影响交易结果,比如上例中B对C的转账如果改为70块,那么加上同步锁后,如果第二笔先执行,就会失败,如果第一笔先执行,则两笔都会成功。

因此,现有的区块链交易处理技术要想实现并行处理,不仅需要解决数据的覆盖问题,而且需要解决数据处理顺序的问题,同时还要解决地址既作源地址又作目的地址的问题。

发明内容

本发明为解决上述技术问题,提供了一种交易源目地址分离处理方法及系统,其技术方案为:

一种交易源目地址分离处理方法,包括以下步骤:

S1:区块依次接收并筛选若干笔交易,每次接收一笔交易,若该交易的源地址与交易池中的交易的目的地址存在相同,或者若该交易的目的地址与交易池中的交易的源地址存在相同,则将该交易丢弃,反之则该交易放入交易池;

S2:通过若干线程对交易池内的交易进行并行处理:

若当前并行处理的交易之间的目的地址相同,则通过对该目的地址加锁依次执行各笔交易;

若当前并行处理的交易之间的源地址相同,则根据该源地址的账户交易序号的优先级依次执行各笔交易,账户交易序号为各账户对自己发起的交易所标注的序号;

若当前并行处理的交易中源地址的账户交易序号存在断号,则将该交易放入缓存区滞后执行,断号为交易池未执行的交易中存在比当前交易的账户交易序号的优先级高的交易。

在其中一个实施例中,预先设立有用于存放源地址的第一缓冲区、用于存放目的地址的第二缓冲区,步骤S1进一步包括:

区块依次接收并筛选若干笔交易,每次接收一笔交易,则获取该交易的源地址和目的地址,并且在第一缓冲区中查询该目的地址,在第二缓冲区中查询该源地址:

若均不存在,则将该交易的源地址存入第一缓冲区、该交易的目的地址存入第二缓冲区,并将该交易插入交易池,反之,则将该交易丢弃。

在其中一个实施例中,通过对该目的地址加锁依次执行各笔交易进一步包括:

并行处理相同该目的地址的各笔交易的线程,依次通过该目的地址对应的同步锁对该目的地址进行上锁并执行交易,其中,后一执行的线程获取前一交易执行之后的同步锁。

在其中一个实施例中,根据该源地址的账户交易序号的优先级依次执行各笔交易进一步包括:

并行处理相同该源地址的各笔交易的线程,根据该源地址的账户交易序号的优先级依次执行各笔交易,其中,各线程执行交易之前,若交易的账户交易序号存在断号,则该线程将该交易放入缓存区,待所有比其账户交易序号的优先级高的交易执行结束,该线程取出该交易进行执行。

在其中一个实施例中,将该交易放入缓存区滞后执行进一步包括:

将该交易放入缓存区之后,线程通过实时监测该交易的源地址的账户交易序号的变更情况,待所有比其账户交易序号的优先级高的交易执行结束,则该线程取出该交易进行执行。

在其中一个实施例中,步骤S2之后还包括:

交易池中的所有交易执行结束,对交易池清空,并对第一缓冲区和第二缓冲区清空。

一种交易源目地址分离处理系统,包括:

接收筛选模块,用于区块依次接收并筛选若干笔交易,每次接收一笔交易,若该交易的源地址与交易池中的交易的目的地址存在相同,或者若该交易的目的地址与交易池中的交易的源地址存在相同,则将该交易丢弃,反之则该交易放入交易池;

并行处理模块,用于通过若干线程对交易池内的交易进行并行处理:

若当前并行处理的交易之间的目的地址相同,则通过对该目的地址加锁依次执行各笔交易;

若当前并行处理的交易之间的源地址相同,则根据该源地址的账户交易序号的优先级依次执行各笔交易,账户交易序号为各账户对自己发起的交易所标注的序号;

若当前并行处理的交易中源地址的账户交易序号存在断号,则将该交易放入缓存区滞后执行,断号为交易池未执行的交易中存在比当前交易的账户交易序号的优先级高的交易。

在其中一个实施例中,还包括初始化模块,用于所述交易池中的所有交易执行结束,对所述交易池清空,并对所述第一缓冲区和所述第二缓冲区清空。

一种计算机设备,包括存储器和处理器,存储器中存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行上述交易源目地址分离处理方法。

一种存储有计算机可读指令的存储介质,计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述交易源目地址分离处理方法。

本发明与现有技术相比具有以下的优点和积极效果:

1)本发明通过对区块依次接收的若干笔交易进行筛选,保证了区块交易池中的交易不会出现一个账户地址既作源地址又作目的地址的情况,其中,具体采用了源目地址分离的技术特征,通过设立两个分别用于存放源地址、目的地址的缓冲区,将源、目地址分离,每接收一笔交易,只需查询两个缓冲区即可知道当前交易是否会与交易池中的交易出现上述情况,如此,解决账户地址既作源地址又作目的地址的技术问题,大大简化了交易池中的交易复杂程度,从而使得交易并行处理变的更加容易,进一步提高了交易处理效率;

2)本发明当出现并行处理过程中交易之间的目的地址相同的情况时,通过对该目的地址加锁依次执行各笔交易,使得该情况下每笔交易之后的数据不会出现覆盖,同样地,当出现并行处理的交易之间的源地址相同的情况时,通过根据该源地址的账户交易序号的优先级依次执行各笔交易,使得该情况下每笔交易可以依次有序地执行,并且每笔交易之后的数据不会出现覆盖,同样地,当出现并行处理的交易中源地址的账户交易序号存在断号情况时,通过将该交易放入缓存区滞后执行,使得该情况下每笔交易可以依次有序地执行,并且每笔交易之后的数据不会出现覆盖。上述解决了多种情况下的数据的覆盖问题,也解决了多种情况下数据处理顺序的问题,保障了多笔交易并行处理的有序性、安全性;

3)本发明在多笔交易并行处理过程中,不仅可以当并行处理过程中出现上述情况时可以有序、安全地执行各笔交易,而且更重要的是未出现上述情况时多笔交易可以快速地并行处理,前者解决了后者的处理异常,避免了并行处理过程中出现处理错误,保障了并行处理整体的有序、安全,大大提高了整体的执行效率。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。

图1为本发明一个实施例中交易源目地址分离处理方法的整体流程图;

图2为本发明一个实施例中交易源目地址分离处理方法的接收筛选流程图;

图3为本发明一个实施例中交易源目地址分离处理系统的结构框图。

附图标记说明:

1-接收筛选模块;2-并行处理模块。

具体实施方式

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

为使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。

区块链简单地说就是一种去中心化的分布式账本数据库,区块链技术本质上是一种数据库技术,每个区块就像一个硬盘,把信息全部保存下来,再通过密码学技术进行加密,这些被保存的信息就无法被篡改。区块链具有去中心化、开放性、独立性、安全性、匿名性的特征,可以应用到生活的众多方面,其中,在众多应用中,交易、支付等是区块链的重要应用之一,由于区块链去中心化的特点,可以帮助点对点交易,让支付和交易变得更加高效、更加便捷。

虽然区块链具有众多优势,但对于区块链平台上并行处理交易时,不仅还需要解决数据的覆盖问题,而且需要解决数据处理顺序的问题,同时还要解决地址既作源地址又作目的地址的问题。

第一实施例

为解决上述问题,参看图1,本实施例提出一种交易源目地址分离处理方法,该方法包括以下步骤:

S1:区块依次接收并筛选若干笔交易,每次接收一笔交易,若该交易的源地址与交易池中的交易的目的地址存在相同,或者若该交易的目的地址与交易池中的交易的源地址存在相同,则将该交易丢弃,反之则该交易放入交易池;

S2:通过若干线程对交易池内的交易进行并行处理:

若当前并行处理的交易之间的目的地址相同,则通过对该目的地址加锁依次执行各笔交易;

若当前并行处理的交易之间的源地址相同,则根据该源地址的账户交易序号的优先级依次执行各笔交易,账户交易序号为各账户对自己发起的交易所标注的序号;

若当前并行处理的交易中源地址的账户交易序号存在断号,则将该交易放入缓存区滞后执行,断号为交易池未执行的交易中存在比当前交易的账户交易序号的优先级高的交易。

现对本实施例进行详细说明,但不仅限于此。

本实施例适用于并行处理多笔交易,尤其适用于并行处理复杂情况下的多笔交易,该复杂情况包括但不限于地址既作源地址又作目的地址的情况、并行处理的交易之间的目的地址相同的情况、并行处理的交易之间的源地址相同的情况、并行处理的交易中源地址的账户交易序号存在断号的情况,在这复杂的情况下,通过本实施例的方法不仅可以当并行处理过程中出现上述情况时可以有序、安全地执行各笔交易,而且更重要的是未出现上述情况时多笔交易可以快速地并行处理,前者解决了后者的处理异常,避免了并行处理过程中出现处理错误,保障了并行处理整体的有序、安全,大大提高了整体的执行效率。

本实施例中预先设立了两个存放交易地址的缓冲区,一个存放交易中的源地址,一个存放交易中的目的地址,以此实现源、目地址分离,从而实现本实施例的交易源目地址分离处理。

1)具体介绍步骤S1

本实施例的区块依次接收并筛选若干笔交易,每次接收一笔交易,若该交易的源地址与交易池中的交易的目的地址存在相同,或者若该交易的目的地址与交易池中的交易的源地址存在相同,则将该交易丢弃,反之则该交易放入交易池。其中,源地址为交易发起的账户,目的地址为交易接收的账户,区块的交易池是用于区块验证与缓存交易。

较优地,区块接收若干笔交易首先需根据用户账户的私钥签名进行验证,确认用户账户的身份,以确认要接收的交易是否合法,其中,通过区块链上该用户账户的公钥验证该私钥签名的有效性,验证通过之后再执行交易的筛选。

具体地,参看图2,本实施例的步骤S1进一步包括:区块依次接收并筛选若干笔交易,每次接收一笔交易,则获取该交易的源地址和目的地址,并且在第一缓冲区中查询该目的地址,在第二缓冲区中查询该源地址:若均不存在,则将该交易的源地址存入第一缓冲区、该交易的目的地址存入第二缓冲区,并将该交易插入交易池,反之,则将该交易丢弃。

其中,本实施例具体是通过用于存放源地址的第一缓冲区和用于存放目的地址的第二缓冲区进行源、目地址的分离以及交易的筛选,值得注意的是,查询是去对立缓冲区查找的,即源地址去存放目的地址的第二缓冲区查找,目的地址去存放源地址的第一缓冲区查找,但缓冲区插入时,是正常插入缓冲区的,即源地址插入存放源地址的第一缓冲区,目的地址插入存放目的地址的第二缓冲区,以此来筛选剔除与现有交易池中冲突的交易,即当前交易的目的地址已在现有交易池中作为源地址、当前交易的源地址已在现有交易池中作为目的地址,这些需要在入交易池之前筛选剔除掉,以避免其影响多笔交易并列处理的有序、安全、准确地执行。

以下通过一个举例对上述步骤S1进行具体说明,但不仅限于此:

假设有账户A,B,C,D四个账户,接下来将会有以下6笔交易涉及这些账户。

1A(1)-10->B

2B(1)-20->C

3A(2)-15->C

4D(1)-25->B

5A(3)-10->D

6D(2)-20->C

其中,最前面的数字是交易的编号,转出账户小括号内的数字为nonce值,nonce值为各个账户对自己发起的交易所标注的序号,账户之间并不冲突,在本实施例中称之为账户交易序号,箭头中间的数字为转账额。

对于上述6笔交易,第1笔交易请求被发送到链上,区块获取其源地址A去存放目的地址的第二缓存区查找,发现其中无地址A,然后获取交易的目的地址B去存放源地址第一缓冲区查找,发现其中也无B。所以,将A插入第一缓冲区,将B插入第二缓冲区,将第1笔交易插入交易池。注意,查找时是去对立缓冲区查找的,源地址去目的地址缓冲区查找,目的地址去源地址缓冲区查找,但插入时,是正常插入缓冲区的。

接着区块链收到第2笔交易请求,区块获取源地址B去存放目的地址的第二缓存区查找,发现其中有B,则不符合本实施例的分离锁机制,即第2笔交易与第1笔交易存在冲突,地址B既作为第1笔交易的目的地址又作为第2笔交易的源地址,故第2笔交易直接丢弃。

然后是第3笔交易,检查源地址A不在第二缓冲区,目的地址C不在第一缓冲区,所以将C插入目的地址缓冲区,将第3笔交易插入交易池。因为A已经位于第一缓冲区,所以A插入第一缓冲区将不执行任何操作。

第4笔交易和第1、3笔交易类似,地址D将被插入第一缓冲区,交易被插入交易池。

第5笔交易检查出目的地址D在第一缓冲区存在,故交易被丢弃。

第6笔交易同样没问题,将被插入交易池。

因此,6笔交易都提交之后,经过筛选的结果是第2笔和第5笔交易被丢弃,有以下4笔交易进入交易池,如下:

1A(1)-10->B

3A(2)-15->C

4D(1)-25->B

6D(2)-20->C

如此,本实施例通过对区块依次接收的若干笔交易进行筛选,保证了区块交易池中的交易不会出现一个账户地址既作源地址又作目的地址的情况,其中,具体采用了源目地址分离的技术特征,通过设立两个分别用于存放源地址、目的地址的缓冲区,将源、目地址分离,每接收一笔交易,只需查询两个缓冲区即可知道当前交易是否会与交易池中的交易出现上述情况,如此,解决账户地址既作源地址又作目的地址的技术问题,大大简化了交易池中的交易复杂程度,从而使得交易并行处理变的更加容易,进一步提高了交易处理效率。

2)具体介绍步骤S2

本实施例通过若干线程对交易池内的交易进行并行处理:若当前并行处理的交易之间的目的地址相同,则通过对该目的地址加锁依次执行各笔交易;若当前并行处理的交易之间的源地址相同,则根据该源地址的账户交易序号的优先级依次执行各笔交易;若当前并行处理的交易中源地址的账户交易序号存在断号,则将该交易放入缓存区滞后执行;若当前并行处理的交易无上述情况,则当前并行执行各笔交易。其中,账户交易序号为各账户对自己发起的交易所标注的序号,可以用于标识这些交易的处理顺序,账户交易序号的断号为交易池未执行的交易中存在比当前交易的账户交易序号的优先级高的交易,即当前线程执行的交易并不在未执行的交易中处于最高优先级。

a.具体地,当并行处理的交易之间的目的地址相同,则通过对该目的地址加锁依次执行各笔交易,其中,并行处理相同该目的地址的各笔交易的线程,依次通过该目的地址对应的同步锁对该目的地址进行上锁并执行交易,其中,后一执行的线程获取前一交易执行之后的同步锁,同步锁是用于线程同步的机制,可以包括互斥锁、信号量、临界区等线程同步机制,在本实施例中具体通过同步锁实现目的地址相同的多笔交易之间的数据同步。

对于此情况的交易处理过程,再以上述的例子筛选之后的四笔交易进行说明,但不仅限于此。

在这4笔交易中,账户A和账户D分别发起了两笔交易,账户B和账户C分别被转了两次账。假设有两个线程并行执行交易,B账户有50块钱,账户C有40块钱,如果账户A发起的两笔交易位于一个线程,账户D发起的两笔交易位于另外一个线程,如下所示:

线程1:1A(1)-10->B,3A(2)-15->C;

线程2:4D(1)-25->B,6D(2)-20->C。

在此情况下,线程1和线程2执行并没有先后顺序,因为对目的账户来说,无论哪个线程先执行,都不影响最终结果,故对此可以根据线程1和线程2的实际情况先后执行:

如果线程1先执行交易1,即A对B转账10块的交易,那么B账户内的同步锁将锁住B账户,A给B转账后解锁,B账户有60块。线程2等待线程1执行完后,获得同步锁,执行交易4,即D给B转账25块,最终B有85块。

如果线程2先执行交易4,即D对B转账25块的交易,那么B账户内的同步锁将锁住B账户,D对B转账后解锁,B账户有75块。线程1等待线程2执行完后,获得同步锁,执行交易1,即A给B转账10块,最终B有85块。

交易3和交易6类似,此处不在举例。对此,对于源账户来说,因为A的两笔对外转账都在一个线程,且在线程内由账户交易序号排序,所以执行结果不会受到账户交易序号断号影响,对D亦然。需要说明的是,上述仅列举了两个线程并行处理4笔交易的过程,但显然的本实施例不仅限于此,容易想到的,若有三笔交易的目的地址相同且需要并行处理,则可以通过类似上述的处理过程,实现对该目的地址加锁依次执行各笔交易。

b.具体地,当并行处理的交易之间的源地址相同,则根据该源地址的账户交易序号的优先级依次执行各笔交易,其中,并行处理相同该源地址的各笔交易的线程,根据该源地址的账户交易序号的优先级依次执行各笔交易,其中,各线程执行交易之前,若交易的账户交易序号存在断号,则该线程将该交易放入缓存区,待所有比其账户交易序号的优先级高的交易执行结束,该线程取出该交易进行执行。

对于此情况的交易处理过程,再假设另外一种情况进行举例说明,但不仅限于此:A发起的两笔交易不在一个线程,D发起的两笔交易也不在一个线程,如下所示:

线程1:1A(1)-10->B,6D(2)-20->C;

线程2:3A(2)-15->C,4D(1)-25->B。

在此情况下,如果线程2先执行了交易3,即A->C,会发现A的nonce值有断号,那么就将这笔交易放入缓存区,稍后执行,然后去执行交易4,即D->B。同时,线程1开始执行交易1,即A->B。所以,在第一时间段内,两个线程分别执行的是交易1:A->B和交易4:D->B,这2笔交易都是对B转账,属于前文实施例中目的地址相同的情况,可以通过对该目的地址加锁依次执行各笔交易。

等线程1执行完交易1:A->B后,线程2也执行完了交易4:D->B,此时,线程2会将之前缓存的交易3:A->C取出重新执行,因为线程1已经执行完交易1:A->B,A账户的nonce值已经加1,不存在断号问题,所以线程2可以正常执行交易3:A->C了。同理,线程1可以继续执行交易6:D->C。

本实施例通过上述步骤实现了两线程并行处理4笔交易的过程,其中,并行处理过程,既出现了目的地址相同的情况,也出现了源地址相同的情况,整个并行处理过程虽然只实现了部分并行处理,但是相比与现有技术同样可以提高整体的交易处理效率。

c.具体地,当并行处理的交易中源地址的账户交易序号存在断号,则将该交易放入缓存区滞后执行,其中,将该交易放入缓存区之后,线程通过实时监测该交易的源地址的账户交易序号的变更情况,待所有比其账户交易序号的优先级高的交易执行结束,则该线程取出该交易进行执行。

对于此情况的交易处理过程,再假设另外一种情况进行举例说明,但不仅限于此,如下所示:

线程1:1A(1)-10->B,4D(1)-25->B;

线程2:3A(2)-15->C,6D(2)-20->C。

在此情况下,因为线程2内两个源账户的nonce值都存在断号,即线程2负责处理的两笔交易均未在未执行的交易中处于最高优先级,所以将不得不等待nonce值变化后再执行。优选地,在线程2内可以设定循环,实时监测nonce值的变更,当nonce值为交易可执行值时,说明此账户之前的交易都已经执行完了。那么这四笔交易在两个线程的执行情况将是交易1:A->B先执行,然后线程1和线程2分别并行执行交易4:D->B和交易3:A->C,最后线程2再执行交易6:D->C。

本实施例通过上述步骤实现了两线程并行处理4笔交易的过程,其中,线程中出现交易中源地址的账户交易序号存在断号,虽然整体只实现了部分并行,但在多核CPU计算机中,仍然可以提高执行效率。

综上,除了以上三种情况外,还可以列举许多情况,但是都脱离不了以上三种情况的变体,因为以上三种情况已经覆盖了并行执行交易时出现的所有冲突情况,所以此处不再一一赘述。通过以上三种情况的分析,可以论证,通过本实施例的步骤S2,插入交易池的交易都可以正确、安全、有序的并行执行。

本实施例当出现并行处理过程中交易之间的目的地址相同的情况时,通过对该目的地址加锁依次执行各笔交易,使得该情况下每笔交易之后的数据不会出现覆盖,同样地,当出现并行处理的交易之间的源地址相同的情况时,通过根据该源地址的账户交易序号的优先级依次执行各笔交易,使得该情况下每笔交易可以依次有序地执行,并且每笔交易之后的数据不会出现覆盖,同样地,当出现并行处理的交易中源地址的账户交易序号存在断号情况时,通过将该交易放入缓存区滞后执行,使得该情况下每笔交易可以依次有序地执行,并且每笔交易之后的数据不会出现覆盖。上述解决了多种情况下的数据的覆盖问题,也解决了多种情况下数据处理顺序的问题,保障了多笔交易并行处理的有序性、安全性。

优选地,本实施例的步骤S2之后还包括:交易池中的所有交易执行结束,对交易池清空,并对第一缓冲区和第二缓冲区清空,以便于下次区块并行处理多笔交易。

在该交易池被清空后,在步骤S1中被丢弃的交易可以在下次区块并行处理多笔交易时被考虑,由于与这些被丢弃的交易冲突的部分关联交易,如与这些被丢弃的交易的源地址和/或目的地址冲突的交易,即一个账户地址在多笔交易中既作为源地址又作为目的地址的情况,已经在前述实施例中被执行,因此,这些被丢弃的交易在本次处理过程中,可能并不存在与之源地址或目的地址冲突的交易,因此可以被执行。当然,这些被丢弃的交易在本次处理时仍旧需要按照前述实施例中所记载的过程来处理,例如,根据该交易的源地址和目的地址,在第一缓冲区中查询该目的地址,在第二缓冲区中查询该源地址:若均不存在,则将该交易的源地址存入第一缓冲区、该交易的目的地址存入第二缓冲区,并将该交易插入交易池,反之,则将该交易丢弃,继续等待下一个区块的并行处理。其余处理过程与前述实施例中所记载的基本相同,故此处不再赘述,并通过引用的方式包含于此。

第二实施例

参看图3,本发明提出了一种交易源目地址分离处理系统,包括:

接收筛选模块1,用于区块依次接收并筛选若干笔交易,每次接收一笔交易,若该交易的源地址与交易池中的交易的目的地址存在相同,或者若该交易的目的地址与交易池中的交易的源地址存在相同,则将该交易丢弃,反之则该交易放入交易池;

并行处理模块2,用于通过若干线程对交易池内的交易进行并行处理:

若当前并行处理的交易之间的目的地址相同,则通过对该目的地址加锁依次执行各笔交易;

若当前并行处理的交易之间的源地址相同,则根据该源地址的账户交易序号的优先级依次执行各笔交易,账户交易序号为各账户对自己发起的交易所标注的序号;

若当前并行处理的交易中源地址的账户交易序号存在断号,则将该交易放入缓存区滞后执行,断号为交易池未执行的交易中存在比当前交易的账户交易序号的优先级高的交易。

现具体对本实施例进行详细说明,但不仅限于此。

本实施例适用于并行处理多笔交易,尤其适用于并行处理复杂情况下的多笔交易,该复杂情况包括但不限于地址既作源地址又作目的地址的情况、并行处理的交易之间的目的地址相同的情况、并行处理的交易之间的源地址相同的情况、并行处理的交易中源地址的账户交易序号存在断号的情况,在这复杂的情况下,通过本实施例的方法不仅可以当并行处理过程中出现上述情况时可以有序、安全地执行各笔交易,而且更重要的是未出现上述情况时多笔交易可以快速地并行处理,前者解决了后者的处理异常,避免了并行处理过程中出现处理错误,保障了并行处理整体的有序、安全,大大提高了整体的执行效率。

本实施例中预先设立了两个存放交易地址的缓冲区,一个存放交易中的源地址,一个存放交易中的目的地址,以此实现源、目地址分离,从而实现本实施例的交易源目地址分离处理。

1)具体介绍接收筛选模块

本实施例的接收筛选模块,用于区块依次接收并筛选若干笔交易,每次接收一笔交易,若该交易的源地址与交易池中的交易的目的地址存在相同,或者若该交易的目的地址与交易池中的交易的源地址存在相同,则将该交易丢弃,反之则该交易放入交易池。其中,源地址为交易发起的账户,目的地址为交易接收的账户,区块的交易池是用于区块验证与缓存交易。

较优地,区块接收若干笔交易首先需根据用户账户的私钥签名进行验证,确认用户账户的身份,以确认要接收的交易是否合法,其中,通过区块链上该用户账户的公钥验证该私钥签名的有效性,验证通过之后再执行交易的筛选。

具体地,本实施例的接收筛选模块进一步用于执行:区块依次接收并筛选若干笔交易,每次接收一笔交易,则获取该交易的源地址和目的地址,并且在第一缓冲区中查询该目的地址,在第二缓冲区中查询该源地址:若均不存在,则将该交易的源地址存入第一缓冲区、该交易的目的地址存入第二缓冲区,并将该交易插入交易池,反之,则将该交易丢弃。

其中,本实施例具体是通过用于存放源地址的第一缓冲区和用于存放目的地址的第二缓冲区进行源、目地址的分离以及交易的筛选,值得注意的是,查询是去对立缓冲区查找的,即源地址去存放目的地址的第二缓冲区查找,目的地址去存放源地址的第一缓冲区查找,但缓冲区插入时,是正常插入缓冲区的,即源地址插入存放源地址的第一缓冲区,目的地址插入存放目的地址的第二缓冲区,以此来筛选剔除与现有交易池中冲突的交易,即当前交易的目的地址已在现有交易池中作为源地址、当前交易的源地址已在现有交易池中作为目的地址,这些需要在入交易池之前筛选剔除掉,以避免其影响多笔交易并列处理的有序、安全、准确地执行。

以下通过一个举例对上述接收筛选模块进行具体说明,但不仅限于此:

假设有账户A,B,C,D四个账户,接下来将会有以下6笔交易涉及这些账户。

1A(1)-10->B

2B(1)-20->C

3A(2)-15->C

4D(1)-25->B

5A(3)-10->D

6D(2)-20->C

其中,最前面的数字是交易的编号,转出账户小括号内的数字为nonce值,nonce值为各个账户对自己发起的交易所标注的序号,账户之间并不冲突,在本实施例中称之为账户交易序号,箭头中间的数字为转账额。

对于上述6笔交易,第1笔交易请求被发送到链上,区块获取其源地址A去存放目的地址的第二缓存区查找,发现其中无地址A,然后获取交易的目的地址B去存放源地址第一缓冲区查找,发现其中也无B。所以,将A插入第一缓冲区,将B插入第二缓冲区,将第1笔交易插入交易池。注意,查找时是去对立缓冲区查找的,源地址去目的地址缓冲区查找,目的地址去源地址缓冲区查找,但插入时,是正常插入缓冲区的。

接着区块链收到第2笔交易请求,区块获取源地址B去存放目的地址的第二缓存区查找,发现其中有B,则不符合本实施例的分离锁机制,即第2笔交易与第1笔交易存在冲突,地址B既作为第1笔交易的目的地址又作为第2笔交易的源地址,故第2笔交易直接丢弃。

然后是第3笔交易,检查源地址A不在第二缓冲区,目的地址C不在第一缓冲区,所以将C插入目的地址缓冲区,将第3笔交易插入交易池。因为A已经位于第一缓冲区,所以A插入第一缓冲区将不执行任何操作。

第4笔交易和第1、3笔交易类似,地址D将被插入第一缓冲区,交易被插入交易池。

第5笔交易检查出目的地址D在第一缓冲区存在,故交易被丢弃。

第6笔交易同样没问题,将被插入交易池。

因此,6笔交易都提交之后,经过筛选的结果是第2笔和第5笔交易被丢弃,有以下4笔交易进入交易池,如下:

1A(1)-10->B

3A(2)-15->C

4D(1)-25->B

6D(2)-20->C

如此,本实施例通过对区块依次接收的若干笔交易进行筛选,保证了区块交易池中的交易不会出现一个账户地址既作源地址又作目的地址的情况,其中,具体采用了源目地址分离的技术特征,通过设立两个分别用于存放源地址、目的地址的缓冲区,将源、目地址分离,每接收一笔交易,只需查询两个缓冲区即可知道当前交易是否会与交易池中的交易出现上述情况,如此,解决账户地址既作源地址又作目的地址的技术问题,大大简化了交易池中的交易复杂程度,从而使得交易并行处理变的更加容易,进一步提高了交易处理效率。

2)具体介绍并行处理模块

本实施例的并行处理模块通过若干线程对交易池内的交易进行并行处理:若当前并行处理的交易之间的目的地址相同,则通过对该目的地址加锁依次执行各笔交易;若当前并行处理的交易之间的源地址相同,则根据该源地址的账户交易序号的优先级依次执行各笔交易;若当前并行处理的交易中源地址的账户交易序号存在断号,则将该交易放入缓存区滞后执行;若当前并行处理的交易无上述情况,则当前并行执行各笔交易。其中,账户交易序号为各账户对自己发起的交易所标注的序号,可以用于标识这些交易的处理顺序,账户交易序号的断号为交易池未执行的交易中存在比当前交易的账户交易序号的优先级高的交易,即当前线程执行的交易并不在未执行的交易中处于最高优先级。

a.具体地,当并行处理的交易之间的目的地址相同,则通过对该目的地址加锁依次执行各笔交易,其中,并行处理相同该目的地址的各笔交易的线程,依次通过该目的地址对应的同步锁对该目的地址进行上锁并执行交易,其中,后一执行的线程获取前一交易执行之后的同步锁,同步锁是用于线程同步的机制,可以包括互斥锁、信号量、临界区等线程同步机制,在本实施例中具体通过同步锁实现目的地址相同的多笔交易之间的数据同步。

对于此情况的交易处理过程,再以上述的例子筛选之后的四笔交易进行说明,但不仅限于此。

在这4笔交易中,账户A和账户D分别发起了两笔交易,账户B和账户C分别被转了两次账。假设有两个线程并行执行交易,B账户有50块钱,账户C有40块钱,如果账户A发起的两笔交易位于一个线程,账户D发起的两笔交易位于另外一个线程,如下所示:

线程1:1A(1)-10->B,3A(2)-15->C;

线程2:4D(1)-25->B,6D(2)-20->C。

在此情况下,线程1和线程2执行并没有先后顺序,因为对目的账户来说,无论哪个线程先执行,都不影响最终结果,故对此可以根据线程1和线程2的实际情况先后执行:

如果线程1先执行交易1,即A对B转账10块的交易,那么B账户内的同步锁将锁住B账户,A给B转账后解锁,B账户有60块。线程2等待线程1执行完后,获得同步锁,执行交易4,即D给B转账25块,最终B有85块。

如果线程2先执行交易4,即D对B转账25块的交易,那么B账户内的同步锁将锁住B账户,D对B转账后解锁,B账户有75块。线程1等待线程2执行完后,获得同步锁,执行交易1,即A给B转账10块,最终B有85块。

交易3和交易6类似,此处不在举例。对此,对于源账户来说,因为A的两笔对外转账都在一个线程,且在线程内由账户交易序号排序,所以执行结果不会受到账户交易序号断号影响,对D亦然。需要说明的是,上述仅列举了两个线程并行处理4笔交易的过程,但显然的本实施例不仅限于此,容易想到的,若有三笔交易的目的地址相同且需要并行处理,则可以通过类似上述的处理过程,实现对该目的地址加锁依次执行各笔交易。

b.具体地,当并行处理的交易之间的源地址相同,则根据该源地址的账户交易序号的优先级依次执行各笔交易,其中,并行处理相同该源地址的各笔交易的线程,根据该源地址的账户交易序号的优先级依次执行各笔交易,其中,各线程执行交易之前,若交易的账户交易序号存在断号,则该线程将该交易放入缓存区,待所有比其账户交易序号的优先级高的交易执行结束,该线程取出该交易进行执行。

对于此情况的交易处理过程,再假设另外一种情况进行举例说明,但不仅限于此:A发起的两笔交易不在一个线程,D发起的两笔交易也不在一个线程,如下所示:

线程1:1A(1)-10->B,6D(2)-20->C;

线程2:3A(2)-15->C,4D(1)-25->B。

在此情况下,如果线程2先执行了交易3,即A->C,会发现A的nonce值有断号,那么就将这笔交易放入缓存区,稍后执行,然后去执行交易4,即D->B。同时,线程1开始执行交易1,即A->B。所以,在第一时间段内,两个线程分别执行的是交易1:A->B和交易4:D->B,这2笔交易都是对B转账,属于前文实施例中目的地址相同的情况,可以通过对该目的地址加锁依次执行各笔交易。

等线程1执行完交易1:A->B后,线程2也执行完了交易4:D->B,此时,线程2会将之前缓存的交易3:A->C取出重新执行,因为线程1已经执行完交易1:A->B,A账户的nonce值已经加1,不存在断号问题,所以线程2可以正常执行交易3:A->C了。同理,线程1可以继续执行交易6:D->C。

本实施例通过上述模块实现了两线程并行处理4笔交易的过程,其中,并行处理过程,既出现了目的地址相同的情况,也出现了源地址相同的情况,整个并行处理过程虽然只实现了部分并行处理,但是相比与现有技术同样可以提高整体的交易处理效率。

c.具体地,当并行处理的交易中源地址的账户交易序号存在断号,则将该交易放入缓存区滞后执行,其中,将该交易放入缓存区之后,线程通过实时监测该交易的源地址的账户交易序号的变更情况,待所有比其账户交易序号的优先级高的交易执行结束,则该线程取出该交易进行执行。

对于此情况的交易处理过程,再假设另外一种情况进行举例说明,但不仅限于此,如下所示:

线程1:1A(1)-10->B,4D(1)-25->B;

线程2:3A(2)-15->C,6D(2)-20->C。

在此情况下,因为线程2内两个源账户的nonce值都存在断号,即线程2负责处理的两笔交易均未在未执行的交易中处于最高优先级,所以将不得不等待nonce值变化后再执行。优选地,在线程2内可以设定循环,实时监测nonce值的变更,当nonce值为交易可执行值时,说明此账户之前的交易都已经执行完了。那么这四笔交易在两个线程的执行情况将是交易1:A->B先执行,然后线程1和线程2分别并行执行交易4:D->B和交易3:A->C,最后线程2再执行交易6:D->C。

本实施例通过上述模块实现了两线程并行处理4笔交易的过程,其中,线程中出现交易中源地址的账户交易序号存在断号,虽然整体只实现了部分并行,但在多核CPU计算机中,仍然可以提高执行效率。

综上,除了以上三种情况外,还可以列举许多情况,但是都脱离不了以上三种情况的变体,因为以上三种情况已经覆盖了并行执行交易时出现的所有冲突情况,所以此处不再一一赘述。通过以上三种情况的分析,可以论证,通过本实施例的步骤S2,插入交易池的交易都可以正确、安全、有序的并行执行。

本实施例当出现并行处理过程中交易之间的目的地址相同的情况时,通过对该目的地址加锁依次执行各笔交易,使得该情况下每笔交易之后的数据不会出现覆盖,同样地,当出现并行处理的交易之间的源地址相同的情况时,通过根据该源地址的账户交易序号的优先级依次执行各笔交易,使得该情况下每笔交易可以依次有序地执行,并且每笔交易之后的数据不会出现覆盖,同样地,当出现并行处理的交易中源地址的账户交易序号存在断号情况时,通过将该交易放入缓存区滞后执行,使得该情况下每笔交易可以依次有序地执行,并且每笔交易之后的数据不会出现覆盖。上述解决了多种情况下的数据的覆盖问题,也解决了多种情况下数据处理顺序的问题,保障了多笔交易并行处理的有序性、安全性。

优选地,本实施例还包括初始化模块,用于交易池中的所有交易执行结束,对交易池清空,并对第一缓冲区和第二缓冲区清空,以便于下次区块并行处理多笔交易。

在该交易池被清空后,在步骤S1中被丢弃的交易可以在下次区块并行处理多笔交易时被考虑,由于与这些被丢弃的交易冲突的部分关联交易,如与这些被丢弃的交易的源地址和/或目的地址冲突的交易,即一个账户地址在多笔交易中既作为源地址又作为目的地址的情况,已经在前述实施例中被执行,因此,这些被丢弃的交易在本次处理过程中,可能并不存在与之源地址或目的地址冲突的交易,因此可以被执行。当然,这些被丢弃的交易在本次处理时仍旧需要按照前述实施例中所记载的过程来处理,例如,根据该交易的源地址和目的地址,在第一缓冲区中查询该目的地址,在第二缓冲区中查询该源地址:若均不存在,则将该交易的源地址存入第一缓冲区、该交易的目的地址存入第二缓冲区,并将该交易插入交易池,反之,则将该交易丢弃,继续等待下一个区块的并行处理。其余处理过程与前述实施例中所记载的基本相同,故此处不再赘述,并通过引用的方式包含于此。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

第三实施例

本发明还提出了一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行如上述第一实施例所提及的交易源目地址分离处理方法。

第四实施例

本发明提出了一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如上述第一实施例中所提及的交易源目地址分离处理方法。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明一些示例性实施例,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号