区块链事务处理方法、装置、计算机设备及存储介质与流程

文档序号:19906742发布日期:2020-02-11 14:35阅读:252来源:国知局
区块链事务处理方法、装置、计算机设备及存储介质与流程

本发明涉及区块链技术领域,尤其涉及一种区块链事务处理方法、装置、计算机设备及存储介质。



背景技术:

区块链一般被理解为一个分布式账本,它的本质也是一个分布式的数据库。联盟区块链与普通区块链的根本区别之一是需要提供隐私保护机制,通常情况下,该隐私保护机制是通过密码学中的签名加密和验签解密来实现。通常情况下,多个事务打包成区块的形式发送给区块链上的节点,由节点解开该区块,获取区块中的事务,先对每个事务进行签名验证,然后对所有签名验证通过的事务整体做多版本并发控制验证,最后进行事务持久化处理,以将事务信息写入磁盘。由于多版本并发控制验证过程中需依据区块之间先后的执行顺序进行检查,因此,当前区块链事务处理过程中,需先对每个区块依次进行签名验证、多版本并发控制验证和事务持久化进行处理,在完成一个区块的处理之后再处理下一个区块。其中,签名验证,即验证区块中交易数据对应的签名,其验证过程包含大量的数学运算,耗时较长。

当前区块链中主要采用串行验证方式对区块进行签名验证,这种验证方式使得后面的区块只能等待前面的区块验证完毕之后才可被验证,不能充分利用系统的计算资源,导致系统资源浪费较大,使得区块链事务处理性能低下,事务处理效率较低。



技术实现要素:

本发明实施例提供一种区块链事务处理方法、装置、计算机设备及存储介质,以解决当前区块链事务处理过程中采用串行验证方式对区块进行签名验证时存在的处理效率较低且计算资源浪费较大的问题。

一种区块链事务处理方法,包括:

接收待处理区块,将所述待处理区块存储在区块队列中,每一所述待处理区块对应一区块标签;

并发启动预先创建的待命验签线程,对所述区块队列中的所述待处理区块进行签名验证,获取验签结果区块,将所述验签结果区块存储到缓存中;

实时检测所述缓存中是否包含当前期望区块,若所述缓存中包含所述当前期望区块,则将以所述当前期望区块为起始块的连续的至少一个验签结果区块确定为目标区块;

提交所述目标区块,并基于所述目标区块中最后一个验签结果区块对应的区块标签更新所述当前期望区块。

一种区块链事务处理装置,包括:

接收待处理区块,将所述待处理区块存储在区块队列中,每一所述待处理区块对应一区块标签;

并发启动预先创建的待命验签线程,对所述区块队列中的所述待处理区块进行签名验证,获取验签结果区块,将所述验签结果区块存储到缓存中;

实时检测所述缓存中是否包含当前期望区块,若所述缓存中包含所述当前期望区块,则将以所述当前期望区块为起始块的连续的至少一个验签结果区块确定为目标区块;

提交所述目标区块,并基于所述目标区块中最后一个验签结果区块对应的区块标签更新所述当前期望区块。

一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述区块链事务处理方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述区块链事务处理方法的步骤。

上述区块链事务处理方法、装置、计算机设备及存储介质,并发启动预先创建的待命验签线程对区块队列中的待处理区块进行签名验证,获取对应的验签结果区块,以保证区块队列中所有待处理区块进行签名验证的验证效率,节省签名验证的处理时间,而且待命验签线程无需进行线程的创建和销毁,有助于节省系统损耗。将所有验签结果区块存储到缓存中,实时检测缓存中包含当前期望区块时,将以当前期望区块为起始块的连续的至少一个验签结果区块确定为目标区块并提交该目标区块,以保证提交的目标区块中包含连续的至少一个验签结果区块,确保区块之间的执行顺序。

附图说明

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

图1是本发明一实施例中区块链事务处理方法的一应用环境示意图;

图2是本发明一实施例中区块链事务处理方法的一流程图;

图3是本发明一实施例中区块链事务处理方法的另一流程图;

图4是本发明一实施例中区块链事务处理方法的另一流程图;

图5是本发明一实施例中区块链事务处理方法的另一流程图;

图6是本发明一实施例中区块链事务处理方法的另一流程图;

图7是本发明一实施例中区块链事务处理方法的另一流程图;

图8是本发明一实施例中区块链事务处理方法的另一流程图;

图9是本发明一实施例中区块链事务处理方法的一示意图;

图10是本发明一实施例中计算机设备的一示意图。

具体实施方式

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

本发明实施例提供的区块链事务处理方法,该区块链事务处理方法可应用如图1所示的应用环境中。具体地,该区块链事务处理方法应用在区块链系统中,该区块链系统包括通过区块链网络相连的多个区块链节点,每一区块链节点对应一区块链节点装置,每一区块链节点装置通过区块链网络与其他区块链节点装置相连,实现对区块链事务处理中运算量较大且耗时较长的签名验证过程进行并行处理,以提高签名验证的效率并节省处理时间,有助于提高整个区块链事务处理的整体效率。其中,区块链节点装置是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。该区块链节点装置可以是计算机、也可以是单个网络服务器、多个网络服务器组成的服务器组或者基于云计算的由大量主机或者网络服务器构成的云,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。

在一实施例中,如图2所示,提供一种区块链事务处理方法,以该方法应用在图1中的区块链节点装置为服务器为例进行说明,包括如下步骤:

s201:接收待处理区块,将待处理区块存储在区块队列中,每一待处理区块对应一区块标签。

其中,待处理区块是发送到区块链的待处理节点上的需要进行处理的区块。其中,待处理节点是区块链网络上的一个需要进行数据处理的区块链节点。每一待处理区块包括至少一个待处理事务,该待处理事务为需要进行后续处理的事务。可以理解地,服务器可以从区块链的待处理节点上获取待处理区块,以便后续对该待处理区块中的签名验证、多版本并发控制验证和事务持久化处理这三个环节的处理。

区块队列是系统中预先创建的用于缓存需要进行处理的待处理区块的队列,该区块队列可以依据先进先出的顺序管理队列中的所有待处理区块。

区块标签是待处理区块中存储的与该区块相对应的标签信息。本实施例中,每一待处理区块对应的区块标签包括区块序号(即number)、当前区块哈希值(即datahash)和上一区块哈希值(即previoushash),以便基于当前区块哈希值和上一区块哈希值确定不同待处理区块之间的执行顺序。其中,区块序号是用于唯一识别某一区块的序号。当前区块哈希值是用于指向当前区块的哈希指针值。上一区块哈希值是用于指向当前区块的上一区块的哈希指针值。因此,可基于当前区块哈希值和上一区块哈希值确定前后两个待处理区块之间的执行顺序。可以理解地,若区块序号是依据特定的区块序号命名规则进行命名的,即依据区块序号命名规则命名出的区块序号存在与区块之间执行顺序相对应的先后顺序时,可以依据区块序号确定不同待处理区块之间的执行顺序。

本实施例中,每一待处理区块包括区块头区域(即blockheader)、区块数据区域(即blockdata)和元数据区域(metadata)。该区块头区域(即blockheader)是用于记录区块属性的区域,具体包括用于记录区块序号(即number)、上一区块哈希值(即previoushash)和当前区块哈希值(即datahash)等区块属性的区域。区块数据区域(即blockdata)就用于记录区块中的交易数据以及交易数据对应的签名数据等数据的区域。可以理解地,每一待处理区块的区块数据区域(即blockdata)上可以存储一个待处理事务对应的交易数据及其签名数据,也可以存储至少两个待处理事务对应的交易数据及其签名数据。也即每一待处理区块中包括至少一个待处理事务,至少一个待处理事务对应的交易数据及其签名数据依次记录在区块数据区域(即blockdata),在区块链事务处理过程中,需对区块数据区块中的每一待处理事务对应的签名数据进行签名验证,以保证该待处理事务对应的交易数据的安全性。元数据(metadata),又称中介数据或中继数据,为描述数据的数据(dataaboutdata),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找和文件记录等功能。元数据算是一种电子式目录,为了达到编制目录的目的,必须在描述并收藏数据的内容或特色,进而达成协助数据检索的目的。该元数据区域(metadata)中记录的区块签名,以便基于该区块签名进行合法性校验。其中,区块签名是与待处理区块相对应的数字签名。可以理解地,该元数据区域(metadata)上还设有用于记录签名验证结果的待填充区域,在对待处理区块进行签名验证之前,该待填充区域为空白区域。

s202:并发启动预先创建的待命验签线程,对区块队列中的待处理区块进行签名验证,获取验签结果区块,将验签结果区块存储到缓存中。

其中,待命验签线程是系统预先分配的用于进行签名验证的线程,该待命验签线程在工作状态时进行签名验证,不工作时进入休眠状态,无需进行线程的创建和销毁,有助于节省系统损耗。该待命验签线程中采用的签名验证算法与待处理事务中预先采用的签名加密算法相匹配,即互为解密算法和加密算法,以保证签名验证的可行性。

本实施例中,服务器在检测到区块队列中存在需要进行处理的待处理区块之后,可以根据区块队列中的待处理区块的区块数量,并发启动预先创建的待命验签线程,采用该待命验签线程对区块队列中的每一待处理区块进行签名验证,获取该待处理区块对应的验签结果区块,由于待命验签线程是预先创建时,无需等待创建验签线程即可直接对待处理区块进行处理,以保证区块队列中所有待处理区块进行签名验证的验证效率,节省签名验证的处理时间。可以理解地,可以依据区块队列中的先进先出顺序,依次给每一待处理区块分配相应的待命验签线程,以采用待命验签线程对待处理区块进行签名验证。采用多个待命验签线程并发执行的签名验证过程,能充分利用系统cpu和内存性能,发挥多核cpu的优势,提升整个区块处理的吞吐量,降低处理时延,提高处理效率。

验签结果区块是待处理区块经过签名验证之后,获取的包含签名验证结果的区块。该签名验证结果包括签名有效和签名无效两种结果,在待命验签线程对每一待处理区块中的至少一个待处理事务进行签名验证之后,将每一待处理事务的签名验证结果存储在待处理区块的元数据区域(metadata)上,具体是将签名验证结果填充在元数据区域(metadata)对应的的待填充区域上,以形成验签结果区块。也即最终形成的验签结果区块不仅包括待处理区块的所有内容,还包括签名验证之后获取的签名验证结果,以便基于该签名验证结果进行后续的验证处理。

缓存是服务器中预先开辟的用于存储签名验证后的验签结果区块的空间,以保证提交到下一处理环节(即多版本并发控制验证环节)的所有验签结果区块之间存在先后的执行顺序,以保证多版本并发控制验证环节可以依据相应的执行顺序进行执行,提高整体处理效率。

本实施例中,服务器并发启动待命验签线程,对区块队列中的每一待处理区块分别进行签名验证,以获取相应的验签结果区块,并将该验签结果区块存储到缓存中,也即可同时采用多个待命验签线程对多个待处理区块分别进行签名验证,无论哪个待命验签线程先完成签名验证过程,均可以将其对应的验签结果区块存储到缓存中,无需等待执行顺序在先的待处理区块签名验证完毕再对执行顺序在后的待处理区块进行签名验证,使得签名验证过程不受待处理区块之间执行顺序的影响,有助于提高区块队列中所有待处理区块的签名验证效率,提高所有待处理区块的整体处理效率,充分利用服务器的系统计算资源,避免资源浪费。由于待命验签线程是预先创建时,启动待命验签线程对待处理区块进行签名验证过程无需等待线程创建,可进一步节省签名验证过程的时间,提高签名验证效率。

s203:实时检测缓存中是否包含当前期望区块,若缓存中包含当前期望区块,则将以当前期望区块为起始块的连续的至少一个验签结果区块确定为目标区块。

其中,当前期望区块是指依据区块链中不同待处理区块之间的执行顺序确定的可提交到下一处理环节(即多版本并发控制验证环节)的区块。目标区块是指依据区块链中不同待处理区块之间的处理顺序,将以当前期望区块为起始块的连续的至少一个验签结果区块所形成的连续区块。即该目标区块可以只包括一个验签结果区块,此时,该验签结果区块为当前期望区块;也可以包括至少两个验签结果区块,且至少两个验签结果区块是以当前期望区块为起始块的连续的验签结果区块,以将签名验证完成后的包含当前期望区块的连续的至少一个验签结果区块确定为目标区块,从而将该目标区块提交到下一处理环节(即多版本并发控制验证环节),以使下一处理环节(即多版本并发控制验证环节)所接收到的所有目标区块中包含的验签结果区块依据其执行顺序排序,从而依序执行,提高下一处理环节(即多版本并发控制验证环节)的处理效率。

本实施例中,每一验签结果区块的区块头区域(即blockheader)上记录用于唯一识别该验签结果区块的区块序号(即number)、上一区块哈希值(即previoushash)和当前区块哈希值(即datahash)。由于向下一处理环节(即多版本并发控制验证环节),需保证所提交的所有验签结果区块的顺序性,而所有验签结果区块之间的顺序可以通过区块序号确定,也可以依据不同指针之间的哈希指针确定,具体根据上一区块哈希值与当前区块哈希值的先后顺序确定。因此,可通过实时检测新存储到缓存中的验签结果区块是否为当前期望区块,若最新存储的验签结果区块为当前期望区块,则可依据缓存中存储的所有验签结果区块的区块序号或者哈希指针值(包括上一区块哈希值和当前区块哈希值),将与当前期望区块为起始块的连续的至少一个验签结果区块确定为可提交到下一处理环节的目标区块。本实施例中,可采用滑动窗口技术将当前期望区块和所有连续的验签结果区块确定为目标区块,即采用滑动窗口将以当前期望区块为起始块的连续的至少一个验签结果区块选中,以确定目标区块。

本实施例中,实时检测缓存中是否包含当前期望区块,若缓存中包含当前期望区块,则将以当前期望区块为起始块的连续的至少一个验签结果区块确定为目标区块,以便后续将该目标区块整体提交到下一处理环节,以使下一处理环节依序对所有验签结果区块进行处理。相应地,若缓存中不包含当前期望区块,则依据缓存中所有验签结果区块的当前区块哈希值或者区块序号,对所有验签结果区块进行排序,以使所有验签结果区块依据当前区块哈希值或者区块序号的顺序存储在缓存中,以便保障后续确定目标区块的效率。

s204:提交目标区块,并基于目标区块中最后一个验签结果区块对应的区块标签更新当前期望区块。

具体地,服务器将以当前期望区块为起始块的连续的至少一个验签结果区块确定为目标区块,并将目标区块提交到下一处理环节,提交成功之后,目标区块不存储在缓存中,与目标区块不连续的其他验签结果区块仍然存储在缓存中。可以理解地,在将目标区块提交到下一处理环节时,需实时更新缓存中的当前期望区块,以便在缓存接收到新的验签结果区块时,可顺利执行步骤s203及s204的步骤。

本实施例中,在将目标区块提交到下一处理环节时,需基于目标区块中最后一个验签结果区块对应的区块标签更新当前期望区块。由于目标区块是由连续的至少一个验签结果区块形成的连续区块,而目标区块中最后一个验签结果区块为结束区块,该结束区块之后的下一个区块为更新的当前期望区块,以便基于更新后的当前期望区块重复执行步骤s203及步骤s204。

本实施例所提供的区块链事务处理方法中,并发启动预先创建的待命验签线程对区块队列中的待处理区块进行签名验证,获取对应的验签结果区块,以保证区块队列中所有待处理区块进行签名验证的验证效率,节省签名验证的处理时间,而且待命验签线程无需进行线程的创建和销毁,有助于节省系统损耗。将所有验签结果区块存储到缓存中,实时检测缓存中包含当前期望区块时,将以当前期望区块为起始块的连续的至少一个验签结果区块确定为目标区块并提交该目标区块,以保证提交的目标区块中包含连续的至少一个验签结果区块,确保区块之间的执行顺序。

在一实施例中,如图3所示,步骤s203中的实时检测缓存中是否包含当前期望区块,具体包括如下步骤:

s301:实时检测缓存中验签结果区块对应的区块标签,判断区块标签是否与缓存中实时记录的区块指引信息相匹配。

具体地,服务器可以采用缓存监控程序监听缓存中是否存在数据增量变化,以实时检测是否缓存是否接收到新的验签结果区块。即若缓存监控程序监控到缓存中存在数据增量变化,说明缓存接收到新存储的验签结果区块,需实时检测该新存储的验签结果结构是否为当前期望区块。

本实施例中,服务器在检测到缓存接收到新存储的验签结果区块时,对验签结果区块进行解析,以从验签结果区块的区块头区域,获取验签结果区块对应的区块标签,区块标签可以包括区块序号,也可以包括当前区块哈希值和上一区块哈希值。

s302:若区块标签与区块指引信息相匹配,则区块标签对应的验签结果区块为当前期望区块。

其中,区块指引信息是用于指引确定缓存对应的当前期望区块的信息。该区块指引信息可以采用滑动窗口、数组或者其他形式存储,以便在检测到有新的验签结果区块加入缓存时,利用新的验签结果区块的区块标签与该区块指引信息进行匹配,以确定该新的验签结果区块是否为当前期望区块。

该区块指引信息可以是期望区块序号,该期望区块序号是当前期望区块对应的区块序号,该期望区块序号可以最新提交的目标区块中最后一个验签结果区块对应的结束区块序号,采用区块序号命名规则对结束区块序号进行处理所确定的下一区块序号。其中,最新提交的目标区块中最后一个验签结果区块可以理解为该目标区块中的结束区块,结束区块序号为结束区块中的区块序号。区块序号命名规则是用于给某一事件中不同区块分配唯一的区块序号的命名规则,依据区块序号命名规则进行命名所确定的区块序号之间具有顺序性,以便根据区块命名确定至少两个验签结果区块是否为连续区块。相应地,可通过检测缓存中新存储的验签结果区块的区块序号是否为期望区块序号,以实时检测缓存中是否包含当前期望区块。即若新存储的验签结果区块的区块序号与期望区块序号相同,则该验签结果区块为当前期望区块;若新存储的验签结果区块的区块序号与期望区块序号不相同,则该验签结果区块不为当前期望区块。

该区块指引信息也可以是期望区块指针值,该期望区块指针值可以最新提交的目标区块中最后一个验签结果区块对应的当前区块哈希值,也即期望区块指针值是结束区块的当前区块哈希值。相应地,可通过检测缓存中新存储的验签结果区块的上一区块哈希值是否与期望区块指针值相同;若相同,则验签结果区块为当前期望区块;若不相同,则验签结果区块不为当前期望区块。

例如,在验签结果区块的区块标签为上一区块哈希值,而区块指引信息为期望区块指针值时,该期望区块指针值具体为最近一次提交的目标区块中最后一个验签结果区块的当前区块哈希值。其实时检测缓存中是否包含当前期望区块的具体过程包括如下步骤:(1)先判断上一区块哈希值所指向的验签结果区块是否为系统配置区块,该系统配置区块是指系统管理员预先配置的用于记录某一事件的事件信息和交易双方信息等信息的区块,一般而言,系统配置区块为某一事件对应的第一个当前期望区块,可直接作为目标区块提交到下一处理环节。(2)若上一区块哈希值所指向的验签结果区块为系统配置区块,则该验签结果区块为当前期望区块,以便基于当前期望区块确定可提交到下一处理环节的目标区块。(3)若上一区块哈希值所指向的验签结果区块不为系统配置区块,则判断上一区块哈希值是否与期望区块指针值相匹配;若相匹配,则验签结果区块为当前期望区块;若不相匹配,验签结果区块不为当前期望区块。由于每次提交的目标区块包含以缓存中本次当前期望区块为起始块的连续的至少一个验签结果区块,则该目标区块中的最后一个验签结果区块的当前区块哈希值可以指示本次提交的目标区块之后的下一个当前期望区块。

例如,若区块队列中存储有10个需要进行处理的待处理区块,其区块序号分别为1-10,可并发启动10个待命验签线程对10分待处理区块分别进行处理,以分别获取其对应的验签结果区块,并将验签结果区块存储到缓存中,设这10个待处理区块处理完毕的顺序为6,8,2,3,4,5,1,7,9,10,而系统在开始处理这10个待处理区块之前,缓存中的区块指引信息可采用期望区块序号进行确定,该期望区块序号设为1。具体地,缓存在接收到第一个验签结果区块,其区块序号为6,由于其区块序号不为期望区块序号(即1),则区块序号为6的验签结果区块不为当前期望区块,将其保存在缓存中。缓存在接收到第二个验签结果区块,其区块序号为8,由于其区块序号不为期望区块序号(即1),则区块序号为6的验签结果区块不为当前期望区块,则依据缓存中所有验签结果区块对应的区块序号进行排序,以将6号验签结果区块存储在8号验签结果区块前面……依次类推,缓存在接收到第七个验签结果区块,其区块序号为1时,由于其区块序号为当前期望序号(即1),则区块序号为1的验签结果区块为当前期望序号,则将以1号验签结果区块为起始块的所有连续的验签结果区块作为一目标区块,即依序将1号、2号、3号、4号、5号和6号验签结果区块确定为一目标区块,由于缓存中8号验签结果区块与6号验签结果区块不连续,因此,不将8号验签结果区块确定目标区块中的一个验签结果区块。此时,6号验签结果区块为该目标区块中的结束区块。在将1至6号验签结果区块所形成的目标区块提交到下一处理环节后,需基于该目标区块中最后一个验签结果区块对应的区块标签更新当前期望区块,即基于6号验签结果区块对应的区块标签(如区块序号或者当前区块哈希值)更新缓存中新的当前期望区块对应的区块指引信息,即更新缓存中新的当前期望区块对应的期望区块序号,该期望区块序号具体为结束区块序号之后的下一个区块序号,即7号序号。可以理解地,在提交1-6号验签结果区块形成的目标区块之后,新确定的期望区块序号为7;在缓存接收到第八个验签结果区块时,由于其区块序号为7,与期望区块序号相同,则7号验签结果区块为当前期望区块,基于缓存中7号验签结果区块及其连续的验签结果区块(即8号验签结果区块)形成新的目标区块,并提交到下一处理环节…依此类推,以将所有验签结果区块提交到下一处理环节。

本实施例中所提供的区块链事务处理方法中,实时检测缓存中验签结果区块的区块标签,根据区块标签和区块指引信息是否匹配,可快速确定某一验签结果区块是否为当前期望区块,以提高当前期望区块的确定效率,进而有助于提高事件整体处理效率。

在一实施例中,若系统预先创建的待命验签线程的数量过少,可能无法保障最大程度提高签名验证处理的效率,也可能存储系统资源的浪费;若待命验签线程的数量过多,可能影响系统处理除签名验证之外的其他工作的效率,因此,需均衡预先创建的待命验签线程。如图4所示,在步骤s201之前,即在接收待处理区块,将待处理区块存储在区块队列中之前,区块链事务处理方法还包括如下步骤:

s401:获取区块链系统的内核数量。

其中,区块链系统的内核数量具体为服务器中cpu(centralprocessingunit,中央处理器)的内核数量,即处理器的数量。本实施例中,获取区块链系统的内核数量的过程为现有技术,例如,用户可在任务管理器中查看处理器对应的数量即为区块链系统的内核数量,也可以依次执行“开始菜单”->“运行”->“输入cmd”->“输入wmic”->“输入cpuget”这些操作获取区块链系统中每个服务器的内核数量。

s402:基于内核数量和目标比例范围,确定目标数量,创建验签线程池,验签线程池包括与目标数量相对应的待命验签线程。

该目标比例范围是预先设置的比例范围,可以是1.5-3倍。目标数量具体为内核数量与目标比例范围的乘积。一般来说,当目标数量为内核数量的2倍时,即目标比例范围为2时,区块链系统的cpu中线程切换的代价较少,更有利于降低签名验证的系统损耗。

本实施例所提供的区块链事务处理方法中,在基于内核数量和目标比例范围确定目标数量之后,在区块链系统的服务器上创建验签线程池,该验签线程池包括与目标数量相对应的待命验签线程,以便后续利用与目标数量相对应的待命验签线程对区块队列中需要进行处理的待处理区块进行签名验证。该待命验签线程在工作时进行签名验证,不工作时进入休眠状态,无需进行线程的创建和销毁,减少对cpu的占用,有助于降低系统损耗。验签线程池中的待命验签线程的数量与目标数量相匹配,既可最大程度提高签名验证的处理效率,避免系统资源的浪费,也可避免数量过多影响除签名验证以外的其他工作的处理效率。

在一实施例中,如图5所示,步骤s202中,并发启动预先创建的待命验签线程,包括如下步骤:

s501:实时监控区块队列中的待处理区块对应的区块数量。

具体地,服务器上设有计数器,采用计数器实时监控区块队列中的待处理区块对应的区块数量,例如,若区块队列中有一个新增的待处理区块加入,则计数器加1;若区块队列中有一个待处理区块被分配到待命验签线程进行签名验证处理,则计数器减1,以实现通过计数器实时监控区块队列中的待处理区块的区块数量。

s502:若区块数量大于零,则触发唤醒指令,基于唤醒指令,并发唤醒验签线程池中处于休眠状态的待命验签线程,将区块队列中的待处理区块分配给对应的待命验签线程。

其中,唤醒指令是用于唤醒处于休眠状态的待命验签线程的指令。具体地,若区块数量大于零,则说明区块队列中存在需要进行处理的待处理区块,此时,服务器触发验签线程池中处于休眠状态的与区块数量相匹配的待命验签统线程,以将区块队列中的待处理区块分配给对应的符合验签线程进行签名验证处理。

例如,若区块数量大于零,所触发的唤醒指令,可以全部唤醒验签线程池中所有处于休眠状态的待命验签线程,依据cpu调度情况确定对应的待命验签线程,在将区块队列的待处理区块分配给对应的待命验签线程,其他待命验签线程重新进入休眠状态。又例如,若区块数量大于零,所触发的唤醒指令,可以随机唤醒处于休眠状态的待命验签线程,在将区块队列的待处理区块分配给对应的待命验签线程。

本实施例中,基于唤醒指令,并发唤醒验签线程池中处于休眠状态的待命验签线程,具体是指:比较区块数量与验签线程池中处于休眠状态的待命验签线程的线程数量;若区块数量小于或者等于线程数量,则基于唤醒指令,唤醒与区块数量相匹配的待命验签线程;若区块数量大于线程数量,则基于唤醒指令,唤醒与线程数量相匹配的待命验签线程,即唤醒所有处于休眠状态的待命验签线程。可以理解地,通过区块数量和线程数量的比较结果,确定所需唤醒的待命验签线程的数量,以便实现对待命验签线程统一管理。

进一步地,若区块数量大于零,且验签线程池中不存在处于休眠状态的待命验签线程,则实时监控每一待命验签线程的工作状态,在任一待命验签线程对待处理区块进行签名验证,获取验签结果区块,并将验签结果区块存储到缓存后,将该待命验签线程确定为空闲唤醒线程,以将区块队列中的待处理区块发送给对应的空闲唤醒线程。其中,空闲唤醒线程是指是指处于工作状态结束之后预设时间内等待接收新的待处理区块进行处理的待命验签线程;若在该预设时间内接收到新的待处理区块,则空闲唤醒线程重新进入工作状态;若在该预设时间内未接收到新的待处理区块,则空闲唤醒线程进入休眠状态。可以理解地,将待命验签线程确定为空闲唤醒线程,可在预设时间内使其处于等待接收新的待处理区块,避免直接进入休眠状态需另外进行唤醒操作,有助于减少系统开销。

本实施例所提供的区块链事务处理方法中,基于区块队列中待处理区块对应的区块数量触发唤醒指令,以唤醒验签线程池中处于休眠状态的待命验签线程,并将待处理区块分配给对应的待命验签线程,可以使处于休眠状态的待命验签线程进入工作状态,对待处理区块进行处理,只需进行线程唤醒操作,无需进行线程创建和销毁,有助于减少对cpu的占用,降低系统损耗。

在一实施例中,如图6所示,步骤s201,即接收待处理区块,将待处理区块存储在区块队列中,包括:

s601:接收待处理区块,对待处理区块进行合法性校验,获取合法性校验结果。

其中,合法性校验是指检验接收到的待处理区块是否为合法的区块链节点发送的区块的过程。具体地,服务器在接收到待处理区块之后,对待处理区块的元数据区域中记载的区块签名进行合法性验证,若签名验证通过,则获取校验通过的合法性校验结果;若签名验证不通过,则获取校验不通过的合法性校验结果。可以理解地,区块链系统中每个合法的区块链节点会在其所打包的每个待处理区块的元数据区域记载该区块链节点自身的数字签名,这个数字签名即为该待处理区块的区块签名。服务器在接收到每一待处理区块后,从元数据区域获取到区块签名之后,采用与数字签名对应的签名加密算法对应的签名验证方法进行合法性校验,获取合法性校验结果。

s602:若合法性校验结果为校验通过,则将待处理区块存储在区块队列中。

具体地,若所接收到的待处理区块的合法性校验结果为校验通过,则将待处理区块存储在区块队列中,以便后续采用待命验签线程对区块队列中的待处理区块进行签名验证;若所接收到的待处理区块的合法性校验结果为校验不通过,则直接丢弃该待处理区块,以避免后续对合法性校验不通过的待处理区块进行处理,从而避免系统资源的浪费,以达到降低系统损耗的目的。

本实施例所提供的区块链事务处理方法中,通过对所接收到的每一待处理区块进行合法性校验,只将合法性校验结果为校验通过的待处理区块存储在区块队列中,以避免将合法性校验结果为校验不通过的待处理区块加入区块队列进行后续处理,从而避免系统资源的浪费,以达到降低系统损耗的目的。

在一实施例中,由于不同待处理区块之间存在特定的执行顺序,使得区块链事务处理过程中,需依据执行顺序进行事务处理;而每一待处理区块均包含至少一个待处理事务,若任一待处理区块中的待处理事务的事务数量较多,使得待命验签线程对该待处理区块进行处理的时间较长,而执行顺序在该待处理区块之后的其他待处理区块需等待较长时间,才可形成目标区块提交到下一处理环节,从而影响整个区块链事件处理过程的处理效率。如图7所示,步骤s202,即对区块队列中的待处理区块进行签名验证,获取验签结果区块,包括如下步骤:

s701:检测每一待处理区块中所有待处理事务对应的事务数量。

其中,事务数量是指待处理区块中所有待处理事务的数量,具体是指待处理区块的区块数据区域所记载的所有交易数据对应的数量。可以理解地,区块数据区域所记载的每一笔交易数据对应一个待处理事务。

s702:若事务数量大于预设数量阈值,则依据事务数量确定子线程数量,创建与子线程数量相匹配的辅助验签子线程。

其中,预设数量阈值是预先设置的用于评估事务数量是否达到认定为较大标准的阈值。具体地,若任一待处理区块中所有待处理事务对应的事务数量大于预设数量阈值,说明该待处理区块中的待处理事务对应的事务数量过多,若只采用待命验签线程进行处理,可能会导致处理时间过长,因此需创建辅助验签子线程对待处理区块中的待处理事务进行处理。其中,辅助验签子线程是系统创建的用于辅助待命验签线程处理事务数量较大的待处理区块的线程,在待处理区块处理完毕之后进行销毁。

本实施例中,依据事务数量确定子线程数量,创建与子线程数量相匹配的辅助验签子线程具体包括:对事务数量与预设数量阈值的商进行向下取整,以获取子线程数量,并创建与子线程数量相匹配的辅助验签子线程。即子线程数量可采用如下公式确定:其中,n为辅助验签子线程,a为事务数量,b为预设数量阈值。

s703:采用待命验签线程和辅助验签子线程对待处理事务进行签名验证,获取签名验证结果。

具体地,服务器采用待命验签线程和与子线程数量相匹配的辅助验签子线程对待处理区块中所有的待处理事务进行并发签名验证,以快速获取该待处理区块中所有待处理事务对应的签名验证结果,以提高待处理事务较多的待处理区块的签名验证效率。也即本实施例中可采用n+1个线程对一个待处理区块中所有待处理事务进行签名验证,可快速获取相应的签名验证结果。

s704:将签名验证结果存储在待处理区块的元数据区域,获取验签结果区块,释放待命验签线程并销毁辅助验签子线程。

具体地,服务器将所有待处理事务对应的签名验证结果存储在待处理区块的元数据区域,以形成包含签名验证结果的验签结果区块,可保障验签结果区块的获取效率。在获取验签结果区块之后,需释放该待命验签线程,以使该待命验签线程可以处理其他待处理区块,在释放该待命验签线程之后,在预设时间内该待命验签线程为空闲唤醒线程;若在该预设时间内接收到新的待处理区块,则空闲唤醒线程重新进入工作状态;若在该预设时间内未接收到新的待处理区块,则空闲唤醒线程进入休眠状态。由于辅助验签子线程是系统临时创建的用于协助待命验签线程对事务数量较多的待处理区块进行处理的线程,在该待处理区块处理完成后,需销毁辅助验签子线程,以避免系统中线程数量过多而影响各线程的处理效率。

本实施例所提供的区块链事务处理方法中,在待处理区块中所有待处理事务的事务数量大于预设数量阈值时,创建辅助验签子线程与待命验签子线程对这些待处理事务并发进行签名验证处理,以提高该待处理区块的签名验证效率,进而保障整体处理效率。在签名验证完成,获取验签结果区块后,需释放待命验签线程并销毁辅助验签子线程,可有效节省系统损耗,保障系统处理效率。

在一实施例中,如图8所示,在步骤s204之后,即在提交目标区块之后,区块链事务处理方法还包括如下步骤:

s801:在多版本并发控制验证过程中,依序对目标区块中的每一验签结果区块的签名验证结果进行识别。

其中,多版本并发控制(multipleversionconcurrentcontrol,简称为mvcc)验证过程主要用于确定交易(即验签结果区块对应的交易)被提交时的交易状态是否为交易产生时的当前状态的验证过程。在多版本并发控制验证过程中,依序对目标区块中的每一验签结果区块的元数据区域记载的签名验证结果进行识别,以确定其对应的签名验证结果为签名有效还是签名无效。可以理解地,由于多版本并发控制验证过程中,任一验签结果区块对应的检查结果依赖于前一个验签结果区块,即前面的验签结果区块对系统的当前状态的修改可能会影响后面的验签结果区块的有效性判定,即验签结果区块之间顺序不同可能导致整个区块链最终状态不一致,因此,需依序对目标区块中的每一个验签结果区块的签名验证结果进行识别。

s802:若签名验证结果为签名有效,则将验签结果区块对应的交易状态与当前状态进行对比,交易状态与当前状态一致,则对验签结果区块进行执行操作,获取有效交易数据。

具体地,在验签结果区块对应的签名验证结果为签名有效时,将验签结果区块对应的交易状态与当前状态进行对比,若交易状态与当前状态一致,则对验签结果区块进行执行操作,则对验签结果区块进行执行操作,获取有效交易数据;若交易状态与当前状态不一致,则将验签结果区块对应的交易数据确定为无效交易数据。其中,验签结果区块对应的交易状态是指验签结果区块中的交易数据所记录的状态;验签结果区块对应的当前状态是指验签结果区块中的交易数据对应的系统状态。

例如,若a在t0时刻查询到银行卡的账户余额为100元,在查看账户余额之后一段时间后的t1时刻提交一个向b转账的100元的交易,形成第1笔交易数据,也即系统在t1时刻才会接收到该笔交易并进行处理。若在a查看账户余额到提交交易这一段时间内,即t0-t1内,a的朋友c采用该银行卡的副卡或者网上银行等其他更方式在其他地方刷了100元,则此时a提交的100元的转账交易会失败,因为交易产生时的交易状态(账户余额为100元,可执行转账交易),而交易被系统执行前的当前状态(账户余额为0元),使得交易状态与当前状态不一致,则直接将这个100元转账交易对应的交易数据确定为无效交易数据。相应地,若在a查看账户余额到提交交易这一段时间内,即t0-t1内,没有其他人采用该银行卡的副卡或者网上银行等方式在其他地方进行交易,则其交易产生时的交易状态(账户余额为100元),而交易被执行前的当前状态(账户余额为100元),两者一致,则将这个100元转账交易对应的交易数据确定为有效交易数据。可以理解地,验签结果区块对应的交易状态与当前状态是否一致主要取决于交易过程中的时间差。

s803:若签名验证结果为签名无效,则将验签结果区块对应的交易数据确定为无效交易数据。

具体地,在验签结果区块对应的签名验证结果为签名无效时,将验签结果区块对应的交易数据直接确定为无效交易数据,无需进行后续的交易状态与当前状态进行验证的操作,有助于减少多版本并发控制验证的处理过程,提高处理效率。

s804:基于有效交易数据和无效交易数据进行事务持久化处理。

其中,事务持久化也称为交易的提交(commit)是指区块中经过签名验证和多版本并发控制验证后获取的交易数据进行提交,写入磁盘的过程。一般来说,在事务持久化处理过程中,若一验签结果区块对应的交易数据为有效交易数据,则基于该有效交易数据修改区块链中的相应的当前状态;若一验签结果区块对应的交易数据为无效交易数据,则无效交易数据不被采纳,因此,无需修改区块链中的当前状态,对无效交易数据进行事务持久化处理,以便于进行溯源。

本实施例所提供的区块链事务处理方法,在多版本并发控制验证过程中,依序对目标区块中的每一验签结果区块的签名验证结果进行识别,以使执行顺序在先的验签结果区块先进行验证,而执行顺序在后的验签结果区块在后验证,使得执行顺序在后的验签结果区块的验证可以依赖执行顺序在前的验签结果区块的验证结果进行更改。可对多版本并发控制验证过程确定的有效交易数据和无效交易数据进行进行事务持久化处理,以保证这些有效交易数据和无效交易数据的安全性,避免被篡改。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

在一实施例中,提供一种区块链事务处理装置,该区块链事务处理装置与上述实施例中区块链事务处理方法一一对应。如图9所示,该区块链事务处理装置包括待处理区块接收模块901、签名验证处理模块902、目标区块确定模块903和目标区块提交模块904。各功能模块详细说明如下:

待处理区块接收模块901,用于接收待处理区块,将待处理区块存储在区块队列中,每一待处理区块对应一区块标签。

签名验证处理模块902,用于并发启动预先创建的待命验签线程,对区块队列中的待处理区块进行签名验证,获取验签结果区块,将验签结果区块存储到缓存中。

目标区块确定模块903,用于实时检测缓存中是否包含当前期望区块,若缓存中包含当前期望区块,则将以当前期望区块为起始块的连续的至少一个验签结果区块确定为目标区块。

目标区块提交模块904,用于提交目标区块,并基于目标区块中最后一个验签结果区块对应的区块标签更新当前期望区块。

优选地,目标区块确定模块903,包括:

区块标签匹配处理单元,用于实时检测缓存中验签结果区块对应的区块标签,判断区块标签是否与缓存中实时记录的区块指引信息相匹配。

当前期望区块确定单元,用于若区块标签与区块指引信息相匹配,则区块标签对应的验签结果区块为当前期望区块。

优选地,在待处理区块接收模块901之前,区块链事务处理装置还包括:

内核数量确定单元,用于获取区块链系统的内核数量。

验签线程创建单元,用于基于内核数量和目标比例范围,确定目标数量,创建验签线程池,验签线程池包括与目标数量相对应的待命验签线程。

优选地,签名验证处理模块902,包括:

区块数量监控单元,用于实时监控区块队列中的待处理区块对应的区块数量。

线程唤醒分配单元,用于若区块数量大于零,则触发唤醒指令,基于唤醒指令,并发唤醒验签线程池中处于休眠状态的待命验签线程,将区块队列中的待处理区块分配给对应的待命验签线程。

优选地,待处理区块接收模块901,包括:

合法性校验单元,用于接收待处理区块,对待处理区块进行合法性校验,获取合法性校验结果。

区块存储单元,用于若合法性校验结果为校验通过,则将待处理区块存储在区块队列中。

优选地,签名验证处理模块902,包括:

事务数量检测单元,用于检测每一待处理区块中所有待处理事务对应的事务数量。

辅助线程创建单元,用于若事务数量大于预设数量阈值,则依据事务数量确定子线程数量,创建与子线程数量相匹配的辅助验签子线程。

签名验证处理单元,用于采用待命验签线程和辅助验签子线程对待处理事务进行签名验证,获取签名验证结果。

验签结果区块获取单元,用于将签名验证结果存储在待处理区块的元数据区域,获取验签结果区块,释放待命验签线程并销毁辅助验签子线程。

优选地,在目标区块提交模块904之后,区块链事务处理装置还包括:

签名验证结果识别单元,用于在多版本并发控制验证过程中,依序对目标区块中的每一验签结果区块的签名验证结果进行识别。

有效交易数据确定单元,用于若签名验证结果为签名有效,则将验签结果区块对应的交易状态与当前状态进行对比,交易状态与当前状态一致,则对验签结果区块进行执行操作,获取有效交易数据。

无效交易数据确定单元,用于若签名验证结果为签名无效,则将验签结果区块对应的交易数据确定为无效交易数据。

事务持久化处理单元,用于基于有效交易数据和无效交易数据进行事务持久化处理。

关于区块链事务处理装置的具体限定可以参见上文中对于区块链事务处理方法的限定,在此不再赘述。上述区块链事务处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于执行上述实施例中的区块链事务处理方法过程中采用或者形成的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种区块链事务处理方法。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中区块链事务处理方法的步骤,例如图2所示的步骤s201-s204,或者图3至图8中所示的步骤,为避免重复,这里不再赘述。或者,处理器执行计算机程序时实现区块链事务处理装置这一实施例中的各模块/单元的功能,例如图9所示的待处理区块接收模块901、签名验证处理模块902、目标区块确定模块903和目标区块提交模块904的功能,为避免重复,这里不再赘述。

在一实施例中,提供一计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中区块链事务处理方法的步骤,例如图2所示的步骤s201-s204,或者图3至图8中所示的步骤,为避免重复,这里不再赘述。或者,该计算机程序被处理器执行时实现上述区块链事务处理装置这一实施例中的各模块/单元的功能,例如图9所示的待处理区块接收模块901、签名验证处理模块902、目标区块确定模块903和目标区块提交模块904的功能,为避免重复,这里不再赘述。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。

以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

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