Page 150 - 《软件学报》2026年第1期
P. 150

苏琳萱 等: 区块链状态分片技术综述                                                               147


                 MPT  通过将相同的前缀合并成一条路径来减少存储空间, 避免了重复存储相同前缀的多个节点, 因此具有较小的
                 存储开销. 同时, 由于    MPT  结合了默克尔树的特性, 使得状态数据具备不可篡改性, 即任何对状态数据的修改都会
                 引起默克尔树根      (Merkle root) 的变化, 从而保证了状态数据的完整性和一致性. 在全局状态树中, 叶子节点存储账
                 户的核心状态字段. 每个账户的状态由以下核心字段组成:                  d i = {X i |η,ω,ζ}, 其中,  X i  代表账户地址,  η 为交易计数器
                 (nonce), 表示账户发送的交易次数或合约创建次数,              ω  为账户余额    (balance),  ζ  为合约特有字段, 包括存储根
                 (storageRoot) 和合约代码哈希  (codeHash) 等, 用于存储合约数据和标识合约代码.
                    在全分片系统中, 为支持动态状态分配, 必须设计有效的状态管理机制, 维护状态数据与各个分片之间的映射
                 关系. BrokerChain [15] 提出了基于分片状态树   (modified shard state tree, mSST) 的状态管理机制, 确保每个分片都能
                 了解全局状态与分片的存储映射关系, 具体来说, 在               BrokerChain  中, 每个分片都会维护一个唯一的       mSST, 以记录
                 当前状态的存储位置. mSST       的设计基于以太坊的状态树, 保证状态的高效存储与管理                   (如图  6  所示). 与传统的状
                 态树不同, BrokerChain  中的  mSST  是基于所有账户状态的存储映射构建的. 具体而言, BrokerChain           通过一个向量
                 φ 表示账户的存储分片. 该向量定义如下:

                                                      φ = [e 1 ,e 2 ,...,e K ]                        (6)
                                          i
                 其中,   e i = 1 表示账户存储在分片   中, 而  e i = 0 表示账户不存储在该分片. 例如, 当     φ = 0010 时, 表示该状态数据存
                 在分片   3  中. 为了支持该机制, BrokerChain  修改了账户状态的字段, 其数据结构定义如下:

                                                          {
                                                      d i = X i |φ,η,ω,ζ  }                           (7)

                                               分片 #1 mSST                      状态分配结果
                                                 根节点     共享前缀: a              地址示例   分片
                                                                               a13    #1
                                                                  共享前缀: 1      a14    #2
                                                                                   …





                                     键末位    φ    η   ω    ζ         键末位    φ    η   ω    ζ
                                       4   0100       /              3    1000  23  45   /
                                           叶子节点 #a14                      叶子节点 #a13
                                                    图 6 分片状态树结构

                    相较于以太坊的账户状态, 新增字段            φ 表示该账户的存储位置, 对于不属于本分片的账户, mSST               中仅存储该
                              φ, 而不保留其具体的账户状态数据           η ( 、 ω、
                 账户的分片映射                                        ζ  为空).
                    mSST  充分利用   MPT  自带的路径压缩特性, 结合空字段存储策略, 仅存储与本分片相关的完整账户状态, 从
                 而显著降低了全局存储开销. 此外, 每个分片均独立维护其对应的                    mSST, 允许各分片高效查询状态数据的存储位
                 置. 由于  mSST  继承了  MPT  的索引机制, 查询某个账户状态的存储分片仅需在               mSST  中进行一次路径查找. MPT
                                 O(l), 其中  l 是账户地址的长度, 即键的位数. 在以太坊中, 账户地址通常为               160  位  (20  字节),
                 的查询复杂度通常为
                 因此, 查询的时间复杂度接近常数时间, 即           O(1).
                    此外, 通过在    mSST  中查询存储映射信息, BrokerChain     能够快速判断某笔交易是分片内交易还是跨分片交
                 易: 由于分片存储映射向量        φ 的查询仅涉及固定长度的比特运算, 其查询时间复杂度为                  O(1).
                  2.2   状态迁移
                    动态分配通过调整各分片所维护的状态数据, 能够有效优化系统的跨分片交易比例并实现分片负载均衡. 为
                 满足动态分配的需求, 状态数据需在分片之间进行迁移. 在状态迁移的过程中, 需要满足以下两个要求.
   145   146   147   148   149   150   151   152   153   154   155