一种改进的PBFT共识方法、装置、智能终端及存储介质

文档序号:25230603发布日期:2021-05-28 14:37阅读:87来源:国知局
一种改进的PBFT共识方法、装置、智能终端及存储介质

本发明涉及区块链技术领域,尤其涉及的是一种改进的pbft共识方法、装置、智能终端及存储介质。



背景技术:

区块链是一种去中心化的分布式账本,其具有去中心、稳定和不可篡改的特性。目前,区块链发展迅速,而共识方法作为区块链的重要组成部分被广泛关注。共识主要分为最终一致性共识算法,例如工作量证明(pow,proofofwork)算法、基于股份的证明算法(pos)和委托股权证明算法(dpos)等,强一致性算法,例如,paxos算法和实用性拜占庭容错(pbft)算法等。其中,pbft算法是目前联盟链中应用最为广泛的算法。

现有技术中,pbft算法内将节点分为主节点(primary)和从节点(replica),基于pbft算法的共识流程中,执行一致性协议时需要进行全网通信,导致时间成本较高,不利于降低通信消耗,降低区块链的时间成本。

因此,现有技术还有待改进和发展。



技术实现要素:

本发明的主要目的在于提供一种改进的pbft共识方法、装置、智能终端及存储介质,旨在解决现有技术中基于pbft算法的共识流程中,执行一致性协议时需要进行全网通信,导致时间成本较高,不利于降低通信消耗,降低区块链的时间成本的问题。

为了实现上述目的,本发明第一方面提供一种改进的pbft共识方法,其中,上述方法包括:

初始化所有节点的积分;

基于各上述节点的积分和预设的目标数目,选举获取董事节点和普通节点,其中,上述董事节点用于执行一致性协议;

基于各上述董事节点和各上述普通节点执行共识流程,并基于各上述董事节点和各上述普通节点执行上述共识流程的表现分别更新各上述董事节点和各上述普通节点的积分;

基于预设的更新周期、预设的目标数目以及更新后的各上述董事节点和各上述普通节点的积分,重新选举并更新上述董事节点和上述普通节点。

可选的,在上述基于各上述节点的积分和预设的目标数目,选举获取董事节点和普通节点之前,上述方法还包括:获取初始的主节点。

可选的,上述基于各上述节点的积分和预设的目标数目,选举获取董事节点和普通节点,包括:

基于各上述节点的积分,通过上述主节点基于加权随机算法选举出预设的目标数目个董事节点;

将上述节点中除上述董事节点以外的其它节点作为普通节点。

可选的,上述基于各上述董事节点和各上述普通节点执行上述共识流程的表现分别更新各上述董事节点和各上述普通节点的积分,包括:

对于各上述董事节点和各上述普通节点,每一次完整地执行完毕一致性协议流程、客户端节点操作或生成区块时,增加对应节点的积分;

在一致性协议的流程中,获取目标董事节点,将上述目标董事节点的积分设置为预设的最小积分值,其中,上述目标董事节点为所发消息内容与其它董事节点不一致,或者,所发消息内容未被半数或半数以上其它董事节点接收到的董事节点;

在视图切换协议、检查点协议以及动态进出的流程中,获取目标节点,减小上述目标节点的积分,其中,上述目标节点为接收到需要超时重传的信息后仍未重传指定消息的董事节点或普通节点。

可选的,上述基于预设的更新周期、预设的目标数目以及更新后的各上述董事节点和各上述普通节点的积分,重新选举并更新上述董事节点和上述普通节点,包括:

基于预设的更新周期,获取更新后的各上述董事节点和各上述普通节点的积分;

通过上述主节点基于加权随机算法选举出预设的目标数目个目标节点;

将上述目标节点作为更新后的董事节点,将除上述目标节点以外的其它节点作为更新后的普通节点。

可选的,在将上述目标节点作为更新后的董事节点,将除上述目标节点以外的其它节点作为更新后的普通节点之后,上述方法还包括:

基于更新后的上述董事节点选举并更新主节点。

可选的,在上述基于更新后的上述董事节点选举并更新主节点之后,上述方法还包括:

将更新后的各上述董事节点和各上述普通节点的积分调整为预设的积分调整值。

本发明第二方面提供一种改进的pbft共识装置,其中,上述装置包括:

初始化模块,用于初始化所有节点的积分;

初始选举模块,用于基于各上述节点的积分和预设的目标数目,选举获取董事节点和普通节点,其中,上述董事节点用于执行一致性协议;

积分更新模块,用于基于各上述董事节点和各上述普通节点执行共识流程,并基于各上述董事节点和各上述普通节点执行上述共识流程的表现分别更新各上述董事节点和各上述普通节点的积分;

节点更新模块,用于基于预设的更新周期、预设的目标数目以及更新后的各上述董事节点和各上述普通节点的积分,重新选举并更新上述董事节点和上述普通节点。

本发明第三方面提供一种智能终端,上述智能终端包括存储器、处理器以及存储在上述存储器上并可在上述处理器上运行的改进的pbft共识程序,上述改进的pbft共识程序被上述处理器执行时实现任意一项上述改进的pbft共识方法的步骤。

本发明第四方面提供一种计算机可读存储介质,上述计算机可读存储介质上存储有改进的pbft共识程序,上述改进的pbft共识程序被处理器执行时实现任意一项上述改进的pbft共识方法的步骤。

由上可见,本发明方案初始化所有节点的积分;基于各上述节点的积分和预设的目标数目,选举获取董事节点和普通节点,其中,上述董事节点用于执行一致性协议;基于各上述董事节点和各上述普通节点执行共识流程,并基于各上述董事节点和各上述普通节点执行上述共识流程的表现分别更新各上述董事节点和各上述普通节点的积分;基于预设的更新周期、预设的目标数目以及更新后的各上述董事节点和各上述普通节点的积分,重新选举并更新上述董事节点和上述普通节点。本发明方案提供的改进的pbft共识方法基于各节点的积分选举出部分董事节点,基于董事节点执行一致性协议,如此,在执行一致性协议时不需要进行全网通信,有利于降低通信消耗,降低区块链的时间成本。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。

图1是本发明实施例提供的一种改进的pbft共识方法的流程示意图;

图2是本发明实施例图1中步骤s200的具体流程示意图;

图3是本发明实施例提供的传统pbft共识方法一致性协议流程示意图;

图4是本发明实施例提供的改进的pbft共识方法一致性协议流程示意图;

图5是本发明实施例图1中步骤s300具体流程示意图;

图6是本发明实施例图1中步骤s400的具体流程示意图;

图7是本发明实施例提供的一种董事节点选举和广播流程示意图;

图8是本发明实施例提供的一种视图切换的决策三层模型示意图;

图9是本发明实施例提供的一种积分、带宽以及交易成功率三者的相对重要程度示意图;

图10是本发明实施例提供的一种改进的pbft共识装置的结构示意图;

图11是本发明实施例提供的一种智能终端的内部结构原理框图。

具体实施方式

以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况下,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。

应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

下面结合本发明实施例的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其它不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。

区块链是一种去中心化的分布式账本,其具有去中心、稳定和不可篡改的特性。区块链网络由多个节点机器组成的分布式网络进行维护与运行,那如何在该网络中使其中的各个节点相互信任并达成一致自然也成为了区块链领域的关键问题,而共识算法便是承担这一职责的模块。其中,pbft算法是目前联盟链中应用最为广泛的算法,而联盟链也是目前商业价值较高的区块链,因此对于pbft算法的优化具有实际意义。

pbft算法主要是为了解决原始拜占庭容错算法效率低的问题,将原先指数级别的时间复杂度降低为多项式级别,使其可以应用在实际的商业应用中,其由一致性协议、检查点协议以及视图切换协议三部分组成。在共识流程中时节点运行一致性协议,通过点对点通信获取其他节点的状态并以此来决定自身状态,基于pbft算法的共识流程中,执行一致性协议时需要进行全网通信,导致时间成本较高,不利于降低通信消耗,降低区块链的时间成本。同时,在现有的pbft算法中,对于恶意节点没有处理机制,无法降低恶意节点对整个网络的不良影响。因此,需要一种更好的pbft共识方法。

为了解决现有技术的问题,本发明实施例提供一种改进的pbft共识方法,在本发明实施例中,初始化所有节点的积分;基于各上述节点的积分和预设的目标数目,选举获取董事节点和普通节点,其中,上述董事节点用于执行一致性协议;基于各上述董事节点和各上述普通节点执行共识流程,并基于各上述董事节点和各上述普通节点执行上述共识流程的表现分别更新各上述董事节点和各上述普通节点的积分;基于预设的更新周期、预设的目标数目以及更新后的各上述董事节点和各上述普通节点的积分,重新选举并更新上述董事节点和上述普通节点。本发明方案提供的改进的pbft共识方法基于各节点的积分选举出部分董事节点,基于董事节点执行一致性协议,如此,在执行一致性协议时不需要进行全网通信,有利于降低通信消耗,降低区块链的时间成本。

示例性方法

如图1所示,本发明实施例提供一种改进的pbft共识方法,具体的,上述方法包括如下步骤:

步骤s100,初始化所有节点的积分。

其中,上述初始化所有节点的积分可以为:将区块链网络中需要进行pbft共识的所有节点的积分设置为预设的初始积分值。其中,上述初始积分值为预先设定的各节点的积分值,可以根据实际需求进行设置和调整,在此不做具体限定。可选的,上述初始积分值可以基于区块链网络中节点数目而定,例如,当在4台虚拟机上搭建实验时,为保证非恶意节点之间的分差不会过大而导致集中化,可以设置初始积分值为5。

步骤s200,基于各上述节点的积分和预设的目标数目,选举获取董事节点和普通节点,其中,上述董事节点用于执行一致性协议。

其中,上述预设的目标数目为预先设定的需要选取的董事节点的数目,可以根据实际需求进行设置和调整,在此不做具体限定。在一种应用场景中,可以设置上述目标数目为n-f,其中n为区块链网络中所有节点的数目,f为恶意节点的数目。

步骤s300,基于各上述董事节点和各上述普通节点执行共识流程,并基于各上述董事节点和各上述普通节点执行上述共识流程的表现分别更新各上述董事节点和各上述普通节点的积分。

可选的,当上述董事节点和各上述普通节点成功执行共识流程时,可以增加对应节点的积分,反之,当上述董事节点和各上述普通节点执行共识流程过程中出现错误时,则可对应减小对应节点的积分,从而根据节点的积分体现对应节点的执行能力。

步骤s400,基于预设的更新周期、预设的目标数目以及更新后的各上述董事节点和各上述普通节点的积分,重新选举并更新上述董事节点和上述普通节点。

其中,上述预设的更新周期为预先设置的对董事节点进行重新选举的周期,本实施例中,上述预设的更新周期为10次一致性流程,实际使用中,还可以根据实际需求进行设置和调整,在此不做具体限定。

由上可见,本发明实施例提供的改进的pbft共识方法初始化所有节点的积分;基于各上述节点的积分和预设的目标数目,选举获取董事节点和普通节点,其中,上述董事节点用于执行一致性协议;基于各上述董事节点和各上述普通节点执行共识流程,并基于各上述董事节点和各上述普通节点执行上述共识流程的表现分别更新各上述董事节点和各上述普通节点的积分;基于预设的更新周期、预设的目标数目以及更新后的各上述董事节点和各上述普通节点的积分,重新选举并更新上述董事节点和上述普通节点。本发明方案提供的改进的pbft共识方法基于各节点的积分选举出部分董事节点,基于董事节点执行一致性协议,如此,在执行一致性协议时不需要进行全网通信,有利于降低通信消耗,降低区块链的时间成本。

具体的,本实施例中,在上述基于各上述节点的积分和预设的目标数目,选举获取董事节点和普通节点之前,上述方法还包括:获取初始的主节点。

其中,上述初始的主节点可以从上述区块链网络的所有节点中随机选取或指定。本实施例中,在上述区块链网络的所有节点中指定一个节点作为初始的主节点,用于在第一个周期内选举董事节点。在第一个周期过后,重新选举董事节点后,可以从更新后的董事节点中选举出新的主节点。

具体的,本实施例中,如图2所示,上述步骤s200包括:

步骤s201,基于各上述节点的积分,通过上述主节点基于加权随机算法选举出预设的目标数目个董事节点。

步骤s202,将上述节点中除上述董事节点以外的其它节点作为普通节点。

其中,上述预设的目标数目为预先设定的需要选取的董事节点的数目。具体的,本实施例中,将区块链网络中的所有节点划分为董事节点或普通节点,其中,初始的主节点是事先指定的,所以可能是董事节点,也可能是普通节点,而后续重新选举的主节点是在董事节点中选举获得的,所以后续重新选举的主节点是董事节点之一。上述董事节点的主要作用是负责一致性协议,确保每个节点对于交易消息处理的结果一致,同时在节点申请进入区块链网络时进行审核。普通节点在董事节点通过一致性协议后根据协议结果更新自身内部的交易数据。图3是本发明实施例提供的传统pbft共识方法一致性协议流程示意图,图4是本发明实施例提供的改进的pbft共识方法一致性协议流程示意图。pbft共识方法的一致性协议最关键的是pre-prepare(预准备)、prepare(准备)和commit(提交)三个步骤,如图3所示,传统pbft共识方法中每一步都需要进行消息广播,且prepare(准备)和commit(提交)过程中更需要整个网络中所有节点进行全网广播,对网络带宽带来巨大消耗,且造成较高的时间成本。而如图4所示,本发明实施例提供的改进的pbft共识方法将网络中的所有节点划分为董事节点以及普通节点,来减少参与全网广播的节点数量。这在一定程度上弱化了区块链网络去中心化的性质,但是由于董事节点在一定周期后会重新选举变更,且只服务于一致性协议中,因此带来的集中化影响较小。

具体的,本实施例中,如图5所示,上述步骤s300包括:

步骤s301,对于各上述董事节点和各上述普通节点,每一次完整地执行完毕一致性协议流程、客户端节点操作或生成区块时,增加对应节点的积分。

步骤s302,在一致性协议的流程中,获取目标董事节点,将上述目标董事节点的积分设置为预设的最小积分值,其中,上述目标董事节点为所发消息内容与其它董事节点不一致,或者,所发消息内容未被半数或半数以上其它董事节点接收到的董事节点。

步骤s303,在视图切换协议、检查点协议以及动态进出的流程中,获取目标节点,减小上述目标节点的积分,其中,上述目标节点为接收到需要超时重传的信息后仍未重传指定消息的董事节点或普通节点。

本实施例中,积分是董事节点选举、视图切换以及网络内节点主动或被动退出的重要判定依据。可以根据各节点执行共识流程的表现更新对应的积分,从而在下一次进行董事节点的选举和更新时使得表现好的节点更有可能被选中。具体的,本实施例中,所有节点每一次完整地执行完毕一致性流程、客户端节点操作或生成区块则积分会进行增加,增加公式如下所示:

g′n=gn+|log10gn|(1)

其中,g′n表示更新后的新积分,gn表示当前积分。本实施例中,引入对数来进行积分的增加,这样随着积分的增加,其增长的速度会越来越低,恶意节点如果想获取高积分以竞选主节点或者董事节点的代价就非常大,如此可以保障网络的安全。

在一致性协议的流程中,如果某董事节点(目标董事节点)出现所发消息内容与其它董事节点不一致,或者有半数及以上的其它董事节点未收到某董事节点发来的任意一条消息的情况,则其可能是拜占庭节点,对其积分进行最小化处理,即令其积分为预设的最小积分值。由于董事节点是参与一致性流程的重要节点,因此对其在积分上的惩戒会更高。其中,预设的最小积分值为预先设置的各节点积分的最小值,可以根据实际需求进行设置和调整。本实施例中,由于在积分更新过程中使用了对数,因此上述最小积分值应当大于0,可以设置最小积分值为0.1。

在视图切换协议、检查点协议以及动态进出的流程中,如果某节点(目标节点)收到需要超时重传的信息后仍未重传指定消息,则积分对应减1。具体的,本实施例中,由于在积分更新过程中使用了对数,且设置了最小积分值,因此如果积分对应减1后会导致更新后的积分小于最小积分值时,直接令更新后的积分值为最小积分值。

本实施例中,上述改进的pbft共识方法仍采用非对称加密来验证消息发送者的身份与消息安全性。

具体的,本实施例中,如图6所示,上述步骤s400包括:

步骤s401,基于预设的更新周期,获取更新后的各上述董事节点和各上述普通节点的积分。

步骤s402,通过上述主节点基于加权随机算法选举出预设的目标数目个目标节点。

步骤s403,将上述目标节点作为更新后的董事节点,将除上述目标节点以外的其它节点作为更新后的普通节点。

本实施例中,为了降低集中化的影响,董事节点为弱领导状态,即董事节点并非终身制而是会有基于时间片的任期(更新周期),本实施例中上述任期设置为10次一致性协议流程,任期结束后需要重新进行董事节点的选举。可选的,如果董事积分节点过低(低于预设的董事节点积分阈值,董事节点积分阈值可以根据实际需求进行调整和设置)也会直接强制终止其董事任期,而直接从普通节点中选取积分最高的节点作为替代。

具体的,本实施例中,进行董事节点的选举时,区块链网络中的所有节点会向主节点发送投票消息(vote),用于提供自身积分信息,其格式为<vote,g,c,v,i,term,t,d>。其中,vote为投票消息标记,指示该条消息为投票消息,g为当前节点的积分分数,c是当前节点收到的2f+1个检查点信息的集合,v是视图编号,i是节点编号,term是任期时间,t是时间戳。d是当前董事节点集合nd通过消息摘要算法所生成的,本实施例中参考md5消息算法生成该信息的摘要。主节点收到网络中所有的副本节点发来的vote消息后会对消息进行验证,验证内容包括视图编号v、时间戳t、任期term以及摘要d是否相同,同样还需要验证检查点状态证明c。通过所有验证的vote消息才会进入董事节点的选举流程中。检查点状态证明c以及相同的摘要能够更好的保证进入董事节点选举的节点的安全性。而在传输消息过程中,采用超时重传的机制保证所有的消息能够接收到,保证收到的消息消息数量满足m>2f+1即可开启董事节点选举。随后主节点根据各个节点的积分分数,采用加权随机算法(weightedrandom)从所有节点中选出n-f个董事节点。具体的,先按照节点积分进行排序并计算出加权总和sum,在1到sum之间随机选取一个数字r,随后遍历排好序的节点集合,并计算当前遍历所得到的权重之和sum′,如果满足sum′≥r则停止遍历,所停留节点即为董事节点,同时删除排序集合中该节点,再重复上述步骤,直至选出n-f个节点。其中,n为区块链网络中所有节点的数目,f为恶意节点的数目。本实施例中每一次选举对于所有节点的期望可以用如下公式表示:

其中,i为节点编号,gi为i号节点的积分分数,sum为所有节点积分总和。如此,可以保证积分高的节点能够更快的被选择到,减少遍历的时间。且相较于传统加权随机算法,不占用额外的空间,传统的随机算法对于权重高(即积分高)的因素采用复合生成多个相同因素来提高权重,以此来增加被选择几率,会占用额外空间。积分较低的节点也有概率被选举为董事节点,不会导致某些积分过高的节点一直担任董事节点,造成网络集中化的现象。

董事节点选举完毕后,主节点将选举出来的董事节点广播给网络中所有节点,未被选举成董事节点的其它节点则作为普通节点。具体的董事节点选举和广播流程示意如图7所示。

对于一致性协议,本实施例中采用“部分共识”来减少传统pbft共识方法在共识流程中全网广播带来的通信开销。基本思想为:当客户端节点发送请求消息后,仍由主节点赋予消息一个序号,并广播消息,随后由所有的董事节点进行共识判断。对于流程中部分阶段的消息增加部分内容以保证部分共识的可靠性。具体的,在request(请求)阶段与传统pbft共识方法一致,由客户端发送消息给主节点,并为消息分配一个时间戳。对于pre-prepare(预准备)阶段,主节点需要先判断当前网络是否处于董事节点选举阶段、视图切换阶段、检查点协议阶段以及节点动态进出阶段,若网络处于以上任意一个流程中则整个网络暂时不进入一致性协议流程中。当网络处于空闲状态后,主节点同样对收到的消息进行分配序号,随后广播pre-prepare消息给所有董事节点。此消息内容中我们需要添加董事节点的集合。当董事节点收到pre-prepare消息后,除了需要验证签名、视图编号、消息序号外,同样需要验证董事节点集合是否与自身存储的董事节点信息一致,如果其它条件都满足然而董事节点集合不一致则需先更新自身的董事节点信息,保持与收到的消息里的集合一致。随后再将request消息与pre-prepare消息写入自身的日志,并广播prepare消息给其它董事节点。董事节点收到prepare的消息且消息都满足视图编号一致,签名正确、消息序号处于正确区间、董事节点集合一致的前提下,便会将信息写入日志。如若节点的日志中包含pre-prepare消息以及n-2f+1条prepare消息(可以包含自身的prepare消息)则认为prepared判定为真。

当prepared判定为真后,董事节点便会广播commit消息给其它所有节点(包括普通节点),不管是董事节点还是普通节点,收到消息后都会判断签名、视图编号、消息序号等信息,如果这些消息都验证通过则会将该消息写入本地日志中。在prepared判定为真且日志中包含n-2f+1条董事节点的commit消息(可以包含自身的commit消息)的前提下,则认为commited-local判定为真。prepared判定和commited-local判定都需要n-2f+1的数量要求,这是考虑在n-f个董事节点的场景下,可能有f个恶意节点。那么如果节点收到n-2f+1条通过验证的消息,则证明正确的消息数量大于恶意节点所发的虚假消息数量,保证一致性流程中董事节点的共识结果的可靠性。在节点本地对于commited-local判定为真后,便会按照序号顺序开始处理请求消息并根据消息内部的命令执行相应操作。随后只需要董事节点返回reply消息即可,普通节点无需返回reply消息。

可选的,在上述步骤s403之后,上述方法还包括:基于更新后的上述董事节点选举并更新主节点。

本实施例中,执行10次一致性流程,更新董事节点后,也会对主节点进行重新选举和更新,以降低恶意节点作为主节点作恶的可能性。具体的,视图切换触发的条件与传统pbft共识方法一致:客户端超时未收到回复消息,且从节点未收到由主节点发送的消息时,客户端会将消息广播给所有的从节点。在这种场景下,设定若当前节点是积分最高的董事节点,则使用改进后的视图切换协议切换协议选出主节点;若当前节点不是积分最高的董事节点,则搁置消息等待新的视图变更消息。

本实施例中,参考层次分析法(ahp,analytichierarchyprocess)搭建模型选择主节点,为了更好的评估节点能否胜任主节点以及相较于其它节点其是否更加可靠,定义一个多元组s=(g,b,tr),其中g为节点积分分数,b为节点有效带宽,tr是节点成功处理的交易比例。参考ahp对视图切换协议进行分析改进,并建立视图切换的决策三层模型,如图8所示。为了更准确的选择主节点,不将所有的决策要素放在一起比较,而是对它们进行两两比较,并采用相对尺度要提高准确性。具体的,使用成对比较矩阵表示本层(例如准则层)所有因素对上一层(例如目标层)中的某个因素的相对重要性。本实施例中,定义积分、带宽以及交易成功率三者的相对重要程度如图9所示。

当积分最高的董事节点选举出主节点后,便将被选择的主节点通过视图切换信息广播给其它节点,消息格式为<new-change,v+1,pold,pnew,t>,其中,new-change为视图切换消息标记,表示该消息为主节点切换时的视图切换消息,v+1表示视图编号增加1,pold是旧的主节点的节点编号,pnew为新任主节点的节点编号,t为时间戳。当其它节点收到当前董事节点发送的新视图信息时无条件接受,并更新自身数据。随后需要回复消息,消息格式为<new-change-r,v+1,i>,其中,new-change-r为视图切换回复消息标记,表示该消息为对主节点切换时的视图切换消息的回复消息,i为节点编号,对于没有回复的节点主节点进行一次超时重传。

本实施例中,在上述基于更新后的上述董事节点选举并更新主节点之后,上述方法还包括:将更新后的各上述董事节点和各上述普通节点的积分调整为预设的积分调整值。

其中,上述预设的积分调整值为预先设置的积分值,可以根据实际需求设定和调整,且可以设置成与节点的初始积分值相同,也可以不同,在此不做具体限定。本实施例中,设置上述积分调整值为5。如此,在重新选举董事节点和主节点后将各节点的积分值重新设置为5,防止部分节点因前一个周期内的积分表现而导致积分值保持较高,出现网络集中化现象,对网络造成影响。

可选的,本实施例中,上述改进的pbft共识方法还允许当前联盟链中的企业节点加入当前网络,同样,也允许当前网络中的节点主动退出。此外,为了保证系统安全,对于网络中的恶意节点实施强制退出。

具体的,规定当前区块链网络允许添加新的节点的时间点仅为当前无任何流程时,即当前所有节点不处于一致性协议、视图切换协议或者检查点协议的流程中的前提下,才允许新的节点加入。由于联盟链场景下对于节点加入仍有一定限制,因此除了主节点需要对申请加入的节点进行验证外,其它所有董事节点均需要对该节点进行验证保证加入节点的安全性。为此,主节会点广播join消息至其它董事节点表示有新的节点加入网络,其格式为<join,i,ip,bw,t>,其中,i表示新加入节点编号,ip为新加入节点ip,bw为新加入节点网络带宽,t为当前时间戳。随后董事节点根据自身利益以及联盟链规则等信息对是否同意申请节点加入进行判断,最后回传回复消息,格式为<join-reply,r,i,ip,i′>,其中i′为自身节点编号,r是判断结果。在主节点收到半数以上结果为同意的董事节点的回复后便将对应节点加入网络,随后广播给网络内包括新加入节点在内的其它所有节点,格式为<join-ac,i,ip,t>。随后其它节点无条件服从主节点的信息,并将新加入的节点信息写入自身数据内。

上述改进的pbft共识方法允许已处于当前网络内的节点主动退出该网络。对于想退出节点,需要根据其是否是主节点、董事节点或者普通节点而进行不同的操作。如果申请退出的节点不是主节点也不是董事节点,则其会向主节点发送一条退出消息。主节点判断节点退出后网络中的节点数量是否还满足网络拜占庭条件,如若满足则允许其退出,撤销其证书并删除本地所存储的其相关信息后广播主动退出确认消息;如果申请退出的节点不是主节点但是是董事节点,同样需要判断上述条件是否成立,如果成立则撤销其证书并删除其信息,随后需要立即运行一次董事选举流程选出新的替代董事节点,并广播给网络中其它所有节点;如果申请退出的节点是主节点,则其会向其它所有节点发送主动退出消息,其它节点收到后会更新自身内的数据。而积分最高的董事节点收到该消息后会直接进行视图切换协议,协议流程中需要屏蔽与排除当前主节点。随后与主节点选举中的流程一致,该节点会将包含新的主节点的消息广播给其它所有节点。

为了提高网络节点的安全,上述改进的pbft共识方法对于积分较低的节点施行强制退出机制,并且后续不再允许该节点加入网络。具体的,在每一次一致性协议后,如若某一节点积分低于预设的积分最低值,则认为其是恶意节点。主节点将其信息记录在本地,包括节点ip、当前时间戳等信息。随后广播被动退出的消息passive-exit给其它所有节点。其它所有节点收到消息后更新自身内部的节点信息,后续不再接受和发送任何消息给该恶意节点。其中,上述预设的积分最低值为预先设置的判断恶意节点的积分临界值,本实施例中,可以设置为1,实际使用过程中可以根据实际需求进行调整,在此不做具体限定。

示例性设备

如图10中所示,对应于上述改进的pbft共识方法,本发明实施例还提供一种改进的pbft共识装置,上述改进的pbft共识装置包括:

初始化模块510,用于初始化所有节点的积分。

其中,上述初始化模块510可以具体用于:将区块链网络中需要进行pbft共识的所有节点的积分设置为预设的初始积分值。其中,上述初始积分值为预先设定的各节点的积分值,可以根据实际需求进行设置和调整,在此不做具体限定。可选的,上述初始积分值可以基于区块链网络中节点数目而定,例如,当在4台虚拟机上搭建实验时,为保证非恶意节点之间的分差不会过大而导致集中化,可以设置初始积分值为5。

初始选举模块520,用于基于各上述节点的积分和预设的目标数目,选举获取董事节点和普通节点,其中,上述董事节点用于执行一致性协议。

其中,上述预设的目标数目为预先设定的需要选取的董事节点的数目,可以根据实际需求进行设置和调整,在此不做具体限定。在一种应用场景中,可以设置上述目标数目为n-f,其中n为区块链网络中所有节点的数目,f为恶意节点的数目。

积分更新模块530,用于基于各上述董事节点和各上述普通节点执行共识流程,并基于各上述董事节点和各上述普通节点执行上述共识流程的表现分别更新各上述董事节点和各上述普通节点的积分。

可选的,当上述董事节点和各上述普通节点成功执行共识流程时,可以增加对应节点的积分,反之,当上述董事节点和各上述普通节点执行共识流程过程中出现错误时,则可对应减小对应节点的积分,从而根据节点的积分体现对应节点的执行能力。

节点更新模块540,用于基于预设的更新周期、预设的目标数目以及更新后的各上述董事节点和各上述普通节点的积分,重新选举并更新上述董事节点和上述普通节点。

其中,上述预设的更新周期为预先设置的对董事节点进行重新选举的周期,本实施例中,上述预设的更新周期为10次一致性流程,实际使用中,还可以根据实际需求进行设置和调整,在此不做具体限定。

由上可见,本发明实施例提供的改进的pbft共识装置通过初始化模块510初始化所有节点的积分;通过初始选举模块520,基于各上述节点的积分和预设的目标数目,选举获取董事节点和普通节点,其中,上述董事节点用于执行一致性协议;通过积分更新模块530基于各上述董事节点和各上述普通节点执行共识流程,并基于各上述董事节点和各上述普通节点执行上述共识流程的表现分别更新各上述董事节点和各上述普通节点的积分;通过节点更新模块540基于预设的更新周期、预设的目标数目以及更新后的各上述董事节点和各上述普通节点的积分,重新选举并更新上述董事节点和上述普通节点。本发明方案提供的改进的pbft共识装置基于各节点的积分选举出部分董事节点,基于董事节点执行一致性协议,如此,在执行一致性协议时不需要进行全网通信,有利于降低通信消耗,降低区块链的时间成本。

可选的,上述pbft共识装置可以作为区块链系统架构中的共识模块,执行区块链系统中的共识流程。

具体的,本实施例中,在上述基于各上述节点的积分和预设的目标数目,选举获取董事节点和普通节点之前,上述初始选举模块520还用于:获取初始的主节点。

其中,上述初始的主节点可以从上述区块链网络的所有节点中随机选取或指定。本实施例中,在上述区块链网络的所有节点中指定一个节点作为初始的主节点,用于在第一个周期内选举董事节点。在第一个周期过后,重新选举董事节点后,可以从更新后的董事节点中选举出新的主节点。

具体的,本实施例中,上述初始选举模块520具体用于:基于各上述节点的积分,通过上述主节点基于加权随机算法选举出预设的目标数目个董事节点;将上述节点中除上述董事节点以外的其它节点作为普通节点。

其中,上述预设的目标数目为预先设定的需要选取的董事节点的数目。具体的,本实施例中,将区块链网络中的所有节点划分为董事节点或普通节点,其中,初始的主节点是事先指定的,所以可能是董事节点,也可能是普通节点,而后续重新选举的主节点是在董事节点中选举获得的,所以后续重新选举的主节点是董事节点之一。上述董事节点的主要作用是负责一致性协议,确保每个节点对于交易消息处理的结果一致,同时在节点申请进入区块链网络时进行审核。普通节点在董事节点通过一致性协议后根据协议结果更新自身内部的交易数据。图3是本发明实施例提供的传统pbft共识方法一致性协议流程示意图,图4是本发明实施例提供的改进的pbft共识方法一致性协议流程示意图。pbft共识方法的一致性协议最关键的是pre-prepare(预准备)、prepare(准备)和commit(提交)三个步骤,如图3所示,传统pbft共识方法中每一步都需要进行消息广播,且prepare(准备)和commit(提交)过程中更需要整个网络中所有节点进行全网广播,对网络带宽带来巨大消耗,且造成较高的时间成本。而如图4所示,本发明实施例提供的改进的pbft共识方法将网络中的所有节点划分为董事节点以及普通节点,来减少参与全网广播的节点数量。这在一定程度上弱化了区块链网络去中心化的性质,但是由于董事节点在一定周期后会重新选举变更,且只服务于一致性协议中,因此带来的集中化影响较小。

具体的,本实施例中,上述积分更新模块530具体用于:对于各上述董事节点和各上述普通节点,每一次完整地执行完毕一致性协议流程、客户端节点操作或生成区块时,增加对应节点的积分;在一致性协议的流程中,获取目标董事节点,将上述目标董事节点的积分设置为预设的最小积分值,其中,上述目标董事节点为所发消息内容与其它董事节点不一致,或者,所发消息内容未被半数或半数以上其它董事节点接收到的董事节点;在视图切换协议、检查点协议以及动态进出的流程中,获取目标节点,减小上述目标节点的积分,其中,上述目标节点为接收到需要超时重传的信息后仍未重传指定消息的董事节点或普通节点。

本实施例中,积分是董事节点选举、视图切换以及网络内节点主动或被动退出的重要判定依据。可以根据各节点执行共识流程的表现更新对应的积分,从而在下一次进行董事节点的选举和更新时使得表现好的节点更有可能被选中。具体的,本实施例中,所有节点每一次完整地执行完毕一致性流程、客户端节点操作或生成区块则积分会进行增加,增加公式如下所示:

g′n=gn+|log10gn|(3)

其中,g′n表示更新后的新积分,gn表示当前积分。本实施例中,引入对数来进行积分的增加,这样随着积分的增加,其增长的速度会越来越低,恶意节点如果想获取高积分以竞选主节点或者董事节点的代价就非常大,如此可以保障网络的安全。

在一致性协议的流程中,如果某董事节点(目标董事节点)出现所发消息内容与其它董事节点不一致,或者有半数及以上的其它董事节点未收到某董事节点发来的任意一条消息的情况,则其可能是拜占庭节点,对其积分进行最小化处理,即令其积分为预设的最小积分值。由于董事节点是参与一致性流程的重要节点,因此对其在积分上的惩戒会更高。其中,预设的最小积分值为预先设置的各节点积分的最小值,可以根据实际需求进行设置和调整。本实施例中,由于在积分更新过程中使用了对数,因此上述最小积分值应当大于0,可以设置最小积分值为0.1。

在视图切换协议、检查点协议以及动态进出的流程中,如果某节点(目标节点)收到需要超时重传的信息后仍未重传指定消息,则积分对应减1。具体的,本实施例中,由于在积分更新过程中使用了对数,且设置了最小积分值,因此如果积分对应减1后会导致更新后的积分小于最小积分值时,直接令更新后的积分值为最小积分值。

本实施例中,上述改进的pbft共识装置中仍采用非对称加密来验证消息发送者的身份与消息安全性。

具体的,本实施例中,上述节点更新模块540具体用于:基于预设的更新周期,获取更新后的各上述董事节点和各上述普通节点的积分;通过上述主节点基于加权随机算法选举出预设的目标数目个目标节点;将上述目标节点作为更新后的董事节点,将除上述目标节点以外的其它节点作为更新后的普通节点。

本实施例中,为了降低集中化的影响,董事节点为弱领导状态,即董事节点并非终身制而是会有基于时间片的任期(更新周期),本实施例中上述任期设置为10次一致性协议流程,任期结束后需要重新进行董事节点的选举。可选的,如果董事积分节点过低(低于预设的董事节点积分阈值,董事节点积分阈值可以根据实际需求进行调整和设置)也会直接强制终止其董事任期,而直接从普通节点中选取积分最高的节点作为替代。

具体的,本实施例中,进行董事节点的选举时,区块链网络中的所有节点会向主节点发送投票消息(vote),用于提供自身积分信息,其格式为<vote,g,c,v,i,term,t,d>。其中,vote为投票消息标记,指示该条消息为投票消息,g为当前节点的积分分数,c是当前节点收到的2f+1个检查点信息的集合,v是视图编号,i是节点编号,term是任期时间,t是时间戳。d是当前董事节点集合nd通过消息摘要算法所生成的,本实施例中参考md5消息算法生成该信息的摘要。主节点收到网络中所有的副本节点发来的vote消息后会对消息进行验证,验证内容包括视图编号v、时间戳t、任期term以及摘要d是否相同,同样还需要验证检查点状态证明c。通过所有验证的vote消息才会进入董事节点的选举流程中。检查点状态证明c以及相同的摘要能够更好的保证进入董事节点选举的节点的安全性。而在传输消息过程中,采用超时重传的机制保证所有的消息能够接收到,保证收到的消息消息数量满足m>2f+1即可开启董事节点选举。随后主节点根据各个节点的积分分数,采用加权随机算法(weightedrandom)从所有节点中选出n-f个董事节点。具体的,先按照节点积分进行排序并计算出加权总和sum,在1到sum之间随机选取一个数字r,随后遍历排好序的节点集合,并计算当前遍历所得到的权重之和sum′,如果满足sum′≥r则停止遍历,所停留节点即为董事节点,同时删除排序集合中该节点,再重复上述步骤,直至选出n-f个节点。其中,n为区块链网络中所有节点的数目,f为恶意节点的数目。本实施例中每一次选举对于所有节点的期望可以用如下公式表示:

其中,i为节点编号,gi为i号节点的积分分数,sum为所有节点积分总和。如此,可以保证积分高的节点能够更快的被选择到,减少遍历的时间。且相较于传统加权随机算法,不占用额外的空间,传统的随机算法对于权重高(即积分高)的因素采用复合生成多个相同因素来提高权重,以此来增加被选择几率,会占用额外空间。积分较低的节点也有概率被选举为董事节点,不会导致某些积分过高的节点一直担任董事节点,造成网络集中化的现象。

董事节点选举完毕后,主节点将选举出来的董事节点广播给网络中所有节点,未被选举成董事节点的其它节点则作为普通节点。具体的董事节点选举和广播流程示意如图7所示。

对于一致性协议,本实施例中采用“部分共识”来减少传统pbft共识流程中全网广播带来的通信开销。其基本思想和流程与上述示例性方法中的描述一致,在此不再赘述。

可选的,在将上述目标节点作为更新后的董事节点,将除上述目标节点以外的其它节点作为更新后的普通节点之后,上述节点更新模块540还用于:基于更新后的上述董事节点选举并更新主节点。本实施例中,执行10次一致性流程,更新董事节点后,也会对主节点进行重新选举和更新,以降低恶意节点作为主节点作恶的可能性。具体的,视图切换触发的条件与传统pbft共识方法一致:客户端超时未收到回复消息,且从节点未收到由主节点发送的消息时,客户端会将消息广播给所有的从节点。在这种场景下,设定若当前节点是积分最高的董事节点,则使用改进后的视图切换协议切换协议选出主节点;若当前节点不是积分最高的董事节点,则搁置消息等待新的视图变更消息。

具体的,上述节点更新模块540选举并更新主节点的流程与上述示例性方法中对应更新主节点的具体流程相同,在此不再赘述。

本实施例中,在上述基于更新后的上述董事节点选举并更新主节点之后,上述积分更新模块530还用于:将更新后的各上述董事节点和各上述普通节点的积分调整为预设的积分调整值。

其中,上述预设的积分调整值为预先设置的积分值,可以根据实际需求设定和调整,且可以设置成与节点的初始积分值相同,也可以不同,在此不做具体限定。本实施例中,设置上述积分调整值为5。如此,在重新选举董事节点和主节点后将各节点的积分值重新设置为5,防止部分节点因前一个周期内的积分表现而导致积分值保持较高,出现网络集中化现象,对网络造成影响。

可选的,本实施例中,上述改进的pbft共识装置还允许当前联盟链中的企业节点加入当前网络,同样,也允许当前网络中的节点主动退出。此外,为了保证系统安全,对于网络中的恶意节点实施强制退出。

具体的,规定当前区块链网络允许添加新的节点的时间点仅为当前无任何流程时,即当前所有节点不处于一致性协议、视图切换协议或者检查点协议的流程中的前提下,才允许新的节点加入。由于联盟链场景下对于节点加入仍有一定限制,因此除了主节点需要对申请加入的节点进行验证外,其它所有董事节点均需要对该节点进行验证保证加入节点的安全性。为此,主节会点广播join消息至其它董事节点表示有新的节点加入网络,其格式为<join,i,ip,bw,t>,其中,i表示新加入节点编号,ip为新加入节点ip,bw为新加入节点网络带宽,t为当前时间戳。随后董事节点根据自身利益以及联盟链规则等信息对是否同意申请节点加入进行判断,最后回传回复消息,格式为<join-reply,r,i,ip,i′>,其中i′为自身节点编号,r是判断结果。在主节点收到半数以上结果为同意的董事节点的回复后便将对应节点加入网络,随后广播给网络内包括新加入节点在内的其它所有节点,格式为<join-ac,i,ip,t>。随后其它节点无条件服从主节点的信息,并将新加入的节点信息写入自身数据内。

上述改进的pbft共识装置允许已处于当前网络内的节点主动退出该网络。对于想退出节点,需要根据其是否是主节点、董事节点或者普通节点而进行不同的操作。如果申请退出的节点不是主节点也不是董事节点,则其会向主节点发送一条退出消息。主节点判断节点退出后网络中的节点数量是否还满足网络拜占庭条件,如若满足则允许其退出,撤销其证书并删除本地所存储的其相关信息后广播主动退出确认消息;如果申请退出的节点不是主节点但是是董事节点,同样需要判断上述条件是否成立,如果成立则撤销其证书并删除其信息,随后需要立即运行一次董事选举流程选出新的替代董事节点,并广播给网络中其它所有节点;如果申请退出的节点是主节点,则其会向其它所有节点发送主动退出消息,其它节点收到后会更新自身内的数据。而积分最高的董事节点收到该消息后会直接进行视图切换协议,协议流程中需要屏蔽与排除当前主节点。随后与主节点选举中的流程一致,该节点会将包含新的主节点的消息广播给其它所有节点。

为了提高网络节点的安全,上述改进的pbft共识装置对于积分较低的节点施行强制退出机制,并且后续不再允许该节点加入网络。具体的,在每一次一致性协议后,如若某一节点积分低于预设的积分最低值,则认为其是恶意节点。主节点将其信息记录在本地,包括节点ip、当前时间戳等信息。随后广播被动退出的消息passive-exit给其它所有节点。其它所有节点收到消息后更新自身内部的节点信息,后续不再接受和发送任何消息给该恶意节点。其中,上述预设的积分最低值为预先设置的判断恶意节点的积分临界值,本实施例中,可以设置为1,实际使用过程中可以根据实际需求进行调整,在此不做具体限定。

基于上述实施例,本发明还提供了一种智能终端,其原理框图可以如图11所示。上述智能终端包括通过系统总线连接的处理器、存储器、网络接口以及显示屏。其中,该智能终端的处理器用于提供计算和控制能力。该智能终端的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和改进的pbft共识程序。该内存储器为非易失性存储介质中的操作系统和改进的pbft共识程序的运行提供环境。该智能终端的网络接口用于与外部的终端通过网络连接通信。该改进的pbft共识程序被处理器执行时实现上述任意一种改进的pbft共识方法的步骤。该智能终端的显示屏可以是液晶显示屏或者电子墨水显示屏。

本领域技术人员可以理解,图11中示出的原理框图,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的智能终端的限定,具体的智能终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种智能终端,上述智能终端包括存储器、处理器以及存储在上述存储器上并可在上述处理器上运行的改进的pbft共识程序,上述改进的pbft共识程序被上述处理器执行时进行以下操作指令:

初始化所有节点的积分;

基于各上述节点的积分和预设的目标数目,选举获取董事节点和普通节点,其中,上述董事节点用于执行一致性协议;

基于各上述董事节点和各上述普通节点执行共识流程,并基于各上述董事节点和各上述普通节点执行上述共识流程的表现分别更新各上述董事节点和各上述普通节点的积分;

基于预设的更新周期、预设的目标数目以及更新后的各上述董事节点和各上述普通节点的积分,重新选举并更新上述董事节点和上述普通节点。

本发明实施例还提供一种计算机可读存储介质,上述计算机可读存储介质上存储有改进的pbft共识程序,上述改进的pbft共识程序被处理器执行时实现本发明实施例提供的任意一种改进的pbft共识方法的步骤。

应理解,上述实施例中各步骤的序号大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将上述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各实例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟是以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同的方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

在本发明所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,上述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以由另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。

上述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,上述计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,上述计算机程序包括计算机程序代码,上述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。上述计算机可读介质可以包括:能够携带上述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,上述计算机可读存储介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减。

以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不是相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

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