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

彭泽顺 等: 面向跨地理区域联盟链的事务处理技术综述                                                       237


                  1.3   异步共识协议
                    上述跨域共识协议均假设网络模型为同步                (synchronous) 或部分同步  (partial synchronous) 的, 使用计时假设
                                                                                           ∆, 正确节点发送
                 (timing assumption) 来保证系统的安全性或活性. 1) 同步网络模型假设存在已知的有限时间界限
                 的消息最多会被延迟       ∆ 后传送到其他所有正确节点. 对于运行在同步网络的共识协议而言, 若该假设被打破, 则无
                 法保证安全性. 因此, 这些共识协议通常运行在              Infiniband  等高速或小范围的网络下, 或使用可信执行环境             TEE
                 的  CFT  模型下. 2) 部分同步网络模型下的       BFT  共识协议假设网络在大部分时间保持同步, 即正确节点间的消息

                 传递存在一个有界的延迟上限           ∆, 该上界是未知的, 并且能由敌手任意选择. 由于其最符合真实的网络环境, 绝大
                 多数共识协议运行在部分同步网络模型下. 但是, 在假设被打破即网络异步时, 这些协议只能保证安全性而不能保
                 证活性.
                    在跨地理区域甚至跨洲部署时, 节点间的通信延迟很可能不稳定, 并且差异较大                          [53] . 异步网络模型不对网络
                 状态进行任何假设, 消息可以被任意地延迟. 因此, 异步共识协议能够实时跟踪当前网络的状况, 在网络设施质量
                 较差时提供最佳的吞吐量.
                    但是, 保证实时最佳吞吐量的代价是异步共识协议需要较长的时间才能达成共识. 由于                             FLP  不可能定理   [70] ,
                 即在异步网络模型下, 即使只有一个进程失效, 也没有任何算法能保证在不失败的情况下达成一致. 因此, 异步共
                 识协议无法确定性达成共识, 均为随机化协议              (randomized agreement). 由于每次仅有一定概率达成共识, 这些共识
                 算法  [52,53] 每次共识可能进行多轮    (round). 例如, 文献中的  ABA  共识  (异步二值拜占庭共识 (asynchronous binary
                 Byzantine agreement)) [71] 达成共识所需要轮数的期望为  4, 而在  Dumbo2 [52] 的  MVBA  共识  (多值拜占庭共识 (multi-
                 valued validated Byzantine agreement)) 同样需要运行约  3  轮  ABA  才能达成共识.
                    许多异步共识协议       [52,53] 均基于文献  [72] 的经典模型, 其中, HB-BFT [53] 为第  1  个实用的异步  BFT  共识协议. 类
                 似多主共识协议      (第  1.2  节), HB-BFT  中的每个节点均能提议交易. HB-BFT      的核心为   ACS  模块  (异步共同子集
                 (asynchronous common subset)), 用于在每次共识时选择一组节点     (至少  n−2 f  个) 提议的交易附加到全局日志中作
                 为输出, 如图   6  所示. ACS  模块由  n 个  RBC (reliable broadcast) [73] 实例和  n 个  ABA  实例组成, 其中  n 为参与节点的
                 数量. RBC  实例负责保证交易广播的原子性, 即强制拜占庭只能崩溃或向正确节点广播相同的交易                             [73] . 对于一个
                 ABA  实例, 每个正确节点均需要向该实例输入             0 (还未收到该实例对应      RBC  的结果) 或  1 (收到该实例对应      RBC
                 的结果), 而拜占庭可以崩溃或随机输入            0  或  1. 简言之, 每个  RBC  实例对应的  ABA  实例负责决策出该      RBC  是否
                 按时完成.

                                                                0/1      0/1
                                               T 1      T 1
                                                  RBC 1            ABA 1
                                         Node 1            Node 1           Node 1
                                               T 2
                                                  RBC 2            ABA 2
                                         Node 2            Node 2           Node 2
                                               T 3
                                                  RBC 3            ABA 3
                                         Node 3     …      Node 3    …      Node 3
                                                             …
                                                                              …
                                           …
                                               T n
                                                  RBC n            ABA n
                                                                0/1      0/1
                                                        T n
                                         Node n            Node n           Node n
                                            图 6 HB-BFT  的异步共同子集      (ACS) 结构

                    HB-BFT  的运行流程如下. 1) 每个节点从交易池中随机选择一定数量的交易, 并使用共享公钥的门限签名                           [74−77]
                 加密作为    ACS  的输入. 加密可以防止拜占庭节点得知           ACS  输入的内容, 进而有选择地共识某些交易             (censorship
                             i  将其选择的交易输入到它自己的              i  个) RBC                                 j  个
                 attack). 2) 节点                          (第         实例, 广播到其他节点. 同时, 每当它从第
                 RBC  实例得到输出时, 它在对应的        (第  j 个) ABA  实例输入  1. 当其向  n− f  个  ABA  实例中输入  1  后, 其向剩余的
                 ABA  实例中输入    0. 这是因为剩余的     f  个  RBC  实例对应的输入节点可能为拜占庭节点, 即可能永远不会得到输
   235   236   237   238   239   240   241   242   243   244   245