一种面向联盟链的区间化学习型认证分片状态存储系统

摘要: 本发明涉及状态存储,具体为一种面向联盟链的区间化学习型认证分片状态存储系统。背景技术:1、随着联盟链系统长期运行,链上状态数据及其历史版本会不断累积。对于支持智...
一种面向联盟链的区间化学习型认证分片状态存储系统

本发明涉及状态存储,具体为一种面向联盟链的区间化学习型认证分片状态存储系统。

背景技术:

1、随着联盟链系统长期运行,链上状态数据及其历史版本会不断累积。对于支持智能合约或复杂业务逻辑的联盟链而言,链上状态不仅包括账户余额,还包括账户信息、合约变量、业务记录以及跨组织协作数据等多种内容。同一状态地址在不同区块高度下会产生多个历史版本,因此状态存储系统不仅需要支持当前状态查询,还需要支持历史状态查询和完整性验证。

2、现有联盟链分片状态存储方案通常通过将全局状态地址空间划分给不同委员会或分片管理,以降低单个委员会的存储压力。但是,在每个分片内部,状态数据通常仍然依赖 merkle tree、merkle b+ tree、merkle patricia trie 等树形认证索引结构进行组织。此类结构虽然能够生成状态根和查询证明,但在长期运行和频繁更新场景下需要维护大量显式树节点、哈希路径和历史索引节点,容易产生较高的存储冗余。

3、已有学习型状态存储方案能够通过列式布局和学习型索引降低单节点状态存储开销,但这类方案通常面向单节点完整状态存储,缺少分片环境中的地址区间划分、区间所有权描述、委员会归属关系以及全局状态根认证机制。因此,单纯的本地学习型存储根只能证明数据属于某个本地存储结构,不能证明该存储结构在当前系统配置下是否合法负责目标地址所在区间。

4、此外,在分片系统中,不同地址区间的状态规模和访问负载可能随时间发生变化。若某个区间持续增长,系统需要能够将其拆分为多个较小区间;若相邻区间长期低负载,系统也需要能够将其合并,以减少实例数量和元数据开销。但是,若直接按照物理文件位置或数据量中点进行拆分,可能会把同一状态地址的不同历史版本拆分到不同实例中,从而破坏历史查询语义和认证语义。

5、所以现有区间化学习型认证分片状态存储系统存在以下技术问题:

6、(1)树形认证索引存储冗余较高

7、传统 merkle 类认证索引需要维护显式树节点、指针关系和多层哈希路径。当状态频繁更新且需要保留历史版本时,旧版本索引节点不能立即删除,容易造成索引存储规模持续增长。

8、(2)单节点学习型存储缺少分片语义

9、现有学习型状态存储方案可以证明某个状态版本属于本地状态根,但无法证明该本地状态根对应哪个地址区间,也无法证明该区间当前由哪个委员会负责。

10、(3)缺少区间所有权认证

11、在分片系统中,客户端不仅需要验证数据没有被篡改,还需要验证返回该数据的存储实例是否确实负责目标地址所在区间。现有单节点存储根无法表达这种区间归属关系。

12、(4)缺少全局认证闭环

13、分片系统中存在多个委员会和多个存储实例。若仅有本地状态根,客户端无法将查询结果验证到全局状态根,也无法判断该结果是否被当前区块头承诺。

14、(5)直接拆分学习型存储实例可能破坏历史查询

15、学习型状态存储通常将同一状态地址的多个历史版本连续或有序组织。如果直接按照物理文件中点或数据量中点进行拆分,可能把同一地址的不同历史版本拆分到不同实例中,导致历史查询需要跨实例完成,并破坏本地认证语义。

16、(6)缺少相邻区间合并机制

17、当多个相邻区间长期处于低负载状态时,若不能合并,将导致系统中存储实例数量不断增加,路由表、区间描述符和认证树维护成本上升。

技术实现思路

1、本发明针对上述技术问题,提供一种面向联盟链的区间化学习型认证分片状态存储系统,使系统能够在降低局部状态存储开销的同时,支持分片环境下的状态路由、历史查询、区间所有权认证、全局状态认证以及区间拆分/合并。

2、为实现上述目的,本发明提供如下技术方案:

3、一种面向联盟链的区间化学习型认证分片状态存储系统,包括有全局状态根层用于聚合所有委员会认证根,并生成写入区块头的全局状态根;

4、委员会认证层用于聚合该委员会管理的所有区间描述符,并生成委员会认证根;

5、区间描述与路由层用于维护状态地址、地址区间、存储实例和委员会之间的映射关系;

6、区间化学习型认证存储实例层用于维护对应地址区间内的状态数据及历史版本;

7、底层学习型认证存储引擎层用于按照复合键组织状态版本,并生成本地完整性证明。

8、在一种优选的实施方式中,所述区间化学习型认证存储实例层中状态数据包括状态地址和状态值,所述底层学习型认证存储引擎层中复合键由状态地址和区块高度组成。

9、在一种优选的实施方式中,所述区间化学习型认证存储实例层中包括有写入缓存层用于接收新写入的状态版本;

10、有序状态数据文件层用于保存按照复合键排序的状态版本;

11、学习型索引文件层用于根据复合键预测目标状态版本的位置;

12、认证文件层用于生成本地完整性证明;

13、本地状态根生成模块用于生成该实例的本地状态根。

14、在一种优选的实施方式中,所述区间描述与路由层中区间描述符将本地状态根与分片环境中的地址区间归属关系绑定,路由表用于根据状态地址定位目标地址区间、目标存储实例和所属委员会,所述路由表中的数据发生以下变化:新增地址区间、地址区间发生拆分、相邻地址区间发生合并、区间对应的本地状态根发生变化或区间映射版本发生变化中的一种或多种是需要更新。

15、在一种优选的实施方式中,所述地址区间发生拆分的步骤为:

16、s1.系统检测目标实例是否满足拆分条件;

17、s2.系统根据地址分布、状态数量或访问负载选择拆分边界;

18、s3.系统保证是完整地址边界;

19、s4.系统创建左实例和右实例;

20、s5.系统按照状态地址将原实例中的状态版本划分至对应新实例;

21、s6.左实例和右实例分别重建或更新学习型索引文件;

22、s7.左实例和右实例分别生成本地认证文件;

23、s8.左实例和右实例分别生成新的本地状态根;

24、s9.系统生成两个新的区间描述符;

25、s10.系统更新路由表;

26、s11.系统更新委员会认证根;

27、s12.系统更新全局状态根。

28、在一种优选的实施方式中,所述相邻地址区间发生合并的步骤为:

29、s1.系统检测两个相邻实例是否满足合并条件;

30、s2.系统确认两个实例的地址区间连续且不重叠;

31、s3.系统创建新的合并实例;

32、s4.系统读取两个原实例中的状态版本;

33、s5.系统按照复合键 对状态版本进行有序合并;

34、s6.系统生成新的有序状态数据文件;

35、s7.系统生成新的学习型索引文件;

36、s8.系统生成新的认证文件;

37、s9.系统计算新实例的本地状态根;

38、s10.系统生成新的区间描述符;

39、s11.系统删除或废弃原有两个区间描述符;

40、s12.系统更新路由表;

41、s13.系统更新委员会认证根;

42、s14.系统更新全局状态根。

43、在一种优选的实施方式中,所述区间化学习型认证存储实例层采用三级认证结构,包括有本地存储认证、区间所有权认证和全局状态认证。

44、在一种优选的实施方式中,所述本地存储认证用于证明查询结果确实属于某个区间化学习型认证存储实例,验证端根据查询结果和本地证明重构本地状态根,如果重构得到的本地状态根等于区间描述符中记录的区间化存储实例的本地状态根,则说明该查询结果属于对应实例。

45、在一种优选的实施方式中,所述区间所有权认证用于证明目标状态地址确实属于该实例负责的地址区间,并且该实例的本地状态根被区间描述符承诺,验证端验证状态地址是否在区间描述符中,同时验证区间描述符是否被委员会认证根承诺,若验证通过,则说明该存储实例在当前映射版本下合法负责目标地址所在区间。

46、在一种优选的实施方式中,所述全局状态认证用于证明委员会认证根属于全局状态根,系统将所有委员会认证根聚合生成全局状态根,并将该全局状态根写入区块头或全局状态承诺中,验证端通过全局证明验证目标委员会认证根是否被全局状态根承诺,若最终得到的全局状态根与区块头中的状态根一致,则查询结果验证通过。

47、与现有技术相比,本发明的有益效果为:

48、1、本发明将学习型认证状态存储结构改造为面向连续地址区间的局部存储实例,使每个实例只负责一个地址区间内的状态及其历史版本;

49、2、本发明使用状态地址和区块高度作为复合键组织状态版本,使同一状态地址的多个历史版本能够连续或有序存储,从而支持历史状态查询;

50、3、本发明通过区间描述符绑定地址区间边界、实例编号、委员会编号、映射版本和本地状态根,使本地状态根具有区间所有权语义;

51、4、本发明构建“本地存储认证—区间所有权认证—全局状态认证”的三级认证路径,使查询结果能够从本地状态根验证到全局状态根;

52、5、本发明在拆分区间化存储实例时,以完整状态地址作为拆分边界,保证同一状态地址的全部历史版本不会被拆分到不同实例中,对两个相邻连续地址区间对应的存储实例进行有序合并,生成新的存储实例、本地状态根和区间描述符。避免实例数量无界增长和频繁调整。