用于并行处理区块链交易的系统和方法

文档序号:1409747 发布日期:2020-03-06 浏览:5次 >En<

阅读说明:本技术 用于并行处理区块链交易的系统和方法 (System and method for parallel processing of blockchain transactions ) 是由 谢桂鲁 夏凝 于 2019-03-28 设计创作,主要内容包括:提供了用于并行处理区块链交易的方法、系统和装置,包括编码在计算机存储介质上的计算机程序。方法之一包括:获得用于添加至区块链的多个候选交易;将所述候选交易分组为一个或多个交易组;创建所述区块链的最新区块的数据结构的至少一部分的一个或多个副本;将所述一个或多个交易组分别与所述数据结构的所述一个或多个副本相关联;执行每个所述交易组中的候选交易并更新所述数据结构的关联副本;以及合并所述数据结构的更新副本,以获得要添加至所述区块链的新区块的新数据结构的至少一部分。(Methods, systems, and apparatus, including computer programs encoded on a computer storage medium, are provided for parallel processing blockchain transactions. One of the methods comprises the following steps: obtaining a plurality of candidate transactions for addition to a blockchain; grouping the candidate transaction groups into one or more transaction groups; creating one or more copies of at least a portion of a data structure of a most recent chunk of the chain of chunks; associating the one or more transaction groups with the one or more copies of the data structure, respectively; executing the candidate transactions in each of the transaction groups and updating the associated copy of the data structure; and merging the updated copies of the data structure to obtain at least a portion of a new data structure to be added to a new chunk of the blockchain.)

用于并行处理区块链交易的系统和方法

技术领域

本申请一般涉及用于并行处理区块链交易的方法和设备。

背景技术

区块链结合了因特网的开放性和加密法的安全性,来提供一种更快、更安全的方式验证密钥信息并建立信任。然而,区块链交易的软件和硬件性能在各种参数上仍然滞后于传统分布式系统。在当前技术中,为执行多个交易,锁定状态树以用于更新并在更新后解锁,且交易在更新期间被串行执行。这种串行处理方式限制了区块链的TPS(每秒交易)性能。例如,每秒只能够执行7个比特币交易。因此,期望提高区块链系统的性能,诸如用于容纳更大量的交易的执行效率。

发明内容

本文各种实施例包括但不限于用于并行处理区块链交易的系统、方法和非暂态计算机可读介质。

在一些实施例中,一种计算机实现的用于并行处理区块链交易的方法,包括:获得用于添加至区块链的多个候选交易;将所述候选交易分组为一个或多个交易组;创建所述区块链的最新区块的数据结构的至少一部分的一个或多个副本;将所述一个或多个交易组分别与所述数据结构的所述一个或多个副本相关联;执行每个所述交易组中的候选交易并更新所述数据结构的关联副本;以及合并所述数据结构的更新副本,以获得要添加至所述区块链的新区块的新数据结构的至少一部分。

在另一实施例中,所述一个或多个交易组是独立交易组。

在又一实施例中,将所述候选交易分组一个或多个交易组,包括:将所述候选交易中均涉及至少一个共同交易账户的两个或更多个候选交易分组在所述一个或多个交易组中的同一交易组下。

在还一实施例中,将所述候选交易分组为一个或多个交易组,包括:将所述候选交易中不涉及任何共同交易账户的两个或更多个候选交易分组在所述一个或多个交易组中的不同交易组下。

在一些实施例中,所述区块链基于账户/余额模型;以及所述数据结构包括默克尔帕特里夏(Merkle Patricia)树,其包括存储在所述最新区块中的单个状态根节点以及未存储在所述最新区块中的多个中间节点和叶节点。

在另一实施例中,执行每个所述交易组中的候选交易并更新所述数据结构的关联副本,包括:并行地执行每个所述交易组中的候选交易并更新所述数据结构的关联副本。

在又一实施例中,执行相应的所述交易组中的候选交易,包括:由多核处理器执行相应的所述交易组中的候选交易。

在还一实施例中,更新所述数据结构的关联副本包括以下中的至少一个:更新所述数据结构的关联副本之一中的交易账户的余额;移除所述交易账户;或添加新交易账户。

在一些实施例中,合并所述数据结构的更新副本包括:通过组合和合并在所述数据结构的更新副本中进行的更新来更新所述区块链的所述最新区块的所述数据结构的至少一部分。

在另一实施例中,所述方法还包括:将所述新区块添加至所述区块链,其中,所述新数据结构的所述部分包括新状态根节点,且所述新区块包括所述新状态根节点。

在又一实施例中,一种用于并行处理区块链交易的系统,包括:一个或多个处理器;以及耦接至所述一个或多个处理器且其上存储有指令的一个或多个计算机可读存储器,所述指令可由所述一个或多个处理器执行以执行如前述任一实施例所述的方法。

在又一实施例中,一种用于并行处理区块链交易的装置,包括:用于执行执行如前述任一实施例所述的方法。

在一些实施例中,一种其上存储有指令的非暂态计算机可读介质,当所述指令由设备的处理器执行时,促使所述设备执行如前述任一实施例所述的方法。

在另一实施例中,一种用于并行处理区块链交易的系统,包括:一个或多个处理器;以及耦接至所述一个或多个处理器且其上存储有指令的一个或多个计算机可读存储器,所述指令可由所述一个或多个处理器执行以促使所述系统执行操作,所述操作包括:获得用于添加至区块链的多个候选交易;将所述候选交易分组为一个或多个交易组;创建所述区块链的最新区块的数据结构的至少一部分的一个或多个副本;将所述一个或多个交易组分别与所述数据结构的所述一个或多个副本相关联;执行每个所述交易组中的候选交易并更新所述数据结构的关联副本;以及合并所述数据结构的更新副本以获得要添加至所述区块链的新区块的新数据结构的至少一部分。

在又一实施例中,所述处理器包括多核处理器。

在还一实施例中,一种其上存储有指令的非暂态计算机可读介质,当所述指令由所述一个或多个处理器执行时,促使所述一个或多个处理器执行操作,所述操作包括:获得用于添加至区块链的多个候选交易;将所述候选交易分组为一个或多个交易组;创建所述区块链的最新区块的数据结构的至少一部分的一个或多个副本;将所述一个或多个交易组分别与所述数据结构的所述一个或多个副本相关联;执行每个所述交易组中的候选交易并更新所述数据结构的关联副本;以及合并所述数据结构的更新副本以获得要添加至所述区块链的新区块的新数据结构的至少一部分。

根据一些实施例,一种用于并行处理区块链交易的装置,包括:获得模块,用于获得用于添加至区块链的多个候选交易;分组模块,用于将所述候选交易分组为一个或多个交易组;创建模块,用于创建所述区块链的最新区块的数据结构的至少一部分的一个或多个副本;关联模块,用于将所述一个或多个交易组分别与所述数据结构的所述一个或多个副本相关联;执行模块,用于执行每个所述交易组中的候选交易并更新所述数据结构的关联副本;以及合并模块,用于合并所述数据结构的更新副本以获得要添加至所述区块链的新区块的新数据结构的至少一部分。

本文所公开的实施例具有一个或多个技术效果,在一些实施例中,在共识验证(挖掘)候选交易池之后并且在执行之前,候选交易可以被分组为各种独立组。在其他实施例中,候选交易组可以由更新状态树的副本的多核处理器(例如,CPU)同时执行。在其他实施例中,通过创建状态树数据结构的副本,可以在副本中并行处理独立候选交易组,而不必锁定数据结构。在其他实施例中,在更新所有独立组之后,可以合并状态树数据结构的副本以获得新区块的新数据结构,从而实现新区块的有效挖掘。在一些实施例中,可以显著改善诸如TPS和其他处理效率测量的区块链性能。

在参考附图考虑以下描述和所附权利要求书之后,本文公开的系统、方法和非暂态计算机可读介质的这些特征和其它特征,以及操作方法和结构的相关元件的功能以及部件的组合和制造的经济性将变得更加明显,所有附图形成本文的一部分,其中,在各个附图中,相同的附图标记表示对应的部件。然而,应当清楚地理解,附图仅用于说明和描述的目的,而不意图进行限制。

附图说明

图1示出了根据各种实施例的用于并行处理区块链交易的示例性系统。

图2示出了根据各种实施例的区块链的两个示例性区块和对应的状态树。

图3A示出了根据各种实施例的用于并行处理区块链交易的示例性方法的流程图。

图3B示出了根据各种实施例的两个状态树副本的示例性合并。

图4示出了根据各种实施例的用于并行处理区块链交易的示例性方法的流程图。

图5示出了根据各种实施例的用于并行处理区块链交易的示例性装置的流程图。

图6示出了可实施本文描述的任意实施例的示例性计算机系统的框图。

具体实施方式

因为操作由网络中的各个节点(例如,计算设备)执行,区块链可以被认为是去中心化的数据库,通常被称为分布式账本。任何信息都可以被写入并被保存至区块链中或从区块链被读取。任何人都可以建立服务器并作为节点加入区块链网络。任何节点都可以通过执行诸如哈希计算的复杂计算以向当前区块链添加区块,从而对维持区块链贡献计算能力,并且所添加的区块可以包含各种类型的数据或信息。可以用代币(例如,数字货币单位)对为所添加的区块贡献计算能力的节点进行奖励。由于区块链没有中心节点,所以每个节点是等同的,并且保存整个区块链数据库。

节点是例如支持区块链网络并保持其平稳运行的计算设备或大型计算机系统。在示例性“工作量证明”系统中,存在两种类型的节点,全节点和轻节点。全节点保存区块链的完整副本。区块链网络上的全节点验证它们接收的交易和区块,并将这些交易和区块中继到连接的对等点,以提供交易的共识验证。另一方面,轻节点仅下载区块链的一小部分。例如,轻节点用于数字货币交易。当轻节点想要进行交易时,轻节点将与全节点通信。

这种去中心化属性可以帮助防止处于控制位置的管理中心出现。例如,比特币/以太坊区块链的维护是由运行区域中(装有)比特币/以太坊软件的通信节点组成的网络执行。也就是说,取代传统意义上的银行、机构或管理员,多个中间角色以执行比特币/以太坊软件的计算机服务器的形式存在。这些计算机服务器形成经由因特网连接的网络,其中任何人都可能加入该网络。由网络容纳的交易可以是“用户A想向用户B发送Z个比特币/以太币”的形式,其中利用准备好的可用软件应用将交易组播至网络。计算机服务器用作比特币/以太坊服务器,所述服务器可***作以验证这些金融交易,将他们的记录添加至其账本的副本中,然后将这些账本组播添加至网络的其他服务器。本文使用一个或多个区块链或数字货币,例如比特币和以太币。本领域的普通技术人员应当理解本文所公开的技术方案可以使用或应用于其他类型的区块链和数字货币。

图1示出了根据各种实施例的用于执行各种所公开的步骤和方法的示例性系统100。如图所示,区块链网络可以包括多个区块链节点(例如,节点1、节点2、…、节点i)。区块链节点可以在服务器、计算机等中实施。每个区块链节点可以对应于通过诸如TCP/IP的各种类型的通信方法耦接在一起的一个或多个物理硬件设备或虚拟设备。取决于分类,区块链节点可以包括全节点、Geth节点、共识节点等。在一个示例中,在“工作量证明”系统下,区块链节点可以包括矿工的设备,所述设备应用它们的硬件和计算能力来验证区块链的区块并接收奖励。不执行此类验证的区块链节点包括轻节点。在另一示例中,在“权益/服务证明”系统下,具有一定级别投票权的区块链节点可以被称为共识/主节点,与非共识节点不同,其承担了交易验证的责任。共识节点可以生成新的区块链区块并为区块链做出决策,例如,为区块链设置服务费。共识节点可以与大量加密货币相关联,并基于共同商定的特定共识规则验证新的交易。在本文中,上述或另一区块链系统中的全节点、共识节点或其他等效节点可以作为区块链节点验证交易。

此外,如图1中所示的,用户A可能想要通过将用户A的账户中的一些资产转移至用户B的账户中,来与用户B交易。用户A和用户B可使用安装有用于交易的适当区块链软件(例如,加密货币钱包)的相应设备。用户A的设备可称为发起节点A,其发起与用户B的设备(称为接收节点B)的交易。节点A可通过与节点1的通信来访问区块链,节点B可通过与节点2的通信来访问区块链。例如,节点A和节点B可经过节点1和节点2向区块链提交交易,以请求将交易添加到区块链。在区块链之外,节点A和节点B可以具有其他通信信道(例如,不经过节点1和节点2的常规因特网通信)。在一些实施例中,节点A上的区块链软件可以被认为是区块链节点1的前端,并且区块链节点1运行区块链软件的后端。

图1中的每个节点可以包括处理器(例如,多核处理器)和配置有指令的非暂态计算机可读存储介质,所述指令可由处理器执行以促使节点(例如,处理器)执行本文描述的用于并行处理区块链交易的各种步骤。每个节点可以安装有软件(例如,交易程序)和/或硬件(例如,有线、无线连接)以与其他节点和/或其他设备通信。例如,诸如节点A和节点B的用户设备可以安装有诸如加密货币钱包的用户端软件,且区块链节点可以安装有区块链交易处理软件。节点硬件和软件的进一步细节稍后参考图6进行描述。

区块链节点可以各自耦接至存储器。在一些实施例中,存储器可以存储池数据库,池数据库可以被多个区块链节点以分布式方式访问。例如,池数据库可以分别存储在区块链节点的存储器中。池数据库可以存储通过诸如由用户操作的节点A和节点B的一个或多个用户设备提交的多个交易。

在一些实施例中,在接收到未确认的交易的交易请求后,可以将未确认的交易存储在池数据库中。一个或多个区块链节点可以执行共识验证以验证该未确认的交易。在验证成功时,区块链节点可以将交易打包以添加至区块链。如果验证失败,则未确认的交易被拒绝。

验证交易并添加至区块链的过程被称为“挖矿”,且那些进行此类维护的被奖励以最新创建的比特币/以太币和交易费。例如,区块链节点可以基于区块链网络已同意的共识规则集来确定交易是否有效。矿工可位于任何大陆上,并通过验证每一交易是有效的以及将该交易添加至区块链中来处理支付。通过由多个矿工提供的共识实现这种验证,并且假定不存在系统串通。最后,所有数据将是一致的,因为计算必须满足某些要求才是有效的,并且所有区块链节点将被同步以确保区块链是一致的。因此,数据可以被一致地存储在区块链节点的分布式系统中。

通过挖矿过程,交易诸如资产转移被网络节点验证并被添加至区块链的区块的增长链中。通过遍历整个区块链,验证可包括例如付款方是否有权访问转账资产、资产是否以前已经被花费、转账金额是否正确等。例如,在由诸如发起者节点的发送方签发并提交至所耦接的区块链节点的假设交易中,所耦接的区块链节点可以将提出的交易广播至区块链网络以便区块链节点挖矿。矿工需要根据区块链历史检查交易是否有资格被执行。如果根据现有的区块链历史,发送方的钱包余额具有足够的资金,则认为交易是有效的,并且可以将该交易添加至区块中。资产转移一旦被验证,其可以被包含于下一待被添加至区块链的区块中。

区块非常像数据库记录。每次写入数据时创建一个区块。这些区块被链接并使用密码术被保护以成为互连的网络。每个区块都连接至前一区块,这也是名称“区块链”的起源。每个区块通常包含前一区块的加密哈希值、生成时间和实际数据。例如,每个区块包含两个部分:记录当前区块的特征值的区块头,以及记录实际数据(例如,交易数据)的主体。区块的链通过区块头链接。每个区块头可以包含多个特征值,例如版本、前一区块哈希值、默克尔(Merkle)根、时间戳、难度目标和工作量证明随机数(或简称为随机数)。前一区块哈希值不仅包含前一区块的地址,而且包含前一区块内部的数据的哈希值,从而使得区块链不可变。随机数是当被包括时产生具有指定数量的前导零位的哈希值的数。

为了挖矿,区块链节点获得新区块的内容的哈希值。随机数(例如,随机字符串)被附加到该哈希值,从而获得新字符串。新字符串被再次进行哈希处理。然后,将最终的哈希值与难度目标(例如,级别)进行比较,并确定最终的哈希值是否实际小于难度目标。如果最终的哈希值不小于难度目标,则改变随机数,并且再次重复该过程。如果最终的哈希值小于难度目标,则将所述区块添加至链中,更新公开账本并提醒所述添加。负责成功添加的区块链节点获得比特币/以太币奖励,例如,通过向新区块添加对自身的奖励交易。附加地或可选地,交易发起方可以包括交易费来奖励成功挖掘出最新添加至区块的交易的区块链节点。

即,对于每个输出“Y”,如果k是从最小熵(min-entropy)高的分布中选择的,则不可能找到输入x以使得H(k|x)=Y,其中k是随机数,x是区块的哈希值,Y是难度目标,并且“|”表示级联(concatenation)。由于加密哈希值基本上是随机的,由于加密哈希值的输出不能从其输入预测,仅存在一种找到随机数的已知方法:一个接一个地尝试整数,例如1、然后2、然后3、等等,这可以被称为蛮力。前导零的数量越大,找到必需的随机数Y所花费的平均时间就越长。在一个示例中,比特币系统不断地调整前导零的数量,使得找到随机数的平均时间约为十分钟。这样,由于计算硬件的处理能力随着时间提高,接下来几年,比特币协议将只需要更多的前导零位,以使得实现挖矿总是花费大约十分钟的持续时间。

如上所述,哈希处理是区块链的重要基础。可以将哈希算法理解为将任何长度的消息压缩成固定长度消息摘要的函数。MD5和SHA是更常使用的。在一些实施例中,区块链的哈希值长度是256位,这意味着无论原始内容是什么,最终都计算256位的二进制数。并且只要原始内容不同,就可以保证相应的哈希值是唯一的。例如,字符串“123”的哈希值是a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0(十六进制),其当被转换为二进制时具有256位,并且仅“123”具有这个哈希值。区块链中的哈希算法是不可逆的,即,正向计算是容易的(从“123”至a8fdc205a9f19cc1c7507a60c4f01b1c7507a60c4f01b13d11d7fd0),并且即使耗尽所有计算资源,也不能完成逆向计算。因此,区块链的每个区块的哈希值是唯一的。

此外,如果区块的内容改变,则其哈希值也将改变。区块和哈希值一一对应,并且针对区块头具体计算每个区块的哈希值。即,连接区块头的特征值以形成长字符串,然后为所述字符串计算哈希值。例如,“哈希值=SHA256(区块头)”是区块哈希值计算公式,SHA256是应用于区块头的区块链哈希算法。哈希值由区块头而不是区块主体唯一地确定。如上所述,区块头包含许多内容,包括当前区块的哈希值和前一区块的哈希值。这意味着如果当前区块的内容改变,或者如果前一区块的哈希值改变,则将导致当前区块中的哈希值改变。如果黑客修改了区块,则所述区块的哈希值改变。由于下一区块必须包含前一区块的哈希值,为了使后面的区块连接至被修改的区块,黑客必须依次修改所有随后的区块。否则,被修改的区块将脱离区块链。由于设计原因,哈希值计算是耗时的,几乎不可能在短时间内修改多个区块,除非黑客已经掌握了整个网络51%以上的计算能力。因此,区块链保证了其自身的可靠性,并且一旦数据被写入,数据就不能被篡改。

一旦矿工找到了新区块的哈希值(即,合格的签名或解决方案),矿工就将该签名广播至所有其它矿工(区块链节点)。现在,其它矿工依次验证所述解决方案是否与发送方的区块的问题相对应(即,确定哈希值输入是否实际上导致所述签名)。如果所述解决方案是有效的,则其它矿工将确认该解决方案,并同意可将新区块添加至区块链。因此,达成了新区块的共识。这也被称为“工作量证明”。已经达成共识的区块现在可以被添加至区块链中,并且与其签名一起被广播至网络上的所有区块链节点。只要区块内的交易在所述时间点正确地对应于当前钱包余额(交易历史),区块链节点就将接受该区块并将保存该区块于节点的交易数据。每当在所述区块的顶部添加新的区块时,所述添加还可算作为对其之前的区块的另一“确认”。例如,如果交易被包括在区块502中,并且区块链有507个区块,这意味着交易具有五个确认(对应于区块507至区块502)。交易具有越多的确认,攻击者就越难改变。

如图所述,区块链是具有共享状态的加密安全交易单例机。“加密安全”可以指示数字货币的创建是通过复杂的数学算法来保证的,这些算法很难破解。它们使得几乎不可能欺骗系统(例如,创建虚假交易、擦除交易等)。“交易单例机”可以指示机器的单个规范实例负责在系统中创建的所有交易。换句话说,每个人都相信单个全局事实。“具有共享状态”可以指示存储在这台机器上的状态是共享的,并且对所有人开放。比特币和以太币都实现了区块链范式,但是基于区块链交易背景下讨论的不同模型。所描述的模型仅仅是示例性的,并且所公开的系统和模型可以基于其他模型来实现。

在一些实施例中,为了将某些资产转移到用户B,用户A可以通过区块链节点构建包含关于交易的信息的记录。交易的主题可以包括例如货币、代币、数字货币、合约、契约、医疗记录、客户明细、股票、债券、股权或可以以数字形式描述的任何其他资产。记录可以用用户A的签名密钥(私钥)签名,并包含用户A的验证公钥和用户B的验证公钥。与在新区块中的相同时间窗口内发生的其他记录捆绑的记录可以被广播到全节点。在接收到记录后,全节点可以将记录合并到区块链系统中发生的所有交易的账本中,通过上述挖矿过程将新区块添加到先前接受的区块链,并针对网络的共识规则验证新区快。

比特币基于UTXO(未被花费的交易输出)模型。根据UTXO,资产由尚未被花费的区块链交易的输出表示,所述输出可以用作新交易中的输入。对于每个交易,输出可以不小于输入。例如,用户A的待转移的资产可以是UTXO的形式。为了花费(交易)资产,用户A必须用私钥签名。比特币是使用UTXO模型的数字货币的示例。在有效的区块链交易的情况下,未被花费的输出可用于实现进一步的交易。在一些实施例中,在进一步的交易中可以仅使用未被花费的输出,以防止双花和欺诈。为此,区块链上的输入在交易发生时被删除,同时创建UTXO形式的输出。这些未被花费的交易输出可以(由私钥持有者,例如,具有数字货币钱包的人)用于未来交易。

以太坊基于账户/余额模型(或称为基于账户的交易模型),其持续跟踪每个账户的余额作为全局状态。在交易中,检查账户余额,以确保账户余额大于或等于花费的交易金额。提供了账户/余额模型如何在以太坊中工作的示例:

1.Alice通过挖矿获得5个以太币。在系统中记录Alice具有5个以太币。

2.Alice想给Bob 1个以太币,因此系统将首先从Alice的账户中扣除1个以太币,因此Alice现在具有4个以太币。

3.然后,系统将Bob的账户增加1个以太币。该系统知道Bob本来有2个以太币,因此Bob的余额增加到3个以太币。

以太坊区块链可以被视为基于交易的状态机。在计算机科学中,状态机指的是读取一系列输入的东西,并且基于这些输入,将转换到新状态。在账户/余额模型下,区块链(例如,以太坊区块链)开始于“起源状态”,其对应于区块链的第一个区块(起源区块)。从这一点(第0块的起源状态)开始,诸如交易、合约和挖矿等活动将不断改变区块链的“状态”。例如,当执行交易时,该起源状态转换到状态1,然后在执行更多交易时转换到状态2,等等。以太坊的状态将数百万个交易分组为“区块”。区块包含一系列交易,并且每个区块与其前一区块链接在一起,如前所述。要使从一个状态转换到下一状态,交易必须有效。一个交易要被视为有效,它会经历前面描述的称为挖矿的验证处理。对应于上面提到的“具有共享状态的交易单例机”,正确的当前状态是单个全局事实,每个区块链节点必须接受该事实。

以太坊的全局状态包括账户地址和账户状态之间的映射。账户能够通过消息传递框架相互交互。每个账户具有与之关联的状态和20字节的地址。以太坊中的地址是用于标识任何账户的160位标识符。存在两种类型的账户:外部拥有的账户,其由私钥控制且没有与之关联的代码;以及合约账户,其由合约代码控制并具有与之相关的代码。外部拥有的账户可以通过创建交易并使用其私钥对交易签名,将消息发送到其他外部拥有的账户或其他合约账户。两个外部拥有的账户之间的消息只是价值转移。但是,从外部拥有的账户到合约账户的消息会激活合约账户的代码,允许它执行各种动作(例如,转移代币、写入内部存储设备、造新的代币、执行一些计算、创建新合约等)。与外部拥有的账户不同,合约账户无法自行发起新的交易。而是,合约账户只能响应于他们接收到的其他交易(来自外部拥有的账户或来自其他合约账户)触发交易。因此,在以太坊区块链上发生的任何动作都可以通过从外部控制的账户触发的交易来启动。

账户状态可以包括四个组成部分,无论账户类型如何,它们都存在:账户随机数、余额、存储根(storageRoot)和代码哈希值(codeHash)。对于账户随机数,如果该账户是外部拥有的账户,则该数字表示从该账户的地址发送的交易数量。如果该账户是合约账户,则该随机数是该账户创建的合约数量。余额是该地址拥有的Wei的数量。每个以太币有1e+18个Wei。存储根是默克尔帕特里夏树(Merkle Patricia Tree(MPT))的状态根节点的哈希值。该树对该账户的存储内容的哈希值进行编码且默认情况下为空。代码哈希值是该账户的EVM(以太坊虚拟机)代码的哈希值。对于合约账户,代码哈希值是被哈希处理并存储为代码哈希值的代码。对于外部拥有的账户,代码哈希值字段是空字符串的哈希值。

账户地址和账户状态之间的映射存储在称为默克尔帕特里夏树(MerklePatricia Tree(MPT))的数据结构中。默克尔帕特里夏树是一种Merkle树(或者也称为“Merkle trie”),默克尔树是一种状态树,状态树是一种数据结构。默克尔树是包括节点集的二叉树,其中有:树底部包含底层数据的大量叶节点,中间节点集,每个中间节点是其两个子节点的哈希值,以及单个状态根节点,也由其两个子节点的哈希值形成,表示树的顶部。通过将待存储的数据分成块,然后将块分成桶(bucket),随后获得每个桶的哈希值并重复相同的过程直到剩余的所有哈希值变为一个根哈希值,来生成树底部的数据。该树需要其中存储的每个值都具有一个键。从树的状态根节点开始,键应指示要跟进哪个子节点以获得存储在叶节点中的相应值。在以太坊中,状态树的键/值映射是地址与其关联账户之间的映射,包括每个账户的余额、随机数、代码哈希值和存储根(其中存储根本身就是一个树)。这种相同的树结构也用于存储交易和收据。例如,每个区块具有一个“头”,它存储三个不同的默克尔树结构的状态根节点的哈希值,包括:状态树、交易树、收据树。尽管使用状态树作为示例,但是在所公开的系统和方法中可以使用各种其他树和数据结构。

参照图2。图2示出了根据各种实施例的示例性区块链中的两个区块(区块N和区块N+1)和对应的状态树。图2中示出的节点可以指代数据结构中的节点,而不是节点1、节点A等被称为区块链节点的设备。如图所示,每个区块包含前一区块的哈希值,从而创建区块链。区块N(和任何区块)中的状态根节点包含整个区块链系统中所有账户(外部账户和合约账户)的状态摘要。状态根节点可以由根哈希值表示。每个块可以存储根哈希值,并且可以通过基于根哈希值查询数据库来获得状态树,并且该区块可以不必存储整个状态树。

例如,账户A是参与交易的账户之一,账户A可以在区块N的状态根节点下的某个位置找到。在添加新区块N+1之前,区块N是区块链的最新节点。账户A的节点分支为存储账户信息的各种节点,例如,10个以太币的余额。假设当新的区块N+1被挖掘并附加到区块链时,系统中只有一个变化:向账户A添加5个以太币。该变化由新计算的哈希值(在块N+1的状态树中)示出,其通向区块N+1的新状态根节点,而其他子节点与前一区块映射。在交易之后,账户A的账户余额更新为状态根节点下的同一节点位置处的15个以太币。MPT结构现在显示了其实用性,因为它允许在变化后快速计算状态树根,而无需计算整个树。

通过在区块中提供状态根节点,作为接受该新区块并确认其中的交易的一部分,组成区块链系统的所有区块链节点必须就整个系统的状态达到相同视图。因此,系统中的每个区块链节点,作为在将已挖掘区块包括在区块链中之前验证该已挖掘区块的一部分,必须独立地运行新的交易和计算(如果这些交易中的一些是针对合约的),更新所有账户的相应状态,并得出相同的最终结果。

使用默克尔帕特里夏树的另一个好处是该结构的状态根节点在加密方面依赖于存储在树中的数据,因此状态根节点的哈希值可以用作该数据的安全标识。在以太坊中的树上执行的每个函数(放置、修改和删除)使用确定性加密哈希。由于区块头包括状态、交易和收据树的根哈希值,因此任何区块链节点可以验证以太坊状态的一小部分而无需存储整个状态,整个状态的大小可能是无限的。树的状态根节点的唯一加密哈希值可以用作树未被篡改的证据。此外,更新树是有效的。例如,如果区块链节点想要添加、修改或删除叶子,则区块链节点可以修改叶子,然后更新从该叶子到该树的根的路径上的每个节点,而不必更改同一棵树中的相关路径部分。

在交易中,区块头中的状态需要经常更新。例如,账户的余额和随机数经常变化,经常***新账户,并且经常***和删除存储的密钥。通过更新状态树来实现交易的执行。如果执行成功,则提交状态树更新,并且不再进行进一步的更改。如果执行失败,则状态树将在执行前恢复为原始状态。

图3A示出了根据各种实施例的用于并行处理区块链交易的示例性步骤300。步骤300可以由图1的系统100的一个或多个组件(例如,节点A、节点1、节点A和节点1的组合、节点2、节点i)来实现。为了说明图3A中的某些步骤,图3B示出了根据各种实施例的状态树的两个副本的示例性合并。下面的操作旨在说明。取决于实现,示例性步骤可以包括以各种顺序或并行执行的附加、更少或替代步骤。

在步骤301,可以提交多个候选交易用于挖掘。候选交易可以存储在池数据库中。

在步骤302,候选交易可以被分组为各种独立组(例如,交易组G1、G2、…、GN)。“独立”可以表明这些组彼此不干扰。在一些实施例中,均涉及至少一个共同交易账户(commontransaction account)的任何两个或更多个候选交易可以被分组在相同(交易)组下,并且不涉及任何共同交易账户的任何两个或更多个候选交易可以被分组在不同(交易)组下。例如,对于候选交易池,A向B发送内容,B向C发送内容,D向E发送内容,A和B之间以及B和C之间的交易可以一起分组在第一组下,因为B是两个交易中涉及的共同交易账户,并且D和E之间的交易可以放在第二组中,因为C和D不涉及第一个组中的两个交易中的任何一个。

在步骤303,可以创建当前区块(区块链的最新区块)的状态树的至少一部分的副本。当前区块的状态树可以被标记为T0,并且副本可以被标记为T1,T2,...,TN。副本的数量可以对应于独立组的数量。例如,可以创建状态树的根哈希值的副本,并且通过基于根哈希值的副本查询数据库,可以获得状态树的副本。

在步骤304,独立组可以对应地与副本相关联。例如,G1与T1相关联得到(G1,T2)。类似地,可以获得(G2,T2)…(GN,TN)。

在步骤305,基于关联的副本Ti执行每个独立组Gi中的交易。通过执行,针对组更新状态树的关联副本。当在每个组内执行每个交易时,状态树的相应副本被更新(对于成功交易)或恢复到原始状态(对于失败交易)。在树结构中,可以基于父节点的子节点更新父节点。在图3A和图3B中,同一副本的背景变暗以指示交易执行的完成。

在一些实施例中,更新可以应用于下级节点而不应用于上级节点(对于不同级别的节点,参见图2)。下级节点可以捕获账户变化,例如对账户的任何添加、删除和修改,以及账户内的变化,例如余额变化。可以在下一步骤更新通向状态根节点的上级节点。例如,参考图3B,G1与副本1相关联,并且G2与副本2相关联。图3B示出了副本1和副本2,其状态树副本分别基于G1和G2更新。变暗的单元格表示在交易执行中已更新的节点。在副本1和副本2中,节点K1、节点K2和状态根节点是上级节点,在合并步骤之前可能不需要更新。在副本1中,账户B已从350更新为300,账户A尚未更新。在副本2中,账户A已从10更新为15,账户B尚未更新。叶节点处的更新可以向上传播以更新上面的节点。合并副本1和2以在下一步骤306中获得合并的状态树。在合并的状态树中,组合对账户A和账户B的更新。此外,随着K1更新到K3,K2更新到K4,并且状态根节点更新到新状态根节点,对上级节点的更新可被传播。

可选地,在一些实施例中,可以更新包括副本的状态根节点的上级节点,并且可以在下一合并步骤期间再次更新上级节点。例如,副本1和副本2的状态树副本可以分别基于G1和G2一直更新到状态根节点,从而获得副本1的更新的状态根节点1,以及副本2的更新的状态根节点2。更新的状态根节点1和更新的状态根节点2(以及当有更多交易组时类似的更新的状态根节点)可以在下一步中使用,以通过查询数据库获得它们各自的叶节点,然后组合叶节点并向上传播以获得新的状态根节点。

在步骤306,在执行所有N个组以后,将状态树的更新副本合并到新状态树T0。在一个示例中,为了合并状态树的更新副本,可以将在步骤305已经更新的节点(例如,叶节点和/或中间节点)合并到状态树T0中(例如,更新旧节点值、添加新节点/账户、删除旧节点/账户)。由于原始分组确保组是独立的,因此合并不会改变在步骤305执行的更新。在合并之后,叶节点可以向上传播以获得父节点等等,直到到达新的状态根节点。例如,可以更新上级节点以生成下一区块的状态根节点来添加到区块链。还可以通过基于新状态根节点查询数据库来获得整个新状态树。由于状态树是MPT,因此状态根节点是基于节点值确定的,并且与数据更新的顺序无关。只要分组正确,就可以准确、快速地获得下一区块的状态根节点。

图4示出了根据各种实施例的用于检测重放攻击的示例性方法400的流程图。方法400可以由图1的系统100的一个或多个组件(例如,节点A、节点1、节点A和节点1的组合、节点2、节点i)来实现。方法400可以由一个或多个区块链节点实现。方法400可以由系统或设备(例如,计算机,服务器)实现。该系统或设备可以包括一个或多个处理器以及一个或多个非暂态计算机可读存储介质(例如,一个或多个存储器),其耦接到一个或多个处理器并配置有可由一个或多个处理器执行以促使所述系统和设备(例如,处理器)执行方法400的指令。以下呈现的方法400的操作旨在说明。取决于实现,示例性方法400可以包括以各种顺序或并行执行的附加、更少或替代步骤。

框441包括:获得用于添加到区块链的多个候选交易。例如,各种轻节点可以向各种全节点提交候选交易以请求对区块链进行验证和添加。

框442包括:将候选交易分组为一个或多个交易组。在一些实施例中,一个或多个交易组是独立交易组。在一些实施例中,将候选交易分组为一个或多个交易组包括:将均涉及至少一个共同交易账户的两个或更多个候选交易分组在一个或多个交易组中的同一交易组下。例如,一个或多个独立交易组中的每一个不包括受另一独立交易组中的另一候选交易影响的候选交易。例如,均涉及同一交易账户的任何两个候选交易可以被分组在同一交易组下。在一些实施例中,将候选交易分组为一个或多个交易组包括:将不涉及任何共同交易账户的两个或更多个候选交易分组在一个或多个交易组中的不同交易组下。例如,一个或多个独立交易组中的每一个不包括涉及完全不同的交易账户的两个候选交易。例如,涉及完全不同的交易账户的任何两个候选交易可以分组在不同的交易组下。

框443包括:创建区块链的最新区块的数据结构(例如,状态树)的至少一部分的一个或多个副本。在一些实施例中,数据结构可以包括状态树或另一类似的数据结构。数据结构的该部分可以包括状态树的状态根节点或者可以包括状态树的下级节点。对于状态树,可以使用状态根节点来表示状态树。可以通过基于状态根节点查询数据库来获得状态树的中间节点和叶节点。因此,数据结构或数据结构的一部分的副本可以指(1)状态根节点的副本,(2)状态根节点和数据结构的另一部分的副本,(3)完整的数据结构副本等。

在一些实施例中,区块链基于账户/余额模型;数据结构包括默克尔帕特里夏树,其包括存储在最新区块中的单个状态根节点以及未存储在最新区块中的多个中间节点和叶节点。

框444包括:分别将一个或多个交易组与数据结构(例如,状态树)的一个或多个副本相关联。例如,交易组可以分别与最新区块的状态根节点的副本相关联。可以通过查询数据库获得完整的副本状态树。

框445包括:执行每个交易组中的候选交易并更新数据结构(例如,状态树)的关联副本。例如,可以更新数据结构(例如,状态树)的关联副本以执行每个交易组中的候选交易。在一些实施例中,执行每个交易组中的候选交易并更新数据结构的关联副本包括:并行执行每个交易组中的候选交易并且更新数据结构的关联副本。

在一些实施例中,执行对应的交易组中的候选交易包括:由多核处理器执行对应的交易组中的候选交易。也就是说,可以例如通过多核处理器并行处理交易组。可以委派每个核来处理一个交易组。处理每个交易组可以包括通过更新数据结构的关联副本来处理交易组中的候选交易。因此,并行处理交易组可以显著提高整体处理速度。

在一些实施例中,更新数据结构的关联副本包括:更新数据结构的关联副本之一中的交易账户的余额、移除交易账户、和/或添加新交易账户。所述更新可以包括对本文公开的各种数据结构节点的各种其他改变。

框446包括:合并数据结构的更新副本以获得要添加到区块链的新区块的新数据结构(例如,新状态树)的至少一部分。例如,新数据结构的一部分可以包括新状态根节点。获得的新数据结构具有新状态根节点以包括在新区块中,从而添加到区块链。在一些实施例中,合并数据结构的更新副本包括:通过组合和合并在数据结构的更新副本中进行的至少一部分更新,来更新区块链的最新区块的数据结构的至少一部分。如参考图3A和图3B所讨论的那样,可以合并对各种数据结构副本的改变以生成新数据结构的至少一部分。通过从叶节点向中间节点并向上更新,可以获得新状态根节点。

可选框447包括:将新区块添加到区块链。新数据结构的一部分包括新状态根节点,并且新区块包括新状态根节点。

图5示出了根据一些实施例的用于执行区块链合约的系统510的框图。系统510(例如,计算机系统)可以是节点1、节点2、节点A、节点B或类似设备,或者任何节点和附加设备的组合(例如,节点1和节点A)的实现的示例。例如,方法400可以由系统510实现。系统510可以包括一个或多个处理器以及一个或多个非暂态计算机可读存储介质(例如,一个或多个存储器),其耦接到一个或多个处理器并配置有可由一个或多个处理器执行以促使所述系统或设备(例如,处理器)执行上述例如方法400的方法和操作的指令。系统510可以包括与指令的各种单元/模块(例如,软件指令)。

在一些实施例中,系统510可以被称为用于并行处理区块链交易的装置。该装置可以包括获得模块511,用于获得用于添加到区块链的多个候选交易;分组模块512,用于将候选交易分组为一个或多个交易组;创建模块513,用于创建区块链的最新区块的数据结构的至少一部分的一个或多个副本;关联模块514,用于将一个或多个交易组分别与数据结构的一个或多个副本相关联;执行模块515,用于执行每个交易组中的候选交易并更新数据结构的关联副本;合并模块516,用于合并数据结构的更新副本,以获得新区块的新数据结构的至少一部分,从而添加到区块链。可选地,该装置还可以包括添加模块517,用于将新区块添加到区块链,其中,新数据结构的一部分包括新状态根节点,且新区块包括新状态根节点。

这里描述的技术由一个或多个专用计算设备实现。专用计算设备可以是台式计算机系统、服务器计算机系统、便携式计算机系统、手持设备、网络设备或包含硬连线和/或程序逻辑以实现这些技术的任何其他设备或设备的组合。专用计算设备可以被实现为个人计算机、膝上型计算机、蜂窝电话、照相电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板电脑、可穿戴设备或其组合。计算设备通常由操作系统软件控制和协调。传统的操作系统控制和调度用于执行的计算机进程,执行存储器管理,提供文件系统、网络、I/O服务,以及提供用户接口功能,例如图形用户界面(“GUI”)等。这里描述的各种系统、装置、存储介质、模块和单元可以在专用计算设备或者一个或多个专用计算设备的一个或多个计算芯片中实现。在一些实施例中,这里描述的指令可以在专用计算设备上的虚拟机中实现。当被执行时,指令可以促使专用计算设备执行本文描述的各种方法。虚拟机可以包括软件、硬件或其组合。

图6是示出了可以在其上实现本文描述的任何实施例的计算机系统600的框图。系统600可以执行本文描述的任何方法(例如,方法400和)。系统600可以在本文描述的任何系统(例如,系统100或510)中实现。系统600可以在本文描述的任何节点中实现,并且被配置为执行用于并行处理区块链交易的相应步骤。计算机系统600包括用于交流信息的总线602或其他通信机制、与总线602耦接的用于处理信息的一个或多个硬件处理器604。例如,硬件处理器604可以是一个或多个通用微处理器。

计算机系统600还包括耦接至总线602的用于存储信息和要由处理器604执行的指令的主存储器606,诸如随机存取存储器(RAM)、高速缓存和/或其他动态存储设备。主存储器606还可以用于在执行可由处理器604执行的指令期间存储临时变量或其他中间信息。当这些指令存储在处理器604可访问的存储介质中时,将计算机系统600呈现到为执行指令中指定的操作而定制的专用机器中。计算机系统600还包括只读存储器(ROM)608或耦接到总线602的用于存储静态信息和处理器604的指令的其他静态存储设备。提供诸如磁盘、光盘或USB拇指驱动器(闪存驱动器)等的存储设备610并将其耦接到总线602以存储信息和指令。

计算机系统600可使用定制的硬接线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑,其与计算机系统结合而使得计算机系统600成为专用机器或将计算机系统600编程成为专用机器,来实现本文描述的技术。根据一个实施例,本文描述的操作、方法和过程由计算机系统600响应于处理器604执行主存储器606中包含的一个或多个指令的一个或多个序列来执行。这些指令可以从诸如存储设备610的另一存储介质读取到主存储器606中。执行主存储器606中包含的指令序列会使得处理器604执行本文描述的处理步骤。在替代实施例中,可以使用硬连线电路代替软件指令或与软件指令组合。

主存储器606、ROM 608和/或存储设备610可包括非暂时性存储介质。这里使用的术语“非暂时性介质”和类似术语是指存储促使机器以特定方式操作的数据和/或指令的介质,所述介质不包括暂时性信号。这种非暂时性介质可以包括非易失性介质和/或易失性介质。例如,非易失性介质包括光盘或磁盘,诸如存储设备610。易失性介质包括动态存储器,诸如主存储器606。常规形式的非暂时性介质包括,例如,软磁盘、软盘、硬盘、固态驱动器、磁带或任何其他磁数据存储介质、CD-ROM、任何其他光学数据存储介质、具有孔图案的任何物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其他存储器芯片或盒式磁带以及它们的网络版本。

计算机系统600还包括耦接到总线602的网络接口618。网络接口618为连接到一个或多个本地网络的一个或多个网络链接提供双向数据通信耦合。例如,网络接口618可以是综合业务数字网络(ISDN)卡、电缆调制解调器、卫星调制解调器、或者向相应类型的电话线提供数据通信连接的调制解调器。作为另一示例,网络接口618可以是局域网(LAN)卡以提供数据通信连接至兼容的LAN(或与WAN通信的WAN组件)。还可以实现无线链路。在任何这种实施中,网络接口618发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光信号。

计算机系统600可通过网络、网络链接和网络接口618来发送消息和接收包括程序代码的数据。在因特网示例中,服务器可通过因特网、ISP、本地网络和网络接口618来传送应用程序的请求代码。

接收到的代码可在接收时由处理器604执行,和/或存储在存储设备610或其他非易失性存储器中,用于以后执行。

前面部分中描述的每个处理、方法和算法可以体现在由包括计算机硬件的一个或多个计算机系统或者计算机处理器执行的代码模块中并且被其完全或部分自动化地实现。处理和算法可以部分或全部地在专用电路中实现。

上述各种特征和处理可彼此独立地使用,或者可以各种方式组合。所有可能的组合和子组合都旨在落入本文的范围内。另外,在一些实施方式中可以省略某些方法或处理框。本文描述的方法和处理也不限于任何特定顺序,与其相关的框或状态可以以适当的其他顺序执行。例如,所描述的框或状态可以以不同于具体公开的顺序执行,或者多个框或状态可以在单个框或状态中组合。框或状态的示例可以串行、并行或以某种其他方式执行。可以将框或状态添加到所公开的实施例中或从所公开的实施例中移除。这里描述的系统和组件的示例可以与所描述的不同地被配置。例如,与所公开的实施例相比,可以添加、移除或重新布置元件。

本文描述的方法的各种操作可以至少部分地由被临时配置(例如,通过软件)或被永久配置为执行相关操作的一个或多个处理器执行。无论是临时配置还是永久配置,这样的处理器可以构成处理器实现的引擎,所述处理器实现的引擎用于执行本文描述的一个或多个操作或功能。

类似地,这里描述的方法可以至少部分地由处理器实现,其中特定处理器是硬件的示例。例如,所述方法的至少一些操作可以由一个或多个处理器或处理器实现的引擎执行。此外,一个或多个处理器还可操作以支持“云计算”环境中的相关操作的性能,或作为“软件即服务”(SaaS)操作。例如,至少一些操作可以由一组计算机(作为包括处理器的机器的示例)执行,这些操作可以经由网络(例如,因特网)经由一个或多个适当的接口(例如,应用程序接口(API))被访问。

某些操作的性能可以在处理器之间分配,不仅驻留在单个机器中,而且跨多个机器被部署。在一些实施例中,处理器或处理器实现的引擎可以位于单个地理位置(例如,在家庭环境、办公室环境或服务器群内)。在其他实施例中,处理器或处理器实现的引擎可以分布在多个地理位置。

在本文中,多个实例可以实现作为单个实例所描述的组件、操作或结构。尽管一个或多个方法的各个操作被示出并描述为独立的操作,但是可以同时执行一个或多个独立的操作,并且不需要以所示的顺序执行所述操作。在配置中作为独立组件呈现的结构和功能可以实现为组合结构或组件。类似地,作为单个组件呈现的结构和功能可以实现为独立的组件。这些和其他变化、修改、添加和改进都落入本文中的主题的范围内。此外,这里使用的相关术语(诸如“第一”、“第二”、“第三”等)不表示任何顺序、高度或重要性,而是用于将一个元件与另一元件区分开。此外,术语“一”、“一个”和“多个”在本文中并不表示对数量的限制,而是表示存在至少一个所述的物品。

尽管已经参考具体实施例描述了主题的概述,但是在不脱离本文的实施例的较宽范围的情况下,可以对这些实施例进行各种修改和改变。具体实施方式不应被视为具有限制意义,并且各种实施例的范围仅由所附权利要求以及这些权利要求所赋予的等同物的全部范围限定。

24页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:事件处理系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!