Page 121 - 《软件学报》2025年第10期
P. 121

4518                                                      软件学报  2025  年第  36  卷第  10  期


                    而满足难度     D  的父链区块模板也将保存在子链区块的新结构部分中, 具体验证内容见第                        2.2  节的第  4  阶段,
                 利用  Merkle 树的性质, 验证   H  是否存在于   CoinBase 交易中, 再根据  CoinBase 所在  Merkle 树分支, 利用  SPV  方法
                 计算  Merkle Root 值和区块头哈希是否正确. 最后再验证工作量证明是否满足难度, 也即子链工作量证明计算满足
                 难度, 成功出块.
                  3.4   难度调整算法正确性分析
                                                                                   AT
                    难度调整算法总体可以分为           4  个部分. 第  1  部分是控制出块时间稳定, 通过计算           , 即子链  φ 个区块的实际
                                                                                   ET
                 出块时间和期望出块时间的比值, 并根据值的大小将公式分为                    3  个部分. 如果大于   1.05, 说明实际出块时间略大于
                 目标出块时间, 总体难度需要增加以控制总体时间减少; 如果小于                     1.05  并大于  0.95, 说明实际出块时间与目标出
                 块时间基本接近, 此时应平衡出块比例更重要; 如果小于                 0.95, 说明实际出块时间略小于目标出块时间, 总体难度
                 需要减少以控制总体时间增加.
                    第  2  部分是控制两类父链出块比例可以稳定, 计算两个值. 对于相对算力较大的父链                        A  第  1  个是计算   α·  y n  ,
                                                                                                      x n
                 用较小算力的父链       B  和相对算力较大的父链       A  的出块比值, 与父链    A  和父链  B  目标出块比值   α 做比较, 如果乘积
                 为  1, 说明实际比例和目标值相同, 不需要再额外调整难度. 如果大于                 1, 说明父链   B  出块数增多, 需要对父链      A  额
                 外减少难度、对父链       B  增加难度, 但是变化值需要设定边界, 设为  ,
                                                                    [µ ξ]. 但是这个值是由比值构成, 当实际比例与
                 目标值相差较多时, 变化程度增加更大, 因此对于父链                A  还需要计算周期出块数        φ 与父链  A  出块数的比值, 再与
                 目标出块比例做一个比较; 父链          B  同理. 两部分的值进行加权平均, 得出的值为综合计算两类父链出块比例与目

                 标值的关系系数, 比例系数为         β 和  γ.
                    第  3 部分计算   T A n   和  T B n  , 其中对于父链  A, 指数   x n−1 − x n   部分表示 第  n–1 个周期与第  n 个周期出块差值和  A、
                                                           x A
                 B  近若干周期出块变化值的加权平均的比值, 当本阶段出块比上一阶段多时, 难度会适当变大, 反之, 难度会变小,
                 同时变化程度会被近几个阶段出块变化情况限制和影响. 若近几个阶段变化程度都较小, 最新阶段的变化更可能
                 是网络不稳定, 故这部分参数会比近几个阶段变化程度大的时候更明显, 若近几个阶段变化程度大, 最近阶段的变
                 化可能只是因为难度处于调整至稳定的状态, 波动较大, 要减少这部分参数的影响.                         y B  同  x A . 底数  δ T  为参数.
                    第  2  部分与第  3  部分作为调整系数, 分别控制出块比例和控制出块波动程度. 两部分的乘积需要根据第                          1  部
                 分计算的比例大小再控制比例. 这是因为, 假设第               1  部分值大于   1.05, 说明为了控制减少出块时间需要减少难度,
                 而第  2  部分与第  3  部分的乘积不能小于      1, 否则可能将使得     3  部分乘积后值小于      1, 最后增加难度; 假设第     1  部分
                 值在  0.95  与  1.05  之间, 说明时间基本稳定, 需要重点控制父链出块比例与控制出块波动, 因此不需要再设置边界;
                 假设第   1  部分值小于   0.95, 说明为了控制增加出块时间需要增加难度, 而第              2  部分与第  3  部分的乘积不能大于      1,
                 否则可能将使得      3  部分成绩后值大于     1, 最后减少难度. 同时这也表明, 在难度调整时, 首先需要控制出块时间尽
                 可能保持稳定, 再保证出块比例与波动稳定, 与比特币等难度调整算法的思想契合.
                    第  4  部分设定一些根据算法特性, 设定特殊情况. 当            y n ⩽ B low limit  时, 只根据这个条件, 理论来说要降低父链  B

                 的难度. 有两种出现              的情况, 一是父链     A 算力突增   (或者上一阶段父链      A  难度下降), 针对这种情况应该
                                 y n ⩽ B low limit
                 增加父链   A  难度, 父链   B 难度应降低, 但不能降低过多. 二是父链         B 发动算力突减攻击, 降低本阶段出块, 目的是下
                 一阶段降低父链      B  难度, 或者增加父链    A  难度, 使得父链   B  下阶段多出块, 得到更多的收益, 这种情况是最可能发
                 生的情况, 应该减少父链        B  难度降低的幅度, 但是不会增加或者保持父链              B  难度, 防止其他的情况发生. 但是当
                 c less ⩾ 1 时, 可以判断是父链  B  发动多轮算力突减攻击, 若不是的话, 父链         A  难度第  1  次调整时难度会增加, 父链      B
                 难度小幅降低, 若父链       B  出块还达不到    5  块以上, 说明父链   B  算力多个阶段处于不健康状态, 再度降低其难度减
                 少幅度, 使得父链     B  发动攻击收益较少, 成本更大, 从而保证系统安全性. 对于当发生这种情况时, 仍增加父链                         A
                 难度, 是对父链    A  不公平的情况, 首先这样设置使得, 父链          B  发动攻击即使成功, 出块的单位时间仍被延长, 单位
                 时间收益仍不乐观, 其次父链         A  有监督的作用, 矿工是逐利的, 发生这种情况会涌入父链               B  进行挖矿, 那么下一周
                 期, 难度就会调整至合适的大小, 其次防止了情况一发生的可能. 其他的情况有, 父链                        A、B  同时撤销部分算力但
   116   117   118   119   120   121   122   123   124   125   126