首页 / 专利库 / 银行与财务事项 / 数字货币 / 加密货币 / 比特币 / 用于并行验证区块链交易的系统和方法

用于并行验证链交易的系统和方法

阅读:442发布:2020-05-21

专利汇可以提供用于并行验证链交易的系统和方法专利检索,专利查询,专利分析的服务。并且一种计算机实现的方法,用于验证 节点 的网络中节点处的区 块 ,所述节点实现符合 区块链 协议的区块链。区块链协议可以是 比特币 协议或其它。所述方法包括:串行地确定在多个交易的每个交易中,每个被引用为输入的未花费的交易输出是唯一的,并且基于所述确定,将所述多个交易中的每个交易分配到两个及两个以上并行处理器中的一个,以及由两个及两个以上并行处理器并行地验证所述多个交易中的交易是否符合交易级验证标准。所述节点还确定所述区块满足区块级验证标准。如果所述交易符合所述交易级验证标准,并且所述区块符合所述区块级验证标准,则所述区块被视为有效,并且所述节点将所述区块转发到网络中的一个或多个对等节点。,下面是用于并行验证链交易的系统和方法专利的具体信息内容。

1.一种用于在实现符合链协议的区块链的节点的网络中的验证区块的计算机实现的方法,所述区块包含多个交易,所述方法包括:
确定所述区块符合区块级验证标准;
串行地确定在所述多个交易的每个交易中,每个被引用为输入的未花费的交易输出是唯一的,并且基于所述确定:
将所述多个交易中的每个交易分配到两个及两个以上并行处理器中的一个,以及由所述两个及两个以上并行处理器并行地验证所述多个交易中的交易符合交易级验证标准;

如果所述交易符合所述交易级验证标准,并且所述区块符合所述区块级验证标准,则将所述区块转发到所述网络中的一个或多个对等节点。
2.根据权利要求1所述的方法,其中,所述交易级验证标准包括由所述区块链协议规定的交易特征,并且其中,每个交易必须具有被视为有效的所述交易特征。
3.根据权利要求1或2所述的方法,其中,所述区块级验证标准包括由所述区块链协议规定的区块特征,并且其中,每个区块必须具有被视为有效的所述区块特征。
4.根据权利要求1至3中的任一项所述的方法,其中,将所述多个交易中的每个交易分配到所述两个及两个以上并行处理器中的一个,包括使用随机分配方案或确定性分配方案来分配所述交易。
5.根据权利要求4所述的方法,其中,分配所述交易包括使用先来先服务算法在所述两个及两个以上并行处理器之间分配所述交易。
6.根据前述权利要求中任一项所述的方法,其中,将所述多个交易中的每个交易分配到所述两个及两个以上并行处理器中的一个包括确定与每个交易相关联的处理成本,并且分配所述交易以在所述两个及两个以上并行处理器之间对所述处理成本进行负载平衡。
7.根据权利要求6所述的方法,其中,所述每个交易的处理成本基于该交易中脚本操作的数量,并且可选地,其中,所述每个交易的处理成本还基于脚本操作的加权和,其中,每个脚本操作都具有基于所述脚本操作的计算复杂度的相关联的权重。
8.根据前述权利要求中任一项所述的方法,其中,所述串行地确定在所述多个交易的每个交易中,每个被引用为输入的未花费的交易输出是唯一的,包括确定每个未花费的交易输出仅作为所述多个交易中的输入出现一次。
9.一种实现区块链的节点的网络内的计算设备,所述计算设备用于验证符合区块链协议的区块,所述区块包含多个交易,所述计算设备包括:
网络接口,用于提供到实现区块链的节点的网络的网络连接,并接收区块,所述区块符合区块链协议并包含多个交易;
区块级验证模块,用于确定所述区块符合区块级验证标准;
输入唯一性确认模块,用于串行地确定在所述多个交易的每个交易中,每个被引用为输入的未花费的交易输出是唯一的;
两个及两个以上并行处理器,用于并行地验证所述多个交易中的交易符合交易级验证标准;和
交易分配单元,用于在所述两个及两个以上个并行处理器之间分配所述多个交易中的交易以进行验证,
其中,如果所述交易符合所述交易级验证标准,并且所述区块符合所述区块级验证标准,则所述网络接口将所述区块转发到网络中的一个或多个对等节点。
10.根据权利要求9所述的计算设备,其中,所述交易级验证标准包括由所述区块链协议规定的交易特征,并且其中,每个交易必须具有被视为有效的所述交易特征。
11.根据权利要求9或10所述的计算设备,其中,所述区块级验证标准包括由所述区块链协议规定的区块特征,并且其中,每个区块必须具有被视为有效的所述区块特征。
12.根据权利要求9至11中任一项所述的计算设备,其中,所述交易分配单元使用随机分配方案或确定性分配方案来在所述两个及两个以上并行处理器中分配所述交易。
13.根据权利要求12所述的计算设备,其中,分配所述交易包括使用先来先服务算法来分配所述交易。
14.根据权利要求9至13中任一项所述的计算设备,其中,所述交易分配单元通过确定与每个交易相关联的处理成本,并且通过分配所述交易以在所述两个及两个以上并行处理器之间对所述处理成本进行负载平衡来分配交易。
15.根据权利要求14所述的计算设备,其中,所述每个交易的处理成本基于该交易中脚本操作的数量,并且可选地,其中,所述每个交易的处理成本还基于脚本操作的加权和,其中,每个脚本操作都具有基于所述脚本操作的计算复杂度的相关联的权重。
16.根据权利要求9至15中任一项所述的计算设备,其中,所述输入唯一性确认模块通过确定每个未花费的交易输出仅作为所述多个交易中的输入出现一次,以串行地确定在所述多个交易中被引用为输入的所述每个未花费的交易输出是唯一的。
17.一种在实现区块链的节点的网络内存储处理器可执行指令的非暂时性处理器可读介质,其中,所述指令用于验证符合区块链协议的区块,所述区块包含多个交易,并且其中,所述指令使两个及两个以上处理器执行根据权利要求1至8中任一项所述的方法。

说明书全文

用于并行验证链交易的系统和方法

技术领域

[0001] 本发明主要涉及区块链交易,具体涉及能够在区块链网络中快速验证和传播区块的方法和设备。

背景技术

[0002] 在本文中,使用术语“区块链(blockchain)”来包括所有形式的电子的、基于计算机的分布式分类账(distributed ledgers),包括但不限于区块链和交易链技术、许可及未许可的分类账、共享分类账及其变型。虽然也已经提出并开发了其他区块链实施方案,但是区块链技术最广为人知的应用是比特币分类账(Bitcoin ledger)。虽然出于方便和说明的目的,本文中涉及的是比特币(Bitcoin),但应当指出的是,本发明不限于与比特币区块链一起使用,其他的区块链实现和协议也落入本发明的范围内。
[0003] 区块链是基于共识的电子分类账,该分类账实现为由区块组成的基于计算机的去中心化的分布式系统,而区块由交易组成。每个交易(TX)是对区块链系统中参与者之间的数字资产的控制的转移进行编码的数据结构,包括至少一个输入和至少一个输出。每个区块包含前一区块的散列,如此,这些区块被链接在一起,以创建一个永久的、不可更改的所有交易的记录,这些交易自区块链诞生之始写入区块链。交易包含小程序,这些小程序称为脚本,嵌入至所述交易的输入和输出中,这些小程序指定了如何以及由谁来访问交易的输出。在比特币平台上,这些脚本是使用基于堆栈的脚本语言编写的。
[0004] 接收新交易的网络节点将迅速尝试将该交易推送到网络中的其他节点。在将新交易传输到其他节点之前,它会被“验证(validated)”,这意味着将根据一组标准对新交易进行检查,以确保该交易符合根据适用协议进行适当交易的基本要求。
[0005] 为了将交易写入区块链,节点(“矿工(miner)”)将该交易合并到一个区块中,该节点旨在收集交易并将所述交易形成区块。然后,矿工试图完成与该区块相关的“工作量证明(proof of work,简称“PoW”)”。整个区块链网络中的矿工竞相成为第一个收集交易区块并完成该区块相关工作量证明的人。成功的矿工将其已确认的区块添加到区块链中,并且该区块通过网络传播,以便维护区块链副本的其他节点可以更新其记录。接收区块的节点还“验证”该区块及其中的所有交易,以确保其符合协议的正式要求。例如,接收新区块的节点可以检查以确认区块数据结构遵守适用的句法规则,该区块具有符合年限要求的时间戳,该区块在规定的大小限制内,以及其他此类标准。所述节点还确认该区块中的每个交易都是有效的。在比特币核心客户端的检查区块(CheckBlock)和检查区块头(CheckBlockHeader)功能中定义了适用于比特币协议的示例标准。
[0006] 验证交易的标准可能很长。例如,比特币协议中适用的条款可以在比特币参考客户端的接受存储池(AcceptToMemoryPool)、检查交易(CheckTransaction)和检查输入(CheckInputs)功能中详细查看。
[0007] 与区块链实施相关的潜在瓶颈之一是节点完成区块验证(包括验证区块中的所有交易)所花费的时间。延迟可能会妨碍并阻碍使用区块链进行快速、大量的处理。此外,当工作量证明(PoW)网络中的矿工在完成自己的工作量证明之前收到区块已经完成的通知时,该矿工放弃努并开始尝试构建下一区块。因此,缓慢的验证意味着矿工继续努力,而这种继续努力是不必要的。挖掘(mining)是一种处理器和能源密集型活动,因此浪费的挖掘工作在资源方面是昂贵的。
[0008] 因此,存在与验证区块链交易相关的技术问题,这些问题包括验证区块过程中涉及的速度、效率和资源要求。区块的验证和随后的传播需要网络中节点的能量、时间和努力,并且对过程的改进不仅在网络性能和速度方面,而且在与所需资源量的关系方面都将是非常有益的。期望提供能够在比特币网络中更快传播区块的改进的方法和设备。现在已经设计出这种改进的解决方案。

发明内容

[0009] 因此,根据本发明,提供了如所附权利要求中限定的方法和设备。
[0010] 本申请提供了一种改进的设备和方法。该方法可以是用于验证区块的方法。这些区块可以是区块链交易的区块。本发明可以更快地决定区块是有效还是无效。更快的验证可减少资源的浪费,因为区块会更快地通过系统传播。此外,对于这些最终会陷入冲突,并输给更早的区块的竞争区块,在验证和传播上将浪费更少的时间和资源。本发明可以实现一些交易级验证操作的并行化。区块中所有交易独有的未花费的交易输出(unspent transaction outputs,简称“UXTOs”)的确认可能无法并行化,以避免并行处理器之间代价高昂的同步。
[0011] 另外或可选地,本申请可以描述一种计算机实现的方法。该方法可以描述为一种验证方法。该方法可包括用于验证实现区块链的节点的网络中的区块的方法。区块链可以符合区块链协议,或者与区块链协议相关联地操作。区块可包括多个(区块链)交易。该方法可包括:确定所述区块符合区块级验证标准;并且串行地确定在所述多个交易的每个交易中,每个被引用为输入的未花费的交易输出(UTXO)是唯一的,并且基于所述确定,将所述多个交易中的每个交易分配到两个及两个以上并行处理器种的一个,以及由所述两个及两个以上并行处理器并行地验证所述多个交易中的交易符合交易级验证标准。
[0012] 所述方法还可包括,如果所述交易符合交易级验证标准,并且所述区块符合区块级验证标准,则将所述区块转发到网络中的一个或多个对等节点。
[0013] 在一些实施中,交易级验证标准包括由区块链协议规定的交易特征,并且每个交易必须具有被视为有效的交易特征。相似地,在一些实施中,区块级验证标准是由区块链协议规定的区块特征,并且每个区块必须具有被视为有效的区块特征。
[0014] 在一些实施中,将多个交易中的每个交易分配到两个及两个以上并行处理器中的一个,包括使用随机分配方案或确定性分配方案来分配交易。在一个示例中,方案包括使用先来先服务(first-come first-serve)算法在两个及两个以上并行处理器之间分配交易。在一些示例实施中,分配包括确定与每个交易相关联的处理成本,并且分配交易以在两个及两个以上并行处理器之间进行处理成本的负载平衡。每个交易的处理成本可基于该交易中脚本操作的数量。每个交易的处理成本还可基于脚本操作的加权和,其中,每个脚本操作都具有基于脚本操作计算复杂度的相关联的权重。
[0015] 在一些实施中,所述方法可包括,通过确定每个未花费的交易输出仅作为多个交易中的输入出现一次,串行地确定在多个交易的每个交易中,每个被引用为输入的未花费的交易输出是唯一的。
[0016] 另外或可选地,本申请描述了一种实现区块链的节点的网络内的计算设备,该计算设备用于验证符合区块链协议的区块,该区块包含多个交易。计算设备可包括:网络接口,用于向实现区块链的节点的网络提供网络连接,并接收区块,该区块符合区块链协议并包含多个交易;区块级验证模块,用于确定区块符合区块级验证标准;输入唯一性确认模块,用于串行地确定在多个交易的每个交易中,每个被引用为输入的未花费的交易输出是唯一的;两个及两个以上并行处理器,用于并行验证多个交易中的交易是否符合交易级验证标准;和交易分配单元,用于在两个及两个以上并行处理器之间分配多个交易中的交易以进行验证。如果交易符合交易级验证标准,并且区块符合区块级验证标准,则网络接口将区块转发到网络中的一个或多个对等节点。
[0017] 两外或可选地,本申请可描述一种存储有处理器可执行指令的非暂时性处理器可读介质,该处理器可执行指令在被执行时,使一个或多个处理器执行本文所述的过程和/或操作中的一个或多个。附图说明
[0018] 关于本发明的一个方面或实施例描述的任何特征还可以适用于一个或多个其他方面或实施例。参考本文所述的实施例,本发明的这些和其他方面将变得清晰并得以阐明。现在将仅通过示例并参考附图来描述本发明的实施例,其中:
[0019] 图1示出了节点的示例区块链网络;
[0020] 图2示意性地示出了节点中的示例区块验证过程;
[0021] 图3以流程图的形式示出了区块验证方法的一个示例;和
[0022] 图4示出了用于验证区块链网络中区块的节点的框图

具体实施方式

[0023] 在本申请中,术语“和/或”旨在涵盖所列元素的所有可能的组合和子组合,包括任何一个单独列出的元素、任何子组合或所有元素,并且不一定排除附加元素。
[0024] 在本申请中,短语“……或……中的至少一个”旨在覆盖任何一个或多个所列元素,包括任何一个单独列出的元素、任何子组合、或所有元素,不一定排除任何其他元素,并且不一定要求具有所有元素。
[0025] 首先参考图1,图1以框图形式示出了与区块链相关联的示例区块链网络100。区块链网络是一个点对点(peer-to-peer)的开放式会员网络,任何人都可以加入,无需邀请,无需经其他会员同意。运行区块链协议(区块链网络100在区块链协议下运行)实例的分布式电子设备可以参与区块链网络100。这种分布式电子设备可以称为节点102。例如,区块链协议可以是比特币协议或其他加密货币
[0026] 运行区块链协议并形成区块链网络100的节点102的电子设备可以是各种类型的,包括例如计算机(如台式计算机、笔记本电脑平板电脑)、服务器、移动设备(如智能手机)、可穿戴计算机(如智能手表)、或其他电子设备。
[0027] 区块链网络100的节点102使用合适的通信技术彼此连接,该通信技术可以包括有线和无线通信技术。在许多情况下,区块链网络100至少部分地在互联网上实现,并且一些单个节点102可以位于地理上分散的位置
[0028] 节点102维护区块链上所有交易的全局分类账。全局分类账是分布式分类账,每个节点102可以存储全局分类账的完整副本或部分副本。节点102影响全局分类账的交易由其他节点102验证,从而保持全局分类账的有效性。本领域的普通技术人员将会理解实现和操作(例如使用比特币协议)区块链网络的细节。
[0029] 每个交易通常具有一个或多个输入和一个或多个输出。嵌入到输入和输出中的脚本指定了如何以及谁可以访问交易的输出。交易的输出可以是作为交易结果的值被转移到的地址。然后,该值与该输出地址相关联,作为未花费的交易输出。随后的交易可以将该地址作为输入,以花费或分散该值。
[0030] 如上所述,挖掘节点(“矿工”)竞相在区块链创建下一个区块。为了收集区块,矿工将区块构建为来自未确认交易池(“存储池(mempool)”)的一组交易。然后,矿工试图完成与其所收集的区块相关的工作量证明。如果矿工在收到任何其他矿工已成功生成区块并完成其工作量证明的通知之前已经完成工作量证明,则该矿工通过将区块发送到网络上的对等节点来传播其区块。这些节点验证区块,然后将区块在网络中进一步发送到其他节点。如果矿工在完成自己的工作量证明之前收到另一个区块已完成的通知,则该矿工放弃努力并开始尝试构建下一区块。
[0031] 因此,区块的快速传播有助于避免浪费矿工和验证节点的努力。通过提供一种能够更快验证并因此传播区块的解决方案,本发明提供了增强的网络性能。该解决方案减少了所需的计算时间和工作量,从而减少了网络所需的能量。该解决方案提供了在资源和时间方面更高效的网络,最终提供了一个改进的(区块链)网络。
[0032] 在区块链的当前实施中,例如比特币网络,每个接收区块的节点首先验证该区块,然后将区块发送到其他节点。验证区块所需的时间减慢了区块在网络中的传播。注意,包括现有协议的演进的区块链的一些实施,可以仅由节点的子集而不是网络中的每个节点提供区块验证。然而,大多数节点上的区块验证仍然可能是任何区块链实施的特征,以防止无效区块通过网络传播。
[0033] 验证区块涉及确认区块是否符合适用区块链协议设定的规定标准。在比特币核心客户端的检查区块(CheckBlock)和检查区块头(CheckBlockHeader)功能中定义了适用于比特币协议的示例标准。除了确认区块本身符合规定的标准外,还可以评估区块内的每个交易是否符合交易级标准。例如,比特币协议中应用的交易级标准可以在接受存储池(AcceptToMemoryPool)、检查交易(CheckTransaction)和检查输入(CheckInputs)功能中详细查看。
[0034] 基于比特币协议的区块级标准的具体示例包括:·区块数据结构在语法上是有效的。
·区块头散列小于目标难度(加强工作量证明)。
·区块时间戳为未来不到两个小时内(允许时间误差)。
·区块大小在可接受的范围内。
·第一个交易(也只有第一个)是币库(coinbase)生成交易。
·区块内的所有交易均有效。
[0035] 基于比特币协议的交易级标准的具体示例包括:·交易的句法和数据结构必须正确。
·输入和输出列表都不是空的。
·每个输出值x以及所有输出的总和必须在0·没有一个输入具有空值散列。
·nLockTime小于或等于INT_MAX。
·以字节为单位的交易大小大于或等于最小值,且小于最大值。
·签名操作的数量小于签名操作的限制。
·解脚本scriptSig只能将数字压入堆栈,而锁定脚本scriptPubkey必须与isStandard形式匹配。
·对于每个输入,如果引用的输出存在于池中的任何其他交易中,则必须拒绝该交易。
·对于每个输入,如果引用的输出交易是一个币库输出,则必须具有至少COINBASE_MATURITY(100)确认。
·对于每个输入,引用的输出必须存在并且不能已被花费。
·使用参考的输出交易获取输入值,检查每个输入值以及总和是否在值x的允许范围
6
内,即0·池中或主分支中的区块中必须存在匹配的交易。
·输入值的总和必须等于或大于输出值的总和。
·交易费用必须足以进入空白区块。
·每个输入的解锁脚本必须根据相应的输出锁定脚本进行验证。
[0036] 这些示例标准是说明性的,并且不应解释为对于所有实施例都是充分或必要的,因为规定的标准可能在不同的协议中有所不同,并且如果对协议进行了更改,则对于给定的协议可能会随时间而变化。通常,交易级验证标准是在适用的区块链协议下交易必须具有从而被视为有效的规定特征。同样,区块级验证标准是在适用的区块链协议下区块必须具有从而被视为有效的规定特征。
[0037] 根据本申请,描述了加速区块验证以便于区块在网络中更快传播的方法和设备。
[0038] 一方面,本申请描述了一种节点,该节点被构造为通过并行执行各个交易的交易级验证来验证区块。但是,某些交易级标准不能并行评估。特别地,未花费的交易输出(UTXOs,unspent transaction outputs)的唯一性应按串行进行评估。因此,该节点被构造或设置成在将交易在两个或更多并行处理器的集合中分配以用于验证其余交易级标准之前,确认交易的引用输入(UTXOs)的唯一性。
[0039] 当结合本文中对并行处理器的描述使用术语“处理器(processor)”时,不一定意味着物理上不同的微处理器,并且可以包括使能并行处理资源的任何硬件软件实施方式,这些并行处理资源能够独立且并行地执行处理器功能。并行处理器可包括一个具有多个内核的处理器。在一些示例中,并行处理器可包括多个独立的处理单元。并行处理器可以共享也可以不共享物理存储器。无论如何实施,每个并行处理器都具有用于发信号的软件或硬件机制,例如响应于识别无效交易而输出信号。并行处理器的实施还包括以软件和/或硬件提供必要的数据传输机制,以将分配的交易数据路由到相应的处理器用于本地处理。
[0040] 现在参考图2,图2示意性地示出了区块链网络节点中的区块验证过程200的简化示例。过程200包括区块级验证阶段202,在该阶段,按照区块级标准测试输入的新区块。与区块内的交易相反,示例区块级标准如上所述,通常涉及适用于区块本身的规定格式要求和特征或限制。示例包括区块大小、区块头结构或内容以及类似的标准。
[0041] 过程200还包括UTXO唯一性确认模块204,该模块评估新区块中交易的每个输入,即每个UTXO,是否唯一。如果相同的UTXO在新区块中作为输入多次出现,则表明存在潜在的双重花费(double-spending)问题,违反了UTXO唯一性标准。如果UTXO唯一性确认模块204识别出在新区块中的交易输入中被不止一次引用的UTXO,则该模块输出错误信号或其他中断以指示该区块将被拒绝。
[0042] 假设新区块没有被拒绝,即所有UTXO输入是唯一的,则各个交易交易由分配单元206在一组并行处理器208中分配。交易分配单元206可采用多种可能的分配方案中的任何一种,用于在各个处理器208之间划分区块中的交易。在某些示例中,分配方案的目标可能是负载平衡。该分配可以表征为“作业车间调度(job shop scheduling)”,其中,在一组机器/处理器208中分配具有不同处理时间的一组作业,每个机器/处理器208具有其自己的处理能力或功率,同时试图最小化处理器208中最长处理时间的长度。下文提供了进一步的示例细节。
[0043] 各个处理器208根据交易级验证标准来验证已经分配给它们的交易。处理器208不需要它们之间的同步模式。处理器208各自独立地验证其已分配到的交易是否有效。每个处理器208输出确认其分配到的交易的有效性的结果,并且将结果相加以确认该区块中的所有交易都是有效的。在处理器208之一识别出不合规交易,即无效交易,的情况下,该处理器可以发出输出(例如中断或其他信号),以指示存在无效交易。可以将该中断或信号发送到其他处理器208,以使其他处理器可以立即停止测试其各自的交易,并且不会在即将被拒绝的区块内验证交易上浪费更多的资源。
[0044] 注意,在示例过程200中示出的区块级标准首先被测试。然而,应当理解的是,区块级验证阶段202可以在交易级验证测试之后发生,或者在某些示例中与交易级验证测试并行发生。
[0045] 现将参考图3,图3以流程图的形式示出了验证区块链网络中的区块的一个示例方法300。该区块包含多个交易,每个交易引用一个或多个输入,并且每个输入是UXTO(币库生成交易的情况除外)。方法300使用区块链网络上的节点内合适的硬件和处理器可执行指令来实施。
[0046] 在操作302中,节点接收新区块。可以从生成新区块并完成工作量证明的挖掘节点接收新区块。可以从网络中的另一个(非挖掘)节点接收新区块。在将新区块转发到网络中的任何其他节点之前,当前节点验证该区块。如上所述,对新区块的验证包括确认该区块是否满足某些区块级标准,并确认该区块中的每个交易是否有效。
[0047] 在操作304中,节点评估新区块是否满足区块级标准。如前所述,在一些实施方式中,该操作304可以稍后在方法300中执行,并且在一些情况下,可以与其他操作并行执行。区块级标准可包括确认区块结构是否满足句法要求,时间戳是否满足货币要求,以及区块大小是否在规定的限度内,等等。
[0048] 如果新区块满足这些区块级标准,则在操作306中,节点评估对各个交易的输入是否唯一。也就是说,节点确定作为输入引用的任何UXTOs是否在区块中出现多次。如果是,则UXTOs不是唯一的,该区块将被拒绝。如果不在并行处理单元之间使用计算上昂贵的同步模式,则不能并行执行UXTOs唯一性的确定。因此,操作306串行地执行。
[0049] 在一个示例实施中,可以使用交易输入中的引用输出(UXTO)的散列表,其中每个UXTO具有初始化为假(false)的布尔值(Boolean value)。如果再次引用散列值已设置为真(true)的给定散列表条目,则会发生双重花费攻击。在这种情况下,UXTO不是唯一的,并且整个区块可以被认为是无效的,并且过程300被中止。
[0050] 在另一示例实施中,可以使用二叉搜索树,例如通过C++中的地图数据结构(map structure data)。地图是关联容器,按照特定顺序存储由键值(key value)和地图值(mapped value)的组合形成的元素。给定n个交易,搜索、插入和删除时间复杂度平均为O(logn),最坏情况下为O(n)。
[0051] 如果新区块中的UXTOs是唯一的,则在操作308中,节点在并行处理器之间分配交易。
[0052] 在操作306的串行处理期间,可以使用附加的散列表来跟踪依赖于区块内其他交易的交易。在一个实施中,标识符iddep(从零开始)被分配到当前分析的交易。如果一个交易从属于另一个交易,则将为该交易分配与其所依赖的交易相同的标识符。也就是说,两个及以上从属交易将具有相同的标识符,并且每个不从属于任何未看到的交易的新交易将具有增加的iddep值。每组从属交易将被预先分配到相同的处理单元,例如idCPU=iddep modulo N,其中N是并行处理单元的数量。从属交易是例如输入是其所依赖交易的输出的交易。
[0053] 在最简单的实施中,处理器之间的交易分配基于处理器的数量和交易的数量,而不考虑处理器需求和/或容量的差异。然而,为了更好地平衡可用处理器之间的处理负载,在一些实施中,节点可考虑交易的复杂性,特别是验证每个交易的复杂性。处理负载的一种度量(或代理)是交易中涉及的脚本操作的数量。也就是说,可以认为验证单个交易j所需的时间与所涉及的脚本操作的数量cj成正比。例如,在P2PKH交易的情况下,cj是签名脚本(输入)中的操作数和公钥脚本(引用的输出)中的操作数的总和。
[0054] 在另一示例中,可以将不同的权重w分配到不同的脚本操作。例如,OP_HASH160和OP_CHECKSIG比简单的OP_EQUAL操作复杂几个数量级。因此,用于验证交易j的总成本cj定义为其M个单独的加权脚本操作wj的总和:
[0055] 权重wj可基于由适用的区块链协议规定或定义的脚本操作的复杂性进行硬编码(hard-coded)。
[0056] 为了防止对节点计算资源进行某种形式的攻击,可以设置阈值T。如果对于任何交易j来说cj>T,则节点可以确定不会验证该区块。T的值可以直接与本地验证节点中的单个处理单元的计算能力成正比,以赫兹或每秒指令数为单位。
[0057] 调度方案S在CPU之间分配交易验证列表{cj},0≤j
[0058] 两种示例调度方案包括:·FCFS(先来先服务,First Come First Served)以循环方式将交易顺序分配到可用的处理单元。这是一种随机分配方案。给定从区块顶部开始的第t个交易,带有ID t modulo N的内核将负责验证。此调度程序的计算复杂度最低。
·LPT(最长处理时间,Longest Processing Time)贪心算法(greedy algorithm)提供了更有效的负载平衡解决方案,并且是确定性分配方案的一个示例。作业(交易)可以首先按其各自的处理时间(脚本操作的数量,或基于加权脚本操作的总和的“成本”)进行排序,然后分配到迄今为止结束时间最早的机器上,以便平衡每个处理器的计算负载。
[0059] 在一些实施中,FCFS方案可能会受到利用验证节点的并行度N的恶意攻击,例如,每N或N/2个交易构建一个具有高要求脚本(demanding scripts)的区块。为了避免这种情景,可以使用真正随机的交易验证分配,无需额外成本。
[0060] LPT算法相对于理论最优值U0实现了以下上限U:
[0061] 注意,排序算法,如归并排序(Mergesort),以O(nlogn)最差和平均时间复杂度为特征。但是,可以在对cj值进行排序的同时执行操作306的UTXO唯一性评估,从而避免任何额外的计算成本。
[0062] 如操作310所示,在并行处理器之间分配了交易之后,方法300包括那些处理器中的每一个独立地验证已分配的交易的相应集合。一旦所有单个交易被验证为有效,则如操作312所示,节点能够接受该区块为有效。基于该区块的有效性,接受或指定区块为有效可导致附加功能,例如将有效区块转发给区块链网络上一个或多个其他对等节点。在某些情况下,方法300可包括将区块添加到当前节点本地存储的区块链副本中。
[0063] 如果任何处理器检测到无效交易,则处理器中断验证方法300,并且如操作314所示,节点区块视为无效而拒绝。
[0064] 因此,本发明为现有技术中的至少一个技术问题提供了一种或多种技术方案。例如,已知的区块链布置没有教导在并行处理器之间的交易分配之前串行地验证所有交易中未花费的交易输出(UTXO)的有效性的技术。例如,2014年10月8日的比特币论坛帖子建议构建一个新的数据结构(输出集),并尝试通过检查输出集结构(https://bitcointalk.org/index.php?topic=816199.0[06/10/2017]“寻找分叉核心钱包,以使用并行计算来验证区块”),来防止并行交易验证过程中的双重支出。
[0065] 现将参考图4,图4以框图形式示出了节点400的简化示例。节点400包括多个处理器402,处理器402可包括两个或两个以上微处理器、专用集成芯片(ASICs)、微控制器或类似的计算机处理设备。处理器402可包括多核处理器
[0066] 节点400还包括存储器404和网络接口406,存储器404可包括持久和非持久存储器,以存储值、变量,并且在某些示例中包括处理器可执行程序指令,网络接口406通过有线或无线网络提供网络连接。
[0067] 节点400包括处理器可执行区块链应用408,所述处理器可执行区块链应用408包含处理器可执行指令,所述处理器可执行指令在被执行时使处理器402执行本文所述的功能或操作中的一个或多个。
[0068] 应当理解的是,本文描述的设备和过程以及实现所描述的用于配置区块链节点的方法/过程的任何模块、例程、过程、线程、应用或其他软件组件可使用标准计算机编程技术和语言来实现。本申请不限于特定处理器、计算机语言、计算机编程协定、数据结构和其他这类实施细节。
[0069] 应当说明的是,上述实施例说明而非限制本发明,在不脱离本发明的由所附权利要求限定的范围的情况下,本领域技术人员将能够设计出许多替代性实施例。在权利要求中,括号中的任何附图标记不应解释为对权利要求的限制。词语“包括(comprising)”和“包括(comprises)”等并非在整体上排除其他元件和步骤的存在,尽管这些元件和步骤并没有在任何权利要求或说明书中列出。在本说明书中,“包括(comprises)”意指“包括(includes)或由......组成(consists of)”,“包括(comprising)”意指“包括(including)或由......组成(consisting of)”。元件的单数引用不意味着排除这些元件的复数引用,反之亦然。本发明可以借助包括若干不同元件的硬件,以及借助适当编程的计算机来实施。在列举了若干装置的设备权利要求中,这些装置中的若干个可以由硬件的同一个部件来体现。不争的事实是,在相互不同的从属权利要求中列举了某些方法,并不代表这些方法的结合不能获得有益效果。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈