本发明涉及区块链技术领域、数据处理技术技术领域,尤其涉及区块链共识系统。
背景技术:
区块链是一种新型去中心化协议,能安全地存储数字货币交易或其数据,信息不可伪造和篡改,区块链上的交易确认由区块链上的所有节点共同完成,由共识算法保证其一致性,区块链上维护一个公共的账本,公共账本位于存储区块上任何节点见,从而保证其不可伪造和篡改。
一般来说,当网络中多个主机通过异步通讯方式组成网络集群进行协作时,这种异步网络默认是不可靠的,那么在这些不可靠主机之间复制状态需要采取一种机制,以保证每个主机的状态最终达成相同一致性状态,取得共识。具体到区块链网络上,共识问题又引入了新的不确定因素,如:恶意节点、网络延迟,系统可能就会达成错误的共识,从而导致重大错误。
公有区块链一般采取pow共识算法,即工作量证明方案。pow共识需要大量的哈希运算,需要电力和各种算力资源,而且找到合适的哈希值实际上并没有其他的作用。其次网络性能也非常低。而dpos共识算法虽然出块时间短、效率高,但是对于网络依赖也很大。比如eos,在进行打包出块时,出块节点需将最新区块数据发送至其他共识节点进行确认,其他共识节点验证通过后出块节点才可以将此最新区块数据添加至区块链并将其同步给其他节点。在真实环境中,因网络不通畅,导致节点主机之间暂时无法通信,那么此时出块节点因无法收到其他共识节点对区块的确认信息,则无法进行正常的打包区块工作。
例如申请号为“cn201910694191.9”的发明专利申请公开了一种基于区块链的共识方法、装置、设备及存储介质,所述的方法应用于所述区块链的第一节点,所述的方法包括:进入第r1轮共识的第一共识阶段,r1为自然数;在满足预定条件时触发计时器开始计时;若所述计时器计时的时长大于或等于预定时长,且保持在第r1轮共识的第一共识阶段,则打包有效投票集;其中,所述有效投票集中包括第一有效投票,所述第一有效投票用于证明所述第一节点进入第r1轮共识的第一共识阶段;广播所述有效投票集;但是该专利方案并不能够克服因为网络不通畅最终导致无法进行正常的打包区块工作的问题。
技术实现要素:
本发明所要解决的技术问题在于克服网络不通畅情况下,节点主机之间暂时无法通信,那么此时出块节点因无法收到其他共识节点对区块的确认信息,则无法进行正常的打包区块工作的问题。
本发明通过以下技术手段实现解决上述技术问题的:
一种区块链共识系统,包括:可出块节点名单模块、网络通讯模块、共识规则模块、出块合法性确认模块和不可逆区块模块;
所述可出块节点名单模块用于确定此区块链中被赋予出块权的节点;
所述网络通讯模块用于节点之间的通讯和数据传输;
所述共识规则模块用于规定区块链的共识规则;
所述出块合法性确认模块用于判断当前节点是否具有出块的权力;
所述不可逆区块模块用于保护区块链不被篡改。
节点可以通过可出块节点名单模块、共识规则模块、出块合法性确认模块判断当前节点是否具有出块的权力,从而保证节点出块,这样即使在网络不通畅情况下,也可以解决或缓解因为网络通讯不佳从而无法达成共识而引起的一系列的问题。
作为本发明进一步的方案:所述出块节点名单模块存储有所有可出块节点的信息,以及节点地址、节点公钥或节点证书。
作为本发明进一步的方案:所述共识规则模块包括节点轮流出块规则、出块节点总数、最小节点确认数和分叉选择机制;
所述节点轮流出块规则用于确定出块方式;
所述出块节点总数用于确定所有节点数量;
所述最小节点确认数规定了需要进行区块确认的最小不同节点数;
所述分叉选择机制,当节点收到多个区块链分叉时,选择区块链高度最大且区块链中包含了本地区块链数据库中所有不可逆区块的分叉。
作为本发明进一步的方案:所述最小节点确认数为:n=ceiling(2/3n 1),其中,n来表示最小节点确认数,用n来表示总节点数量
作为本发明进一步的方案:所述出块合法性确认模块是通过区块合法性确认机制来判定当前时段出块是否符合最小节点确认数。
作为本发明进一步的方案:区块合法性确认机制包括:通过读取本地存储的区块链中的各个区块,识别各个区块的生产节点,通过生产节点的数量判断当前节点进行出块是否符合最小节点确认数。
作为本发明进一步的方案:所述出块合法性确认模块的判断逻辑为:
s01)、当轮到第x节点出块时,从节点本地数据库中读取区块链数据,判断读取的区块链数据中区块链高度与预设的第一阈值进行比较,若区块链高度与第一阈值相同时,表示区块链中只存在创始区块中,第x节点出块合法;若区块链高度大于第一阈值时,执行步骤1302);
s02)、将区块链高度与最小节点确认数进行比较,若区块链高度小于最小节点确认数时,则判断区块链中是否存在当前节点出的区块,若区块链中不存在当前节点出的区块,则出块合法,若区块链中存在当前节点出的区块,则出块不合法;
若区块链高度大于等于最小节点确认数时,则从区块链最大高度向前读取n1-1个区块,n1为可出块的节点总数,若第n1-1个区块的高度大于最大高度,此时读取到创世区块为止,并判断每个区块所对应的可出块的节点,然后加上第x节点形成一个集合;
s03)、判断集合是否有重复的节点,若有则进行去重,舍弃重复的节点再执行s04),若无重复的节点直接执行步骤s1304);
s04)、判断无重复节点的集合的节点数与最小确认数的大小,若集合节点数不小于最小节点确认数,则满足出块合法。
作为本发明进一步的方案:所述第一阈值为0。
作为本发明进一步的方案:该系统包括第x节点,第x节点执行步骤为:
若当前轮到第x节点出块,第x节点响应于出块验证指令,若出块验证通过,则执行出块操作,将交易打包为最新区块存入本地区块链数据库中,同时将所述最新区块通过网络通讯模块发送至其他节点处,若验证失败则不执行出块操作。
作为本发明进一步的方案:该系统包括第一节点、第二节点…第x-1节点、第x 1节点…第n节点,第一节点、第二节点…第x-1节点、第x 1节点…第n节点执行步骤为:
所述第一节点、第二节点…第x-1节点、第x 1节点…第n节点判断所述最新区块是否位于可接受的区块链分叉上、判断所述第x节点是否存在于所述可出块节点名单中、判断当前时间点是否轮到所述第x节点进行出块、判断所述最新区块的合法性,若同时满足位于可接受的区块链分叉上、处于可出块节点名单、轮到第x节点出块、出块合法,则将所述最新区块添加至本地存储的区块链上,若未同时满足位于可接受的区块链分叉上、处于可出块节点名单、轮到第x节点出块、出块合法,则舍弃该最新区块。
本发明的优点在于:
1、本发明中,通过可出块节点名单模块可以确定此区块链中被赋予出块权的节点;网络通讯模块用于非出块节点与出块节点之间的通讯和数据传输;节点可以通过可出块节点名单模块、共识规则模块、出块合法性确认模块判断当前节点是否具有出块的权力,从而保证节点出块,这样即使在网络不通畅情况下,也可以解决或缓解因为网络通讯不佳从而无法达成共识而引起的一系列的问题。
2、通过判断当前节点首先自身节点是否可以执行出块操作,若验证通过后,执行出块操作,实现在节点之间短时间内无法通信的情况下依然可以出块,将最新区块发送至其他所有的节点再进行验证,其他所有节点验证过并存入本地区块链数据库中,这样即使在网络不通畅情况下,节点主机之间暂时无法通信,也可以部分解决或缓解因为网络通讯不佳从而无法达成共识而引起的一系列的问题,有效的提高了区块链的出块率。
3、本发明能够有效提供因暂时的网络不稳定因素导致区块链效率低下的解决方案,能够在节点之间短时间内无法通信的情况下依然可以出块,通过对现有的区块数据进行验证,确认记账权并打包交易出块,等待网络恢复通畅后与其他节点进行通信、同步数据,克服了由于网络原因而导致的区块链工作效率低,瘫痪等情况。
4、本发明实现了在网络环境不佳的情况下也可以判断当前节点是否可以合法出块的机制,提高了区块链的灵活性和可靠性,利用本发明的技术,可以部分解决或缓解因为网络通讯不佳从而无法达成共识而引起的一系列的问题,有效的提高了区块链的出块率。
5、本发明中,当发现接收的区块链分叉需要回滚的区块高度小于不可逆区块高度时,不进行区块链分叉的区块同步,而是直接舍弃,从而节约网络流量,保证不可逆区块不会因为区块链分叉而被重写。
6、本发明中,当前可出块的节点读取本地存储的区块链中的各个区块,识别各个区块的生产节点,并通过生产节点的数量判断当前节点进行出块是否符合最小节点确认数,能够有效的实现在节点之间短时间内无法通信的情况下依然可以出块。
附图说明
图1为本发明实施例提供的区块链共识方法的流程示意图。
图2为本发明实施例提供的区块链共识系统的结构示意图。
图3为本发明区块合法性确认的流程示意图。
具体实施方式
为了使本技术领域的人员更好地理解本公开方案,下面将结合本公开示例性实施例中的附图,对本公开示例性实施例中的技术方案进行清楚、完整地描述。
在本公开的说明书和权利要求书及上述附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如s1、s2等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
下面将结合本公开示例性实施例中的附图,对本公开示例性实施例中的技术方案进行清楚、完整地描述,显然,所描述的示例性实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
实施例1
参阅图2,图2为本发明实施例提供的区块链共识系统的结构示意图;该区块链共识系统,包括:可出块节点名单模块、网络通讯模块、共识规则模块、出块合法性确认模块和不可逆区块模块。
所述可出块节点名单模块用于确定此区块链中被赋予出块权的节点,相比pow人人都可以出块的模式,本发明采用可出块节点名单的方式避免恶意节点的加入。
在实际应用中,只有在可出块节点名单模块中的节点才具有进行打包出块的权力。可出块的节点需在区块链创建之初在此名单中指定。
在区块链创建之后,也可通过对所有节点中的可出块节点名单进行更新或使用区块链选举功能等手段来更改此名单来更换出块节点。可出块节点名单模块记录了所有可出块节点的信息,以及节点地址、节点公钥或节点证书等用于验证节点真实身份的内容。
在本发明实施例中,使用了公私钥技术来验证节点的身份,其他节点接收当前出块节点生成的区块时候,通过使用公钥来验证区块中包含的出块节点签名来确定区块是否由可出块节点所产生。
所述网络通讯模块用于节点之间的通讯和数据传输。如轮到当前出块的节点与当前未轮到出块的节点之间交易的同步、最新区块的同步和消息的传输等等都通过网络通讯模块完成。
所述共识规则模块用于规定区块链的共识规则。
所述区块链共识规则可以是任何节点轮流出块的区块链共识,包括但不限于固定节点出块顺序、每轮随机产生节点出块顺序等各类节点轮流出块的区块链共识。
固定节点出块顺序是指按照预先设置的节点顺序进行轮流出块,也就是说:每轮随机产生节点出块顺序指每经过n次出块后,进行一次节点出块顺序的随机打乱,作为下一个n个节点依次出块的顺序,其中n为出块节点总数,一般称n次出块为一轮出块。
所述共识规则模块包括节点轮流出块规则、出块节点总数、最小节点确认数和分叉选择机制。
其中,节点轮流出块规则规定了在某个时段中合法的出块节点条件。出块节点总数规定可进行出块的节点的数量。
可以理解的是,所述节点轮流出块规则中规定的条件可以是人为确定的,节点轮流规则不仅可以是固定节点出块顺序,还可以为经过y*n次出块后,进行一次节点出块顺序的随机打乱,y可以是人为规定的任意值。
此外,节点轮流出块规则还可以为:节点轮流出块规则是每进行y轮出块后重新进行一次节点选举,选举出的节点可以按照固定节点出块顺序规则或每轮随机产生节点出块顺序规则进行出块。
最小节点确认数规定了需要进行区块确认的最小不同节点数,如pbft共识机制规定需多于三分之二的总节点数的节点接受的区块才能被整个区块链网络承认为合法区块,所以在pbft中最小节点确认数为总节点数量的三分之二并对数值进行向上取整。在本发明实施例中,规定只有当最小节点确认数达到总节点数量的三分之二加一后向上取整的数值的时候才可出块,即,用n来表示最小节点确认数,用n来表示总节点数量,则n=ceiling(2/3n 1)。
分叉选择机制规定了在节点收到多个区块链分叉时,如何进行分叉合法性的判断。在本发明实施例中采取的分叉选择机制是,当收到多个区块链分叉时,选择区块链高度最大且区块链中包含了本地区块链数据库中所有不可逆区块的分叉。
所述出块合法性确认模块用于判断当前节点是否具有出块的权力,所述出块合法性确认模块是通过区块合法性确认机制来判定当前时段出块是否符合最小节点确认数。具体地,区块合法性确认机制是指通过读取本地存储的区块链中的各个区块,识别各个区块的生产节点,通过生产节点的数量判断当前节点进行出块是否符合最小节点确认数。
为了更加详细地说明出块合法性确认过程,参阅图3,其中,当出块节点进行出块时,从节点本地数据库中读取区块链数据,进行判断,具体逻辑如下:
s01)、判断读取的区块链数据中区块链高度与预设的第一阈值进行比较,若区块链高度与第一阈值相同时,表示区块链中只存在创始区块中,第x节点满足出块条件;若区块链高度大于第一阈值时,执行步骤02);
s02)、将区块链高度与最小节点确认数进行比较,若区块链高度小于最小节点确认数时,则判断区块链中是否存在当前节点出的区块,若区块链中不存在当前节点出的区块,则出块合法,若区块链中存在当前节点出的区块,则出块不合法;
若区块链高度大于等于最小节点确认数时,则从区块链最大高度向前读取n1-1个区块(n1为可出块的节点总数),若第n1-1个区块的高度大于最大高度,即为区块链长度不足n1-1,此时读取到创世区块为止,判断每个区块所对应的可出块的节点,然后加上当前可出块的节点(即本步骤中的第x节点)作为一个集合,并执行步骤s03);
s03)、判断集合是否有重复的节点,若有则进行去重,舍弃重复的节点再执行s04),若无重复的节点直接执行步骤s04);
s04)、判断无重复节点的集合的节点数与最小确认数的大小,若集合节点数不小于最小节点确认数,则满足出块合法。
其中,所述第一阈值为0。
可以理解的是,所述创世区块通常是指区块链里面所有区块的共同祖先,这意味着从任一区块,循链向后回溯,最终都将到达创世区块。
此外,需要强调的是,通过上述方式可以确定出块情况,而除了以上所述情况外,其余情况一律都不满足条件,均不能进行出块。
通过上述内容,可以更好地确定出块的合法性,这样即使出现了短暂的网络不通畅,导致节点主机之间暂时无法通信的场景,当前的出块节点也能够及时出块。
所述不可逆区块模块用于保护区块链的不可篡改特性。
不可逆区块是指在区块链上的某个区块已被区块链共识机制所接受,不会因为分叉等原因而改变或删除的区块,保证了不可逆区块不会因为区块链分叉而被重写。
具体的,出块节点接收到一个区块链分叉时,判断该区块链分叉高度是否高于节点数据库中区块链高度,若高于,则出块节点会对数据库中的区块链回滚至分叉发生时的高度,并将接收到的区块链分叉中所有区块加入数据库中,完成不可逆标记;若低于,则舍弃该区块链分叉。
也就是说,当发现接收的区块链分叉需要回滚的区块高度小于不可逆区块高度时,不进行区块链分叉的区块同步,而是直接舍弃,从而节约网络流量。
其中,所述不可逆区块高度的具体判定方法为,当前区块链高度减去最小节点确认数所得的数值即为不可逆区块的高度,且在此高度的区块和此高度之前的所有区块都是不可逆的,也就是这些区块的内容不会因为分叉等原因被改变。
通过上述内容,出块节点对最新区块完成不可逆标记,实现了保护区块链的不可篡改特性。
通常情况下,不可逆区块是指在区块链上的某个区块已被区块链共识所接受,不会因为分叉等原因而改变或删除的区块。而所述不可逆区块机制的作用是保证不可逆区块不会因为区块链分叉而被重写
其中,不可逆区块是指在区块链上的某个区块已被区块链共识所接受,不会因为分叉等原因而改变或删除的区块。
参阅图2,本公开一个实施例方案中,所述区块链共识系统包括了出块节点和非出块节点,例如所述出块节点为第x节点,出块节点为第一节点、第二节点…第x-1节点、第x 1节点…第n节点,出块节点和非出块节点的的步骤为s1,非出块节点的步骤为s2;
其中,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节点通过读取本地存储的区块链中的各个区块,识别各个区块的生产节点,通过生产节点的数量判断当前节点进行出块是否符合最小节点确认数。
为了更加详细地说明出块合法性确认过程,参阅图3,其中,当轮到第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节点将区块链中符合不可逆区块规则所在的高度的区块标记为不可逆区块。
实施例3
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
1.一种区块链共识系统,其特征在于,包括:可出块节点名单模块、网络通讯模块、共识规则模块、出块合法性确认模块和不可逆区块模块;
所述可出块节点名单模块用于确定此区块链中被赋予出块权的节点;
所述网络通讯模块用于节点之间的通讯和数据传输;
所述共识规则模块用于规定区块链的共识规则;
所述出块合法性确认模块用于判断当前节点是否具有出块的权力;
所述不可逆区块模块用于保护区块链不被篡改。
2.根据权利要求1所述的区块链共识系统,其特征在于,所述出块节点名单模块存储有所有可出块节点的信息,以及节点地址、节点公钥或节点证书。
3.根据权利要求2所述的区块链共识系统,其特征在于,所述共识规则模块包括节点轮流出块规则、出块节点总数、最小节点确认数和分叉选择机制;
所述节点轮流出块规则用于确定出块方式;
所述出块节点总数用于确定所有节点数量;
所述最小节点确认数规定了需要进行区块确认的最小不同节点数;
所述分叉选择机制,当节点收到多个区块链分叉时,选择区块链高度最大且区块链中包含了本地区块链数据库中所有不可逆区块的分叉。
4.根据权利要求3所述的区块链共识系统,其特征在于,所述最小节点确认数为:
n=ceiling(2/3n 1),其中,n来表示最小节点确认数,用n来表示总节点数量。
5.根据权利要求2所述的区块链共识系统,其特征在于,所述出块合法性确认模块是通过区块合法性确认机制来判定当前时段出块是否符合最小节点确认数。
6.根据权利要求5所述的区块链共识系统,其特征在于,区块合法性确认机制包括:通过读取本地存储的区块链中的各个区块,识别各个区块的生产节点,通过生产节点的数量判断当前节点进行出块是否符合最小节点确认数。
7.根据权利要求3所述的区块链共识系统,其特征在于,所述出块合法性确认模块的判断逻辑为:
s01)、当轮到第x节点出块时,从节点本地数据库中读取区块链数据,判断读取的区块链数据中区块链高度与预设的第一阈值进行比较,若区块链高度与第一阈值相同时,表示区块链中只存在创始区块中,第x节点出块合法;若区块链高度大于第一阈值时,执行步骤1302);
s02)、将区块链高度与最小节点确认数进行比较,若区块链高度小于最小节点确认数时,则判断区块链中是否存在当前节点出的区块,若区块链中不存在当前节点出的区块,则出块合法,若区块链中存在当前节点出的区块,则出块不合法;
若区块链高度大于等于最小节点确认数时,则从区块链最大高度向前读取n1-1个区块,n1为可出块的节点总数,若第n1-1个区块的高度大于最大高度,此时读取到创世区块为止,并判断每个区块所对应的可出块的节点,然后加上第x节点形成一个集合;
s03)、判断集合是否有重复的节点,若有则进行去重,舍弃重复的节点再执行s04),若无重复的节点直接执行步骤s1304);
s04)、判断无重复节点的集合的节点数与最小确认数的大小,若集合节点数不小于最小节点确认数,则满足出块合法。
8.根据权利要求7所述的区块链共识系统,其特征在于,所述第一阈值为0。
9.根据权利要求1所述的区块链共识系统,其特征在于,该系统包括第x节点,第x节点执行步骤为:
若当前轮到第x节点出块,第x节点响应于出块验证指令,若出块验证通过,则执行出块操作,将交易打包为最新区块存入本地区块链数据库中,同时将所述最新区块通过网络通讯模块发送至其他节点处,若验证失败则不执行出块操作。
10.根据权利要求1所述的区块链共识系统,其特征在于,该系统包括第一节点、第二节点…第x-1节点、第x 1节点…第n节点,第一节点、第二节点…第x-1节点、第x 1节点…第n节点执行步骤为:
所述第一节点、第二节点…第x-1节点、第x 1节点…第n节点判断所述最新区块是否位于可接受的区块链分叉上、判断所述第x节点是否存在于所述可出块节点名单中、判断当前时间点是否轮到所述第x节点进行出块、判断所述最新区块的合法性,若同时满足位于可接受的区块链分叉上、处于可出块节点名单、轮到第x节点出块、出块合法,则将所述最新区块添加至本地存储的区块链上,若未同时满足位于可接受的区块链分叉上、处于可出块节点名单、轮到第x节点出块、出块合法,则舍弃该最新区块。
技术总结