首页 / 基于区块链分片的区块链节点共识方法及系统

基于区块链分片的区块链节点共识方法及系统公开 发明

技术领域

[0001] 本发明涉及区块链节点共识技术领域,特别是涉及基于区块链分片的区块链节点共识方法及系统。

相关背景技术

[0002] 区块链技术,最初作为比特币的底层技术而广为人知,是一种去中心化的分布式账本技术,通过加密技术保证了交易数据的安全性和不可篡改性。随着区块链应用的不断扩展,其在金融、供应链、医疗等多个行业的应用逐渐显现。区块链的核心优势在于其能够提供一个透明、安全、去中心化的数据共享环境,但随着区块链网络的节点增多和交易量的上升,其原有架构面临着可扩展性和处理效率的挑战。为了解决区块链的可扩展性问题,分片技术应运而生。分片技术通过将网络分割成多个较小的片(Shards),使得各片可以并行处理交易和存储数据,从而大幅提高了系统的吞吐量。每个分片处理一部分网络的交易,互不干扰,但仍然保持全网的数据一致性。虽然分片技术在提高区块链性能方面取得了显著成效,但它也带来了一些新的挑战。特别是在各分片重配置过程中,需要网络在分片更新过程中达到全网一致,这将不可避免地引入了较高的延迟和复杂性,无法满足用户需求。

具体实施方式

[0022] 应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
[0023] 实施例一
[0024] 本实施例提供了基于区块链分片的区块链节点共识方法;
[0025] 基于区块链分片的区块链节点共识方法,包括:
[0026] S101:区块链节点根据自身的硬件性能特征,选择加入委员会分片、选择加入全局分片或选择不加入任何一种分片;
[0027] S102:将加入到委员会分片中的区块链节点称之为委员会节点,委员会节点收集交易数据,对交易数据进行哈希处理,得到哈希值;委员会节点根据哈希值,将自身配置到委员会默克尔树中;所述委员会默克尔树,采用改进的默克尔压缩前缀树结构来实现;
[0028] 同时,将加入到全局分片中的区块链节点称之为全局节点,全局节点接收各个委员会分片的根哈希;根据根哈希,将全局节点配置到全局默克尔树中;所述全局默克尔树,也采用改进的默克尔压缩前缀树结构来实现;
[0029] S103:对于委员会分片,如果委员会节点的关键阈值小于设定阈值,则将当前委员会节点设置为非活动节点,将非活动节点的哈希值记录到其父节点中,并删除父节点下的所有节点,将父节点的标志位设置为零;
[0030] 对于全局分片,如果全局节点的关键阈值小于设定阈值,则将当前全局节点设置为非活动节点,将非活动节点的父节点的标志位设置为零;
[0031] S104:对委员会分片的委员会节点完成共识操作;对全局分片的全局节点完成共识操作。
[0032] 进一步地,所述区块链节点根据自身的硬件性能特征,选择加入委员会分片、选择加入全局分片或选择不加入任何一种分片,之前还包括:
[0033] S100:构建区块链;所述区块链,包括一个全局分片和若干个委员会分片;所述全局分片,包括:若干个全局节点;每个委员会分片,包括:若干个委员会节点。
[0034] 所述全局分片,用于负责维护区块链的整体状态。全局分片中的全局节点执行跨分片的数据验证和事务协调,保证不同分片间的数据一致性。全局分片通过采用改进的默克尔压缩前缀树结构,提高数据访问效率,同时优化存储空间利用率。此外,全局分片也负责生成和验证整个网络的共识决定,是区块链网络中信息交流和决策的中心。全局默克尔树的根哈希提供了一个网络范围内数据状态的全面视图,使得全局节点可以有效地验证跨分片的数据一致性。
[0035] 所述委员会分片,用于处理事务并在分片区块链中生成块。委员会分片维护分片内活动帐户的当前状态,以及已验证的块的历史数据。这些历史数据用于验证新提出的区块中的交易,并方便用户查询过去的区块信息。任何具有计算能力的节点都可以通过权益证明(PoS)机制加入网络。
[0036] 所述全局节点,用于维护区块链网络的整体状态和确保网络中的数据一致性和完整性。全局节点通过改进的默克尔压缩前缀树结构优化数据的处理和存储,提高访问效率和安全性。
[0037] 所述委员会节点,用于处理特定任务并生成区块。委员会节点的设置使其能够在不影响全局节点性能的情况下,高效地管理局部数据和事务,从而加速整个网络的处理速度和响应时间。
[0038] 所述全局节点和委员会节点均通过区块链节点来实现。
[0039] 进一步地,所述S101:区块链节点根据自身的硬件性能特征,选择加入委员会分片、选择加入全局分片或选择不加入任何一种分片,包括:
[0040] 如果区块链节点的处理速度高于设定阈值,则当前区块链节点被允许选择加入委员会分片;
[0041] 如果区块链节点的存储容量大于设定阈值,则当前区块链节点被允许选择加入全局分片;
[0042] 如果区块链节点的处理速度高于设定阈值,且存储容量大于设定阈值,则当前区块链节点被允许选择同时加入委员会分片和全局分片。
[0043] 进一步地,所述S102:改进的默克尔压缩前缀树结构,包括:依次连接的扩展节点、分支节点和叶节点;所述扩展节点连接一个或多个分支节点,所述分支节点连接一个或多个叶节点;扩展节点的属性包括:共有前缀、指针、标志位和关键阈值;分支节点的属性,包括:分支、标志位和关键阈值;叶节点的属性,包括:账户余额信息路径的末端部分、数据值和关键阈值。
[0044] 所述共有前缀,是指在一个扩展节点中,所有子节点共享的地址前缀,它是由一系列地址位组成的序列。
[0045] 所述共有前缀,用于简化和加速区块链网络中的数据访问路径。通过预先解析共有前缀,系统能够快速定向到正确的子节点,减少处理时间和提升效率。
[0046] 所述指针,是指一个参照,指向当前节点的下一个节点,下一个节点可能是扩展节点、分支节点或叶节点。
[0047] 所述指针,用于在树结构中导航,使得数据结构可以连续和有序地访问,从而支持复杂的查询和更新操作。
[0048] 所述标志位,是指一个二进制标记,用于表示节点在树结构中的特定状态。
[0049] 所述标志位,用于指示节点的可访问性或有效性。在扩展节点和分支节点中,标志位可以用来表示节点是否参与某个操作。例如,如果标志位设置为1,则可能表示节点是活跃的并且可以访问;如果设置为0,则表示该节点及其下游节点是被废弃的。
[0050] 所述关键阈值,是指是一个数值,用来表示节点的活跃度或在树中的重要性。
[0051] 所述关键阈值用于区分节点的活跃状态。具体地,当关键阈值大于10时,节点被视为“活跃”,这意味着节点频繁被访问或操作,应处理。相反,当关键阈值小于或等于10时,节点被视为“不活跃”,表明节点的访问和更新频率较低,将它们的哈希值记录在父节点中,并删除父节点下的整个子树。然后将这些非活动节点对应的父节点的标志字段设置为0。
[0052] 所述分支,是指链接的多个子节点,这些子节点可以是扩展节点或叶子节点。
[0053] 所述分支,用于用于管理数据路径的多样化,允许树结构以非线性方式扩展,增强数据结构的灵活性和索引能力。
[0054] 所述账户余额信息路径的末端部分,是指在叶节点中,用于表示完成路径导航后,指向具体账户余额的最终部分。
[0055] 所述账户余额信息路径的末端部分,用于精确指向和访问区块链账户的具体余额信息,支持精确的账户管理和交易验证。
[0056] 所述数据值,是指存储在叶节点中的实际信息,如账户的余额。
[0057] 所述数据值,用于存储和提供关于区块链账户的具体信息,如余额,支持交易处理和账户状态的更新。
[0058] 进一步地,所述S102:委员会节点根据哈希值,将自身配置到委员会默克尔树中,包括:
[0059] 假设哈希值是一个七位数字ABCDEFG;
[0060] 首先根据哈希值的前两位数字AB,确认当前委员会节点在委员会默克尔树中所归属的扩展节点;
[0061] 然后,根据哈希值的第三位数字C,确认当前委员会节点在委员会默克尔树中所归属的分支节点;
[0062] 然后,根据哈希值的后四个数字DEFG,确认当前委员会节点在委员会默克尔树中所归属的叶节点。
[0063] 所述S102:加入到委员会分片中的区块链节点,收集特定功能的交易数据(如特定类型的智能合约执行或小规模的快速支付交易)。每条交易都被哈希化,构建默克尔树,并作为叶节点存入默克尔树。生成委员会默克尔树后,根据哈希函数SHA‑256计算出委员会默克尔树的根哈希。委员会默克尔树的根哈希被发送到全局分片,用于后续的数据整合和全局验证。
[0064] 所述S102:全局节点接收来自各个委员会分片的根哈希。构建全局默克尔树,全局默克尔树的根哈希提供了一个网络范围内数据状态的全面视图,使得全局节点可以有效地验证跨分片的数据一致性。
[0065] 进一步地,所述根据根哈希,将全局节点配置到全局默克尔树中步骤与委员会节点根据哈希值,将自身配置到委员会默克尔树中的步骤是一致的。
[0066] 进一步地,所述S103:在区块链系统中,到达新分片的节点面临着同步大量分片内状态数据的挑战,当节点在分片之间切换时,它们需要从新分片下载所有相关的状态数据。导致数据同步的巨大开销。为了应对这一问题,通过移除不活跃的节点可以减少需要维护和同步的状态数据量,从而减少新节点同步所需处理的数据量,降低网络带宽使用和存储需求,提高整体网络的响应速度和交易处理率,提高系统的稳定性和可用性。
[0067] 其中,非活动节点,是指:在区块链系统中,非活动节点指的是活跃度(如访问频次、交易参与度等)低于预设阈值的节点。这些节点在一定时间内没有显著贡献或参与到区块链网络的活动中,因此被认为是不活跃的。
[0068] 对于全局分片,如果全局节点的关键阈值小于第二设定阈值,则将当前全局节点设置为非活动节点,将非活动节点的父节点的标志位设置为零;
[0069] 进一步地,所述S104:对委员会分片的委员会节点完成共识操作;对全局分片的全局节点完成共识操作,其中,对委员会分片的委员会节点完成共识操作与对全局分片的全局节点完成共识操作的具体过程是一致的,所述对委员会分片的委员会节点完成共识操作,包括:
[0070] S104‑1:生成重配置方案:委员会分片采用可验证随机函数(VRF)对网络中的所有节点进行随机化洗牌,确保节点分配的公正性和随机性;
[0071] 随机化洗牌是一种在分片过程中用来随机分配节点到各个委员会的方法,通常是为了确保网络的公正性和安全性。
[0072] 洗牌完成后,委员会分片针对每个周期(epoch k)形成的新重配置方案进行共识建立,保证网络中各节点对重配置方案的一致认可,为进入下一阶段做准备;新重配置方案是指根据节点的性能,重新分配节点到适当的分片。这有助于优化网络的整体性能和资源利用。重配置方案通常是指在每个周期(从一组区块到下一组区块的时间段)结束时,为了调整或优化网络资源和节点分布而进行的一系列调整措施。这个方案是在洗牌过程完成后形成的,确保了节点在新的周期中的重新分配是基于最新的网络状态和需求。
[0073] S104‑2:广播重配置方案:经过初步的共识确认后,新的重配置方案被广播至整个区块链网络;
[0074] 该广播机制确保所有参与节点同步更新重配置信息,以便统一网络状态并开始各自的重配置阶段;
[0075] 广播达成一致性后,每个委员会分片正式进入重配置阶段,开始其内部状态的调整和优化,以响应新的网络配置需求;
[0076] S104‑3:压缩状态树:每个委员会分片中的委员会节点将遍历其当前维护的账户状态树,移除不活跃或冗余的节点,获得FlexMPT树,将FlexMPT树标记为 这一过程不仅减轻了存储负担,还优化了数据访问和查询效率;所述不活跃的节点或冗余的节点是指Count小于等于10的节点;
[0077] S104‑4:传送状态树:更新后的状态树(即FlexMPT)被委员会节点发送至下一个周期的相应委员会分片的委员会节点,确保信息的连续性和一致性,为链上交易和验证提供支持;
[0078] S104‑5:合并状态树:委员会节点在接收到更新后的FlexMPT后,将其与之前周期的FlexMPT合并,形成最新的FlexMPT。这一合并过程是基于FlexMPT树结构的特点来执行的,旨在优化数据的存储和访问速度;
[0079] 当存在新的账户状态更改时,则将所述状态更改集成到现有的FlexMPT中,确保每个账户的状态都是最新和唯一的,通过添加新的叶节点或更新现有叶节点的值来实现。
[0080] 当新的FlexMPT包含与现有树重复的节点时,则去除重复的节点,只保留最新的状态,以优化存储空间和提高数据访问效率。
[0081] 当新的交易数据影响多个节点的结构时,则进行必要的路径调整和节点哈希重新计算,以维护状态树的结构完整性和数据一致性。
[0082] 当完成所有节点的更新和确认后,则进行状态树的优化和压缩,删除不必要的分支和节点,从而减轻存储负担并提升查询效率。
[0083] S104‑6:状态共识:更新完成后,委员会分片对所有分片的FlexMPT的根哈希进行共识,从而全网确认账户状态。
[0084] 此外,各全局节点在其FlexMPT上也达成共识,标志着该分片的重配置阶段的成功完成。之后,分片进入下一个周期的共识阶段,开始新的区块生成过程。
[0085] 所述委员会分片是整个区块链基础设施的重要组成部分,由委员会节点构成。委员会节点通过维护整个分类账的账户状态数据来维护整个区块链网络的完整性。通过保留账户状态,这些委员会节点帮助验证者验证区块中的交易(TXs)。
[0086] 进一步地,所述委员会节点,是对等节点,通过分片内选举产生。
[0087] 进一步地,所述可验证随机函数(VRF)是一个关键的密码学工具,它结合了随机性生成和结果验证的功能,在委员会分片的洗牌与共识阶段,VRF用于随机选择验证者,确保验证者的选举过程是公正和难以操控的。这种随机性减少了恶意攻击者对网络的潜在影响。
[0088] 进一步地,所述全局分片,负责处理事务并在分片区块链中生成块。全局分片维护其分配的分片内活动帐户的当前状态,以及他们已验证的块的历史数据。这些历史数据用于验证新提出的区块中的交易,并方便用户查询过去的区块信息。
[0089] 一种改进的默克尔压缩前缀(Merkle PatriciaTrie)树结构,改进后的默克尔压缩前缀(Merkle Patricia Trie)树称为灵活的默克尔帕特里夏树(Flexible Merkle Patricia Trie),简称FlexMPT树;
[0090] FlexMPT树包括三种类型的节点:扩展节点、分支节点和叶节点:
[0091] (1)扩展节点用于简化路径访问,它们包含一个共有前缀shardnibbles、一个指向其他节点的指针next、一个标示特定状态的标志位flag和一个区分节点是否活跃的关键阈值count。扩展节点不存储数据,其主要作用是减少查找过程中需要访问的节点数,从而提高访问效率。扩展节点的数据结构表示如下,其中||表示连接操作。
[0092] Ne={shardnibbles||next||flag||count}
[0093] (2)分支节点可以直接指向多个不同的子节点。每个分支节点包括链接到其他节点的Branches属性、标示特定状态的标志位flags属性和区分节点是否活跃的关键阈值count属性。分支节点管理数据路径的分叉点,允许树结构以非线性方式扩展和索引数据,增强了整个数据结构的效率和功能性。分支节点的数据结构表示如下,其中||表示连接操作。
[0094] Nb={Branches||flags||count}
[0095] (3)叶节点用于存储具体的值,并标志着一个路径的结束。key‑end属性表示区块链账户在达到叶节点后剩余的部分,value属性表示区块链账户的余额,count属性表示节点被访问的频次。叶节点的数据结构表示如下,它直接关联到数据的存储和查询效率,其中‖‖表示连接操作。
[0096] Nl={key‑end||value||count}
[0097] 委员会节点:一组委员会节点组成一个委员会分片。委员会节点负责处理交易并在其所属分片的区块链上生成新区块。此外,这些节点管理其分片内活跃账户的当前状态和相关历史区块记录,这些历史数据用于验证新区块中的交易并为用户提供查询过去区块信息的便捷途径。为了网络的扩展性和包容性,任何具备相应计算资源的节点均可采用权益证明(Proof of Stake,PoS)机制加入该网络。
[0098] 全局节点:全局节点是区块链网络的关键组件,组成全局分片。全局节点维护整个分类账中的账户状态数据,对保持区块链网络的完整性至关重要。通过保存这些账户状态,全局节点不仅支持验证者在验证区块中的交易时确认数据的真实性,而且其存储的节点数据还能够支持生成具有可验证随机函数(VRF)的重构方案,进一步增强网络的安全性和稳定性。
[0099] 需要注意的是,全局分片不是区块链网络中的一个中心化组件。全局分片可以由网络中任何具有大量数据存储容量的节点组成,确保了网络的分布式特性和数据的全面可访问性。区块链节点可以根据自身的计算或存储能力选择加入委员会分片或全局分片,或者同时加入两者。
[0100] 为了进一步理解分片重构,我们引入FlexMPT的数据结构,FlexMPT维护全局分片和委员会分片中的账户状态,它是从MPT重新设计的,以适应分片重新配置过程的需求。
[0101] 由于委员会节点仅维护其各自委员会分片内某些帐户的状态以进行交易验证,而全局分片保留网络的完整帐户状态,因此我们为全局分片和委员会分片使用不同的方法来处理接收到的FlexMPT数据结构。
[0102] 对于委员会分片,如图1所示,FlexMPT只包括在当前纪元内启动其事务的帐户。对于在FlexMPT中count值小于10的节点,从这样一个节点开始的节点子树被认为是不活动的。为了管理这些非活动节点,将它们的哈希值记录在父节点中,并删除父节点下的整个子树。然后将这些非活动节点对应的父节点的标志字段设置为0。当全局分片在共识阶段访问FlexMPT时,如果遇到保存下一个节点的哈希值但其标志设置为0的节点,则无法访问该分支下的节点或直接插入数据。
[0103] 对于全局节点,如图2所示,FlexMPT需要保存所有帐户的最新状态。对于在FlexMPT中count值小于10的节点,仍然保留节点及其相应的分支以供进一步验证。但是,为了与全局分片保持一致,与这些非活动节点相对应的父节点的标志字段也被设置为0。
[0104] 实施例二
[0105] 本实施例提供了基于区块链分片的区块链节点共识系统,包括:区块链节点;
[0106] 区块链节点根据自身的硬件性能特征,选择加入委员会分片、选择加入全局分片或选择不加入任何一种分片;
[0107] 将加入到委员会分片中的区块链节点称之为委员会节点,委员会节点收集交易数据,对交易数据进行哈希处理,得到哈希值;委员会节点根据哈希值,将自身配置到委员会默克尔树中;所述委员会默克尔树,采用改进的默克尔压缩前缀树结构来实现;同时,将加入到全局分片中的区块链节点称之为全局节点,全局节点接收各个委员会分片的根哈希;根据根哈希,将全局节点配置到全局默克尔树中;所述全局默克尔树,也采用改进的默克尔压缩前缀树结构来实现;
[0108] 对于委员会分片,如果委员会节点的关键阈值小于设定阈值,则将当前委员会节点设置为非活动节点,将非活动节点的哈希值记录到其父节点中,并删除父节点下的所有节点,将父节点的标志位设置为零;对于全局分片,如果全局节点的关键阈值小于设定阈值,则将当前全局节点设置为非活动节点,将非活动节点的父节点的标志位设置为零;
[0109] 对委员会分片的委员会节点完成共识操作;对全局分片的全局节点完成共识操作。
[0110] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页 第1页 第2页 第3页
相关技术
分片区块相关技术
区块分片相关技术
刘祥志发明人的其他相关专利技术