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

区块同步方法、区块链系统、设备和存储介质与流程

2022-10-12 23:24:24 来源:中国专利 TAG:


1.本技术涉及区块链技术领域,特别涉及一种区块同步方法、区块链系统、设备和存储介质。


背景技术:

2.由于区块链具有不可篡改性,所以区块链技术飞速发展,且已经在各个领域中得到广泛应用。在一些场景中,区块链系统中包括多个共识节点(validating peer,vp)和多个非共识节点(none-validating peer,nvp)。vp需要参与区块共识过程,nvp无需参与区块共识过程,而为了保持节点中数据的一致性,nvp需要同步已得到vp的共识的区块。
3.相关技术中,多个vp中的每个vp可以直接与多个nvp进行通信连接。多个vp在完成对某一区块的共识后,在区块链中添加该区块。之后任意一个vp可以将该区块直接发送给与这个vp进行通信连接的多个nvp,以实现多个nvp中的每个nvp对这个区块的同步。
4.然而,在上述方式中,若vp需要共识的区块数量越来越多,且与vp进行通信连接的nvp的数量持续增长,则vp会非常繁忙。这会导致vp的压力比较大,从而影响区块共识效率。


技术实现要素:

5.本技术提供了一种区块同步方法、区块链系统、设备和存储介质,可以减轻区块链系统中共识节点的压力,提高区块共识效率。所述技术方案如下:第一方面,提供了一种区块同步方法,应用于区块链系统,所述区块链系统包括多个共识节点vp和m个非共识节点nvp集群,所述多个vp中的m个vp与所述m个nvp集群一一对应,所述m个nvp集群中每个nvp集群包括第一nvp和至少一个第二nvp,所述第一nvp为与对应的vp进行通信的nvp,所述第一nvp与所述至少一个第二nvp中的每个第二nvp之间均具有网络路径,所述m为正整数,所述方法包括:所述多个vp每完成对一个区块的共识并将所述区块添加至区块链后,所述m个vp中的每个vp向对应的nvp集群中的所述第一nvp发送携带有所述区块的第一消息;所述m个nvp集群中每个nvp集群中的每个nvp若接收到所述第一消息,则将所述第一消息携带的所述区块存储至区块链,并向同一nvp集群中相邻的nvp发送所述第一消息。
6.在本技术中,区块链系统包括多个vp和m个nvp集群,该多个vp中的m个vp与该m个nvp集群一一对应,且m个nvp集群中每个nvp集群包括第一nvp和至少一个第二nvp。第一nvp为与对应的vp进行通信的nvp,第一nvp与至少一个第二nvp中的每个第二nvp之间均具有网络路径,所以nvp集群中的第一nvp既可以与对应的vp进行通信,也可以与同一nvp集群中的其他nvp进行通信。该多个vp每完成对一个区块的共识并将该区块添加至区块链后,该m个vp中的每个vp向对应的nvp集群中的第一nvp发送携带有该区块的第一消息。该m个nvp集群中每个nvp集群中的每个nvp若接收到第一消息,则将第一消息携带的该区块存储至区块链,并向同一nvp集群中相邻的nvp发送第一消息,如此每个nvp集群中的每个nvp都可以同步该区块。这种情况下,m个vp中的每个vp只需要向对应的nvp集群中的第一nvp发送携带有
该区块的第一消息,就可以实现对应的nvp集群中的每个nvp对该区块的同步,从而减轻了vp的压力,进而可以提高区块共识效率。
7.第二方面,提供了一种区块链系统,所述区块链系统包括多个共识节点vp和m个非共识节点nvp集群,所述多个vp中的m个vp与所述m个nvp集群一一对应,所述m个nvp集群中每个nvp集群包括第一nvp和至少一个第二nvp,所述第一nvp为与对应的vp进行通信的nvp,所述第一nvp与所述至少一个第二nvp中的每个第二nvp之间均具有网络路径,所述m为正整数;所述m个vp中的每个vp,用于在所述多个vp每完成对一个区块的共识并将所述区块添加至区块链后,向对应的nvp集群中的所述第一nvp发送携带有所述区块的第一消息;所述m个nvp集群中每个nvp集群中的每个nvp,用于若接收到所述第一消息,则将所述第一消息携带的所述区块存储至区块链,并向同一nvp集群中相邻的nvp发送所述第一消息。
8.第三方面,提供了一种计算机设备,所述计算机设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述的区块同步方法。
9.第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述的区块同步方法。
10.第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述的区块同步方法的步骤。
11.可以理解的是,上述第二方面、第三方面、第四方面、第五方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
附图说明
12.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
13.图1是本技术实施例提供的一种区块链系统的结构示意图;图2是本技术实施例提供的一种区块同步方法的流程图;图3是本技术实施例提供的一种区块链的示意图;图4是本技术实施例提供的另一种区块链的示意图;图5是本技术实施例提供的一种计算机设备的结构示意图。
具体实施方式
14.为使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。
15.应当理解的是,本技术提及的“多个”是指两个或两个以上。在本技术的描述中,除非另有说明,“/”表示或的意思,比如,a/b可以表示a或b;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,比如,a和/或b,可以表示:单独存在a,同时
存在a和b,单独存在b这三种情况。另外,为了便于清楚描述本技术的技术方案,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
16.在对本技术实施例进行详细地解释说明之前,先对本技术实施例的应用场景予以说明。
17.本技术实施例提供的区块同步方法可以应用于将区块链系统的vp中存储的区块同步至nvp集群中每个nvp的场景中。
18.例如,在联盟链场景中,一种联盟链包括多个省级机构的节点以及一些省级机构下属的市级单位的节点。多个省级机构的节点(即vp)可以参与区块共识过程,而一个省级机构下属的市级单位的节点(即nvp)无需参与区块共识过程,这种情况下,本技术实施例提供的区块同步方法可以应用于此场景中。
19.具体地,该多个省级机构的节点中任意的一个节点每接收到客户端发送的交易,生成新的区块,并向该多个省级机构中其余省级机构的节点发送该区块,以使该多个省级机构的节点对该区块进行共识处理。在该多个省级机构的节点完成对该区块的共识处理后,每个省级机构的节点可以向自己下属的多个市级单位中与自己通信的一个市级单位的节点发送该区块。之后,这个市级单位的节点接收到该区块后,将该区块存储至自身的区块链,并向相邻的市级单位的节点发送该区块。以此类推,一个省级机构下属的多个市级单位中每个市级单位的节点接收到该区块后,可以将该区块存储至自身的区块链中,并向自身相邻的市级单位的节点发送该区块。如此,一个省级机构下属的多个市级单位中每个市级单位的节点均可以将该区块同步至自身的区块链中。这种情况下,区块链系统中每个省级机构的节点只需向与自己通信的一个市级单位的节点发送该区块,即可实现下属的多个市级单位中每个市级单位的节点对该区块的同步,如此,减轻了区块链系统中多个省级机构的节点的压力,提高了区块共识效率。
20.下面对本技术实施例涉及的区块链系统的相关内容予以说明。
21.图1是本技术实施例提供的一种区块链系统的结构示意图。
22.参见图1,区块链系统100是指用于进行节点与节点之间数据共享的系统,区块链系统100中包括多个vp101和m个nvp集群102,m个nvp集群102中的每个nvp集群102中包括多个nvp103,m为正整数。
23.多个vp101是区块链系统中需要参与区块共识过程的节点。m个nvp集群102中每个nvp集群102中的每个nvp103是无需参与区块共识过程的节点。
24.多个vp101在正常工作时可以接收到输入信息,并基于接收到的输入信息维护区块链系统100内的共享数据。多个vp101之间可以存在信息连接,且多个vp101之间可以通过该信息连接进行信息传输。比如,当区块链系统100中的任意的一个vp101接收到客户端发送的输入信息时,区块链系统100中的其他vp101便根据共识算法获取该输入信息,并将该输入信息作为共享数据中的数据进行存储。
25.除此之外,多个vp101中的m个vp101与m个nvp集群102一一对应,对于m个vp101中任意的一个vp101,这个vp101可以与m个nvp集群102中对应的nvp集群102进行通信。区块链系统100中的多个vp101将该输入信息作为共享数据中的数据进行存储之后,还可以与对应
的nvp集群102进行通信,即向对应的nvp集群102发送该输入信息,以使对应的nvp集群102中的多个nvp103将该输入信息作为共享数据中的数据进行存储。
26.其中,区块链系统100中的vp101是与对应的nvp集群102中的一个nvp103进行通信,也即区块链系统100中的vp101是只向对应的nvp集群102中的一个nvp103发送消息,从而可以减轻区块链系统100中多个vp101的压力,进而可以提高区块链系统100的多个vp101的性能。
27.为了保证区块链系统100中每个节点中存储的共享数据的一致性,每个nvp集群102中的多个nvp103需要同步对应的vp101中存储的该输入数据。
28.每个nvp集群102中的多个nvp103包括第一nvp103和至少一个第二nvp103,第一nvp103为所在的nvp集群102中与对应的vp101进行通信的nvp103,也就是说区块链系统100中的一个vp101是向对应nvp集群102中的第一nvp103发送该输入信息。其中,每个nvp集群102中可以任意添加新的nvp103,而这不会影响到区块链系统100中vp101向对应的nvp集群102发送消息的能力,所以区块链系统100中的每个nvp集群102的扩展性较强。
29.另外,第一nvp103与至少一个第二nvp103中的每个第二nvp103之间均具有网络路径。网络路径用于指示多个nvp103之间的数据传输通道,第一nvp103可以通过该网络路径向至少一个第二nvp103传输数据。两个nvp103之间的网络路径中可能存在多个nvp103,此时两个nvp103可以进行间接通信。两个nvp103之间的网络路径也可能不存在其他nvp103,也即两个nvp103可以进行直接通信,也即这两个nvp103为相邻的nvp103。
30.多个nvp103中的第一nvp103接收到该输入信息后,可以通过网络路径对该输入信息进行信息传输,以使多个nvp103中的其余第二nvp103也会接收到该输入信息。如此,多个nvp103中的每个nvp103均会将该输入信息作为共享数据中的数据进行存储,以实现区块链系统100中的全部节点上存储的数据一致。也即,区块链系统100中的每个节点均存储一条相同的区块链。
31.区块链系统100具有分布式数据存储、点对点传输、共识机制、加密算法等计算机技术。区块链系统100是一个分布式的共享账本和数据库,具有去中心化、不可篡改、全程留痕、可以追溯、集体维护、公开透明等特点。这些特点保证了区块链的共享开放、真实完整和安全可靠。
32.区块链系统100中的多个vp101和m个nvp集群102可以执行下文图2实施例所述的区块同步方法,来实现将区块链系统100的vp101中存储的区块(即上文所说的共享数据)同步至nvp集群102中的每个nvp103。
33.下面对本技术实施例提供的区块同步方法进行详细地解释说明。
34.图2是本技术实施例提供的一种区块同步方法的流程图。该方法可以应用于区块链系统。参见图2,该方法包括以下步骤。
35.步骤201:多个vp每完成对一个区块的共识并将该区块添加至区块链后,该多个vp中m个vp中的每个vp向对应的nvp集群中的第一nvp发送携带有该区块的第一消息。
36.第一nvp为同一nvp集群中与对应的vp进行通信的nvp,同一nvp集群中只存在一个第一nvp,也就是说该多个vp中m个vp中的每个vp是向对应的nvp集群中的一个nvp发送携带有该区块的第一消息。
37.第一消息中携带该区块,第一消息用于指示接收到第一消息的nvp对第一消息中
携带的区块进行存储。可选地,第一消息可以为gossip(流行病协议)消息,当然,第一消息也可以为其他类型的消息,本技术实施例对此不作限定。
38.由于本技术实施例提供的区块链系统中的m个nvp集群中每个nvp集群中的每个nvp无需参与区块的共识过程,所以该m个vp中的每个vp可以向对应的nvp集群发送携带有该区块的第一消息,以使对应的nvp集群获得该区块并存储,从而保证区块链系统中每个节点存储的区块链的一致性。
39.这种情况下,该m个vp中每个vp对应的nvp集群中第一nvp可以接收到携带有该区块的第一消息,那么对应的nvp集群中的第一nvp可以对该区块进行存储。且m个vp中的每个vp只需向对应的nvp集群中的第一nvp发送第一消息,而不需要向对应的nvp集群中的每个nvp发送第一消息。如此,减轻了每个vp的压力。
40.值得注意的是,该m个vp中的每个vp向对应的nvp集群中的第一nvp发送携带有该区块的第一消息之前,该m个nvp集群中任意的一个nvp集群还可以选举出一个主nvp。
41.一个nvp集群的主nvp用于与对应的vp进行通信,也即主nvp为第一nvp,一个nvp集群中除主nvp之外的其他nvp为从nvp,一个nvp集群中的从nvp为第二nvp。也即一个nvp集群中存在一个主nvp和至少一个从nvp。
42.进一步地,该m个nvp集群中任意的一个nvp集群选举出一个主nvp(即第一nvp)之后,这个nvp集群中的第一nvp可以向对应的vp发送第一通知消息。
43.第一通知消息用于指示发送第一通知消息的nvp已当选所在nvp集群的主nvp。这种情况下,发送第一通知消息的nvp为所在nvp集群中与对应的vp进行通信的nvp,则之后对应的vp将该区块添加至区块链后可以向这个nvp集群中已当选主nvp的nvp(即第一nvp)发送第一消息,从而保证对应的vp可以只向这个nvp集群的第一nvp发送第一消息。
44.可选地,该m个nvp集群中任意的一个nvp集群可以通过动态选举的方式选举出一个主nvp。
45.如此,在这个nvp集群选举出的主nvp宕机时,会重新选举出一个主nvp,来保证一个nvp集群中一直存在一个第一nvp与对应的vp进行通信,从而提高了这个nvp集群的活性。
46.具体地,该m个nvp集群中任意的一个nvp集群通过动态选举的方式选举出一个主nvp的操作可以通过如下步骤(1)-步骤(4)实现。
47.(1)一个nvp集群整体启动后,这个nvp集群中至少一个nvp中的每个nvp向同一nvp集群中的其他nvp广播携带自身的节点标识的第二消息。
48.一个nvp集群整体启动是指这个nvp集群中的所有nvp中的每个nvp均启动,也即每个nvp开始进入工作状态。
49.该至少一个nvp为这个nvp集群整体启动后这个nvp集群中想要申请成为主nvp的nvp。
50.某个nvp的节点标识用于唯一标识这个nvp,例如,某个nvp的节点标识可以为这个nvp的编号、ip(internet protocol,互联网协议)地址等。
51.第二消息中携带节点标识,第二消息用于指示第二消息携带的节点标识所标识的nvp申请成为主nvp。可选地,第二消息可以为gossip消息,当然,第二消息也可以为其他类型的消息,本技术实施例对此不作限定。
52.由于一个nvp集群整体启动后,这个nvp集群中可能不存在第一nvp,也即这个nvp
集群中没有与对应的vp进行通信的nvp,那么对应的vp在将该区块添加至区块链后,会不知道向这个nvp集群中的哪个nvp发送携带该区块的第一消息。所以在这个nvp集群整体启动后,需要先选举出一个主nvp,也即得到这个nvp集群的第一nvp。此时这个nvp集群中的每个nvp均有申请成为主nvp的权利,所以这个nvp集群中任意的一个nvp若想申请成为主nvp,则可以向这个nvp集群中广播第二消息,以申请成为这个nvp集群的主nvp。
53.(2)该至少一个nvp中任意的一个nvp在广播第二消息后的第一预设时长内接收其他nvp广播的第二消息。
54.第一预设时长可以预先进行设置,且第一预设时长可以设置的较大,以保证任意的一个nvp可以接收到其他nvp中的每个nvp广播的携带自身的节点标识的第二消息。例如第一预设时长可以设置为5分钟。
55.这种情况下,该至少一个nvp中任意的一个nvp在广播第二消息后,可以接收其他nvp广播的第二消息,以知道这个nvp集群中还有哪些nvp想要申请成为主nvp。
56.(3)该至少一个nvp中任意的一个nvp将自身的节点标识与在第一预设时长内接收到的其他nvp广播的第二消息携带的节点标识进行比较,以确定自身是否当选主nvp。
57.具体地,该至少一个nvp中任意的一个nvp可以根据预设选举条件将自身的节点标识与在第一预设时长内接收到的其他nvp广播的第二消息携带的节点标识进行比较,以确定自身是否当选主nvp。
58.预设选举条件为判断是否可以当选主nvp的条件。预设选举条件可以预先进行设置,且预设选举条件可以由技术人员根据使用需求进行设置。例如:预设选举条件可以为:由nvp集群中节点标识最小的nvp当选主nvp。又例如:预设选举条件可以为:由nvp集群中节点标识最大的nvp当选主nvp。当然,预设选举条件也可以设置为其他判断是否可以当选主nvp的条件,本技术实施例对此不作限定。
59.例如:预设选举条件为:由nvp集群中节点标识最小的nvp当选主nvp。一个nvp的节点标识为04,这个nvp在第一预设时长内接收到三个nvp广播的第二消息,这三个nvp中的第一个nvp广播的第二消息中携带的节点标识为05,这三个nvp中的第二个nvp广播的第二消息中携带的节点标识为06,这三个nvp中的第三个nvp广播的第二消息中携带的节点标识为07。之后,这个nvp将自身的节点标识(04)与接收到的这三个nvp广播的第二消息中携带的节点标识(05、06、07)进行比较,判断自身节点标识是否符合预设选举条件。由于自身的节点标识均小于这三个nvp广播的第二消息中携带的节点标识,所以这个nvp确定自身可以当选主nvp。
60.(4)该至少一个nvp中任意的一个nvp若确定自身当选主nvp,则每隔第二预设时长向同一nvp集群中的其他nvp发送第二通知消息;若确定自身不能当选主nvp,则结束申请成为主nvp的操作。
61.第二预设时长可以预先进行设置,且第二预设时长可以设置的较小,以保证主nvp能够不断向同一nvp集群中的其他nvp发送第二通知消息,以使同一nvp集群中的其他nvp一直知道这个nvp集群的主nvp是哪个。
62.第二通知消息用于指示发送第二通知消息的nvp已当选所在nvp集群的主nvp,且用于指示接收第二通知消息的nvp为所在nvp集群的从nvp。
63.这种情况下,该至少一个nvp中任意的一个nvp若确定自身当选主nvp,则向同一
nvp集群中的其他nvp发送第二通知消息,以通知同一nvp集群中的其他nvp自身已当选主nvp,此时同一nvp集群中的其他nvp为从nvp。若确定自身不能当选主nvp,则结束申请成为主nvp的操作,也即不再广播第二消息,退出此次主nvp的选举。如此是在一个nvp集群整体启动后,第一次选举出这个nvp集群的主nvp。
64.可选地,第二通知消息中可以携带自身(即主nvp)的节点标识。这种情况下,若这个nvp集群中任意的一个从nvp接收到第二通知消息,可以将自身的节点标识与第二通知消息携带的节点标识进行比较,以确定第二通知消息中携带的节点标识所标识的nvp是否能够继续当选主nvp;这个从nvp若确定第二通知消息携带的节点标识所标识的nvp不能继续当选主nvp,则向当前的主nvp(即发送第二通知消息的nvp)发送携带自身节点标识的请求消息;当前的主nvp接收到这个从nvp发送的请求消息后,将自身的节点标识与请求消息中携带的节点标识进行比较,以确定自身是否能继续当选主nvp;当前的主nvp若确定自身不能继续当选主nvp,则向这个从nvp发送确认消息;这个从nvp接收到确认消息后,确定自身当选主nvp,则向这个nvp集群中的其他nvp广播第二通知消息。
65.该请求消息用于指示发送请求消息的从nvp申请成为主nvp。请求消息中携带发送请求消息的从nvp的节点标识。
66.该确认消息用于指示当前的主nvp确认自身不能继续当选主nvp,且用于指示发送请求消息的从nvp可以当选主nvp。
67.一个从nvp接收到第二通知消息后,将自身的节点标识与第二通知消息携带的节点标识进行比较时,可以根据预设选举条件来将自身的节点标识与第二通知消息携带的节点标识进行比较,以确定第二通知消息中携带的节点标识所标识的nvp是否能够继续当选主nvp。具体来讲,这个从nvp将自身的节点标识与第二通知消息携带的节点标识进行比较后,若确定第二通知消息中携带的节点标识不符合预设选举条件,则可以确定第二通知消息中携带的节点标识所标识的nvp不能继续当选主nvp;而若确定这个从nvp的节点标识不符合预设选举条件,则可以确定第二通知消息中携带的节点标识所标识的nvp能够继续当选主nvp,此时也确定自身仍旧为从nvp。
68.同理,当前的主nvp接收到这个从nvp发送的请求消息后,也可以根据预设选举条件来将自身的节点标识与请求消息中携带的节点标识进行比较,以确定自身是否能继续当选主nvp。具体来讲,当前的主nvp将自身的节点标识与请求消息中携带的节点标识进行比较后,若确定请求消息中携带的节点标识不符合预设选举条件,则可以确定自身能继续当选主nvp;而若确定自身的节点标识不符合预设选举条件,则可以确定自身不能继续当选主nvp。
69.这种情况下,这个nvp集群能够选举出更符合预设选举条件的主nvp,也即能够选举出更有资格当选主nvp的nvp。
70.例如:第二通知消息中携带的节点标识为03,一个从nvp的节点标识为02。这个nvp集群中的一个从nvp接收到第二通知消息,之后将自身的节点标识(02)与第二通知消息中携带的节点标识(03)进行比较,确定第二通知消息中携带的节点标识(03)所标识的nvp(即当前的主nvp)不能继续当选主nvp,则这个nvp向当前主nvp发送携带自身的节点标识(02)的请求消息。当前的主nvp接收到该请求消息后,将自身的节点标识(03)与该请求消息中携带的节点标识(02)进行比较,确定自身不能继续当选主nvp。之后当前的主nvp可以向这个
nvp发送确认消息,确认自身不能继续当选主nvp。在这个nvp接收到该确认消息后,确定自身当选主nvp,则向这个nvp集群中的其他nvp广播第二通知消息,以通知这个nvp集群中的其他nvp自身已当选主nvp。
71.值得注意的是,若一个nvp集群中的主nvp为宕机状态,则这个nvp集群需要重新选举出新的主nvp。
72.由于这个nvp集群的主nvp为宕机状态时,主nvp无法与对应的vp进行通信,也即所在的nvp集群与对应的vp无法进行通信,且主nvp无法与所在的nvp集群中的其他nvp进行通信。所以这个nvp集群要重新选举出一个新的主nvp,以保持这个nvp集群与对应的vp的通信连接,也即保证这个nvp集群可以接收到对应的vp发送的消息,以及保证这个nvp集群内主nvp与从nvp之间的通信连接。
73.具体地,若一个nvp集群中的主nvp为宕机状态,则这个nvp集群重新选举出新的主nvp的操作可以通过如下步骤(1)-步骤(5)实现。
74.(1)这个nvp集群中任意的一个从nvp若在第三预设时长内未接收到第二通知消息,则向同一nvp集群中的其他nvp广播第二消息。
75.第三预设时长可以预先进行设置,且第三预设时长大于或等于第二预设时长,以使这个从nvp有充足的时间接收这个nvp集群的主nvp发送的第二通知消息。
76.这种情况下,这个从nvp若在第三预设时长内未接收到第二通知消息,说明这个nvp集群的主nvp未在第二预设时长发送第二通知消息,则可以确定所在nvp集群的主nvp很有可能为宕机状态。为了保持这个nvp集群与对应的vp的通信连接,这个从nvp可以向同一nvp集群中的其他nvp广播第二消息,以申请成为这个nvp集群的主nvp。
77.(2)这个nvp集群中任意的一个nvp若接收到这个从nvp广播的第二消息,则在将自身的节点标识与这个从nvp广播的第二消息携带的节点标识进行比较后,确定这个从nvp不能当选主nvp的情况下,向同一nvp集群中的其他nvp广播第二消息。
78.一个nvp接收到这个从nvp广播的第二消息后,可以根据预设选举条件来将自身的节点标识与第二消息中携带的节点标识进行比较,以确定是自身还是这个从nvp不能当选主nvp。具体来讲,一个nvp将自身的节点标识与第二消息中携带的节点标识进行比较后,若确定第二消息中携带的节点标识不符合预设选举条件,则可以确定这个从nvp不能当选主nvp;而若确定自身的节点标识不符合预设选举条件,则可以确定自身不能当选主nvp。
79.这个从nvp在广播第二消息后,这个nvp集群中的其他nvp中的任意的一个nvp会接收到这个nvp广播的第二消息。之后这个nvp可以根据预设选举条件将自身的节点标识与这个从nvp广播的第二消息中携带的节点标识进行比较,以确定是自身还是这个从nvp不能当选主nvp。若确定这个从nvp不能当选主nvp,则这个nvp可以向同一nvp集群中的其他nvp广播第二消息,以申请自身成为主nvp。若确定自身不能当选主nvp,则这个nvp可以结束广播第二消息的操作,也即退出这个nvp集群中新的主nvp的选举。
80.(3)这个nvp集群中任意的一个nvp在最新广播第二消息后的第一预设时长内接收其他nvp广播的第二消息。
81.这个nvp集群中任意的一个nvp在最新广播第二消息后,可以接收其他nvp广播的第二消息,以知道这个nvp集群中还有哪些nvp申请成为主nvp。
82.(4)这个nvp集群中任意的一个nvp将自身的节点标识与在第一预设时长内接收到
的其他nvp广播的第二消息携带的节点标识进行比较,以确定自身是否当选主nvp。
83.具体地,步骤(4)的操作与上述该至少一个nvp中任意的一个nvp将自身的节点标识与在第一预设时长内接收到的其他nvp广播的第二消息携带的节点标识进行比较,以确定自身是否当选主nvp的操作类似,此处不再赘述。
84.(5)这个nvp集群中任意的一个nvp若确定自身当选主nvp,则每隔第二预设时长向同一nvp集群中的其他nvp发送第二通知消息。
85.这种情况下,这个nvp集群中任意的一个nvp若确定自身当选主nvp,则向同一nvp集群中的其他nvp发送第二通知消息,以通知同一nvp集群中的其他nvp自身已当选新的主nvp,此时同一nvp集群中的其他nvp为从nvp。如此是在一个nvp集群中的主nvp宕机时,重新选举出了新的主nvp。
86.步骤202:该m个nvp集群中每个nvp集群中的每个nvp若接收到第一消息,则将第一消息携带的该区块存储至区块链,并向同一nvp集群中相邻的nvp发送第一消息。
87.每个nvp可以将第一消息携带的该区块存储至自身的区块链。
88.该m个nvp集群中每个nvp集群中的第一nvp先接收到对应的vp发送的第一消息,则第一nvp可以将第一消息中携带的该区块存储至自身的区块链,并向同一nvp集群中相邻的nvp发送第一消息。之后,同一nvp集群中与第一nvp相邻的nvp中任意的一个nvp接收到第一nvp发送的第一消息后,也可以将第一消息中携带的该区块存储至自身的区块链,并向同一nvp集群中相邻的nvp发送第一消息。以此类推,同一nvp集群中的每个nvp均会将第一消息携带的该区块存储至自身的区块链,并向同一nvp集群中相邻的nvp发送第一消息。
89.可选地,步骤202可以通过gossip协议实现。也即每个nvp集群中的第一nvp接收到第一消息后,通过gossip协议向所在的nvp集群中的每个nvp广播第一消息,以使所在的nvp集群中的每个nvp将第一消息中携带的区块存储至自身的区块链。
90.这种情况下,通过gossip协议传播第一消息,则每个nvp集群中的每个nvp均会将第一消息中携带的该区块存储至自身的区块链,从而实现将对应的vp中添加的该区块同步至每个nvp集群中的每个nvp。
91.可选地,该m个nvp集群中每个nvp集群中的每个nvp具有节点列表,节点列表中包括同一nvp集群中相邻的nvp的节点标识。
92.一个nvp中的节点列表用于指示与这个nvp相邻的nvp,示例地,一个nvp的节点标识为02,从如下表1所示的这个nvp中的节点列表中可以知道这个nvp相邻的nvp的节点标识为01、03、04。
93.表1本技术实施例仅以上表1为例来对一个nvp的节点列表进行示例性说明,上表1并不对本技术实施例构成限定。
94.这种情况下,步骤202的操作可以通过如下步骤(1)-步骤(3)实现。
95.(1)该m个nvp集群中每个nvp集群中任意的一个nvp若接收到第一消息,将第一消
息携带的该区块存储至自身的区块链。
96.这种情况下,一个nvp接收到第一消息后先将第一消息中携带的该区块存储至自身的区块链,也即是实现了将对应的vp中添加的该区块同步至这个nvp中。
97.可选地,vp生成的第一消息中还可以携带第一消息的消息序号。这种情况下,该m个nvp集群中每个nvp集群中任意的一个nvp若接收到第一消息,可以先判断最新接收到的第一消息的消息序号是否大于上一次接收到的历史第一消息的消息序号;在最新接收到的第一消息的消息序号大于上一次接收到的历史第一消息的消息序号的情况下,再将第一消息携带的该区块存储至自身的区块链;而在最新接收到的第一消息的消息序号小于或等于上一次接收到的历史第一消息的消息序号的情况下,丢弃最新接收到的第一消息。
98.第一消息的消息序号用于唯一标识第一消息,且vp生成的第一消息的消息序号是递增的。
99.历史第一消息为一个nvp在最新接收到的第一消息之前已经接收到的第一消息。
100.若一个nvp最新接收到的第一消息的消息序号大于上一次接收到的历史第一消息的消息序号,说明最新接收到的第一消息为对应的vp最新生成的,也即最新接收到的第一消息中携带的该区块为对应的vp最新添加至区块链中的,也就可以确定最新接收到的第一消息中携带的该区块为这个nvp的区块链中未存储的区块。如此,这个nvp可以将第一消息中携带的该区块存储至区块链,以实现对该区块的同步。
101.若一个nvp最新接收到的第一消息的消息序号小于或等于上一次接收到的历史第一消息的消息序号,说明最新接收到的第一消息不是对应vp最新生成的第一消息,也即最新接收到的第一消息中携带的该区块很有可能已被这个nvp的区块链存储,如此就不需要再对该区块进行存储,所以可以将最新接收到的第一消息丢弃。
102.这种情况下,该m个nvp集群中每个nvp集群中任意的一个nvp的区块链中每次存储的区块为对应的vp中新添加的区块。如此可以保证该m个nvp集群中每个nvp集群中任意的一个nvp的区块链中存储的区块不会重复。
103.(2)若该m个nvp集群中每个nvp集群中任意的一个nvp接收到的第一消息来自对应的vp,则向第一消息中添加自身的节点标识,以更新第一消息;向自身的节点列表中的每个节点标识所标识的nvp发送更新后的第一消息。
104.第一消息用于指示第一消息携带的节点标识所标识的nvp已接收到第一消息,即指示第一消息携带的节点标识所标识的nvp已存储第一消息携带的区块至区块链。
105.这个nvp向第一消息中添加自身的节点标识,以更新第一消息,这样可以保证下一个接收到更新后的第一消息的nvp知道哪些nvp已接收到第一消息。
106.若一个nvp接收到的第一消息来自对应的vp,说明这个nvp为第一nvp,则可知此时所在nvp集群中除这个nvp之外的其他nvp尚未接收到第一消息,也即这个nvp的相邻的nvp均没有接收到第一消息,则这个nvp在更新第一消息后可以向自身的节点列表中的每个节点标识所标识的nvp发送更新后的第一消息。
107.(3)若该m个nvp集群中每个nvp集群中任意的一个nvp接收到的第一消息来自同一nvp集群中的nvp,则将第一消息携带的节点标识确定为目标节点标识;向第一消息中添加自身的节点标识,以更新第一消息;向自身的节点列表中除目标节点标识之外的其他每个节点标识所标识的nvp发送更新后的第一消息。
108.若一个nvp接收到的第一消息来自同一nvp集群中的nvp,说明这个nvp是第二nvp,则可知此时所在nvp集群中除这个nvp之外的其他nvp中至少存在部分nvp(包括第一nvp)已接收到第一消息。因而这个nvp接收到的第一消息中已经携带节点标识(即目标节点标识),目标节点标识所标识的nvp即是已经接收到第一消息的nvp。从而这个nvp可以不用向目标节点标识所标识的nvp发送更新后的第一消息。也即,这个nvp在更新第一消息后可以向自身的节点列表中除目标节点标识之外的其他每个节点标识所标识的nvp发送更新后的第一消息。
109.如此可以保证该m个nvp集群中每个nvp集群中各个nvp不会接收到重复的第一消息,从而可以保证各个nvp的区块链中存储的区块不会重复。
110.可选地,一个nvp的节点列表中还可以包括相邻的nvp的节点标识对应的出接口。
111.该出接口为一个nvp向节点列表中的节点标识所标识的nvp发送第一消息时,从这个nvp发出第一消息的网络接口。示例地,一个nvp的节点标识为02,这个nvp的节点列表中包括这个nvp的三个相邻的nvp的节点标识为01、03、04。则节点列表中包括的这三个相邻的nvp的节点标识对应的出接口如下表2所示。
112.表2本技术实施例仅以上表2为例来对一个nvp的节点列表进行示例性说明,上表2并不对本技术实施例构成限定。
113.这种情况下,一个nvp向自身的节点列表中除目标节点标识之外的其他每个节点标识所标识的nvp发送更新后的第一消息的操作可以为:这个nvp从自身的节点列表中获取除目标节点标识之外的其他每个节点标识对应的出接口;对于自身的节点列表中除目标节点标识之外的其他每个节点标识中任意的一个节点标识,这个nvp通过这个节点标识对应的出接口向这个节点标识所标识的nvp发送更新后的第一消息。
114.如此,节点列表中的每个节点标识对应一个出接口,该m个nvp集群中每个nvp集群中任意的一个nvp可以从相邻的nvp的节点标识对应的出接口向相邻的nvp发送更新后的第一消息。从而可以避免网络拥堵,进而提高消息传输速率。
115.可选地,该m个nvp集群中每个nvp集群中任意的一个nvp可以包括第一模块和第二模块,第一模块用于与同一nvp集群中相邻的nvp进行通信,还用于与对应的vp进行通信。第二模块用于处理第一消息中携带的区块。
116.这种情况下,步骤202的操作可以为:第一模块若接收到第一消息,将第一消息携带的该区块发送给第二模块;第二模块接收到第一模块发送的该区块后,将该区块存储至自身的区块链;若第一模块接收到的第一消息来自对应的vp,则第一模块向第一消息中添加第一模块所属的nvp的节点标识,以更新第一消息,向自身的节点列表中的每个节点标识所标识的nvp发送更新后的第一消息;若第一模块接收到的第一消息来自同一nvp集群中的nvp,则第一模块将第一消息携带的节点标识确定为目标节点标识,向第一消息中添加第一模块所属的nvp的节点标识,以更新第一消息,向自身的节点列表中除目标节点标识之外的
其他节点标识所标识的nvp发送更新后的第一消息。
117.如此,由第一模块接收、更新和发送第一消息,由第二模块接收第一模块发送的该区块,并将该区块存储至自身的区块链。也即第一模块和第二模块具有各自的分工,可以提高区块同步效率。
118.其中,第一模块和第二模块执行的操作与上述一个nvp在接收到第一消息,将第一消息携带的该区块存储至区块链,并向同一nvp集群中相邻的nvp发送第一消息的操作类似,此处不再赘述。
119.可选地,该m个nvp集群中每个nvp集群对应的vp可以在区块共识过程中生成检查消息,vp还可以向对应的nvp集群中的第一nvp发送该检查消息。
120.该检查消息用于指示nvp检查自身的区块链中存储的区块是否正确,该检查消息中携带第一目标区块标识和第一目标区块哈希值。第一目标区块标识为vp进行共识处理的区块的区块标识,第一目标区块哈希值为vp进行共识处理的区块的区块哈希值。
121.可选地,vp可以在如下两种情况下生成检查消息,并向对应的nvp集群中的第一nvp发送该检查消息。
122.第一种情况,vp在每完成对一个区块的共识,并将这个区块添加至区块链,且向对应的nvp集群中的第一nvp发送携带有这个区块的第一消息后,可以再向对应的nvp集群中的第一nvp发送该检查消息,该检查消息中携带的第一目标区块标识为这个区块的区块标识,第一目标区块哈希值为这个区块的区块哈希值。
123.这种情况下,每向对应的nvp集群中的第一nvp发送携带有这个区块的第一消息后,就向对应的nvp集群中的第一nvp发送针对这个区块的检查消息。如此可以保证对应的nvp集群中的每个nvp每存储一个区块就会接收到这个区块对应的检查消息,可以保证每个nvp能够对自身的区块链中存储的每个区块进行检查,从而确保自身的区块链中存储的区块的正确性。
124.第二种情况,vp在完成对一个区块的共识,并将这个区块添加至区块链,且向对应的nvp集群中的第一nvp发送携带有这个区块的第一消息后,若这个区块是在执行区块回滚操作后最新生成的,则vp可以再向对应的nvp集群中的第一nvp发送针对这个区块的检查消息。若这个区块不是在执行区块回滚操作后最新生成的,则vp可以不向对应的nvp集群中的第一nvp发送针对这个区块的检查消息。
125.由于在执行区块回滚操作后最新生成的区块的区块标识与执行区块回滚操作之前最后生成的区块的区块标识相同,所以vp执行区块回滚操作,会导致vp向对应的nvp集群的第一nvp发送两个区块标识相同的区块,那么对应的nvp集群中的每个nvp会接收到两个区块标识相同的区块,但是每个nvp不知道哪个区块才是正确的区块,如此,会导致每个nvp的区块链出现短暂的分叉,也即区块链中的一个区块的下一个区块会分为两个区块标识相同的区块。这种情况下,在这两个相同的区块标识所标识的区块的下一个区块到来时,要想将下一个区块存储至区块链,还需要将下一个区块的父区块哈希值与这两个区块的区块哈希值进行比较,以确定这两个区块中哪一个区块才是下一个区块的父区块。
126.这种情况下,vp在执行区块回滚操作后生成最新的区块后,可以向对应的nvp集群中的第一nvp发送针对该区块的检查消息。对应的nvp集群中的每个nvp接收到该检查消息后,能够检查出区块链中存储的两个区块标识相同的区块哪个才是正确的。如此可以确保
区块链中存储的区块的正确性。由于仅在执行区块回滚操作后生成最新的区块时,vp才向对应的nvp集群中的第一nvp发送检查消息,所以可以节省区块链系统资源。
127.进一步地,该m个nvp集群中每个nvp集群中任意的一个nvp接收到对应的vp生成的检查消息后,可以在自身的区块链中查找第一区块;若在自身的区块链中查找到第一区块,则在第一区块的区块哈希值与第一目标区块哈希值不同的情况下,从自身的区块链中删除第一区块。
128.第一区块为区块标识与第一目标区块标识相同的区块。
129.一个nvp接收到对应的vp生成的检查消息后,在自身的区块链中查找第一区块,也即在自身的区块链中查找区块标识与第一目标区块标识相同的区块。若在自身的区块链中查找到第一区块,则将第一区块的区块哈希值与第一目标区块哈希值进行对比。若第一区块的区块哈希值与第一目标区块哈希值相同,说明第一区块是正确的,则不需要做任何处理。若第一区块的区块哈希值与第一目标区块哈希值不同,说明第一区块与第一目标区块哈希值对应的区块不相同,则可以确定第一区块不正确,也即第一区块很有可能是已经被回滚的区块,所以可以从自身的区块链中删除第一区块。
130.示例地,一个vp完成了对一个区块标识为50的区块的共识后,向对应的nvp集群中的第一nvp发送携带区块标识为50的区块的第一消息。但是vp在完成对这个区块的共识后,又对这个区块进行了回滚,这个vp在执行区块回滚操作后,又继续生成了一个区块标识为50的区块并完成了对这个区块的共识。之后这个vp会向对应的nvp集群中的第一nvp发送携带新生成的这个区块标识为50的区块的第一消息,且会发送针对这个区块的检查消息。这种情况下,对应的nvp集群中的每个nvp会接收到两个区块标识为50的区块,那么自身的区块链中也会相应存储两个区块标识为50的区块,此时根据该检查消息就可以删除在先存储的区块标识为50的区块。
131.例如:图3是nvp的区块链中存储的区块的示意图。参见图3,图3包括区块链300以及区块链300中存储的多个区块301。该多个区块301中包括两个区块标识为50的区块301,且这两个区块标识为50的区块301导致了区块链300出现了暂时的分叉。一个nvp接收到对应的vp发送的检查消息,该检查消息中携带的第一目标区块标识为50。这个nvp可以从自身的区块链300中查找区块标识为50的区块301,则会查找到两个区块标识为50的区块301。之后这个nvp确定这两个区块标识为50的区块301中在先存储的区块标识为50的区块301的区块哈希值与该检查消息中携带的第一目标区块哈希值不同,则这个nvp可以删除自身的区块链300中在先存储的区块标识为50的区块301,如此,这个nvp的区块链300中存储的均为正确的区块301,此时这个nvp的区块链300可以如图4所示,图4所示的区块链300中存储的均为正确的区块301。
132.以上对该m个nvp集群中每个nvp集群中的每个nvp接收到第一消息后,执行的操作进行了详细的说明,可实现该m个nvp集群中每个nvp集群中的每个nvp将第一消息中携带的区块存储至自身的区块链中,如此保证了该m个nvp集群中每个nvp集群中的每个nvp将该多个vp中存储的该区块同步至自身的区块链。
133.值得注意的是,该m个nvp集群中每个nvp集群中的任意的一个nvp可能因为网络拥堵或者网络分区等原因,很长时间不能接收到区块,那么这个nvp就不能实现对区块的同步。下面对这种情况下需要执行的操作进行详细说明,以解决因为网络原因无法同步区块
的问题。
134.具体地,该m个nvp集群中每个nvp集群中的每个nvp每隔第四预设时长向同一nvp集群中相邻的其他nvp发送区块链状态,该区块链状态包括自身的节点标识以及区块链中最新区块的区块标识;该m个nvp集群中每个nvp集群中任意的一个nvp将接收到的相邻的nvp发送的该区块链状态确定为目标区块链状态,若在第五预设时长内没有接收到区块,则在自身的区块链中最新区块的区块标识小于目标区块链状态中的区块标识的情况下,从目标区块链状态中的节点标识所标识的目标nvp的区块链中,获取区块标识大于自身的区块链中最新区块的区块标识的区块,将获取到的区块存储至自身的区块链。
135.第四预设时长可以预先进行设置,且第四预设时长可以由技术人员根据需求进行设置。例如,第四预设时长可以设置为1分钟。
136.一个nvp的区块链状态用于表示自身的区块链中存储的最新区块的情况。目标区块链状态为一个nvp接收到的相邻的nvp发送的区块链状态,若这个nvp具有多个相邻的nvp,则这个nvp可以接收到多个目标区块链状态。
137.第五预设时长可以预先进行设置,且第五预设时长可以设置的较大,以保证有充足的时间接收区块。例如,第五预设时长可以设置为2分钟。
138.目标nvp为这个nvp接收到的多个目标区块链状态中区块标识大于这个nvp的区块链中的最新区块的区块标识的目标区块链状态中的节点标识所标识的nvp。
139.该m个nvp集群中每个nvp集群中的每个nvp每隔第四预设时长向同一nvp集群中相邻的其他nvp发送区块链状态,则每个nvp可以知道相邻的nvp的区块链中存储的最新区块的情况。如果一个nvp在第五预设时长内没有接收到区块,说明这个nvp在很长时间内没有接收到区块了,则这个nvp可以查看多个目标区块链状态中任意的一个目标区块链状态中是否存在比自身区块链中的最新区块的区块标识大的区块标识,若多个目标区块链状态中存在一个目标区块链状态中的区块标识大于自身的区块链中的最新区块的区块标识,则这个nvp可以从这个目标区块链状态中的节点标识所标识的目标nvp的区块链中,获取区块标识大于自身的区块链中最新区块的区块标识的区块。之后可以将获取的区块存储至自身的区块链,以实现对自身区块链中未存储的区块的同步。若多个目标区块链状态中的每个目标区块链状态中的区块标识均小于或等于自身的区块链中的最新区块的区块标识,则这个nvp继续等待接收区块。
140.如此,在一个nvp长时间未接收到区块的情况下,直接从相邻的目标nvp的区块链中获取大于自身区块链中最新区块的区块标识的区块,可以节省系统资源,且节约区块同步时间,从而提高区块同步效率。
141.可选地,区块链状态还包括区块链中最新区块的区块哈希值,这种情况下这个nvp从目标区块链状态中的节点标识所标识的目标nvp的区块链中,获取区块标识大于自身的区块链中最新区块的区块标识的区块的操作可以为:这个nvp向目标区块链状态中的节点标识所标识的目标nvp发送第三消息;目标nvp若接收到第三消息,则从自身的区块链中查找第二区块,若从自身的区块链中查找到第二区块,则在第二区块的区块哈希值与第二目标区块哈希值相同的情况下,将自身的区块链中区块标识大于第三目标区块标识且小于或等于第二目标区块标识的所有区块发送给这个nvp。
142.在这里,这个目标区块链状态为多个目标区块链状态中区块标识大于这个nvp的
区块链中的最新区块的区块标识的目标区块链状态。
143.第三消息用于指示目标nvp将自身的区块链中大于这个nvp的区块链中最新区块的区块标识的区块发送给这个nvp。第三消息中携带第二目标区块标识、第二目标区块哈希值和第三目标区块标识。第二目标区块标识为目标区块链状态中的区块标识,也即是这个nvp的区块链中未存储的一个区块的区块标识。第二目标区块哈希值为目标区块链状态中的区块哈希值,也即是这个nvp的区块链中未存储的一个区块的区块哈希值。第三目标区块标识为这个nvp的区块链中的最新区块的区块标识。
144.第二区块是区块标识与第二目标区块标识相同的区块。
145.这种情况下,目标nvp接收到第三消息后,先查找自身的区块链中是否存在区块标识与第二目标区块标识相同的区块(即第二区块),若查找到自身的区块链中存在第二区块,则将第二区块的区块哈希值与第三消息中携带的第二目标区块哈希值进行对比,若第二区块的区块哈希值与第二目标区块哈希值相同,说明第二区块就是这个nvp的区块链中未存储的区块之一,在此情况下,目标nvp的区块链中区块标识大于这个nvp的区块链中的最新区块的区块标识(即第三目标区块标识),且小于或等于第二区块的区块标识(即第二目标区块标识)的所有区块均为这个nvp的区块链中未存储的区块。则目标nvp可以将自身的区块链中区块标识大于第三目标区块标识且小于或等于第二目标区块标识的所有区块发送给这个nvp。这个nvp接收到目标nvp发送的区块后,可以将接收到的区块存储至自身的区块链,以实现对自身区块链中未存储的区块的同步,从而保证自身的区块链中存储的区块与其他nvp的区块链中存储的区块相同。
146.可选地,在区块链系统运行的过程中,该m个nvp集群中任意的一个nvp集群中可能会新增一个nvp,新增的nvp的区块链中可能还未存储区块,因而新增的nvp可以同步所在的nvp集群中的其他nvp的区块链中存储的所有区块。这种情况下,新增的nvp可以执行上述从目标nvp中获取所有区块的步骤,以实现对所在的nvp集群中的其他nvp的区块链中存储的区块的同步。
147.以上对该m个nvp集群中的每个nvp集群中任意的一个nvp主动从目标nvp获取自身的区块链中未存储的区块的操作进行了详细说明。本技术实施例中在该m个nvp集群中的每个nvp集群中任意的一个nvp发现自身的区块链中缺少某些区块时,主动从目标nvp中获取缺少的所有区块(即点对点拉取),来实现对缺少的所有区块的同步。如此,可以节省系统资源,提高区块同步效率。
148.在本技术实施例中,区块链系统包括多个vp和m个nvp集群,该多个vp中的m个vp与该m个nvp集群一一对应,且m个nvp集群中每个nvp集群包括第一nvp和至少一个第二nvp。第一nvp为与对应的vp进行通信的nvp,第一nvp与至少一个第二nvp中的每个第二nvp之间均具有网络路径,所以nvp集群中的第一nvp既可以与对应的vp进行通信,也可以与同一nvp集群中的其他nvp进行通信。该多个vp每完成对一个区块的共识并将该区块添加至区块链后,该m个vp中的每个vp向对应的nvp集群中的第一nvp发送携带有该区块的第一消息。该m个nvp集群中每个nvp集群中的每个nvp若接收到第一消息,则将第一消息携带的该区块存储至区块链,并向同一nvp集群中相邻的nvp发送第一消息,如此每个nvp集群中的每个nvp都可以同步该区块。这种情况下,m个vp中的每个vp只需要向对应的nvp集群中的第一nvp发送携带有该区块的第一消息,就可以实现对应的nvp集群中的每个nvp对该区块的同步,从而
减轻了vp的压力,进而可以提高区块共识效率。
149.图5为本技术实施例提供的一种计算机设备的结构示意图。如图5所示,计算机设备5包括:处理器50、存储器51以及存储在存储器51中并可在处理器50上运行的计算机程序52,处理器50执行计算机程序52时实现上述实施例中的区块同步方法中的步骤。
150.计算机设备5可以是包括有多个服务器的服务器集群,该服务器集群可以为区块链系统。本领域技术人员可以理解,图5仅仅是计算机设备5的举例,并不构成对计算机设备5的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,比如还可以包括输入输出设备、网络接入设备等。
151.处理器50可以是中央处理单元(central processing unit,cpu),处理器50还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者也可以是任何常规的处理器。
152.存储器51在一些实施例中可以是计算机设备5的内部存储单元,比如计算机设备5的硬盘或内存。存储器51在另一些实施例中也可以是计算机设备5的外部存储设备,比如计算机设备5上配备的插接式硬盘、智能存储卡(smart media card,smc)、安全数字(secure digital,sd)卡、闪存卡(flash card)等。进一步地,存储器51还可以既包括计算机设备5的内部存储单元也包括外部存储设备。存储器51用于存储操作系统、应用程序、引导装载程序(boot loader)、数据以及其他程序等。存储器51还可以用于暂时地存储已经输出或者将要输出的数据。
153.本技术实施例还提供了一种计算机设备,该计算机设备包括:至少一个处理器、存储器以及存储在该存储器中并可在该至少一个处理器上运行的计算机程序,该处理器执行该计算机程序时实现上述任意各个方法实施例中的步骤。
154.本技术实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时可实现上述各个方法实施例中的步骤。
155.本技术实施例提供了一种计算机程序产品,当其在计算机上运行时,使得计算机执行上述各个方法实施例中的步骤。
156.集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实现上述方法实施例中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,该计算机程序包括计算机程序代码,该计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。该计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、rom(read-only memory,只读存储器)、ram(random access memory,随机存取存储器)、cd-rom(compact disc read-only memory,只读光盘)、磁带、软盘和光数据存储设备等。本技术提到的计算机可读存储介质可以为非易失性存储介质,换句话说,可以是非瞬时性存储介质。
157.应当理解的是,实现上述实施例的全部或部分步骤可以通过软件、硬件、固件或者
其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。该计算机指令可以存储在上述计算机可读存储介质中。
158.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
159.本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
160.在本技术所提供的实施例中,应该理解到,所揭露的装置/计算机设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/计算机设备实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
161.作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
162.以上所述实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围,均应包含在本技术的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献