一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种区块链中的节点分组方法及区块链节点与流程

2022-06-29 22:54:02 来源:中国专利 TAG:


1.本说明书实施例属于区块链技术领域,尤其涉及一种区块链中的节点分组方法及区块链节点。


背景技术:

2.区块链(blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证数据不可篡改和不可伪造。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。
3.目前,随着区块链技术的快速发展,区块链的规模越来越大,业务也越来越复杂。在大规模的区块链网络中,随着节点规模的增大,共识的效率会衰减,节点需要的带宽也会增加,成本升高,为了解决这些问题,一般会收敛共识节点的规模,采用小规模共识委员会的机制,在小范围节点中做共识,然后将生成的区块分发到全网其他节点。在公链上一般的区块数据的广播协议,会采用gossip协议进行分发,但是这种数据分发方式的冗余度特别高,分发效率低,且延时较高。


技术实现要素:

4.本说明书实施例旨在提供一种区块链中的节点分组方法、区块链节点、计算机可读存储介质及计算设备,提升了区块链上区块分发的效率,降低了延时。
5.为实现上述目的,本说明书第一方面提供一种区块链中的节点分组方法,所述方法由第一节点执行,所述方法包括:从区块链中获取分组信息,所述分组信息存储于智能合约的合约状态中,所述分组信息中包括:m个分组的分组标识和所述m个分组中所包含的各个节点的节点信息,m≥0;当m≥1时,根据所述分组信息,确定所述第一节点与所述m个分组中的k个分组能够建立连接,1≤k≤m;确定所述第一节点与所述k个分组中各个分组间的时延,以得到k个第一目标时延;根据所述k个第一目标时延,确定目标分组;向所述区块链发送第一交易,所述第一交易用于调用所述智能合约,以用于在所述合约状态的所述目标分组中添加所述第一节点。
6.本说明书第二方面提供一种区块链节点,包括:通信模块,配置为从区块链中获取分组信息,所述分组信息存储于智能合约的合约状态中,所述分组信息中包括:m个分组的分组标识和所述m个分组中所包含的各个节点的节点信息,m≥0;处理模块,配置为当m≥1时,根据所述分组信息,确定所述区块链节点与所述m个分组中的k个分组能够建立连接,1≤k≤m;以及,确定所述区块链节点与所述k个分组中各个分组间的时延,以得到k个第一目标时延;所述处理模块,还配置为根据所述k个第一目标时延,确定目标分组;所述通信模块,还配置为向所述区块链发送第一交易,所述第一交易用于调用所述智能合约,以用于在所述合约状态的所述目标分组中添加所述区块链节点。
7.本说明书第三方面提供一种计算机可读存储介质,其上存储有计算机程序,当所
述计算机程序在计算设备中执行时,计算设备执行上述第一方面所述的方法。
8.本说明书第四方面提供一种计算设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时,实现上述第一方面所述的方法。
9.通过本说明书一个或多个实施例中提供的方法及区块链节点,可以通过节点间的时延对区块链中的节点进行分组,从而将距离较近的各个节点聚合为一组,降低了区块分发时的延时,提升了区块分发的效率。
附图说明
10.为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
11.图1是本说明书一实施例中区块链网络的网络示意图;
12.图2是本说明书另一实施例中区块链网络的网络示意图;
13.图3是本说明书一实施例中一种区块链中的节点分组方法的流程示意图;
14.图4是本说明书一实施例中一种第一节点确定其与第二节点之间的时延的过程示意图;
15.图5是本说明书一实施例中一种第一节点根据k个第一目标时延确定目标分组的过程示意图;
16.图6是本说明书一实施例中另一种区块链中的节点分组方法的流程示意图;
17.图7是本说明书一实施例中又一种区块链中的节点分组方法的流程示意图;
18.图8是本说明书一实施例中再一种区块链中的节点分组方法的流程示意图;
19.图9是本说明书一实施例中一种区块链节点的结构示意图。
具体实施方式
20.为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
21.一般的,在大规模的区块链网络中,往往是选取一定数量的节点作为共识节点。在对交易共识过程中,先使用共识节点对交易达成共识并生成区块,再由这些共识节点将该区块分发至区块链网络中除共识节点以外的其他的候选节点。例如,当区块链网络中候选节点的数量为n时,共识节点需要分别向n个候选节点发送区块,这会使得共识节点的上行带宽压力增大,影响共识效率,且区块分发效率也比较低。另外,由于不同的候选节点与共识节点之间的距离不同,而当两者距离较远时,两者间的传输区块的时长也将会增大,延时较高。
22.鉴于以上问题,本说明书实施例中提供了一种区块链中的节点分组方法,可以基于节点间的时延,对区块链中的节点进行分组,以将距离较近的各个节点划分到同一组。这
样,在后续分发区块时,只需向一个分组内分发一个区块即可。由此,降低了传输区块的时长和区块链中共识节点分发区块对带宽的需求,提高了单位时间内的吞吐量,提升了区块分发效率。
23.示例性的,图1为本说明书实施例中提供的一种区块链网络的架构示意图。如图1所示,该区块链中例如包含4个共识节点和9个候选节点,共13个节点。每个节点均可以是任何具有计算、处理能力的装置、服务器或设备集群等。节点之间的连线示意性的表示p2p(peer to peer,点对点)连接。
24.这些节点上可存储全量的账本,即存储全部区块和全部账户的状态。其中,区块链中的每个节点可通过执行相同的交易而产生区块链中的相同的状态,区块链中的每个节点可存储相同的状态数据库。可以理解,图1中虽然示出了区块链中包括13个节点,本说明书实施例不限于此,而是可以包括其他数目的节点。具体是,区块链中包含的节点可以满足拜占庭容错(byzantine fault tolerance,bft)要求。所述的拜占庭容错要求可以理解为在区块链内部可以存在拜占庭节点,而区块链对外不体现拜占庭行为。一般的,一些拜占庭容错算法中要求节点个数大于(3f 1),f为拜占庭节点个数,例如实用拜占庭容错算法pbft(practical byzantine fault tolerance)。
25.区块链领域中的交易可以指在区块链中执行并记录在区块链中的任务单元。交易中通常包括发送字段(from)、接收字段(to)和数据字段(data)。其中,在交易为转账交易的情况中,from字段表示发起该交易(即发起对另一个账户的转账任务)的账户地址,to字段表示接收该交易(即接收转账)的账户地址,data字段中包括转账金额。在交易调用区块链中的智能合约的情况中,from字段表示发起该交易的账户地址,to字段表示交易所调用的合约的账户地址,data字段中包括调用合约中的函数名、及对该函数的传入参数等数据,以用于在交易执行时从区块链中获取该函数的代码并执行该函数的代码。
26.区块链中可提供智能合约的功能。区块链上的智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。在以太坊中调用智能合约,是发起一笔指向智能合约地址的交易,使得以太坊网络中每个节点分布式地运行智能合约代码。需要说明的是,除了可以由用户创建智能合约,也可以在创世块中由系统设置智能合约。这类合约一般称为系统合约。一般的,系统合约中可以设置一些区块链的数据结构、参数、属性和方法。此外,具有系统管理员权限的账户可以创建系统级的合约,或者修改系统级的合约(简称为系统合约)。其中,所述系统合约可用于在区块链中增加不同业务的数据的数据结构。
27.在部署合约的场景中,例如,bob将一个包含创建智能合约信息(即部署合约)的交易发送到如图1所示的区块链中,该交易的data字段包括待创建的合约的代码(如字节码或者机器码),交易的to字段为空,以表示该交易用于部署合约。节点间通过共识机制达成一致后,确定合约的合约地址“0x6f8ae93
…”
,各个节点在状态数据库中添加与该智能合约的合约地址对应的合约账户,分配与该合约账户对应的状态存储,并将合约代码保存在该合约的状态存储中,从而合约创建成功。
28.在调用合约的场景中,例如,bob将一个用于调用智能合约的交易发送到如图1所示的区块链中,该交易的from字段是交易发起方(即bob)的账户的地址,to字段中的“0x6f8ae93
…”
代表了被调用的智能合约的地址,交易的data字段包括调用智能合约的方
法和参数。在区块链中对该交易进行共识之后,区块链中的各个节点可分别执行该交易,从而分别执行该合约,基于该合约的执行更新状态数据库。
29.另外,智能合约在区块链上完成部署后,会产生一个对应的合约账户。这个合约账户一般会具有一些状态,这些状态由智能合约中状态变量所定义并在智能合约创建、执行时产生新的值。其中,合约账户可以用于存储智能合约相关的状态。一旦某个事件触发智能合约中的条款(满足执行条件),代码即可以自动执行。在区块链中,合约的相关状态保存在存储树(storage trie)中,存储树根节点的hash值即存储于上述storage_root中,从而将该合约的所有状态通过hash锁定到该合约账户下。存储树也是一个mpt树形结构,存储了状态地址到状态值的key-value映射。从存储树的根节点到叶子节点存储有一个状态的地址,一个叶子节点中存储一个状态的值。
30.继续参阅图1,图1中的候选节点可以理解为是:区块链中除共识节点以外的节点。图1中的4个共识节点分别为:节点11、12、13和14;9个候选节点分别为:节点21、22和23,节点31、32和33,以及,节点41、42和43。其中,节点21、22和23可以组成分组a,节点31、32和33可以组成分组b,节点41、42和43可以组成分组c。分组a与节点12关联;分组b与节点13关联;分组c与节点13关联。示例性的,每个分组中各个候选节点之间的时延均可以小于预设时延,每个共识节点和与其关联的分组中的各个候选节点之间的时延也可以均可以小于预设时延。其中,共识节点可以负责基于纠错码的分发机制将其获取到的区块分发至与其关联的分组中的节点。
31.示例性的,图2为本说明书实施例中提供的另一种区块链网络的架构示意图。图2所示的区块链网络与图1中所示的区块链网络的主要不同之处为:图2中的每个共识节点均关联有一个分组,且每个分组中的节点的数量均已达到上限值,即此时与共识节点相关联的各个分组中均不能加入新的候选节点。同时,新的候选节点61、62和63需要加入到区块链网络中,候选节点61、62和63均与候选节点21间的时延最小,且候选节点61、62和63可以划分为一个分组e。因此,可以将分组e与候选节点21相关联。其中,候选节点21可以负责基于纠错码的分发机制将其获取到的区块分发至分组e中的节点。
32.示例性的,图3为本说明书实施例中提供的一种区块链中的节点分组方法的流程示意图。其中,图3中所示的方法可以由区块链中的第一节点执行,该第一节点可以但不限于为新加入到区块链中的节点。如图3所示,该区块链中的节点分组方法包括以下步骤:
33.在s302,第一节点从区块链中获取分组信息,分组信息存储于智能合约的合约状态中,分组信息中包括:m个分组的分组标识和m个分组中所包含的各个节点的节点信息,m≥0。
34.本实施例中,当第一节点加入区块链时,第一节点可以通过区块链中创世区块中记录的信息,获取到建立区块链的最初的几个节点的节点信息,比如:节点的ip地址和端口等。接着,第一节点可以基于tls(transport layer security,传输层安全协议)、tcp(transmission control protocol,传输控制协议)、udp(user datagram protocol,用户数据报协议)等的连接方式与建立区块链的最初的几个节点建立连接。在成功建立连接后,第一节点可以向与其连接的节点发起区块同步请求,这样第一节点可以获取到区块链中的各个区块,并基于区块链中最新的一个区块,获取到分组信息。示例性的,第一节点获取到最新的区块后,可以执行该区块中的全部交易,并根据交易的执行更新其本地的合约状态,
进而由合约状态得到分组信息。示例性的,分组信息中可以包括m个分组的分组标识和m个分组中所包含的各个节点的节点信息,m≥0。其中,分组信息可以存储于智能合约的合约状态中。
35.在s304,当m≥1时,第一节点根据分组信息,确定第一节点与m个分组中的k个分组能够建立连接,1≤k≤m。
36.本实施例中,当m≥1时,第一节点可以根据分组信息中各个节点的节点信息,获取到各个节点的ip地址、端口等,并可以基于tsl、tcp、udp等连接方式与这些节点创建连接,从而确定出可以连接的k个分组。其中,当第一节点可以与一个分组内的全部节点都建立连接时,认为第一节点可以与该第分组连接。当第一节点无法与一个分组内的任一个节点建立连接时,表明第一节点与该组之间的网络处于非全连通状态,此时可以禁止第一节点加入到该组内,以保证该组内的数据块能够顺利分发。同时,第一节点可以停止与该组内的其他的节点建立连接。示例性的,当第一节点无法与一个分组内的一个节点建立连接时,若第一节点已与该组内的其他节点建立连接,则第一节点可以主动断开与该组内的其他节点之间的连接。
37.在s306,第一节点确定其与k个分组中各个分组间的时延,以得到k个第一目标时延。
38.本实施例中,第一节点可以分别与k个分组中的节点进行数据交互,并由其发送数据的时间和其接收到的其他节点反馈的数据的时间,确定出其与各个其他节点之间的时延。其中,第一节点与其他节点之间的时延,可以反映其与其他节点之间的距离远近、其他节点的硬件情况等因素,例如,当两者之间时延非常小时,表明两者之间的距离非常近。
39.示例性的,以第一节点确定其与第二节点之间的时延为例,如图4所示,在s402,第一节点可以向第二节点发送一个心跳包,并记录发送时间t1。在s404,第二节点获取到心跳包后可以向第一节点返回一个ack(acknowledgement,应答)消息,第一节点获取到ack消息后,可以记录获取时间t2。在s406,第一节点可以由t1和t2确定出其与第二节点之间的时延,其中,时延为(t2-t1)。示例性的,第一节点发送心跳包的次数可以为多次,此时,第二节点反馈的ack消息的次数也可以为多次。当第一节点发送心跳包的次数为多次时,第一节点可以基于其每次发送心跳包和获取到ack消息间的时间,确定其与第二节点之间的时延。例如,若第一次发送心跳包的时间为t1.1,第一次获取到ack消息的时间为t1.2,第二次发送心跳包的时间为t2.1,第二次获取到ack消息的时间为t2.2,第三次发送心跳包的时间为t3.1,第三次获取到ack消息的时间为t3.2,则第一节点和第二节点之间的时延为((t1.2-t1.1)
40.(t2.2-t2.1) (t3.2-t3.1))/3。
41.在第一节点确定出其与k个分组中各个节点之间的时延后,可以由一个分组内各个节点对应的时延,确定出第一节点与该分组之间的时延,从而得到k个第一目标时延。例如,对于图1中的分组a中包括的3个节点,假设第一节点与节点21、节点22和节点23之间的时延分别为t1、t2和t3,则第一节点与该分组a之间的第一目标时延可以为:(t1 t2 t3)/3。可以理解,第一节点确定其与各个分组之间的第一目标时延时,除了采用平均值的方式外,也可以采用其他的方式,比如方差等,此处不做限定。
42.在s308,第一节点根据k个第一目标时延,确定目标分组。
43.本实施例中,第一节点可以根据k个第一目标时延,确定出目标分组。示例性的,第一节点可以选取第一目标时延中最小的一个时延对应的分组作为目标分组。
44.作为一种可能的实现方式,如图5所示,根据k个第一目标时延确定目标分组可以包括以下步骤:
45.在s502,根据k个分组中各个分组所包含的节点的数量和第一数量阈值,从k个分组中确定出j个分组,0≤j≤k,j个分组中各个分组所包含的节点的数量均小于第一数量阈值。
46.本实施例中,第一节点可以由其获取到的分组信息中与各个节点相关的信息,确定出各个分组内节点的数量。之后,第一节点可以将各个分组内节点的数量与预先设定的第一数量阈值进行比较。当某个分组内的节点数量大于或等于第一数量阈值时,表明该分组内已无法加入新的节点,因此可以将该分组剔除。由此即可以从k个分组中确定出j个分组,0≤j≤k,j个分组中各个分组所包含的节点的数量均小于第一数量阈值。
47.在s504,当j≥1时,根据j个分组对应的j个第一目标时延,确定目标分组。
48.本实施例中,当j≥1时,表明此时存在第一节点可以加入的分组,因此,可以根据j个分组对应的j个第一目标时延,确定目标分组。示例性的,可以根据确定出的j个第一目标时延和预先设定的第一时延阈值,从j个第一目标时延中确定出q个第一目标时延,0≤q≤j,q个第一目标时延均小于第一时延阈值;并在q≥1时,确定目标分组为q个第一目标时延中最小的一个时延对应的分组。其中,当第一目标时延大于或等于第一时延阈值时,表明第一节点与相应的分组之间的距离较远,因此可以将相应的分组剔除;而当第一目标时延小于第一时延阈值时,表明第一节点与相应的分组之间的距离较近,因此可以将相应的分组保留。对于j=0和q=0的情况,详见下文描述。
49.确定出目标分组后,可以执行s310。
50.在s310,第一节点向区块链发送第一交易,第一交易用于调用智能合约,以用于在合约状态的目标分组中添加第一节点。
51.本实施例中,第一节点确定出目标分组后,可以向区块链发送第一交易。该第一交易可以用于调用智能合约,以在当前的合约状态的目标分组中添加第一节点。区块链中的各个共识节点(例如图1中的节点11-节点14)在接收到该第一交易之后,通过共识将该第一交易及其他多个交易打包到例如待执行的第一区块中,之后各个共识节点分别执行所述第一交易及其他多个交易,生成第一区块,并对第一区块进行共识。各个共识节点在对第一区块共识成功之后,可将第一区块发送给与该共识节点对应的分组,使得该分组中的各个节点可获取该第一区块。
52.具体是,假设第一节点对应的目标分组为分组a,节点12在执行第一交易之后,在智能合约的合约状态中将第一节点的节点信息加入分组a的分组信息中,从而,节点12可根据该分组信息将第一区块分别发送给节点21、节点22、节点23和第一节点。
53.节点21、节点22、节点23和第一节点在获取第一区块之后可分别执行第一区块中的第一交易及其他多个交易,并据此更新本地的世界状态。具体是,第一节点通过执行第一区块中的第一交易,在智能合约的合约状态中将第一节点的节点信息添加到分组a的分组信息中,之后,第一节点可根据分组a中各个节点的节点信息与其他节点建立连接。由此,即完成对第一节点的分组。同时,将第一节点划分到与其距离最近的一个分组内。
54.在一些实施例中,区块链中可以包括n个共识节点。其中,每个共识节点下可以下挂x个分组,x的值可以预先设定。可以理解,区块链中除共识节点之外的节点下可以下挂的分组的数量也可以预先设定。
55.其中,当n个共识节点中存在下挂的分组的数量未达到设定的数量上限的节点时,表明这些节点下还可以下挂分组。因此,在对第一节点分组时,还可以考虑第一节点与下挂的分组的数量未达到设定的数量上限的的共识节点之间的时延,并结合该时延对第一节点进行分组。
56.示例性的,图6为本说明书实施例中提供的另一种区块链中的节点分组方法的流程示意图。其中,图6中所示的方法可以由区块链中的第一节点执行,该第一节点可以但不限于为新加入到区块链中的节点。如图6所示,该区块链中的节点分组方法包括以下步骤:
57.在s602,第一节点从区块链中获取分组信息,分组信息存储于智能合约的合约状态中,分组信息中包括:m个分组的分组标识和m个分组中所包含的各个节点的节点信息,m≥0。对于s601,详见前述s301中的描述,此处不再赘述。
58.在s604,当1≤m<n时,第一节点根据分组信息,确定第一节点与m个分组中的k个分组能够建立连接,1≤k≤m。对于s602,详见前述s302中的描述,此处不再赘述。
59.在s606,第一节点确定其与k个分组中各个分组间的时延,以得到k个第一目标时延,以及,当区块链包含的n个共识节点中r个共识节点下挂的分组的数量未达到第二数量阈值时,确定其与r个共识节点之间的时延,以得到r个第二目标时延,1≤r≤n。
60.本实施例中,第一节点可以基于前述的时延确定方式,分别确定其与k个分组中各个分组间的时延,以及,当区块链包含的n个共识节点中r个共识节点下挂的分组的数量未达到第二数量阈值时,确定其与r个共识节点之间的时延,从而得到k个第一目标时延和r个第二目标时延。其中,r个共识节点之r可以理解为是下挂的分组的数量未达到设定的数量上限的共识节点的集合。
61.在s608,第一节点确定r个第二目标时延中最小的时延小于k个第一目标时延中最小的时延,选取r个第二目标时延中最小的时延对应的共识节点作为第一目标节点。
62.本实施例中,当r个第二目标时延中最小的时延小于k个第一目标时延中最小的时延时,表明第一节点与r个第二目标时延中最小的时延对应的共识节点之间的距离最近,因此,此时可以选取r个第二目标时延中最小的时延对应的共识节点作为第一目标节点,以在该节点下新建分组。可以理解,当r个第二目标时延中最小的时延大于k个第一目标时延中最小的时延时,可以采用图3中所描述的方式对第一节点进行分组。
63.在s610,第一节点向区块链发送第二交易,第二交易用于调用智能合约,以用于在合约状态的第一目标节点下新建分组,并在新建的分组中添加第一节点。
64.本实施例中,第一节点确定出第一目标节点后,可以向区块链发送第二交易。该第二交易可以用于调用智能合约,以在当前的合约状态的第一目标节点下新建分组,并在新建的分组中添加第一节点。由此,即完成对第一节点的分组。
65.在一些实施例中,当前述确定出的j个分组中j=0,或者,前述确定出的q个第一目标时延中q=0,或者,当前述确定出的r个第二目标时延中最小的时延大于第二时延阈值,且小于k个第一目标时延中最小的时延时,表明当前区块链中没有第一节点可以加入的分组,和/或,不能在共识节点下新建分组。此时,为了可以对第一节点进行分组,可以在除共
识节点之外的节点下为第一节点创建新的分组。具体地,如图7所示,可以包括以下步骤:
66.在s702,第一节点根据分组信息,确定其与m个分组内各个节点之间的时延,以得到s个第三目标时延。
67.本实施例中,第一节点可以由其获取到的分组信息中与各个节点相关的信息,并可以基于前述的时延确定方式,确定其与m个分组内各个节点之间的时延,以得到s个第三目标时延。其中,s可以为正整数。
68.在s704,第一节点根据s个第三目标时延,从m个分组内各个节点中确定第二目标节点。
69.本实施例中,第一节点可以根据s个第三目标时延,从m个分组内各个节点中确定第二目标节点。示例性的,第一节点可以选取s个第三目标时延中最小的时延对应的节点作为第二目标节点。
70.在s706,第一节点向区块链发送第三交易,第三交易用于调用智能合约,以用于在合约状态的第二目标节点下新建分组,并在新建的分组中添加第一节点。
71.本实施例中,第一节点确定出第二目标节点后,可以向区块链发送第三交易。该第三交易用于调用智能合约,以用于在当前的合约状态的第二目标节点下新建分组,并在新建的分组中添加第一节点。由此,即完成对第一节点的分组。
72.在一些实施例中,当m≥1时,表明当前区块链中存在分组,因此此时可以基于第一节点与各个分组之间的时延,对第一节点进行分组。而当m=0时,表明当前区块链中不存在分组,此时,可以基于第一节点与区块链中各个共识节点之间的时延,对第一节点进行分组。
73.示例性的,图8为本说明书实施例中提供的另一种区块链中的节点分组方法的流程示意图。其中,图8中所示的方法可以由区块链中的第一节点执行,该第一节点可以但不限于为新加入到区块链中的节点。如图8所示,该区块链中的节点分组方法包括以下步骤:
74.在s802,第一节点从区块链中获取分组信息,分组信息存储于智能合约的合约状态中,分组信息中包括:m个分组的分组标识和m个分组中所包含的各个节点的节点信息,m≥0。对于s801,详见前述s301中的描述,此处不再赘述。
75.在s804,当m=0时,第一节点确定第一节点与区块链中n个共识节点中各个共识节点间的时延,以得到n个第四目标时延。
76.本实施例中,当m=0时,第一节点可以分别与区块链中的n个共识节点建立连接,并基于前述的确定时延的方式,确定出其与各个共识节点之间的时延,以得到n个第四目标时延。其中,第一节点与共识节点之间的第四目标时延,可以反映两者之间的距离远近,例如,当两者之间时延非常小时,表明两者之间的距离非常近。
77.在s806,第一节点根据n个第四目标时延,从n个共识节点中确定第三目标节点。
78.本实施例中,第一节点可以根据n个第四目标时延,从n个共识节点中确定出第三目标节点。示例性的,第一节点可以选取第四目标时延中最小的一个时延对应的共识节点作为第三目标节点。
79.在s808,第一节点向区块链发送第四交易,第四交易用于调用智能合约,以用于在合约状态的第三目标节点下新建分组,并在新建的分组中添加第一节点。
80.本实施例中,第一节点确定出第三目标节点后,可以向区块链发送第四交易。该第
四交易可以用于调用智能合约,以在当前的合约状态的第三目标节点下新建分组,并在新建的分组中添加第一节点。由此,即完成对第一节点的分组。
81.至此,通过上述方式即完成对第一节点的分组。可以理解,前述的第一节点除了可以是新加入区块链的节点外,还可以是一个与其所在分组内的其他节点断开连接,且无法重连的节点,亦可以是某个分组内未完成区块还原的节点。
82.在分组完成后,可以基于分组情况分发区块。为便于理解,下面结合图1描述区块分发过程。
83.继续参阅图1,以节点12向分组a分发区块为例。节点11、12、13和14在基于共识算法(比如:bft(byzantine fault tolerance,拜占庭容错)算法)对某一笔交易达成共识后,可以生成区块a。接着,节点12可以通过使用纠错码对区块a进行编码,以向区块a中添加冗余位(也称为冗余),并将区块a划分为3个数据块,以及将3个数据块分别发送至节点21、22和23。节点21、22和23可以分别将它们各自从节点12获取到的数据块在分组a中进行广播。这样,节点21、22和23即可以均可以获取到3个数据块,并由这3个数据还原出区块a。由此节点12即完成了对区块a的分发。
84.与前述方法实施例基于相同的构思,本说明书实施例中还提供了一种区块链中的节点分组装置。
85.示例性的,图9为本说明书实施例中提供的一种区块链节点的结构示意图。区块链节点如图9所示,该区块链节点900包括:通信模块910和处理模块920。其中,通信模块910可以配置为从区块链中获取分组信息,分组信息存储于智能合约的合约状态中,分组信息中包括:m个分组的分组标识和m个分组中所包含的各个节点的节点信息,m≥0。处理模块920可以配置为当m≥1时,根据分组信息,确定区块链节点与m个分组中的k个分组能够建立连接,1≤k≤m;以及,确定区块链节点与k个分组中各个分组间的时延,以得到k个第一目标时延;以及,根据k个第一目标时延,确定目标分组。通信模块910还可以配置为向区块链发送第一交易,第一交易用于调用智能合约,以用于在合约状态的目标分组中添加区块链节点。
86.在一些实施例中,处理模块920在根据k个第一目标时延,确定目标分组时,具体配置为:根据k个分组中各个分组所包含的节点的数量和第一数量阈值,从k个分组中确定出j个分组,0≤j≤k,j个分组中各个分组所包含的节点的数量均小于第一数量阈值;当j≥1时,根据j个分组对应的j个第一目标时延,确定目标分组。
87.在一些实施例中,处理模块920在根据j个分组对应的j个第一目标时延,确定目标分组时,具体配置为:根据j个第一目标时延和第一时延阈值,从j个第一目标时延中确定出q个第一目标时延,0≤q≤j,q个第一目标时延均小于第一时延阈值;当q≥1时,确定目标分组为q个第一目标时延中最小的一个时延对应的分组。
88.在一些实施例中,区块链中包括n个共识节点。其中,处理模块920还可以配置为:当n个共识节点中r个共识节点下挂的分组的数量未达到第二数量阈值时,确定区块链节点与r个共识节点之间的时延,以得到r个第二目标时延,1≤r≤n;以及,确定r个第二目标时延中最小的时延小于k个第一目标时延中最小的时延,选取r个第二目标时延中最小的时延对应的共识节点作为第一目标节点。
89.通信模块910还可以配置为向区块链发送第二交易,第二交易用于调用智能合约,以用于在合约状态的第一目标节点下新建分组,并在新建的分组中添加区块链节点。
90.在一些实施例中,处理模块920还可以配置为:当j=0,或者,q=0,或者,确定出的r个第二目标时延中最小的时延大于第二时延阈值,且小于k个第一目标时延中最小的时延时,根据分组信息,确定区块链节点与m个分组内各个节点之间的时延,以得到s个第三目标时延;根据s个第三目标时延,从m个分组内各个节点中确定第二目标节点。
91.通信模块910还可以配置为向区块链发送第三交易,第三交易用于调用智能合约,以用于在合约状态的第二目标节点下新建分组,并在新建的分组中添加区块链节点。
92.在一些实施例中,处理模块920还可以配置为:当m=0时,确定区块链节点与区块链中n个共识节点中各个共识节点间的时延,以得到n个第四目标时延;根据n个第四目标时延,从n个共识节点中确定第三目标节点。
93.通信模块910还可以配置为向区块链发送第四交易,第四交易用于调用智能合约,以用于在合约状态的第三目标节点下新建分组,并在新建的分组中添加区块链节点。
94.在一些实施例中,通信模块910具体配置为:与区块链中至少一个共识节点进行区块同步,以获取到区块链中最新的区块;基于区块链中最新的区块,获取分组信息。
95.在一些实施例中,处理模块920还可以配置为:当区块链节点与m个分组中第一分组不能够建立连接时,确定区块链节点不能加入第一分组。
96.应当理解的是,上述装置用于执行上述实施例中的方法,装置中相应的程序模块,其实现原理和技术效果与上述方法中的描述类似,该装置的工作过程可参考上述方法中的对应过程,此处不再赘述。
97.在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmable logic device,pld)(例如现场可编程门阵列(field programmable gate array,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardware description language,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advanced boolean expression language)、ahdl(altera hardware description language)、confluence、cupl(cornell university programming language)、hdcal、jhdl(java hardware description language)、lava、lola、myhdl、palasm、rhdl(ruby hardware description language)等,目前最普遍使用的是vhdl(very-high-speed integrated circuit hardware description language)与verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
98.控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可
读介质、逻辑门、开关、专用集成电路(application specific integrated circuit,asic)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc 625d、atmel at91sam、microchip pic18f26k20以及silicone labs c8051f320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
99.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为服务器系统。当然,本技术不排除随着未来计算机技术的发展,实现上述实施例功能的计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
100.虽然本说明书一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
101.为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
102.本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
103.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特
定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
104.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
105.在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
106.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
107.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储、石墨烯存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
108.本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
109.本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
110.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点
可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
111.以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献