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 同时撤销部分算力但

