CN107579848B - 实用拜占庭容错共识机制中动态更改共识节点的方法 - Google Patents

实用拜占庭容错共识机制中动态更改共识节点的方法 Download PDF

Info

Publication number
CN107579848B
CN107579848B CN201710761858.3A CN201710761858A CN107579848B CN 107579848 B CN107579848 B CN 107579848B CN 201710761858 A CN201710761858 A CN 201710761858A CN 107579848 B CN107579848 B CN 107579848B
Authority
CN
China
Prior art keywords
consensus
node
change request
nodes
transaction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201710761858.3A
Other languages
English (en)
Other versions
CN107579848A (zh
Inventor
陈哲昺
卢旻
张福哲
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Insurance Exchange Co ltd
Original Assignee
Shanghai Insurance Exchange Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Insurance Exchange Co ltd filed Critical Shanghai Insurance Exchange Co ltd
Priority to CN201710761858.3A priority Critical patent/CN107579848B/zh
Publication of CN107579848A publication Critical patent/CN107579848A/zh
Application granted granted Critical
Publication of CN107579848B publication Critical patent/CN107579848B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明提供了实用拜占庭容错共识机制中动态更改共识节点的方法,其包括:系统管理员向共识节点发起增减共识节点的更改请求作为系统级别事务,使用系统管理员的私钥对更改请求签名;共识节点验证更改请求,若验证通过则为更改请求添加特殊系统事务头,并广播更改请求,各共识节点将更改请求放入优先事务队列;进行新一轮共识,由选出的提案节点提出包含更改请求的提案区块并将其广播给所有共识节点,由所有共识节点验证提案区块中的事务,先检验事务的事务头,当检验到特殊系统事务头时进入系统事务操作逻辑而非智能合约;在达成共识后,节点执行更改请求并更新共识节点集合列表,更新后的共识节点集合列表被存储在节点的本地文件中。

Description

实用拜占庭容错共识机制中动态更改共识节点的方法
技术领域
本发明涉及区块链技术,具体地,本发明涉及区块链网络上的实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)的共识机制。
背景技术
在1999年的操作系统设计与实现国际会议(OSDI99)上,Miguel Castro和BarbaraLiskov提出了一种PBFT机制。这种机制解决了原始拜占庭容错算法效率不高的问题,将该算法复杂度由指数级降低到多项式级,从而使得拜占庭容错算法在实际系统应用中变得可行。
目前已经将这种PBFT机制应用于区块链系统的共识算法,以搭建联盟链。联盟链是经授权后的节点才能加入和退出的区块链网络,各个节点通常有与之对应的实体机构组织。将上述PBFT机制作为共识机制应用到联盟链中可以高效地防止联盟链中出现拜占庭节点 (即,恶意作恶节点)。
但是在实际应用中,联盟链常常需要根据业务需求而增加或减少共识节点,或者下线一些硬件有问题的节点并使用新的节点来代替该有问题的节点。传统的PBFT算法中并没有包括一种动态的共识节点集合变化机制,因此无法满足这一需求。
发明内容
本发明提供一种可以在区块链网络的PBFT共识机制中安全可靠地动态更改共识节点的方法。使用根据本发明的安全机制,通过 PBFT算法本身的共识,可以实现在区块链上使用PBFT算法时动态更改共识节点的目的。
根据本发明的一个方面,提供了一种在区块链网络的实用拜占庭容错(PBFT)的共识机制中动态更改共识节点的方法,其包括:发起更改请求步骤,在所述发起更改请求步骤中,由系统管理员向任意一个共识节点发起一个更改请求作为系统级别事务,并且使用所述系统管理员的私钥对所述更改请求进行签名,其中所述更改请求为增加或删除一个或更多个共识节点的请求;验证更改请求步骤,在所述验证更改请求步骤中,所述任意一个共识节点对接收到的所述更改请求进行验证,在验证通过的情况下,为所述更改请求添加特殊系统事务头,并将具有特殊系统事务头的该更改请求向所有共识节点广播,各共识节点将具有特殊系统事务头的该更改请求放入优先事务队列;更改请求共识步骤,在所述更改请求共识步骤中,进行新一轮的基于 PBFT的共识操作,在该共识操作中,由选出的提案节点优先打包所述优先事务队列中的事务,从而提出包含所述更改请求的提案区块并将所述提案区块广播给所有共识节点,由所有共识节点对所述提案区块中的各事务进行验证,其中共识节点对各事务进行验证时先检验事务的事务头,在检验到所述更改请求的特殊系统事务头的情况下进入预先定义的固定的系统事务操作逻辑而不是智能合约进行验证,并且其中在所述优先事务队列中存在多于一个更改请求的情况下,所述提案节点仅将时间最早的一个更改请求打包到所述提案区块中;更改列表步骤,在所述更改列表步骤中,在所述更改请求共识步骤中对所述提案区块达成共识后,所述区块链网络中的各节点执行所述更改请求,从而根据所述更改请求来更新共识节点集合列表,其中更新后的共识节点集合列表被存储在节点的本地文件中。
根据本发明的另一个方面,提供了一种能够在实用拜占庭容错 (PBFT)的共识机制中动态更改共识节点的区块链网络系统,所述区块链网络系统至少包括系统管理员和多个共识节点。所述系统管理员向任意一个共识节点发起一个更改请求作为系统级别事务,并且使用所述系统管理员的私钥对所述更改请求进行签名,其中所述更改请求为增加或删除一个或更多个共识节点的请求;所述任意一个共识节点对接收到的所述更改请求进行验证,在验证通过的情况下,为所述更改请求添加特殊系统事务头,并将具有特殊系统事务头的该更改请求向所有共识节点广播,各共识节点将具有特殊系统事务头的该更改请求放入优先事务队列;各共识节点进行新一轮的基于PBFT的共识操作,在该共识操作中,由选出的提案节点优先打包所述优先事务队列中的事务,从而提出包含所述更改请求的提案区块并将所述提案区块广播给所有共识节点,所有共识节点对所述提案区块中的各事务进行验证,其中共识节点对各事务进行验证时先检验事务的事务头,在检验到所述更改请求的特殊系统事务头的情况下进入预先定义的固定的系统事务操作逻辑而不是智能合约进行验证,并且其中在所述优先事务队列中存在多于一个更改请求的情况下,所述提案节点仅将时间最早的一个更改请求打包到所述提案区块中;在基于PBFT的共识操作对所述提案区块达成共识后,所述区块链网络系统中的各节点执行所述更改请求,从而根据所述更改请求来更新共识节点集合列表,其中更新后的共识节点集合列表被存储在节点的本地文件中。
根据本发明的另一个方面,提供了一种用于在区块链网络的实用拜占庭容错(PBFT)的共识机制中动态更改共识节点的装置,其包括:用于发起更改请求的发起更改请求部件,所述发起更改请求部件使得系统管理员向任意一个共识节点发起一个更改请求作为系统级别事务,并使用所述系统管理员的私钥对所述更改请求进行签名,其中所述更改请求为增加或删除一个或更多个共识节点的请求;用于验证更改请求的验证更改请求部件,所述验证更改请求部件使得所述任意一个共识节点对接收到的所述更改请求进行验证,在验证通过的情况下,为所述更改请求添加特殊系统事务头,并将具有特殊系统事务头的该更改请求向所有共识节点广播,并且所述验证更改请求部件使得各共识节点将具有特殊系统事务头的该更改请求放入优先事务队列;用于对所述更改请求进行共识的更改请求共识部件,所述更改请求共识部件使得各共识节点进行新一轮的基于PBFT的共识操作,在该共识操作中由选出的提案节点优先打包所述优先事务队列中的事务,从而提出包含所述更改请求的提案区块并将所述提案区块广播给所有共识节点,由所有共识节点对所述提案区块中的各事务进行验证,其中共识节点对各事务进行验证时先检验事务的事务头,在检验到所述更改请求的特殊系统事务头的情况下进入预先定义的固定的系统事务操作逻辑而不是智能合约进行验证,并且其中在所述优先事务队列中存在多于一个更改请求的情况下,所述提案节点仅将时间最早的一个更改请求打包到所述提案区块中;用于更改共识节点集合列表的更改列表部件,所述更改列表部件在基于PBFT的共识操作对所述提案区块达成共识后使得区块链网络中的各节点执行所述更改请求,从而根据所述更改请求来更新共识节点集合列表,其中更新后的共识节点集合列表被存储在节点的本地文件中。
根据本发明的另一个方面,提供了一种用于在区块链网络的实用拜占庭容错(PBFT)的共识机制中动态更改共识节点的系统,其包括:一个或更多个处理器;以及一个或更多个存储器,被配置为存储一系列计算机可执行指令,其中所述一系列计算机可执行指令在由所述一个或更多个处理器运行时使得所述一个或更多个处理器执行如上所述的方法。
根据本发明的另一个方面,提供了一种非暂态的计算机可读介质,其上存储有计算机可执行指令,所述计算机可执行指令在由一个或更多个处理器运行时使得所述一个或更多个处理器执行如上所述的方法。
根据参照附图的以下描述,本发明的其它特性特征和优点将变得清晰。
附图说明
并入说明书中并且构成说明书的一部分的附图示出了本发明的实施例,并且与描述一起用于说明本发明的原理。
图1是示出了根据本发明一个示例性实施例的在区块链中应用 PBFT算法进行共识操作的网络拓扑结构的示意图。
图2是示出了根据本发明一个示例性实施例的区块链网络系统的基本配置的示意图。
图3是示出了根据本发明一个示例性实施例的在区块链网络的 PBFT共识机制中动态更改共识节点的方法的示例性流程图。
图4是示出了根据本发明一个优选实施例的在区块链网络的 PBFT共识机制中动态更改共识节点的方法的详细流程图。
图5是示出了根据本发明一个优选实施例的基于PBFT的共识操作的各个阶段的示意图。
图6是示出了根据本发明一个示例性实施例的启动区块链网络以及新增共识节点的过程的示例性流程图。
图7是示出了根据本发明一个示例性实施例的删除作恶节点的过程的示例性流程图。
图8是示出了根据本发明一个示例性实施例的用于在区块链网络的PBFT共识机制中动态更改共识节点的装置的基本配置的框图。
图9是示出可以实现根据本发明的实施例的计算设备的示例性配置图。
具体实施方式
下面将参考附图来详细描述本发明的优选的实施例。不是本发明必需的细节和功能被省略,以便不会混淆本发明的理解。
请注意,类似的参考数字和字母指的是图中的类似的项目,因而一旦在一幅图中定义了一个项目,就不需要在之后的图中讨论了。
在本公开中,术语“第一”、“第二”等仅仅被用来在元件或步骤之间进行区分,而并不意图表示时间顺序、优先级或重要性。
本公开中,术语“区块链技术”包括但不限于关于分布式存储、点对点网络、共识机制、加密算法等的技术。术语“共识机制”通常是指区块链系统中实现不同节点之间建立信任、获取权益的数学算法。
图1是示出了根据本发明一个示例性实施例的在区块链中应用 PBFT算法进行共识操作的网络拓扑结构的示意图。
如图1所示,通常一个区块链网络可以包括多个共识节点(例如,共识节点1-4)和多个非共识节点,其中共识节点负责进行共识操作和生产账本,特别是参与应用PBFT算法进行的共识操作;而非共识节点则仅接收消息和同步记录账本,并不参与共识操作,也没有共识投票的权力。多个共识节点两两之间相互连接和/或通信,而非共识节点只用与至少一个共识节点或非共识节点连接和/或通信以实现同步即可。本领域技术人员均理解,非共识节点并非是必需的,可以根据实际需要进行增减,而且非共识节点的增加或者减少并不受PBFT算法的影响,因为他们只是接收共识节点的投票以及出块逻辑,并且记录账本,他们的投票共识节点也不会接收和承认。增加非共识节点只需要使用统一的配置文件将其接入网络即可,而删除非共识节点也只需要直接关闭下架节点即可。因此,下文中着重讨论区块链网络中共识节点的操作,而省略了对非共识节点的操作的描述。
此外,应当认识到,共识节点和非共识节点并非是固定的,而是可以通过本发明的方法进行动态切换。
图2是示出了根据本发明一个示例性实施例的区块链网络系统的基本配置的示意图。如图2所示,根据本发明实施例的区块链网络系统包括,例如,多个共识节点以及与其中至少一个共识节点(例如但不限于,共识节点1)连接和/或通信的系统管理员。虽然图2未示出,但是本领域技术人员均能理解,应用本发明的区块链网络系统还可以根据需要包括如图1所示的非共识节点。另外,系统管理员不限于仅与共识节点1连接或通信,而是可以与区块链网络中的任意一个或更多个共识节点、甚至全部共识节点连接和/或通信。在一些优选的实施方式中,系统管理员可以采用专门的计算设备(如工作站、服务器、台式计算机、膝上型计算机等),具有固定的IP地址,可以由系统操作人员通过特别的系统操作接口进行操作。
系统管理员和共识节点1可以采用各种方式连接和/或通信。例如,系统管理员和共识节点1的连接可以是有线连接(诸如通过以太网(注册商标)或广域网(WAN)的LAN的连接)或无线连接(诸如通过无线保真(Wi-Fi)、Wi-Fi直接(Wi-Fi Direct)或使用其它通信方法的无线通信连接)。
此外,系统管理员还可以与共识节点1进行连接握手。握手是指在数据通信中,在进行信息交换之前,需要对操作模式的状态互相达成协定,握手可以用于达成参数(诸如信息传输率、字母表、奇偶校验、中断过程和其他协议特性)共识。例如,系统管理员与共识节点 1的连接握手可以是基于诸如TCP协议或其他协议的。
在与共识节点1进行了连接握手后,系统管理员可以向该共识节点发送更改请求,从而进行动态更改共识节点的操作,如下面将结合图3所详细描述的。
图3是示出了根据本发明一个示例性实施例的在区块链网络的 PBFT共识机制中动态更改共识节点的方法300的示例性流程图。如图3所示,该方法300包括发起更改请求步骤S302、验证更改请求步骤S304、更改请求共识步骤S306和更改列表步骤S308。
具体而言,在发起更改请求步骤S302中,由系统管理员向任意一个共识节点发起一个更改请求作为系统级别事务,并且使用系统管理员的私钥对该更改请求进行签名,其中该更改请求为增加或删除一个或更多个共识节点的请求。
在验证更改请求步骤S304中,上述任意一个共识节点可以对接收到的该更改请求进行验证,在验证通过的情况下,为该更改请求添加特殊系统事务头,并将具有特殊系统事务头的该更改请求向所有共识节点广播,各共识节点将具有特殊系统事务头的该更改请求放入优先事务队列。
在一些优选实施方式中,在验证更改请求步骤S304中,收到更改请求的那个共识节点可以验证该更改请求的签名是否是系统管理员的签名以及判定该更改请求是否符合共识节点更改条件。该共识节点更改条件可以包含,例如,请求更改的共识节点的数量小于等于 (N-1)/3以及更改后的共识节点的总数量大于等于4,其中N为当前共识节点的总数量。
在一些优选实施方式中,验证更改请求步骤S304还可以包括:在该任意一个共识节点对更改请求验证通过的情况下还为该更改请求附上该节点的签名,各共识节点在对该节点的签名验证通过的情况下才将该更改请求放入优先事务队列。
在更改请求共识步骤S306中,进行新一轮的基于PBFT的共识操作,在该共识操作中,由选出的提案节点优先打包所述优先事务队列中的事务,从而提出包含该更改请求的提案区块并将该提案区块广播给所有共识节点,由所有共识节点对该提案区块中的各事务进行验证。共识节点对各事务进行验证时先检验事务的事务头,在检验到该更改请求的特殊系统事务头的情况下进入预先定义的固定的系统事务操作逻辑而不是智能合约进行验证。并且在所述优先事务队列中存在多于一个更改请求的情况下,所述提案节点仅将时间最早的一个更改请求打包到所述提案区块中。在这种情况下,一轮共识操作只能处理一个更改请求,从而保证了动态更改共识节点的可靠性。
在一些优选实施方式中,在更改请求共识步骤S306中,各共识节点也可以验证该更改请求的签名是否是系统管理员的签名以及判定该更改请求是否符合共识节点更改条件。该共识节点更改条件可以包含,例如,请求更改的共识节点的数量小于等于(N-1)/3以及更改后的共识节点的总数量大于等于4,其中N为当前共识节点的总数量。优选地,在上述验证通过之后才检验事务的合法性。在这种情况下,对更改请求进行了二次校验,进一步提高了系统的安全性。
在一些优选实施方式中,在更改请求共识步骤S306中,提案节点在检测到优先事务队列中存在事务的情况下,可以仅把该优先事务队列中的一个或更多个事务打包到提案区块中。在这种情况下,由于整个区块只包含系统级别事务,因此避免了因为一些错误的普通事务而导致系统级别事务失败的问题,从而进一步提升了系统级别事务的处理效率。
在一些优选实施方式中,上述基于PBFT的共识操作可以包括如下步骤:所有共识节点根据一个统一公式从当前共识节点中选出一个提案节点,由选出的提案节点提出包含所述更改请求的提案区块并将所述提案区块广播给所有共识节点,由所有共识节点对所述提案区块中的各事务进行验证,各共识节点在验证通过的情况下,向所有共识节点广播同意投票消息,并且等待其他共识节点的同意投票消息,各共识节点在预定时间内收到了超过三分之二数量的共识节点发出的同意投票消息的情况下,向所有共识节点广播提交(commit)消息,并且等待其他节点的提交消息,各共识节点在预定时间内收到了超过三分之二数量的共识节点发出的提交消息的情况下,将所述提案区块加入本地区块链账本中成为新区块。
在更改列表步骤S308中,在前面步骤S306中对该提案区块达成共识后,该区块链网络中的各节点执行该更改请求,从而根据该更改请求来更新共识节点集合列表,其中更新后的共识节点集合列表被存储在节点的本地文件中。
上述的本发明的方法300提供了一套安全可靠的机制来动态加减共识节点,其对于联盟链而言特别方便适用。
首先,本发明提出了一种新颖的通过全网共识的方式来进行共识节点的增减,而不是简单地由系统管理员来直接决定共识节点的变更。这样能极大降低系统被恶意篡改的可能性。此外,如上所述,本发明的方法采用系统管理员私钥对更改请求进行签名验证,这样的操作保证了系统的安全性。此外,为系统增加了优先事务队列,这使得一些紧急事务或者系统级别事务(例如上述更改请求)可以优先进入区块链系统并发挥作用。而为更改请求添加特殊系统事务头既便于将其归到优先事务队列中进行优先处理,又便于标记系统级别事务,使得后续一旦被检测到,就进入预先定义的固定的系统事务操作逻辑而不是智能合约进行处理,使得执行更加安全。通常区块链事务都会进入虚拟机执行智能合约,但是智能合约是可升级的,有被恶意篡改的风险,而在本发明中系统级别事务有其安全的特殊性,不能交给智能合约来执行。本文中提到的术语“系统事务操作逻辑”指的是系统底层的一段固定代码,其不可被修改。
另外,如上所述,本发明的方法将共识节点集合列表保存在本地文件中,而不是像传统做法那样保存在内存中,这也进一步提高了系统的安全性和方便性。现有技术将共识节点集合列表保存在内存中时,如果节点崩溃,需要重启重新运行所有事务或者从其他节点同步不安全的信息来维护节点列表。而本发明通过本地化保存一个共识节点集合列表,在重启时通过本地读取,就能安全、快捷地重新获得共识节点集合列表。具体而言,如果节点因为某些原因(诸如,硬件故障等)需要重启,在重启后,节点会首先检测本地是否存在记录更新过后的共识节点列表的本地文件,如果存在,则直接读取该本地文件作为最新节点列表;如果没有,则说明没有经过节点列表更新操作,则可以从初始化文件中读取最初始的共识节点列表。
此外,注意到,在传统PBFT算法中,由于无法改变共识节点集合,因此虽然作恶节点无法作恶,但是作恶节点的存在仍然会拖慢主干网络的速度。一般认为当存在a%的作恶节点时,整个网络的效率就会降低a%。因此,在一些优选实施方式中,本发明的方法还可以包括发现作恶的共识节点的步骤,在该步骤中由系统管理员或任一共识节点根据各共识节点在共识操作历史中的表现而确定存在一个或更多个作恶的共识节点,并且相应地由系统管理员在发起更改请求步骤S302中发起一个更改请求来删除所发现的一个或更多个作恶的共识节点。而且在更改列表步骤S308中更新了共识节点集合列表后,可以使用新的共识节点集合列表开始下一轮共识操作。在选取提案节点时,将使用最新的节点列表来计算提案节点。并且在后续进行投票以及认证其他共识节点投票时,均使用更新过后的节点集合列表。这样使得作恶节点一经发现就会被踢除,大大提高全网的工作效率。如果该作恶节点强行不接受节点集合的改变,则作恶节点的每次计算的信息都与主干网络中其他共识节点的计算信息不一致,基于该不一致的信息,该作恶节点仍然被主干网络抛弃,不会影响效率。
下面将结合图4来描述本发明的一个优选实施例的方法的详细操作,从而更清楚全面地阐述本发明的原理以及益处。显然,这些细节只是示例性的,而本发明并不限于此。
图4是示出了根据本发明一个优选实施例的在区块链网络的 PBFT共识机制中动态更改共识节点的方法400的详细流程图。
例如,如果由于业务需求联盟链中需要增加共识节点,或者有机构组织退出联盟,需要在联盟链中删除代表该机构组织的共识节点,则在步骤S402中由系统管理员向其中的一个共识节点(例如上述图2 中所示的与系统管理员进行了连接握手的共识节点1)发起一个更改共识节点的请求,并且使用系统管理员秘钥对该请求进行了签名。具体地,例如,系统管理员可以使用管理员私钥对于该请求的前两个字段进行签名。因此,该更改共识节点的请求可以包括:请求的种类(即,增加还是删除)、要改变的共识节点的详细身份信息(诸如IP地址、端口、公钥等节点身份信息)以及使用管理员私钥对于前两个字段进行签名的签名字符串等。
在步骤S404中,接收到请求的共识节点首先使用系统启动时内置在系统中的系统管理员公钥来验证签名字符串,以判定该请求是否是系统管理员请求。然后,该共识节点判定接收到的请求是否符合共识节点更改条件。根据本发明的一个优选实施例,该共识节点更改条件可以包括:1)请求更改的共识节点的数量是否小于等于全网节点数的(N-1)/3(其中,N为系统总节点数);以及2)改动过后的共识节点数是否小于4个节点(即PBFT算法要求的最小共识节点数)。其中前一个条件是为了保证全网的安全性和稳定性,一次不能更改过多的共识节点。如果上述验证均通过,则处理进行到步骤S406。否则,如果该请求的上述任意一项验证失败,则处理进行到步骤S422,返回消息,表示本次更改请求失败。
在步骤S406中,共识节点会给该更改请求加上一个特殊系统事务头(通常为一段固定的特别字符),并用自己的私钥对加上特殊系统事务头的更改请求进行签名,然后将其在整个区块链网络中进行广播。
然后,如步骤S408所示,其他共识节点接收到这个作为系统级别事务的更改请求后,对其签名进行验证并在验证通过后将其放入一个特殊的系统优先事务队列。然后,处理进行到步骤S410。
在步骤S410处,共识节点集合进入新一轮共识,并且在步骤 S410-S414中完成这一轮共识操作。下面将结合图5中的最简单的共识节点集合的各阶段操作图来阐述本实施例的优选的共识操作的原理。显然,图5只是示例性的而非限制性的。
在步骤S410中,首先,全网共识节点根据一个统一公式,从当前共识节点中选出一个提案节点,例如,图5中示出的提案节点0。
然后,在如图5所示的预准备阶段中,提案节点0在其自身的优先事务队列中寻找是否存在系统级的事务,如果存在,则优先将该系统级事务打包进入新一个提案区块,并将提案区块广播给全网共识节点。在根据本实施例的方法400中,优先事务队列中至少存在一个更改请求,因此该提案区块包括前述更改请求。在当前优先事务队列中存在多于一个更改请求的情况下,提案节点0仅将时间最早的那个更改请求打包到提案区块中。这是为了保证一轮共识操作只处理一个更改请求,从而进一步保证了动态更改共识节点的可靠性。当然,该提案区块除了包含更改请求外还可以包括其它系统级别事务和/或普通事务。
然后,在步骤S412处,在全网共识节点收到提案区块后,分别在本地对于这个提案区块进行验证,如果验证通过,则发出一个同意该提案区块的投票,并广播给全网,并且等待所有其他节点的投票;如果验证不通过,则不发出任何广播,如图5中的准备阶段所示。
具体而言,各个节点逐笔校验事务时,首先检测事务头,如果是普通事务,则使用智能合约运行;如果是特殊系统事务头,那么进入一个系统处理逻辑。
另外,在上述验证区块时,与步骤S404处一样,各个节点对请求的验证条件可以包括:(1)更改共识节点的数量是否小于等于全网节点数的(N-1)/3(N为系统总节点数);以及(2)改动过后的节点数是否小于PBFT算法要求的最小节点数,即4个节点。
在这一阶段只需要有大于2f+1(f为失效和/或作恶节点数)个节点,即大于全网三分之二的共识节点同意,即可通过这个提案区块。如图5所示,正常的共识节点1和2都验证通过了这个提案区块,广播了同意投票消息。虽然图5没有示出,其实提案节点0也验证通过了这个提案区块,并广播了同意投票消息。提案节点0的同意投票消息可以在广播提案区块时一起广播了,或者收到提案区块的各共识节点默认提案节点0已验证通过了提案区块并发出了同意投票消息。图 5中的共识节点3为作恶节点,对于提案区块没有任何响应。但是全网已有超出2/3的节点,即3个节点同意投票,这个提案区块就已通过,共识操作可进入下一阶段,即提交阶段。然后,处理进行到步骤 S414,即进入图5所示的提交阶段。
根据本发明的一个实施例,如果存在作恶节点,则作恶节点必然会不同意踢除自己的提案,但是该不同意投票将不会影响其他正常节点的投票,也不会影响结果。
如果步骤S412处的验证不通过,那么各个节点会在自己的优先事务队列中删除这个系统级别事务,以免后续自己成为提案节点时,重复打包这个事务。并且处理进行到步骤S422,返回消息,表示本次更改请求失败。
在步骤S414处,当如前所述全网共识节点在一定时间内收集齐全网超过三分之二数量共识节点的同意投票消息时,向全网广播一个提交消息以表示本节点已收到三分之二以上数量节点的同意投票消息,并且等待其他节点的提交消息,如图5中的提交阶段所示。如果共识节点在一定时间内收集到超过全网三分之二共识节点的提交消息,则表示已达成共识,各共识节点分别将提案区块加入本地区块链账本中成为新区块。在完成了上述阶段后,可以认为全网各个节点进行了一轮共识。随后,处理进行到步骤S416。
在步骤S416处,共识节点执行生成的新区块中包含的事务。根据该新区块中的更改请求,共识节点可以进行以下处理:(1)在内存中更新自己的共识节点集合列表;以及(2)生成一个本地文件记录更新过后的共识节点集合列表。
在执行后,各个节点将会去自己的优先事务队列中比对删除已经执行过的事务,以免在后续处理中,当自己成为提案节点时重复打包这个已经执行过的事务。
在更新列表的同时,可以视为进行了共识节点集合的切换(即从原来的共识节点集合切换到加入新的共识节点或剔除了作恶的共识节点以后的新的共识节点集合)。在某一轮(例如,第x轮)共识的执行阶段,区块进行共识完成后,全网的节点都会执行该区块中的系统事务来改变本地的共识节点集合列表,从而改变共识节点集合。下一轮x+1轮共识开始后,所有节点都会以最新的共识节点集合列表作为共识节点集合来进行共识。在一些优选实施方式中,如果在第x轮共识踢除一个老的共识节点,则该老的共识节点会执行完第x轮共识的所有操作;而当收到第x+1轮共识的消息时,该老的共识节点会将自己作为一个非共识节点来处理第x+1轮的共识消息,只记录不投票。而如果一个新加入的共识节点在x轮共识中加入共识网络,则第x轮共识它会把自己作为一个非共识节点处理消息;而在进入第x+1轮共识时,该新加入的共识节点会将自己作为一个共识节点开始运行(即,不仅接收记录x+1轮的信息,并且会对x+1轮的信息进行收集、签名和投票)。
然后,处理进行到步骤S418。
在步骤S418处,使用新的共识节点集合开始下一轮共识。在选取提案节点时,将使用最新的节点列表来计算提案节点。并且在后续进行投票以及认证其他共识节点投票时,均使用更新过后的节点集合列表。换而言之,从更新节点的系统事务后的下一个区块开始,全网的节点都采用更新过后的共识节点列表。
另外,应当注意到,存在作恶节点拒不承认更新过后的共识节点列表的情况。在这种情况下该作恶节点和正常主干网络中的节点计算出的提案节点是不同的,因此其他节点不会接收来自该作恶节点的投票并且将会屏蔽该作恶节点的共识信息。
下面将参考图6对区块链网络的启动过程以及利用图3和图4 中所示的动态更改共识节点的方法新增共识节点的过程分别进行描述。应当理解,尽管用图6一个图描述了启动网络和新增节点两个过程,但是并不意味着本发明的方法一定要同时包含这两个过程,其实在正常启动之后,可以根据本发明的方法任意动态地增加或减少共识节点,也可以进行如后面将描述的图7中的删除作恶节点的过程。采用图6只是为了方便描述,而不应理解为限制本发明。
图6是示出了根据一个示例性实施例的启动区块链网络以及新增共识节点的过程600的示例性流程图。如图6所示,该过程600可以包括初始化节点步骤S602、启动区块链网络步骤S604、正常的共识操作步骤S606、新增节点步骤S608、将新增节点动态地更改为共识节点步骤S610以及下一轮共识步骤S612。
在初始化节点步骤S602中,可以对区块链网络的初始节点进行初始化操作,以使初始节点在本地保存初始化配置文件。该初始化配置文件可以对于所有节点都是相同的并且可以记录系统管理员的公钥、种子节点的IP地址和端口、包含所有初始共识节点的IP地址和端口的初始的共识节点集合列表、以及节点公钥。应当注意,初始共识节点的总数量必须大于或等于4个。
根据Miguel Castro和Barbara Liskov提出的PBFT机制,如下所述,PBFT算法的弹性达到最优:当存在f个失效/作恶节点时,必须保证全部节点的数量N至少为3f+1个,才能在异步系统中保证安全性和活性。因为在与N-f个节点进行通讯后,系统必须做出正确判断,而其中f个节点有可能由于失效而不发回响应,所以为了保证系统的正常运作,这么多数量的节点是必需的。但是,还有可能存在 f个没有失效的节点不发回响应(诸如由于网络延迟等原因),因此存在另外的f个节点发回有可能是失效的响应。在这种情况下,系统仍旧需要足够数量的非失效节点的响应,并且这些非失效节点的响应数量必须超过失效节点的响应数量,即N-2f>f,因此得到N>3f。
所以N必须大于等于3f+1个节点,同理f要小于等于(N-1)/3个节点。其中f为失效/作恶节点的个数,N是总节点个数。
因此在初始状态以及后续变更共识节点后,期望区块链网络中的总共识节点个数不少于4个。
此外,传统的共识算法一般不记录共识节点的信息,因此在进行共识操作时安全性相对较低。而根据初始化节点步骤S602的上述操作,共识节点的所有信息均可以被记录在初始化配置文件中,而且后续验证签名可以以节点的公钥进行验证,从而在进行共识操作时安全性较高。
然后,在启动区块链网络步骤S604中,首先启动初始节点中的种子节点,再启动初始节点中的非种子节点,以使得所述非种子节点连接所述种子节点推荐的节点,其中该推荐的节点为当前区块链网络中已连接的节点中的连接数最少的节点。
在一些优选实施方式中,在启动区块链网络步骤S604中,可以执行以下步骤:
(1)首先启动种子节点。种子节点之间会互相连接/通信,形成一个节点两两之间互连的网络拓扑结构。一般种子节点的数量视网络情况大小而定,初始可以为2台种子节点,后续每增加20到30个节点,可再增加一个种子节点。由于种子节点一般网络流量较大,而共识节点对于资源要求较多,所以一般使用非共识节点作为种子节点;
(2)然后,节点可以事先在线下请求系统管理员使用系统管理员私钥对自己的公钥进行签名。在入网时与其他节点进行连接握手时,各个节点需要提供这个签名,以验证自己的身份;
(3)最后,启动网络中的其他节点。共识节点和非共识节点的启动原则上没有顺序区别,但是实际生产中可以优先启动共识节点,以保证优先组成共识网络。在各个节点启动时,节点将连接种子节点,并且从种子节点处获取当前网络中的节点数和节点之间的连接数。种子节点可以将已经连接的节点按照这些节点的连接数从少到多进行排序,并根据排序结果将已有连接数最少的一个或更多个节点优先推荐给后续加入的节点。该功能也可以被称为p2p平衡网络功能。
在传统区块链网络中,由于所有节点均连接种子节点,因此会使得种子节点的流量太大。根据本发明的实施例的p2p平衡网络功能,通过种子节点的优先推荐,使得新连接的节点达到一定的平衡,从而可以实现平衡整个网络的流量负载的效果。
此外,在一些优选实施方式中,基于联盟链中的特殊情况,可能存在人工规划好的速度较快的专线等,因此可以在网络启动的配置文件中将p2p平衡网络功能设置为关闭,且将每个节点所连接的节点IP 地址设置为固定地址,从而使得区块链网络按照人工设定的网络结构组网。上述功能特别适用于人为规划好网络线路的联盟链情况。
区块链网络启动后就能进行正常的共识操作,即处理进行到步骤 S606。在正常的共识操作步骤S606中,可以进行如前所述的基于 PBFT的共识操作,即:(1)所有共识节点根据一个统一公式从当前共识节点中选出一个提案节点;(2)由选出的提案节点根据当前的队列和事务提出提案区块并将该提案区块广播给所有共识节点;(3) 由所有共识节点对该提案区块中的各事务进行验证;(4)各共识节点在验证通过的情况下,向所有共识节点广播同意投票消息,并且等待其他共识节点的同意投票消息;(5)各共识节点在预定时间内收到了超过三分之二数量的共识节点发出的同意投票消息的情况下,向所有共识节点广播提交消息,并且等待其他节点的提交消息;(6) 各共识节点在预定时间内收到了超过三分之二数量的共识节点发出的提交消息的情况下,将该提案区块加入本地区块链账本中成为新区块。可以参照例如前述图3-图5的相关内容进一步理解该共识操作步骤。
在区块链网络正常运行中,随着联盟链的变化,会出现新增共识节点的需求,因此可以进入新增节点步骤S608。在新增节点步骤S608 中,可以采用与初始化节点步骤S602中类似的操作来对要加入的新节点进行初始化操作。然后启动新节点以使新节点成为区块链网络中的一个非共识节点,并且从其它节点同步区块并执行过去的所有事务,直到跟上当前区块链网络中的区块高度。该新节点根据过去的所有更改请求来依次更新所述共识节点集合列表,从而获得最新的共识节点集合列表。
具体地,新加入的节点可以成为一个非共识节点。在加入网络后,新加入的节点的共识节点列表是最初始的节点列表。然后,新加入节点可以从其他节点同步区块并且执行相同的事务;并且新加入的节点可以在本地账本中验证事务是否正确,以及来自其他节点的区块是否正确。新加入的节点会如实的执行系统事务,并且相应更新其本地的节点列表。应当注意到,新加入的节点的同步速度可能比共识的速度更快,这是因为同步处理只需要信息传输和执行,而共识处理则需要等待全网一致的算法的结果。当新加入的节点追上全网的区块高度时,它的节点列表将会是与全网中的其他节点一致的最新的共识节点列表。
应当理解,在传统的采用了PBFT算法的区块链网络中,新加入的节点既无法获取可信的最新共识节点列表,从其他节点获取最新共识节点列表又未必是可信的。而采用根据本发明实施例的新增节点步骤S608中的操作,通过将共识节点的变动记录在区块中的方式来使得新加入的节点最终可以获取可信的当前共识节点列表。
然后,处理进行到步骤S610,将新增节点动态地更改为共识节点。可以采用上文中参考图3-图5所述的根据本发明实施例的方法来动态更改共识节点,在此不再赘述。
然后,处理进行到下一轮共识步骤S612。在下一轮共识步骤S612 中进行的各个操作可以参考如上文中参考图4所述的步骤S418的相应的具体操作,在此不再赘述。
下面将参考图7对主动删除区块链网络中的作恶共识节点的过程进行描述。
图7是示出了根据本发明一个示例性实施例的删除作恶节点的过程700的示例性流程图。删除作恶节点的过程700包括发现作恶节点的步骤S702、发起更改请求以要求删除该作恶节点的步骤S704、达成共识的步骤S706、更改列表的步骤S708以及下一轮共识步骤S710。
在步骤S702,系统管理员或任一共识节点可以根据各共识节点在共识操作历史中的表现而确定存在一个或更多个作恶的共识节点。在一些实施方式中,上述作恶共识节点也可能是失效节点。在一些优选实施方式中,该作恶共识节点的表现可以是在较长的一段时间中都没有任何响应,或者产生的各项消息与大部分共识节点的不一致。在另一些优选实施方式中,该作恶共识节点的表现可以是在预定时间 (例如1天)内总是针对某项事务或区块(例如,针对自身机构的划款操作等)明确表示反对意见。
系统管理员可以自己发现作恶共识节点,或者由其他共识节点在发现作恶共识节点后向系统管理员报告,系统管理员核实之后可以发起更改请求,从而要求删除该作恶节点,如步骤S704所示。该步骤 S704可以采用与前述图3的步骤S302和S304或图4的步骤S402-S408 类似的操作来完成,在此不再赘述。过程随后进入下一轮共识操作,即步骤S706。
在步骤S706中,可以采用与上述图3的更改请求共识步骤S306 或图4的步骤S410-S414类似的操作来达成共识,在此不再赘述。随后,进入步骤S708来更改共识节点集合列表。
在步骤S708中,可以采用与上述图3的更改列表步骤S306或图 4的步骤S416类似的操作来更改共识节点集合列表。随后进行下一轮共识。
在下一轮共识步骤S710中进行的各个操作可以参考如上文中参考图4的步骤S418所述的相应的具体操作。具体地,使用删除了作恶节点的新的共识节点集合开始下一轮共识。在选取提案节点时,将使用最新的共识节点列表来计算提案节点。并且在后续进行投票以及认证其他共识节点投票时,均使用删除了作恶节点的节点集合列表。换而言之,从更新节点的系统事务后的下一个区块开始,全网的节点都采用删除了作恶节点的共识节点列表。
如前文所述的,有可能存在作恶节点拒不承认更新过后的共识节点列表的情况。在这种情况下,在更改列表步骤S708后的下一轮共识步骤中,该作恶节点和正常主干网络中的节点计算出的提案节点是不同的,因此其他节点不会接受来自该作恶节点的投票并且将会忽略该作恶节点的共识信息。
在传统拜占庭容错算法中,由于无法改变节点集合,因此虽然作恶节点无法作恶,但是作恶节点的存在仍然会拖慢主干网络的速度。而通过采用根据本发明实施例的上述删除作恶节点的方法700,可以使得作恶节点一经发现即被删除。如果该作恶节点强行不接受节点集合的改变,则作恶节点的每次计算的信息都与主干网络中其他共识节点的计算信息不一致。基于该不一致的信息,该作恶节点仍然被主干网络抛弃。因此大大提高了整个系统的效率。
图8是示出了根据本发明一个示例性实施例的用于在区块链网络的PBFT共识机制中动态更改共识节点的装置1000的基本配置的框图。如图8所示,该动态更改共识节点的装置1000包括:发起更改请求部件1002、验证更改请求部件1004、更改请求共识部件1006 和更改列表部件1008。本领域技术人员应当理解,动态更改共识节点的装置1000所包含的部件可以不限于上述部件1002-1008,而是可以包括用于实现根据本发明实施例的前述方法的其他步骤的部件。装置 1000的各个部件可以由硬件、软件、固件或其任意组合来实现。另外,本领域技术人员也应当理解,装置1000的各个部件可以根据需要被组合或分割成子部件。
具体而言,发起更改请求部件1002被配置为使得系统管理员向任意一个共识节点发起一个更改请求作为系统级别事务,并使用系统管理员的私钥对该更改请求进行签名。该更改请求可以为增加或删除一个或更多个共识节点的请求。
验证更改请求部件1004被配置为使得任意一个共识节点对接收到的更改请求进行验证,在验证通过的情况下,为该更改请求添加特殊系统事务头,并将具有特殊系统事务头的更改请求向所有共识节点广播。而且验证更改请求部件1004被配置为使得各共识节点将具有特殊系统事务头的该更改请求放入优先事务队列。
更改请求共识部件1006被配置为使得各共识节点进行新一轮的基于PBFT的共识操作。在该共识操作中,由选出的提案节点优先打包所述优先事务队列中的事务,从而提出包含更改请求的提案区块并将该提案区块广播给所有共识节点,由所有共识节点对该提案区块中的各事务进行验证。共识节点对各事务进行验证时先检验事务的事务头,在检验到该更改请求的特殊系统事务头的情况下进入预先定义的固定的系统事务操作逻辑而不是智能合约进行验证。在优先事务队列中存在多于一个更改请求的情况下,提案节点仅将时间最早的一个更改请求打包到提案区块中。
更改列表部件1008被配置为在基于PBFT的共识操作对该提案区块达成共识后使得区块链网络中的各节点执行该更改请求,从而根据该更改请求来更新共识节点集合列表。更新后的共识节点集合列表被存储在节点的本地文件中。
装置1000的上述各个部件不限于上述的各个功能,而是可以实现如前所述的根据本发明实施例的各种方法的相应步骤的功能。
图9示出了可以实现根据本发明的实施例的计算设备2000的示例性配置。计算设备2000是可以应用本发明的上述方面的硬件设备的实例。计算设备2000可以是被配置为执行处理和/或计算的任何机器。计算设备2000可以是但不限制于工作站、服务器、台式计算机、膝上型计算机、平板计算机、个人数据助手(PDA)、智能电话、车载计算机或以上组合。前述系统管理员、共识节点、非共识节点或用于在区块链网络的PBFT共识机制中动态更改共识节点的装置1000 等均可以全部或至少部分地由上述计算设备2000或与其相似的设备或系统实现。
如图9所示,计算设备2000可以包括可能经由一个或多个接口与总线2002连接或通信的一个或多个元件。例如,计算设备2000可以包括总线2002、一个或多个处理器2004、一个或多个输入设备2006 以及一个或多个输出设备2008。总线2002可以包括但不限于,工业标准架构(Industry Standard Architecture,ISA)总线、微通道架构 (Micro ChannelArchitecture,MCA)总线、增强ISA(EISA)总线、视频电子标准协会(VESA)局部总线、以及外设组件互连(PCI)总线等。一个或多个处理器 2004可以是任何种类的处理器,并且可以包括但不限于一个或多个通用处理器或专用处理器(诸如专用处理芯片)。输入设备2006可以是能够向计算设备输入信息的任何类型的输入设备,并且可以包括但不限于鼠标、键盘、触摸屏、麦克风和 /或远程控制器。输出设备2008可以是能够呈现信息的任何类型的设备,并且可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器和/或打印机。计算设备2000还可以包括或被连接至非暂态存储设备2010,该非暂态存储设备2010可以是任何非暂态的并且可以实现数据存储的存储设备,并且可以包括但不限于盘驱动器、光存储设备、固态存储器、软盘、柔性盘、硬盘、磁带或任何其他磁性介质、压缩盘或任何其他光学介质、ROM(只读存储器)、RAM(随机存取存储器)、缓存存储器和/或任何其他存储芯片或模块、和/或计算机可以从其中读取数据、指令和/或代码的其他任何介质。非暂态存储设备2010可以与任何接口可拆卸地连接。非暂态存储设备2010可以具有存储于其上的、用于实现前述在区块链网络的PBFT共识机制中动态更改共识节点的方法和/或步骤的数据/指令/代码。计算设备2000 还可以包括通信设备2012,该通信设备2012可以是能够启用与外部装置和/或网络通信的任何种类的设备或系统,并且可以包括但不限于调制解调器、网络卡、红外线通信设备、无线通信设备和/或芯片集(诸如蓝牙TM设备、1302.11设备、WiFi设备、WiMax设备、蜂窝通信设施等)。
计算设备2000还可以包括工作存储器2014。该工作存储器2014 可以是能够存储对于处理器2004有用的指令和/或数据的任何类型的工作存储器,并且可以包括但不限于随机存取存储器(RAM)和只读存储器(ROM)。
位于上述工作存储器上的软件元件可以包括但不限于操作系统 2016、一个或多个应用程序2018、驱动器和/或其他数据和代码。上述一个或多个应用程序2018可以包括用于执行如上所述的在区块链网络的PBFT共识机制中动态更改共识节点的各方法及各步骤的指令。可以通过读取和执行一个或多个应用程序2018的处理器实现前述用于在区块链网络的PBFT共识机制中动态更改共识节点的设备/ 装置1000的部件/单元/元件。更具体地,例如,前述装置1000中的发起更改请求部件1002可以由处理器2004在执行具有用于执行图3 的步骤S302的指令的应用程序2018时实现。此外,例如,前述装置 1000中的验证更改请求部件1004可以由处理器2004在执行具有用于执行步骤S304的指令的应用程序2018时实现。此外,例如,前述装置1000中的更改请求共识部件1006可以由处理器2004在执行具有用于执行步骤S306的指令的应用程序2018时实现。此外,例如,前述装置1000中的更改列表部件1008可以由处理器2004在执行具有用于执行步骤S308的指令的应用程序2018时实现。前述装置1000 中的其它各个部件也可以用类似的方式实现。软件元件的指令的可执行代码或源代码可以存储在非暂态计算机可读存储介质(诸如如上所述的存储设备2010)中,并且可以通过编译和/或安装读入工作存储器2014中。还可以从远程位置下载软件元件的指令的可执行代码或源代码。
应当理解,可以根据特定要求进行变型。例如,可以使用定制的硬件和/或特定元件可以以硬件、软件、固件、中间件、微代码、硬件描述语言或其任何组合的方式实现。此外,可以采用与其他计算设备 (诸如网络输入/输出设备)的连接。例如,本发明的方法和设备中的一些或全部可以根据本发明通过使用汇编语言编程硬件(例如,包括现场可编程门阵列(FPGA)和/或可编程逻辑阵列(PLA)的可编程逻辑电路)或逻辑和算法的硬件编程语言(例如VERILOG,VHDL, C++)来实现。
应当进一步理解,计算设备2000的元件可以分布在整个网络上。例如,可以在使用一个处理器执行一些处理的同时,使用其他远程处理器执行其他处理。计算设备 2000的其他元件也可以类似地分布。因此,计算设备2000可以被理解为在多个地点执行处理的分布式计算系统。
可以通过许多方式来实施本发明的方法和设备。例如,可以通过软件、硬件、固件、或其任何组合来实施本发明的方法和设备。上述的方法步骤的次序仅是说明性的,本发明的方法步骤不限于以上具体描述的次序,除非以其它方式明确说明。此外,在一些实施例中,本发明还可以被实施为记录在记录介质中的程序,其包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于实现根据本发明的方法的程序的记录介质。
虽然已通过示例详细展示了本发明的一些具体实施例,但是本领域技术人员应当理解,上述示例仅意图是说明性的而不限制本发明的范围。本领域技术人员应该理解,上述实施例可以在不脱离本发明的范围和实质的情况下被修改。本发明的范围是通过所附的权利要求限定的。

Claims (14)

1.一种在区块链网络的实用拜占庭容错(PBFT)的共识机制中动态更改共识节点的方法,其特征在于包括:
发起更改请求步骤,在所述发起更改请求步骤中,由系统管理员向任意一个共识节点发起一个更改请求作为系统级别事务,并且使用所述系统管理员的私钥对所述更改请求进行签名,其中所述更改请求为增加或删除一个或更多个共识节点的请求;
验证更改请求步骤,在所述验证更改请求步骤中,所述任意一个共识节点对接收到的所述更改请求进行验证,在验证通过的情况下,为所述更改请求添加特殊系统事务头,并将具有特殊系统事务头的该更改请求向所有共识节点广播,各共识节点将具有特殊系统事务头的该更改请求放入优先事务队列;
更改请求共识步骤,在所述更改请求共识步骤中,进行新一轮的基于PBFT的共识操作,在该共识操作中,由选出的提案节点优先打包所述优先事务队列中的事务,从而提出包含所述更改请求的提案区块并将所述提案区块广播给所有共识节点,由所有共识节点对所述提案区块中的各事务进行验证,其中共识节点对各事务进行验证时先检验事务的事务头,在检验到所述更改请求的特殊系统事务头的情况下进入预先定义的固定的系统事务操作逻辑而不是智能合约进行验证,并且其中在所述优先事务队列中存在多于一个更改请求的情况下,所述提案节点仅将时间最早的一个更改请求打包到所述提案区块中;
更改列表步骤,在所述更改列表步骤中,在所述更改请求共识步骤中对所述提案区块达成共识后,所述区块链网络中的各节点执行所述更改请求,从而根据所述更改请求来更新共识节点集合列表,其中更新后的共识节点集合列表被存储在节点的本地文件中。
2.根据权利要求1所述的方法,还包括初始化节点步骤,在所述初始化节点步骤中,对所述区块链网络的初始节点或者要加入的新节点进行初始化操作,以使所述初始节点或新节点在本地保存初始化配置文件,其中所述初始化配置文件对于所有节点都是相同的并且记录所述系统管理员的公钥、种子节点的IP地址和端口、包含所有初始共识节点的IP地址和端口的初始的共识节点集合列表、以及节点公钥,初始共识节点的总数量大于等于4个。
3.根据权利要求2所述的方法,在对初始节点进行初始化操作之后还包括启动区块链网络步骤,在所述启动区块链网络步骤中,首先启动初始节点中的种子节点,再启动初始节点中的非种子节点,以使得所述非种子节点连接所述种子节点推荐的节点,其中该推荐的节点为当前区块链网络中已连接的节点中的连接数最少的节点。
4.根据权利要求2所述的方法,在对新节点进行初始化操作之后还包括新增节点步骤,在所述新增节点步骤中,启动所述新节点以使所述新节点成为所述区块链网络中的一个非共识节点,并且从其它节点同步区块并执行过去的所有事务,直到跟上当前区块链网络中的区块高度,其中所述新节点根据过去的所有更改请求来依次更新所述共识节点集合列表,从而获得最新的共识节点集合列表。
5.根据权利要求1所述的方法,在所述更改列表步骤之后还包括下一轮共识步骤,在所述下一轮共识步骤中,使用更新后的共识节点集合列表来选择提案节点,并由更新后的共识节点集合列表中的共识节点进行投票。
6.根据权利要求1所述的方法,其中在所述验证更改请求步骤和所述更改请求共识步骤中,共识节点对所述更改请求进行验证的操作均包括验证所述更改请求的签名是否是系统管理员的签名以及判定所述更改请求是否符合共识节点更改条件,所述共识节点更改条件包含:请求更改的共识节点的数量小于等于(N-1)/3以及更改后的共识节点的总数量大于等于4,其中N为当前共识节点的总数量。
7.根据权利要求1所述的方法,其中在所述更改请求共识步骤中,所述提案节点在检测到所述优先事务队列中存在事务的情况下,仅把所述优先事务队列中的一个事务打包到所述提案区块中。
8.根据权利要求1所述的方法,其中所述验证更改请求步骤还包括:在对所述更改请求验证通过的情况下还为该更改请求附上所述任意一个共识节点的签名,各共识节点在对所述任意一个共识节点的签名验证通过的情况下才将该更改请求放入优先事务队列。
9.根据权利要求1所述的方法,其中所述基于PBFT的共识操作包括:
所有共识节点根据一个统一公式从当前共识节点中选出一个提案节点,
由选出的提案节点提出包含所述更改请求的提案区块并将所述提案区块广播给所有共识节点,
由所有共识节点对所述提案区块中的各事务进行验证,
各共识节点在验证通过的情况下,向所有共识节点广播同意投票消息,并且等待其他共识节点的同意投票消息,
各共识节点在预定时间内收到了超过三分之二数量的共识节点发出的同意投票消息的情况下,向所有共识节点广播提交消息,并且等待其他节点的提交消息,
各共识节点在预定时间内收到了超过三分之二数量的共识节点发出的提交消息的情况下,将所述提案区块加入本地区块链账本中成为新区块。
10.根据权利要求1所述的方法,在所述发起更改请求步骤之前还包括发现作恶的共识节点的步骤,在该步骤中由所述系统管理员或任一共识节点根据各共识节点在共识操作历史中的表现而确定存在一个或更多个作恶的共识节点,并且在所述发起更改请求步骤中发起的所述更改请求为删除所发现的一个或更多个作恶的共识节点的请求。
11.一种能够在实用拜占庭容错(PBFT)的共识机制中动态更改共识节点的区块链网络系统,所述区块链网络系统至少包括系统管理员和多个共识节点,
其特征在于:
所述系统管理员向任意一个共识节点发起一个更改请求作为系统级别事务,并且使用所述系统管理员的私钥对所述更改请求进行签名,其中所述更改请求为增加或删除一个或更多个共识节点的请求;
所述任意一个共识节点对接收到的所述更改请求进行验证,在验证通过的情况下,为所述更改请求添加特殊系统事务头,并将具有特殊系统事务头的该更改请求向所有共识节点广播,各共识节点将具有特殊系统事务头的该更改请求放入优先事务队列;
各共识节点进行新一轮的基于PBFT的共识操作,在该共识操作中,由选出的提案节点优先打包所述优先事务队列中的事务,从而提出包含所述更改请求的提案区块并将所述提案区块广播给所有共识节点,所有共识节点对所述提案区块中的各事务进行验证,其中共识节点对各事务进行验证时先检验事务的事务头,在检验到所述更改请求的特殊系统事务头的情况下进入预先定义的固定的系统事务操作逻辑而不是智能合约进行验证,并且其中在所述优先事务队列中存在多于一个更改请求的情况下,所述提案节点仅将时间最早的一个更改请求打包到所述提案区块中;
在基于PBFT的共识操作对所述提案区块达成共识后,所述区块链网络系统中的各节点执行所述更改请求,从而根据所述更改请求来更新共识节点集合列表,其中更新后的共识节点集合列表被存储在节点的本地文件中。
12.一种用于在区块链网络的实用拜占庭容错(PBFT)的共识机制中动态更改共识节点的装置,其特征在于包括:
用于发起更改请求的发起更改请求部件,所述发起更改请求部件使得系统管理员向任意一个共识节点发起一个更改请求作为系统级别事务,并使用所述系统管理员的私钥对所述更改请求进行签名,其中所述更改请求为增加或删除一个或更多个共识节点的请求;
用于验证更改请求的验证更改请求部件,所述验证更改请求部件使得所述任意一个共识节点对接收到的所述更改请求进行验证,在验证通过的情况下,为所述更改请求添加特殊系统事务头,并将具有特殊系统事务头的该更改请求向所有共识节点广播,并且所述验证更改请求部件使得各共识节点将具有特殊系统事务头的该更改请求放入优先事务队列;
用于对所述更改请求进行共识的更改请求共识部件,所述更改请求共识部件使得各共识节点进行新一轮的基于PBFT的共识操作,在该共识操作中由选出的提案节点优先打包所述优先事务队列中的事务,从而提出包含所述更改请求的提案区块并将所述提案区块广播给所有共识节点,由所有共识节点对所述提案区块中的各事务进行验证,其中共识节点对各事务进行验证时先检验事务的事务头,在检验到所述更改请求的特殊系统事务头的情况下进入预先定义的固定的系统事务操作逻辑而不是智能合约进行验证,并且其中在所述优先事务队列中存在多于一个更改请求的情况下,所述提案节点仅将时间最早的一个更改请求打包到所述提案区块中;
用于更改共识节点集合列表的更改列表部件,所述更改列表部件在基于PBFT的共识操作对所述提案区块达成共识后使得区块链网络中的各节点执行所述更改请求,从而根据所述更改请求来更新共识节点集合列表,其中更新后的共识节点集合列表被存储在节点的本地文件中。
13.一种用于在区块链网络的实用拜占庭容错(PBFT)的共识机制中动态更改共识节点的系统,其特征在于包括:
一个或更多个处理器;以及
一个或更多个存储器,被配置为存储一系列计算机可执行指令,
其中所述一系列计算机可执行指令在由所述一个或更多个处理器运行时使得所述一个或更多个处理器执行根据权利要求1-10中的任意一个所述的方法。
14.一种非暂态的计算机可读介质,其上存储有计算机可执行指令,所述计算机可执行指令在由一个或更多个处理器运行时使得所述一个或更多个处理器执行根据权利要求1-10中的任意一个所述的方法。
CN201710761858.3A 2017-08-30 2017-08-30 实用拜占庭容错共识机制中动态更改共识节点的方法 Active CN107579848B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710761858.3A CN107579848B (zh) 2017-08-30 2017-08-30 实用拜占庭容错共识机制中动态更改共识节点的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710761858.3A CN107579848B (zh) 2017-08-30 2017-08-30 实用拜占庭容错共识机制中动态更改共识节点的方法

Publications (2)

Publication Number Publication Date
CN107579848A CN107579848A (zh) 2018-01-12
CN107579848B true CN107579848B (zh) 2020-08-25

Family

ID=61029754

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710761858.3A Active CN107579848B (zh) 2017-08-30 2017-08-30 实用拜占庭容错共识机制中动态更改共识节点的方法

Country Status (1)

Country Link
CN (1) CN107579848B (zh)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110071898B (zh) * 2018-01-22 2021-06-04 本无链科技(深圳)有限公司 一种去中心检测节点合法性的方法
CN108365993B (zh) * 2018-03-09 2020-04-28 深圳前海微众银行股份有限公司 区块链节点动态变更方法、系统和计算机可读存储介质
CN108377206B (zh) * 2018-03-12 2021-04-06 众安信息技术服务有限公司 用于配置共识算法的方法、装置及计算机可读存储介质
CN108801272A (zh) * 2018-03-28 2018-11-13 努比亚技术有限公司 一种路况更新方法、区块链装置及计算机可读存储介质
CN108712276A (zh) * 2018-04-19 2018-10-26 上海分布信息科技有限公司 基于区块链技术的共识网络管理方法、装置、设备及存储介质
EP3565218A1 (en) 2018-04-30 2019-11-06 Hewlett Packard Enterprise Development L.P. System and method of decentralized management of multi-owner nodes using blockchain
EP3564883A1 (en) * 2018-04-30 2019-11-06 Hewlett-Packard Enterprise Development LP System and method of decentralized management of device assets outside a computer network
CN108616596B (zh) * 2018-05-09 2020-12-25 南京邮电大学 基于动态授权和网络环境感知的区块链自适应共识方法
US10579424B2 (en) * 2018-05-15 2020-03-03 International Business Machines Corporation Prioritization in a permissioned blockchain
CN108769163B (zh) * 2018-05-16 2020-11-24 深圳前海微众银行股份有限公司 联盟链共识达成方法、设备及计算机可读存储介质
CN109002297B (zh) * 2018-07-16 2020-08-11 百度在线网络技术(北京)有限公司 共识机制的部署方法、装置、设备和存储介质
CN110784331A (zh) * 2018-07-30 2020-02-11 华为技术有限公司 一种共识流程恢复方法及相关节点
CN109120437B (zh) * 2018-08-01 2021-06-15 上海幼鸢网络科技有限公司 基于dabft共识机制的人工智能区块云生态系统
CN109039748A (zh) * 2018-08-10 2018-12-18 上交所技术有限责任公司 一种pbft协议动态增删节点的方法
CN109246194B (zh) * 2018-08-13 2021-06-08 佛山市顺德区中山大学研究院 基于多领导节点的实用拜占庭容错区块链共识方法及系统
CN108985100A (zh) * 2018-08-15 2018-12-11 百度在线网络技术(北京)有限公司 基于区块链的元素安全性证明方法、装置、设备和介质
CN108964926B (zh) * 2018-08-28 2021-02-02 成都信息工程大学 一种用户信任协商建立方法、用户行为数据存储方法及介质
CN109034813B (zh) * 2018-09-07 2020-04-21 腾讯科技(深圳)有限公司 代表节点设备选举方法、装置、计算机设备及存储介质
CN109347804B (zh) * 2018-09-19 2020-02-07 电子科技大学 一种用于区块链的拜占庭容错共识优化方法
CN109067553B (zh) * 2018-10-17 2021-06-25 杭州趣链科技有限公司 一种基于智能合约的区块链分布式证书的管理方法
SG11201903581WA (en) 2018-11-07 2019-05-30 Alibaba Group Holding Ltd Facilitating practical byzantine fault tolerance blockchain consensus and node synchronization
CN109451039B (zh) * 2018-12-07 2021-06-04 上海分布信息科技有限公司 一种网络信息传输处理方法
CN109587263A (zh) * 2018-12-20 2019-04-05 众安信息技术服务有限公司 一种区块同步方法及系统
CN109729092A (zh) * 2019-01-09 2019-05-07 山东浪潮质量链科技有限公司 一种业务平台准入的方法和装置
CN111478785A (zh) * 2019-01-24 2020-07-31 北京京东尚科信息技术有限公司 区块链网络中的共识方法、节点及存储介质
KR102170347B1 (ko) 2019-03-18 2020-10-28 알리바바 그룹 홀딩 리미티드 뷰 변경 프로토콜을 종료하기 위한 시스템 및 방법
KR102170345B1 (ko) * 2019-03-18 2020-10-28 알리바바 그룹 홀딩 리미티드 뷰 변경 프로토콜을 종료하기 위한 시스템 및 방법
CN110289966A (zh) * 2019-06-19 2019-09-27 西南交通大学 基于拜占庭容错的抗自适应攻击联盟链共识方法
CN110443616B (zh) * 2019-06-28 2021-05-07 筑客网络技术(上海)有限公司 基于随机门限签名机制的拜占庭容错共识方法
CN110730204A (zh) * 2019-09-05 2020-01-24 阿里巴巴集团控股有限公司 区块链网络中删除节点的方法和区块链系统
CN111131399A (zh) * 2019-12-03 2020-05-08 北京海益同展信息科技有限公司 一种区块链中共识节点动态增加方法及装置
CN111431977A (zh) * 2020-03-17 2020-07-17 陈磊 区块链系统中作恶节点的处理方法及系统
CN111444210A (zh) * 2020-03-26 2020-07-24 腾讯科技(深圳)有限公司 区块链共识节点管理方法、装置、设备以及存储介质
CN111343208B (zh) * 2020-05-21 2020-08-14 腾讯科技(深圳)有限公司 基于区块链的数据检测方法、装置及计算机可读存储介质
CN111522683B (zh) * 2020-07-03 2020-10-02 支付宝(杭州)信息技术有限公司 蜜獾拜占庭容错共识机制的共识节点变更方法及相关装置
CN112398956B (zh) * 2021-01-20 2021-04-13 腾讯科技(深圳)有限公司 基于区块链的数据处理方法、装置、设备及可读存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160164884A1 (en) * 2014-12-05 2016-06-09 Skuchain, Inc. Cryptographic verification of provenance in a supply chain
CN106529951A (zh) * 2016-12-30 2017-03-22 杭州云象网络技术有限公司 一种联盟链网络下采用异步方式的节点共识验证方法
CN106878000B (zh) * 2017-03-06 2020-02-21 中钞信用卡产业发展有限公司杭州区块链技术研究院 一种联盟链共识方法及系统
CN107040594B (zh) * 2017-04-12 2020-04-10 山大地纬软件股份有限公司 基于pbft的许可区块链节点准入的方法及装置
CN107070938A (zh) * 2017-04-27 2017-08-18 电子科技大学 基于区块链的数据访问控制系统

Also Published As

Publication number Publication date
CN107579848A (zh) 2018-01-12

Similar Documents

Publication Publication Date Title
CN107579848B (zh) 实用拜占庭容错共识机制中动态更改共识节点的方法
WO2018076760A1 (zh) 基于区块链的交易事务处理方法、系统、电子装置及存储介质
TWI672648B (zh) 業務處理方法、裝置、資料共享系統及儲存介質
US9935835B2 (en) Methods, apparatuses, and computer program products for facilitating synchronization of setting configurations
TWI713855B (zh) 憑證管理方法及系統
WO2018112940A1 (zh) 区块链节点的业务执行方法、装置及节点设备
US20170075941A1 (en) Consensus system and method for adding data to a blockchain
EP3607697A1 (en) Digital certificate management method, apparatus, and system
US20210158347A1 (en) Blockchain-based node management methods and apparatuses
CN107396360B (zh) 区块验证方法及装置
US10601911B2 (en) Partitioning of a blockchain ledger
CN110569309A (zh) 用于实现区块链的设备、方法、系统以及介质
US10560261B1 (en) Systems and techniques for capture of trusted media data
WO2019144761A1 (zh) 一种数据同步方法和分布式系统、设备
US20190149550A1 (en) Securing permissioned blockchain network from pseudospoofing network attacks
CN108769230B (zh) 交易数据存储方法、装置、服务器及存储介质
CN110602108A (zh) 基于区块链网络的数据通信方法、装置、设备及存储介质
CN112685796B (zh) 一种基于区块链的区块共识方法以及相关设备
CN111597567A (zh) 数据处理方法、装置、节点设备及存储介质
CN110177124A (zh) 基于区块链的身份认证方法及相关设备
EP3726804A2 (en) Device authentication method, service access control method, device, and non-transitory computer-readable recording medium
CN111338608A (zh) 分布式应用开发方法、装置、节点设备及可读存储介质
CN112714158A (zh) 事务处理方法、中继网络、跨链网关、系统、介质和设备
CN110889040B (zh) 用于推送信息的方法和装置
CN112527912B (zh) 基于区块链网络的数据处理方法、装置及计算机设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information
CB02 Change of applicant information

Address after: 200120 T3, 1788, 1800 Century Avenue, free trade Experimental Zone, Pudong New Area, Shanghai

Applicant after: Shanghai insurance exchange, Limited by Share Ltd

Address before: 200120 Shanghai East Road Pudong New Area Financial Information Center 22

Applicant before: Shanghai insurance exchange, Limited by Share Ltd

GR01 Patent grant
GR01 Patent grant