Page 115 - 《软件学报》2025年第10期
P. 115
4512 软件学报 2025 年第 36 卷第 10 期
算法共包含 4 个阶段. 第 1 阶段是请求多父链辅助共识. 在共识机制中采用 Scrypt 和 Sha256 哈希算法的父链
将类型提供给矿池, 矿池根据父链的类型向子链请求包含不同难度的区块模板, 矿池将对应类型父链的子链区块
模板里的哈希值和难度写入父链的 CoinBase 交易 (区块的铸币交易, 一般不包含区块链的交易信息), 构建父链的
区块模板进行共识.
第 2 阶段是辅助共识阶段. 父链构建区块模板后, 此时父链有两个难度值, 第 1 个难度值是父链区块头中用于
父链出块的难度值, 第 2 个难度值是 CoinBase 交易里用于子链辅助公式的难度值. 父链共识节点会在共识的哈希
计算中计算两个难度值是否满足. 如果满足子链难度值, 向子链提交工作; 如果满足父链本身难度要求, 父链节点
拥有出块权, 再继续构建出块模板.
第 3 阶段是提交共识阶段. 矿池将满足子链难度要求的父链区块或区块模板提供给子链, 包含以下信息: 父
链区块头、CoinBase 交易的默克尔分支和 CoinBase 交易字段. 子链修改了数据结构, 保存信息到子链区块头
hsahAuxPoW 字段指向的 CAuxPoW 字段.
第 4 阶段是验证工作阶段. 子链保存父链 3 部分信息后, 对信息进行存储和验证. (1) 验证 CAuxPoW 字段的
CoinBaseTx 中的子链区块头哈希是否与子链提交给矿池的区块头哈希和难度值相同. 这一步用于验证子链提交
的信息是否与父链中的 CoinBase 一致. (2) 验证 CAuxPoW 字段的 CoinBaseTx 和对应的 merkleBranch 计算出块
父链区块交易默克尔树根哈希是否与 hashBlockHeader 中的根哈希值相同. 这一步用于验证存储正确信息的
CoinBase 交易是否在出块父链中. (3) 根据 CAuxPoW 字段的 hashBlockHeader 中的 nVersion 字段判断该工作来
自哪类父链, 选择对应提交的难度值对 hashBlockHeader 进行对应父链的哈希验证, 判断是否满足难度要求.
2.3 难度调整算法
目前算力主要都集中在 BTC、BCH 等使用 Sha256 哈希函数以及 LTC、DOGE 等使用 Scrypt 哈希函数的区
块链中. 但是两类链的算力差距仍比较大且比较集中在一些成熟的区块链中, 为了满足吸引算力小的区块链的加
入, 同时不降低大算力链的积极性, 并根据实际情况需要子链满足以下 3 点需求.
(1) 和其他使用工作量证明共识机制的区块链相同, 难度调整算法需要稳定子链在 ET 时间内出块数恒定在 φ
左右 ( ET 与 φ 为常数).
(2) 为了保护相对算力较小的父链 B, 算力较大的父链 A (使用 Sha256 哈希函数类父链) 与父链 B (使用 Scrypt
α 上下 α ( 为常数).
哈希函数类父链) 出块比例基本保持在
(3) 抵抗算力突然变化对出块时间稳定性的影响.
根据这 3 点需求设计了难度调整共识机制, 设两种类型的父链根据各自在周期内的出块数 x n 、 y n 和时间, 计
、 . 在比特币难度调整算法的基础上, 增加了两个系数因子分别
算两类父链第 n 轮难度调整周期的难度值
H A n H B n
表示算力变化对难度的影响和两类父链出块比例.
x n−ω+1 ... x n−1 、 、父链 B y n−ω+1 ...y n−1 、 , 计算各自出
首先根据临近 ω 个周期中, 父链 A 出块的数量 x n 出块数 y n
块变化的加权平均值 x A ,y B . 为反映两类链算力的变化, 使用指数是 L 类链第 n−1 个周期与第 n 个周期出块差值和
L 类链前 ω 周期出块的变化值的加权平均比值的比, 底数是 δ T , 用 T A n ,T B n 表示, 即:
x n−1 −xn
x A ,
= δ T
T A n
y n−1 −yn
y B ,
= δ T
T B n
|x n − x n−1 | 均较
其中, 越新的出块越能反映算力的变化, 其周期差占比越大. 若 x A = 0, 则 x A = x n − x n−1 , 同时, 当 x A 且
小时, 即 A 链若干周期出块稳定时, 会通过算法使得 T A n 趋于 1, 降低该参数的影响程度, y B ,T B n 类似.
φ 个区块中, 两类父链辅助子链出块数目 、 . 为了出块比例保持稳定, 有两种方式
接下来再统计在目标的 x n y n
进行控制. 对于父链 A, 首先可以比较二者比值 x n 与目标出块比例 α 的关系, 即计算 α/(x n /y n ). 为了防止该值波动
[ y n ( ) ] [ ( ) ]
y n x n
过大影响稳定性, 设定边界 , max min α· ,µ ,ξ . 对于父链 B, 同理即为 max min ,µ ,ξ .
[µ ξ], 即计算
x n α·y n
α
其次计算 x n 与目标值 φ 的比值与目标比值 的比例关系, 即 (α/α+1)/(x n /φ). 为了防止该值波动过大影
α+1

