具体实施方式
以下将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本公开内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。另外,相对一些示例所描述的特征在其他例子中也可以进行组合。
如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。
区块链是一种按照时间顺序来将数据区块顺序相连组合而成的链式数据结构,并且以密码学方式保证数据区块不可篡改和不可伪造。区块链包括一个或多个区块。区块链中的每个区块通过包括该区块链中紧接其之前的前一个区块的加密散列而链接到该前一个区块。每个区块还包括时间戳、该区块的加密哈希以及一个或多个交易(transaction)。对已经被区块链网络的节点验证的交易进行哈希处理并形成Merkle树。在Merkle树中,对叶节点处的数据进行哈希处理,并且针对Merkle树的每个分支,在该分支的根处级联该分支的所有哈希值。针对Merkle树执行上述处理,直到整个Merkle树的根节点。Merkle树的根节点存储代表该Merkle树中的所有数据的哈希值。当一个哈希值声称是Merkle树中存储的交易时,可以通过判断该哈希值是否与Merkle树的结构一致来进行快速验证。
区块链是用于存储交易的数据结构。区块链网络是用于管理、更新和维护一个或多个区块链结构的计算节点网络。如上所述,区块链网络可以包括公有区块链网络、私有区块链网络或联盟区块链网络。
在公有区块链网络中,共识过程由共识网络的节点控制。例如,在公有区块链网络中可以存在成千上万个实体协作处理,每个实体操作该公有区块链网络中的至少一个节点。因此,公有区块链网络可以被认为是参与实体的公有网络。在一些示例中,大多数实体(节点)必须按序对每个区块进行签名,并且将签名后的区块添加到区块链网络的区块链中。公有区块链网络的示例可以包括特定对等支付网络。
公有区块链网络支持公有交易。公有交易在公有区块链网络内的所有节点之间共享,并且存储在全局区块链中。全局区块链是指跨所有节点复制的区块链。为了达成共识(例如,同意向区块链添加区块),在公有区块链网络内实现共识协议。共识协议的示例包括但不限于:工作量证明(POW,proof-of-work),权益证明(POS,proof-of-stake)和权威证明(POA,proof-of-authority)。在本公开中,采用POW作为非限制性示例。
私有区块链网络被提供来用于特定实体。私有区块链网络中的各个节点的读写权限被严格控制。因此,私有区块链网络通常也称为许可网络,其对允许谁参与网络以及的网络参与水平(例如,仅在某些交易情形下)进行限制。在私有区块链网络中,可以使用各种类型的访问控制机制(例如,现有参与方对添加新实体进行投票,监管机构控制许可等)。
联盟区块链网络在参与实体之间是私有的。在联盟区块链网络中,共识过程由授权节点控制。例如,由若干个(例如,10个)实体(例如,金融机构,保险公司)组成的联盟可以操作联盟区块链网络,每个实体操作该联盟区块链网络中的至少一个节点。因此,联盟区块链网络可以被认为是参与实体的私有网络。在一些示例中,每个参与实体(节点)必须按序对每个区块进行签名,并将该区块添加到区块链。在一些示例中,可以由参与实体(节点)的子集(例如,至少7个实体)来对每个区块进行签名,并将该区块添加到区块链。
在本公开中参考联盟区块链网络来详细描述本公开的实施例。然而,可以预期,本公开的实施例可以在任何适合的区块链网络中实现。
区块链是防篡改的共享数字分类账,其在公有或私有对等网络中记录交易。分类帐被分发到网络中的所有成员节点,并且网络中发生的资产交易历史记录被永久记录在区块中。
共识机制确保分布式区块链网络中的所有网络节点按照相同的顺序执行交易,并且随后写入相同的分类账。共识模型旨在解决拜占庭问题。在拜占庭问题中,分布式区块链网络中的比如服务器或网络节点的组件可能会出现故障,或者故意向其他节点传播错误的信息。由于其他网络节点需要首先就哪个网络节点首先失败达成共识,从而其他网络节点很难将该组件声明失败并将其排除出区块链网络。
在分布式系统的上下文中,拜占庭容错(BFT)机制使得即使分布式系统的恶意组件出现故障或者向其他对等实体传播错误的信息,该分布式系统仍然能够正常工作并且达成足够的共识。然而,现有BFT机制在许多方面已被证明是低效的。例如,当试图解决拜占庭问题时,现有BFT机制增加了分布式区块链网络的实现复杂度,从而增加了分布式区块链网络的网络节点之间的通信延迟。实用拜占庭容错(PBFT)是针对现有BFT共识机制的改进。
在PBFT模型中,所有节点按序排列,其中,一个节点是主节点(领导者),以及其他节点称为备份节点。分布式系统内的所有节点彼此通信,并且使得大多数诚实节点针对系统状态达成一致。节点不仅需要证明所接收的消息来自特定对等节点,还需要验证该消息在传输过程中是否未被修改。
为了使得PBFT模型能够正常工作,假设分布式系统中的恶意节点的数量不能同时等于或超过该系统中的整个节点的1/3。系统中的节点越多,则恶意节点的数目就越不可能接近总节点的1/3。只要最多(n-1)/3个节点同时是恶意或出现故障,该算法就能够有效地工作,其中,n代表总节点。
每轮PBFT共识(称为“视图”或“时代”)包括4个阶段:(1)客户端向主节点发送请求(例如,交易请求)以调用服务操作;(2)主节点将该请求多播到备份节点;(3)主节点和备份节点执行请求,然后向客户端发送回复;以及(4)客户端等待来自不同节点的f+1个相同结果,其中,f表示可能有故障的最大节点数。
最终结果是所有诚实的节点就记录达成一致,即,接受或拒绝。在每轮PBFT共识中,主节点可以是不同的网络节点。例如,如果主节点没有多播请求并且持续特定时间段,则可以利用时代切换(或,视窗切换)的协议来替换该轮PBFT的主节点。例如,假设需要进行时代切换,则可以选择紧接在当前主节点之后的备份节点作为下一主节点(即,环状切换或循环切换)。
然而,当使用循环切换的方法来进行主节点替换时,如果遇到连续的恶意节点,则会在区块链服务中引入由于寻找诚实的主节点而导致的延迟。例如,当选择第一网络节点作为新的主节点时,第一网络节点是恶意节点,因此不能作为新的主节点。按照循环切换的方法,随后选择紧接在第一网络节点之后的第二网络节点作为新的主节点。这时,如果第二网络节点也是恶意节点,则需要选择第二网络节点之后的另一个网络节点并且继续验证该另一网络节点是否适合作为主节点。此过程一直持续到识别出诚实的新主节点为止,从而在区块链服务中引入了显著延迟。
为了解决与现有BFT共识机制和PBFT共识机制相关联的上述问题,本公开的实施例提供了一种改进的主节点切换技术。
例如,在如下所讨论的主节点切换过程中,在确定需要执行时代切换时,在各个备份节点处生成第一随机数。针对每个备份节点,只有在该备份节点处生成的第一随机数满足时代切换触发条件,该备份节点才向区块链系统中的其余网络节点发送时代切换请求消息,从而可以有助于及时选择无故障的新主节点,并且不会发生由于寻找没有故障的新主节点而导致的延迟。此外,由于在备份节点处生成的第一随机数是随机的,从而使得能够同时满足时代切换触发条件的备份节点的数目较少,由此可以避免出现由于多个备份节点设备同时发起换主请求而导致的选票瓜分问题。这可以进一步提高区块链系统在提供区块链服务方面的效率。
图1示出了可用于执行根据本公开的实施例的用于执行区块链系统中的主节点切换处理的环境100的示例的示意图。在一些示例中,环境100使得实体能够参与区块链网络102。如图1所示,环境100包括网络104、和计算设备/系统106,108。在一些示例中,网络104可以包括局域网(LAN),广域网(WAN),因特网或其组合,并且连接网站、用户设备(例如,计算设备)和后端系统。在一些示例中,可以通过有线和/或无线通信链路来访问网络104。在一些示例中,计算设备/系统106、108通过网络104相互通信,以及通过网络104实现与区块链网络102之间的通信,以及区块链网络102中的节点(或,节点设备)通过网络104来进行通信。通常,网络104表示一个或多个通信网络。在一些情况下,计算设备/系统106,108可以是云计算系统(未示出)的节点,或者每个计算设备/系统106,108可以是单独的云计算系统,其包括通过网络104互连的多个计算机并且用作分布式处理系统。
在所描绘的示例中,计算设备/系统106,108中的每个可以包括能够参与作为区块链网络102中的节点的任何合适的计算系统。计算设备/系统的示例包括但不限于,服务器,台式计算机,笔记本电脑,平板电脑设备和智能手机等。在一些示例中,计算设备/系统106,108上可以安装有用于与区块链网络102交互的一个或多个计算机实现的服务。例如,计算设备/系统106上可以安装有第一实体(例如,用户A)的服务,比如,第一实体用于管理其与一个或多个其他实体(例如,其他用户)的交易的交易管理系统。计算设备/系统108上可以安装有第二实体(例如,用户B)的服务,比如,第二实体用于管理其与一个或多个其他实体(例如,其他用户)的交易的交易管理系统。在图1的示例中,区块链网络102被表示为节点的对等网络,并且计算设备/系统106,108分别作为参与区块链网络102的第一实体和第二实体的节点。
图2示出了执行根据本公开的实施例的用于执行区块链系统中的主节点切换处理的系统架构200的示例的示意图。系统架构200的示例包括分别与参与方A,参与方B和参与方C对应的参与方系统202,204,206。每个参与方(例如,用户,企业)参与被提供来作为对等网络的区块链网络212。区块链网络212包括多个节点214,其中,节点214中的至少一些节点在区块链216中记录信息,并且所记录的信息不可更改。尽管在区块链网络212内示意性地示出了单个区块链216,但是可以提供区块链216的多个副本,并且在区块链网络212中维护多个副本,如稍后详细描述的。
在所示出的示例中,每个参与方系统202,204,206分别由参与方A,参与方B和参与方C提供,或者被提供来作为参与方A,参与方B和参与方C,并且充当区块链网络212内的对应节点214。如这里所使用的,节点通常是指连接到区块链网络212的单个系统(例如,计算机,服务器),并且使得相应的参与方能够参与区块链网络。在图2示出的示例中,参与方对应于每个节点214。然而,一个参与方可以操作区块链网络212内的多个节点214,和/或多个参与方可以共享单个节点214。在一些示例中,参与方系统202,204,206使用协议(例如,超文本传输协议安全(HTTPS))和/或使用远程过程调用(RPC)来与区块链网络212通信,或者通过区块链网络212进行通信。
节点214在区块链网络212的参与度可以不同。例如,一些节点214可以参与共识过程(例如,作为将区块添加到区块链216的矿工节点),而其他节点214不参与共识过程。作为另一示例,一些节点214存储区块链216的完整副本,而其他节点214仅存储区块链216的部分副本。在图2的示例中,参与方系统202,204,206各自存储区块链216的完整副本216',216”,216”'。
区块链(例如,图2中的区块链216)由一连串的区块组成,每个区块存储数据。数据的示例可以包括表示两个或更多参与方之间的交易的交易数据。在本公开中,交易被使用来作为非限制性示例,可以预期的是,任何适当的数据都可以存储在区块链中(例如,文档,图像,视频,音频)。交易的示例可以包括但不限于交换有价值的东西(例如,资产,产品,服务和货币等)。交易数据被不可更改地存储在区块链中。
在存储在区块中之前,对交易数据进行哈希处理。哈希处理是将(作为字符串数据提供的)交易数据转换为固定长度的哈希值(也被作为字符串数据提供)的过程。通过对交易数据进行哈希处理后,即使交易数据出现轻微更改,也会导致得到完全不同的哈希值。哈希值通常是通过使用哈希函数来对交易数据进行哈希处理而生成的。哈希函数的示例包括但不限于安全散列算法(SHA)-256,其输出256比特的哈希值。
多个交易的交易数据被哈希化并且存储在区块中。例如,对两个交易数据进行哈希处理得到两个哈希值,然后,对所得到的两个哈希值再次进行哈希处理以得到另一哈希值。重复该过程,直到对于要存储在区块中的所有交易,得到单个哈希值。该哈希值被称为Merkle根哈希,并且被存储在区块的头部。任何交易的更改都会导致其哈希值发生变化,最终导致Merkle根哈希值发生变化。
通过共识协议来将区块添加到区块链中。区块链网络中的多个节点参与共识协议,并且竞争来将区块添加到区块链中。这样的节点被称为矿工节点(或记账节点)。以上介绍的POW用作非限制性示例。
矿工节点执行共识过程来将交易(所对应的区块)添加到区块链。虽然多个矿工节点参与共识过程,但只有一个矿工节点可以将区块写入区块链。也就是说,矿工节点在共识过程中竞争以将其区块添加到区块链中。更详细地,矿工节点周期性地从交易池中收集待处理的交易(例如,直到达到在区块中可以包括的交易数量的预定限制,如果有的话)。交易池包括来自区块链网络中的参与方的交易消息。矿工节点创建区块,并将交易添加到区块中。在将交易添加到区块之前,矿工节点检查待添加的交易中是否存在区块链的区块中具有的交易。如果该交易已被添加到另一个区块中,则该交易将被丢弃。
矿工节点生成区块头,对区块中的所有交易进行哈希处理,并且成对地组合哈希值以生成进一步的哈希值,直到针对区块中的所有交易得到单个哈希值(Merkle根哈希)。然后,将Merkle根哈希添加到区块头中。矿工还确定区块链中的最新区块(即,添加到区块链的最后一个区块)的哈希值。矿工节点还可以在区块头中添加随机数值(noune值)和时间戳。在挖掘过程中,矿工节点尝试找到满足所需参数的哈希值。矿工节点不断更改nonce值,直到找到满足所需参数的哈希值。
区块链网络中的每个矿工都试图找到满足所需参数的哈希值,并且以这种方式彼此竞争。最终,一个矿工节点找到满足所需参数的哈希值,并将该哈希值通告给区块链网络中的所有其他矿工节点。其他矿工节点验证哈希值,如果确定为正确,则验证区块中的每个交易,接受该区块,并将该区块附加到它们的区块链副本中。以这种方式,区块链的全局状态在区块链网络内的所有矿工节点上达成一致。上述过程是POW共识协议。
在图2所提供的示例中,参与方A想要向参与方B发送一定数量的资金。参与方A生成交易消息,并将交易消息发送到区块链网络,该交易消息被增加到交易池中。区块链网络中的每个矿工节点创建区块,并从交易池中获取交易,并将交易添加到区块。按照这种方式,参与方A所发布的交易被添加到矿工节点的区块中。
在一些区块链网络中,实施密码技术来维护交易的隐私性。例如,如果两个节点想要保持交易私密性,使得区块链网络中的其他节点不能获悉交易细节,则节点可以对交易数据进行加密处理。加密方法的示例包括但不限于对称加密和非对称加密。对称加密是指使用单个密钥进行加密(根据明文生成密文)和解密(根据密文生成明文)的加密过程。在对称加密中,多个节点可以使用相同的密钥,因此每个节点都可以对交易数据进行加密/解密。
非对称加密是指使用密钥对来进行加密。每个密钥对包括私钥和公钥,私钥仅对于相应节点是已知的,并且公钥对于区块链网络中的任何或所有其他节点是已知的。节点可以使用另一个节点的公钥来加密数据,并且可以使用该另一个节点的私钥来解密该经过加密的数据。例如,再次参考图1。参与方A可以使用参与方B的公钥来加密数据,并将加密数据发送给参与方B。参与方B可以使用其私钥来解密加密数据(密文)并提取原始数据(明文)。使用节点的公钥加密的消息,只能使用该节点的私钥解密。
非对称加密用于提供数字签名,这使得交易中的参与方能够确认交易中的其他参与方以及交易的有效性。例如,节点可以对消息进行数字签名,而另一个节点可以根据参与方A的数字签名确认消息是由该节点发送的。数字签名还可以用于确保消息在传输过程中不被篡改。例如,再次参考图1。参与方A将向参与方B发送消息。参与方A生成消息的哈希值,然后使用其私钥对哈希值进行加密来生成数字签名。参与方A将该数字签名附加到消息,并将具有数字签名的消息发送给参与方B。参与方B使用参与方A的公钥解密数字签名,从而解密出对应的哈希值。参与方B对所接收的消息进行哈希处理以得到另一哈希值,然后比较两个哈希值。如果哈希值相同,则参与方B可以确认该消息确实来自参与方A,并且未被篡改。
图3示出了根据本公开的实施例的共识过程300的示例的示意图。如图3所示,C表示客户端,R0为区块链系统的当前共识过程的主节点,以及R1、R2和R3为备份节点。
在请求阶段310,客户端C可以向主节点R0发送交易请求Request,另外,客户端C也可以向区块链系统中的其他节点(例如,R1、R2和R3)发送该交易请求(图3中未示出),然后,该其他节点将所接收的交易请求转发给主节点R0。
在本公开中,如图4所示,交易请求Request的格式可以是:<REQUEST,op,timestamp,cid,signature-c>。这里,“REQUEST”表示交易请求的协议标识。“op”表示具体的请求内容,其可以是代表业务含义的单个请求消息,比如,“C给某人转账5元”。“timestamp”表示交易请求的发送时间。“cid”表示客户端C的标识。“signature-c”表示客户端C的签名。
在接收到交易请求Request之后,主节点R0与备份节点R1、R2以及R3进行共识处理。共识处理的过程包括:预准备阶段(pre-prepare)320、准备阶段(prepare)330以及确认阶段(commit)340。
在预准备阶段320,在接收到一定数量的交易请求后,主节点R0对所接收的交易排序并打包为消息m,然后生成预准备消息Pre-prepare,并且在给定的时间间隔内,将预准备消息Pre-prepare发送(例如,广播)给备份节点R1、R2和R3。预准备消息Pre-prepare表明主节点R0正在启动共识过程。
如图3所示,主节点R0向区块链网络中的其他网络节点R1,R2和R3发送预准备消息Pre-prepare。注意,共识过程300被示为包括4个网络节点R0,R1,R2和R3仅用于说明目的,共识过程300也可以包括任何合适数量的网络节点。
在本公开中,如图4所示,预准备消息Pre-prepare的格式可以为:<<PRE-PREPARE,epoch,seq,D(m),signature-p>,m,j>。这里,“PRE-PREPARE”表示预准备消息的协议标识,“epoch”表示R0作为主节点的时代,“seq”表示所需共识的提议的提议编号,“D(m)”表示请求消息集合的摘要,“signature-p”表示R0的签名,“m”表示请求消息的具体内容,以及“j”表示R0的节点标识。
在准备阶段330,对于每个备份节点(R1、R2或R3),在接收到预准备消息Pre-prepare并检测预准备消息Pre-prepare合法后,可以将预准备消息Pre-prepare存储在本地日志中,并生成用于响应预准备消息Pre-prepare的准备消息Prepare,再将所生成的准备消息Prepare广播至其他节点。准备消息Prepare指示备份节点已从主节点接收到预准备消息Pre-prepare,并且正在响应预准备消息Pre-prepare发送应答。
相应地,每个备份节点也会接收到其他备份节点发送的预准备消息Pre-prepare。以备份节点R1为例,备份节点R1接收到主节点R0发送的预准备消息Pre-prepare之后,会将生成的准备消息Prepare广播至主节点R0、备份节点R2和R3。相应地,备份节点R1也会接收到主节点R0、备份节点R2和R3发送的准备消息Prepare。
在本公开中,备份节点广播的准备消息Prepare可以用于表示该备份节点在准备阶段330所做出的共识承诺。
在本公开中,如图4所示,准备消息Prepare的格式可以是:<PREPARE,epoch,seq,D(m),i,signature-i>。这里,“PREPARE”表示准备消息Prepare的协议标识,“i”表示发送准备消息Prepare的节点的节点标识,“signature-i”表示发送准备消息Prepare的节点的签名。准备消息Prepare中的“epoch”、“seq”以及“D(m)”的含义与上述预准备消息Pre-prepare中的“epoch”、“seq”以及“D(m)”的含义相同。
在确认阶段340,当网络节点从其他网络节点接收到足够数量的准备消息Prepare时,该网络节点确定已经达成共识。例如,如果主节点R0或备份节点R1,R2或R3接收到Quorum个(例如,2f+1,其中f表示多个故障网络节点)准备消息Prepare,则确定在网络节点之间达成共识。然后,主节点R0或备份节点R1,R2或R3会向其他节点广播确认消息Commit。
在本公开中,如图4所示,确认消息Commit的格式可以是:<COMMIT,epoch,seq,D(m),p,signature-p>。其中,“COMMIT”表示确认消息Commit的协议标识,“p”表示发送确认消息Commit的节点的节点标识,“signature-p”表示发送确认消息Commit的节点的签名。确认消息Commit中的“epoch”、“seq”以及“D(m)”的含义与上述预准备消息Pre-prepare中的“epoch”、“seq”以及“D(m)”的含义相同。
在本公开中,节点发送确认消息Commit并将确认消息Commit存储至本地日志中,以表示该节点在确认阶段340所做出的共识承诺。
在应答阶段350,在针对发起的提议达成共识后,所有参与共识的节点中的每一个在本地状态机中顺序执行预准备消息pre-prepare的消息m中的一组有序requests,并返回应答消息reply给客户端C。
在本公开中,如图4所示,应答消息reply的格式可以为:<REPLY,r,i,signature-i>。这里,“REPLY”表示应答消息reply的协议标识。“r”表示针对请求返回的具体应答内容。“i”表示发送应答消息reply的节点的节点标识。“signature-i”表示发送应答消息reply的节点的签名。
图5示出了根据本公开的实施例的共识过程500的示例的流程图。在一些实现中,可以使用一个或多个计算设备执行的一个或多个计算机可执行程序来执行共识过程500。要说明的是,以下说明是在本公开的其他附图的上下文中描述共识过程500。应当理解,共识过程500可以例如通过适当的任何合适的系统,环境,软件和硬件,或系统,环境,软件和硬件的组合来执行。在一些实现中,共识过程500的各个步骤可以并行,组合,循环或以任何顺序运行。
共识过程500可以结合图1和2所述的系统100,200实现。在本公开的一些实施方式中,区块链网络102和/或212包括主节点和一个或多个备份节点。区块链网络102和/或212与计算设备/系统106和/或108通信,例如,客户端节点通过网络104提供区块链服务。客户端节点、主节点和备份节点中的每一个可以是专用计算机,或者被配置成执行本公开所讨论的过程的其他数据处理装置。例如,客户端节点也可以称为客户端终端,或者与区块链网络交互的客户端设备。客户端节点可以安装例如与区块链网络相关的客户端应用程序或客户端软件开发工具包(Software Development Kit,SDK),用于访问区块链网络并与区块链网络通信。主节点和一个或多个备份节点也可以称为共识节点或网络节点,其实现共识处理并且在区块链网络中不可更改地记录信息。
如图5所示,首先,在块501,客户端节点生成交易请求。在本公开的一些实施方式中,交易请求可以包括用于向区块链网络102和/或212请求区块链服务的请求。
在块502,客户端节点将交易请求发送(例如,多播)到区块链网络102和/或212的主节点。在本公开的一些实现中,主节点将序列号分配给交易请求,以在从客户端节点接收到交易请求之后跟踪交易请求。
接着,在块503,主节点生成预准备消息Pre-prepare。预准备消息Pre-prepare指示主节点正在发起共识过程。然后,在块504,主节点将Pre-prepare消息发送(例如,多播)到其他网络节点(例如,备份节点)。
在接收到预准备消息Pre-prepare后,在块505处,每个备份节点检测预准备消息Pre-prepare是否合法(即,进行消息确认),并且在检测到预准备消息Pre-prepare合法后,生成准备消息Prepare。准备消息Prepare指示备份节点已从主节点接收到预准备消息Pre-prepare,并且正在响应预准备消息Pre-prepare而发送应答。随后,在块506,每个备份节点将所生成的准备消息Prepare发送至主节点。在507,每个备份节点将准备消息Prepare发送到其他备份节点。在508,每个备份节点可以接收来自其他备份节点的准备消息Prepare。
在块509,主节点确定所具有的准备消息Prepare是否超过预定阈值,并且响应于所具有的准备消息Prepare超过预定阈值而生成确认消息Commit。确认消息Commit用于指示主节点已接受预定数量的准备消息Prepare,并且已经准备好执行交易。在本公开的一些实现中,主节点确定所具有的准备消息Prepare息的数量是否达到法定数量n-f或2f+1,其中n是网络节点的总数,f是网络可以容忍的故障节点的最大数量。
接着,在块510,主节点将确认消息Commit发送到各个备份节点。同样,在块511中,在各个备份节点处,按照与主节点处相同的方式来生成确认消息Commit。随后,在块512,将所生成的确认消息Commit发送给其他网络节点。这里要说明的是,块509和510的操作可以与块511-512的操作并行执行。
在块513处,主节点响应于所具有的确认消息Commit超过预定阈值而执行交易请求。在本公开的一些实现中,主节点确定所接收的确认消息Commit的数量是否达到法定数量(例如,2f+1)。如果Commit消息的数量达到法定数量,则主节点确定已在所有网络节点之间达成共识,然后在本地执行交易请求。在本公开的一些实现中,如果主节点确定Commit消息的数量未达到法定数量,则主节点确定在所有网络节点之间尚未达成共识,然后避免执行交易请求。
在本公开的一些实施方式中,每个备份节点可以在执行交易请求之前执行由主节点执行的相同操作,如上述块513处的操作。如果备份节点确定所接收的Commit消息超过预定阈值,备份节点确定网络节点之间已达成共识并在本地执行事务请求。在本公开的一些实现中,如果备份节点确定所接收的Commit消息的数量未达到预定阈值,则备份节点确定在所有网络节点之间尚未达成共识,然后避免执行交易请求。
在块514处,主节点在执行交易请求之后,将执行交易请求而得到的交易结果发送到客户端节点。已经在本地成功执行交易请求的备份节点也可以将它们各自的交易结果发送到客户端节点。
在共识过程期间,备份节点正在等待来自主节点的请求。但是,主节点可能遇到拜占庭故障或崩溃故障,因此主节点不能在预定时间窗口内广播请求。在没有主节点组播请求的情况下经过特定时间量时,可能需要选择新的主节点以防止备份节点无限期地等待执行请求。
在一种主节点切换处理的现有技术方案中,假设在当前的时代下,R0为当前的主节点设备,R1、R2和R3均为备份节点设备。若R0发生故障或者作恶时,会启动进行主节点切换过程。在现有的主节点切换过程中,在备份节点R1、R2和R3处设置定时器。如果检测到R0发生故障或者作恶,则作为备份节点的R1、R2和R3会启动各自的计时器。
一旦备份节点处的计时器到期,则备份节点会向区块链网络中的其余网络节点广播时代切换请求消息,以请求充当新的主节点。每个备份节点会对最先接收到的时代切换请求消息进行消息验证(即,投票),然后向发出该时代切换消息的备份节点返回验证消息。
在上述主节点切换过程中,由于备份节点R1、R2和R3处的时代切换请求消息是响应于自有的定时器而发出的,从而使得可能会发生多个备份节点同时发出时代切换请求消息,即,其他网络节点可能会同时接收到对于一个时代切换请求消息,由此导致会同时针对多个备份节点进行投票以选出新的主节点,从而导致出现选票瓜分问题。
为了解决上述问题,本公开提供了用于区块链系统中的主节点切换处理的方法及装置。利用该方法及装置,通过在监测到当前主节点发生故障或是作恶节点时,在各个备份节点处生成随机数,并且基于所生成的随机数据是否满足主节点切换触发条件来发起主节点切换流程。由于随机数生成的随机性,从而能够降低出现由于多个备份节点设备同时发起换主请求而导致的选票瓜分问题的概率,由此提升换主处理效率。
图6示出了根据本公开的实施例的用于执行区块链系统(例如,区块链网络102和212)中的主节点切换处理的过程600的示例的示意图。在一些实现中,主节点与包括采用该主节点作为领导节点的共识过程的时代(epoch)相关联。主节点切换(或改变)会导致时代切换(epoch change)。
在一些实现中,响应于确定当前时代的主节点需要切换,区块链网络的备份节点将时代切换请求消息发送到其他网络节点。时代切换请求消息指示备份节点希望成为新时代中的新主节点。例如,如图6所示,响应于确定当前主节点有故障(或当前主节点是作恶节点)并且需要执行时代切换,备份节点R0向区块链网络中的其他网络节点R1,R2和R3发送时代切换请求消息。VF消息是指示备份节点R0申请成为新主节点的时代切换请求消息的示例。时代切换可以导致从具有当前主节点的当前时代切换到具有新主节点的新时代。要注意的是,仅仅出于说明目的,过程600被示为结合四个网络节点实现。过程600可以结合任何合适数量的网络节点来实现。
然后,每个网络节点接收由备份节点R0发送的时代切换请求消息,响应于时代切换请求消息而准备请求确认消息,并将请求确认消息多播到其他网络节点。例如,如图6所示,网络节点R1接收由备份节点R0发送的VF消息,并且用EC消息回复备份节点R0,该EC消息指示网络节点R1确认备份节点R0可以成为新的主节点。同时,网络节点R1还将该EC消息多播到其他网络节点,例如网络节点R0,R2和R3。类似地,网络节点R2和R3各自将EC消息多播到其他网络节点。
在备份节点R0接收到其他网络节点发送的EC消息后,如果所接收的EC消息的数量超过预定阈值,则备份节点R0向其他网络节点发送时代切换确认消息(NC),该时代切换确认消息(NC)指示备份节点R0充当新时代的主节点。
下面将参考图7更详细地讨论如上所述的时代切换过程。
图7示出了根据本公开的实施例的用于执行区块链系统(例如,区块链网络102和212)中的主节点切换处理的方法700的示例的流程图。在一些实现中,可以使用由一个或多个计算设备执行的一个或多个计算机可执行程序来执行示例方法700。要说明的是,以下说明是在本公开的其他附图的上下文中描述方法700。应当理解,方法700可以例如通过适当的任何合适的系统,环境,软件和硬件,或系统,环境,软件和硬件的组合来执行。在一些实现中,方法700的各个步骤可以并行,组合,循环或以任何顺序运行。
如图7所示,方法700开始于块702。在块702,备份节点确定需要执行时代切换。这里讨论的时代切换导致从具有当前主节点的当前时代切换到具有新主节点的新时代。示例时代可以包括用于使用主节点在多个网络节点之间达成共识的共识过程(例如,如上面参考图3和图4讨论的共识过程300或400)。这里,备份节点可以是区块链系统中的任一备份节点。
在本公开的一些实施方式中,响应于在备份节点处监测到当前时代内的针对第一待共识提议的第一共识处理在预定时段内未完成,备份节点确定需要执行时代切换。换言之,如果备份节点在没有接收到来自当前主节点的请求后已经过去特定时间量之后仍在等待来自当前主节点的请求,则备份节点可以确定需要执行时代切换。例如,当前主节点可能遇到拜占庭故障或崩溃故障,使得当前主节点不能在预定时间窗口内多播请求。这里所讨论的时代切换过程通过允许系统在主节点发生故障时继续工作来提供存在性并减少网络等待时间。
在本公开中,监测针对第一待共识提议的第一共识处理在预定时段内未完成可以包括但不限于:主节点设备不发起第一待共识提议,主节点设备发起错误的第一待共识提议,针对第一待共识提议的共识阶段达不到Quorum数量的一致而无法完成共识。
当在备份节点处确定需要执行时代切换时,在块704,备份节点(例如,R0)生成第一随机数。在本公开的一个示例中,第一随机数可以是使用VRF(verifiable randomfunction,可验证随机函数算法)来基于第二随机数和第一待共识提议的提议编号生成的,其中,第二随机数是在区块链系统的当前主节点设备被选择作为主节点设备的主节点切换处理过程中生成的随机数。此外,备份节点还可以基于使用VRF算法来基于第二随机数和第一待共识提议的提议编号生成第一随机数的证明信息,以用于第一随机数的验证。
具体地,备份节点生成包括私钥和公钥的密钥对,并且使用第二随机数和第一待共识提议的提议编号作为VRF函数的输入参数,以利用VRF_hash函数来基于私钥和输入参数得到第一随机数,以及利用VRF_Proof函数来基于私钥和输入参数得到第一随机数的证明信息。
接着,在块706,确定发起时代切换。例如,判断第一随机数是否满足时代切换触发条件。这里,时代切换触发条件可以包括:第一随机数小于第一预定阈值;或者第一随机数大于第二预定阈值。
如果第一随机数满足时代切换触发条件,则备份节点确定发起时代切换。随后,在块708,备份节点向区块链系统中的除了该备份节点之外的多个网络节点发送时代切换请求消息(VF),时代切换请求消息(VF)指示请求从基于当前主节点进行的当前时代切换到基于该备份节点作为新的主节点进行的新时代。如图7中所示,备份节点向网络节点1-N发送VF消息。
在本公开的一个示例中,在使用VRF算法来生成第一随机数时,时代切换请求消息(VF)可以包括第一随机数以及第一随机数的证明信息。如图8所示,VF消息的消息格式可以为:VF<epoch+1,j,random_num,random_num_proof>。这里,“epoch”表示当前主节点所对应的时代,j是发出VF消息的备份节点的节点标识,random_num表示第一随机数,以及random_num_proof表示第一随机数的证明信息。
接收到VF消息的各个网络节点所执行的操作相同,如图7所示,网络节点1-N中的各个网络节点所执行的操作相同。在接收到VF消息后,在块710,在各个网络节点处,执行时代切换请求验证(时代切换请求确认)。例如,如果VF消息包括第一随机数以及第一随机数的证明信息,则可以在各个网络节点处,基于第一随机数以及第一随机数的证明信息来进行时代切换请求验证。具体地,以网络节点1为例,网络节点1首先验证是否可以由证明信息计算出第一随机数,在上述验证通过的情况下,继续利用备份节点的公钥、VRF的输入参数以及证明信息进行验证,以验证证明信息是否可以由VRF的输入参数得到。如果证明信息可以由VRF的输入参数得到,则时代切换请求验证通过。如果时代切换请求验证通过,则在各个网络节点处,生成请求确认消息(EC),请求确认消息(EC)指示该网络节点确认备份节点充当新的主节点。然后,在块712,各个网络节点将所生成的请求确认消息(EC)发送给备份节点以及其他网络节点。
在本公开的一个示例中,EC消息可以包括第一待共识提议的提议编号和发出EC消息的网络节点的节点标识。
在该示例中,第一待共识提议的提议编号用于表征该EC消息是针对第一待共识提议的,确保同一提议在内容和次序上的一致性。节点标识用于唯一标识发送该EC消息的节点,这样便于备份节点设备统计所接收的EC消息的数量。
在本公开的另一示例中,EC消息还可以包括发出EC消息的网络节点在第一共识处理时做出的第二阶段共识承诺信息以及第三阶段共识承诺信息。以下将“发出EC消息的网络节点”简称为“发出网络节点”。
在本公开的一个示例中,如图8所示,EC消息的消息格式可以为:EC<epoch+1,E,W,j>。这里,“epoch”表示当前主节点所对应的时代,j是发出VF消息的备份节点的节点标识,E表示发出请求确认消息(EC)的网络节点在第一共识处理时做出的第二阶段共识承诺信息,以及W表示发出请求确认消息(EC)的网络节点在第一共识处理时做出的第三阶段共识承诺信息。
在该示例中,第二阶段即为图3所示的准备阶段330,准备阶段330是发出网络节点接收到预准备消息触发的。发出网络节点在接收到预准备消息后,会利用私钥对预准备消息进行签名,得到sign_proof。在准备阶段330,发出网络节点发送的准备消息中携带sign_proof。sign_proof可以用于表征发出网络节点在准备阶段330所做出的共识承诺。
例如,如图8所示,第二阶段共识承诺信息的格式可以是:E{<epoch,seq,sign_proof,i>},其中,“E”表示第二阶段共识承诺信息,“epoch”表示第一共识处理所处的时代,“seq”表示第一待共识提议的提议编号,“i”表示发出网络节点的节点标识,“sign_proof”为发出网络节点对所接收到的预准备消息的签名。
在该示例中,第三阶段即为图3所示的确认阶段340,确认阶段340是发出网络节点接收其他节点发送的准备消息触发的。发出网络节点会接收到多个准备消息,且每一个准备消息中携带有一个sign_proof。这样发出网络节点可以得到多个sign_proof,该多个sign_proof以及发出网络节点本地的sign_proof所形成的集合即为sign_proofs。
在确认阶段340,发出网络节点发送的EC消息中携带sign_proofs,sign_proofs可以用于表征发出网络节点在确认阶段340所做出的共识承诺。
以图3所示的R1为例,R1接收的R2和R3发送的准备消息分别为:PREPARE2和PREPARE3,其中,PREPARE2中携带sign_proof2,PREPARE3中携带sign_proof3,R1本地的sign_proof1,则在确认阶段240发送的确认消息中携带的sign_proofs包括:sign_proof1、sign_proof2以及sign_proof3。
例如,如图8所示,第三阶段共识承诺信息的格式可以是:W{<epoch,seq,sign_proofs,i>},“W”表示第三阶段共识承诺信息,“sign_proofs”表示正确节点设备的签名的集合,W中的“epoch”、“seq”以及“i”所表示的含义与上述E中的“epoch”、“seq”以及“i”所表示的含义相同。
接着,在块714,在备份节点处确定时代切换请求是否被确认。具体地,响应于所接收到的验证通过消息(EC)的数量大于预定数量,备份节点确定时代切换请求得到区块链网络中的网络节点的大多数节点的确认,并且能够充当新时代的主节点。
在本公开中,预定数量可以为Quorum-1,例如,Quorum为2f+1时,规定数量为2f,其中,f是网络可以容忍的故障节点的最大数量。
然后,在块716,备份节点向区块链网络中的其他网络节点发送时代切换确认消息(NE),时代切换确认消息(NE)用于向区块链网络中的其他网络节点通知该备份节点是新时代的主节点。
在本公开的一个示例中,NE消息可以包括第一待共识提议的提议编号和备份节点的节点标识。此外,NE消息还可以包括各个发出请求确认消息(EC)的网络节点在所述第一共识处理时做出的第二阶段共识承诺信息集合(E’)以及第三阶段共识承诺信息集合(W’)。
如图8所示,NE消息的消息格式可以是:NE<epoch+1,j,seq,E’,W’>。这里,“epoch”表示当前主节点所对应的时代,j是发出NE消息的备份节点的节点标识,E’表示发出请求确认消息(EC)的网络节点在第一共识处理时做出的第二阶段共识承诺信息集合,以及W’表示发出请求确认消息(EC)的网络节点在第一共识处理时做出的第三阶段共识承诺信息集合。
在该示例中,第一待共识提议的提议编号用于表征该NE消息是针对第一待共识提议的,确保同一提议在内容和次序上的一致性。节点标识用于向其余节点(即图7中的网络节点1-N)通知作为新的主节点的节点。这样区块链系统中的所有节点知晓新的主节点,从而便于后续操作。
在该示例中,备份节点从其余网络节点接收到多个EC消息,每个EC消息中携带有该EC消息的发出网络节点所做出的第二阶段共识承诺信息和第三阶段共识承诺信息。这样,备份节点可以得到其他网络节点在第一共识处理时做出的第二阶段共识承诺信息,所得到的第二阶段共识承诺信息的集合即为第二阶段共识承诺信息集合。并且,还可以得到其他网络节点设备在第一共识处理时做出的第三阶段共识承诺信息,所得到的第三阶段共识承诺信息的集合即为第三阶段共识承诺信息集合。
例如,R0分别接收R1、R2和R3发送的验证通过消息:EC1、EC2以及EC3,其中,EC1中携带的第二阶段共识承诺信息为E1,携带的第三阶段共识承诺信息为W1,EC2中携带的第二阶段共识承诺信息为E2,携带的第三阶段共识承诺信息为W2,以及EC3中携带的第二阶段共识承诺信息为E3,携带的第三阶段共识承诺信息为W3,则R0发送的换主确认消息中携带的第二阶段共识承诺信息集合包括E1、E2和E3,携带的第三阶段共识承诺信息集合包括W1、W2和W3。
通过该示例中的第二阶段共识承诺信息集合和第三阶段共识承诺信息集合,区块链系统中的各个备份节点可以进行针对第一待共识提议在第一共识处理时的数据同步,以便于在epoch+1下,继续完成在epoch下未完成的共识处理。
此外,可选地,在本公开的一个示例中,网络节点(例如,网络节点1)可以从至少两个备份节点设备接收到时代切换请求消息。也就是说,该至少两个备份节点设备各自生成的第一随机数均满足时代切换触发条件,并且分别向网络节点1发送时代切换请求消息,且每个时代切换请求消息中均包括第一随机数。
此时,网络节点1可以基于各个时代切换请求消息中的第一随机数,确定待验证时代切换请求消息,然后对所确定的待验证时代切换请求消息进行时代切换请求验证。具体地,网络节点1可以将第一随机数满足预定条件的时代切换请求消息确定为待验证时代切换请求消息。例如,预定条件可以是:第一随机数最小;第一随机数最大,或者适合于唯一确定的其它合适条件。
如上参照图1-图8描述了根据本公开的实施例的共识过程以及主节点切换过程。下面参照图9-11描述根据本公开的实施例的时代切换处理装置以及对应的节点。
图9示出了根据本公开的实施例的用于执行区块链系统中的主节点切换处理的装置(下文中称为时代切换处理装置)900的方框图。区块链系统包括多个网络节点,多个网络节点包括主节点和至少一个备份节点,时代切换处理装置900位于备份节点中。
如图9所示,时代切换处理装置900包括随机数生成单元910,时代切换请求消息发送单元920,请求确认消息接收单元930以及时代切换确认消息发送单元940。
随机数生成单元910被配置为在确定需要执行时代切换时,生成第一随机数,时代切换使得从基于当前主节点进行的当前时代切换到基于新的主节点进行的新时代。随机数生成单元910的操作可以参考上面参照图7描述的块704的操作。
时代切换请求消息发送单元920被配置为如果第一随机数满足时代切换触发条件,则向区块链系统中的除了备份节点之外的多个网络节点发送时代切换请求消息(VF),时代切换请求消息(VF)指示请求从基于当前主节点进行的当前时代切换到基于备份节点作为新的主节点进行的新时代。时代切换请求消息发送单元920的操作可以参考上面参照图7描述的块708的操作。
在本公开的一个示例中,时代切换请求消息(VF)包括第一随机数以及第一随机数的证明信息,第一随机数和第一随机数的证明信息是使用可验证随机函数算法来基于第二随机数和第一待共识提议的提议编号生成的,第二随机数是在区块链系统的当前主节点设备被选择为主节点设备的主节点切换处理过程中生成的随机数,其中,多个网络节点处的请求确认处理是基于第一随机数以及第一随机数的证明信息进行的。
请求确认消息接收单元930被配置为接收来自多个网络节点中的至少一个网络节点的请求确认消息(EC),请求确认消息(EC)指示确认备份节点充当新的主节点。请求确认消息接收单元930的操作可以参考上面参照图7描述的块712的操作。
在本公开的一个示例中,请求确认消息(EC)包括第一待共识提议的提议编号(SEQ)和发送请求确认消息(EC)的网络节点的节点标识。此外,在第一共识处理包括三阶段共识处理时,请求确认消息(EC)还可以包括发出请求确认消息(EC)的网络节点在第一共识处理时做出的第二阶段共识承诺信息(E)以及第三阶段共识承诺信息(W)。
时代切换确认消息发送单元940被配置为响应于所接收到的验证通过消息(EC)的数量大于预定数量,由备份节点向多个网络节点发送时代切换确认消息(NE)。时代切换确认消息发送单元940的操作可以参考上面参照图7描述的块716的操作。
在本公开的一个示例中,时代切换确认消息(NE)可以包括第一待共识提议的提议编号(SEQ)和备份节点的节点标识。此外,时代切换确认消息(NE)还可以包括各个发出请求确认消息(EC)的网络节点在第一共识处理时做出的第二阶段共识承诺信息集合(E’)以及第三阶段共识承诺信息集合(W’)。
此外,时代切换处理装置900还可以包括时代切换确定单元(未示出)。时代切换确定单元被配置为响应于监测到当前时代内的针对第一待共识提议的第一共识处理在预定时段内未完成,确定需要执行时代切换。时代切换确定单元的操作可以参考上面参照图7描述的块702的操作。
图10示出了根据本公开的实施例的用于执行区块链系统中的主节点切换处理的装置(下文中称为时代切换处理装置)1000的方框图。区块链系统包括多个网络节点,多个网络节点包括主节点和至少一个备份节点,时代切换处理装置900位于除了备份节点之外的网络节点(下文中称为网络节点)中。
如图10所示,时代切换处理装置1000包括时代切换请求消息接收单元1010、时代切换请求验证单元1020、请求确认消息发送单元1030和时代切换确认消息接收单元1040。
时代切换请求消息接收单元1010被配置为接收来自备份节点的时代切换请求消息(VF),时代切换请求消息(VF)指示请求从基于当前主节点进行的当前时代切换到基于备份节点作为新的主节点进行的新时代。时代切换请求消息接收单元1010的操作可以参考上面参照图7描述的块708的操作。
时代切换请求验证单元1020被配置为对时代切换请求消息(VF)进行时代切换请求验证。时代切换请求验证单元1020的操作可以参考上面参照图7描述的块710的操作。
请求确认消息发送单元1030被配置为在时代切换请求验证通过后,向备份节点发送请求确认消息(EC),请求确认消息(EC)指示确认备份节点充当新的主节点。请求确认消息发送单元1030的操作可以参考上面参照图7描述的块712的操作。
时代切换确认消息接收单元1040被配置为从备份节点设备接收时代切换确认消息(NE)。时代切换确认消息接收单元1040的操作可以参考上面参照图7描述的块716的操作。
此外,在网络节点的时代切换请求消息接收单元从至少两个备份节点设备接收时代切换请求消息(VF)时,时代切换请求验证单元可以包括时代切换请求消息确定模块(未示出)和时代切换请求验证模块(未示出)。时代切换请求消息确定模块被配置为基于该至少两个时代切换请求消息(VF)的第一随机数,确定待验证的时代切换请求消息。时代切换请求验证模块被配置为对所确定的待验证的时代切换请求消息进行时代切换请求验证。
在本公开中,节点可以包括图9所示的时代切换处理装置和/或图10所示的时代切换处理装置中的任何一个或两者。在节点仅仅包括图9所示的时代切换处理装置,该节点充当发起主节点切换过程的备份节点。在节点仅仅包括图10所示的时代切换处理装置,该节点充当对发起主节点切换过程的备份节点进行确认处理的网络节点。在节点包括图9和图10所示的时代切换处理装置两者时,该节点既可以充当发起主节点切换过程的备份节点,也可以充当对发起主节点切换过程的备份节点进行确认处理的网络节点。图11示出了包括图9和图10所示的时代切换处理装置两者的节点的方框图。
以上参照图1到图11,对根据本公开的用于执行区块链系统中的主节点切换处理的方法、装置以及节点设备的实施例进行了描述。
本公开的用于执行区块链系统中的主节点切换处理的装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将存储器中对应的计算机程序指令读取到内存中运行形成的。在本公开中,时代切换处理装置例如可以利用计算设备实现。
图12示出了根据本公开的实施例的用于执行区块链系统中的时代切换的计算设备的方框图。如图12所示,计算设备1200包括至少一个处理器1210、存储器1220、内存1230和通信接口1240,并且至少一个处理器1210、存储器1220、内存1230和通信接口1240经由总线1260连接在一起。至少一个处理器1210执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器1210:当在备份节点处确定需要执行时代切换时,由备份节点生成第一随机数,时代切换使得从基于当前主节点进行的当前时代切换到基于新的主节点进行的新时代;如果第一随机数满足时代切换触发条件,则由备份节点向所述区块链系统中的除了备份节点之外的多个网络节点发送时代切换请求消息,时代切换请求消息指示请求从基于当前主节点进行的当前时代切换到基于备份节点作为新的主节点进行的新时代;在备份节点处,接收来自多个网络节点中的至少一个网络节点的请求确认消息,请求确认消息指示确认备份节点充当新的主节点;以及响应于所接收到的验证通过消息的数量大于预定数量,由备份节点向多个网络节点发送时代切换确认消息。
应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器1210进行本公开的各个实施例中以上结合图1-11描述的各种操作和功能。
根据一个实施例,提供了一种例如机器可读介质的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本公开的各个实施例中以上结合图1-11描述的各种操作和功能。
图13示出了根据本公开的实施例的用于执行区块链系统中的时代切换的计算设备的方框图。如图13所示,计算设备1300包括至少一个处理器1310、存储器1320、内存1330和通信接口1340,并且至少一个处理器1310、存储器1320、内存1330和通信接口1340经由总线1360连接在一起。至少一个处理器1310执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器1310:时代切换请求消息接收单元,被配置为接收来自备份节点的时代切换请求消息,时代切换请求消息指示请求从基于当前主节点进行的当前时代切换到基于备份节点作为新的主节点进行的新时代;时代切换请求验证单元,被配置为对时代切换请求消息进行时代切换请求验证;请求确认消息发送单元,被配置为在时代切换请求验证通过后,向备份节点发送请求确认消息,请求确认消息指示确认备份节点充当新的主节点;以及时代切换确认消息接收单元,被配置为从备份节点设备接收时代切换确认消息,其中,时代切换请求消息是在第一随机数满足时代切换触发条件时由备份节点设备发送的,第一随机数是在确定需要执行时代切换时在备份节点设备处生成的,时代切换确认消息是响应于备份节点设备从区块链系统中的除了备份节点之外的网络节点接收到的请求确认消息的数量超过预定数量,由备份节点发送的。
应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器1310进行本公开的各个实施例中以上结合图1-11描述的各种操作和功能。
根据一个实施例,提供了一种例如机器可读介质的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本公开的各个实施例中以上结合图1-11描述的各种操作和功能。
在根据本公开的实施例提供的可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。
在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的一部分。
可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD-RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。
上述对本说明书特定实施例进行了描述。其他实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其他实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。
以上结合附图详细描述了本公开的实施例的可选实施方式,但是,本公开的实施例并不限于上述实施方式中的具体细节,在本公开的实施例的技术构思范围内,可以对本公开的实施例的技术方案进行多种简单变型,这些简单变型均属于本公开的实施例的保护范围。
本公开内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本公开内容。对于本领域普通技术人员来说,对本公开内容进行的各种修改是显而易见的,并且,也可以在不脱离本公开内容的保护范围的情况下,将本文所定义的一般性原理应用于其他变型。因此,本公开内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。