首页 / 在分区区块链网络中维护区块链的区块

在分区区块链网络中维护区块链的区块实质审查 发明

技术领域

[0002] 本公开通常涉及处理区块链交易的计算机实现系统和方法,更具体地,涉及对区块链进行分区(partition)以及对分区区块链的交易和区块进行验证的方法和系统。

相关背景技术

[0003] 本文件中,术语“区块链”指几种基于计算机的电子分布式账本中的任意一种。这类账本包括基于共识的区块链和交易链技术、经许可和未经许可的账本、共享账本及其变体。应注意,本公开不限于与特定区块链一同使用,替代的区块链实现方式和协议属于本公开的保护范围。
[0004] 区块链为同级间电子账本,由基于计算机的非集中分布式系统创建和维护。账本由区块组成,而区块依次由交易(transaction)和其他信息组成。区块链系统或区块链网络包括多个区块链节点和一组操作。区块链节点可用于执行一组操作中的某些或所有操作。各区块链节点可作为计算机硬件、计算机软件或两者的组合实现,由节点运营者(operator)运行,其中节点运营者可以独立于其他节点运营者并与之无关。区块链节点可各自维护区块链账本的副本或区块链账本的某一部分。该组操作可包括创建交易、传播交易、读取区块链账本、评估区块链账本、为区块链账本的拟定添加产生(挖掘)新区块、与其他区块链节点通信以及提供钱包功能以便用户创建交易并管理区块链资产。
[0005] 区块链账本为非集中式账本,其中无确定何时修改账本的单个区块链节点或实体。相反,区块链节点各自通过区块链协议规则的知识进行编程,以核实区块链账本并确认其他区块链节点采取的措施与那些规则一致。术语“区块链”可以是指区块链账本包括一系列链接区块这一事实,每个链接区块表示计算机内存中可由计算机进程读取并可作为数据传输方式传输的数据结构。区块包括一个或多个交易,也表示计算机内存中可由计算机进程读取并可作为数据传输方式传输的数据结构。区块用链链接,因为被正式添加至区块链的每个新区块包含对前一区块的不可变参考,前一区块包含对其之前一个区块的不可变参考,以此类推。
[0006] 为了使特定交易包含在已写入区块链的区块中,一个或多个节点验证该特定交易并可能将该交易传播给其他节点,节点产生交易的区块,其中该节点包含该特定的交易,而其他节点确认该区块的有效性和该节点中交易的有效性。由于一些节点在编程或配置时会考虑到这些规则,这些节点不可能将交易包含在可能使该节点无效的节点内,因此,区块不会被其他节点接受并且这些节点将不会获得任何好处。
[0007] 区块链网络中的交易包含各种数据元素,包括值单位和其他数据元素。值单位可以为加密货币,但也可能是利用其他数字资产的其他变体。在非集中、分布式总账系统中,总账可以是公共总账,以便任何人可以查看总账并访问存储在总账区块中的交易。
[0008] 区块链网络可能受到交易网络传播延迟造成的性能限制相关交易验证,因为每个交易需要在能传播给其他节点之前进行验证。而且,随着区块链规模的增长,验证交易和区块的节点的存储要求增多。

具体实施方式

[0049] 首先参考图1A,其说明根据本公开实施例的与区块链相关联的示例区块链网络100。在实施例中,区块链网络100包含区块链节点,其可能被实施为各自运行软件和/或硬件实例的点对点分布式电子装置,该软件及/或硬件实例执行遵循区块链协议的操作,该区块链协议在区块链节点运营者之间整体或部分地达成协议。在一些示例中,这些分布式电子装置简称为“节点”,例如图1A中的节点102。
[0050] 节点102可通过计算资源服务提供商分布式系统中的多个计算装置或通过图9的计算装置2600等任何合适的电子客户端装置,包含任何合适的计算装置(例如,数据中心中的服务器,诸如桌台式计算机、膝上型计算机、平板计算机、智能电话等客户端计算装置)。节点102可具有输入以接收数据消息或代表交易及/或区块的对象以及与其他节点相关的信息。节点102可查询其维护的信息,诸如其对交易状态的理解。
[0051] 如图1A所示,一些节点102通信耦合至节点102的一个或多个其他节点。至于哪些节点102可与哪些其他节点通信,这些细节不需要集中地判定。区块链网络100中的活跃节点能够与一或多个其他节点102通信,使得从一个节点102传递至另一节点102的消息可在整个区块链网络100(或该区块链网络的某重要部分)中传播,这就足够了,其中假设该消息为区块链协议指示应被转发的消息。一个此类消息可为发布由节点102A的一个节点提议的交易,该消息将接着沿着诸如路径106的路径传播。另一此类消息可为发布提议包括在区块链上的新区块。
[0052] 节点102可存储分布式区块链账本(或区块链),其含有与交易对应的数据以及与交易区块对应的数据。节点102可存储区块链账本的完整副本或其一部分。例如,一些节点可存储整个区块链账本的数据,而其他节点可存储仅未花费交易的数据,同时其他节点可维护整个区块链账本。节点102可包括验证其接收到的每个区块以及该区块中交易的功能。一些节点102收集交易并创建交易区块,使得新区块可被添加至区块链账本。一些节点可能需要执行某项工作,该工作既复杂(以避免恶意节点轻易创建不当区块)又取决于所包括交易的数据(使得恶意节点无法提前执行复杂操作),其中其他节点可以轻松验证这些任务的执行。在创建新区块时,多个节点有可能竞争来执行必要的工作。替代地,新区块的节点可以确定性的方式选择,具体取决于也被定义为权益的新区块的价值。这被称为“权益证明”锻造。一些节点将新区块传播至其他节点进行验证。其他节点验证新区块和嵌入新区块中的交易。若通过节点执行的验证操作成功,则节点将新区块添加至区块链并将新区块传播至其他节点。这将新区块提交至区块链账本。
[0053] 在一些示例中,区块为常常用前一区块的时间戳和“指纹”(例如,散列)标记的交易分组。通过这种方式,每个区块变为链接至前一区块,从而产生链接区块链账本中区块的“链”。每个区块包括指区块交易组的数据(例如,交易标识符)。在实施例中,有效区块通过区块链网络中节点的共识添加至区块链账本。同样,在一些示例中,区块链账本包含经验证区块的有序列表。图1B说明具有三个区块1221、1223、1223的链的区块链账本1216。应注意,区块1222包括指区块1222的交易组的数据(例如,区块头(block header)1230和交易标识符1231(1)、1231(2)、1231(3)……)。
[0054] 本公开旨在通过使用分区来改善区块链账本的可扩展性。本领域的分区考虑两个特定维度:水平和垂直。在水平分区中,数据被划分为称作分片的不同区段,这些分片实际上是特定数据库方案的多个实例,其中数据分布在这些实例中的每个实例上(不考虑实例冗余)。在垂直分区中,给定数据库方案分布在多个节点上,从而使得特定对象的属性使用规范化来分布。
[0055] 本公开将水平分区方案用于被称作“分片”的相关联节点组之间区块链账本的数据结构。每个分片都指派有唯一标识符。存在一个涵盖所有分片的被称作“所有分片”的组。区块链网络的每个节点可属于一个或多个分片(包括“所有分片”组)。属于分片的节点可称为该分片的成员。在图2的示例中,节点A1和A2为分片A的成员(属于分片A),节点B1和B2为分片B的成员(属于分片B),节点C为分片A和B的成员(属于分片A和B),节点D为“所有分片”组的成员(属于“所有分片”组)。也可以使用其他分片。此外,每个节点用于存储与其所属一个或多个分片对应的区块链账本的数据结构。在图2的示例中,区块链账本的数据结构包括分片的相关数据结构,该数据结构包括分片的未花费交易输出集、分片的交易队列(内存池)、分片的交易数据(标记为交易数据)和分片的区块数据。分片的未花费交易输出集表示可作为新交易输入而花费的未花费交易输出(UTXO)。
[0056] 在本文所述的实施例中,通过给定节点维护的区块数据包括给定节点所属的一个或多个分片的区块数据。该区块数据包括表示区块链账本区块的数据,并且可包括每个区块的以下数据:i)包括局部默克尔树连同区块其他数据的区块头,及/或ii)作为区块一部分的交易的交易标识符列表;该列表包括仅对作为区块一部分且与给定节点所属一个或多个分片相关联的交易的交易标识符;该列表不包括对作为区块的一部分且不与给定节点所属一个或多个分片相关联的交易的交易标识符。存储在区块头中的局部默克尔树包括从作为区块的一部分且与给定节点所不属于的一个或多个分片相关联的交易导出的散列值,但省略从作为区块的一部分且与给定节点所属一个或多个分片相关联的交易导出的散列值。局部默克尔树可用于在不需要对交易进行存取的情况下允许节点计算用于区块验证的区块默克尔根散列值,该交易为区块的一部分且与节点所属一个或多个分片不关联。这样,通过不同分片的节点存储为区块数据一部分的给定区块的i)的局部默克尔树和ii)的列表可基于节点成员资格和分片之间交易的分布在节点之间发生变化。有利地,鉴于分片化区块链网络的狭窄性以及用于建立每个节点可储存也可不储存的信息的本文所述协议,使用区块的与区块头相关联的局部默克尔树和其他数据(如本实施例所述)是可能的,以便仍准确地保存并使用待验证和传播的区块的必要详细信息,而不需要每个节点存储并验证与给定交易相关的所有未花费交易输出。如本文将进一步解释的,用于处理区块信息的局部默克尔树的创建和使用通过以下内容来促进:分片化网络的这种结构,通过分片化网络内用于同一分片内通信和数据流的节点应用的协议,外加用于与节点相关联的分片外部的一个或多个节点通信和数据流的其他协议。
[0057] 在图2的示例中,节点A1和A2存储分片A的未花费交易输出集的副本、分片A的交易队列(内存池)的副本、分片A的交易数据的副本和分片A的区块数据的副本。节点A1和A2不存储以下内容:其他分片(分片A除外)的未花费交易输出集的副本、其他分片(分片A除外)的交易队列(内存池)的副和其他分片(分片A除外)的交易数据的副本。此外,分片A的区块数据包括表示区块链账本区块的数据,并且可包括每个区块的以下数据:i)包括局部默克尔树连同区块其他数据的区块头,和ii)作为区块一部分的交易的交易标识符列表;该列表包括仅对作为区块的一部分且与分片A相关联的交易的交易标识符;该列表不包括对作为区块的一部分且与分片A不关联的交易的交易标识符。存储在区块头中的局部默克尔树包括从作为区块的一部分且与分片A不关联的交易导出的散列值,但省略从作为区块的一部分且与分片A相关联的交易导出的散列值。
[0058] 节点B1和B2存储分片B的未花费交易输出集的副本、分片B的交易队列(内存池)的副本、分片B的交易数据的复本和分片B的区块数据的副本。节点B1和B2不存储以下内容:其他分片(分片B除外)的未花费交易输出集的副本、其他分片(分片B除外)的交易队列(内存池)的副本和其他分片(分片B除外)的交易数据的副本。此外,分片B的区块数据包括表示区块链账本区块的数据,并且可包括每个区块的以下数据:i)包括局部默克尔树连同区块其他数据的区块头,和ii)作为区块一部分的交易的交易标识符列表;该列表包括仅对作为区块的一部分且与分片B相关联的交易的交易标识符;该列表不包括对作为区块的一部分且与分片B不关联的交易的交易标识符。存储在区块头中的局部默克尔树包括从作为区块的一部分且与分片B不关联的交易导出的散列值,但省略从作为区块的一部分且与分片B相关联的交易导出的散列值。
[0059] 节点C存储分片A的未花费交易输出集的副本、分片B的未花费交易输出集的副本、分片A的交易队列(内存池)的副本、分片B的交易队列(内存池)的副本、分片A的交易数据的副本、分片B的交易数据的副本以及分片A和B的区块数据的副本。节点C不存储以下内容:其他分片(分片A和B除外)的未花费交易输出集的副本、其他分片(分片A和B除外)的交易队列(内存池)的副和其他分片(分片A和B除外)的交易数据的副本。此外,分片A和B的区块数据包括表示区块链账本区块的数据,并且可包括每个区块的以下数据:i)包括局部默克尔树连同区块其他数据的区块头,和ii)作为区块一部分的交易的交易标识符列表;该列表包括仅对作为区块的一部分且与分片A或B相关联的交易的交易标识符;该列表不包括对作为区块的一部分且与分片A或B不关联的交易的交易标识符。存储在区块头中的局部默克尔树包括从作为区块的一部分且与分片A或B不关联的交易导出的散列值,但省略从作为区块的一部分且与分片A或B相关联的交易导出的散列值。
[0060] 节点D存储所有分片的未花费交易输出集的副本、所有分片的交易队列(内存池)的副本、所有分片的交易数据的复本和所有分片的区块数据的副本。
[0061] 应注意,通过节点维护的区块数据可省略作为节点所不属于的分片的一部分的交易数据,因此节省节点存储空间。因此,一些节点(例如,节点A1、A2、B1、B2、C)仅对区块链账本交易的有限子集存储区块链账本的数据结构,而其他节点(例如,节点D)则对区块链账本的所有交易存储数据结构。在这种情况下,对区块链账本的有限子集存储数据结构的节点(例如,节点A1、A2、B1、B2、C)的数据存储容量可远小于对整个区块链账本存储数据结构的节点(例如,节点D)的数据存储容量。应注意,在其他区块链账本中,可对不同分片存储和维护其他数据结构。
[0062] 图2的水平分区方案允许节点运营者选取或选择成为区块链网络的一个或多个分片的成员。这允许数据存储容量有限的小型当事人(如爱好者)选择成为单个分片的成员,而数据存储容量较大的大型当事人(如金融机构)可选取或选择成为所有分片的成员。
[0063] 此外,每个节点用于执行仅验证与节点所属一个或多个分片相关联的那些交易的区块验证操作。在此类操作中,与节点所不属于的另一分片相关联的任何交易的验证被绕过且不影响节点是否认为区块有效。这种情况下,选择成为单个分片成员的运营者通过验证区块链账本中交易的有限集合而具有较轻权重的安全参与度,而选择成为所有分片成员的运营者通过验证区块链账本中的所有交易而具有较高的安全参与度。
[0064] 应注意,节点可用于与单个分片内的多个其他节点通信,以防止女巫攻击。这些攻击可有效忽略发送自节点的交易,从而防止其通过网络进一步传播。给定分片中的一个或多个节点也可被指派来交换与其他分片中节点相关的信息,且此类指派可随时间在给定分片中的节点之间轮换。每个节点可将其接收到的每笔交易广播至其耦合的其他节点,且若该给定节点并非该分片的成员,则其在向前传播交易之前执行基本交易层检查,而非进行完整的交易验证。
[0065] 在不同或特定时间/实例中,关于其他节点的详细信息也可在特定分片中的节点之间共享。这是使用addr协议消息的修改版本,根据本公开的第二实施例来执行的。当前的addr消息的实现用于列出或标识一个或多个IP地址和端口。例如,getaddr请求可用于获取含有一群已知活跃对等者的addr消息(例如,用于引导)。addr消息通常只含有一个地址,但有时含有许多地址,并在一些示例中含有多达1000个地址。在一些示例中,所有节点周期性地(即每24小时)广播一次含有其自身IP地址的addr。然后,节点可将这些消息传递至其对等者,并可在消息对于节点而言为新消息的情况下存储所传递的地址。这样,在网络中的节点可合理清楚地知道,在连接至网络之时或之后,哪些IP被连接至网络。在大多数情况下,IP地址因为初始addr广播而被添加至每个人的地址数据库中。
[0066] 除上述内容外,根据本公开的经修改addr协议的实现可能能够传输关于特定节点所属分片的额外信息。例如,在经修改addr协议中,当诸如图1b的共享网络中的节点加入网络中的特定分片时,作为addr消息的一部分而广播的内容也可包括标识节点为其成员的一个或多个分片的字段。因此,此信息也响应于来自图1b的网络中对等者的getaddr请求而被返回。如第一实施例所讨论的,此信息可基于数据结构,该数据结构与每个节点及/或节点与之相关联的每个分片相关联。
[0067] 图3A和图3B共同为流程图,说明作为分片化区块链账本(例如,图2的分片化区块链账本)一部分的区块链交易的产生和验证。
[0068] 在框301中,客户端节点生成区块链交易,其中区块链交易与区块链网络的一个或多个分片相关联(或指派或分配给该一个或多个分片)。与有效区块链交易相关联的分片可以是与区块链交易自身相关联的分片,也可以是与有效区块链交易的一个或多个交易输入或交易输出相关联的分片。例如,在一个实施例中,与有效区块链交易相关联的分片可基于区块链交易的交易标识符,该交易标识符通过将SHA256函数应用于区块链交易的交易数据来创建。更具体而言,与有效区块链交易相关联的分片可通过将区块链网络上当前活跃分片的数量的模量应用于交易标识符来判定,即,分片标识符=TX ID mod n,其中n为当前活跃分片的数量。在另一实施例中,与有效区块链交易相关联的分片可基于区块链交易的第一或其他输入以及输入引用的较早交易的输出。在这种情况下,其输出被后续交易的第一输入引用的交易被称为“父”交易,后续交易则被称为“子”交易。应注意,使用第一输入来定义父交易对于该方法而言并非必需;如果存在多个输入,可选择任何输入来执行该方法。例如,若子交易的特定数量的输入引用与父交易相同的分片中的交易输出,则较早交易可定义为子交易的父交易。输入的数量可定义子交易的大部分输入。英国专利申请1806907.0和英国专利申请1806909.6阐述了这些机制的详细信息,这两项申请共同转让给了本申请的受让人并以全文引用的方式并入本文。在另外的其他实施例中,其他机制可用于将区块链交易与区块链网络的一个或多个分片相关联起来。
[0069] 在框303中,客户端节点广播区块链交易以便与属于与区块链交易相关联的一个或多个分片的节点(并且可能与属于与区块链交易不关联的分片的其他节点)通信。
[0070] 在框305中,属于与区块链交易相关联的一个或多个分片的节点接收区块链交易。
[0071] 在框307中,属于与区块链交易相关联的一个或多个分片的节点验证接收到的区块链交易或其部分,并且每个此类节点在接收到的区块链交易或其部分被视为有效时,将区块链交易传播至其所属分片中的其他节点。
[0072] 在一个实施例(称为“交易分片验证”)中,框307的交易验证通过分片来执行,交易与该分片相关联或分配至该分片。如上所述,交易可使用应用于交易的交易标识符的模函数的结果来与分片相关联(或指派给该分片)。因为交易可具有来自不同分片的输入,所以节点可与其他分片的节点通信来进行未花费交易输出检查。具体而言,属于一个或多个分片的节点可对属于其他分片的节点提出请求来获取其他分片的未花费交易输出集。若节点都不具有所请求的未花费交易输出集,则给出空响应,且认为所涉交易无效。在认为交易输入有效的情况下,交易被添加至分片的交易队列(内存池),交易与该分片相关联或分配至该分片(框309),且交易被传播至该分片中的其他节点(框311)。
[0073] 在另一实施例(称为“基于未花费交易输出分片的验证”)中,框307的交易验证基于与未花费交易输出集相关的输入验证交易,该集合在与执行验证的节点相同的分片中。与不同分片中的未花费交易输出集相关的输入并不予以验证。每个输入的验证可涉及检查确认被引用输出的未花费交易输出尚未花费,验证(例如,脚本验证)输入是否经授权收集被引用输出的值以及若干其他检查。在输入无效的情况下(诸如当与输入相关的未花费交易输出不存在,交易输出的值大于对应输入的未花费交易输出,或存在脚本错误时),交易将被丢弃且不会传播至同一分片中的其他节点。若认为输入有效,交易被添加至执行验证的节点的分片的交易队列(内存池)(框309),且交易被传播至该分片中的其他节点(框
311)。
[0074] 英国专利申请1806911.2和英国专利申请1806914.6阐述了“交易分片验证”实施例和“基于未花费交易输出分片的验证”实施例的详细内容,这两项申请共同转让给了本申请的受让人并以全文引用的方式并入本文。
[0075] 在实施例中,框307的交易验证也可涉及与交易整体相关的检查,诸如检查交易的语法和数据结构是否正确,检查交易是否小于所允许的区块大小且大于或等于100个字节,以及检查锁定时间是否小于最大允许值。
[0076] 在框309中,属于与有效区块链交易相关联的分片的节点将该有效区块链交易添加至与有效区块链交易相关联的分片的交易队列(内存池)。
[0077] 在框311中,一个或多个节点根据所有分片的交易队列(内存池)(例如,“所有分片”的内存池)形成区块并将该新区块传播至其他节点。
[0078] 在框313中,节点接收新区块,并根据共识协议处理新区块以进行区块验证和提交区块。
[0079] 图4A和图4B共同为流程图,描述在验证对并非为所有分片成员的节点的新区块时,图3A和图3B的框313的操作。在这种情况下,节点属于活跃分片的有限子集,因此不属于一或多个活跃分片。应注意,为所有分片成员的任何节点均可使用熟知的区块验证过程验证新区块。
[0080] 在框401中,节点接收新区块。在实施例中,区块包括区块头,并列出表示区块的TX标识符的有序序列的数据。在如图2所示的分布式区块链系统中,区块头可包括以下数据字段:
[0081] [1]区块版本号,其指示要遵循哪一组区块验证规则;
[0082] [2]前一区块标头散列,其为前一区块标头的内部字节顺序的SHA256(SHA256())散列。此举确保如不改变该区块的标头(header),
[0083] 就不能改变前一区块;
[0084] [3]从包括在区块中的所有交易散列导出的默克尔根散列,从而确保在不修改标头的情况下均不能修改此类交易;
[0085] [4]区块时间,其为一些节点开始使标头散列(根据这些节点)的Unix出现时间;
[0086] [5]nBits,其为该标头散列必须小于或等于的目标阈值的编码版本;以及[0087] [6]随机数,其为一些节点进行更改以修改标头散列,从而产生小于或等于目标阈值的散列的任意数目。
[0088] 图6A示出了具有字段的示例区块。
[0089] 在框403中,节点提取存储于框401中接收到的区块中的表示交易标识符(“TX标识符”或“IX Id”)的有序序列列表。图6A示意性地示出了区块交易标识符的示例列表。
[0090] 在框405中,节点生成表示框403中提取的区块交易标识符的有序序列的完整默克尔树数据。完整默克尔树为具有叶节点有序序列的树,叶节点与区块交易标识符的有序序列对应。各叶节点包括对应交易标识符参考的交易数据散列,且每个非叶节点包括其子节点散列值的密码散列。在从叶(底部)至根部向上延伸的多个层级上以逻辑方式组织完整默克尔树的非叶节点,且众所周知的是,根部存储完整默克尔树的根散列值。图6A示意性地示出了区块的示例完整默克尔树。
[0091] 在框407中,节点提取存储于框401中接收的区块标头中的默克尔根散列值,且节点对提取的默克尔根散列值与框405中生成的完整默克尔树的根散列值进行比较。
[0092] 在框409中,节点对框407的比较值进行评估,以确定提取的默克尔根散列值与框405中生成的完整默克尔树的根散列值是否匹配。若否,则操作继续至区块439及441。若是,则操作继续至框411。
[0093] 在框411中,节点评估区块有效性的其他标头条件。
[0094] 在框413中,节点检查确认框411的评估,以确定是否满足区块有效性的其他标头条件。若否,则操作继续至框439及441。若是,则操作继续至框415。
[0095] 在框415中,节点配置通过框403中提取的区块交易标识符的有序序列的循环,且在循环中对每个给定交易标识符执行框417至425的操作。
[0096] 在框417中,节点识别与给定交易标识符参考的交易对应的分片。与交易对应的分片可为与交易自身相关联的分片或与一个或多个交易输入或交易输出相关联的分片。针对图3A及图3B中的框301,上文描述了可用于指定交易与一或多个分片之间的相关联(或对应)的机构的示例。
[0097] 在框419中,节点检查确认其是否属于框417中识别的分片。若否,则操作继续至框421。若是,则操作继续至框422。
[0098] 在框421中,节点从如在框403中提取的区块交易标识符的有序序列移除给定交易标识符,且操作继续至框425。
[0099] 在框423中,节点检查给定交易标识符参考的交易是否有效。若确定给定交易标识符参考的交易有效,则操作继续至框425。若否,则操作继续至框439及441。在实施例中,节点可检查确认给定交易标识符参考的交易存储于节点所属的分片的交易队列(内存池)中。若是,则交易可视为有效的,且操作继续至框425。若否,则节点可与网络的另一节点通信,以请求并获得交易副本。收到后,节点便可执行用于验证接收到的交易操作。根据图3A及图
3B的框307,对验证操作的示例进行描述。如交易被视为有效,则操作继续至框425。在交易视为无效的情况下,操作继续至框439及441。
[0100] 在框425中,节点检查所有交易标识符是否已在通过在框415中配置的交易标识符的有序序列的循环中进行了处理。若否,则操作返回至框415,以继续列表中下一交易标识符的循环。若是,则操作继续至框427。
[0101] 请注意,框419至425的操作检查与节点属于的分片相关的交易的有效性,且因此略过检查与节点不属于的分片相关的交易验证。
[0102] 在框427中,节点可生成且存储将区块标记为有效的数据。
[0103] 在框429中,节点存储包括区块交易标识符的结果列表的数据。交易标识符的结果列表可省略与节点不属于的分片相关联的交易标识符,且因此避免存储区块交易标识符的有序序列的完整列表。
[0104] 在框431中,节点导出表示区块局部默克尔树的数据。下文参考图5来详细描述该操作。
[0105] 在框433中,节点更新区块的标头数据,以包括框431中导出的区块的局部默克尔树。
[0106] 在框435中,节点存储表示区块的数据(包括框433中采用区块的局部默克尔树更新的标头,及包括框429中存储的区块的结果列表数据),数据作为节点所属一个或多个分片的区块数据的一部分。此类操作可存储表示区块至永久存储器,例如磁盘或其他形式等永久数据存储器。图6D示意性地示出了表示区块的示例标头数据和交易列表数据。
[0107] 请注意,框431的局部默克尔树可省略从与节点不属于的分片相关联的交易导出的分支,且包括沿分支的占位符(针对散列值),所属占位符从与节点所属的分片相关联的交易导出。因此,在许多情况下,局部默克尔树的节点及层级相对于完整默克尔树的常规形式是不平衡的。重要的是,减小完整默克尔树以产生局部默克尔树的操作,可用于减少节点所属的一个或多个分片的区块数据标头中的局部默克尔树的存储要求。由于默克尔树分支为分支或分支下面的叶的级联及散列的结果,因此可基于树中的完整路径来减少完整默克尔树。如分支导致形成充分完整叶,则可移除分支,从而仅留下其散列。可移除从默克尔根部至叶的散列,从而可通过替换占位符再次产生局部默克尔树的根散列。通过执行该程序,可通过减小局部默克尔树中存储的散列数目,从而降低存储要求。
[0108] 在框437中,节点可将如在框401中接收的新区块传播至其他节点。
[0109] 在框439中,节点可生成且存储将区块标记为无效的数据。
[0110] 在框441中,节点可舍弃表示无效区块的数据,且避免将无效区块传播至其他节点。节点也可舍弃如分配至分片的属于无效区块的一或多个交易的交易数据,且在适当时将交易的未花费交易输出返回至分片的未花费交易输出集。
[0111] 图5为说明通过节点执行以导出表示区块的局部默克尔树数据的示例性操作流程图。
[0112] 在框501中,节点读取区块头及区块交易标识符的有序列表。
[0113] 在框503中,节点使用如在框501中读取的区块交易标识符的列表生成表示区块的完整默克尔树的数据。
[0114] 在框505中,节点配置通过区块交易标识符的有序列表的交易标识符的循环,交易标识符与完整默克尔树的底级中的散列值对应(从左到右)。循环对列表中的每个给定交易标识符执行框507至框513的操作。
[0115] 在框507中,节点检查给定交易标识符参考的交易是否与节点所属分片对应。上文关于图3A和3B的框301描述了可用于指定交易与一个或多个碎片之间的相关联或对应的机制的示例。若给定交易标识符参考的交易与节点所属分片不对应,则操作继续至框509及框513。若给定交易标识符参考的交易的确与节点所属分片对应,则操作继续至框511。
[0116] 在框511中,节点用占位符替换列表的给定交易标识符(散列值),且操作继续至框513。占位符为相对于列表交易标识符的编码大小具有较小编码大小的数据值或字符。占位符还被配置为可轻易地从列表的交易标识符的允许值中识别出来。在实施例中,占位符可为空值或特定字符。理想情况下,占位符应提供相对于256位散列的最大空间减小。或者,占位符可以提供相对于256位散列的一些其他最小到最大空间减小。
[0117] 在框513中,节点检查任何交易标识符是否保持在框505中配置的通过交易标识符的循环中进行处理。若是,则操作返回至框505,以继续列表中下一交易标识符的循环。若否,则操作继续至框515。
[0118] 请注意,框507至513的操作用于从完整默克尔树的底部(叶)级中的交易标识符的占位符替代与节点所属分片对应的交易。
[0119] 在框515中,节点将默克尔树当前级指针设置为由框503中生成的数据表示的完整默克尔树的底部(或叶节点级)。
[0120] 在框517中,节点检查默克尔树当前级指针是否指向完整默克尔树的根级。若否,则操作继续至框533。若是,则操作继续至框519。
[0121] 在框519中,节点配置在(由默克尔树当前级指针参考的)完整默克尔树的当前级通过邻接节点对的循环。该循环在完整默克尔树的当前级对每个给定邻接节点对执行框521至529的操作。
[0122] 在框521中,节点检查确认给定邻接节点对的两个节点是否各自含有散列值(如与占位符区分)。请注意,在完整默克尔树的底级的邻接节点对的节点指由如上文所述的框505至框513的操作产生的交易及占位符的有序列表中的对应元素,其中通过由使交易及占位符的列表中的位置与完整默克尔树的底级中叶节点位置(从左到右)匹配来决定对应关系。若未满足该条件,则在框523中单独留下给定邻接节点对的两个节点,在框525中采用占位符替换给定邻接节点对的父树节点的散列值,且操作继续至框529。若满足该条件,则节点移除给定邻接节点对的两个节点,且在框527中单独留下邻接节点对的父树节点的散列值,且操作继续至框529。
[0123] 在框529中,节点检查在完整默克尔树的当前级的任何更多邻接节点是否保持在框519中配置的邻接节点对的循环中进行处理。若是,则操作返回至框519,以继续在完整默克尔树的当前级的邻接节点对的循环。若否,则操作继续至框531。
[0124] 在框531中,节点调整默克尔树当前级指针,以指向完整默克尔树的下一级,且操作继续,以对完整默克尔树的下一级重复框517至529的操作。
[0125] 在框533中,节点用占位符替换或替代完整默克尔树的根节点散列值,且操作结束。
[0126] 图6A示出了示例性区块的完整默克尔树。
[0127] 图6B示出了对图6A的示例性区块的完整默克尔树进行图5的流程图的框519至框529的操作的结果。在这些操作中,占位符替换了完整默克尔树的底级中六个交易的散列值(交易标识符),其中这些交易与节点所属分片对应。
[0128] 图6C示出了对图6A的完整默克尔树进行图5的流程图的框519至框529的操作的结果。在这些操作中,已经移除完整默克尔树的底级中的两个邻接散列值(位于完整默克尔树的左侧),因为此类散列值是从不与节点所属分片对应的交易导出的。此外,在邻接节点均不具有对应散列值且因此从与节点所属分片对应的至少一个交易导出的三种情况下,占位符已经替换了完整默克尔树第二级中的邻接叶节点的父节点(位于完整默克尔树的左侧)。
[0129] 图6D示出了局部默克尔树,其为图6A的完整默克尔树的图5中的流程图的操作结果。
[0130] 图7A至图7C共同为流程图,说明通过并非所有分片成员的节点执行的操作,以验证作为分片化区块链账本(例如图2中的分片化区块链账本)一部分存储的区块。在这种情况下,节点属于活跃分片的有限子集,因此不属于一或多个活跃分片。应注意,为所有分片成员的任何节点均可使用熟知的区块验证过程验证新区块。
[0131] 在框701中,节点从节点所属分片的区块数据读取区块。区块数据包括区块头,其包括表示区块局部默克尔树的数据。区块头可同样包括其他字段。区块数据也包括交易的交易标识符的有序列表,交易标识符为交易的一部分且与节点所属分片对应。图8A示意性地示出了示例区块数据。
[0132] 在框703中,节点提取如存储于框701中读取的区块数据中的区块交易标识符的序列列表。交易标识符列表可省略作为区块一部分且与节点不属于的一个或多个分片对应的交易,且因此避免存储区块的交易标识符的有序序列的完整列表。
[0133] 在框705中,节点提取表示如存储于框701中读取的区块数据中的区块局部默克尔树的数据。
[0134] 在框707中,节点设定局部默克尔树当前级指针为如通过框705中提取的数据表示的局部默克尔树的底级。
[0135] 在框709中,节点配置通过在局部完整默克尔树的当前级(为框707中设定的局部默克尔树当前级指针参考的底级)的树节点的循环。该循环在局部默克尔树的底级对每个给定树节点执行框711至717的操作。
[0136] 在框711中,节点检查确认给定树节点是否为占位符。若否,则节点在框713中跳过树节点,且继续至框717。若是,则节点继续至节点用在框703中提取列表的对应交易标识符(散列值)替换占位符的框715,且操作继续至框717。请注意,可通过局部默克尔树的底级中占位符的排序与在框703中提取列表中的交易标识符的排序之间的对应关系,确定占位符与在框703中提取列表中的交易标识符(散列值))之间的对应关系。
[0137] 在框717中,节点检查在局部默克尔树的当前级(由局部默克尔树当前级指针参考)的任何更多树节点是否在框709中配置的通过树节点的循环中保持为待处理。若是,则操作返回至框709,以继续下一树节点的循环。若否,则操作继续至框719。
[0138] 在框719中,节点设定局部默克尔树当前级指针至如通过在框705中提取的数据表示的局部默克尔树的下一级(高于底部叶节点级的层级)。
[0139] 在框721中,节点检查确认局部默克尔树当前级指针是否指向局部默克尔树中的根级。若是,则操作继续至框735。若否,则操作继续至框723。
[0140] 在框723中,节点配置通过在局部完整默克尔树当前级的树节点的循环(由在框719或733中设定的局部默克尔树当前级指针参考)。该循环对在局部默克尔树的当前级的给定树节点执行框725至框731的操作。
[0141] 在框725中,节点检查确认给定树节点是否为占位符。若否,则在框727中,节点跳过树节点,且继续至框731。若是,则节点继续至节点基于给定树节点的两个子节点的散列值计算散列值且用计算所得散列值替换占位符的框729,且操作继续至框729。
[0142] 在框729中,节点检查在局部默克尔树的当前级(由局部默克尔树当前级指针参考)的任何更多树节点是否在框723中配置的通过树节点的循环中保持为待处理。若是,则操作返回至框723,以继续下一树节点的循环。若否,则操作继续至框733。
[0143] 在框733中,节点调整局部默克尔树当前级指针以指向局部默克尔树的下一级,且操作返回至框721以处理局部默克尔树中的下一级。
[0144] 在框735中,节点基于如从框709至731的操作确定的根节点的两个子节点计算散列值,且用计算所得散列值替换根节点的占位符。
[0145] 在框737中,节点提取作为在框701中读取的区块数据一部分存储于区块标头中的默克尔根散列值,且节点对提取的默克尔根散列值与在框735中计算的局部默克尔树的根散列值进行比较。
[0146] 在框739中,节点对框737的比较值进行评估,以确定提取的默克尔根散列值与框735中计算的局部默克尔树的根散列值是否匹配。若是,则操作继续至框741。若否,则操作继续至框755及757。
[0147] 在框741中,节点评估区块有效性的其他标头条件。
[0148] 在框743中,节点检查确认框741的评估,以确定是否满足区块有效性的所有其他标头条件。若是,则操作继续至框745。若否,则操作继续至框755及757。
[0149] 在框745中,节点配置通过在框703中提取的交易标识符的列表的循环。交易标识符列表可能省略与节点不属于的分片相关联的交易,且因此避免存储区块交易标识符的有序序列的完整列表。该循环对此列表中的给定交易标识符执行框747至749的操作。
[0150] 在框747中,节点检查给定交易标识符参考的交易是否有效。若确定给定交易标识符参考的交易确定有效,则操作继续至框749。若否,则操作继续至框755及757。在实施例中,节点可检查确认给定交易标识符参考的交易存储于节点所属的分片的交易队列(内存池)中。在交易被视为有效的情况下,操作继续至框749。若否,则节点可与网络的另一节点通信,以请求并获得交易副本。收到后,节点便可执行用于验证接收到的交易操作。参见图3A及图3B的框307,在上文中描述该验证操作示例。如交易被视为是有效的,则操作继续至框749。如交易被视为无效的,则操作继续至框755及757。
[0151] 在框749中,节点检查任何交易标识符是否在框745中配置的通过交易标识符的循环中保持为待处理。若是,则操作返回至框745,以继续列表中下一交易标识符的循环。若否,则操作继续至框751及753。
[0152] 在框751中,节点生成且存储将区块标记为有效的数据。
[0153] 在框753中,节点可传播表示有效区块的数据至属于与节点相同的分片集的其他节点。
[0154] 在框755中,节点生成且存储将区块标记为无效的数据。
[0155] 在框757中,节点可舍弃表示无效区块的区块数据,且避免将表示无效区块的区块数据传播至其他节点。节点也可舍弃如分配至分片的作为无效区块一部分的一个或多个交易的交易数据,且在适当时将该交易的未花费交易输出传回至分片的未花费交易输出集。
[0156] 图8A示出了示例性区块的局部默克尔树。
[0157] 图8B示出了对图8A的局部默克尔树进行图7A至图7D的流程图的框709至框717的操作的结果。在这些操作中,采用了在框703中提取的作为交易标识符列表一部分的对应散列值(交易标识符)替换局部默克尔树的较低(叶)级中的五个占位符。
[0158] 图8C示出了对图8A的局部默克尔树进行图7A至图7D的流程图的框723至框731的操作的结果。在这些操作中,采用了子节点散列值导出的散列值替换局部默克尔树第二级中的三个占位符。
[0159] 图8D示出了对图8A的局部默克尔树进行图7A至图7D的流程图的框723至框737的操作结果。在这些操作中,局部默克尔树根部的散列值从子节点散列值导出,且与存储于区块的区块头中的默克尔根散列值进行比较以供验证。
[0160] 图9为可用于实践本公开的至少一个实施例的计算装置2600的示例性简化方框图。在各种实施例中,计算装置2600用于可实现上文说明和描述的任何系统。例如,计算装置2600可配置为用作数据服务器、网络服务器、便携式计算装置、个人计算机或任何电子计算装置。如图9所示,计算装置2600可包括可通过总线子系统2604与若干外围子系统通信且以在操作上耦合至该若干外围子系统的一个或多个处理器2602。作为如本文所述的验证开销交易的一部分,处理器2602可用于处理解锁和锁定脚本。外围子系统可包括存储子系统2606,包含内存子系统2608及文件/磁盘存储子系统2610、一个或多个用户接口输入装置
2612、一个或多个用户接口输出装置2614,以及网络接口子系统2616。存储子系统2606可用于临时或长期性存储信息,例如与本公开描述的与交易及区块相关的详细内容。
[0161] 总线子系统2604可提供用于使计算装置2600的所有组件及子系统能够按预期相互通信的机制。尽管总线子系统2604示意性地显示为单个总线,但总线子系统的替代实施例可采用多个总线。网络接口子系统2616可向其他计算装置和网络提供接口。网络接口子系统2616可用作从计算装置2600的其他系统收发数据的接口。举例而言,网络接口子系统2616可使数据技术员能够将装置连接至无线网络,使得数据技术员能够在处于远程位置(例如,用户数据中心)时传输及接收数据。总线子系统2604可用于将详细信息、搜寻项目等数据传送至本公开的监督模型,且可用于通过网络接口子系统2616将监督模型的输出传送至一个或多个处理器2602及商家及/或债权人。
[0162] 用户接口输入装置2612可包括一个或多个用户输入设备,例如键盘;指示装置,如集成鼠标、跟踪球、触摸板或图形输入板;扫描仪;条形码扫描仪;与显示器整合的触摸屏;音频输入装置,如语音识别系统和麦克风;和其他各类输入装置。一般而言,术语“输入装置”意在包括将信息输入至计算装置2600的所有可能类型的装置和机构。一个或多个用户接口输出装置2614可包括显示器子系统、打印机或音频输出装置等非可视化显示器。显示器子系统可以是阴极射线管(CRT)、液晶显示器(LCD)、发光二极管(LED)显示器、投影或其他显示装置等平板装置。一般而言,术语“输出设备”意在包括从计算装置2600输出信息的所有可能类型的装置和机构。例如,一个或多个用户接口输出装置2614可用于呈现用户接口,以便于用户与执行所述进程和其中的变化的应用程序交互(当这种交互可能适当时)。
[0163] 存储子系统2606可提供用于存储可提供本公开的至少一个实施例的功能性基本程序设计及数据建构的计算机可读存储介质。当由一个或多个处理器执行应用程序时,这些应用程序(如程序、代码模块和指令)可提供本公开的一个或多个实施例的功能性,并能存储在存储子系统2606中。这些应用模块或指令可通过一个或多个处理器2602执行。存储子系统2606还可以提供用于存储根据本公开使用的数据的存储库。存储子系统2606可包括内存子系统2608及文件/磁盘存储子系统2610。
[0164] 内存子系统2608可包括若干内存,包括用于在程序执行期间存储指令及数据的主随机存取存储器(RAM)2618及可存储固定指令的只读存储器(ROM)2620。文件/磁盘存储子系统2610可提供用于程序及数据文件的非暂时性永久(非易失性)存储器,且可包括硬盘机、连同相关可移动介质的软盘驱动器、光盘只读存储器(CD‑ROM)驱动器、光驱、可移动介质盒及其他类似存储介质。
[0165] 计算装置2600可包括至少一个本地时钟2624。本地时钟2624可为表示已从特定开始日期发生的滴答声数目的计数器,且可整体位于计算装置2600内。本地时钟2624可用于以特定频率脉冲对计算装置2600的处理器与其中包括的所有子系统中的数据传送进行同步,且可用于协调计算装置2600与数据中心中其他系统之间的同步操作。在一个实施例中,本地时钟2624为原子钟。在另一实施例中,本地时钟为一可编程间隔定时器。
[0166] 计算装置2600可包括便携式计算机装置、平板计算机、工作站或下文所描述的任何其他装置等各类装置。另外,计算装置2600可包括通过一个或多个端口(如,USB、耳机接口、闪电接口等)可与计算装置2600相连的另一装置。可与计算装置2600相连的装置可包括用于接插光纤连接器的多个端口。因此,所述装置可用于将光信号转换成电信号,然后可通过连接该装置与计算装置2600的端口传输电信号,以进行处理。归因于计算机及网络不断改变的本质,出于说明装置的较佳实施例之目的,图9所示的计算装置2600的描述仅意图作为特定示例。具有比图9所示的系统更多或更少组件的多个其他组态是可能的。
[0167] 应该指出的是,上述实施例是用于说明而非限制本公开,在没有背离所附权利要求定义的本公开的范围时,本领域技术人员能够设计多种替代实施例。在权利要求中,括号中的任何附图标记不得解释为限制权利要求。“包括”等类似词语不排除未在任何权利要求或整体说明书中列出的其它元件或步骤的存在。本说明书中,“包括(comprise、comprising)”指“包括或由……组成包括(include、including)或由组成(consist of、consisting of)”。对元件的单数引用不排除对这种元件的复数引用,反之亦然。本公开可借助于包括若干元件的硬件实现,也可以借助于适当编程的计算机来实现。在列举了若干构件的装置权利要求中,可以由同一硬件项目来体现这些装置中的若干构件。在相互不同的附属权利要求中叙述某些措施的纯粹事实,并未说明这些措施的组合不能用于获利。
[0168] 应当理解的是,上述描述为说明性的,而非限制性的。在阅读且理解上述描述之后,许多其他实施方式将对本领域技术人员来说是显而易见的。尽管本公开已参考特定示例实施方式予以描述,但应认识到,本公开不限于所描述的实施方式但可在随附权要求范围内进行修改和变更。据此,应将本说明书及附图视为示范性质但不具限制意义。因此,本发明的范围应参考随附的权利要求以及所述权利要求有资格要求的等价物的全部范围而确定。

当前第1页 第1页 第2页 第3页
相关技术
分区区块相关技术
区块区块相关技术
迪安·克莱默发明人的其他相关专利技术