用于在区块链网络中广播消息的方法、设备和存储介质与流程

文档序号:16786544发布日期:2019-02-01 19:25阅读:346来源:国知局
用于在区块链网络中广播消息的方法、设备和存储介质与流程

本申请涉及区块链网络,尤其涉及用于在区块链网络中广播消息的方法、设备和存储介质。



背景技术:

区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术在互联网时代的创新应用模式。

狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。区块链技术的两大特性为可追溯以及不可篡改。



技术实现要素:

为了在区块链网络中的各个节点之间广播消息,相关技术经常采用单点广播方式或者采用gossip协议。当采用单点广播方式时,消息发送节点会向区块链网络中的全部其他节点广播消息。在单点广播方式中,消息的传输通道都是由消息发送节点与区块链网络中的全部其他节点构成,所以消息发送节点的带宽压力较大并且稳定性较差。在采用gossip协议的情况下,每次都需要从区块链网络中随机选择若干个节点并且动态地创建随机选择的若干个节点之间的连接,所以所创建的连接不确定,而且比较费时费力,无法快速地将消息广播到整个区块链网络。目前并没有可行的方案能够解决这些问题。

因此,本申请针对上述问题中的至少一个问题提出了一种新的技术方案。

根据本申请的第一方面,提供了一种用于在区块链网络中广播消息的方法,包括:将区块链网络中的全部n个节点按照节点标识符进行排序,并且将排序后的全部n个节点构成环形链;分别创建全部n个节点中的相应节点与所述环形链中的相同方向上相邻的m个节点之间的连接,并且分别将所创建的连接添加到与相应节点相关联的连接池中;以及当全部n个节点中的相应节点要广播消息时,相应节点从所述连接池中获得相应节点与所述环形链中的相同方向上相邻的m个节点之间的连接,并且分别经由所获得的连接向环形链中的相同方向上相邻的m个节点广播消息,其中,n和m均为自然数,并且n大于或等于m。

根据一些实施例,所述方法还包括:当全部n个节点中的相应节点接收到消息时,相应节点判断所接收到的消息的消息标识符是否存在于与相应节点相关联的缓存模块中;如果所接收到的消息的消息标识符存在于与相应节点相关联的缓存模块中,则相应节点丢弃所接收到的消息;以及如果所接收到的消息的消息标识符不存在于与相应节点相关联的缓存模块中,则相应节点将所接收到的消息的消息标识符添加到与相应节点相关联的缓存模块中。

根据一些实施例,所述方法还包括:在消息是由所述n个节点中的相应节点生成的情况下,在相应节点将所生成的消息广播出去之后,相应节点将所广播出去的消息的消息标识符添加到与相应节点相关联的缓存模块中。

根据一些实施例,所述排序包括:按照节点标识符的美国信息交换标准码(ascii)的值对区块链网络中的全部n个节点进行排序。

根据一些实施例,所述环形链中的相同方向为所述环形链中的顺时针方向或逆时针方向。

根据一些实施例,所述环形链中的相同方向上相邻的节点的个数m能够由用户进行设置。

根据一些实施例,所述缓存模块包括多个桶的队列,所述多个桶中的每个桶保存具有相同失效时间点的全部消息的消息标识符。

根据一些实施例,所述多个桶中的各个桶分别与多个失效时间点中的各个失效时间点对应,以及所述缓存模块根据所广播出去的消息的缓存时间段来确定所广播出去的消息的失效时间点,并且将所广播出去的消息的消息标识符添加到所述多个桶中与所广播出去的消息的失效时间点对应的桶。

根据一些实施例,所述缓存模块根据时间对所述多个桶的队列进行更新以保持所述队列中的桶的个数是固定的。

根据一些实施例,所述更新包括:每经过单位时间,从所述多个桶的队列的头部删除一个桶并且清空所删除的桶中保存的全部消息标识符,以及在所述多个桶的队列的尾部添加一个空桶。

根据本申请的第二方面,提供了一种计算机存储介质,其上存储有计算机指令,当所述计算机指令被计算机执行时使计算机执行根据前述各项中任一项所述的用于在区块链网络中广播消息的方法。

根据本申请的第三方面,提供了一种计算机实现的用于在区块链网络中广播消息的设备,包括:存储器,存储有计算机指令;和处理器,耦接到存储器,执行所述计算机指令以执行根据前述各项中任一项所述的用于在区块链网络中广播消息的方法。

根据本申请的一些实施例,可以快速地将消息广播到整个区块链网络。另外,根据本申请的一些实施例,可以降低区块链网络中的单个节点的带宽压力。另外,根据本申请的一些实施例,可以有效地抑制区块链网络中的消息广播风暴。

通过以下参照附图对本申请的示例性实施例的详细描述,本申请的其它特征及其优点将会变得清楚。

附图说明

构成说明书的一部分的附图描述了本申请的实施例,并且连同说明书一起用于解释本申请的原理。

参照附图,根据下面的详细描述,可以更加清楚地理解本申请,其中:

图1是示意性地示出根据本申请的一些实施例的用于在区块链网络中广播消息的方法的流程图。

图2是示意性地示出根据本申请的一些实施例的区块链网络中的节点的环形链的配置的示意图。

图3a是示意性地示出根据本申请的一些实施例的节点的环形链中的顺时针方向的示意图。

图3b是示意性地示出根据本申请的一些实施例的节点的环形链中的逆时针方向的示意图。

图4是示意性地示出根据本申请的一些实施例的在区块链网络中广播的消息的配置的示意图。

图5是示意性地示出根据本申请的一些实施例的用于在区块链网络中广播消息的方法的流程图。

图6是示意性地示出根据本申请的一些实施例的缓存模块中包括的多个桶的队列的示意图。

图7是示意性地示出根据本申请的一些实施例的对多个桶的队列进行更新的过程的示意图。

图8是示意性地示出根据本申请的一些实施例的用于在区块链网络中广播消息的方法的流程图。

图9是示意性地示出根据本申请的一些实施例的将广播出去的消息添加到多个桶中的对应桶中的过程的示意图。

图10是示意性地示出根据本申请的一些实施例的将消息广播到整个区块链网络的成功率的示意图。

图11是示出可用于实施根据本申请的一些实施例的用于在区块链网络中广播消息的方法的信息处理设备的示意性框图。

具体实施方式

现在将参照附图来详细描述本申请的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的模块和步骤的相对布置、数字表达式和数值不限制本申请的范围。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本申请及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

图1是示意性地示出根据本申请的一些实施例的用于在区块链网络中广播消息的方法100的流程图。

如图1中所示,在步骤s101中,可以将区块链网络中的全部n个节点按照节点标识符进行排序,并且将排序后的全部n个节点构成环形链,其中,n为自然数。

根据本申请的一些实施例,可以按照节点标识符的美国信息交换标准码(ascii)的值对区块链网络中的全部n个节点进行排序。本领域技术人员应该理解,还可以根据节点标识符的诸如字母顺序和/或数字顺序等各种顺序对区块链网络中的全部n个节点进行排序,本申请不作具体限制。

下面结合图2来描述区块链网络中的节点的环形链200的配置。图2是示意性地示出根据本申请的一些实施例的区块链网络中的节点的环形链200的配置的示意图。

如图2中所示,环形链200包括排序后的节点1、节点2、……、节点n。在环形链200中,节点1分别与节点1两侧的节点2、节点n等相邻,节点2分别与节点2两侧的节点1、节点3等相邻,节点n分别与节点n两侧的节点1、节点n-1等相邻,依次类推。

返回参考图1,在步骤s101之后,用于在区块链网络中广播数据的方法100前进到步骤s103。在步骤s103中,可以分别创建全部n个节点中的相应节点与环形链中的相同方向上相邻的m个节点之间的连接,并且分别将所创建的连接添加到与相应节点相关联的连接池中,其中,m为自然数,并且n大于或等于m。在下文中,环形链中的相同方向上相邻的节点的个数m也被称为步长m。

根据本申请的一些实施例,环形链中的相同方向可以为环形链中的顺时针方向或逆时针方向。

下面结合图3a和图3b来描述节点的环形链中的顺时针方向和逆时针方向。图3a是示意性地示出根据本申请的一些实施例的节点的环形链200a中的顺时针方向的示意图。图3b是示意性地示出根据本申请的一些实施例的节点的环形链200b中的逆时针方向的示意图。

如图3a中所示,与图2中所示的环形链200一样,环形链200a也包括排序后的节点1、节点2、……、节点n。在环形链200a中,节点1分别与图3a中的箭头所示的顺时针方向上的节点2、节点3等相邻,节点2分别与图3a中的箭头所示的顺时针方向上的节点3、节点4等相邻,节点n-1分别与图3a中的箭头所示的顺时针方向上的节点n、节点1等相邻,以此类推。

如图3b所示,与图2中所示的环形链200一样,环形链200b也包括排序后的节点1、节点2、……、节点n。在环形链200b中,节点1分别与图3b中的箭头所示的逆时针方向上的节点n、节点n-1等相邻,节点2分别与图3b中的箭头所示的逆时针方向上的节点1、节点n等相邻,节点3分别与图3b中的箭头所示的逆时针方向上的节点2、节点1等相邻,以此类推。

根据本申请的一些实施例,环形链中的相同方向上相邻的节点的个数m可以由用户进行设置。

以图3a中的节点3为例,假设环形链200a中顺时针方向上相邻的节点的个数m等于3,也就是说,假设步长m等于3。在这种情况下,如图3a中所示,可以分别创建环形链200a中的节点3与环形链中的顺时针方向上相邻的节点4、节点5和节点6这3个节点之间的连接(节点3→节点4)、(节点3→节点5)和(节点3→节点6),并且可以分别将所创建的连接(节点3→节点4)、(节点3→节点5)和(节点3→节点6)添加到与节点3相关联的连接池202a中。以此类推,可以对环形链200a中的其他各个节点执行与节点3类似的操作。本领域技术人员可以理解,用户还可以将步长m设置为其他值,例如将步长m设置为等于2、4、9等等,只要不大于环形链中的全部节点个数n即可,本申请不作具体限制。

类似地,以图3b中的节点3为例,假设环形链200b中逆时针方向上相邻的节点的个数m等于3,也就是说,假设步长m等于3。在这种情况下,如图3b中所示,可以分别创建环形链200b中的节点3与环形链中的逆时针方向上相邻的节点2、节点1和节点n这3个节点之间的连接(节点3→节点2)、(节点3→节点1)和(节点3→节点n),并且可以分别将所创建的连接(节点3→节点2)、(节点3→节点1)和(节点3→节点n)添加到与节点3相关联的连接池202b中。以此类推,可以对环形链200b中的其他各个节点执行与节点3类似的操作。本领域技术人员可以理解,用户还可以将步长m设置为其他值,例如将步长m设置为等于2、4、9等等,只要不大于环形链中的全部节点个数n即可,本申请不作具体限制。

返回参考图1,在步骤s103之后,用于在区块链网络中广播数据的方法100前进到步骤s105。在步骤s105中,当全部n个节点中的相应节点要广播消息时,相应节点可以从所述连接池中获得相应节点与环形链中的相同方向上相邻的m个节点之间的连接,并且分别经由所获得的连接向环形链中的相同方向上相邻的m个节点广播消息。

下面结合图4来描述在区块链网络中广播的消息400的配置。图4是示意性地示出根据本申请的一些实施例的在区块链网络中广播的消息400的配置的示意图。

如图4所示,在区块链网络中广播的消息400可以包括消息头402和消息体404。消息头402可以用于保存与消息400有关的一些属性信息,消息体404可以用于保存消息400的具体内容。例如,消息头402可以包括消息标识符406、消息类型408和缓存时间段410等。消息标识符406可以用于唯一地标识消息400。

消息类型408可以指示消息400的具体类型。例如,消息类型408可以是与区块链网络中执行的各种控制操作有关的控制消息或与区块链网络中的各种业务有关的业务消息。例如,控制消息可以包括以下各项中的任一项:新节点加入消息、节点组网消息、节点退出消息、节点连接异常消息、获得节点标识符列表消息、获得节点列表消息等。

缓存时间段410可以指示消息400被缓存以保持有效的时间段,消息400在经过该缓存时间段410之后将失效。例如,缓存时间段410的单位可以为秒等。例如,如果消息400的缓存时间段410为5秒,则该消息400将在从现在起被缓存5秒以保持有效,并且在从现在起5秒之后失效。

返回参考图3a,以图3a中的节点3为例,假设环形链200a中顺时针方向上相邻的节点的个数m等于3,也就是说,假设步长m等于3。当环形链200a中的节点3要广播消息400时,节点3从与节点3相关联的连接池202a中获得节点3与环形链200a中顺时针方向上相邻的节点4、节点5和节点6这3个节点之间的连接(节点3→节点4)、(节点3→节点5)和(节点3→节点6),并且分别经由所获得的连接(节点3→节点4)、(节点3→节点5)和(节点3→节点6)向环形链200a中顺时针方向上相邻的节点4、节点5和节点6这3个节点广播消息400。以此类推,环形链200a中的其他各个节点可以执行与节点3类似的操作。

返回参考图3b,以图3b中的节点3为例,假设环形链200b中逆时针方向上相邻的节点的个数m等于3,也就是说,假设步长m等于3。当环形链200b中的节点3要广播消息400时,节点3从与节点3相关联的连接池202b中获得节点3与环形链200b中逆时针方向上相邻的节点2、节点1和节点n这3个节点之间的连接(节点3→节点2)、(节点3→节点1)和(节点3→节点n),并且分别经由所获得的连接(节点3→节点2)、(节点3→节点1)和(节点3→节点n)向环形链200a中逆时针方向上相邻的节点2、节点1和节点n这3个节点广播消息400。以此类推,环形链200b中的其他各个节点可以执行与节点3类似的操作。

返回参考图1,在步骤s105之后,用于在区块链网络中广播消息的方法100可以结束。

根据本申请的上述实施例,例如,假设区块链网络中的节点数量为n,步长为m,则将消息广播到整个区块链网络的收敛速度为o(n),根据抽屉原理,将消息广播到整个区块链网络的最小通信次数为

根据本申请的上述实施例,由于区块链网络中的单个节点只需要与环形链中的相同方向上相邻的若干个节点进行通信,所以可以降低区块链网络中的单个节点的带宽压力。

另外,根据本申请的上述实施例,由于预先创建了区块链网络中的相应节点与环形链中的相同方向上相邻的若干个节点之间的稳定连接,当相应节点要广播消息时可以直接采用预先创建的节点之间的稳定连接来广播消息,从而节省了在广播时需要临时创建节点之间的连接的时间。

因此,根据本申请的上述实施例,可以快速地将消息广播到整个区块链网络,从而可以提高在区块链网络中广播消息的效率,并且可以提高整个区块链网络的稳定性。

下面结合图5来描述根据本申请的一些实施例的用于在区块链网络中广播消息的方法500。图5是示意性地示出根据本申请的一些实施例的用于在区块链网络中广播消息的方法500的流程图。

如图5中所示,在步骤s501中,可以将区块链网络中的全部n个节点按照节点标识符进行排序,并且将排序后的全部n个节点构成环形链,其中,n为自然数。

在步骤s501之后,用于在区块链网络中广播数据的方法500前进到步骤s503。在步骤s503中,可以分别创建全部n个节点中的相应节点与环形链中的相同方向上相邻的m个节点之间的连接,并且分别将所创建的连接添加到与相应节点相关联的连接池中,其中,m为自然数,并且n大于或等于m。

注意,图5中的步骤s501和s503的内容分别与图1中的步骤s101和s103的内容基本上相同,其具体细节在此不再赘述。

在步骤s503之后,用于在区块链网络中广播数据的方法500前进到步骤s505。在步骤s505中,全部n个节点中的相应节点可以从区块链网络中的其他节点接收消息。

根据本申请的一些实施例,全部n个节点中的相应节点可以从环形链中与消息发送方向相反的方向上相邻的m个节点接收消息。

例如,如果消息发送方向为环形链中的顺时针方向,则相应节点可以从环形链中逆时针方向上相邻的m个节点接收消息。

返回参考图3a,以图3a中的节点4为例,假设步长m等于3。在这种情况下,图3a中的节点4可以从环形链200a中逆时针方向上相邻的节点3、节点2和节点1这3个节点接收消息。以此类推,环形链200a中的其他各个节点可以进行与节点4相类似的操作。

又例如,如果消息发送方向为环形链中的逆时针方向,则相应节点可以从环形链中顺时针方向上相邻的m个节点接收消息。

返回参考图3b,以图3b中的节点2为例,假设步长m等于3。在这种情况下,图3b中的节点2可以从环形链200b中顺时针方向上相邻的节点3、节点4和节点5这3个节点接收消息。以此类推,环形链200b中的其他各个节点可以进行与节点2相类似的操作。

返回参考图5,在步骤s505之后,用于在区块链网络中广播数据的方法500前进到步骤s507。在步骤s507中,相应节点可以判断所接收到的消息的消息标识符是否存在于与相应节点相关联的缓存模块中。

根据本申请的一些实施例,如果所接收到的消息的消息标识符存在于与相应节点相关联的缓存模块中,则用于在区块链网络中广播数据的方法500前进到步骤s509。在步骤s509中,相应节点可以丢弃所接收到的消息。在步骤s509之后,用于在区块链网络中广播数据的方法500可以结束。

根据本申请的一些实施例,如果所接收到的消息的消息标识符不存在于与相应节点相关联的缓存模块中,则用于在区块链网络中广播数据的方法500前进到步骤s511。在步骤s511中,相应节点可以将所接收到的消息的消息标识符添加到与相应节点相关联的缓存模块中。

例如,参考图3a和图4,节点3分别将消息400发送给节点4、节点5和节点6。当图3a中的节点4从节点3接收到消息400时,节点4可以判断从节点3接收到的消息400的消息标识符406是否存在于与节点4相关联的缓存模块(图3a中未示出)中。因为节点4从节点3接收到的消息400的消息标识符406不存在于与节点4相关联的缓存模块中,所以节点4可以将从节点3接收到的消息400的消息标识符406添加到与节点4相关联的缓存模块中。

类似地,当图3a中的节点5从节点3接收到消息400时,节点5可以判断从节点3接收到的消息400的消息标识符406是否存在于与节点5相关联的缓存模块(图3a中未示出)中。因为节点5从节点3接收到的消息400的消息标识符406不存在于与节点5相关联的缓存模块中,所以节点5可以将从节点3接收到的消息400的消息标识符406添加到与节点5相关联的缓存模块中。

类似地,当图3a中的节点6从节点3接收到消息400时,节点6可以判断从节点3接收到的消息400的消息标识符406是否存在于与节点6相关联的缓存模块(图3a中未示出)中。因为节点6从节点3接收到的消息400的消息标识符406不存在于与节点6相关联的缓存模块中,所以节点6可以将从节点3接收到的消息400的消息标识符406添加到与节点6相关联的缓存模块中。

另外,接收到消息400的节点4可以将所接收的消息400发送给节点5、节点6和节点7。当图3a中的节点5从节点4接收到消息400时,节点5可以判断从节点4接收到的消息400的消息标识符406是否存在于与节点5相关联的缓存模块(图3a中未示出)中。因为节点5之前已经将消息400的消息标识符406添加到与节点5相关联的缓存模块中,所以消息400的标识符406已经存在于与节点5相关联的缓存模块中。因此,节点5可以丢弃从节点4接收到的消息400。

类似地,当图3a中的节点6从节点4接收到消息400时,节点6可以判断从节点4接收到的消息400的消息标识符406是否存在于与节点6相关联的缓存模块(图3a中未示出)中。因为节点6之前已经将消息400的消息标识符406添加到与节点6相关联的缓存模块中,所以消息400的标识符406已经存在于与节点6相关联的缓存模块中。因此,节点6可以丢弃从节点4接收到的消息400。

类似地,当图3a中的节点7从节点4接收到消息400时,节点7可以判断从节点4接收到的消息400的消息标识符是否存在于与节点7相关联的缓存模块(图3a中未示出)中。因为节点7从节点4接收到的消息400的消息标识符406不存在于与节点7相关联的缓存模块中,所以节点7可以将从节点4接收到的消息400的消息标识符406添加到与节点7相关联的缓存模块中。

根据本申请的一些实施例,缓存模块可以包括多个桶的队列,多个桶中的每个桶可以保存具有相同失效时间点的全部消息的消息标识符,并且多个桶中的各个桶可以分别与多个失效时间点中的各个失效时间点对应。

下面参考图6来描述根据本申请的一些实施例的缓存模块中包括的多个桶的队列。图6是示意性地示出根据本申请的一些实施例的缓存模块中包括的多个桶的队列的示意图。

如图6中所示,多个桶的队列600可以包括如下多个桶:桶1、桶2、桶3、桶4、桶5、......桶t-1、桶t,其中t为自然数。多个桶的队列600下方为时间轴610。时间轴610的单位例如可以为秒。本领域技术人员可以理解,时间轴610的单位也可以为毫秒、分钟等,本申请不作具体限制。

队列600中的桶1可以与时间轴610上的失效时间点1对应,所以桶1可以保存具有相同失效时间点1的全部消息的消息标识符。也就是说,桶1中保持的消息标识符所标识的消息会在从现在起1秒之后失效。

类似地,队列600中的桶t可以与时间轴610上的失效时间点t对应,所以桶t可以保存具有相同失效时间点t的全部消息的消息标识符。也就是说,桶t中保持的消息标识符所标识的消息会在从现在起t秒之后失效。

根据本申请的一些实施例,缓存模块可以根据时间对多个桶的队列进行更新以保持队列中的桶的个数是固定的。

例如,参考图6,多个桶的队列600中包括的桶的个数可以始终保持为t个。例如,可以根据时间的推移从多个桶的队列600中删除一些桶,同时向多个桶的队列600中添加一些桶,并且所删除的桶的个数等于所添加的桶的个数,从而保持多个桶的队列600中的桶的个数始终为t个。

根据本申请的一些实施例,对多个桶的队列进行更新可以包括:每经过单位时间,可以从多个桶的队列的头部删除一个桶并且清空所删除的桶中保存的全部消息标识符,以及可以在多个桶的队列的尾部添加一个空桶。

下面结合图7来描述根据本申请的一些实施例的对多个桶的队列进行更新的过程。图7是示意性地示出根据本申请的一些实施例的对多个桶的队列进行更新的过程的示意图。

如图7中所示,每经过1秒,可以从旧队列700的头部删除桶1并且清空所删除的桶1中保持的全部消息标识符,以及可以在旧队列700的末尾添加空桶t’,从而得到新队列700’。新队列700’中的桶1’、桶2’、桶3’、桶4’……桶(t-1)’分别对应于旧队列700中的桶2、桶3、桶4、桶5……桶t。

返回参考图5,在步骤s511之后,用于在区块链网络中广播数据的方法500前进到步骤s513。在步骤s513中,相应节点可以从所述连接池中获得相应节点与环形链中的相同方向上相邻的m个节点之间的连接,并且分别经由所获得的连接向环形链中的相同方向上相邻的m个节点广播所接收到的消息。

注意,图5中的步骤s513的内容与图1中的步骤s105的内容基本上相同,其具体细节在此不再赘述。

在步骤s513之后,用于在区块链网络中广播数据的方法500可以结束。

下面结合图8来描述根据本申请的一些实施例的用于在区块链网络中广播消息的方法800。图8是示意性地示出根据本申请的一些实施例的用于在区块链网络中广播消息的方法800的流程图。

如图8中所示,在步骤s801中,可以将区块链网络中的全部n个节点按照节点标识符进行排序,并且将排序后的全部n个节点构成环形链,其中,n为自然数。

在步骤s801之后,用于在区块链网络中广播数据的方法800前进到步骤s803。在步骤s803中,可以分别创建全部n个节点中的相应节点与环形链中的相同方向上相邻的m个节点之间的连接,并且分别将所创建的连接添加到与相应节点相关联的连接池中,其中,m为自然数,并且n大于或等于m。

在步骤s803之后,用于在区块链网络中广播数据的方法800前进到步骤s805。在步骤s805中,相应节点可以从所述连接池中获得相应节点与环形链中的相同方向上相邻的m个节点之间的连接,并且分别经由所获得的连接向环形链中的相同方向上相邻的m个节点广播消息。

注意,图8中的步骤s801、s803和s805的内容分别与图1中的步骤s101、s103和s105的内容基本上相同,其具体细节在此不再赘述。

在步骤s805之后,用于在区块链网络中广播数据的方法800前进到步骤s807。在步骤s807中,在消息是由n个节点中的相应节点生成的情况下,在相应节点将所生成的消息广播出去之后,相应节点可以将所广播出去的消息的消息标识符添加到与相应节点相关联的缓存模块中。

返回参考图3a和图4,以图3a中的节点3为例,在消息400是由节点3生成的情况下,在节点3将所生成的消息400广播出去之后,节点3可以将广播出去的消息400的消息标识符406添加到与节点3相关联的缓存模块(图3a中未示出)中。

根据本申请的一些实施例,缓存模块可以根据所广播出去的消息的缓存时间段来确定所广播出去的消息的失效时间点,并且将所广播出去的消息的消息标识符添加到所述多个桶中与所广播出去的消息的失效时间点对应的桶。

下面图9来描述根据本申请的一些实施例的将广播出去的消息添加到多个桶中的对应桶中的过程。图9是示意性地示出根据本申请的一些实施例的将广播出去的消息添加到多个桶中的对应桶中的过程的示意图。

返回参考图3a,以图3a中的节点3为例,在节点3将消息400广播出去之后,与节点3相关联的缓存模块可以根据由节点3广播出去的消息400的缓存时间段410来确定由节点3广播出去的消息400的失效时间点。如图9中所示,假设由节点3广播出去的消息400的缓存时间段410为5秒,则与节点3相关联的缓存模块可以确定由节点3广播出去的消息400的失效时间点为时间轴910中的失效时间点5,并且可以确定队列900中的多个桶中与失效时间点5对应的桶为桶5。因此,与节点3相关联的缓存模块可以将由节点3广播出去的消息400的消息标识符406添加到与失效时间点5对应的桶5中。

根据本申请的上述实施例,通过将消息标识符保存到缓存模块中并且将接收到的消息的消息标识与缓存模块中保持的消息标识符进行比较以判断消息是否重复,可以确保区块链网络中的每个节点对于每个消息只会处理和广播一次,从而可以有效地抑制区块链网络中的消息广播风暴。

下面结合图10来描述根据本申请的一些实施例的将消息广播到整个区块链网络的成功率。图10是示意性地示出根据本申请的一些实施例的将消息广播到整个区块链网络的成功率的示意图。

图10中的横坐标为步长m,纵坐标为将消息广播到整个区块链网络的成功率。假设区块链网络中的节点的故障率p为5%,则图10示出了在区块链网络中的节点数量n分别等于15、20、50和100的情况下,步长m的值与将消息广播到整个区块链网络的成功率之间的关系。如图10中所示,在节点数量n分别等于15、20、50和100的情况下,当步长m大于或等于3时,将消息广播到整个区块链网络的成功率超过了99.99%。

图11是示出可用于实施根据本申请的实施例的用于在区块链网络中广播消息的方法的信息处理设备的示意性框图。

在图11中,中央处理单元(cpu)1101根据只读存储器(rom)1102中存储的程序或从存储部分1108加载到随机存取存储器(ram)1103的程序执行各种处理。在ram1103中,也根据需要存储当cpu1101执行各种处理等等时所需的数据。cpu1101、rom1102和ram1103经由总线1104彼此连接。输入/输出接口1105也连接到总线1104。

下述部件连接到输入/输出接口1105:输入部分1106(包括键盘、鼠标等等)、输出部分1107(包括显示器,比如阴极射线管(crt)、液晶显示器(lcd)等,和扬声器等)、存储部分1108(包括硬盘等)、通信部分1109(包括网络接口卡比如lan卡、调制解调器等)。通信部分1109经由网络比如因特网执行通信处理。根据需要,驱动器1110也可连接到输入/输出接口1105。可拆卸介质1111比如磁盘、光盘、磁光盘、半导体存储器等等根据需要被安装在驱动器1110上,使得从中读出的计算机程序根据需要被安装到存储部分1108中。

在通过软件实现上述系列处理的情况下,从网络比如因特网或存储介质比如可拆卸介质1111安装构成软件的程序。

本领域的技术人员应当理解,这种存储介质不局限于图11所示的其中存储有程序、与设备相分离地分发以向用户提供程序的可拆卸介质1111。可拆卸介质1111的例子包含磁盘(包含软盘(注册商标))、光盘(包含光盘只读存储器(cd-rom)和数字通用盘(dvd))、磁光盘(包含迷你盘(md)(注册商标))和半导体存储器。或者,存储介质可以是rom1102、存储部分1108中包含的硬盘等等,其中存有程序,并且与包含它们的设备一起被分发给用户。

所述指令代码由机器读取并执行时,可执行上述根据本申请实施例的方法。

可以以一种或多种程序设计语言的任意组合来编写用于执行本申请各个方面的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。

也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(articleofmanufacture)。

也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。

附图中的流程图和框图显示了根据本申请的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

注意,为了避免遮蔽本申请的构思,没有描述本领域所公知的一些细节。本领域技术人员根据上面的描述,完全可以明白如何实施这里公开的技术方案。

本申请也可以被配置如下:

(1)、一种用于在区块链网络中广播消息的方法,包括:

将区块链网络中的全部n个节点按照节点标识符进行排序,并且将排序后的全部n个节点构成环形链;

分别创建全部n个节点中的相应节点与所述环形链中的相同方向上相邻的m个节点之间的连接,并且分别将所创建的连接添加到与相应节点相关联的连接池中;以及

当全部n个节点中的相应节点要广播消息时,相应节点从所述连接池中获得相应节点与所述环形链中的相同方向上相邻的m个节点之间的连接,并且分别经由所获得的连接向环形链中的相同方向上相邻的m个节点广播消息,

其中,n和m均为自然数,并且n大于或等于m。

(2)、根据(1)所述的方法,还包括:

当全部n个节点中的相应节点接收到消息时,相应节点判断所接收到的消息的消息标识符是否存在于与相应节点相关联的缓存模块中;

如果所接收到的消息的消息标识符存在于与相应节点相关联的缓存模块中,则相应节点丢弃所接收到的消息;以及

如果所接收到的消息的消息标识符不存在于与相应节点相关联的缓存模块中,则相应节点将所接收到的消息的消息标识符添加到与相应节点相关联的缓存模块中。

(3)、根据(1)所述的方法,还包括:

在消息是由所述n个节点中的相应节点生成的情况下,在相应节点将所生成的消息广播出去之后,相应节点将所广播出去的消息的消息标识符添加到与相应节点相关联的缓存模块中。

(4)、根据(1)-(3)中任一项所述的方法,其中,所述排序包括:

按照节点标识符的美国信息交换标准码(ascii)的值对区块链网络中的全部n个节点进行排序。

(5)、根据(1)-(3)中任一项所述的方法,其中,所述环形链中的相同方向为所述环形链中的顺时针方向或逆时针方向。

(6)、根据(1)-(3)中任一项所述的方法,其中,所述环形链中的相同方向上相邻的节点的个数m能够由用户进行设置。

(7)、根据(2)或(3)所述的方法,其中,所述缓存模块包括多个桶的队列,所述多个桶中的每个桶保存具有相同失效时间点的全部消息的消息标识符。

(8)、根据(7)所述的方法,其中,所述多个桶中的各个桶分别与多个失效时间点中的各个失效时间点对应,以及所述缓存模块根据所广播出去的消息的缓存时间段来确定所广播出去的消息的失效时间点,并且将所广播出去的消息的消息标识符添加到所述多个桶中与所广播出去的消息的失效时间点对应的桶。

(9)、根据(7)所述的方法,其中,所述缓存模块根据时间对所述多个桶的队列进行更新以保持所述队列中的桶的个数是固定的。

(10)、根据(9)所述的方法,其中,所述更新包括:

每经过单位时间,从所述多个桶的队列的头部删除一个桶并且清空所删除的桶中保存的全部消息标识符,以及在所述多个桶的队列的尾部添加一个空桶。

(11)、一种计算机存储介质,其上存储有计算机指令,当所述计算机指令被计算机执行时使计算机执行根据(1)-(10)中任一项所述的用于在区块链网络中广播消息的方法。

(12)、一种计算机实现的用于在区块链网络中广播消息的设备,包括:

存储器,存储有计算机指令;和

处理器,耦接到存储器,执行所述计算机指令以执行根据(1)-(10)任一项所述的用于在区块链网络中广播消息的方法。

虽然已经通过示例对本申请的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本申请的范围。本领域的技术人员应该理解,可在不脱离本申请的范围和精神的情况下,对以上实施例进行修改。本申请的范围由所附权利要求来限定。

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