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

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


                               T lock ⊆ T i : 在状态迁移过程中, 必须锁定  T loc 中的所有交易, 避免交易被中止.
                                                                k
                    ● 锁定交易集
                             φ : D×S ×S → D: 此函数表示将状态数据                       ′                   ′
                    ● 数据迁移                                  d i 从   s src  迁移至   s dst , 即   d =φ(d i , s src , s dst ), 迁移后   f(d , s dst )=1.
                                                                              i
                                                                                                  i
                                                    ′
                                                                                     ′
                                                   d
                    ● 状态更新   ψ : D×S → B: 在   s dst  上更新  , 确保数据在新分片上的一致性. 函数     ψ(d , s dst ) 将返回布尔值, 表示
                                                    i                                i
                 更新操作是否成功.
                    ● 释放交易集: 完成状态迁移和更新后, 解锁并处理              T loc 中的交易, 恢复交易的正常执行.
                                                               k
                    LB-Chain [60] 首次提出了完整的状态迁移机制, 该方案将状态迁移操作封装在交易中, 执行过程包括生成并签
                 署交易、打包区块、达成共识和更新状态. 为防范交易操纵, LB-Chain                  对迁移交易进行严格验证, 包括状态一致
                 性、签名验证、余额一致性和分片一致性. 针对静默攻击, 客户端和                     s ds 可通知  s sr 重新发送交易. 为避免重放攻
                                                                                c
                                                                        t
                 击, 引入迁移随机数, 确保交易顺序的连续性和唯一性. 此外, 为确保状态迁移期间交易的正确处理, LB-Chain                           会
                 在  s sr 中锁定被迁移的状态及其所有的相关交易, 即           T lock =T i , 并将其与状态数据一同迁移至    s ds 中进行处理, 从而
                                                                                          t
                     c
                 避免了相关交易可能面临的被中止的情况. 然而, LB-Chain              存在以下两个局限: 首先, 迁移期间所有的相关交易均
                 被锁定, 导致这些交易需要较长时间才能得到确认, 从而影响系统的整体吞吐量和平均交易确认延迟. 其次, LB-Chain
                 并未针对迁移失败的情况提出有效的解决方案, 这导致该方案存在一定的系统安全漏洞.
                    为解决上述问题, 文献       [65] 提出了一种精细化的交易锁定机制, 以减少状态迁移阶段对相关交易的影响. 针
                 对第  1  个问题, 该方案在状态由      s sr 迁移至  s ds 期间, 仅锁定从该状态转出资金的相关交易, 即         T lock =T out , 依然允许
                                           c
                                                    t
                 向该状态转入资金的相关交易           T i 的处理. 当状态数据完成迁移后, s ds 向   t  s sr 发送通知, s sr 将该状态相关的最新
                                                                                       c
                                          n
                                                                            c
                     d  和未完成交易发送给      s dst . 在此过程中, 即使状态处于迁移过程, 仍会保持更新. 该方案减少了被锁定的交易
                      ′
                 状态   i
                 数量, 确保向该状态转入资金的交易的正常处理, 不会因为迁移而中断, 将交易的完成时间降低至                               LB-Chain  的
                                                                                                  t
                 30%  左右. 针对第  2  个问题, 该方案为两类迁移失败情况提供了解决方案. 第                1  类是迁移超时, 发生在     s ds 未能成
                                                c
                           ′
                 功验证状态    d , 从而未回复   s src , 导致  s sr 在迁移窗口结束后认为迁移失败. 为避免此类失败, 设置超时查询机制,
                           i
                 s sr 需要在迁移窗口内主动向       s ds 发送查询请求, 以确认状态迁移结果, 并在失败时解锁状态数据及相关交易. 第
                  c
                                          t
                                                             c
                 2  类是迁移过程中的消息传播延迟, s ds 成功验证迁移但            s sr 未及时接收到该验证消息, 导致       s sr 误认为迁移失败并
                                                                                         c
                                              t
                 解锁账户, 导致该状态数据在两个分片中出现重复. 为避免此类失败, 设置状态确认机制, s sr 在迁移窗口到期后不
                                                                                       c
                 会直接解锁该状态数据, 而是继续向           s ds 查询, 直到确认迁移成功后再执行解锁操作.
                                               t
                  2.3   跨分片交易处理
                    在区块链全分片系统中, 节点只需维护部分区块链状态数据, 跨分片交易的处理需要在多个分片之间进行数
                 据验证和状态一致更新. 为确保系统的正确性, 跨分片交易必须满足                    ACID  属性  [66] , 即原子性、一致性、隔离性和
                 持久性. 其中, 原子性要求交易在所有相关分片中要么全部成功提交, 要么全部中止, 以避免部分提交的情况; 一致
                 性则要求在交易执行后, 各分片的状态保持一致, 以防止数据冲突. 现有的跨分片交易处理方法主要包括基于两阶
                 段提交   (two-phase commit protocol, 2PC) 和基于中继交易的方案. 表  3  总结了这两种方案的优缺点. 此外, 本节还
                 将讨论若干新型的跨分片交易处理方法.

                                                表 3 跨分片交易处理方案对比

                   分类              实现原理                         优点                        缺点
                        基于两阶段提交协议, 通过协调者管理 确保跨分片交易的强一致性, 适用于复 依赖协调者, 交易的提交需要锁定
                   2PC
                        跨分片交易处理                      杂事务处理                      相关状态
                 中继交易 设计中继交易, 保证交易的“最终原子性” 实现无锁异步处理, 支持交易并行处理 适用于基于账户模型的全分片系统

                  2.3.1    基于两阶段提交  (2PC) 的方案
                    两阶段提交协议       (2PC) [67] 被广泛应用于分布式系统, 能够确保分布式事务中数据的强一致性                 [68] . 该协议分为
                 准备阶段和提交阶段. 在基于         2PC  协议的方案中, 存在一个协调者负责管理多个分片, 确保交易的一致性提交. 在
                 准备阶段, 协调者从输入分片收集验证交易输入有效性的证明消息. 在提交阶段, 协调者将收集到的证明消息发送
                 至所有相关分片. 根据验证结果, 跨分片交易将在每个分片中被一致地提交或中止: 如果所有输入均有效, 则交易
   147   148   149   150   151   152   153   154   155   156   157