具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
图1是一示例性实施例提供的一种区块链节点与区块链中继通信网络的交互示意图。如图1所示,假定区块链中继通信网络包含中继节点11、中继节点12、中继节点13和中继节点14等若干中继节点。以中继节点11为例,该中继节点11可以通过网关101与区块链网络中的区块链节点21相连;类似地,其他中继节点也可以与区块链网络中的其他区块链节点相连。网关101用于协助区块链节点21接入区块链中继通信网络,该网关101在逻辑上相当于区块链网络中的一个区块链节点,但该网关101本身并不参与区块链共识,这样区块链节点21可以通过区块链网络所采用的通信协议与该网关101进行通信,并且该网关101不会对区块链网络中的共识等过程产生负面影响。网关101本质上是区块链节点21接入区块链中继通信网络的适配程序,该适配程序可以部署在区块链节点21上,也可以部署在中继节点11上,还可以部署在独立于中继节点11和区块链节点21的另一设备中,本说明书并不对此进行限制。
区块链网络中包含若干区块链节点,区块链节点之间的需要实现诸如共识、交易传输、区块同步等通信操作。在相关技术中,各个区块链节点之间直接采用P2P(Peer toPeer,点对点)技术进行通信,以传输交易、区块等,但由于各种网络因素导致通信时延高、稳定性差,无法满足应用需求。因此,类似于上述的区块链节点21,每个区块链节点都可以分别接入区块链中继通信网络中的中继节点,这样区块链节点之间就可以通过区块链中继通信网络来实现通信。由于区块链中继通信网络是面向区块链实时传输的骨干中继通信网络,各个中继节点之间能够通过高QoS保障的优质带宽进行通信交互,因而由区块链中继通信网络接管区块链节点之间通信的中间链路,能够降低通信时延、提高稳定性,从而显著提升区块链节点之间的通信质量。
区块链中继通信网络可以适用于各种类型的区块链网络,包括公有链、私有链和联盟链等。譬如,应用于公有链的区块链中继通信网络主要包括Falcon、Fast BitcoinRelay Network(FBRN)、Fast Internet Bitcoin Relay Engine(FIBRE)等,而应用于联盟链的区块链中继通信网络主要包括BloXRoute、Blockchain Transmission Network (BTN)等。
区块链中继通信网络中可以在控制面和数据面上实现分层,可以把网络数据的转发控制策略和数据传输过程分离,使得转发控制策略可自由定义,而数据传输也能够更加通用和高效。对于区块链中继通信网络而言,控制面可以理解为消息路由的策略,而数据面是指区块链消息在区块链中继通信网络中的传输。而区块链节点通过提交注册请求,可以根据应用(或业务)上的需求而自由配置自身所属的区块链节点集合,进而调整与该区块链节点相关的路由策略。同一区块链节点可以根据应用需求而加入一个或多个区块链节点集合,即不同区块链节点集合所含的区块链节点可能存在重叠。
图2是一种消息传输场景的示意图。以图2为例,假定区块链网络中的区块链节点21-22与区块链中继通信网络中的中继节点11相连、区块链节点23与中继节点12相连、区块链节点24与中继节点13相连、区块链节点25-26与中继节点14相连;其中,为了便于理解,此处省去了前文所述的网关(如网关101)。假定区块链节点21希望将区块链消息发送至区块链节点22和区块链节点24,如果区块链节点22和区块链节点24预先通过发送注册请求而加入了同一区块链节点集合,那么区块链节点21只要将该区块链消息的目标对象标注为该区块链节点集合(下称目标区块链节点集合),区块链中继通信网络中的中继节点即可根据区块链节点集合信息将该区块链消息通过区块链中继通信网络发送至归属于该目标区块链节点集合的区块链节点22和区块链节点24。中继节点可以维护有路由表,该路由表用于记录各个区块链节点分别对应的路由策略,每条路由策略可以包含相应区块链节点所属的区块链节点集合、该区块链节点与中继节点之间的连接关系。可见,路由表中所记录的各个区块链节点与区块链节点集合之间的归属信息,可以认为相当于上文所述的区块链节点集合信息。那么,区块链节点21将上述区块链消息发送至中继节点11后,中继节点11可以通过查询上述路由表,确定上述目标区块链节点集合中包含的区块链节点(即区块链节点22、区块链节点24),以及区块链中继通信网络中与该目标区块链节点集合中的各个区块链节点相连的各个中继节点,进而将区块链消息转发至确定出的各个中继节点,而各个中继节点也可以通过查询路由表的方式将接收到的区块链消息传输至自身连接的区块链节点。比如区块链节点21将区块链消息发送至中继节点11后,中继节点11将该区块链消息转发至区块链区块链节点22,中继节点11将该区块链消息转发至中继节点13、中继节点13将区块链消息转发至区块链节点24,而避免将该区块链消息发送至其他的中继节点和区块链节点,以避免通信资源的浪费。在上述实施例中,中继节点11与中继节点13之间直接相连,使得中继节点11仅需一跳即可将区块链消息传输至中继节点13。而在一些情况下,中继节点11可能并未直接连接至中继节点13,因而中继节点11需要多跳才能够将区块链消息传输至中继节点13,即中继节点11与中继节点13之间需要通过其他的一个或多个中继节点来实现消息转发,并进而由中继节点13将区块链消息发送至区块链节点24。
当区块链节点请求注册至某个区块链节点集合时,需要将自身的信息(例如节点ID、公钥、期望加入的区块链节点集合的信息等)发送至区块链中继通信网络中。由于区块链中继通信网络中的中继节点无法接触到区块链存储,而区块链节点集合中所包含的区块链节点信息(即区块链节点集合对应的成员信息)被预先写入区块链存储中,因此中继节点无法确认上述区块链节点是否属于其请求加入的区块链节点集合。
为了确认区块链节点是否属于其请求注册进入的区块链节点集合,保证区块链节点集合中注册至正确的区块链节点集合中,本说明书一个或多个实施例提供一种区块链节点退出节点集合的方法。
图3为一种区块链节点注册至节点集合的方法的流程图,下面结合图2所示的消息传输场景,对图3所示的区块链节点注册至节点集合的方法的具体步骤进行详细描述:
步骤302:区块链中继通信网络中的任一中继节点接收注册请求,所述注册请求表示目标区块链节点请求注册至目标区块链节点集合。
在一实施例中,可以将发送注册请求的区块链节点称为目标区块链节点,上述注册请求表明目标区块链节点请求注册进入的区块链节点集合。由于目标区块链节点可能归属于多个不同的区块链节点集合,因此目标区块链节点的注册对象可以包含多个区块链节点集合,在上述情况下,可以在同一个注册请求中携带目标区块链节点需要注册进入的全部区块链节点集合的信息,以表明目标区块链节点需要注册进入的全部区块链节点集合。和目标区块链节点相连的本地中继节点可以根据注册请求中携带的各个区块链节点集合的信息对上述注册请求进行转发。或者,目标区块链节点也可以分多次发送注册请求,每个注册请求表明目标区块链节点请求注册进入的一个区块链节点集合,本地中继节点分别对各个注册请求进行响应。
步骤304,在任一中继节点接收到注册请求的情况下:
步骤304a:若所述任一中继节点确认自身为与所述目标区块链节点相连的本地中继节点,则识别所述目标区块链节点集合是否存在:在所述目标区块链节点集合不存在的情况下,所述任一中继节点创建所述目标区块链节点集合,并直接将所述目标区块链节点注册至所述目标区块链节点集合中;在所述目标区块链节点集合已存在的情况下,所述任一中继节点通过所述区块链中继通信网络中的其他中继节点将所述注册请求分别转发至所述目标区块链节点集合的已存在区块链节点,并且在超过预设数量的所述已存在区块链节点同意注册的情况下,将所述目标区块链节点注册至所述目标区块链节点集合中。
步骤304b:若所述任一中继节点确认自身并非所述本地中继节点,则将所述注册请求发送至与所述任一中继节点相连的目标区块链节点集合的已存在区块链节点,并向所述本地中继节点转发用于表示该目标区块链节点集合的已存在区块链节点是否同意注册的消息,以使所述本地中继节点确认是否将所述目标区块链节点注册至所述目标区块链节点集合中。
在一实施例中,本地中继节点接收到目标区块链节点发送的注册请求后,可以依托于区块链中继通信网络,将注册请求分别转发至已经注册至目标区块链节点集合中的其他区块链节点。因此,对于每个中继节点而言,其接收到的注册请求可能来自与自身直接相连的区块链节点,也可能来自与自身间接相连的区块链节点。当任一中继节点接收到注册请求时,可以解析此注册请求。注册请求中至少包含目标区块链节点的信息以及目标区块链节点集合的信息,因此中继节点可以从解析结果中确认目标区块链节点,进而确认自身与目标区块链节点的连接关系,例如,中继节点可以根据中继节点维护的路由信息确定自身与目标区块链节点的连接关系。
在一实施例中,如果任一中继节点是与目标区块链节点直接相连的本地中继节点,可以进一步确认目标区块链节点集合是否存在。举例而言,假定第一个请求注册进入目标区块链节点集合的区块链节点为初始区块链节点,在该初始区块链节点发送注册请求时,目标区块链节点集合尚未创建,此时本地中继节点可以创建目标区块链节点集合,进而将目标区块链节点直接注册至目标区块链节点集合中。由于在该初始区块链节点加入目标区块链节点集合之前,该目标区块链节点集合中尚未包含前述的已存在区块链节点,因而本地中继节点不需要且无法向已存在区块链节点征询意见,只需要直接将该初始区块链节点注册至目标区块链节点集合。值得注意的是,下文中已存在区块链节点指代目标区块链节点集合的已存在区块链节点,即已经注册至目标区块链节点集合的区块链节点。
相反的,如果目标区块链节点集合已经存在,即目标区块链节点集合中包含前述的已存在区块链节点,譬如至少包含上述的初始区块链节点,此时本地中继节点可以通过其他中继节点,将上述注册请求分别转发至已存在的区块链节点。已存在区块链节点接收到注册请求后,可以验证目标区块链节点是否为目标区块链节点集合的成员,如果确认目标区块链节点为目标区块链节点集合的成员,则可以通过区块链中继通信网络返回同意消息至本地中继节点,以表明同意目标区块链节点的注册请求,否则,已存在区块链节点可以选择不对上述注册请求进行响应或者返回拒绝消息,以表明不同意目标区块链节点的注册请求。考虑到已存在区块链节点可能存在重复发送同意消息的问题,为了解决这一问题,本地中继节点可以根据消息发送方对接收到的同意消息进行去重处理,去重后得到的同意消息的数量相当于发送了同意消息的区块链节点的数量。进一步的,本地中继节点可以在向其他区块链节点发送注册请求时开始计时,在经过预设时长后停止计时,并统计上述预设时长内发送同意消息的区块链节点的数量,以将上述数量与预设数量相比较。上述预设数量可以设定为目标区块链节点集合中已经注册成功的区块链节点的总数量的一定比例,那么预设数量可以随着目标区块链节点集合中区块链节点的总数量浮动。假设目标区块链节点集合中注册成功的区块链节点有100个,上述比例为50%,那么预设数量为50个,如果向本地中继节点发送同意消息的区块链节点数量达到或超过五十个,本地中继节点可以将目标区块链节点注册至目标区块链节点集合中,否则不予注册。通过上述方式,不仅可以使多个区块链节点分别确认目标区块链节点是否属于目标区块链节点集合,以达到多次验证目标区块链节点是否为目标区块链节点集合的成员的目的,同时,也可以避免部分已存在的区块链节点故意不响应或返回拒绝消息而导致目标区块链节点注册失败的情况发生。而上述统计方式可以在已存在区块链节点有意或无意多次发送同意消息的情况下,避免目标区块链节点注册至错误的区块链节点集合。
在另一实施例中,如果上述的任一中继节点并非是与目标区块链节点直接相连的本地中继节点,说明该任一中继节点接收到的注册请求转发自该本地中继节点,旨在征询该任一中继节点在目标区块链节点集合中对应的已存在区块链节点是否同意上述注册请求此时,任一中继节点可以将上述注册请求转发至与自身相连的已存在区块链节点,等待已存在区块链节点对上述注册请求的投票结果,并将用于表示该已存在区块链节点是否同意注册请求的消息返回上述的本地中继节点。本地中继节点通过对各个中继节点分别返回的同意消息进行统计,并根据统计结果确认是否将所述目标区块链节点注册至所述目标区块链节点集合中,此处可以参考上文的相关描述。
在一实施例中,本地中继节点转发注册请求的过程可以具体为:本地中继节点接收注册请求,并根据注册请求确定目标区块链节点集合。区块链中继通信网络中的各个中继节点可以基于节点信息库中保存的各个区块链节点集合的信息以及各个区块链节点之间的连接关系对消息进行转发。值得注意的是,上述节点信息库中维护的目标区块链节点集合信息中,记载了上述的已存在区块链节点的信息。因此,本地中继节点可以从保存有目标区块链节点集合的节点信息库中读取上述的已存在区块链节点的信息,以及与已存在区块链节点连接的中继节点的信息。基于所读取的上述信息,本地中继节点可以将注册请求转发至上述与已存在区块链节点连接的中继节点,进而由上述与已存在区块链节点连接的中继节点将注册请求转发至已经存在于目标区块链节点集合中的区块链节点处。
在一实施例中,如果超过预设数量的区块链节点同意目标区块链节点注册至目标区块链节点集合,本地中继节点可以将目标区块链节点注册至目标区块链节点集合。例如,本地中继节点可以将目标区块链节点的信息写入节点信息库,上述节点信息库中维护有已经注册至目标区块链节点集合的已存在区块链节点的信息。
可选的,上述节点信息库可以作为中心信息库的形式存在,中心信息库中维护有每个区块链节点集合中已经存在的区块链节点对应的信息,此时,中继节点可以无需维护本地缓存信息库,而直接从中心信息库处获取目标区块链节点集合的信息,以将注册请求发送至已存在区块链节点处。当目标区块链节点经过投票被允许注册进入目标区块链节点集合时,本地中继节点可以将目标区块链节点的信息写入中心信息库。为了减少各个中继节点查询中心信息库时占用的传输资源,各个中继节点也可以选择维护本地缓存信息库,并将中心信息库中的区块链节点集合信息各自缓存至中继节点自行维护的本地缓存信息库处。当中继节点需要进行消息转发时,可以直接查询本地缓存信息库中维护的信息,而无需请求中心信息库,以达到提升转发效率的效果。值得注意的是,在中心信息库与本地缓存信息库同时存在的情况下,目标区块链节点经过投票被允许注册进入目标区块链节点集合时,本地中继节点可以将目标区块链节点的信息写入中心信息库,中心信息库或者本地中继节点可以通知各个中继节点(包括本地中继节点)更新自身缓存的本地缓存信息库,以使各个本地中继节点及时将各自本地缓存信息库中的区块链节点集合信息同步为最新的版本。
可选的,上述节点信息库可以作为本地信息库的形式存在,此处的本地信息库由各个中继节点独立维护,并不依赖于中心信息库。同样的,本地信息库中维护有每个区块链节点集合中已经存在的区块链节点所对应的信息,各个中继节点可以从自身维护的本地信息库处获取目标区块链节点集合的信息,以将注册请求发送至已经存在目标区块链节点集合中的区块链节点处。如果通过已存在区块链节点的投票,目标区块链节点被允许注册进入目标区块链节点集合,本地中继节点可以将目标区块链节点的信息写入本地中继节点对应的本地信息库,进而通知各个其他中继节点。其他中继节点响应于上述通知,将目标区块链节点的信息写入其各自维护的本地信息库中,以保证各个中继节点维护的本地信息库保持一致。
在一实施例中,本地中继节点征询其他区块链节点是否同意目标区块链节点加入目标区块链节点集合的过程可以具体为:本地中继节点在将注册请求转发至各个已存在的区块链节点并启动计时,进而统计在启动计时后的预设时长内,同意目标区块链节点的注册请求的已存在区块链节点的数量,如果超过预设数量的其他区块链节点在预设时长内返回了同意消息,则将目标区块链节点注册至目标区块链节点集合中。上述预设时长可以灵活调整,本说明书对此不作限制。
在一实施例中,已存在区块链节点可以根据注册请求获取目标区块链节点的信息,进而确认目标区块链节点是否属于目标区块链节点集合,以选择同意目标区块链节点注册或拒绝目标区块链节点注册。具体而言,当已存在区块链节点自身维护的所述目标区块链节点集合的成员信息中包含目标区块链节点的信息时,已存在区块链节点可以反馈同意目标区块链节点注册的消息。换言之,其他已存在的区块链节点可以获取自身维护的目标区块链节点集合的成员信息,上述成员信息记录了属于目标区块链节点集合的所有区块链节点的信息。其他已存在的区块链节点可查询成员信息中是否存在注册请求中包含的目标区块链节点,如果确认目标区块链节点属于目标区块链节点集合,则同意目标区块链节点注册至所述目标区块链节点集合,否则不予同意。
可选的,目标区块链节点与已存在目标区块链集合中的区块链节点维护有相同的区块链账本数据,其中,上述成员列表可以被记录于该区块链账本数据中的创世区块中,或者被记录于该区块链账本数据对应的预设世界状态中。如果上述成员列表被记录于创世区块链中,则后期不可以对成员列表进行修改,如果记录于预设世界状态中,后续可以对成员列表进行修改。
需要强调的是,成员信息与目标区块链节点信息的含义并不相同。成员信息代表了目标区块链节点集合中应当存在的区块链节点,但成员信息中包含的一个或多个区块链节点可能尚未注册至目标区块链节点集合。相对的,中继节点维护的节点信息库中记载的区块链节点信息表征了已经成功注册至目标区块链节点集合的区块链节点,即上文中的已存在区块链节点。
在一实施例中,任一中继节点接收所述目标区块链节点集合中的区块链节点定期提交的注册请求,以将所述区块链节点重复注册至所述目标区块链节点集合。举例而言,区块链中继通信网络中的各区块链节点可以分别定期向相连的中继节点提交注册请求,以重复注册至相应区块链节点所处的区块链节点集合。重新注册的频率可以根据实际情况灵活调整,本说明书对此不作限制。在本实施例中,如果存在已经退出的区块链节点,即使节点信息库中已经退出的区块链节点的信息未被删除,其重新注册时也无法通过验证。因此,区块链节点可以通过定期重新将各个区块链节点注册至所属的区块链节点集合中,使信息库中的区块链节点信息强制进行更新,保证目标区块链节点集合对应的目标区块链节点信息的准确性。
另外,在已经存在于目标区块链节点集合中的区块链节点只有初始区块链节点时,如果初始区块链节点拒绝其他区块链节点的注册请求,可能会出现后续注册的区块链节点无法正常注册至目标区块链节点集合的情况。本实施例中,各个区块链节点可以定期重新注册至目标区块链节点集合,由于各个区块链节点的注册时间随机生成,所以初始区块链节点也随之发生变化,即便某些区块链节点故意拒绝其他区块链节点加入目标区块链节点集合,但通过对初始区块链节点的变化,可以避免类似的情况长期存在,从而保证区块链节点注册过程的顺利进行。
通过上述实施例可知,本说明书提出的区块链节点注册至节点集合的方法,可以通过各个区块链节点验证目标区块链节点是否属于目标区块链节点集合,以提升区块链节点注册过程的准确性。各个区块链节点定期重新注册至目标区块链节点集合,可以避免存在区块链节点故意使其他区块链节点注册失败的情况,进一步保证了区块链节点可以顺利注册进入正确的区块链节点集合。
图4为一种区块链节点注册至节点集合的方法的具体流程图,下面结合图2所示的消息传输场景,对图4所示的区块链节点注册至节点集合的方法的具体步骤进行详细描述:
步骤402:目标区块链节点发送注册请求至本地中继节点。
在一实施例中,以图2所示的场景为例,假设已经成功注册至目标区块链节点集合中的区块链节点包括区块链节点22~26,区块链节点21请求加入目标区块链节点集合,此时区块链节点21可以被称为目标区块链节点,和区块链节点21相连的中继节点11可以被称为本地中继节点。区块链节点21可以将注册请求发送至中继节点11,上述注册请求中至少包含区块链节点21的信息以及目标区块链节点集合的信息。
步骤404:本地中继节点确认是否存在目标区块链节点集合。
在一实施例中,如果中继节点11确认存在目标区块链节点集合,可以进入步骤406a,将注册请求转发至目标区块链节点集合中已经存在的区块链节点,即区块链节点22~26。具体而言,各个中继节点可以基于节点信息库中保存的各个区块链节点集合的信息以及各个区块链节点之间的连接关系对消息进行转发。值得注意的是,上述节点信息库中维护的目标区块链节点集合信息中,记载了已经注册进入目标区块链节点的信息。因此,中继节点11可以确定保存有目标区块链节点集合的节点信息库,并从上述节点信息库中获取已经存在于目标区块链节点集合中的区块链节点(即区块链节点22~26),以及上述各个区块链节点连接的中继节点。进而,本地中继节点11可以将注册请求转发至确定出的各个中继节点(即中继节点12~14),进而由各个中继节点将注册请求转发至已经存在于目标区块链节点集合中的区块链节点处。
在一实施例中,假设区块链节点22~26尚未注册至目标区块链节点集合中,说明目标区块链节点集合尚不存在(或者目标区块链节点集合为空,即不存在区块链节点),由于目标区块链节点集合中不存在其他区块链节点,因此无法使其他区块链节点确认目标区块链节点是否属于目标区块链节点集合。在上述情况下,可以进入步骤406b,即本地中继节点创建目标区块链节点集合并将目标区块链节点直接注册至新创建的目标区块链节点集合中,如果存在目标区块链节点集合但是目标区块链节点集合为空,则直接将目标区块链节点注册至目标区块链节点集合中。
步骤408a:各区块链节点确认目标区块链节点是否属于目标区块链节点集合。
在一实施例中,区块链节点22~26可以获取自身维护的目标区块链节点集合的成员列表,上述成员列表记录了属于目标区块链节点集合的所有区块链节点的信息。如果上述成员列表中记载的目标区块链节点集合信息中包含区块链节点21,说明区块链节点21属于目标区块链节点集合中所包含的成员,则区块链节点22~26可以向本地中继节点11返回同意消息,表明同意区块链节点21注册至目标区块链节点集合,即步骤410a。如果上述成员列表中记载的目标区块链节点集合信息中不包含区块链节点21,说明区块链节点21发送的注册请求有误,换言之,目标区块链节点集合中的成员不包含区块链节点21。在上述情况下可以进入步骤410b,即向本地中继节点11返回拒绝消息,表明不同意区块链节点21注册至目标区块链节点集合,或者对注册请求不予响应,即并不返回任何消息至本地中继节点11。
在一实施例中,目标区块链节点与已存在目标区块链集合中的区块链节点维护有相同的区块链账本数据,其中,上述成员列表可以被记录于该区块链账本数据中的创世区块中,或者被记录于该区块链账本数据对应的预设世界状态中。如果上述成员列表被记录于创世区块链中,则后期不可以成员列表进行修改,如果上述成员列表被记录于预设世界状态中,后续可以对成员列表进行修改。
步骤412:本地中继节点统计在预设时长内发送同意消息的区块链节点是否达到预设数量。
在一实施例中,本地中继节点11在将注册请求转发至各个目标区块链节点集合中已经存在的区块链节点(即区块链节点22~26)时,可以启动计时,并统计启动计时后的预设时长内发送同意消息的区块链节点的数量,例如,本地中继节点11可以对接收到的同意消息进行去重处理,以筛选出发送同意消息的区块链节点,如果在预设时长内,超过预设数量的其他区块链节点返回了同意消息,可以将目标区块链节点注册至目标区块链节点集合中。具体而言,假设预设时长为10秒,预设数量为3个,如果在10秒内,本地中继节点11接收到了区块链节点22~26中至少3个节点发送的同意消息,则进入步骤414a,否则进入步骤414b,即在同意注册的区块链节点未达到预设数量时,不予注册目标区块链节点21。上述预设时长和预设数量均可以根据实际应用情况灵活调整,本说明书对此不进行限制。
在一实施例中,步骤414a中提到的将目标区块链节点21注册至目标区块链节点集合中,可以具体为:本地中继节点11将目标区块链节点21的信息写入所述节点信息库,节点信息库中维护有已经注册至目标区块链节点集合的区块链节点的信息,即区块链节点22~26的信息。
可选的,上述节点信息库可以作为中心信息库的形式存在,中心信息库中维护有每个区块链节点集合中已经存在的区块链节点所对应的信息,各个中继节点可以从中心信息库处获取目标区块链节点集合的信息,以将注册请求发送至区块链节点22~26处。当目标区块链节点21经过投票被允许注册进入目标区块链节点集合时,本地中继节点11可以将目标区块链节点21的信息写入中心信息库;为了减少中继节点11~14查询中心信息库时占用的传输资源,各个中继节点也可以各自缓存中心信息库中的区块链节点集合信息在中继节点自行维护的本地缓存信息库中,当中继节点需要进行消息转发时,可以直接查询本地缓存信息库中维护的信息,而无需请求中心信息库,提升转发效率。值得注意的是,在中心信息库与本地缓存信息库同时存在的情况下,目标区块链节点经过投票被允许注册进入目标区块链节点集合时,本地中继节点可以将目标区块链节点的信息写入中心信息库,中心信息库或者本地中继节点可以通知中继节点12~14更新自身缓存的本地缓存信息库,当然,本地中继节点11也需要更新自身的本地缓存信息库,以使各个本地缓存信息库中的区块链节点集合信息保持一致。
可选的,上述节点信息库可以作为本地信息库的形式存在,此处的本地信息库由中继节点11~14独立维护,并不依赖于中心信息库。同样的,本地信息库中维护有区块链节点22~26的信息,各个中继节点可以从自身维护的本地信息库处获取目标区块链节点集合的信息,以通过区块链中继通信网络将注册请求发送至区块链节点22~26处。当目标区块链节点21经过投票被允许注册进入目标区块链节点集合时,本地中继节点11可以将目标区块链节点21的信息写入本地中继节点对应的本地信息库,进而通知中继节点12~14;中继节点12~14响应于上述通知,可以将目标区块链节点的信息写入其各自维护的本地信息库中,以保证各个中继节点处维护的本地信息库保持一致。
步骤416:各个区块链节点定期重新注册至目标区块链节点集合。
在一实施例中,区块链中继通信网络中的各区块链节点可以分别定期向相连的中继节点提交注册请求,以重复注册至相应区块链节点所处的区块链节点集合。例如,无论区块链节点21是否成功注册进入目标区块链节点集合中,区块链节点21~26均可以定期重新注册,上述重新注册的频率可以根据实际情况灵活调整,本说明书对此不作限制。在本实施例中,如果存在已经退出的区块链节点,即使节点信息库中已经退出的区块链节点的信息未被删除,其重新注册时也无法通过验证。因此,区块链节点可以通过定期重新将各个区块链节点注册至所属的区块链节点集合中,使信息库中的区块链节点信息强制进行更新,保证目标区块链节点集合对应的目标区块链节点信息的准确性。
图5是一示例性实施例提供的一种设备的结构示意图。请参考图5,在硬件层面,该设备包括处理器502、内部总线504、网络接口506、内存508以及非易失性存储器510,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器502从非易失性存储器510中读取对应的计算机程序到内存508中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
图6是一种区块链节点注册至节点集合的装置的框图。请参考图6,区块链节点注册至节点集合的装置可以应用于如图5所示的设备中,以实现本说明书的技术方案。其中,该装置可以包括:
接收单元602,区块链中继通信网络中的任一中继节点接收注册请求,所述注册请求表示目标区块链节点请求注册至目标区块链节点集合;
注册单元604,在所述任一中继节点接收到所述注册请求的情况下:
若所述任一中继节点确认自身为与所述目标区块链节点相连的本地中继节点,则识别所述目标区块链节点集合是否存在:在所述目标区块链节点集合不存在的情况下,所述任一中继节点创建所述目标区块链节点集合,并直接将所述目标区块链节点注册至所述目标区块链节点集合中;在所述目标区块链节点集合已存在的情况下,所述任一中继节点通过所述区块链中继通信网络中的其他中继节点将所述注册请求分别转发至所述目标区块链节点集合的已存在区块链节点,并且在超过预设数量的所述已存在区块链节点同意注册的情况下,将所述目标区块链节点注册至所述目标区块链节点集合中;
若所述任一中继节点确认自身并非所述本地中继节点,则将所述注册请求发送至与所述任一中继节点相连的已存在区块链节点,并向所述本地中继节点转发用于表示该已存在区块链节点是否同意注册的消息,以使本地中继节点确认是否将所述目标区块链节点注册至所述目标区块链节点集合中。
可选的,所述装置还包括:查询单元606,具体用于:所述任一中继节点为本地中继节点且所述目标区块链节点集合已存在的情况下,所述任一中继节点通过所述区块链中继通信网络中的其他中继节点将所述注册请求分别转发至所述目标区块链节点集合的已存在区块链节点,包括:
所述任一中继节点查询目标区块链节点集合对应的节点信息库,所述节点信息库用于记录加入所述目标区块链节点集合的所有区块链节点的信息;
所述任一中继节点根据查询到的已存在区块链节点的信息,确定各个已存在区块链节点所连接的中继节点,并将注册请求发送至确定出的中继节点,以由确定出的中继节点将所述注册请求进一步转发至自身相连的已存在区块链节点。
可选的,将所述目标区块链节点注册至所述目标区块链节点集合中,包括:
将目标区块链节点的信息写入所述节点信息库。
可选的,节点信息库包括:
各中继节点统一维护的中心信息库;和/或,
所述本地中继节点自身维护的本地信息库。
可选的,所述装置还包括:计时单元608:所述在超过预设数量的所述已存在区块链节点同意注册的情况下,将所述目标区块链节点注册至所述目标区块链节点集合中,包括:
在发出所述注册请求后启动计时;
若超过预设数量的其它区块链节点在预设时长内返回同意消息,则将所述目标区块链节点注册至所述目标区块链节点集合中。
可选的,当所述已存在区块链节点自身维护的所述目标区块链节点集合的成员信息中包含所述目标区块链节点的信息时,所述已存在区块链节点向所述本地中继节点反馈的消息用于表明其同意注册。
可选的,所述目标区块链节点集合的成员信息被记录于所述已存在区块链节点维护的创世区块和/或预设世界状态中。
可选的,所述装置还包括重复注册单元610:
所述任一中继节点接收所述目标区块链节点集合中的区块链节点定期提交的注册请求,以将所述区块链节点重复注册至所述目标区块链节点集合。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM) 和/或非易失性内存等形式,如只读存储器 (ROM) 或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。