用于区块链网络中一致分布式内存池的方法和系统与流程

文档序号:19878758发布日期:2020-02-08 06:43阅读:365来源:国知局
用于区块链网络中一致分布式内存池的方法和系统与流程

本发明一般涉及基于计算机的存储和转移技术。本发明还涉及分布式散列表,尤其涉及提高用于存储和检索共享信息的安全性和一致性的方法和装置。本发明特别适合于但不限于在区块链应用程序和区块链实现的转移中使用。本发明还涉及通过实现更快的读写操作,提高经由区块链网络的操作速度,并涉及通过防止或减少攻击和/或恶意活动(例如路由和存储攻击,例如在分布式内存池中),改进用于区块链实施系统的安全机制。



背景技术:

在本文献中,我们使用术语“区块链”来包括所有形式的电子、基于计算机的分布式账本。它们包括基于共识的区块链和交易链技术、许可和非许可的账本、共享账本及其变体。虽然也提出并开发了其他区块链实施方式,但是区块链技术最广为人知的应用是比特币账本。虽然本文中出于方便和说明的目的可以引用比特币,但是应当注意,本发明不限于与比特币区块链一起使用,并且替代性的区块链实施方式和协议也落入本发明的范围内。

虽然区块链技术由于加密货币实施的使用而广为人知,但是数字企业家已经开始探索比特币所基于的加密安全系统以及可以存储在区块链上以实现新系统的数据这两者的使用。如果区块链可用于不限于加密货币领域的自动化任务和过程,这将是非常有利的。这些解决方案将能够利用区块链的好处(例如,事件的永久性、防篡改记录,分布式处理等),同时在其应用中更通用。

区块链是一种对等的电子账本,它被实现为基于计算机的去中心化、分布式系统,该系统由区块组成,而区块相应地由区块链交易组成。每个区块链交易是一个这样数据结构,其编码区块链系统中的参与者之间的数字资产或记录链的控制转移,并包括至少一个输入和至少一个输出。每个区块包含前一个区块的散列,因此这些区块变为链接在一起,以创建自区块链开始以来就已经写入区块链的所有区块链交易的永久、不可更改的记录。区块链交易包含嵌入其输入和输出中称为脚本的小程序,它们指定如何以及由谁来访问区块链交易的输出。在比特币平台上,这些脚本是使用基于堆栈的脚本语言来编写的。

为了将区块链交易写入区块链,必须对其进行“验证”。网络节点(矿工)进行工作以确保每次区块链交易都有效,而无效交易从网络中被拒绝。安装在节点上的软件客户端通过执行其锁定和解锁脚本,对未耗用的区块链交易(utxo)进行该验证工作。如果锁定和解锁脚本的执行评估为true,则区块链交易有效并将该区块链交易写入区块链。因此,为了将区块链交易写入区块链,必须i)由接收区块链交易的第一节点来验证-如果区块链交易被验证,则节点将其中继到网络中的其他节点;ii)加入矿工所建造的新区块;以及iii)挖掘,即加入过去区块链交易的公共账本。

接收新的区块链交易的网络节点将迅速尝试将该区块链交易推送到网络中的其他节点。在将新的区块链交易传输到其他节点之前,需要对其进行“验证”,这意味着要根据一组标准对其进行检查,以确保根据适用的区块链协议,该区块链交易满足针对适当的区块链交易的基本要求。

为了将区块链交易写入区块链,节点(“矿工”)将其合并到一个区块中,所述节点被设计为收集区块链交易并将其形成为区块。然后,矿工尝试针对节点完成“工作量证明”。整个区块链网络中的矿工竞相成为第一个组装区块链交易的区块并完成该区块的关联工作量证明的人。成功的矿工将其已确认的区块添加到区块链中,并且该区块通过网络传播,从而维持区块链副本的其他节点可以更新其记录。那些接收区块的节点还“验证”该区块以及其中的所有区块链交易,以确保其符合协议的形式要求。

与区块链实施相关联的瓶颈之一是与等待矿工完成工作量证明相关联的延迟,工作量证明确认区块链交易的区块并使得将其添加到区块链中。以比特币系统为例,在设计上,系统耗用大约10分钟来确认区块并将其添加到区块链中。同时,未经确认的区块链交易累积在内存池(以下称为“内存池”)中,内存池的近似完整副本维持在网络中的每个节点上。对比特币架构的分析表明,凭借其10分钟的区块确认吞吐量,系统可以基于典型区块链交易和区块的大小以及将这些累积的未经确认的区块链交易合并到新区块中的速度,处理每秒大约3个新的未经确认的区块链交易的交易吞吐量。

使用基于区块链的网络(例如比特币)来实现或帮助使用广泛、密码保护的交换将是有利的。这种交换例如可以涉及像信用卡交易这样的支付处理,虽然本发明不限于面向财务的应用。但是,每秒约3次的交易吞吐量不足以处理这种电子支付,目前,这种电子支付以大约每秒50,000次的交易量进行操作。因此,希望找到一种对于速度和扩展性约束的解决方案,这些约束目前限制了区块链处理大量交易的能力。



技术实现要素:

现在已经设计了这样的解决方案。因此,根据本发明,提供如后附权利要求书所限定的方法和装置。

根据本发明,可提供这样的方法和装置,它们能够实现区块链交易或其他数据通过被设计为实现分布式散列表(dht)的功能的内存池节点的网络(分布式内存池或dmp)快速传播(包括存储和检索),如下更详细所述。实现dht的dmp可包括分布在像商业网络这样的网络(例如dmp网络)或其他网络上的多个内存池节点。在一些实施例中,dmp网络将数据存储为包括关键字和值的记录。

如下更详细所述,内存池节点形成分布式系统,其提供(关键字,值)对的存储和检索,其中任何参与的内存池节点都能够有效地检索与特定关键字相关联的值。在一些实施例中,内存池节点还负责确定路由信息并在内存池节点之间建立路径和/或连接。作为(关键字,值)对的“值”存储的数据可包括本公开所述能够通过包括区块链交易的计算机系统存储的任何数据。

在附加性或替代性方案中,本公开描述一种内存池网络节点,以帮助在用于实现区块链交易的dht的互连节点的网络上快速分配区块链交易,该互连节点的子集是通过覆盖网络互连的内存池网络节点。下面,仅出于方便的目的,术语“内存池网络节点”可以与术语“内存池节点”互换使用。

因此,根据本发明,可提供一种如所附权利要求书所限定的计算机实现的方法(和对应的(一个或多个)系统)。

可将该方法描述为使用内存池节点来实现dht的方法。该计算机实现的方法包括:在实现分布式散列表(dht)的分布式内存池网络(dmp)的内存池节点,接收更新内存池节点的路由信息的请求;在dht的关键字空间内将随机游走的集合初始化,随机游走的集合用于生成将通过内存池节点存储的键-值记录(key-valuerecord)的集合;至少部分地基于第一识别信息在第一表中生成第一记录,第一识别信息存储在长距离表类型的第二表中;通过至少进行随机游走的集合的第一随机游走,在长距离表类型的第三表中生成第二记录,第二记录包含第二识别信息以及与该第二识别信息相关联的地址;通过至少从dmp网络的第二内存池节点所维持的表中获得记录,在短距离表类型的第四表中生成第三记录。

附图说明

参考本文所述的实施例,本发明的这些和其他方面将变得显而易见并得以阐明。下面仅通过示例并参考附图来描述本发明的实施例,其中:

图1示出根据实施例的具有内存池节点的覆盖网络的示例性节点网络;

图2示出根据实施例的实现dht的内存池节点的示例性网络;

图3示出根据实施例的实现用于更新dmp网络的内存池节点的路由信息的操作的内存池节点的示例性网络;

图4示出根据实施例的实现dmp网络的检索操作的内存池节点的示例性网络;

图5示出根据实施例的用于更新dmp网络的内存池节点的路由信息的示例性过程的流程图;

图6示出根据实施例的用于从dmp网络的内存池节点检索信息的示例性过程的流程图;

图7示出可以实现各个实施例的示例性环境的示意图。

具体实施方式

首先参考图1,图1以方框图形式示出与区块链相关联的示例性网络,在本文中将其称为区块链网络100。区块链网络100是对等开放成员网络,任何人都可以加入,无需邀请和/或经其他成员同意。运行区块链网络100在其下操作的区块链协议的实例的分布式电子装置可以参与区块链网络100。可将这种分布式电子装置称为节点102。区块链协议例如可以是比特币协议或其他加密货币。在其他实施例中,区块链网络100可以是运行例如结合图2更详细描述的dht协议的实例的存储网络。

运行区块链协议并形成区块链网络100的节点102的电子装置可以是各种类型,例如包括,诸如台式计算机、膝上型计算机、平板计算机、服务器这样的计算机,诸如智能电话这样的移动装置,诸如智能手表这样的可穿戴计算机,或其他电子装置。

区块链网络100的节点102使用合适的通信技术相互耦接,通信技术可包括有线和无线通信技术。在很多情况下,区块链网络100至少部分地在互联网上实现,并且一部分节点102可以位于在地理上分散的位置处。

节点102维护区块链上所有区块链交易的全局账本,区块链分为多个区块,每个区块包含链中前一个区块的散列值。全局账本是分布式账本,并且每个节点102可以存储全局账本的完整副本或部分副本。节点102进行的影响全局账本的区块链交易由其他节点102验证,从而维持全局账本的有效性。本领域技术人员将理解实现和操作区块链网络的细节(例如使用比特币协议)。

每个区块链交易通常有一个或多个输入和一个或多个输出。嵌入输入和输出中的脚本指定如何以及由谁访问区块链交易的输出。区块链交易的输出可以是值由于区块链交易所转移到的地址。然后,将所述值与所述输出地址相关联,作为未耗用的区块链交易输出(utxo)。然后,后续的区块链交易可以引用所述地址作为输入,以解锁所述值。

节点102可以根据其功能而具有不同的类型或类别。已经提出,与节点102相关联的四个基本功能是:钱包、挖掘、完整区块链维护和网络路由。这些功能可以有所不同。节点102可具有这些功能的一个以上功能。例如,“全节点”提供所有四个功能。诸如可以在数字钱包中实现的轻量级节点例如可以仅具有钱包和网络路由功能。数字钱包可以跟踪区块头部,而不是存储整个区块链,该区块头部在查询区块时用作索引。节点102使用诸如tcp/ip(传输控制协议)的面向连接的协议相互通信。在各个实施例中,内存池节点104不是区块链网络的成员,也不负责实现比特币/区块链协议。

本申请提出并描述了节点的附加类型或类别:内存池节点104。在各个实施例中,内存池节点104提供区块链交易的快速传播和检索。在这种实施例中,内存池节点104不存储完整的区块链,也不进行挖掘功能。从这个意义上讲,它们类似于轻量级节点或钱包;但是,它们包括可实现区块链交易的快速传播和检索的附加功能。内存池节点104的操作重点是通过dmp网络实施的dht中存储的数据的传播和检索,特别是在区块链实施方式的情况下,将未经确认的区块链交易传播到其他内存池节点104,据此未经确认的区块链交易从其他内存池节点104迅速推送到区块链网络100中的其他节点102。

内存池节点104可以统称为dmp106。在各个实施例中,如本公开所述,将内存池节点104和dmp106实现为商业网络的一部分。虽然已经示出,但是为了便于说明,作为图1中的实体清楚的网络,可将内存池节点104集成到区块链网络100中。也就是说,可将dmp106视为在区块链网络100内并分布遍及区块链网络100的子网。内存池节点104可以进行一个或多个专用功能或服务。

为了使dmp106可靠运行并能够以一定的安全等级提供服务,内存池节点104需要维持dmp106的良好概况,因此需要建立有效的路由协议。每当内存池节点104收到更新或获取请求时(如下更详细所述),内存池节点104可能需要将信息广播到若干其他内存池节点104以及其他节点102。在dmp106的背景下,这等于找到解决多重旅行商问题(mtsp)的解决方案。有很多解决这个问题的解决方案,dmp106中可以采用任何一种解决方案。内存池节点104以某种最新形式各自运行路由优化。

在一些实施方式中,将dmp106实现为去中心化ip多播类型的网络。

在一种示例性情况下,区块链网络100上的常规节点102生成要由dmp106存储的区块链交易。它可将区块链交易发送到内存池节点104,然后内存池节点104将其广播到其他内存池节点104,或者,如果它知道内存池节点104的ip地址,则可以将区块链交易直接发送到多个内存池节点104。在一些示例中,dmp106的所有内存池节点104都是单个地址的成员,因此所有发送到该地址的区块链交易被所有内存池节点104接收;但是,在某些情况下,可能有不止一个与dmp106相关联的地址,并且接收内存池节点104可以根据路由信息评估是否需要将区块链交易进一步广播到其他地址,以将区块链交易传播到完整的dmp106。

网络100中的每个节点102通常维持一个单独的内存池,该内存池包含它已经看到并且尚未通过矿工完成工作量证明来并入区块链中的未确认区块链交易。来自支付处理中的使用的区块链交易数量的显著增长将增加要存储在每个内存池中的区块链交易的数量。因此,虽然dmp106中的节点能够几乎同时接收新的区块链交易,但是相对于大型且快速变化的内存池,它们可能有存储能力限制。

为了解决这个问题,本申请提出内存池节点104使用通过dmp106实现的共享内存池。

假设区块链交易(tx)的平均大小为500字节,交易速率为~10tx/s,则dmp106可以接收~400gb的每日传入数据。数据在未确认区块链交易的内存池中存储不同的时间量。因此,dmp106需要大量的存储和快速存储数据的能力。为了不对每个单独的内存池节点104施加太多要求,内存池节点104实施共享内存池,例如dmp106。替代使每个内存池节点104将所有进入的tx保持在其自己的内存池中,每个内存池节点104仅存储总数的某一部分,并有其余部分的键-值相关联的散列。

dmp是一种去中心化的分布式系统,它允许在节点之间对关键字集合进行成员资格划分,并且能够仅以有效和优化的方式将消息发送到给定关键字的所有者。网络的每个节点都可以看作是散列表阵列的一个单元。dmp被设计用于管理大量节点,从而允许以下可能性:新节点可以加入网络,而旧节点可以离开并崩溃而又不损害共享数据的完整性。dmp确保去中心化(没有中央权限、也没有中央协调)、扩展性(系统具有数百万个节点的有效行为)和容错能力(系统可靠并且能够管理加入和离开网络或崩溃的节点)。网络的每个节点可以只与少量其他节点保持联系,因此在发生更改或出现新数据片段时,网络不会过载。

可将相同的概念应用于utxo数据库,其包含区块链上所有未耗用输出的集合。可以使用实现dht的dmp来构建utxo数据库,从而在一组节点之间共享内容。

下面更详细描述的dht协议为上述问题提供了解决方案。具体而言,dht协议为内存池节点104中存储的区块链交易的有效性、所存储数据的一致性和完整性提供全局共识,提供快速的传播和检索操作,并防止内存池节点104中的路由和存储攻击。

在衡量鲁棒dht时要考虑的一个因素是确保整个网络的鲁棒性和可靠性所需的副本数量。如上所述,节点可以加入和离开网络,这一事实不应影响数据的可用性。如果存储区块链交易a的节点离开网络,则有必要在网络的另一部分中找到区块链交易a。例如,在现有的区块链网络(例如比特币)中,网络的区块链副本数量等于网络中全节点的数量(平均5000个副本),但是这个事实影响扩展性。

在当前提出的dmp106中,不是在每个内存池节点104上完全复制内存池,而是通过dmp106来实现该内存池。为了提供可靠性,可将dmp106实现为具有一些重叠;即,是在一个以上内存池节点104中复制每个区块链交易数据项(虽然不是在每个内存池节点104中)。作为示例,可将dmp可以实现为指定最少数量的2个副本。假定节点之间的完全独立性为那么这种情况导致在给定时间内一次减少两个节点的可能性。

图2以示意图形式示出根据实施例的示例性区块链网络200,其包括验证者节点208(例如,诸如结合图1所示的节点102之一的节点)和内存池节点204。在各个实施例中,特定区块链交易(ti)202由一个或多个验证者节点208处理,并使得一个或多个内存池节点204存储ti202。区块链交易ti202可包括如上所述的区块链交易。但是,交易信息的存储仅是本公开所述dht协议的一个实施例。本公开所述协议可用于一致和安全的存储以及对于适合存储在dmp中的任何数据的检索。

验证者节点208可以应用各种标准来验证传入的ti202。例如,取决于执行验证者节点208的计算资源和/或ti202的顺序要求所提供的计算并行性,可以在调度任意大小的完整批量进行验证之前对新的区块链交易进行缓存。此外,验证者节点208可以负责验证指向内存池节点204的区块链交易或其他请求的格式。在其他实施例中,验证者节点208确定ti202是否已经被一个或多个其他计算机系统验证(例如,至少部分地基于区块链协议进行验证)。

内存池节点204提供去中心化存储服务,该服务实现各种操作,例如查找操作,其中操作“lookup(k)”返回与关键字“k”相关联的数据。此外,内存池节点204根据dht协议实现对等系统,以实现dmp106。dmp106为内存池节点204和关键字两者提供公共标识符空间(例如,关键字空间或散列函数的所有可能结果的集合),每个关键字k存储在内存池节点204中,根据距离函数具有最接近k的标识符。如下更详细所述,不使用确定性函数(例如,散列函数)将关键字存储在共享空间中。在各个实施例中,这可以防止或降低恶意节点执行暴力攻击、以生成导致两个关键字之间的恶意关键字的输出的有效性。

在一些实施例中,为了定位与k相关联的特定内存池节点,内存池节点204根据距离函数将查找请求转发给其标识符更接近k的其他对等方。此外,内存池节点204可以维持到其他内存池节点204的子集的链接。如结合图6更详细所述,根据本公开提出的路由协议,查找请求被内存池节点204转发,直到找到与k相关联的内存池节点,或者未找到标识符更接近所请求关键字的节点。

在dmp106中,将关键字分布在可能非常多的内存池节点104之间。在各个实施例中,每个内存池节点204包含能够识别其他内存池节点204的子集的信息(例如,网络地址、关键字信息、物理位置等),因此,查找可以确定地路由到负责所请求关键字的内存池节点204。dmp106的成员资格的这种有限观点可以为系统提供更大的扩展性。

使用本公开所述的dht协议来实现dmp106。在各个实施例中,dht协议提供两个操作:1)存储操作和2)检索操作。给定区块链交易ti,可以分配标识符id(ti)为:idi=h(ti),其中h表示散列函数。在各个实施例中,标识符(idi)将用作dmp106中的关键字。此外如上所述,可以使用特定地址,以便可以从多个验证者节点208接收区块链交易。然后,每个验证者节点208可以独立证实区块链交易ti。

如图2所示,每个验证者节点208维持本地数据库214。在图2所示的实施例中,本地数据库214的条目包含区块链交易的标识符idi和针对在ti上进行的验证操作的二进制决策,例如,“0”表示拒绝,“1”表示接受,或“y”表示接受或“n”表示拒绝。该信息可用于快速响应验证或检索查询。在一些实施例中,多个验证者节点208将独立证实ti,然后,至少部分地基于验证ti的结果,多个验证者节点208将向dmp106发送store(ti,idi)请求或reject(idi)请求。在这些实施例中,存储消息使得ti存储在与idi相关联的内存池节点204上,且拒绝消息使得内存池节点204拒绝包括idi的请求。此外,如果有n/2+1个store(ti,idi)请求被接收,那么内存池节点204可以只存储ti,其中n是验证者节点208的数量。

在其他实施例中,不使用拒绝消息,并且一旦内存池节点204接收第一store(ti,idi),内存池节点204就激活用于接收n/2条以上存储消息的计时器。在这些实施例中,如果已经超时并且没有接收足够的存储消息,则丢弃区块链交易。此外,每个内存池节点204可以为ti将所接收的存储消息的数量维持在大于n/2+1。这些机制可用于维持法定人数要求和/或确保在法定人数之间达成共识。在一些实施例中,内存池节点204维护用于存储从用于给定区块链交易的验证者节点208接收的大量验证的数据库210或其他数据结构。

在本公开所述dht协议的各种实施方式中,经过验证的区块链交易ti的检索需要广播包括idi的消息以将其发送到至少一个内存池节点204。负责idi存储的特定内存池节点将向查询节点发送包括与idi关联的数据的消息。在该实施方式中,如果需要m个内存池节点来存储ti,则查询节点至少接收m/2+1个消息(包括与idi相关联的数据),以将所存储的区块链交易视为一致。此外,查询节点可以询问n/2+1个随机验证者节点208,以根据验证者节点208的本地数据库214中存储的信息来确定ti的有效性。

如下结合图3更详细所述,可将dmp106的键-值对存储在内存池节点204所维护的表210中。表210可包含与dht协议相关联的信息,例如上述的不同功能。虽然在图2中将验证者节点208和内存池节点204示出为不同实体,但是在各个实施例中,可通过诸如计算机系统这样的相同实体来执行一个或多个内存池节点204和/或验证者节点208。例如,如上结合图1所述,商人节点执行区块链协议的多个组件。在其他实施例中,在没有验证者节点208的情况下实现dmp206。在这些实施例的一个示例中,ti202直接由内存池节点204存储,不进行任何验证操作。在另一个示例中,内存池节点204本身可以在处理ti202之前进行验证操作。

图3以示意图形式示出对dmp网络的一组内存池节点的路由信息的更新的示例性实施例300。图3所示的示例性实施例300示出新的内存池节点sx304,现有内存池节点sy308以及另一个现有内存池节点sz306。如上所述,dht协议依赖于由内存池节点之间的各个信任关系组成的网络。可以至少部分地基于路由信息和应用级信息两者的集合来生成用于特定内存池节点(例如,sx)的连接集合。在各个实施例中,信任证书的发布或存储不涉及中心授权。在这些实施例中,每个内存池节点维持相对于内存池节点的可信对等方的记录。在各种其他实施例中,例如在更新过程期间,内存池节点sx304不是新的内存池节点。

网络(例如,dmp106)中给定多个内存池节点n,每个内存池节点的路由表记录的数量r可以根据以下来衡量(或度量):

如上所述,dht协议限定两个功能和/或操作-更新操作和获取操作。在各个实施例中,更新操作用于构建路由表并在每个内存池节点插入关键字。如下结合图4更详细所述,获取操作被特定节点(例如,sx)用于找到关键字k所表示的目标键-值对(例如,dht中的记录)。

在各个实施例中,通过公钥识别特定内存池节点(例如,sx)。例如,内存池节点sx304识别信息由sx304的公钥px和当前ip地址addrx表示,它们通过使用由signx(px,addrx)限定的接下来的记录进行安全链接,其中signx()表示使用与sx304相关联的私钥生成的签名。然后,可以使用签名记录将节点识别信息存储在dmp中。在一些实施例中,为了向对等方sy308发送消息,内存池节点sx304使用标识符py来查询dmp。然后,内存池节点sx304使用sy308的公钥py验证响应于查询而返回的任何记录(例如(py,addry))的签名。一旦内存池节点sx304证实该信息,sx304就直接向sy308的addry发送消息。在这些实施例中,当内存池节点改变位置或接收新的网络地址时,生成新的记录并存储在dmp中。

如果上述获取操作有较高的概率(相对于其他协议)返回正确的值,那么可将dht协议视为相对于sybil攻击而言是鲁棒的,即使对更新和获取操作两者都有恶意动作。在各个实施例中,dht协议具有以下特性,以降低sybil攻击或其他攻击的有效性:将路由表信息最小化以降低空间复杂度,从而避免由于大量错误节点而产生的诸如过载这样的问题;新节点通过从对等方收集信息来生成自己的路由信息,从而减少恶意节点重复发送错误信息的影响,并且关键字空间是不确定的,以避免集群攻击。

dmp中的数据路由可以由无向图表示。给定多个恶意边缘g和多个内存池节点n,在某些实施例中,属性g<<n(比n低很多)保证dmp106的可操作网络。虽然攻击者可以创建任意数量的dmp106,但是对于恶意节点而言,可能难以通过内存池节点创建边缘(例如,网络连接或关系)。例如,从内存池节点开始的随机游走很可能在另一个内存池节点而不是在恶意节点结束。但是,因为起始内存池节点可能无法确定哪些返回的消息是源自恶意节点,所以无法对消息的真实性做出任何假设。这些特性在haifengyu等人的“sybillimit:anear-optimalsocialnetworkdefenseagainstsybilattacks,ieee/acmtransactionsonnetworking,vol.18,no.3(2010)andf.r.k.chungspectralgraphtheoryconferenceboardofthemathematicalsciences,no.92(1994)”中有详细描述,通过引用将其合并于此,引用程度与将每个引用单独和具体地指示为通过引用合并,并在本公开中给出其全部内容一样。

如图3所示,sx304可通过进行随机游走332来生成路由信息。在实施例中,sx304路由表是通过在dmp中发起长度为w的r个独立随机游走来生成的。可以生成长度为w的r个独立随机游走,并将从随机游走中检索的信息存储在表tab_rnd(sx)316中。使用这些随机游走,sx304可以从每个随机游走的接收者内存池节点收集一个或多个随机键-值记录。然后,可将该信息存储在表tab_dist(sx,i)312中,其中i表示路由迭代。

如下更详细所述,在查找操作(例如,获取)期间使用该路由信息。如果sx304本地表的tab_close(sx,i)314表不包含关键字,则将查找消息发送到sx304路由表中的r个节点(例如,tab_dist(sx,i)312)。根据r的值,一个或多个内存池节点可能会在本地存储查询的键-值记录(例如,在特定节点的tab_close表中)。此外,协议可以定义rn、rd或rc,其中rn是tab_rnd(sx)316的元素数,rd是tab_dist(sx,i)312的元素数,而rc是tab_close(sx,i)的元素数。在各个实施例中,值rn、rd或rc可以与r相同。

在各个实施例中,仅通过进行多个随机游走来生成路由信息。此外,由于不同的内存池节点之间的边缘数量不同,随机游走分布可以得到平衡。因此,如果每个物理内存池节点根据边缘数量进行自我复制,则系统中存储的关键字总数将为mk,其中m为诚实边缘数量,k为每个内存池节点存储的关键字数量,并且独立随机游走的次数将根据o(√mk)来衡量。

在一些实施例中,使用关键字的全局圆形词典顺序。例如,给定任何索引a<i<b,关键字ki位于两个节点xa与xb之间的一部分空间中。如上所述,关键字不使用确定性函数(例如,散列函数)存储在共享关键字空间中,以防止恶意节点强行进行期望的输出并在两个诚实关键字之间插入错误的关键字。

如图3所示,节点sx304生成长距离路由表tab_dist(sx,i)312,包含指向其他内存池节点的r个指针,其识别信息均匀分布在关键字空间上。在这些实施例中,通过发起r个随机游走并从终止内存池节点收集随机识别信息,存储指针。短距离路由表tab_close(sx,i)314包含r个键-值记录。这些关键字是按照字典顺序最接近的后续304识别信息。

根据该路由模型,每个节点使用随机游走来择随机关键字,从而提供指针在关键字空间上的均匀分布。此外,可通过递归扩展该路由模型来防止集群攻击。在各个实施例中,在给定的迭代i,每个内存池节点从先前的第(i-1)个远距离表336(例如,tab_dist(sx,i-1))中选择随机条目,并使用该指针来选择识别信息存储在tab_id(sx)310中。α递归度可以确保每个内存池节点都位于α位置,并为关键字空间中的α不同识别信息收集短距离表。因此,可以根据o(logmk)衡量递归度。

如图3所示,更新操作包括两个阶段。在第一阶段中,节点sx304初始化随机游走,以收集要存储在tab_rnd(sx)316中的键-值记录。在第二阶段中,对于更新操作i<α的迭代,生成其他路由表tab_id(sx)310、tab_dist(sx,i)312和tab_close(sx,i)314。在各个实施例中,可将每个表中的条目数量限制为一定数量的总条目。返回图3,在路由迭代期间,可以至少部分地基于当前路由迭代来递归地选择内存池识别信息。

此外如上所述,可通过从第sx304(i-1)个tab_dist表的记录中选择随机识别信息来创建tab_id(sx)312记录。在一些实施例中,第一条目是来自tab_rnd(sx)316表的随机关键字。此外,在实施例中,通过进行到内存池节点334(例如,节点sy308)的随机游走并从其tab_id表320收集所得内存池节点的地址和第i个识别信息来创建tab_dist(sx,i)312记录。最后,可以至少通过请求tab_rnd318的记录,至少部分地基于tab_rnd(sx)316中包括的信息来生成tab_close(sx,i)314,tab_rnd318的记录相对于在给定迭代i跟随识别信息的至少一个其他关键字,按照字典顺序接近。

在各个实施例中,收集路由信息所需的查询是独立的,并且随机地分布在接近特定识别信息的关键字空间中。

图4以示意图形式示出由实现dht的dmp的内存池节点进行的获取操作的示例性实施例400。图4所示的示例性实施例400示出与现有内存池节点sy408和内存池节点sz406联系\以在dmp中定位由节点sz406维护的目标记录的内存池节点sx404。如上所述,dht协议依赖于由内存池节点之间的各个可信关系(例如,连接)组成的网络。可以如上所述生成用于特定内存池节点(例如sx)的一组连接,其包括表(例如tab_dist412),该表包含指示分布在关键字空间中的内存池节点以及与内存池节点相关联的网络地址的一组记录。

在各个实施例中,检索目标记录包括在长距离路由表中找到路由指针,该路由指针在其短距离路由表418中具有目标内存池节点。如结合图6更详细所述,该过程可以是迭代的,因此获取操作使得执行获取操作的计算资源跟随指向连续的长距离路由表的多个路由指针,直到具有其短距离路由表418中的目标记录的目标内存池节点。

如上所述,更新操作可以确保整个关键字空间中的某些长距离指针维护关于目标记录和/或目标关键字的路由信息。此外,至少一些长距离点可以不与恶意实体相关联。如图4所示,首先从节点sx404发起的键-值检索过程(例如,获取操作)始于为了路由指针对sx404tab_dist412表的扫描。如果不能达到目标记录(例如,路由指针或其他信息不包括在tab_dist412中),则可以执行到节点sy308的随机游走432,以重复该过程。如图4所示,将随机游走432示为内存池节点之间的实线,将其他可能的随机游走用虚线示出。

在获取操作的迭代期间,可以从节点的sy408tab_dist表414中搜索与正在搜索的目标记录(例如,关键字)最接近的识别信息(在图4中示为“id*”)。在各个实施例中,给定随机迭代i,选择指向tab_dist(sy,i)416中的节点sz406的随机指针。在这些实施例中,指向节点sz406的所选长距离指针必须落入id*和k所给出的范围。例如,节点sz406的识别信息必须满足以下条件422:id*≤节点sz406的识别信息≤k。

然后,针对与关键字k相关联的记录,查询所选节点(例如,图4所示示例中的节点sz406)。如果在记录424上有hit(k,i)(例如,该记录在节点sz406的tab_close表418的第i个实例中),则节点sz406可将记录返回到负责传输查询的内存池节点(在图4所示的示例中是节点sy408)。此外,节点sy408然后可以至少部分地基于从节点sx404传输到节点sy408的查询,将记录返回到节点sx404。例如,记录可以基于用于定位该记录的相同路线。如果在记录上没有命中,则获取操作可以继续并执行另一个迭代。

在各个实施例中,在dmp中的对等方(例如,通过网络中的单跳连接的内存池节点)之间交换签名消息,以检测其他内存池节点之间的可信连接。例如,如果节点sy408和节点sx404是对等方(例如,通过可信连接绑定),并且节点x1、节点x2和节点x3是节点的sx404的对等方,则节点sy408请求直接连接到节点x1、节点x2和节点x3。此外,为了提高安全等级,可以直接询问节点x1、节点x2和节点x3,以证实其当前连接。如果确认了连接,则节点sy408可以确定创建与节点sx404的对等方之一(例如节点x2)的新连接。在这些实施例中,仅当节点x2对连接请求做出肯定响应时才准予新连接。

在其他实施例中,内存池节点可以向特定内存池节点之间的可信连接分配不同的权重βx,i。例如,节点sx404可以至少部分地基于以下约束,将权重分配给对等节点x1、节点x2和节点x3:

在各个实施例中,对等方中的较高信任对应于较高权重。例如,在权重βx,z=2/3的节点sy408与权重βx,y=1/3的节点sz406之间,认为节点sy408更可信,其中,节点sy408和节点sz406都是相同内存池节点(例如,节点sx404)的对等方。此外,权重可用于调节在随机游走中选择各个跳点的概率,或者初始化新的传递连接,如上所述。回到上述示例,如果βx,y=1/3并且βx,z=2/3,则从节点sx404到达节点sz406的概率是到达节点sy408的概率的两倍。

在这些实施例中,每个内存池节点负责维护与其他内存池节点相关联的权重信息。此外,相对于节点sx404,节点sx404可通过至少将权重(例如权重βx,y)减小一个值ε并将至少一个其他权重增加ε/(mx-1)来更新对等权重值。节点例如,在关键字落入节点的sy408tab_close的情况下,如果关键字sy408未能提供有效的键-值记录,则sx404可以确定减少与对等方相关联的权重。

图5以流程图形式示出根据实施例的、用于执行更新操作以生成用于dmp的内存池节点的路由信息的示例性过程500。处理500中的一部分或全部可以在配置有可执行指令和/或其他数据的一个或多个计算机系统的控制下进行,并且可以被实现为在一个或多个处理器上共同执行的可执行指令。可执行指令和/或其他数据可以存储在非暂时性计算机可读存储介质上(例如,永久存储在磁介质、光介质或闪存介质上的计算机程序)。示例性过程500可以由内存池节点(例如dmp(例如结合图2所述的dmp206)的结合图2所述的内存池节点204的其中一个)进行。

也就是说,内存池节点(例如结合图2所述的其中一个内存池节点204)可以进行示例性过程500,以执行结合图5所述的更新操作。这种内存池节点可包括任何合适的计算装置(例如,数据中心的服务器、客户端计算装置、计算资源服务提供商的分布式系统中的多个计算装置、或任何合适的电子客户端装置)。此外,可以响应于触发事件(例如,响应于加入dmp的新的内存池节点或现有的内存池节点的故障)或者处于任何更新路由信息的其他合适原因,周期性地或非周期性地执行过程500。

示例性过程500包括一系列操作,其中进行示例性过程500的系统执行dht协议的更新操作,如上所述。在示例性过程500的步骤502中,系统接收可信连接的集合和键-值记录的集合。可以接收可信连接的集合和键-值记录的集合作为更新操作的输入。在各个实施例中,该信息可以省略,或者为空(例如,其可以是内存池节点存储的非键-值记录和/或非信任连接)。

在步骤504,系统针对键-值记录的集合将随机游走初始化。如上所述,可以初始化随机游走的集合,用于创建在关键字空间内分布的一组距离。如上所述,生成随机游走可以是更新操作的初始阶段的一部分。此外,随机游走可以随机地或伪随机地产生。在步骤506,系统然后选择第一/下一个路由迭代i。如上所述,更新操作可以在从1到α的多个路由迭代中递归地生成路由信息。

在步骤508中,系统至少部分地基于从tab_dist(sx,i-1)获得的识别信息来生成tab_id(sx,i)的第i条记录。在不存在tab_id(sx,i-1)的实施例中(例如,在tab_dist中只有一个表,例如具有新的内存池节点),从tab_rnd表位置选择一个到系统(例如,内存池节点)随机关键字的。

在步骤510,系统根据tab_id(sy)表生成包括节点地址和识别信息的tab_dist(sx,i)记录。如上结合图3所述,进行随机游走,并从作为进行随机游走的结果而联系的内存池节点获得地址信息。内存池节点的该识别信息和地址信息然后作为记录存储在tab-dist(sx,i)表中。

在步骤512,系统生成tab_close(sx,i)记录,包括从作为进行随机游走的结果而联系的内存池节点的tab_rnd表获得的信息。如以上结合图3所述,内存池节点传输在更新操作的特定迭代中在字典顺序上最接近识别信息的tab_rnd的本地(相对于内存池节点)记录。

在步骤514,系统确定是否还有其他迭代514。例如,过程500可以具有设定的迭代次数。在另一个示例中,执行过程500的系统在更新操作的初始化期间在步骤504确定迭代次数。在又一个示例中,系统可以继续迭代过程500,直到获得一定量的路由信息。如果没有达到迭代次数,则系统返回步骤506。如果达到迭代次数,则系统进行到步骤516,并完成更新操作。

注意,在图5所示的示例性过程500中进行的一个或多个操作可以按照各种顺序及其组合(包括并行)进行。此外,可以省略图5所示的示例性过程500中进行的一个或多个操作。

图6以流程图形式示出根据一个实施例的用于执行获取操作以获得与用于dmp网络的内存池节点的关键字相关联的数据的示例性过程600。处理600中的一部分或全部可以在配置有可执行指令和/或其他数据的一个或多个计算机系统的控制下进行,并且可以被实现为在一个或多个处理器上共同执行的可执行指令。可执行指令和/或其他数据可以存储在非暂时性计算机可读存储介质上(例如,永久存储在磁介质、光介质或闪存介质上的计算机程序)。示例性过程600可以由内存池节点(例如dmp(例如结合图2所述的dmp206)的结合图2所述的内存池节点204的其中一个)进行。

也就是说,内存池节点(例如结合图2所述的其中一个内存池节点204)可以进行示例性过程600,以执行结合图6所述的获取操作。这种内存池节点可包括任何合适的计算装置(例如,数据中心的服务器、客户端计算装置、计算资源服务提供商的分布式系统中的多个计算装置、或任何合适的电子客户端装置)。

示例性过程600包括一系列操作,其中进行示例性过程600的系统执行dht协议的获取操作,如上所述。在示例性过程600的步骤602,系统接收对于针对与关键字k相关联的值的请求。该请求可以从dmp网络外部的系统接收,或者从作为dmp网络成员的内存池节点接收。

在步骤604,系统在表tab_close中进行查找操作,以确定与关键字k相关联的值是否位于表的记录中。在步骤606,如果记录是在表中,则系统返回与关键字相关联的值。但是,如果记录不是在表tab_close中,则系统可以进行到步骤608。

在步骤608,系统确定与tab_dist表中包含的关键字k最接近的识别信息(id*)。如上所述,可以至少部分地基于以上结合图3所述的更新操作来确定距离。

在步骤610,系统可以选择迭代i。可以随机或伪随机地选择迭代。此外,迭代可以表示在更新操作的迭代期间生成的特定表,如上所述。

在步骤612,系统至少部分地基于在id*与k之间的z,从表tab_dist(sx,i)中选择随机指针z。如上所述,指针可以是到实现dht的dmp网络的另一个内存池节点的地址。通过这种方式,在获取操作的连续迭代期间,系统可以在关键字空间中向与包含该特定内存池的表tab_close中的值的关键字相关联的特定内存池节点移动。

在步骤614,系统在指针z处查询内存池节点。在各个实施例中,查询包括关键字k。此外,查询可包括附加信息,例如与请求者相关联的地址。在各个实施例中,附加信息使得与关键字k相关联并包含该值的内存池节点能够将该值直接传输到与请求者相关联的地址。这与将响应传输到负责传输查询的内存池节点相反,并且因为信息是沿着同一网络路径通过dmp网络返回的,所以能够避免额外的网络流量。

因此,说明书和附图应视为说明性的而非限制性的。但是显然,在不脱离权利要求中所阐述的本发明的更广泛精神和范围的情况下,可以对其进行各种修改和改变。

注意,在图6所示的示例性过程600中进行的一个或多个操作可以按照各种顺序及其组合(包括并行)进行。此外,可以省略图6所示的示例性过程600中进行的一个或多个操作。在各个实施例中,存在将进行过程600的最大迭代次数,并且如果没有将值返回,则过程600终止。

图7以示意图形式示出可以在其中实现本发明各个实施例的示例性计算装置700。图7示出可以用于实践本公开至少一个实施例的示例性计算装置700的简化图。在各个实施例中,可将示例性计算装置700用于实现本文所示和所述的任何系统或方法。例如,可将示例性计算装置700配置为用作数据服务器、网络服务器、便携式计算装置、个人计算机或任何电子计算装置。如图7所示,示例性计算装置700可包括一个或多个处理器702,处理器702可以被配置为经由总线子系统704与多个外围子系统通信并且可操作地联接。可以利用处理器702来实现本文所述方法。这些外围子系统可包括存储子系统706(包括存储器子系统708和文件存储子系统710)、一个或多个用户接口输入装置712、一个或多个用户接口输出装置714以及网络接口子系统716。可将这种存储子系统706用于与本公开所述区块链交易或操作相关联的信息的临时或长期存储。

总线子系统704可以提供用于使得示例性计算装置700的各个组件和子系统能够按预期相互通信的机制。虽然将总线子系统704示意性地示出为单个总线,但是总线子系统的替代性实施例可以利用多个总线。网络接口子系统716可以提供到其他计算装置和网络的接口。网络接口子系统716可以充当接口,用于从其他系统接收数据,以及从示例性计算装置700向其他系统传输数据。例如,网络接口子系统716可以使得用户能够将装置连接到无线网络或一些其他网络,例如本文所述的网络。总线子系统704可以用于经由网络接口子系统716将与本公开所述区块链交易或操作相关联的数据传递到一个或多个处理器702和/或系统之外的其他实体。

用户接口输入装置712可包括一个或多个用户输入装置,例如键盘、指示装置(例如集成鼠标、轨迹球、触摸板或图形输入板)、扫描仪、条形码扫描仪、并入显示器的触摸屏、音频输入装置(例如语音识别系统、麦克风)和其他类型的输入装置。通常,术语“输入装置”的使用意图包括用于将信息输入计算装置700的所有可能类型的装置和机制。一个或多个用户接口输出装置714可包括显示子系统、打印机或非视觉显示器,例如音频输出装置等。显示子系统可以是阴极射线管(crt)、平板装置,例如液晶显示器(lcd)、发光二极管(led)显示器或投影或其他显示装置。通常,术语“输出装置”的使用意图包括用于从计算装置700输出信息的所有可能类型的装置和机制。一个或多个输出装置714例如可用于向用户呈现用户接口,当这种交互可能是适当的时,有助于用户与执行本文所述过程的应用及其变化的用户交互。

存储子系统706可提供用于存储可以提供本公开至少一个实施例的功能的基本编程和数据构造的计算机可读存储介质。当通过一个或多个处理器执行时的应用程序(程序、代码模块、指令)可以提供本公开一个或多个实施例的功能,并且可以存储在存储子系统706中。这些应用程序模块或指令可通过一个或多个处理器702执行。存储子系统706可以附加性地提供用于存储根据本公开使用的数据的存储库。存储子系统706可包括存储器子系统708和文件/磁盘存储子系统710。

存储器子系统708可包括多个存储器,包括用于在程序执行期间存储指令和数据的主随机存取存储器(ram)718以及可以存储固定指令的只读存储器(rom)720。文件存储子系统710可以提供用于程序和数据文件的非暂时性永久(非易失性)存储,并且可包括硬盘驱动器、软盘驱动器以及相关联的可移动介质、压缩盘只读存储器(cd-rom)驱动器、光盘驱动器、可移动介质盒以及其他类似的存储介质。

示例性计算装置700可包括至少一个本地时钟724。本地时钟724可以是表示从特定起始日期开始发生的滴答数的计数器,并且可以整体位于示例性计算装置700内。时钟724可用于以特定的时钟脉冲同步示例性计算装置700和其中包括的所有子系统中的处理器中的数据传输,并且可用于协调示例性计算装置700与数据中心中其他系统之间的同步操作。在一个实施例中,本地时钟724是原子钟。在另一个实施例中,本地时钟是可编程间隔计时器。

示例性计算装置700可以是各种类型,包括便携式计算机装置、平板计算机、工作站或本文所述的任何其他装置。此外,示例性计算装置700可包括可通过一个或多个端口726(例如,usb、耳机插孔、lightning连接器等)连接到示例性计算装置700的另一个装置。可以连接到示例性计算装置700的装置可包括被配置为接受光纤连接器的多个端口。因此,可将可以连接到示例性计算装置700的装置配置为将光信号转换为电信号,电信号可通过将装置连接到示例性计算装置700的端口进行传输,以进行处理。因为计算机和网络不断变化的性质,所以对图7所示示例性计算装置700的描述仅仅是为了说明装置的实施例,作为特定示例。与图7所示系统相比具有更多或更少组件的很多其他配置都是可能的。

可将本发明的一个或多个实施例描述为提供改进的区块链实现的方法和系统。通过实现更快的读写操作,它可提高经由区块链网络的操作的速度。此外,它可以为区块链实现的系统提供更高的安全性,因为它可以防止攻击或恶意活动,例如分布式内存池中的路由和存储攻击等等。因此,本发明可以提供更安全的区块链解决方案。此外,它可以提供一种机制,以确保在网络范围内就分布式存储池中存储的区块链交易的有效性达成共识,从而增强网络的整体性能、可靠性和安全性。它还为区块链系统提供改进的架构、改进的存储资源和能力。也可以提供本发明的其他优点。

应当注意,在描述所公开实施例的上下文中,除非另有说明,否则使用与进行“指令”通常不进行的操作的可执行指令(也称为代码、应用程序、代理等)有关的表达(例如,数据的传输、计算等)表示指令正在被机器执行,从而使得机器进行指定操作。

应当注意,上述实施例是说明而不是限制本发明,并且本领域技术人员将能够设计很多替代实施例而不脱离所附权利要求限定的本发明的范围。在权利要求中,括号中的任何附图标记都不应解释为限制权利要求。词语“包括”等不排除除了在任何权利要求或说明书中作为整体列出的元件或步骤之外的元件或步骤的存在。在本说明书中,“包括”表示“包含”或者“由…构成”。元素的单数引用不排除这些元素的复数引用,反之亦然。本发明可通过包括若干不同元件的硬件,以及通过适当编程的计算机来实现。在列举了若干器件的装置权利要求中,这些器件中的若干个可通过硬件的一个项目或相同项目来具体实施。在相互不同的从属权利要求中陈述某些措施的纯粹事实并不表示这些措施的组合不能用于获益。

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