基于NDN的区块链同步方法和装置与流程

文档序号:12866000阅读:994来源:国知局
本发明涉及通信
技术领域
:,特别涉及一种基于命名数据网络(nameddatanetworking,ndn)的区块链同步方法和装置。
背景技术
::区块链(blockchain)系统是一种去中心化的、不可更改的共享分布式智能数据库。区块链最早诞生于比特币,是一种按照时间顺序将区块以顺序相连的方式组合成的链式数据结构,为比特币系统提供技术支持。其中,每个区块也就是一个数据块,每一个数据块中包含了一次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。在区块链系统中,用户设备生产出新的区块后,将区块广播出去。网络中的其他用户设备在收到区块后,会验证其合法性;如果通过验证,则用户设备将该区块加入本地区块链中。这样,每个用户设备都存储着一条区块链,若系统运行正确,这些用户设备的区块链都是一样的。目前,区块链系统主要基于传输控制协议/因特网互联协议(transmissioncontrolprotocol/internetprotocol,tcp/ip)网络架构,基于tcp/ip网络架构的区块链系统普遍存在以下问题:(1)无法实现完全去中心化需求。由于业务需要,有很多区块链系统有去中心化的需求。例如目前最成熟的项目之一,比特币,在理论上是一个完全去中心化的纯粹的对等网络(peertopeer,p2p)系统。但在实际实现中,考虑到通信的困难,开发者在系统中增加了超级节点,用于向请求连接的用户设备分发各类数据。超级节点的设置,增加了比特币的安全风险,因为超级节点可以联合起来对用户设备组织欺诈活动。同时,这种架构还会导致超级节点的负载过大,存在服务质量无法提高和单点崩溃的问题。(2)难以实现就近下载功能。按照设计,区块链系统的部分用户设备会存储当前系统的最新的区块链,当有新的用户设备请求获取区块链时,它们会返回相应的数据,但是如何让新的用户设备能够从存储有最新的区块链且距离最近的用户设备中获取区块链,一直是基于tcp/ip网络架构的区块链存在的问题。技术实现要素:为了解决现有技术中区块链技术存在的问题,本发明实施例提供了一种基于ndn的区块链同步方法和装置。第一方面,本发明实施例提供了一种基于命名数据网络的区块链同步方法,所述方法包括:用户设备向网络节点发送区块同步请求包,所述区块同步请求包的名称包括命名数据网络协议标识、应用标识、请求包类型和区块链的状态信息,所述区块链的状态信息用于指示所述用户设备存储的区块链中高度最高的区块的高度;接收所述网络节点返回的同步数据包,并提取所述同步数据包中的区块存储到区块链数据库。本发明实施例通过基于命名数据网络进行区块同步,由于其基于命名数据网络的区块链架构,不需要在设置超级节点,避免了设置超级节点所带来的问题;同时,在命名数据网络中,区块同步请求包在转发过程中,可以同时向多个其他用户设备进行转发,并且距离最近的用户设备会最先返回对应的数据包,从而实现了区块的就近下载;另外,命名数据网络内的网络节点在接收到区块同步请求包时,可以查找自己的内容存储库,并将对应的数据包提供给用户设备,利用网络节点的内容存储库实现了数据的复用,降低了数据传输量以及传输延迟。在本发明实施例的一种实现方式中,所述用户设备向网络节点发送区块同步请求包,包括:确定存储的区块链中高度最高的区块,并计算其哈希值;将所述区块链中高度最高的区块的哈希值作为所述区块链的状态信息,生成所述区块同步请求包;将所述区块同步请求包发送给所述网络节点。在该实现方式中,采用存储的区块链中高度最高的区块的哈希值作为所述区块链的状态信息,计算方便。在本发明实施例的另一种实现方式中,所述方法还包括:当在所述用户设备发送所述同步请求包之后的设定时间内未接收到所述同步数据包时,向所述网络节点发送区块搜索请求包,所述区块搜索请求包的名称包括命名数据网络协议标识、应用标识、请求包类型和区块标识,所述区块标识用于指示所述用户设备搜索的区块的上一区块的高度,所述用户设备搜索的区块的上一区块的高度为所述用户设备存储的区块链中高度最高的区块的高度;当接收到所述网络节点返回的搜索数据包时,提取所述搜索数据包中的区块存储到区块链数据库,然后发送新的区块搜索请求包,所述新的区块搜索请求包的区块标识与所述区块搜索请求包的区块标识不同;当在预定时间内未接收到所述网络节点返回的搜索数据包时,重新发送所述区块搜索请求包。在本发明实施例的另一种实现方式中,所述方法还包括:接收网络节点发送的另一用户设备发送的区块同步请求包;根据所述另一用户设备发送的区块同步请求包中的区块链的状态信息,确定所述另一用户设备存储的区块链中高度最高的区块的高度;比较确定出的所述另一用户设备存储的区块链中高度最高的区块的高度和所述用户设备存储的区块链中高度最高的区块的高度,确定所述另一用户设备需要同步的区块;根据所述另一用户设备需要同步的区块生成同步数据包,并返回给所述另一用户设备。在本发明实施例的另一种实现方式中,所述方法还包括:当所述用户设备成功创建区块时,向网络内的网络节点广播所述区块的信息;接收网络节点发送的区块搜索请求包,所述区块搜索请求包用于请求所述用户设备新创建的区块;向所述网络节点发送搜索请求包,所述搜索数据包包括所述用户设备新创建的区块。第二方面,本发明实施例还提供了一种基于命名数据网络的区块链同步方法,所述方法包括:网络节点接收用户设备发送的区块同步请求包,所述区块同步请求包的名称包括命名数据网络协议标识、应用标识、请求包类型和区块链的状态信息,所述区块链的状态信息用于指示所述用户设备存储的区块链中高度最高的区块的高度;在内容存储库中查找所述区块同步请求包对应的同步数据包,所述同步数据包包括所述用户设备未更新的区块;当在所述内容存储库中查找到所述区块同步请求包对应的同步数据包时,将所述同步数据包返回所述用户设备;当在所述内容存储库中未查找到所述区块同步请求包对应的同步数据包时,在所述网络节点的待定兴趣表中查找所述区块同步请求包对应的条目;当所述网络节点的待定兴趣表中未查找到所述区块同步请求包对应的条目时,在待定兴趣表中添加对应的条目,并在转发信息表中查询与所述区块同步请求包对应的接口,通过确定出的接口转发所述区块同步请求包;当所述网络节点的待定兴趣表中查找到所述区块同步请求包对应的条目时,在查找到的条目中添加接收所述区块同步请求包的接口;当接收到所述区块同步请求包对应的同步数据包时,根据所述待定兴趣表中的条目转发所述同步数据包。本发明实施例通过基于命名数据网络进行区块同步,由于其基于命名数据网络的区块链架构,不需要在设置超级节点,避免了设置超级节点所带来的问题;同时,在命名数据网络中,区块同步请求包在转发过程中,可以同时向多个其他用户设备进行转发,并且距离最近的用户设备会最先返回对应的数据包,从而实现了区块的就近下载;另外,网络节点在接收到区块同步请求包时,可以查找自己的内容存储库,并将对应的数据包提供给用户设备,利用网络节点的内容存储库实现了数据的复用,降低了数据传输量以及传输延迟。在本发明实施例的一种实现方式中,所述方法还包括:接收用户设备发送的区块搜索请求包,所述区块搜索请求包的名称包括命名数据网络协议标识、应用标识、请求包类型和区块标识,所述区块标识用于指示所述用户设备搜索的区块的上一区块的高度;在内容存储库中查找所述区块搜索请求包对应的搜索数据包,所述搜索数据包包括所述用户设备搜索的区块;当在所述内容存储库中查找到所述区块搜索请求包对应的搜索数据包时,将所述搜索数据包返回所述用户设备;当在所述内容存储库中未查找到所述区块搜索请求包对应的搜索数据包时,在所述网络节点的待定兴趣表中查找所述区块搜索请求包对应的条目;当所述网络节点的待定兴趣表中未查找到所述区块搜索请求包对应的条目时,在待定兴趣表中添加对应的条目,并在转发信息表中查询与所述区块搜索请求包对应的接口,通过确定出的接口转发所述区块搜索请求包;当所述网络节点的待定兴趣表中查找到所述区块搜索请求包对应的条目时,在查找到的条目中添加接收所述区块搜索请求包的接口;当接收到所述区块搜索请求包对应的搜索数据包时,根据所述待定兴趣表中的条目转发所述搜索数据包。在该实现方式中,网络节点在接收到区块搜索请求包时,可以查找自己的内容存储库,并将对应的数据包提供给用户设备,利用网络节点的内容存储库实现了数据的复用,降低了数据传输量以及传输延迟。在本发明实施例的另一种实现方式中,所述方法还包括:当在所述转发信息表中未查询到与所述区块搜索请求包对应的接口时,存储所述区块搜索请求包;当所述网络节点的转发信息表进行更新,且更新后的所述转发信息表中包括所述区块搜索请求包对应的条目时,在转发信息表中查询与所述区块搜索请求包对应的接口;通过确定出的接口转发所述区块搜索请求包。在该实现方式中,用户设备在进行新区块的搜索时,通常系统内还未产生该区块,所以必须等待系统内有用户产生了该区块并广播了区块信息,然后根据该区块信息更新转发信息表后,方能实现区块搜索请求包的转发以及搜索数据包的返回。第三方面,本发明实施例提供了一种基于命名数据网络的区块链同步装置,所述装置包括用于实现第一方面所述的方法的单元,例如发送单元和接收单元。第四方面,本发明实施例提供了一种基于命名数据网络的区块链同步装置,所述装置包括用于实现第二方面所述的方法的单元,例如接收单元、查找单元、处理单元和发送单元。第五方面,本发明实施例还提供了一种基于命名数据网络的区块链同步装置,所述装置包括:存储器、与存储器连接的处理器、收发器,所述存储器用于存储软件程序以及模块,当所述处理器用于运行或执行存储在所述存储器内的软件程序以及模块时,可以执行第一方面任一实现方式所述的方法。第六方面,本发明实施例还提供了一种基于命名数据网络的区块链同步装置,所述装置包括:存储器、与存储器连接的处理器、收发器,所述存储器用于存储软件程序以及模块,当所述处理器用于运行或执行存储在所述存储器内的软件程序以及模块时,可以执行第二方面任一实现方式所述的方法。第七方面,本发明实施例还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现如第一方面任一实现方式所述的基于命名数据网络的区块链同步方法。第八方面,本发明实施例还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现如第二方面任一实现方式所述的基于命名数据网络的区块链同步方法。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例提供的一种ndn的网络架构示意图;图2a是本发明实施例提供的一种基于ndn的区块链同步装置的硬件结构图;图2b是本发明实施例提供的一种基于ndn的区块链同步装置的硬件结构图;图3为本发明实施例提供的一种基于ndn的区块链同步方法的流程图;图3a为本发明实施例提供的一种基于ndn的区块链同步方法的应用场景图;图3b为本发明实施例提供的一种基于ndn的区块链同步方法的应用场景图;图4为本发明实施例提供的一种基于ndn的区块链同步装置的结构示意图;图5为本发明实施例提供的一种基于ndn的区块链同步装置的结构示意图。具体实施方式在本文提及的“模块”是指存储在存储器中的能够实现某些功能的程序或指令;在本文中提及的“单元”是指按照逻辑划分的功能性结构,该“单元”可以由纯硬件实现,或者,软硬件的结合实现。为了解决现有基于tcp/ip架构的区块链方案所存在的问题,本发明实施例提供了一种基于ndn的区块链实现方案,具体包括基于ndn的区块链同步方法和基于ndn的区块链同步装置。为了便于理解,下面现对先ndn进行简单介绍。图1示出了本发明实施例提供的一种ndn的网络架构。如图1所示,该ndn100包括多个网络节点101(包括网络节点a-e),用户设备102与网络节点101连接,该用户设备102既是ndn中的生产者,也是ndn中的消费者。其中,消费者是发送兴趣包的数据请求方,生产者是具有数据包的数据提供方。该用户设备102为终端设备,具体可以是计算机、服务器、移动终端等。ndn中的网络节点101保存有三个数据结构:转发信息表(forwardinginformationbase,fib)、待定兴趣表(pendinginteresttable,pit)以及内容存储库(contentstore,cs)。具体地,cs用于存储经过该网络节点的数据包,其存储模式是数据包的名字+数据,如下表所示:名字数据ndn/<appname>/sync/<blockchainstate>……pit主要用于存储接收到的兴趣包的名字以及接收该兴趣包的接口,其存储模式是兴趣包的名字+接口列表,如下表所示:名字接口列表ndn/<appname>/sync/<blockchainstate>0,1fib主要用于路由转发,用于存储不同名字对应的转发接口,其存储模式为名字(或前缀)+接口列表,如下表所示:名字接口列表ndn/<appname>/sync/<blockchainstate>2消费者发出的兴趣包经过某个网络节点101时,该网络节点101在cs中查找该兴趣包请求的数据包,如果cs中存在该兴趣包请求的数据包,则向消费者返回该数据包;如果cs中不存在该数据包,则在pit中查询是否存在该兴趣包对应的条目。如果pit中存在该兴趣包对应的条目,则将接收该兴趣包的接口添加到该条目中;如果pit中不存在该兴趣包对应的条目,则在pit中新增该兴趣包对应的条目,该条目包括接收该兴趣包的接口,网络节点101将兴趣包的名字在fib中进行匹配,选择接口将兴趣包转发出去。如果转发过程中,另一网络节点101的cs中存在该兴趣包请求的数据包时,则该另一网络节点101按照兴趣包转发路径返回数据包。如果转发过程中,各个网络节点101的cs中均不存在该兴趣包请求的数据包,则该兴趣包将被发往数据包的生产者,由生产者向消费者返回数据包。在数据包返回的过程中,如果网络节点101接收到该兴趣包请求的数据包时,网络节点101根据pit中该兴趣包对应的条目选择接口发送该数据包,从而实现将数据包发送至请求该数据包的消费者。其中,网络节点101在进行兴趣包转发时,采用最长前缀匹配机制,确定转发接口。本发明实施例提供的区块同步方案正是基于上述ndn网络架构实现,详见后述详细实施例。下面先结合具体的硬件结构对实现本发明实施例提供的基于ndn的区块链同步装置进行说明。图2a示出了实现本发明实施例提供的一种基于ndn的区块链同步装置的硬件结构,该基于ndn的区块链同步装置可以为前述网络中的用户设备。如图2a所示,该基于ndn的区块链同步装置120包括:处理器11、收发器12、存储器13。处理器11包括一个或者一个以上处理核心,处理器11通过运行软件程序以及模块,从而执行各种功能应用以及信息处理。收发器12、存储器13以及处理器11通过总线耦合。存储器13可用于存储软件程序以及模块。存储器可存储操作系统14、至少一个功能的应用程序模块15。应用程序模块15至少包括:发送模块151和接收模块152。可选地,处理器11用于执行应用程序模块15中的各个模块,实现如图3中由用户设备所需要执行的步骤。此外,存储器13是一种计算机可读存储介质,可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随时存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。本领域技术人员可以理解,图2a中所示出的基于ndn的区块链同步装置120的结构并不构成对终端设备的限定,可以包括比图示更多或更少的部件或组合某些部件,或者不同的部件布置。图2b示出了实现本发明实施例提供的一种基于ndn的区块链同步装置的硬件结构,该基于ndn的区块链同步装置可以为前述网络中的网络节点。如图2b所示,该基于ndn的区块链同步装置220包括:处理器21、通信接口22、存储器23。处理器21包括一个或者一个以上处理核心,处理器21通过运行软件程序以及模块,从而执行各种功能应用以及信息处理。通信接口22、存储器23以及处理器21通过总线耦合。存储器23可用于存储软件程序以及模块。存储器可存储操作系统24、至少一个功能的应用程序模块25。应用程序模块25至少包括:接收模块251、查找模块252、处理模块253和发送模块254。可选地,处理器21用于执行应用程序模块25中的各个模块,实现如图3中由网络节点所需要执行的步骤。此外,存储器23是一种计算机可读存储介质,可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随时存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。本领域技术人员可以理解,图2b中所示出的基于ndn的区块链同步装置220的结构并不构成对终端设备的限定,可以包括比图示更多或更少的部件或组合某些部件,或者不同的部件布置。图3为本发明实施例提供的一种基于ndn的区块链同步方法的交互图,如图3所示,该区块链同步方法由图1中的用户设备和网络节点执行,该方法包括:s301:第一用户设备向网络节点发送区块同步请求包。其中,区块同步请求包采用兴趣包的格式,用于进行区块同步。该区块同步请求包的名称采用具有层次结构化的可变长度标识符作为命名规则,该区块同步请求包的名称具体可以包括ndn协议标识、应用标识、请求包类型和区块链的状态信息,区块链的状态信息用于指示用户设备存储的区块链中高度最高的区块的高度。具体地,区块同步请求包的名称可以如下ndn/<appname>/sync/<blockchainstate>。其中,ndn/是ndn协议标识;<appname>为应用标识,例如该<appname>具体可以为blockndn;sync为请求包的类型,用于表示该请求包为区块同步请求包;<blockchainstate>为区块链的状态信息,携带有第一用户设备存储的区块链的状态信息,具体可以是第一用户设备存储的区块链中高度最高的区块的消息摘要,例如第一用户设备存储的区块链中高度最高的区块的哈希值,哈希值的格式如下“000000000000038cc0f7…”。其中,区块链系统用高度来表明区块链的规模,高度为0的区块是该区块链的第一个区块,依次类推,给每一个区块命名,最新收到的区块为高度最高的区块。进一步地,在步骤s301之前,该方法还包括:生成区块同步请求包。具体地,生成区块同步请求包的过程如下:第一用户设备确定存储的区块链中高度最高的区块,并计算其哈希值;根据该哈希值生成区块同步请求包。需要说明的是,第一用户设备在新接入区块链系统后,本地区块链需要进行更新,此时第一用户设备向网络节点发送同步请求包。s302:网络节点接收该区块同步请求包,在cs中查找该区块同步请求包对应的同步数据包。如果在cs中查找到区块同步请求包对应的同步数据包时,则执行步骤s303;如果在cs中未查找到区块同步请求包对应的同步数据包时,则执行步骤s304。由于,网络节点的cs会存储数据包,所以如果之前有其他用户设备在第一用户设备相同的区块链状态下进行过区块同步,则网络节点中可能存储了与该区块同步请求包对应的同步数据包,此时网络节点可以直接将对应的同步数据包发回第一用户设备。例如,用户设备a在步骤s301之前请求过区块同步且获得了同步数据包a,该同步数据包a被存储在了网络节点内,用户设备a请求区块同步时的区块链高度为40,如果第一用户设备在步骤s301中请求同步时的区块链高度也是40,则此时存储有同步数据包a的网络节点可以将该同步数据包a返回给第一用户设备。s303:网络节点将同步数据包返回第一用户设备。具体地,网络节点在cs中查找到与接收到的区块同步请求包,然后按照接收该区块同步请求包的接口返回给第一用户设备。s304:网络节点在网络节点的pit中查找区块同步请求包对应的条目;当网络节点的pit中未查找到区块同步请求包对应的条目时,在pit中添加对应的条目,并执行步骤s305;当网络节点的pit中查找到区块同步请求包对应的条目时,在查找到的条目中添加接收区块同步请求包的接口。在这一步中,如果网络节点在pit表中未查找到该区块同步请求包对应的条目,则说明在此之前没有网络节点转发过相同的区块同步请求包,此时网络节点需要在pit表中添加该区块同步请求包对应的条目。该条目包括区块同步请求包的名称以及接收该区块同步请求包的接口。如果网络节点在pit表中查找到该区块同步请求包对应的条目,则说明在此之前已经有网络节点转发过相同的区块同步请求包,此时网络节点只需要在对应的条目内加上接收该区块同步请求包的接口,使得后续接收到对应的同步数据包时,能够通过pit表的条目转发给第一用户设备。s305:网络节点在fib表中查询与区块同步请求包对应的接口,通过确定出的接口转发区块同步请求包。具体地,网络节点采用区块同步请求包的名称在fib表中进行匹配,确定对应的转发接口;然后采用确定出的转发接口进行区块同步请求包的转发。其中,fib表的格式如前文所述,匹配可以采用最长匹配规则实现。网络节点在fib表中查询与区块同步请求包对应的接口,如果查询到与区块同步请求包对应的接口,则通过确定出的接口转发区块同步请求包。如果未查找到与区块同步请求包对应的接口,则将该区块同步请求包存储起来,直到fib更新后重新进行匹配,确定对应的转发接口。由于fib中,区块同步请求包的名称匹配到的条目可能存在多个转发接口,因此,网络节点可能会同时采用多个转发接口对该区块同步请求包进行转发,进而使得该区块同步请求包能够被转发到不同的用户设备。由于ndn网络中存在多个网络节点,因此,在区块同步请求包转发的过程中,每个接收到该区块同步请求包的网络节点均按照步骤s302-s305的方式执行。s306:第二用户设备接收到该区块同步请求包,并返回同步数据包。具体地,第二用户设备在接收到该区块同步请求包后,根据该区块同步请求包中的区块链的状态信息,确定第一用户设备需要同步的区块;根据第一用户设备需要同步的区块生成同步数据包,并返回给第一用户设备。其中,根据该区块同步请求包中的区块链的状态信息,确定第一用户设备需要同步的区块的过程如下:第二用户设备通过区块同步请求包的命名规则提取区块链的状态信息;根据该区块链的状态信息确定第一用户设备存储的区块链中高度最高的区块的高度;比较确定出的第一用户设备存储的区块链中高度最高的区块的高度和第二用户设备存储的区块链中高度最高的区块的高度,确定第一用户设备需要同步的区块。例如,根据区块同步请求包确定出的第一用户设备存储的区块链中高度最高的区块为第40区块,而第二用户设备存储的区块链中高度最高的区块为第80区块,则第一用户设备需要同步的区块为第41-80区块。其中,根据该区块链的状态信息确定第一用户设备存储的区块链中高度最高的区块,具体是根据第一用户设备存储的区块链中高度最高的区块的哈希值,确定对应的区块的过程,这里不再赘述。如果第二用户设备存储的区块链中高度最高的区块的高度小于或等于第一用户设备存储的区块链中高度最高的区块的高度,则说明第二用户设备不能为第一用户设备提供区块,此时第二用户设备不会返回同步数据包给第一用户设备。s307:网络节点接收该同步数据包,并将该同步数据包发送给第一用户设备。具体地,网络节点根据pit表中的条目,查找接收该同步数据包对应的区块同步请求包的接口;通过查找到的接口转发同步数据包。在转发完成后,从pit表中删除对应的条目,避免向第一用户设备重复发送同步数据包。基于这种转发机制,使得第一用户设备请求同步数据包时,通常能够得到距离最近的用户设备返回的同步数据包,原因如下:由于不同的用户设备与第一用户设备之间的距离可能不同,因而区块同步请求包以及同步数据包的传输的距离均不同,导致返回同步数据包所需时间不同,距离第一用户设备近的用户设备先返回同步数据包,转发该同步数据包的网络节点在转发之后,会将pit表中对应的条目删除掉,后续其他用户设备返回的同步数据包并不会再转发到第一用户设备。以图3a所示的网络为例,alice、bob、charles和dave是网络中的四个用户设备。alice和charles已经更新了全网最新的区块,区块高度都达到了80,这两个用户设备都支持同步服务,bob和dave目前区块高度为40和0。黑色线段的长度代表两节点实际距离长短。bob和dave分别发送带有当前最高区块哈希值的同步请求包到ndn网络中,由于物理距离不同,alice响应了bob的请求,具体地,alice根据同步请求包的命名提取bob的区块链的状态信息并与自己的区块链比对,发现其缺少从高度41到高度80的所有区块,于是alice将这些区块打包进同步数据包中返回给bob。同样地,charles也将1号到80号区块发送给dave。由此,bob和dave完成了区块同步。由于ndn网络中存在多个网络节点,因此,在同步数据包转发的过程中,每个接收到该同步数据包的网络节点均按照步骤s307的方式执行。s308:第一用户设备接收该同步数据包,并提取同步数据包中的区块存储到区块链数据库。具体地,第一用户设备提取同步数据包中的区块,然后验证提取到的区块的合法性,如果这些区块的合法性通过验证,则将其存储到区块链数据库中,如果不合法则直接丢弃。第一用户设备重复执行步骤s301和308,当在步骤s301后的设定时间内没有接收到同步数据包时,说明第一用户设备已经同步了所有区块,则执行步骤s309。s309:第一用户设备向网络节点发送区块搜索请求包。其中,区块搜索请求包采用兴趣包的格式,用于进行区块搜索。该区块搜索请求包的名称采用具有层次结构化的可变长度标识符作为命名规则,该区块搜索请求包的名称具体可以包括ndn协议标识、应用标识、请求包类型和区块标识,区块标识用于指示用户设备搜索的区块的上一区块的高度,用户设备搜索的区块的上一区块的高度为用户设备存储的区块链中高度最高的区块的高度。例如,区块搜索请求包所要搜索的区块为第40区块,则该区块标识对应第39区块。具体地,区块搜索请求包的名称可以如下ndn/<appname>/blocks/<block’sdigest>。其其中,ndn/是ndn协议标识;<appname>为应用标识,例如该<appname>具体可以为blockndn;blocks为请求包的类型,用于表示该请求包为区块搜索请求包,<block’sdigest>为区块标识,具体可以是第一用户设备存储的区块链中高度最高的区块的消息摘要,例如第一用户设备存储的区块链中高度最高的区块的哈希值,哈希值的格式如下“000000000000024b89b4…”,该哈希值是高度为0的区块的哈希值,具有该哈希值的区块搜索请求包用于搜索高度为1的区块。进一步地,在步骤s309之前,该方法还包括:生成区块搜索请求包。具体地,生成区块搜索请求包的过程如下:第一用户设备确定待搜索的区块,并计算其哈希值;根据该哈希值生成区块搜索请求包。通常,该用户设备搜索的区块为最新的区块,比如后续步骤s310-s314所指的区块搜索。当然,该区块搜索请求包也可以用于搜索用户设备已有的区块,这样做能够对已有的区块的正确性进行判断,此时区块搜索请求包的发送和搜索数据包的接收过程可以参照前文的区块同步过程。s310:网络节点接收该区块搜索请求包,在cs中查找该区块搜索请求包对应的搜索数据包。如果在cs中查找到区块搜索请求包对应的搜索数据包时,则执行步骤s311;如果在cs中未查找到区块搜索请求包对应的搜索数据包时,则执行步骤s312。步骤s310的详细过程可以参照步骤s302。s311:网络节点将搜索数据包返回第一用户设备。由于通常第一用户设备在发送搜索请求包时,网络中还并不存在新的区块(比第一用户的区块链中任一区块的高度更高的区块),所以网络节点内通常也没有存储对应的搜索数据包。s312:网络节点在网络节点的pit中查找区块搜索请求包对应的条目;当网络节点的pit中未查找到区块搜索请求包对应的条目时,在pit中添加对应的条目,并执行步骤s313;当网络节点的pit中查找到区块搜索请求包对应的条目时,在查找到的条目中添加接收区块搜索请求包的接口。步骤s312的详细过程可以参照步骤s304。s313:网络节点在fib表中查询与区块搜索请求包对应的接口,如果查询到与区块搜索请求包对应的接口,则通过确定出的接口转发区块搜索请求包,然后跳转到步骤s317。如果未查找到与区块搜索请求包对应的接口,则将该区块搜索请求包存储起来。步骤s313的详细过程可以参照步骤s305。s314:第三用户设备创建新的区块。具体地,区块链中的每个用户设备都是矿工,即区块生产者,所以每个用户设备都会在更新完后发送区块搜索请求包,也可能在发送区块搜索请求包的同时产生新的区块。值得说明的是,这里的第三用户设备可以和第二用户设备为同一用户设备,也可以为不同用户设备。这里的第三用户设备可以和第一用户设备为同一用户设备,如果第三用户设备和第一用户设备为同一用户设备,则在后续过程中不会向第一用户设备返回搜索请求包。进一步地,该方法还可以包括:第三用户设备将新创建的区块加入本地区块链。s315:网络节点更新fib表,添加对应该新的区块的条目。第三用户设备在创建新的区块后,与第三用户设备属于同一局域网的网络节点根据局域网交互信息,更新自身的fib表项。具体地,在fib表中添加对应该新的区块的条目。而网络节点之间根据命名数据链路状态路由协议(name-datalinkstateroutingprotocol,nlsr)来同步各自之间的fib表。也就是说,ndn中的每个网络节点的fib表最后都会更新该新的区块的条目。对应该新的区块的条目包括与该区块对应的搜索数据包的名字以及对应的转发接口。该区块对应的搜索数据包的名字可以与用于搜索该区块的区块搜索请求包的名字相同。因此,该条目也是与区块搜索请求包对应的条目。s316:网络节点根据更新后的fib确定与区块搜索请求包对应的接口,通过确定出的接口转发区块搜索请求包。由于区块搜索请求包的目的在于搜索新创建的区块,而更新后的fib正好更新了新创建区块的路由条目,因此此时网络节点必然能够确定出与区块搜索请求包对应的接口。步骤s316的详细过程可以参照步骤s305。s317:第三用户设备生成该区块搜索请求包对应的搜索数据包,并返回搜索数据包。具体,第三用户设备接收到该区块搜索请求包,先判断是否能够提供该区块搜索请求包所请求的搜索数据包,能够提供时,生成并返回该区块搜索请求包对应的搜索数据包。例如,第三用户设备在接收到该区块搜索请求包后,根据该区块搜索请求包中的区块标识,确定第一用户设备搜索的区块;然后,第三用户设备根据自身存储的区块链的高度判断能否提供第一用户设备搜索的区块;如果能提供第一用户设备搜索的区块,则根据第一用户设备搜索的区块生成搜索数据包,并返回给第一用户设备;否则,不向第一用户设备返回搜索数据包。具体地,如果第三用户设备存储的区块链中高度最高的区块的高度小于或等于区块标识对应的区块的高度,则说明第三用户设备不能为第一用户设备提供区块。例如,第三用户设备根据区块搜索请求包确定出的第一用户设备搜索的区块为第81区块,而第三用户设备具有第81区块,则第三用户设备向第一用户设备返回对应的搜索数据包。值得说明的是,由于这里的第三用户设备为创建了新区块的用户设备,则此时第三用户设备必然能够提供第一用户设备搜索的新的区块。由于区块链系统内的各个用户设备都会发送区块搜索请求包,所以,该区块搜索数据包返回的过程中,会向区块链系统内的各个用户设备返回,相当于在网络内广播该区块。s318:网络节点接收该搜索数据包,并将该搜索数据包发送给第一用户设备。具体地,步骤s318的细节可以参见步骤s307。s319:第一用户设备接收该搜索数据包,并提取搜索数据包中的区块存储到区块链数据库。具体地,第一用户设备提取搜索数据包中的区块,然后验证提取到的区块的合法性,如果这些区块的合法性通过验证,则将其存储到区块链数据库中,如果不合法则直接丢弃。为了保存区块链的最新状态,第一用户设备需要重复发送区块搜索请求包。具体地,当第一用户设备接收到网络节点返回的搜索数据包时,提取搜索数据包中的区块存储到区块链数据库,然后发送新的区块搜索请求包,新的区块搜索请求包的区块标识与区块搜索请求包的区块标识不同;当在预定时间内未接收到网络节点返回的搜索数据包时,重新发送区块搜索请求包。这里的预定时间可以与前文的设定时间相同,也可以不同。这里需要说明的是,虽然网络节点在接收到区块搜索请求包后会将其记录在pit表中,等到获取到对应的搜索数据包后将其返回给对应的用户设备。但是,由于网络节点可能会定时或周期清除pit表项,所以第一用户设备如果在预定时间内未接收到网络节点返回的搜索数据包时,可以通过重新发送区块搜索请求包的方式,避免因为网络节点清除pit表项造成没有接收到搜索数据包的情况。如图3b所示,ailce、bob和ted是网络中的三个用户设备,三者都存储着全网当前所有的80个区块,并都同时发送区块搜索请求包以请求第81个区块,区块搜索请求包消息被记录在网络节点(如路由器)的pit表中,以网络节点c为例,pit表项中第81区块的区块搜索请求包对应的接口为0,1,2。此时,作为矿工的ted产生了高度为81的新区块,ted先向网络内的网络节点广播该区块的区块信息,网络节点根据该区块信息更新fib,然后按照新的fib将区块搜索请求包转发到ted,ted根据接收到的区块搜索请求包向网络返回搜索数据包,从而实现该区块的广播。网络节点c会根据pit表项的记录,将数据沿1,2接口转发出去,最终送达至alice和bob。本发明实施例提供的基于ndn的区块链同步方法,具有以下优点:第一,在用户设备进行区块广播时,与现有的tcp/ip架构下的区块链实现相比更加简单,原因如下:在tcp/ip架构下为了确保网络节点不会重复接受已经获取了的区块,网络节点间并不直接发送区块,而是由提供者(区块提供方)先发送inv消息给邻居,告知对方自己有哪些区块信息可供下载,邻居节点收到inv消息后,根据inv消息(区块的哈希值)发送getdata消息告知提供者自己需要哪些区块,再由提供者返回blocks消息让邻居用户设备能下载到区块数据;而本发明实施例借助ndn网络架构本身的“消费者驱动”特点,简化了上述步骤,在不需要inv消息的情况下完成广播。同样,ndn下的广播没有tcp/ip网络架构下的那样复杂。第二,使区块链系统真正实现去中心化,系统中没有出现任何超级节点。这对系统的公平性提供了有力的保证。第三,区块链系统基于ndn网络,无论是浏览在线用户设备的同步,还是搜索等功能的实现方法,其过程都不需要再关注ip地址、端口等位置信息。这一特性在很大程度上降低了网络应用开发工作的压力。图4示出了本发明一个实施例提供的基于ndn的区块链同步装置的框图。该基于ndn的区块链同步装置可以通过专用硬件电路,或者,软硬件的结合实现成为用户设备的全部或一部分。该基于ndn的区块链同步装置包括发送单元401和接收单元402。其中,发送单元401用于向网络节点发送区块同步请求包,区块同步请求包的名称包括ndn协议标识、应用标识、请求包类型和区块链的状态信息,区块链的状态信息用于指示用户设备存储的区块链中高度最高的区块的高度;接收单元402用于接收网络节点返回的同步数据包,并提取同步数据包中的区块存储到区块链数据库。相关细节可结合参考图3的方法实施例。需要说明的是,上述发送单元401、接收单元402可以由收发器实现,或者处理器配合收发器来实现。图5示出了本发明一个实施例提供的基于ndn的区块链同步装置的框图。该基于ndn的区块链同步装置可以通过专用硬件电路,或者,软硬件的结合实现成为网络节点的全部或一部分。装置包括接收单元501、查找单元502、处理单元503和发送单元504。其中,接收单元501用于网络节点接收用户设备发送的区块同步请求包,区块同步请求包的名称包括ndn协议标识、应用标识、请求包类型和区块链的状态信息,区块链的状态信息用于指示用户设备存储的区块链中高度最高的区块的高度;查找单元502用于在网络节点的pit中查找区块同步请求包对应的条目;处理单元503用于当网络节点的pit中未查找到区块同步请求包对应的条目时,在pit中添加对应的条目,并在fib表中查询与区块同步请求包对应的接口;当网络节点的pit中查找到区块同步请求包对应的条目时,在查找到的条目中添加接收区块同步请求包的接口;发送单元504用于通过确定出的接口转发区块同步请求包;发送单元504还用于当接收到区块同步请求包对应的搜索数据包时,根据pit中的条目转发搜索数据包。相关细节可结合参考图3的方法实施例。需要说明的是,上述查找单元502和处理单元503可以由处理器实现或者,处理器执行存储器中的程序指令来实现,上述接收单元501、发送单元504可以由通信接口实现,或者处理器配合通信接口来实现。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1