用于区块链的交易处理方法和网络节点与流程

文档序号:14912100发布日期:2018-07-10 23:42阅读:173来源:国知局

本公开涉及互联网技术,更具体地,涉及一种用于区块链的交易处理方法以及实现所述方法的网络节点。



背景技术:

区块链(Blockchain)是比特币的一个重要概念,其本质上是一个去中心化的数据库,同时作为比特币的底层技术。区块链是一串使用密码学方法相关联产生的数据区块(即区块),每一个数据区块中包含了一次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。

狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。

每当有加密交易产生时,网络中有强大运算能力的节点(即矿工(Miner))就开始利用算法解密验证交易,创造出新的区块来记录最新的交易。新的区块按照时间顺序线性地被补充到原有的区块链末端,这个帐本就会不停的增长和延长。

图1示出了一种传统的中心化网络100的结构示意图。如图1中所示,网络100包括一个中心服务器10和多个网络节点11-16。中心服务器10用于管理和维护网络100的总账本,网络节点11-16中的每一个分别与中心服务器10相连,用于管理和维护其自身的账本。当其中一个网络节点产生新的交易时,该网络节点将该交易记录发送给中心服务器10,中心服务器10验证该交易并将交易记录保存在总账本中。

在这种传统的中心化网络100中,对中心服务器10的有效攻击可能会破坏整个网络。并且,由于每个交易都由中心服务器10验证,对于包含大量网络节点的网络来说,整个网络的处理效率将会不可避免地变得很低。

图2示出了一种去中心化的网络200的结构示意图。如图2中所示,网络200不包括中心服务器,而仅仅包括多个网络节点21-25,网络节点21-25中的每一个与其他网络节点中的至少一个相连。例如,当网络中产生新的交易时,将会产生一个新的区块,该新的区块例如由节点21产生,并且被广播给网络200中与节点21相连的所有其他网络节点22-25。接收到该区块的每个网络节点对该区块中的交易进行处理和验证。如果验证通过,则向所有其他网络节点广播表示赞成的投票结果。如果对该区块投赞成票的网络节点的比例超过某个阈值(例如三分之二),则该区块被验证通过,并且被附加在原有的区块链的末端。



技术实现要素:

在当前的区块链设计中,当一个网络节点接收到新生成的区块时,其对该区块中所包含的交易的验证和处理都是采用串行化处理,无法充分利用节点硬件资源达到高并发的交易验证及处理,从而造成全网节点对区块共识的延迟及交易吞吐量的性能瓶颈。

针对上述问题中的至少一个,本公开提出了一种用于区块链的交易处理方法以及实现该方法的网络节点,其对区块中的交易按照类型进行划分,并且对有可能并行处理的交易使用并行处理和验证。

根据本公开的一个方面,提供了一种用于区块链的交易处理方法。该方法包括:接收包含多个交易的区块;根据该多个交易中的每个交易是否能够并行处理,将该多个交易划分为第一类型交易和第二类型交易;开启至少两个并行处理进程,并且利用该至少两个并行处理进程对该第一类型交易中的所有交易进行并行处理;以及开启一个串行处理进程,并且利用该串行处理进程对该第二类型交易中的每个交易进行串行处理。

根据本公开的另一个方面,提供了一种用于区块链的交易处理的网络节点。该网络节点包括:存储器,其中存储有计算机程序代码;以及处理器,其被配置为运行该存储器中存储的计算机程序代码,以接收包含多个交易的区块;根据该多个交易中的每个交易是否能够并行处理,将该多个交易划分为第一类型交易和第二类型交易;开启至少两个并行处理进程,并且利用该至少两个并行处理进程对该第一类型交易中的所有交易进行并行处理;以及开启一个串行处理进程,并且利用该串行处理进程对该第二类型交易中的每个交易进行串行处理。

利用本公开的方案,能够加快对区块中的交易进行验证和处理的速度、降低共识延迟并且提高系统交易处理吞吐量。

附图说明

通过参考下列附图所给出的本公开的具体实施方式的描述,将更好地理解本公开,并且本公开的其他目的、细节、特点和优点将变得更加显而易见,其中:

图1示出了一种传统的中心化网络的结构示意图;

图2示出了一种去中心化的网络的结构示意图;

图3示出了一个区块中所包含的交易列表的示意图;

图4示出了根据本公开实施方式的用于区块链的交易处理方法的流程图;

图5示出了根据本公开的用于区块链的交易处理的装置的方框图;以及

图6示出了适合实现本公开的实施例的设备的方框图。

具体实施方式

下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整的传达给本领域的技术人员。

区块结构包括区块头和该区块所包含的交易列表。通常,区块头的大小为80字节,包括版本号(4字节)、区块链中的上一区块的哈希值(32字节)、Merkel根哈希值(32字节)、时间戳(4字节)、该区块的哈希谜题的难度值(4字节)和随机数Nonce(4字节)。

随着区块链技术的发展,区块链和智能合约开始结合起来。智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议。在实际操作中,智能合约可以看作是在资产内植入的一些代码,这些代码可以自动智能决定网络中相关资产运作的地点和方式。在已有的区块链方案中,对智能合约的调用也作为普通的交易进行处理,从而导致不能够进行并发的交易验证和处理。

图3示出了一个区块中所包含的交易列表300的示意图。在本文中,将转账交易和智能合约调用统称为交易,并且存储在区块的交易列表部分。如图3中所示,交易列表300包含多个交易T1、T2、……TN(其中N是大于1的正整数),这些交易可以是转账交易或智能合约调用中的任一种。如上所述,在已有的区块链方案中,所有交易T1、T2、……TN按照串行方式依次被处理。

图4示出了根据本公开实施方式的用于区块链的交易处理方法400的流程图。方法400可以在区块链网络中的任一网络节点处执行,该节点例如可以是网络200中的节点21至25中的任一个。以下参考图2和图3对方法400进行描述。

如图4中所示,当网络200中的某一节点(如节点21)产生新的交易时,其产生一个包含如图3中所示的交易列表300的新区块,并将该新的区块发送给网络200中的与节点21相连的所有其他节点22-25,这些节点对接收到的新区块进行处理和验证,并将验证结果广播给与其相连的所有节点。下面,以节点22接收到来自节点21的新区块为例来对本公开的方法400进行描述。

方法400从410开始,其中节点22从节点21接收包含交易列表300的区块。

在420,节点22根据交易列表300中的每个交易T1、T2、……TN是否能够并行处理,将交易T1、T2、……TN划分为第一类型交易和第二类型交易。例如,如图3中所示,假设交易T1、T2、……TM(其中M是大于1的正整数且M小于或等于N)被划分为第一类型交易,在图中以标号310表示,而交易TM+1、……TN被划分为第二类型交易,在图中以标号320表示。

在本文中,假设第一类型交易310是能够并行处理的交易,如转账交易,并且假设第二类型交易320是不能够并行处理的交易,如智能合约调用。

对于第一类型交易310,在430,节点22开启至少两个并行处理进程,并且对第一类型交易310中的所有交易进行并行处理。在一个实例中,假设开启了L(L为大于或等于2的整数)个并行处理进程,则将第一类型交易310中的交易T1、TL+1、T2L+1……分配给进程1进行处理,将交易T2、TL+2、T2L+2……分配给进程2进行处理,将交易T3、TL+3、T2L+3……分配给进程3进行处理,以此类推。然而,本领域技术人员可以理解,这种分配方式仅仅是并行处理的一个示例,本文公开的方案可以应用任何已知的或将来开发的并行处理算法。

在一些实现中,在430之前,方法400还可以包括账户数据读取步骤(图中未示出)以读取第一类型交易310中的每个交易所涉及的对象的账户数据。具体地,节点22所开启的至少两个并行处理进程中的一个并行处理进程快照读取待处理的交易Ti(i=1、2、……M)的账户数据account_i并获取与账户数据account_i相关联的时间戳TS_i。接下来,节点22确定交易Ti的账户数据account_i的当前时间戳TS_(account_i)是否小于或等于与账户数据account_i相关联的时间戳TS_i。如果节点22确定交易Ti的账户数据account_i的当前时间戳TS_(account_i)小于或等于与账户数据account_i相关联的时间戳TS_i,则对交易Ti所涉及的账户数据account_i完成写入操作并将账户数据account_i的当前时间戳TS_(account_i)设置为当前系统时间。另一方面,如果节点22确定交易Ti的账户数据account_i的当前时间戳TS_(account_i)大于与账户数据account_i相关联的时间戳TS_i,则重新读取账户数据account_i并获取新的时间戳TS_i。接下来,节点22以重新读取的账户数据account_i和时间戳TS_i来重复上述确定交易Ti的账户数据account_i的当前时间戳TS_(account_i)是否小于或等于与账户数据account_i相关联的时间戳TS_i并执行写入的操作。

对于第二类型交易320,在440,节点22开启一个串行处理进程,并且对第二类型交易320中的每个交易进行串行处理。例如,可以将第二类型交易320中的每个交易(交易TM+1、……TN)依次或以任何其他顺序串行送入该串行处理进程。

在本文中,对交易进行处理是指根据一个交易所涉及的各个对象的账户数据和交易金额对该对象的账户数据进行更新的过程。例如,假设一个转账交易的交易详情是从对象A向对象B转账金额m,则对该交易进行处理是将对象A的账户余额(例如为a)减去金额m以得到对象A的更新的账户数据(例如为a-m),并且将对象B的账户余额(例如为b)加上金额m以得到对象B的更新的账户数据(例如为b+m)。

在对交易列表300中的所有交易都进行了处理之后,方法400还可以包括验证步骤450和460,以对处理后的第一类型交易和第二类型交易进行验证。

具体地,在450,针对第一类型交易310,节点22开启至少两个并行验证进程,并且对步骤430中处理后的第一类型交易310中的所有交易进行并行验证。在一个实例中,假设开启了L’(L’为大于或等于2的整数)个并行验证进程,则将第一类型交易310中的交易T1、TL’+1、T2L’+1……分配给进程1进行验证,将交易T2、TL’+2、T2L’+2……分配给进程2进行验证,将交易T3、TL’+3、T2L’+3……分配给进程3进行验证,以此类推。

在本文中,步骤430中开启的并行处理进程的数目L和步骤450中开启的并行验证进程的数目L’可以相同也可以不同。

对于第二类型交易320,在460,节点22开启一个串行验证进程,并且对第二类型交易320中的每个交易进行串行验证。例如,可以将第二类型交易320中的每个交易(交易TM+1、……TN)依次或以任何其他顺序串行送入该串行验证进程。

在本文中,对交易进行验证是指验证该交易是否有效。例如,如前所述,假设一个转账交易的交易详情是从对象A向对象B转账金额m,则对该交易进行处理是将对象A的账户余额(例如为a)减去金额m以得到对象A的更新的账户数据(例如为a-m),并且将对象B的账户余额(例如为b)加上金额m以得到对象B的更新的账户数据(例如为b+m)。在这种情况下,对交易进行验证例如可以包括验证对象A的更新的账户数据是否有效。例如,如果对象A的更新的账户数据a-m为负值,则可以判定该交易无效。

在对第一类型交易和第二类型交易都进行了处理和验证之后,方法400还可以包括对验证结果进行投票的过程。具体地,在470,节点22根据步骤450和460的验证结果判断第一类型交易310和第二类型交易320中(即交易列表300中)是否存在无效交易。

如果判断第一类型交易310和第二类型交易320中的所有交易都被验证为有效交易(470中判断结果为“否”),则在480,节点22向网络200中与其相连的所有其他节点(如节点21、23、24、25)广播表示赞成该区块的投票结果。

如果判断第一类型交易310或第二类型交易320中的任一交易被验证为无效交易(470中判断结果为“是”),则在480,节点22向网络200中与其相连的所有其他节点(如节点21、23、24、25)广播表示拒绝该区块的投票结果。

进一步地,方法400还可以包括回滚操作。具体地,在410中接收到区块之后并且在420中对交易列表300中的交易进行划分之前,节点22可以备份其数据库中的账户数据(图中未示出)。在这种情况下,响应于在步骤470中节点22判断第一类型交易310或第二类型交易320中的任一交易被验证为无效交易,节点22将其数据库中的账户数据恢复为所备份的账户数据(图中未示出)。这里,恢复节点22的数据库中的账户数据的操作可以在步骤490之后执行,也可以在步骤470之后、步骤490之前执行。

图5示出了根据本公开的用于区块链的交易处理的装置500的方框图。装置500例如可以实现在如图2中所示的网络节点21-25中的任一个中。以下以装置500位于节点22中为例并参考图2和图3来进行描述。

如图5中所示,装置500可以包括接收模块510,其被配置为从节点21接收包含多个交易300的区块。装置500还可以包括分类模块520,其被配置为根据多个交易300中的每个交易是否能够并行处理,将多个交易300划分为第一类型交易310和第二类型交易320。装置500还可以包括并行处理模块530,其被配置为开启至少两个并行处理进程,并且利用该至少两个并行处理进程对第一类型交易310中的所有交易进行并行处理。装置500还可以包括串行处理模块540,其被配置为开启一个串行处理进程,并且利用该串行处理进程对第二类型交易320中的每个交易进行串行处理。

在一种实现中,装置500还可以包括并行验证模块550,其被配置为在对第一类型交易310进行并行处理之后,开启至少两个并行验证进程,并且利用该至少两个并行验证进程对第一类型交易310中的每个交易的处理结果进行验证。

在一种实现中,装置500还可以包括串行验证模块560,其被配置为在对第二类型交易320进行串行处理之后,开启一个串行验证进程,并且利用该串行验证进程对第二类型交易320中的每个交易的处理结果进行验证。

在一种实现中,第一类型交易310包括转账交易,第二类型交易320包括智能合约调用。

在一种实现中,装置500还可以包括广播模块570,其被配置为响应于第一类型交易310中的所有交易和第二类型交易320中的所有交易都被验证为有效交易,向网络中的其他网络节点(如节点21、23、24、25)广播指示赞成该区块的投票结果。

在一种实现中,装置500还可以包括广播模块570,其被配置为响应于第一类型交易310中的任一交易或者第二类型交易320中的任一交易被验证为无效交易,向网络中的其他网络节点(如节点21、23、24、25)广播指示拒绝该区块的投票结果。

在一种实现中,装置500还可以包括备份模块580,其被配置为在接收到该区块之后,并且在对所述多个交易进行划分之前,备份节点22的数据库中的账户数据。在这种情况下,装置500还可以包括回滚模块590,其被配置为响应于第一类型交易310中的任一交易或者第二类型交易320中的任一交易被验证为无效交易,将节点22的数据库中的账户数据恢复为所备份的账户数据。

图6示出了适合实现本公开的实施例的设备600的方框图。设备600可以用来实现如图2中所示的网络节点21-25中的任一个。

如图6中所示,设备600包括处理器610。处理器610控制设备600的操作和功能。例如,在某些实施例中,处理器610可以借助于与其耦合的存储器620中所存储的计算机程序代码或指令630来执行各种操作。存储器620可以是适用于本地技术环境的任何合适的类型,并且可以利用任何合适的数据存储技术来实现,包括但不限于基于半导体的存储器件、磁存储器件和系统、光存储器件和系统。尽管图6中仅仅示出了一个存储器单元,但是在设备600中可以有多个物理不同的存储器单元。

处理器610可以是适用于本地技术环境的任何合适的类型,并且可以包括但不限于通用计算机、专用计算机、微控制器、数字信号控制器(DSP)以及基于控制器的多核控制器架构中的一个或多个多个。设备600也可以包括多个处理器610。处理器610与通信接口640相连,以通过通信接口640实现信息的接收和发送。

在本公开的方案中,通过利用多版本控制处理高并发交易,能够加快对区块中的交易进行验证和处理的速度、降低共识延迟并且提高系统交易处理吞吐量。在一些方案中,还能够进一步确保交易读写序列化和数据一致性,从而进一步保证区块处理的准确性。

注意,本文所述的方法和/或步骤并不局限于所描述或示出的具体顺序,而是可以以任何其他可行的顺序来执行。例如,第一类型交易310的并行处理(步骤430)可以早于、晚于或与第二类型交易320的串行处理(步骤440)同时执行。并且,第一类型交易310的并行验证(步骤450)也可以早于、晚于或与第二类型交易320的串行验证(步骤460)同时执行。

在一个或多个示例性设计中,可以用硬件、软件、固件或它们的任意组合来实现本申请所述的功能。例如,如果用软件来实现,则可以将所述功能作为一个或多个指令或代码存储在计算机可读介质上,或者作为计算机可读介质上的一个或多个指令或代码来传输。

本文公开的装置的各个单元可以使用分立硬件组件来实现,也可以集成地实现在一个硬件组件,如处理器上。例如,可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或者晶体管逻辑、分立硬件组件或用于执行本文所述的功能的任意组合来实现或执行结合本公开所描述的各种示例性的逻辑块、模块和电路。

本领域普通技术人员还应当理解,结合本申请的实施例描述的各种示例性的逻辑块、模块、电路和算法步骤可以实现成电子硬件、计算机软件或二者的组合。

本公开的以上描述用于使本领域的任何普通技术人员能够实现或使用本公开。对于本领域普通技术人员来说,本公开的各种修改都是显而易见的,并且本文定义的一般性原理也可以在不脱离本公开的精神和保护范围的情况下应用于其它变形。因此,本公开并不限于本文所述的实例和设计,而是与本文公开的原理和新颖性特性的最广范围相一致。

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