CN112600698B - 应用于非出块节点的区块链共识方法、系统、设备及介质 - Google Patents
应用于非出块节点的区块链共识方法、系统、设备及介质 Download PDFInfo
- Publication number
- CN112600698B CN112600698B CN202011417721.4A CN202011417721A CN112600698B CN 112600698 B CN112600698 B CN 112600698B CN 202011417721 A CN202011417721 A CN 202011417721A CN 112600698 B CN112600698 B CN 112600698B
- Authority
- CN
- China
- Prior art keywords
- block
- node
- blockchain
- nodes
- latest
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- 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/30—Decision processes by autonomous network management units using voting and bidding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/46—Secure multiparty computation, e.g. millionaire problem
- H04L2209/463—Electronic voting
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Technology Law (AREA)
- Strategic Management (AREA)
- Marketing (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Economics (AREA)
- Development Economics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及应用于非出块节点的区块链共识方法、系统、设备及介质,第一节点、第二节点…第N节点按照预设顺序依次进行打包出块:若当前轮到第x节点出块时,所述第x节点响应于出块验证指令执行验证操作,若出块验证通过,则执行出块操作,同时将所述最新区块发送至网络通讯模块;第一节点、第二节点…第x‑1节点、第x+1节点…第N节点通过网络通讯模块接收所述最新区块,响应于对所述最新区块进行验证指令执行验证操作,若验证通过,则将所述最新区块添加至节点本地数据库的区块链中。本发明能够部分解决或缓解因为网络通讯不佳从而无法达成共识而引起的一系列的问题,有效的提高了区块链的出块率。
Description
技术领域
本发明涉及区块链技术领域、数据处理技术技术领域,尤其涉及应用于非出块节点的区块链共识方法、系统、设备及介质。
背景技术
区块链是一种新型去中心化协议,能安全地存储数字货币交易或其数据,信息不可伪造和篡改,区块链上的交易确认由区块链上的所有节点共同完成,由共识算法保证其一致性,区块链上维护一个公共的账本,公共账本位于存储区块上任何节点见,从而保证其不可伪造和篡改。
一般来说,当网络中多个主机通过异步通讯方式组成网络集群进行协作时,这种异步网络默认是不可靠的,那么在这些不可靠主机之间复制状态需要采取一种机制,以保证每个主机的状态最终达成相同一致性状态,取得共识。具体到区块链网络上,共识问题又引入了新的不确定因素,如:恶意节点、网络延迟,系统可能就会达成错误的共识,从而导致重大错误。
公有区块链一般采取POW共识算法,即工作量证明方案。POW共识需要大量的哈希运算,需要电力和各种算力资源,而且找到合适的哈希值实际上并没有其他的作用。其次网络性能也非常低。而DPOS共识算法虽然出块时间短、效率高,但是对于网络依赖也很大。比如EOS,在进行打包出块时,出块节点需将最新区块数据发送至其他共识节点进行确认,其他共识节点验证通过后出块节点才可以将此最新区块数据添加至区块链并将其同步给其他节点。在真实环境中,因网络不通畅,导致节点主机之间暂时无法通信,那么此时出块节点因无法收到其他共识节点对区块的确认信息,则无法进行正常的打包区块工作。
例如申请号为“CN201910694191.9”的发明专利申请公开了一种基于区块链的区块链共识方法、装置、设备及存储介质,所述的方法应用于所述区块链的第一节点,所述的方法包括:进入第R1轮共识的第一共识阶段,R1为自然数;在满足预定条件时触发计时器开始计时;若所述计时器计时的时长大于或等于预定时长,且保持在第R1轮共识的第一共识阶段,则打包有效投票集;其中,所述有效投票集中包括第一有效投票,所述第一有效投票用于证明所述第一节点进入第R1轮共识的第一共识阶段;广播所述有效投票集;但是该专利方案并不能够克服因为网络不通畅最终导致无法进行正常的打包区块工作的问题。
发明内容
本发明所要解决的技术问题在于克服网络不通畅情况下,节点主机之间暂时无法通信,那么此时出块节点因无法收到其他共识节点对区块的确认信息,则无法进行正常的打包区块工作的问题。
本发明通过以下技术手段实现解决上述技术问题的:
一种区块链共识方法,应用于非出块节点,其特征在于,通过网络通讯模块接收所述最新区块,响应于对所述最新区块进行验证指令执行验证操作,若验证通过,则将所述最新区块添加至节点本地数据库的区块链中,若验证不通过,则舍弃该最新区块。
通过判断当前节点首先自身节点是否可以执行出块操作,若验证通过后,执行出块操作,实现在节点之间短时间内无法通信的情况下依然可以出块,将最新区块发送至其他所有的节点再进行验证,其他所有节点验证过并存入本地区块链数据库中,这样即使在网络不通畅情况下,节点主机之间暂时无法通信,也可以部分解决或缓解因为网络通讯不佳从而无法达成共识而引起的一系列的问题,有效的提高了区块链的出块率。
作为本发明进一步的方案:所述响应于对所述最新区块进行验证指令执行验证操作包括:
所述非出块节点判断所述最新区块是否位于可接受的区块链分叉上、判断出块节点是否存在于所述可出块节点名单中、判断当前时间点是否轮到出块节点进行出块、判断所述最新区块的合法性;
若同时满足位于可接受的区块链分叉上、处于可出块节点名单、轮到出块节点出块、出块合法,则将所述最新区块添加至本地存储的区块链上;
若未同时满足,则舍弃该最新区块。
作为本发明进一步的方案:所述判断所述最新区块是否位于可接受的区块链分叉上包括:
所述非出块节点收到多个区块链分叉时,选择区块链高度最大且区块链中包含了本地区块链数据库中所有不可逆区块的分叉。
作为本发明进一步的方案:所述判断出块节点是否存在于所述可出块节点名单中包括:所述非出块节点通过将出块节点与可出块节点名单中记载的内容进行匹配,若匹配成功,则该出块节点是否位于可出块节点名单中,若匹配不成功,则不在可出块节点名单中。
作为本发明进一步的方案:所述判断当前时间点是否轮到出块节点进行出块包括:非出块节点通过使用公钥来验证区块中包含的出块节点签名,确定所述最新区块是否由第x节点所产生。
作为本发明进一步的方案:所述判断出块是否合法包括:
S2501)、判断读取的区块链数据中区块链高度与预设的第一阈值进行比较,若区块链高度与第一阈值相同时,表示区块链中只存在创始区块中,第x节点满足出块条件;若区块链高度大于第一阈值时,执行步骤2502);
S2502)、将区块链高度与最小节点确认数进行比较,若区块链高度小于最小节点确认数时,则判断区块链中是否存在出块节点出的区块,若区块链中不存在第x节点出的区块,则符合出块条件,若区块链中不存在当前节点出的区块,则不符合出块条件;
若区块链高度大于等于最小节点确认数时,则从区块链最大高度向前读取N1-1个区块,N1为可出块的节点总数,若第N1-1个区块的高度大于最大高度,此时读取到创世区块为止,并将每个区块所对应的可出块的节点,加上第x节点作为一个集合;
若所述集合中有重复的节点则进行去重,再判断去重后集合的节点数与最小确认数的大小,若去重后的节点数不小于最小节点确认数,则满足出块条件,即出块合法;
S2503)、判断集合中是否有重复的节点,若所述集合中有重复的节点则进行去重,再执行步骤S2504),若无则直接执行步骤S2504);
S2504)、若去重后的集合中节点数不小于最小节点确认数,出块合法。
作为本发明进一步的方案:将所述最新区块添加至节点本地数据库的区块链后还包括:非出块节点将区块链中符合不可逆区块规则所在的高度的区块标记为不可逆区块。
一种区块链共识系统,包括:
非出块节点验证模块,用于通过网络通讯模块接收所述最新区块,响应于对所述最新区块进行验证指令执行验证操作,若验证通过,则将所述最新区块添加至节点本地数据库的区块链中,若验证不通过,则舍弃该最新区块。
一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如所述的区块链共识方法。
一种介质,其上存储有计算机指令,该计算机指令被处理器执行时实现如所述的区块链共识方法。
本发明的优点在于:
1、本发明中,通过判断当前节点首先自身节点是否可以执行出块操作,若验证通过后,执行出块操作,实现在节点之间短时间内无法通信的情况下依然可以出块,将最新区块发送至其他所有的节点再进行验证,其他所有节点验证过并存入本地区块链数据库中,这样即使在网络不通畅情况下,节点主机之间暂时无法通信,也可以部分解决或缓解因为网络通讯不佳从而无法达成共识而引起的一系列的问题,有效的提高了区块链的出块率。
2、本发明能够有效提供因暂时的网络不稳定因素导致区块链效率低下的解决方案,能够在节点之间短时间内无法通信的情况下依然可以出块,通过对现有的区块数据进行验证,确认记账权并打包交易出块,等待网络恢复通畅后与其他节点进行通信、同步数据,克服了由于网络原因而导致的区块链工作效率低,瘫痪等情况。
3、本发明实现了在网络环境不佳的情况下也可以判断当前节点是否可以合法出块的机制,提高了区块链的灵活性和可靠性,利用本发明的技术,可以部分解决或缓解因为网络通讯不佳从而无法达成共识而引起的一系列的问题,有效的提高了区块链的出块率。
4、本发明中,当发现接收的区块链分叉需要回滚的区块高度小于不可逆区块高度时,不进行区块链分叉的区块同步,而是直接舍弃,从而节约网络流量,保证不可逆区块不会因为区块链分叉而被重写。
5、本发明中,当前可出块的节点读取本地存储的区块链中的各个区块,识别各个区块的生产节点,并通过生产节点的数量判断当前节点进行出块是否符合最小节点确认数,能够有效的实现在节点之间短时间内无法通信的情况下依然可以出块。
附图说明
图1为本发明实施例1提供的区块链共识方法的流程示意图。
图2为本发明实施例3提供的区块链共识方法应用于出块节点工作流程示意图。
图3为本发明实施例4提供的区块链共识方法应用于非出块节点工作流程示意图。
图4为本发明实施例2提供的区块链共识系统的结构框图。
图5为本发明实施例提供的电子设备的结构框图。
图6是适于用来实现根据本公开一实施方式的区块链共识方法的计算机系统的结构示意图。
图7为本发明区块合法性确认的流程示意图。
具体实施方式
为了使本技术领域的人员更好地理解本公开方案,下面将结合本公开示例性实施例中的附图,对本公开示例性实施例中的技术方案进行清楚、完整地描述。
在本公开的说明书和权利要求书及上述附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如S1、S2等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
下面将结合本公开示例性实施例中的附图,对本公开示例性实施例中的技术方案进行清楚、完整地描述,显然,所描述的示例性实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
实施例1
图1为本发明实施例1提供的区块链共识方法的流程示意图,参阅图1,本公开的实施例方案中,一种区块链共识方法,包括第一节点、第二节点…第N节点,第一节点、第二节点…第N节点按照预设顺序依次进行打包出块,N为任意正整数,x为1、2…N之间的正整数,具体包括以下步骤:
S1、若当前轮到第x节点出块(即某个出块节点),第x节点响应于出块验证指令,若出块验证通过,则执行出块操作,将交易打包为最新区块存入本地区块链数据库中,同时将所述最新区块通过网络通讯模块发送至其他节点处,若验证失败则不执行出块操作;
具体的,所述验证过程包括:第x节点判断自身是否处于可出块节点名单、判断当前时间点是否轮到自身节点出块、出块是否合法,若所述第x节点同时满足处于可出块节点名单中、轮到自身节点出块、出块合法,则执行出块操作;否则禁止进行出块操作。
示例性的,为了方便理解,所述步骤S1可以为:
S11、所述第x节点判断自身节点是否存在于可出块节点名单中,若存在可出块节点名单中,则执行步骤S12,若不在可出块节点名单中,则禁止出块操作;
S12、判断当前时间点是否轮到自身节点出块,若当前时间点为轮到自身节点出块,则执行步骤S13,未轮到自身节点出块,则禁止出块操作;
S13、判断当前出块是否合法,若当前出块合法,则进行出块操作,将交易打包为最新区块,并执行步骤S14,若当前出块不合法,则禁止出块操作;
S14、第x节点将所述最新区块添加至本地存储的区块链上,并发送至网络通讯模块。
S2、第一节点、第二节点…第x-1节点、第x+1节点…第N节点(即N个参与节点中,除了第x节点的其他所有节点,包括可出块而未轮到其出块的节点、无出块权的节点)通过网络通讯模块接收所述最新区块,响应于对所述最新区块进行验证操作,若验证通过,则将所述最新区块添加至节点本地数据库的区块链中,若验证不通过,则舍弃该最新区块。
其中,所述S2包括:所述第一节点、第二节点…第x-1节点、第x+1节点…第N节点判断所述最新区块是否位于可接受的区块链分叉上、判断所述第x节点(即步骤S1中已经出块的节点)是否存在于所述可出块节点名单中、判断当前时间点是否轮到所述第x节点进行出块、判断所述最新区块的合法性,若同时满足位于可接受的区块链分叉上、处于可出块节点名单、轮到第x节点出块、出块合法,则将所述最新区块添加至本地存储的区块链上,若未同时满足位于可接受的区块链分叉上、处于可出块节点名单、轮到第x节点出块、出块合法,则舍弃该最新区块。
也就是说,第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过确认最新区块位于可接受的区块链分叉上、第x节点处于可出块名单、轮到第x节点出块、第x节点有出块权(也即出块合法),则将该最新区块添加至相应的本地存储的区块链上。
示例性的,包括:
S21、第一节点、第二节点…第x-1节点、第x+1节点…第N节点判断当前的所述最新区块是否位于可接受的区块链分叉上,而非处于应被丢弃的分叉上,若存在则执行步骤S22,若不存在则验证不通过;
S22、判断所述第x节点是否存在于所述可出块节点名单中,若所述第x节点存在于所述可出块节点名单中,则执行步骤S23;若所述第x节点不存在于所述可出块节点名单中,则验证不通过;
S23、判断所述第x节点的身份是否真实,若所述第x节点身份真实,则执行步骤S24,若不真实则验证不通过;
S24、判断当前时间点是否为所述第x节点进行出块,若当前时间点为所述第x节点进行出块,则执行步骤S25,若当前时间点不为所述第x节点进行出块,则验证不通过;
S25、判断所述最新区块是否合法,若所述最新区块合法,则验证通过,将所述最新区块添加至节点本地数据库的区块链中,若所述最新区块不合法,则验证不通过。
具体的,作为本公开实施例的一个方案,在步骤S11中,所述第x节点通过对可出块节点名单中记载的内容进行匹配,若匹配成功,则该第x节点位于可出块节点名单中,若匹配不成功,则不存在于可出块节点名单中。
应当说明的是,所述可出块节点名单中记录了所有可出块的信息,以及可出块的节点地址、可出块的节点公钥或可出块的节点证书等用于验证节点真实身份的内容。
可以理解的是,第x节点通过与可出块节点名单中存储的可出块的节点相关信息等进行匹配,从而确认自身是否存在于可出块节点名单中,如果存在的话,则说明第x节点有出块权。
所述可出块节点名单主要是用于确定此区块链中被赋予出块权的节点,相比POW(Proof-of-Work,工作量证明)人人都可以出块的模式,通过本公开实施例的方案的上述内容,也即采用可出块节点名单的方式能够有效避免恶意节点的加入,因为只有在所述可出块节点名单中的节点才具有进行打包出块的权力,可出块的节点需在区块链创建之初在可出块节点名单中指定。
进一步的,在区块链创建之后,也可通过对所有节点中的可出块节点名单进行更新或使用区块链选举功能等手段来更改此名单,以实现更换可出块的节点。
在步骤S12中,所述第x节点通过共识规则机制中的节点轮流出块规则判断当前时间点是否轮到自身节点进行出块。
所述共识规则机制规定了区块链的共识规则,所述共识规则机制可以是任何节点轮流出块的区块链共识,包括但不限于固定节点出块顺序、每轮随机产生节点出块顺序等各类节点轮流出块的区块链共识。
其中,固定节点出块顺序是指按照预先设置的节点顺序进行轮流出块,也就是说:每轮随机产生节点出块顺序指每经过N次出块后,进行一次节点出块顺序的随机打乱,作为下一个N个节点依次出块的顺序,其中N为出块节点总数,一般称N次出块为一轮出块。
本公开实施例的一个方案,所述共识规则机制中规定了节点轮流出块规则、可出块节点总数、最小节点确认数和分叉选择机制;
所述节点轮流出块规则规定了在某个时段中合法的可出块节点条件,第x节点通过节点轮流出块规则判断自身的可出块节点条件是否合法,也就是说,第x节点通过将当前时间出块的条件与节点轮流出块规则中规定的条件进行匹配,若匹配成功,则符合出块的条件,若匹配不成功则不进行出块。
可以理解的是,所述节点轮流出块规则中规定的条件可以是人为确定的,节点轮流规则不仅可以是固定节点出块顺序,还可以为经过y*N次出块后,进行一次节点出块顺序的随机打乱,y可以是人为规定的任意值。
此外,节点轮流出块规则还可以为:节点轮流出块规则是每进行y轮出块后重新进行一次节点选举,选举出的节点可以按照固定节点出块顺序规则或每轮随机产生节点出块顺序规则进行出块。
所述出块节点总数规定可进行出块的节点的数量。
所述最小节点确认数规定了需要进行区块确认的最小不同节点数,如PBFT共识机制规定需多于三分之二的总节点数的节点接受的区块才能被整个区块链网络承认为合法区块,所以在PBFT中最小节点确认数量为节点总数量的三分之二并对数值进行向上取整。
优选地,本实施例中,所述预设的最小节点确认数为:n=ceiling(2/3N+1),n来表示预设的最小确认数的大小,N来表示节点总数量,ceiling函数表示向上舍入取整。
通过上述内容可以理解,需要当最小节点确认数量为节点总数量的三分之二加一后向上取整的数值。
此外,所述第x节点通过分叉选择机制的方法来判断分叉合法性,具体为:所述第x节点收到多个区块链分叉时,第x节点选择区块链高度最大且区块链中包含了本地区块链数据库中所有不可逆区块的分叉。
也就是说,分叉选择机制规定了在节点收到多个区块链分叉时,第x节点如何进行分叉合法性的判断。
在步骤S13中,所述第x节点通过合法性确认方法来确定出块的合法性,具体包括:所述第x节点通过读取本地存储的区块链中的各个区块,识别各个区块的生产节点,通过生产节点的数量判断当前节点进行出块是否符合最小节点确认数。
为了更加详细地说明出块合法性确认过程,参阅图7,图7为本发明区块合法性确认的流程示意图,其中,当轮到第x节点出块时,从节点本地数据库中读取区块链数据,进行判断:
S1301)、判断读取的区块链数据中区块链高度与预设的第一阈值进行比较,若区块链高度与第一阈值相同时,表示区块链中只存在创始区块中,第x节点满足出块条件;若区块链高度大于第一阈值时,执行步骤1302);
S1302)、将区块链高度与最小节点确认数进行比较,若区块链高度小于最小节点确认数时,则判断区块链中是否存在当前节点出的区块,若区块链中不存在当前节点出的区块,则出块合法,若区块链中存在当前节点出的区块,则出块不合法;
若区块链高度大于等于最小节点确认数时,则从区块链最大高度向前读取N1-1个区块(N1为可出块的节点总数),若第N1-1个区块的高度大于最大高度,即为区块链长度不足N1-1,此时读取到创世区块为止,判断每个区块所对应的可出块的节点,然后加上当前可出块的节点(即本步骤中的第x节点)作为一个集合,并执行步骤S1303);
S1303)、判断集合是否有重复的节点,若有则进行去重,舍弃重复的节点再执行S1304),若无重复的节点直接执行步骤S1304);
S1304)、判断无重复节点的集合的节点数与最小确认数的大小,若集合节点数不小于最小节点确认数,则满足出块合法。
其中,所述第一阈值为0。
可以理解的是,所述创世区块通常是指区块链里面所有区块的共同祖先,这意味着从任一区块,循链向后回溯,最终都将到达创世区块。
此外,需要强调的是,通过上述方式可以确定出块情况,而除了以上所述情况外,其余情况一律都不满足条件,均不能进行出块。
通过上述内容,可以更好地确定出块的合法性,这样即使出现了短暂的网络不通畅,导致节点主机之间暂时无法通信的场景,第x节点也能够及时出块。
所述步骤S1还包括:S15、在本地区块链数据库中找出符合不可逆区块高度的区块,将其标记为不可逆区块。
不可逆区块是指在区块链上的某个区块已被区块链共识机制所接受,不会因为分叉等原因而改变或删除的区块,保证了不可逆区块不会因为区块链分叉而被重写。
具体的,第x节点接收到一个区块链分叉时,判断该区块链分叉高度是否高于节点数据库中区块链高度,若高于,则第x节点会对数据库中的区块链回滚至分叉发生时的高度,并将接收到的区块链分叉中所有区块加入数据库中,完成不可逆标记;若低于,则舍弃该区块链分叉。
也就是说,当发现接收的区块链分叉需要回滚的区块高度小于不可逆区块高度时,不进行区块链分叉的区块同步,而是直接舍弃,从而节约网络流量。
其中,所述不可逆区块高度的具体判定方法为,当前区块链高度减去最小节点确认数量所得的数值即为不可逆区块的高度,且在此高度的区块和此高度之前的所有区块都是不可逆的,也就是这些区块的内容不会因为分叉等原因被改变。
通过上述内容,第x节点对最新区块完成不可逆标记,实现了保护区块链的不可篡改特性。
通常情况下,不可逆区块是指在区块链上的某个区块已被区块链共识所接受,不会因为分叉等原因而改变或删除的区块。而所述不可逆区块机制的作用是保证不可逆区块不会因为区块链分叉而被重写。
作为本公开实施例的一个方案,所述网络通讯模块用于各个参与节点之间的通讯和数据传输,例如节点间交易的同步、最新区块的同步和消息的传输等等都通过该模块完成。
在步骤S21中,第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过使用共识规则模块中的分叉选择机制判断当前的所述最新区块是否位于可接受的区块链分叉上;
所述第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过分叉选择机制的方法来判断分叉合法性,具体为:所述第一节点、第二节点…第x-1节点、第x+1节点…第N节点收到多个区块链分叉时,第一节点、第二节点…第x-1节点、第x+1节点…第N节点选择区块链高度最大且区块链中包含了本地区块链数据库中所有不可逆区块的分叉。
在步骤S22中,第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过可出块节点名单,判断第x节点是否存在于可出块节点名单中;
所述第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过将第x节点与可出块节点名单中记载的内容进行匹配,若匹配成功,则该第x节点位于可出块节点名单中,若匹配不成功,则不在可出块节点名单中;
第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过将可出块节点名单中存储的可出块的节点信息等与第x节点进行匹配识别,从而确认第x节点是否存在于可出块节点名单中,如果存在的话,则说明第x节点有出块权。
在步骤S23中,第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过使用公钥来验证区块中包含的第x节点签名,来确定所述最新区块是否由第x节点所产生。也就是说本公开的实施例方案使用了公私钥技术用来验证第x节点身份的真实性;
在步骤S24中,第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过共识规则模块中的节点轮流出块规则确定当前时间点是否为第x节点进行出块;
具体的,所述第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过节点轮流出块规则判断第x节点的可出块节点条件是否合法,也就是说,第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过将当前时间第x节点出块的条件与节点轮流出块规则中规定的条件进行匹配,若匹配不成功则不进行出块。
在步骤S25中,第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过合法性确认方法确认所述最新区块的合法性。
第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过区块合法性确认机制来判定当前时段第x节点出块是否符合最小节点确认数量规则。具体地,第一节点、第二节点…第x-1节点、第x+1节点…第N节点指通过读取本地存储的区块链中的各个区块,识别各个区块的生产节点,通过生产节点的数量判断当前节点进行出块是否符合最小节点确认数规则,若符合,则第x节点出块合法,若不符合,第x节点出块不合法,舍弃该区块。具体过程如下:
S2501)、判断读取的区块链数据中区块链高度与预设的第一阈值进行比较,若区块链高度与第一阈值相同时,表示区块链中只存在创始区块中,第x节点满足出块条件;若区块链高度大于第一阈值时,执行步骤2502);
S2502)、将区块链高度与最小节点确认数进行比较,若区块链高度小于最小节点确认数时,则判断区块链中是否存在第x节点出的最新区块,若区块链中不存在第x节点出的最新区块,则符合出块条件,若区块链中存在当前节点出的区块,则不符合出块条件;
若区块链高度大于等于最小节点确认数时,则从区块链最大高度向前读取N1-1个区块(N1为可出块的节点总数),若第N1-1个区块的高度大于最大高度,即为区块链长度不足N1-1,此时读取到创世区块为止,将每个区块所对应的可出块的节点,然后加上当前可出块的节点(即本步骤S1中的第x节点)作为一个集合;
S2503)、判断集合中是否有重复的节点,若所述集合中有重复的节点则进行去重,再执行步骤S2504),若无则直接执行步骤S2504);
S2504)、若去重后的集合中节点数不小于最小节点确认数,则满足出块条件,出块合法。
其中,所述第一阈值为0。
此外,所述步骤S2还包括:
S26、第一节点、第二节点…第x-1节点、第x+1节点…第N节点将区块链中符合不可逆区块规则所在的高度的区块标记为不可逆区块。
实施例2
参阅图4,图4为本发明实施例2提供的区块链共识系统的结构框图,该区块链共识系统,包括按照预设顺序依次进行打包出块的第一节点、第二节点…第N节点;
出块验证模块801,用于当前轮到第x节点出块时,所述第x节点响应于出块验证指令执行验证操作,若出块验证通过,则执行出块操作,将交易打包为最新区块存入本地区块链数据库中,同时将所述最新区块通过网络通讯模块发送至其他节点处,若验证失败则不执行出块操作;
还包括:
所述第x节点响应于出块验证指令执行验证操作包括:第x节点判断自身是否处于可出块节点名单、判断当前时间点是否轮到自身节点出块、出块是否合法,若所述第x节点同时满足处于可出块节点名单中、轮到自身节点出块、出块合法,则执行出块操作;否则禁止进行出块操作;
所述第x节点判断自身是否处于可出块节点名单包括:所述第x节点通过对可出块节点名单中记载的内容进行匹配,若匹配成功,则该第x节点是否位于可出块节点名单中,若匹配不成功,则不在可出块节点名单中;
所述可出块节点名单中存储有可出块的节点信息、可出块的节点地址、可出块的节点公钥或可出块的节点证书;
所述判断当前时间点是否轮到自身节点出包括:所述第x节点通过共识规则机制判断当前时间点是否轮到自身节点进行出块,第x节点通过将当前时间出块的条件与所述节点轮流出块规则中预设条件进行匹配,若匹配成功,则符合出块的条件,若匹配不成功则禁止出块操作;
所述判断出块是否合法包括:
S1301)、当轮到第x节点出块时,从节点本地数据库中读取区块链数据,判断读取的区块链数据中区块链高度与预设的第一阈值进行比较,若区块链高度与第一阈值相同时,表示区块链中只存在创始区块中,第x节点出块合法;若区块链高度大于第一阈值时,执行步骤1302);
S1302)、将区块链高度与最小节点确认数进行比较,若区块链高度小于最小节点确认数时,则判断区块链中是否存在当前节点出的区块,若区块链中不存在当前节点出的区块,则出块合法,若区块链中存在当前节点出的区块,则出块不合法;
若区块链高度大于等于最小节点确认数时,则从区块链最大高度向前读取N1-1个区块,N1为可出块的节点总数,若第N1-1个区块的高度大于最大高度,此时读取到创世区块为止,并判断每个区块所对应的可出块的节点,然后加上第X节点形成一个集合;
S1303)、判断集合是否有重复的节点,若有则进行去重,舍弃重复的节点再执行S1304),若无重复的节点直接执行步骤S1304);
S1304)、判断无重复节点的集合的节点数与最小确认数的大小,若集合节点数不小于最小节点确认数,则满足出块合法;
当判断出块是否合法后,还包括在本地区块链数据库中找出符合不可逆区块高度的区块,将其标记为不可逆区块。
非出块节点验证模块802,用于第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过网络通讯模块接收所述最新区块,响应于对所述最新区块进行验证指令执行验证操作,若验证通过,则将所述最新区块添加至节点本地数据库的区块链中,若验证不通过,则舍弃该最新区块,还包括:
所述响应于对所述最新区块进行验证指令执行验证操作包括:所述第一节点、第二节点…第x-1节点、第x+1节点…第N节点判断所述最新区块是否位于可接受的区块链分叉上、判断所述第x节点是否存在于所述可出块节点名单中、判断当前时间点是否轮到所述第x节点进行出块、判断所述最新区块的合法性;若同时满足位于可接受的区块链分叉上、处于可出块节点名单、轮到第x节点出块、出块合法,则将所述最新区块添加至本地存储的区块链上;
若未同时满足,则舍弃该最新区块。
所述判断所述最新区块是否位于可接受的区块链分叉上包括:所述第一节点、第二节点…第x-1节点、第x+1节点…第N节点收到多个区块链分叉时,选择区块链高度最大且区块链中包含了本地区块链数据库中所有不可逆区块的分叉;
所述判断所述第x节点是否存在于所述可出块节点名单中包括:所述第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过将第x节点与可出块节点名单中记载的内容进行匹配,若匹配成功,则该第x节点位于可出块节点名单中,若匹配不成功,则不在可出块节点名单中;
所述判断当前时间点是否轮到所述第x节点进行出块包括:第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过使用公钥来验证区块中包含的第x节点签名,确定所述最新区块是否由第x节点所产生;
所述判断所述最新区块的合法性包括:S2501)、判断读取的区块链数据中区块链高度与预设的第一阈值进行比较,若区块链高度与第一阈值相同时,表示区块链中只存在创始区块中,第x节点满足出块条件;若区块链高度大于第一阈值时,执行步骤2502);
S2502)、将区块链高度与最小节点确认数进行比较,若区块链高度小于最小节点确认数时,则判断区块链中是否存在第x节点出的区块,若区块链中不存在第x节点出的区块,则符合出块条件,若区块链中存在当前节点出的区块,则不符合出块条件;
若区块链高度大于等于最小节点确认数时,则从区块链最大高度向前读取N1-1个区块,N1为可出块的节点总数,若第N1-1个区块的高度大于最大高度,此时读取到创世区块为止,并将每个区块所对应的可出块的节点,加上第x节点作为一个集合;
若所述集合中有重复的节点则进行去重,再判断去重后集合的节点数与最小确认数的大小,若去重后的节点数不小于最小节点确认数,则满足出块条件,即出块合法;
S2503)、判断集合中是否有重复的节点,若所述集合中有重复的节点则进行去重,再执行步骤S2504),若无则直接执行步骤S2504);
S2504)、若去重后的集合中节点数不小于最小节点确认数,出块合法;
将所述最新区块添加至节点本地数据库的区块链后还包括:第一节点、第二节点…第x-1节点、第x+1节点…第N节点将区块链中符合不可逆区块规则所在的高度的区块标记为不可逆区块。
实施例3
图2为本发明实施例3提供的区块链共识方法应用于出块节点工作流程示意图,一种区块链共识方法,应用于出块节点,包括:
S3、当前轮到出块节点出块时,所述出块节点响应于出块验证指令执行验证操作,若出块验证通过,则执行出块操作,将交易打包为最新区块存入本地区块链数据库中,同时将所述最新区块发送至网络通讯模块,若验证失败则不执行出块操作。
具体的,所述验证过程包括:出块节点判断自身是否处于可出块节点名单、判断当前时间点是否轮到自身节点出块、出块是否合法,若所述出块节点同时满足处于可出块节点名单中、轮到自身节点出块、出块合法,则执行出块操作;否则禁止进行出块操作。
示例性的,为了方便理解,所述步骤S3可以为:
S31、所述出块节点判断自身节点是否存在于可出块节点名单中,若存在可出块节点名单中,则执行步骤S32,若不在可出块节点名单中,则禁止出块操作;
S32、判断当前时间点是否轮到自身节点出块,若当前时间点为轮到自身节点出块,则执行步骤S33,未轮到自身节点出块,则禁止出块操作;
S33、判断当前出块是否合法,若当前出块合法,则进行出块操作,将交易打包为最新区块,并执行步骤S34,若当前出块不合法,则禁止出块操作;
S34、出块节点将所述最新区块添加至本地存储的区块链上,并发送至网络通讯模块。
在步骤S31中,所述出块节点通过对可出块节点名单中记载的内容进行匹配,若匹配成功,若匹配成功,则该出块节点是否位于可出块节点名单中,,若匹配不成功,则不在可出块节点名单中。
应当说明的是,所述可出块节点名单中记录了所有可出块的信息,以及可出块的节点地址、可出块的节点公钥或可出块的节点证书等用于验证节点真实身份的内容。
可以理解的是,出块节点通过与可出块节点名单中存储的可出块的节点相关信息等进行匹配,从而确认自身是否存在于可出块节点名单中,如果存在的话,则说明出块节点有出块权。
所述可出块节点名单主要是用于确定此区块链中被赋予出块权的节点,相比POW(Proof-of-Work,工作量证明)人人都可以出块的模式,通过本公开实施例的方案的上述内容,也即采用可出块节点名单的方式能够有效避免恶意节点的加入,因为只有在所述可出块节点名单中的节点才具有进行打包出块的权力,可出块的节点需在区块链创建之初在可出块节点名单中指定。
进一步的,在区块链创建之后,也可通过对所有节点中的可出块节点名单进行更新或使用区块链选举功能等手段来更改此名单,以实现更换可出块的节点。
在步骤S32中,所述出块节点通过共识规则机制中的节点轮流出块规则判断当前时间点是否轮到自身节点进行出块。
所述共识规则机制规定了区块链的共识规则,所述共识规则机制可以是任何节点轮流出块的区块链共识,包括但不限于固定节点出块顺序、每轮随机产生节点出块顺序等各类节点轮流出块的区块链共识。
本公开实施例的一个方案,所述共识规则机制中规定了节点轮流出块规则、可出块节点总数、最小节点确认数和分叉选择机制;
所述节点轮流出块规则规定了在某个时段中合法的可出块节点条件,出块节点通过节点轮流出块规则判断自身的可出块节点条件是否合法,也就是说,出块节点通过将当前时间出块的条件与节点轮流出块规则中规定的条件进行匹配,若匹配成功,则符合出块的条件,若匹配不成功则不进行出块。
所述出块节点总数规定可进行出块的节点的数量。
所述最小节点确认数规定了需要进行区块确认的最小不同节点数,如PBFT共识机制规定需多于三分之二的总节点数的节点接受的区块才能被整个区块链网络承认为合法区块,所以在PBFT中最小节点确认数量为节点总数量的三分之二并对数值进行向上取整。
优选地,本实施例中,所述预设的最小节点确认数为:n=ceiling(2/3N+1),n来表示预设的最小确认数的大小,N来表示节点总数量,ceiling函数表示向上舍入取整。
此外,所述出块节点通过分叉选择机制的方法来判断分叉合法性,具体为:所述出块节点收到多个区块链分叉时,出块节点选择区块链高度最大且区块链中包含了本地区块链数据库中所有不可逆区块的分叉。
也就是说,分叉选择机制规定了在节点收到多个区块链分叉时,出块节点如何进行分叉合法性的判断。
在步骤S33中,所述出块节点通过合法性确认方法来确定出块的合法性,具体包括:所述出块节点通过读取本地存储的区块链中的各个区块,识别各个区块的生产节点,通过生产节点的数量判断当前节点进行出块是否符合最小节点确认数。
为了更加详细地说明出块合法性确认过程,参阅图7,其中,当轮到出块节点出块时,从节点本地数据库中读取区块链数据,进行判断:
S3301)、判断读取的区块链数据中区块链高度与预设的第一阈值进行比较,若区块链高度与第一阈值相同时,表示区块链中只存在创始区块中,出块节点满足出块条件;若区块链高度大于第一阈值时,执行步骤1302);
S3302)、将区块链高度与最小节点确认数进行比较,若区块链高度小于最小节点确认数时,则判断区块链中是否存在当前节点出的区块,若区块链中不存在当前节点出的区块,则出块合法,若区块链中存在当前节点出的区块,则出块不合法;
若区块链高度大于等于最小节点确认数时,则从区块链最大高度向前读取N1-1个区块(N1为可出块的节点总数),若第N1-1个区块的高度大于最大高度,即为区块链长度不足N1-1,此时读取到创世区块为止,判断每个区块所对应的可出块的节点,然后加上当前可出块的节点(即本步骤中的出块节点)作为一个集合,并执行步骤S3303);
S3303)、判断集合是否有重复的节点,若有则进行去重,舍弃重复的节点再执行S3304),若无重复的节点直接执行步骤S1304);
S3304)、判断无重复节点的集合的节点数与最小确认数的大小,若集合节点数不小于最小节点确认数,则满足出块合法。
其中,所述第一阈值为0。
可以理解的是,所述创世区块通常是指区块链里面所有区块的共同祖先,这意味着从任一区块,循链向后回溯,最终都将到达创世区块。
此外,需要强调的是,通过上述方式可以确定出块情况,而除了以上所述情况外,其余情况一律都不满足条件,均不能进行出块。
通过上述内容,可以更好地确定出块的合法性,这样即使出现了短暂的网络不通畅,导致节点主机之间暂时无法通信的场景,出块节点也能够及时出块。
所述步骤S3还包括:S35、在本地区块链数据库中找出符合不可逆区块高度的区块,将其标记为不可逆区块。
不可逆区块是指在区块链上的某个区块已被区块链共识机制所接受,不会因为分叉等原因而改变或删除的区块,保证了不可逆区块不会因为区块链分叉而被重写。
具体的,出块节点接收到一个区块链分叉时,判断该区块链分叉高度是否高于节点数据库中区块链高度,若高于,则出块节点会对数据库中的区块链回滚至分叉发生时的高度,并将接收到的区块链分叉中所有区块加入数据库中,完成不可逆标记;若低于,则舍弃该区块链分叉。
也就是说,当发现接收的区块链分叉需要回滚的区块高度小于不可逆区块高度时,不进行区块链分叉的区块同步,而是直接舍弃,从而节约网络流量。
其中,所述不可逆区块高度的具体判定方法为,当前区块链高度减去最小节点确认数量所得的数值即为不可逆区块的高度,且在此高度的区块和此高度之前的所有区块都是不可逆的,也就是这些区块的内容不会因为分叉等原因被改变。
通过上述内容,出块节点对最新区块完成不可逆标记,实现了保护区块链的不可篡改特性。
通常情况下,不可逆区块是指在区块链上的某个区块已被区块链共识所接受,不会因为分叉等原因而改变或删除的区块。而所述不可逆区块机制的作用是保证不可逆区块不会因为区块链分叉而被重写。
本公开实施例的方案中,还包括另一种区块链共识系统,该系统包括出块节点验证模块,所述出块节点验证模块用于执行步骤S3。
实施例4
图3为本发明实施例4提供的区块链共识方法应用于非出块节点工作流程示意图,参阅图3,一种区块链共识方法,应用于非出块节点,包括:
S4、通过网络通讯模块接收所述最新区块,响应于对所述最新区块进行验证操作,若验证通过,则将所述最新区块添加至节点本地数据库的区块链中,若验证不通过,则舍弃该最新区块。
所述S4包括:所述非出块节点判断所述最新区块是否位于可接受的区块链分叉上、判断所述出块节点是否存在于所述可出块节点名单中、判断当前时间点是否轮到所述出块节点进行出块、判断所述最新区块的合法性,若同时满足位于可接受的区块链分叉上、处于可出块节点名单、轮到出块节点出块、出块合法,则所述出块节点将所述最新区块添加至本地存储的区块链上,若未同时满足位于可接受的区块链分叉上、处于可出块节点名单、轮到出块节点出块、出块合法,则舍弃该最新区块。
所述非出块节点包括出当前时间出块的节点外所有节点。
也就是说,非出块节点通过确认最新区块位于可接受的区块链分叉上、出块节点处于可出块名单、轮到出块节点出块、出块节点有出块权(也即出块合法),则将该最新区块添加至相应的本地存储的区块链上。
示例性的,包括:
S41、非出块节点判断当前的所述最新区块是否位于可接受的区块链分叉上,而非处于应被丢弃的分叉上,若存在则执行步骤S22,若不存在则验证不通过;
S42、判断所述出块节点是否存在于所述可出块节点名单中,若所述出块节点存在于所述可出块节点名单中,则执行步骤S23;若所述出块节点不存在于所述可出块节点名单中,则验证不通过;
S43、判断所述出块节点的身份是否真实,若所述出块节点身份真实,则执行步骤S44,若不真实则验证不通过;
S44、判断当前时间点是否为所述出块节点进行出块,若当前时间点为所述出块节点进行出块,则执行步骤S25,若当前时间点不为所述出块节点进行出块,则验证不通过;
S45、判断所述最新区块是否合法,若所述最新区块合法,则验证通过,将所述最新区块添加至节点本地数据库的区块链中,若所述最新区块不合法,则验证不通过。
在步骤S41中,非出块节点通过使用共识规则模块中的分叉选择机制判断当前的所述最新区块是否位于可接受的区块链分叉上;
所述非出块节点通过分叉选择机制的方法来判断分叉合法性,具体为:所述非出块节点收到多个区块链分叉时,非出块节点选择区块链高度最大且区块链中包含了本地区块链数据库中所有不可逆区块的分叉。
在步骤S42中,非出块节点通过可出块节点名单,判断出块节点是否存在于可出块节点名单中;
所述非出块节点通过将出块节点与可出块节点名单中记载的内容进行匹配,若匹配成功,则该出块节点位于可出块节点名单中,若匹配不成功,则不在可出块节点名单中;
非出块节点通过将可出块节点名单中存储的可出块的节点信息等与出块节点进行匹配识别,从而确认出块节点是否存在于可出块节点名单中,如果存在的话,则说明出块节点有出块权。
在步骤S43中,非出块节点通过使用公钥来验证区块中包含的出块节点签名,来确定所述最新区块是否由出块节点所产生。也就是说本公开的实施例方案使用了公私钥技术用来验证出块节点身份的真实性;
在步骤S44中,非出块节点通过共识规则模块中的节点轮流出块规则确定当前时间点是否为出块节点进行出块;
具体的,所述非出块节点通过节点轮流出块规则判断出块节点的可出块节点条件是否合法,也就是说,非出块节点通过将当前时间出块节点出块的条件与节点轮流出块规则中规定的条件进行匹配,若匹配不成功则不进行出块。
在步骤S45中,非出块节点通过合法性确认方法确认所述最新区块的合法性。
非出块节点通过区块合法性确认机制来判定当前时段出块节点出块是否符合最小节点确认数量规则。具体地,非出块节点指通过读取本地存储的区块链中的各个区块,识别各个区块的生产节点,通过生产节点的数量判断当前节点进行出块是否符合最小节点确认数规则,若符合,则出块节点出块合法,若不符合,出块节点出块不合法,舍弃该区块。具体过程如下:
S4501)、判断读取的区块链数据中区块链高度与预设的第一阈值进行比较,若区块链高度与第一阈值相同时,表示区块链中只存在创始区块中,出块节点满足出块条件;若区块链高度大于第一阈值时,执行步骤2502);
S4502)、将区块链高度与最小节点确认数进行比较,若区块链高度小于最小节点确认数时,则判断区块链中是否存在出块节点出的最新区块,若区块链中不存在出块节点出的最新区块,则符合出块条件,若区块链中存在当前节点出的区块,则不符合出块条件;
若区块链高度大于等于最小节点确认数时,则从区块链最大高度向前读取N1-1个区块(N1为可出块的节点总数),若第N1-1个区块的高度大于最大高度,即为区块链长度不足N1-1,此时读取到创世区块为止,将每个区块所对应的可出块的节点,然后加上当前可出块的节点(即本步骤S1中的出块节点)作为一个集合;
S4503)、判断集合中是否有重复的节点,若所述集合中有重复的节点则进行去重,再执行步骤S2504),若无则直接执行步骤S2504);
S4504)、若去重后的集合中节点数不小于最小节点确认数,则满足出块条件,出块合法。
其中,所述第一阈值为0。
此外,所述步骤S2还包括:
S46、非出块节点将区块链中符合不可逆区块规则所在的高度的区块标记为不可逆区块。
本公开实施例的方案中,还包括另一种区块链共识系统,该系统包括出块节点验证模块,所述出块节点验证模块用于执行步骤S4。
图5示出根据本公开一实施方式的设备的结构框图。
前述实施例描述了出块节点或非出块节点的内部功能和结构,在一个可能的设计中,前述出块节点或非出块节点的结构可实现为电子设备,如图5中所示,该电子设备900可以包括处理器901和存储器902。
所述存储器902用于存储支持处理器执行上述任一实施例中数据处理方法或者资源分配方法的程序,所述处理器901被配置为用于执行所述存储器902中存储的程序。
所述存储器902用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器901执行以实现以下步骤:
第一节点、第二节点…第N节点按照预设顺序依次进行打包出块;
若当前轮到第x节点出块时,所述第x节点响应于出块验证指令执行验证操作,若出块验证通过,则执行出块操作,将交易打包为最新区块存入本地区块链数据库中,同时将所述最新区块通过网络通讯模块发送至其他节点处,若验证失败则不执行出块操作;
第一节点、第二节点…第x-1节点、第x+1节点…第N节点通过网络通讯模块接收所述最新区块,响应于对所述最新区块进行验证指令执行验证操作,若验证通过,则将所述最新区块添加至节点本地数据库的区块链中,若验证不通过,则舍弃该最新区块。
图6是适于用来实现根据本公开一实施方式的区块链共识方法的计算机系统的结构示意图。
如图6所示,计算机系统1000包括处理器(CPU、GPU、FPGA等)1001,其可以根据存储在只读存储器(ROM)1002中的程序或者从存储部分1008加载到随机访问存储器(RAM)1003中的程序而执行上述附图所示的实施方式中的部分或全部处理。在RAM1003中,还存储有系统1000操作所需的各种程序和数据。处理器1001、ROM1002以及RAM1003通过总线1004彼此相连。输入/输出(I/O)接口1005也连接至总线1004。
以下部件连接至I/O接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
特别地,根据本公开的实施方式,上文参考附图描述的方法可以被实现为计算机软件程序。例如,本公开的实施方式包括一种计算机程序产品,其包括有形地包含在及其可读介质上的计算机程序,所述计算机程序包含用于执行附图中的方法的程序代码。在这样的实施方式中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。
附图中的流程图和框图,图示了按照本公开各种实施方式的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,路程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施方式中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。
作为另一方面,本公开还提供了介质,该介质为计算机可读存储介质,该计算机可读存储介质可以是上述实施方式中所述节点中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本公开的方法。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (9)
1.一种区块链共识方法,应用于非出块节点,其特征在于,通过网络通讯模块接收最新区块,响应于对所述最新区块进行验证指令执行验证操作,若验证通过,则将所述最新区块添加至节点本地数据库的区块链中,若验证不通过,则舍弃该最新区块;
所述响应于对所述最新区块进行验证指令执行验证操作包括判断所述最新区块的合法性,具体为:
S2501)、判断读取的区块链数据中区块链高度与预设的第一阈值进行比较,若区块链高度与第一阈值相同时,表示区块链中只存在创始区块中,第x节点满足出块条件;若区块链高度大于第一阈值时,执行步骤2502);
S2502)、将区块链高度与最小节点确认数进行比较,若区块链高度小于最小节点确认数时,则判断区块链中是否存在出块节点出的区块,若区块链中不存在第x节点出的区块,则符合出块条件,若区块链中存在当前节点出的区块,则不符合出块条件;
若区块链高度大于等于最小节点确认数时,则从区块链最大高度向前读取N1-1个区块,N1为可出块的节点总数,若第N1-1个区块的高度大于最大高度,此时读取到创世区块为止,并将每个区块所对应的可出块的节点,加上第x节点作为一个集合;
若所述集合中有重复的节点则进行去重,再判断去重后集合的节点数与最小确认数的大小,若去重后的节点数不小于最小节点确认数,则满足出块条件,即出块合法;
S2503)、判断集合中是否有重复的节点,若所述集合中有重复的节点则进行去重,再执行步骤S2504),若无则直接执行步骤S2504);
S2504)、若去重后的集合中节点数不小于最小节点确认数,出块合法。
2.根据权利要求1所述的区块区块链共识方法,其特征在于,所述响应于对所述最新区块进行验证指令执行验证操作包括:
所述非出块节点判断所述最新区块是否位于可接受的区块链分叉上、判断出块节点是否存在于所述可出块节点名单中、判断当前时间点是否轮到出块节点进行出块、判断所述最新区块的合法性;
若同时满足位于可接受的区块链分叉上、处于可出块节点名单、轮到出块节点出块、出块合法,则将所述最新区块添加至本地存储的区块链上;
若未同时满足,则舍弃该最新区块。
3.根据权利要求2所述的区块区块链共识方法,其特征在于,所述判断所述最新区块是否位于可接受的区块链分叉上包括:
所述非出块节点收到多个区块链分叉时,选择区块链高度最大且区块链中包含了本地区块链数据库中所有不可逆区块的分叉。
4.根据权利要求2所述的区块区块链共识方法,其特征在于,所述判断出块节点是否存在于所述可出块节点名单中包括:所述非出块节点通过将出块节点与可出块节点名单中记载的内容进行匹配,若匹配成功,则该出块节点位于可出块节点名单中,若匹配不成功,则不在可出块节点名单中。
5.根据权利要求3所述的区块区块链共识方法,其特征在于,所述判断当前时间点是否轮到出块节点进行出块包括:非出块节点通过使用公钥来验证区块中包含的出块节点签名,确定所述最新区块是否由第x节点所产生。
6.根据权利要求2所述的区块区块链共识方法,其特征在于,将所述最新区块添加至节点本地数据库的区块链后还包括:非出块节点将区块链中符合不可逆区块规则所在的高度的区块标记为不可逆区块。
7.一种区块链共识系统,其特征在于,包括:
非出块节点验证模块,用于通过网络通讯模块接收最新区块,响应于对所述最新区块进行验证指令执行验证操作,若验证通过,则将所述最新区块添加至节点本地数据库的区块链中,若验证不通过,则舍弃该最新区块;
所述非出块节点验证模块还用于判断所述最新区块的合法性,具体为:
S2501)、判断读取的区块链数据中区块链高度与预设的第一阈值进行比较,若区块链高度与第一阈值相同时,表示区块链中只存在创始区块中,第x节点满足出块条件;若区块链高度大于第一阈值时,执行步骤2502);
S2502)、将区块链高度与最小节点确认数进行比较,若区块链高度小于最小节点确认数时,则判断区块链中是否存在出块节点出的区块,若区块链中不存在第x节点出的区块,则符合出块条件,若区块链中存在当前节点出的区块,则不符合出块条件;
若区块链高度大于等于最小节点确认数时,则从区块链最大高度向前读取N1-1个区块,N1为可出块的节点总数,若第N1-1个区块的高度大于最大高度,此时读取到创世区块为止,并将每个区块所对应的可出块的节点,加上第x节点作为一个集合;
若所述集合中有重复的节点则进行去重,再判断去重后集合的节点数与最小确认数的大小,若去重后的节点数不小于最小节点确认数,则满足出块条件,即出块合法;
S2503)、判断集合中是否有重复的节点,若所述集合中有重复的节点则进行去重,再执行步骤S2504),若无则直接执行步骤S2504);
S2504)、若去重后的集合中节点数不小于最小节点确认数,出块合法。
8.一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如权利要求1~6任一项所述的方法。
9.一种可读存储介质,其上存储有计算机指令,该计算机指令被处理器执行时实现如权利要求1~6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011417721.4A CN112600698B (zh) | 2020-12-07 | 2020-12-07 | 应用于非出块节点的区块链共识方法、系统、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011417721.4A CN112600698B (zh) | 2020-12-07 | 2020-12-07 | 应用于非出块节点的区块链共识方法、系统、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112600698A CN112600698A (zh) | 2021-04-02 |
CN112600698B true CN112600698B (zh) | 2023-06-13 |
Family
ID=75188594
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011417721.4A Active CN112600698B (zh) | 2020-12-07 | 2020-12-07 | 应用于非出块节点的区块链共识方法、系统、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112600698B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112487496B (zh) * | 2020-12-07 | 2024-04-16 | 合肥达朴汇联科技有限公司 | 一种区块链共识系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106878000A (zh) * | 2017-03-06 | 2017-06-20 | 中钞信用卡产业发展有限公司北京智能卡技术研究院 | 一种联盟链共识方法及系统 |
CN109660545A (zh) * | 2018-12-27 | 2019-04-19 | 北京新唐思创教育科技有限公司 | 一种联盟链共识方法及计算机存储介质 |
CN109949157A (zh) * | 2019-03-08 | 2019-06-28 | 矩阵元技术(深圳)有限公司 | 一种区块链共识的处理方法、装置及系统 |
CN111930845A (zh) * | 2020-08-12 | 2020-11-13 | 湖南宸瀚信息科技有限责任公司 | 一种区块链的共识方法、系统、终端、及存储介质 |
-
2020
- 2020-12-07 CN CN202011417721.4A patent/CN112600698B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106878000A (zh) * | 2017-03-06 | 2017-06-20 | 中钞信用卡产业发展有限公司北京智能卡技术研究院 | 一种联盟链共识方法及系统 |
CN109660545A (zh) * | 2018-12-27 | 2019-04-19 | 北京新唐思创教育科技有限公司 | 一种联盟链共识方法及计算机存储介质 |
CN109949157A (zh) * | 2019-03-08 | 2019-06-28 | 矩阵元技术(深圳)有限公司 | 一种区块链共识的处理方法、装置及系统 |
CN111930845A (zh) * | 2020-08-12 | 2020-11-13 | 湖南宸瀚信息科技有限责任公司 | 一种区块链的共识方法、系统、终端、及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112600698A (zh) | 2021-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11095432B2 (en) | System for processing data based on blockchain and operating method thereof | |
US10630463B2 (en) | Meta block chain | |
US20210295321A1 (en) | Methods for decentralized digital asset transfer and smart contract state transition | |
CN110708171B (zh) | 区块链共识投票方法、装置、设备以及存储介质 | |
CN114944932B (zh) | 将区块添加到被许可的区块链的方法和系统 | |
CN110868440B (zh) | 区块链公链 | |
CN106372533B (zh) | 基于区块链技术的内容存储方法 | |
US11177962B2 (en) | Optimizations for verification of interactions system and method | |
CN111445333B (zh) | 区块生成方法、装置、计算机设备以及存储介质 | |
CN110493148B (zh) | 一种区块处理、区块共识和区块同步方法及装置 | |
CN109815373B (zh) | 数据存储的控制方法、装置、服务器及可读存储介质 | |
US20170236120A1 (en) | Accountability and Trust in Distributed Ledger Systems | |
CN110198233B (zh) | 基于可信执行环境和有向无环图的区块链共识方法及系统 | |
WO2020211461A1 (zh) | 一种可验证的共识方法及其系统 | |
CN110599177A (zh) | 一种交易验证方法及相关设备 | |
CN115152177B (zh) | 提供机密知识的专门证明的系统和方法 | |
CN110995701A (zh) | 一种区块链共识方法、系统、电子设备、存储介质 | |
CN111010284B (zh) | 一种待共识区块的处理方法、相关装置及区块链系统 | |
CN112039860B (zh) | 一种在联盟链中实现联合共识分片的方法和装置 | |
CN113723962B (zh) | 区块链权限管理方法和区块链系统 | |
CN111104460A (zh) | 一种区块链共识方法、系统、电子设备、存储介质 | |
CN111062811A (zh) | 一种区块链共识方法、系统、存储介质 | |
CN112600698B (zh) | 应用于非出块节点的区块链共识方法、系统、设备及介质 | |
CN112583908B (zh) | 应用于出块节点的区块链共识方法、系统、设备及介质 | |
CN112487496B (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 |