Page 145 - 《软件学报》2026年第1期
P. 145
142 软件学报 2026 年第 37 卷第 1 期
(1) 建立身份: 该步骤针对无许可区块链设计. 无许可区块链中的节点缺乏可信的身份认证, 因此节点在加入
区块链分片系统前需要建立身份 (通常采用 PoW 机制建立身份), 以防范潜在的女巫攻击 [32] . 相比之下, 许可型区
块链通常不需要执行该步骤.
(2) 组建分片: 系统根据预定的规则将已建立身份的共识节点分配至不同的分片, 并构建相应的分片网络. 为
确保各分片内部的节点能够相互识别, 系统会采用特定协议, 使得同一分片中的所有节点能够相互通信并识别彼
此的身份信息.
(3) 状态分配: 系统按照预定的分配规则将全局状态划分至不同分片, 该步骤通常在配置阶段完成. 此外, 为更
好适应系统的实时负载, 部分方案 [33,34] 可能在共识阶段对状态进行动态调整.
(4) 状态迁移: 在动态划分和调整状态后, 相关状态需要在不同的分片中进行迁移. 在此过程中, 必须确保数据
的一致性和完整性.
(5) 分片内共识: 在每个分片内, 所有节点需要就一组交易达成一致. 为此, 所有诚实节点必须在其所属分片内
对提议的最新区块达成共识.
(6) 跨分片交易处理: 对于跨分片交易, 各相关分片必须协调一致, 以确保交易的原子提交. 这一过程通常需要
通过跨分片通信来实现, 以确保不同分片间的交易能够正确处理.
身份建立、分片组建、状态分配以及状态迁移通常在配置阶段执行 (在动态适应性较强的方案中, 状态分配
和状态迁移可能在共识阶段执行), 分片内共识和跨分片交易处理则在共识阶段执行.
1.2.2 区块链状态分片技术
在区块链系统中, “状态”指的是系统中所有数据在某一时刻的全局快照, 随着每笔交易的执行而变化, 反映了
每个参与者在当前时刻的最新状态. 目前区块链系统中主要通过 UTXO (unspent transaction output) 和账户/余额模
[3]
型两种方式保存状态. 比特币采用 UTXO 模型保存状态, 系统中每笔交易的输出被视为未花费的输出, 而每个输
入都会引用先前未花费的输出, 这些引用的输出被标记为已花费, 一笔交易可能涉及多个输入和输出. 以太坊则采
用账户/余额模型 [4] , 系统直接存储每个账户的状态信息, 包括账户地址、余额及智能合约代码等 [35] . 用户可通过
账户余额发起交易, 每笔交易包括一个发送方和一个接收方.
区块链状态分片技术的基本原理是将区块链的全局状态数据进行划分并分散存储在各个分片中, 各分片能够
独立处理分片内交易, 并协同完成跨分片交易处理, 每个节点只需维护其所在分片的账本状态和相关区块数据 (如
图 2 所示). 假设全局数据规模为 B, 在未分片系统和部分分片系统中, 节点需要存储完整数据, 系统存储效率为
1/N. 相比之下, 在全分片系统中, 假设分片数量为 K, 理论上节点仅需存储 B/K 的数据, 系统存储效率提升至 K/N,
节点存储压力降低为原来的 1/K. 状态分片技术主要包括状态分配、状态迁移和跨分片交易处理这 3 个关键步骤.
需要指出的是, 节点建立身份、分片组建及分片内共识这 3 个步骤与状态分片技术相互独立, 在本文中不作详细讨论.
2 状态分片技术的关键问题与方法
2.1 状态分配
状态分配将全局状态数据映射到不同的分片中维护, 在设计过程中需要考虑多个优化目标, 特别是如何降低
系统跨分片交易比例及实现分片负载均衡. 我们首先对状态分配问题给出形式化定义, 并明确其中涉及的符号及
其意义.
假设全分片系统包含 K 个分片, 记为集合 S = {s 1 , s 2 ,..., s K }. 状态数据集合定义为 D = {d 1 ,d 2 ,...,d n }, n 表示系
T = {t 1 ,t 2 ,...,t m }, m 表示系统中的交易数量. 每个交易 t i 涉及一个或多
统中所有状态数据的数量. 交易集合定义为
个状态数据, 即 t i =(d from , d to ), 通常交易会被分配至其发送状态所在分片中进行处理. 在 UTXO 模型中, 一笔交易可
o
能会涉及多个输入和输出状态, 此时, d from 、d t 可被表示为状态数据的集合.
f : D×S → {0,1} f(d i , s j ) = 1 表示状态数据 d i 被分配到分
.
状态的分配过程可以被定义为一个二元映射函数
片 s j ; f(d i , s j ) = 0 表示状态数据 d i 未被分配到分片 s j . 状态分配需满足以下约束条件.

