CN109586949A - 区块生成方法及计算机存储介质 - Google Patents
区块生成方法及计算机存储介质 Download PDFInfo
- Publication number
- CN109586949A CN109586949A CN201811206993.2A CN201811206993A CN109586949A CN 109586949 A CN109586949 A CN 109586949A CN 201811206993 A CN201811206993 A CN 201811206993A CN 109586949 A CN109586949 A CN 109586949A
- Authority
- CN
- China
- Prior art keywords
- block
- new block
- new
- alliance
- request
- 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.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/06—Management of faults, events, alarms or notifications
- H04L41/0654—Management of faults, events, alarms or notifications using network fault recovery
- H04L41/0663—Performing the actions predefined by failover planning, e.g. switching to standby network elements
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明实施例提供一种区块生成方法及计算机存储介质,其中,所述区块生成方法,应用于联盟区块链,所述联盟区块链不具有主节点,所述方法包括:接收所述联盟区块链中的节点发起的新区块生成请求,其中,所述新区块生成请求中携带有所请求的新区块的编号和对应的区块内容的信息;对所述新区块的编号进行校验,对校验成功的所述新区块的编号对应的区块内容的信息进行校验,并在校验成功后预生成新区块;再次对所述新区块的编号进行校验,并在校验成功后向所述联盟区块链中的所有节点发送确认消息;判断所述所有节点对所述确认消息是否达成共识,若是,则根据预生成的所述新区块生成发起所述新区块生成请求的节点的新区块。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种区块生成方法及计算机存储介质。
背景技术
区块链是一种利用了分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链分为三类,分别是:公有区块链、联盟区块链(也称联合区块链、行业区块链)、和私有区块链三种。
其中,在目前的联盟区块链中,为了快速且正确地在区块链内部对某个数据的值达成一致,会使用共识机制,如,以PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错)算法作为共识机制。在这种共识机制下,需要由联盟区块链全部节点选举出一个主节点,在需要生成新的区块时,由该主节点负责生成新区块。
但是,这种现有的联盟区块链生成新区块的方式中,在某些情况下,如发生主节点故障,或者发生主节点选举时,都无法生成新区块。由此,进一步导致无法保证在联盟区块链内部达到数据一致性。
发明内容
有鉴于此,本发明实施例所解决的技术问题之一在于提供一种区块生成方法及计算机存储介质,用以解决上述问题。
本发明实施例提供一种区块生成方法,应用于联盟区块链,所述联盟区块链不具有主节点,所述方法包括:接收所述联盟区块链中的节点发起的新区块生成请求,其中,所述新区块生成请求中携带有所请求的新区块的编号和对应的区块内容的信息;对所述新区块的编号进行校验,对校验成功的所述新区块的编号对应的区块内容的信息进行校验,并在校验成功后预生成新区块;再次对所述新区块的编号进行校验,并在校验成功后向所述联盟区块链中的所有节点发送确认消息;判断所述所有节点对所述确认消息是否达成共识,若是,则根据预生成的所述新区块生成发起所述新区块生成请求的节点的新区块。
本发明实施例还提供一种计算机可读介质,所述计算机存储介质存储有可读程序,所述可读程序应用于联盟区块链,所述联盟区块链不具有主节点,所述可读程序包括:用于接收所述联盟区块链中的节点发起的新区块生成请求的指令,其中,所述新区块生成请求中携带有所请求的新区块的编号和对应的区块内容的信息;用于对所述新区块的编号进行校验,对校验成功的所述新区块的编号对应的区块内容的信息进行校验,并在校验成功后预生成新区块的指令;用于再次对所述新区块的编号进行校验,并在校验成功后向所述联盟区块链中的所有节点发送确认消息的指令;用于判断所述所有节点对所述确认消息是否达成共识,若是,则根据预生成的所述新区块生成发起所述新区块生成请求的节点的新区块的指令。
由以上技术方案可见,本发明实施例提供的区块生成方案中,不再在联盟区块链中使用主节点,为保证在无主节点情况下的区块正常生成,本发明实施例提供的方案使用了编号校验机制,在接收到新区块生成请求后,即对待生成的区块(即所述新区块)的编号进行校验,以根据编号确定待生成的区块的顺序,避免区块链分叉;进而,在预生成新区块后,再次对待生成的区块的编号进行校验,以保证该区块在处理阶段仍为最新的待生成的区块。由此,在没有主节点的情况下,联盟区块链也可以保证新区块的生成顺序和唯一性,也有效解决了现有的联盟区块链生成新区块的过程中,当发生主节点故障或者发生主节点选举时,无法生成新区块,进而无法保证在联盟区块链内部达到数据一致性的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1示出了根据本发明实施例一的一种区块生成方法的步骤流程图;
图2示出了根据本发明实施例二的一种区块生成方法的步骤流程图。
具体实施方式
为了使本领域的人员更好地理解本发明实施例中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明实施例一部分实施例,而不是全部的实施例。基于本发明实施例中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本发明实施例保护的范围。
下面结合本发明实施例附图进一步说明本发明实施例具体实现。
实施例一
参照图1,示出了根据本发明实施例一的一种区块生成方法的步骤流程图。
本实施例的区块生成方法应用于联盟区块链,与传统的联盟区块链不同,本实施例中的联盟区块链不具有主节点,在生成新区块时,为达到数据一致性,维持联盟区块链的秩序,采用了新区块编号校验的方式。
具体地,本实施例的区块生成方法包括以下步骤:
步骤S102:接收联盟区块链中的节点发起的新区块生成请求。
其中,新区块生成请求中携带有所请求的新区块的编号和对应的区块内容的信息。
联盟区块链中的任何节点在需要时,都可以发出新区块生成请求,以请求生成新的区块。该新区块生成请求向全网广播,也即,向联盟区块链中的所有节点包括自身节点发送该新区块生成请求。
本实施例从联盟区块链中的一个节点的角度,对区块生成方法进行说明,但本领域技术人员应当明了的是,该节点可以为联盟区块链中的任意节点,或者可以说,联盟区块链中的所有节点对新区块生成请求的处理都可参照本发明实施例实现。
所述新区块生成请求中携带有待生成的区块的编号即所述所请求的新区块的编号和新区块对应的区块内容的信息。每一个新区块都有一个编号,根据该编号可以确定该新区块是否已经生成,其在联盟区块链中的位置及链接关系等,在实际应用中,本领域技术人员可以采用任意适当的、符合区块链规范的编号,能唯一标识区块且可表征其在区块中的位置即可。而对于区块内容的信息,本领域技术人员也可以根据实际需求,采用任意适当的方式实现,如,新区块的区块内容的摘要信息,等等,本发明实施例对此不作限制。
步骤S104:对新区块的编号进行校验,对校验成功的新区块的编号对应的区块内容的信息进行校验,并在校验成功后预生成新区块。
本步骤中,通过对新区块的编号进行校验,既可实现对编号的顺序的验证,也可以防止联盟区块链分叉。在对新区块的编号进行校验时,可以根据新区块的编号与本地已存在的最新区块的编号的关系进行校验。在编号校验成功后,进一步地,再进行区块内容的信息的校验,以确定是否符合生成区块的内容要求。
若编号校验及内容校验均成功,则可以预生成新区块。在校验成功后即预生成新区块,可以有效提升新区块的生成效率,节约新区块生成程序。其中,新区块生成的具体实现可以参照相关区块链中区块的生成及其规范实现,在此不再赘述。
步骤S106:再次对新区块的编号进行校验,并在校验成功后向联盟区块链中的所有节点发送确认消息。
因在区块链中,每个节点随时都可以进行生成新区块的请求和操作,为保证某个新区块生成的准确性,本步骤中,在预生成新区块后,再次对新区块的编号进行校验,以保证该区块在处理阶段仍为最新的待生成的区块。
在再次校验成功后,当前节点向联盟区块链中的所有节点(包括自身节点)发送确认消息,以指示本节点已做好新区块生成准备。
步骤S108:判断联盟区块链的所有节点对确认消息是否达成共识,若是,则根据预生成的新区块生成发起新区块生成请求的节点的新区块。
区块链作为一种先进的分布式***,解决了在不可信信道上传输可信信息的问题。在区块链中,由于点对点网络下存在较高的网络延迟性,使得各个节点所观察到交易事务(本实施例中具体为新区块生成)的先后顺序出现一定差异,因此区块链里也需要一套机制,以在一定的时间内对发生事务的先后顺序达成共识,这就是共识机制。
共识机制在区块链内起到决定谁负责生成新区块以及维护区块链统一的作用,目前的共识机制基于Paxos算法演化而来。Paxos算法是一种基于消息传递模型的一致性算法,其可以保障在一个分布式数据库***中,如果各节点的初始状态一致,每个节点执行相同的操作序列,那么所有节点最后能得到一个一致的状态。目前区块链的共识机制大致可以分为PoW(工作量证明)、PoS(权益证明)、PBFT(实用拜占庭容错算法)等。
本步骤中,在通过联盟区块链的共识机制确定所有节点对所述确认消息达成了共识后,即可生成新区块,具体地,可以利用之前预生成的新区块直接进行新区块生成操作。
通过本实施例,不再在联盟区块链中使用主节点,为保证在无主节点情况下的区块正常生成,使用了编号校验机制,在接收到新区块生成请求后,即对待生成的区块(即所述新区块)的编号进行校验,以根据编号确定待生成的区块的顺序,避免区块链分叉;进而,在预生成新区块后,再次对待生成的区块的编号进行校验,以保证该区块在处理阶段仍为最新的待生成的区块。由此,在没有主节点的情况下,联盟区块链也可以保证新区块的生成顺序和唯一性,也有效解决了现有的联盟区块链生成新区块的过程中,当发生主节点故障或者发生主节点选举时,无法生成新区块,进而无法保证在联盟区块链内部达到数据一致性的问题。
本实施例的区块生成方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:服务器、移动终端(如平板电脑、手机等)和PC机等。
实施例二
参照图2,示出了根据本发明实施例二的一种区块生成方法的步骤流程图。
本实施例以一个具体实例的形式对本发明实施例提供的区块生成方法进行说明,与实施例一类似,本实施例的区块生成方法也应用于联盟区块链,在该联盟区块链中使用PBFT算法实现共识机制,且该联盟区块链不具有主节点。
与传统PBFT类似,本实施例中也采用PBFT算法,将新区块的生成从逻辑上划分为五个阶段,分别为:request阶段、pre-prepare阶段、prepare阶段、commit阶段、执行并reply阶段。
基于以上场景,本实施例的区块生成方法包括以下步骤:
步骤S202:接收联盟区块链中的节点发起的新区块生成请求。
其中,新区块生成请求中携带有所请求的新区块的编号和对应的区块内容的信息。
在一种可行方式中,具体到PBFT的各阶段,本步骤可以实现为:在区块生成处理的第二阶段接收所述联盟区块链中的节点在第一阶段发起的新区块生成请求和根据所述新区块生成请求生成的第一状态消息;其中,第一状态消息用于指示新区块处于第一状态,第一状态用于指示新区块处于待进行预生成处理的状态。通过设置状态和状态消息的方式,可以最大限度与PBFT算法保持一致,减轻算法复杂度,节约新区块生成成本。其中,所述第一阶段为request阶段,所述第一状态为pre-prepare状态,所述第一状态消息为pre-prepare状态消息;所述第二阶段为pre-prepare阶段。
结合到本实施例的具体应用场景,例如,在request阶段,联盟区块链中的某个节点A发起构建新区块Block请求(即新区块生成请求),节点A设置该新区块的状态为pre-prepare状态(即第一状态),向全网广播该状态消息(即第一状态消息)。
而对于联盟区块链中的其它节点,则在pre-prepare阶段的初始期接收该消息,以其中的一个节点如节点B为例,节点B与其它节点一样,会接收节点A发起的上述构建新区块Block请求,且该请求中携带有新区块Block的编号和区块内容的信息。需要说明的是,上述描述以不同于发出构建新区块Block请求的节点A的其它节点为例,但本领域技术人员应当明了的是,上述节点B可以为联盟区块链中的任意节点,包括节点A自身。可见,在具体应用场景中,本步骤发生于pre-prepare阶段的初始期。
步骤S204:检验新区块生成请求是否为重复请求;若是,则不对新区块生成请求进行处理;若否,则执行步骤S206。
结合到本实施例的具体应用场景,例如,在pre-prepare阶段,节点B收到构建新区块Block请求,校验是否收到了重复请求;若收到的是重复请求,则拒绝处理该请求;若不是重复请求,即是新请求,则转入步骤S206进行处理。可见,在具体应用场景中,本步骤发生于pre-prepare阶段初始期之后的中间期。
步骤S206:对新区块的编号进行校验,对校验成功的新区块的编号对应的区块内容的信息进行校验,并在校验成功后预生成新区块。
在一种可行方式中,本步骤可以实现为:对新区块的编号进行编号校验,若编号校验失败,则不再对新区块生成请求进行处理;若编号校验成功,则校验所述新区块的区块内容的信息,并预生成新区块,若预生新成区块失败,则不再对新区块生成请求进行处理;若预生成区块成功,则将所述新区块加入准备队列。通过这种方式,可以避免新区块生成过程中的意外情况导致区块链陷入死循环,进而导致整个区块链出现异常或崩溃。
其中,可选地,对新区块的编号进行校验可以包括:基于新区块对应的hash值遍历新区块所有投票信息,若遍历结果指示新区块已经投票,则编号校验失败;若新区块的编号小于等于当前区块的编号,则编号校验失败;若新区块的编号大于当前区块的编号,则编号校验成功。通过上述方式,能够有效确定新区块生成请求是否有效。
区块链的hash值(哈希值)能够准确而唯一的识别并标识一个区块,区块链中的任何一个节点都能够通过简单的哈希计算获得这个区块的哈希值。若hash值对应的区块曾经进行过投票操作,则表明该区块已被建立过,不应再次对请求进行处理,编号校验失败。
在区块链中,区块是顺序编号和生成的,当前区块即为已建立成功的最新区块,其对应的编号也为最新的编号,若请求生成的新区块的编号比当前区块的编号还小或者等于当前区块的编号,则说明其应为已经生成的区块(比当前区块的编号小)或者所述新区块生成请求为重复请求(等于当前区块的编号),编号校验失败,反之,则编号校验成功。
而对区块内容的信息的校验则可以由本领域技术人员根据实际需求,采用任意适当的方式实现,如校验码、冗余校验,等等,本发明实施例对此不作限制。
在编号校验及区块内容的信息校验均成功后,则可以预生成新区块,其中,预生成新区块的具体实现可以由本领域技术人员参照现有区块链中新区块的生成方式实现,或者,也可以采用其它任意适当方式实现,本发明实施例对此不作限制。
此外,可选地,在编号校验及区块内容的信息校验均成功,且预生成了新区块之后,也即在本步骤之后,还可以将新区块的区块状态设置为第二状态,并向联盟区块链中的所有节点发送对应的第二状态消息,其中,第二状态用于指示所述新区块处于待进行确认处理的状态。通过设置状态和状态消息的方式,可以最大限度与PBFT算法保持一致,减轻算法复杂度,节约新区块生成成本。
具体到PBFT的各阶段,本步骤可以实现为:在所述第二阶段对所述新区块的编号进行校验,对校验成功的所述新区块的编号对应的区块内容的信息进行校验,在校验成功后预生成新区块,并将所述新区块的区块状态设置为第二状态,向所述联盟区块链中的所有节点发送对应的第二状态消息,所述第二状态用于指示所述新区块处于待进行确认处理的状态。其中,所述第二阶段为pre-prepare阶段,所述第二状态为prepare状态,所述第二状态消息为prepare状态消息。
结合到本实施例的具体应用场景,例如,在pre-prepare阶段,节点B对请求的Block的编号进行校验;如当前比在prepare阶段靠后的阶段中,已经出现了认证该Block的编号的投票,则编号校验失败,不处理节点A发起的构建新区块Block请求;而若编号校验成功,则再校验区块内容的信息,若信息校验失败,则不处理节点A发起的构建新区块Block请求,若信息校验成功,则预生成新区块;若执行预生成新区块的操作失败则不处理所述构建新区块Block请求,若执行预生成新区块的操作成功,则将预生成的新区块加入prepare队列,并设置新区块状态为prepare状态(即第二状态),向全网广播该状态消息(即第二状态消息)。可见,在具体应用场景中,本步骤发生于pre-prepare阶段中间期之后,可以认为是pre-prepare阶段的后期。
需要说明的是,上述以根据区块有无投票信息来进行编号校验,但如前所述,不限于该种编号校验方式,在编号校验时,可以:1,遍历该新区块状态阶段所有投票信息,若包含新区块hash值对应的区块已经投票,则编号校验失败;2,若待投票的区块编号小于或等于当前区块的编号,则编号校验失败;3,若待投票的区块编号大于当前区块的编号,则编号校验成功。通过编号校验,可以有效防止区块链分叉,实现区块编号的顺序验证,保证新区块生成的正确性和有效性。
步骤S208:再次对新区块的编号进行校验,并在校验成功后向联盟区块链中的所有节点发送确认消息。
其中,对新区块的编号进行再次校验的方式与步骤S206中相同,在此不再赘述。
在具体实现时,可以再次对所述新区块的编号进行编号校验,若编号校验失败,则不再对所述新区块生成请求进行处理;而若编号校验成功,则向联盟区块链中的所有节点发送提交消息,以保证联盟区块链的有效性和健壮性。
在一种可行方式中,所述在校验成功后向联盟区块链中的所有节点发送确认消息包括:在校验成功后,将所述新区块的区块状态设置为第三状态,并将对应的第三状态消息作为确认消息,向联盟区块链中的所有节点发送,其中,第三状态用于指示所述新区块处于待进行提交处理的状态。通过设置状态和状态消息的方式,可以最大限度与PBFT算法保持一致,减轻算法复杂度,节约新区块生成成本。
具体到PBFT的各阶段,本步骤可以实现为:在所述区块生成处理的第三阶段再次对所述新区块的编号进行校验,并在校验成功后,将所述新区块的区块状态设置为第三状态,并将对应的第三状态消息作为确认消息,向所述联盟区块链中的所有节点发送,其中,所述第三状态用于指示所述新区块处于待进行提交处理的状态。其中,所述第三阶段为prepare阶段,所述第三状态为commit状态,所述第三状态消息为commit状态消息。
结合到本实施例的具体应用场景,例如,在prepare阶段,节点B再次对Block的编号进行编号校验;若编号校验不成功,则不处理所述构建新区块Block请求;若编号校验成功,则设置Block状态为commit状态(即第三状态),并向全网广播该状态消息(即第三状态消息)。可见,在具体应用场景中,本步骤发生于prepare阶段。
步骤S210:判断联盟区块链的所有节点对确认消息是否达成共识,若是,则根据预生成的新区块生成发起新区块生成请求的节点的新区块;若否,则不进行新区块生成处理。
在区块链中,当所有节点均对新区块生成请求做出响应,如反馈确认消息,则认为所有节点达成了共识。对于区块链中的每个节点,其确认消息将向区块链中的所有节点(包括自身节点)发送。
针对当前节点,其可以通过判断是否接收到联盟区块链中所有节点的确认消息,来确定是否联盟区块链中的所有节点达成了共识。
在一种可行方式中,当所述确认消息为提交状态消息时,则所述判断所述所有节点对所述确认消息是否达成共识可以包括:判断是否接收到联盟区块链中的所有节点的提交状态消息;若是,则确定所述所有节点达成共识;否则,则确定未达成共识。
而在根据预生成的所述新区块生成发起所述新区块生成请求的节点的新区块时,则可以校验当前节点本地是否已生成过所述新区块;若是,则不再生成;若否,则从预生成的所述新区块中获取元数据信息和内容数据,将所述元数据信息写入联盟区块链,并在本地保存所述内容数据。
此外,可选地,在根据预生成的所述新区块生成发起所述新区块生成请求的节点的新区块时,还可以将所述新区块的区块状态设置为第四状态,并根据第四状态和预生成的新区块,生成发起所述新区块生成请求的节点的新区块,其中,第四状态用于指示所述新区块处于已进行了提交处理的状态。通过设置状态和状态消息的方式,可以最大限度与PBFT算法保持一致,减轻算法复杂度,节约新区块生成成本。
具体到PBFT的各阶段,本步骤可以实现为:在所述区块生成处理的第四阶段判断所述所有节点对所述确认消息是否达成共识,若是,则将所述新区块的区块状态设置为第四状态,并根据所述第四状态和预生成的所述新区块,生成发起所述新区块生成请求的节点的新区块,并向所述所有节点发送生成的所述新区块的信息,其中,所述第四状态用于指示所述新区块处于已进行了提交处理的状态;在所述区块生成处理的第五阶段,接收所述新区块的信息,并根据所述新区块的信息,对本地是否已生成过所述新区块进行校验,根据校验结果进行所述新区块生成请求的处理。其中,所述第四阶段为commit阶段,所述第四状态为committed状态,所述第四状态消息为committed状态消息,所述第五阶段为执行及reply阶段。
结合到本实施例的具体应用场景,例如,在commit阶段,每个节点收到commit状态消息后进行计数累计;因PBFT算法最大能容忍三分之一的节点有问题,也即,PBFT需要至少三分之二的节点的确认消息以便达成共识,因此,若每个节点收到超过2f+1(其中,f表示所有节点中问题节点的个数,0<=f<=(N-1)/3,N为所有节点的数量)个不同节点(包含自身节点)的commit状态消息后,认为该新区块的处理在全网(即联盟区块链的所有节点)已经达成一致,进入committed状态(即第四状态),将该新区块的元数据信息写入联盟区块链,并将该新区块的全部内容保存在本地如本地的关系型数据库中,如sqlite数据库中。
进一步地,在执行及reply阶段,当前节点如节点B向全网(即联盟区块链的所有节点)广播新区块已经生成的消息;联盟区块链中的每个节点在收到新区块已生成的消息后,校验本地是否已经生成过该区块,若生成过则忽略该消息;若未生成,则在本地进行新区块的生成处理,即将新区块的元数据信息写入联盟区块链,并将新区块的全部内容保存在本地如本地的关系型数据库,如sqlite数据库中。
可见,在具体应用场景中,本步骤中的判断联盟区块链的所有节点对确认消息是否达成共识发生在commit阶段;而本步骤中的根据预生成的新区块生成发起新区块生成请求的节点的新区块则在commit阶段和执行及reply阶段均有处理。
可见,通过本实施例,对于联盟区块链,无需再从全网节点选举出一个主节点(Leader)来生成新区块,任何节点都可以构建区块后全网广播。为保证在无主节点情况下的区块正常生成,使用了编号校验机制,在接收到新区块生成请求后,即对待生成的区块(即所述新区块)的编号进行校验,以根据编号确定待生成的区块的顺序,避免区块链分叉;进而,在预生成新区块后,再次对待生成的区块的编号进行校验,以保证该区块在处理阶段仍为最新的待生成的区块。由此,在没有主节点的情况下,联盟区块链也可以保证新区块的生成顺序和唯一性,也有效解决了现有的联盟区块链生成新区块的过程中,当发生主节点故障或者发生主节点选举时,无法生成新区块,进而无法保证在联盟区块链内部达到数据一致性的问题。
本实施例的区块生成方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:服务器、移动终端(如平板电脑、手机等)和PC机等。
实施例三
本发明实施例还提供了一种计算机可读介质,所述计算机存储介质存储有可读程序,所述可读程序应用于联盟区块链,所述联盟区块链不具有主节点,所述可读程序包括:用于接收所述联盟区块链中的节点发起的新区块生成请求的指令,其中,所述新区块生成请求中携带有所请求的新区块的编号和对应的区块内容的信息;用于对所述新区块的编号进行校验,对校验成功的所述新区块的编号对应的区块内容的信息进行校验,并在校验成功后预生成新区块的指令;用于再次对所述新区块的编号进行校验,并在校验成功后向所述联盟区块链中的所有节点发送确认消息的指令;用于判断所述所有节点对所述确认消息是否达成共识,若是,则根据预生成的所述新区块生成发起所述新区块生成请求的节点的新区块的指令。
可选地,所述用于对所述新区块的编号进行校验的指令,包括:用于基于所述新区块对应的hash值遍历所述新区块所有投票信息,若遍历结果指示所述新区块已经投票,则编号校验失败的指令;用于若所述新区块的编号小于等于当前区块的编号,则编号校验失败的指令;用于若所述新区块的编号大于所述当前区块的编号,则编号校验成功的指令。
可选地,所述可读程序还包括:在所述用于对所述新区块的编号进行校验的指令之前,用于检验所述新区块生成请求是否为重复请求的指令;用于若是,则不对所述新区块生成请求进行处理的指令;用于若否,则执行所述对所述新区块的编号进行校验的指令。
可选地,用于对所述新区块的编号进行校验,对校验成功的所述新区块的编号对应的区块内容的信息进行校验,并在校验成功后预生成新区块的指令,包括:用于对所述新区块的编号进行编号校验,若编号校验失败,则不再对所述新区块生成请求进行处理的指令;用于若编号校验成功,则校验所述新区块的区块内容的信息,并预生成新区块,若预生新成区块失败,则不再对所述新区块生成请求进行处理的指令;用于若预生成区块成功,则将所述新区块加入准备队列的指令。
可选地,所述用于再次对所述新区块的编号进行校验,并在校验成功后向所述联盟区块链中的所有节点发送确认消息的指令,包括:用于再次对所述新区块的编号进行编号校验,若编号校验失败,则不再对所述新区块生成请求进行处理的指令;用于若编号校验成功,则向所述联盟区块链中的所有节点发送确认消息的指令。
可选地,所述确认消息为提交状态消息;所述用于判断所述所有节点对所述确认消息是否达成共识的指令,包括:用于判断是否接收到所述联盟区块链中的所有节点的提交状态消息的指令;用于若是,则确定所述所有节点达成共识的指令;用于否则,则确定未达成共识的指令。
可选地,所述用于根据预生成的所述新区块生成发起所述新区块生成请求的节点的新区块的指令,包括:用于校验本地是否已生成过所述新区块的指令;用于若是,则不再生成的指令;用于若否,则从预生成的所述新区块中获取元数据信息和内容数据,将所述元数据信息写入所述联盟区块链,并在本地保存所述内容数据的指令。
可选地,所述用于接收所述联盟区块链中的节点发起的新区块生成请求的指令包括:用于在区块生成处理的第二阶段接收所述联盟区块链中的节点在第一阶段发起的新区块生成请求和根据所述新区块生成请求生成的第一状态消息的指令;其中,所述第一状态消息用于指示所述新区块处于第一状态,所述第一状态用于指示所述新区块处于待进行预生成处理的状态;
所述用于对所述新区块的编号进行校验,对校验成功的所述新区块的编号对应的区块内容的信息进行校验,并在校验成功后预生成新区块的指令包括:用于在所述第二阶段对所述新区块的编号进行校验,对校验成功的所述新区块的编号对应的区块内容的信息进行校验的指令,用于在校验成功后预生成新区块,并将所述新区块的区块状态设置为第二状态,向所述联盟区块链中的所有节点发送对应的第二状态消息的指令,所述第二状态用于指示所述新区块处于待进行确认处理的状态;
所述用于再次对所述新区块的编号进行校验,并在校验成功后向所述联盟区块链中的所有节点发送确认消息的指令包括:用于在所述区块生成处理的第三阶段再次对所述新区块的编号进行校验,并在校验成功后,将所述新区块的区块状态设置为第三状态的指令,用于将对应的第三状态消息作为确认消息,向所述联盟区块链中的所有节点发送的指令,其中,所述第三状态用于指示所述新区块处于待进行提交处理的状态;
所述用于判断所述所有节点对所述确认消息是否达成共识,若是,则根据预生成的所述新区块生成发起所述新区块生成请求的节点的新区块的指令包括:用于在所述区块生成处理的第四阶段判断所述所有节点对所述确认消息是否达成共识的指令,用于若是,则将所述新区块的区块状态设置为第四状态,并根据所述第四状态和预生成的所述新区块,生成发起所述新区块生成请求的节点的新区块,并向所述所有节点发送生成的所述新区块的信息的指令,其中,所述第四状态用于指示所述新区块处于已进行了提交处理的状态;用于在所述区块生成处理的第五阶段,接收所述新区块的信息,并根据所述新区块的信息,对本地是否已生成过所述新区块进行校验,根据校验结果进行所述新区块生成请求的处理的指令。
可选地,所述第一阶段为request阶段,所述第一状态消息为pre-prepare状态消息;所述第二阶段为pre-prepare阶段,所述第二状态消息为prepare状态消息;所述第三阶段为prepare阶段,所述第三状态消息为commit状态消息;所述第四阶段为commit阶段,所述第四状态消息为committed状态消息;所述第五阶段为执行及reply阶段。
通过本实施例的计算机可读介质,不再在联盟区块链中使用主节点,为保证在无主节点情况下的区块正常生成,本发明实施例提供的方案使用了编号校验机制,在接收到新区块生成请求后,即对待生成的区块(即所述新区块)的编号进行校验,以根据编号确定待生成的区块的顺序,避免区块链分叉;进而,在预生成新区块后,再次对待生成的区块的编号进行校验,以保证该区块在处理阶段仍为最新的待生成的区块。由此,在没有主节点的情况下,联盟区块链也可以保证新区块的生成顺序和唯一性,也有效解决了现有的联盟区块链生成新区块的过程中,当发生主节点故障或者发生主节点选举时,无法生成新区块,进而无法保证在联盟区块链内部达到数据一致性的问题。
需要指出,根据实施的需要,可将本发明实施例中描述的各个部件/步骤拆分为更多部件/步骤,也可将两个或多个部件/步骤或者部件/步骤的部分操作组合成新的部件/步骤,以实现本发明实施例的目的。
上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可存储在记录介质(诸如CD ROM、RAM、软盘、硬盘或磁光盘)中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件(诸如ASIC或FPGA)的记录介质上的这样的软件处理。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件(例如,RAM、ROM、闪存等),当所述软件或计算机代码被计算机、处理器或硬件访问且执行时,实现在此描述的区块生成方法。此外,当通用计算机访问用于实现在此示出的区块生成方法的代码时,代码的执行将通用计算机转换为用于执行在此示出的区块生成方法的专用计算机。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明实施例的范围。
以上实施方式仅用于说明本发明实施例,而并非对本发明实施例的限制,有关技术领域的普通技术人员,在不脱离本发明实施例的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明实施例的范畴,本发明实施例的专利保护范围应由权利要求限定。
Claims (10)
1.一种区块生成方法,应用于联盟区块链,其特征在于,所述联盟区块链不具有主节点,所述方法包括:
接收所述联盟区块链中的节点发起的新区块生成请求,其中,所述新区块生成请求中携带有所请求的新区块的编号和对应的区块内容的信息;
对所述新区块的编号进行校验,对校验成功的所述新区块的编号对应的区块内容的信息进行校验,并在校验成功后预生成新区块;
再次对所述新区块的编号进行校验,并在校验成功后向所述联盟区块链中的所有节点发送确认消息;
判断所述所有节点对所述确认消息是否达成共识,若是,则根据预生成的所述新区块生成发起所述新区块生成请求的节点的新区块。
2.根据权利要求1所述的方法,其特征在于,所述对所述新区块的编号进行校验,包括:
基于所述新区块对应的hash值遍历所述新区块所有投票信息,若遍历结果指示所述新区块已经投票,则编号校验失败;
若所述新区块的编号小于等于当前区块的编号,则编号校验失败;
若所述新区块的编号大于所述当前区块的编号,则编号校验成功。
3.根据权利要求2所述的方法,其特征在于,在所述对所述新区块的编号进行校验之前,所述方法还包括:
检验所述新区块生成请求是否为重复请求;若是,则不对所述新区块生成请求进行处理;若否,则执行所述对所述新区块的编号进行校验的步骤。
4.根据权利要求3所述的方法,其特征在于,对所述新区块的编号进行校验,对校验成功的所述新区块的编号对应的区块内容的信息进行校验,并在校验成功后预生成新区块,包括:
对所述新区块的编号进行编号校验,若编号校验失败,则不再对所述新区块生成请求进行处理;
若编号校验成功,则校验所述新区块的区块内容的信息,并预生成新区块,若预生新成区块失败,则不再对所述新区块生成请求进行处理;
若预生成区块成功,则将所述新区块加入准备队列。
5.根据权利要求2所述的方法,其特征在于,所述再次对所述新区块的编号进行校验,并在校验成功后向所述联盟区块链中的所有节点发送确认消息,包括:
再次对所述新区块的编号进行编号校验,若编号校验失败,则不再对所述新区块生成请求进行处理;
若编号校验成功,则向所述联盟区块链中的所有节点发送确认消息。
6.根据权利要求2所述的方法,其特征在于,所述确认消息为提交状态消息;
所述判断所述所有节点对所述确认消息是否达成共识,包括:判断是否接收到所述联盟区块链中的所有节点的提交状态消息;若是,则确定所述所有节点达成共识;否则,则确定未达成共识。
7.根据权利要求1所述的方法,其特征在于,所述根据预生成的所述新区块生成发起所述新区块生成请求的节点的新区块,包括:
校验本地是否已生成过所述新区块;
若是,则不再生成;
若否,则从预生成的所述新区块中获取元数据信息和内容数据,将所述元数据信息写入所述联盟区块链,并在本地保存所述内容数据。
8.根据权利要求1-7任一项所述的方法,其特征在于,
所述接收所述联盟区块链中的节点发起的新区块生成请求包括:在区块生成处理的第二阶段接收所述联盟区块链中的节点在第一阶段发起的新区块生成请求和根据所述新区块生成请求生成的第一状态消息;其中,所述第一状态消息用于指示所述新区块处于第一状态,所述第一状态用于指示所述新区块处于待进行预生成处理的状态;
所述对所述新区块的编号进行校验,对校验成功的所述新区块的编号对应的区块内容的信息进行校验,并在校验成功后预生成新区块包括:在所述第二阶段对所述新区块的编号进行校验,对校验成功的所述新区块的编号对应的区块内容的信息进行校验,在校验成功后预生成新区块,并将所述新区块的区块状态设置为第二状态,向所述联盟区块链中的所有节点发送对应的第二状态消息,所述第二状态用于指示所述新区块处于待进行确认处理的状态;
所述再次对所述新区块的编号进行校验,并在校验成功后向所述联盟区块链中的所有节点发送确认消息包括:在所述区块生成处理的第三阶段再次对所述新区块的编号进行校验,并在校验成功后,将所述新区块的区块状态设置为第三状态,并将对应的第三状态消息作为确认消息,向所述联盟区块链中的所有节点发送,其中,所述第三状态用于指示所述新区块处于待进行提交处理的状态;
所述判断所述所有节点对所述确认消息是否达成共识,若是,则根据预生成的所述新区块生成发起所述新区块生成请求的节点的新区块包括:在所述区块生成处理的第四阶段判断所述所有节点对所述确认消息是否达成共识,若是,则将所述新区块的区块状态设置为第四状态,并根据所述第四状态和预生成的所述新区块,生成发起所述新区块生成请求的节点的新区块,并向所述所有节点发送生成的所述新区块的信息,其中,所述第四状态用于指示所述新区块处于已进行了提交处理的状态;在所述区块生成处理的第五阶段,接收所述新区块的信息,并根据所述新区块的信息,对本地是否已生成过所述新区块进行校验,根据校验结果进行所述新区块生成请求的处理。
9.根据权利要求8所述的方法,其特征在于,所述第一阶段为request阶段,所述第一状态消息为pre-prepare状态消息;所述第二阶段为pre-prepare阶段,所述第二状态消息为prepare状态消息;所述第三阶段为prepare阶段,所述第三状态消息为commit状态消息;所述第四阶段为commit阶段,所述第四状态消息为committed状态消息;所述第五阶段为执行及reply阶段。
10.一种计算机可读介质,其特征在于,所述计算机存储介质存储有可读程序,所述可读程序应用于联盟区块链,所述联盟区块链不具有主节点,所述可读程序包括:
用于接收所述联盟区块链中的节点发起的新区块生成请求的指令,其中,所述新区块生成请求中携带有所请求的新区块的编号和对应的区块内容的信息;
用于对所述新区块的编号进行校验,对校验成功的所述新区块的编号对应的区块内容的信息进行校验,并在校验成功后预生成新区块的指令;
用于再次对所述新区块的编号进行校验,并在校验成功后向所述联盟区块链中的所有节点发送确认消息的指令;
用于判断所述所有节点对所述确认消息是否达成共识,若是,则根据预生成的所述新区块生成发起所述新区块生成请求的节点的新区块的指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811206993.2A CN109586949B (zh) | 2018-10-17 | 2018-10-17 | 区块生成方法及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811206993.2A CN109586949B (zh) | 2018-10-17 | 2018-10-17 | 区块生成方法及计算机存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109586949A true CN109586949A (zh) | 2019-04-05 |
CN109586949B CN109586949B (zh) | 2021-04-09 |
Family
ID=65920536
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811206993.2A Active CN109586949B (zh) | 2018-10-17 | 2018-10-17 | 区块生成方法及计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109586949B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110099127A (zh) * | 2019-05-13 | 2019-08-06 | 西安华域网络文化发展有限公司 | 一种区块链数据同步方法、装置、介质和电子设备 |
CN110519287A (zh) * | 2019-08-30 | 2019-11-29 | 腾讯科技(深圳)有限公司 | 一种信息管理方法及相关设备 |
CN111541756A (zh) * | 2020-04-17 | 2020-08-14 | 腾讯科技(深圳)有限公司 | 区块生成方法、装置、节点设备及存储介质 |
CN111630826A (zh) * | 2019-06-05 | 2020-09-04 | 阿里巴巴集团控股有限公司 | 共识***和方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106453636A (zh) * | 2016-11-22 | 2017-02-22 | 深圳银链科技有限公司 | 可信区块生成方法及*** |
CN107146087A (zh) * | 2017-04-11 | 2017-09-08 | 广东网金控股股份有限公司 | 一种基于区块链联盟链的快速共识记账方法及*** |
US20170337534A1 (en) * | 2015-11-06 | 2017-11-23 | Cable Television Laboratories, Inc | Systems and methods for blockchain virtualization and scalability |
CN107807951A (zh) * | 2017-09-18 | 2018-03-16 | 联动优势科技有限公司 | 一种区块链生成方法、数据验证方法、节点及*** |
US20180152304A1 (en) * | 2015-05-05 | 2018-05-31 | ShoCard, Inc. | User Identification Management System and Method |
CN108492103A (zh) * | 2018-02-07 | 2018-09-04 | 北京大学深圳研究生院 | 一种联盟区块链共识方法 |
-
2018
- 2018-10-17 CN CN201811206993.2A patent/CN109586949B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180152304A1 (en) * | 2015-05-05 | 2018-05-31 | ShoCard, Inc. | User Identification Management System and Method |
US20170337534A1 (en) * | 2015-11-06 | 2017-11-23 | Cable Television Laboratories, Inc | Systems and methods for blockchain virtualization and scalability |
CN106453636A (zh) * | 2016-11-22 | 2017-02-22 | 深圳银链科技有限公司 | 可信区块生成方法及*** |
CN107146087A (zh) * | 2017-04-11 | 2017-09-08 | 广东网金控股股份有限公司 | 一种基于区块链联盟链的快速共识记账方法及*** |
CN107807951A (zh) * | 2017-09-18 | 2018-03-16 | 联动优势科技有限公司 | 一种区块链生成方法、数据验证方法、节点及*** |
CN108492103A (zh) * | 2018-02-07 | 2018-09-04 | 北京大学深圳研究生院 | 一种联盟区块链共识方法 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110099127A (zh) * | 2019-05-13 | 2019-08-06 | 西安华域网络文化发展有限公司 | 一种区块链数据同步方法、装置、介质和电子设备 |
CN111630826A (zh) * | 2019-06-05 | 2020-09-04 | 阿里巴巴集团控股有限公司 | 共识***和方法 |
CN111630826B (zh) * | 2019-06-05 | 2022-07-29 | 创新先进技术有限公司 | 共识***和方法 |
CN110519287A (zh) * | 2019-08-30 | 2019-11-29 | 腾讯科技(深圳)有限公司 | 一种信息管理方法及相关设备 |
CN110519287B (zh) * | 2019-08-30 | 2022-08-12 | 腾讯科技(深圳)有限公司 | 一种信息管理方法及相关设备 |
CN111541756A (zh) * | 2020-04-17 | 2020-08-14 | 腾讯科技(深圳)有限公司 | 区块生成方法、装置、节点设备及存储介质 |
CN111541756B (zh) * | 2020-04-17 | 2021-10-15 | 腾讯科技(深圳)有限公司 | 区块生成方法、装置、节点设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109586949B (zh) | 2021-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109586949A (zh) | 区块生成方法及计算机存储介质 | |
WO2021244208A1 (zh) | 区块链的提案消息处理方法、装置、设备以及存储介质 | |
EP3779760B1 (en) | Blockchain-based data processing method and apparatus, and electronic device | |
CN110163755B (zh) | 基于区块链的数据压缩、查询方法及装置和电子设备 | |
EP3480686B1 (en) | Data processing method, cluster manager, resource manager and data processing system | |
WO2020108289A1 (zh) | 一种数据库***、节点和方法 | |
WO2021004058A1 (zh) | 基于区块链的数据处理方法和装置 | |
CN110866289A (zh) | 基于区块链的数据处理方法、装置、服务器及存储介质 | |
CN111241589A (zh) | 一种数据库***、节点和方法 | |
KR20220088956A (ko) | 기밀 지식의 특화된 증명을 제공하는 시스템들 및 방법들 | |
CN111241590A (zh) | 一种数据库***、节点和方法 | |
US11570005B2 (en) | Systems and methods for proving immutability of blockchains | |
CN114039733B (zh) | 一种针对联盟链的存证业务转移方法、装置及设备 | |
CN113037505B (zh) | 一种可信Web应用的实现方法及*** | |
CN110225103B (zh) | 一种业务推荐方法、装置及设备 | |
CN112291321A (zh) | 业务处理方法、装置及*** | |
CN102761520B (zh) | 认证信息处理方法和*** | |
CN111831641A (zh) | 基于pbft共识的交通数据存储方法及装置 | |
CN111209540B (zh) | 信息验证方法、装置和存储介质 | |
CN113592645A (zh) | 数据验证的方法和装置 | |
CN111833051A (zh) | 基于pbft共识的实物抵押数据存储方法及装置 | |
WO2020108288A1 (zh) | 一种数据库***、节点和方法 | |
CN111831851A (zh) | 基于pbft共识的家庭监控数据存储方法及装置 | |
Amiri et al. | Rashnu: Data-dependent order-fairness | |
CN110837536B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |