难度不必等两周:山寨币难度调节算法的几种活法 图 1
难度不必等两周:山寨币难度调节算法的几种活法 · 图 1

矿工圈有句老话:比特币的难度每两周才变一次,山寨币的难度每小时都在变。前半句精确(两千零一十六块一调),后半句其实含混——“变一次”的粒度、公式和防作弊条款在不同币的代码里差别很大。这一篇把难度调节算法(常见缩写 DAA 或 DGA)这门手艺拆开讲。

先复习比特币的基准做法

比特币每两千零一十六个块重设一次难度:拿这 2016 块的总用时与目标总时(两周)比,按比例缩放每个块的难度目标,并把单次变化幅度限制在四倍以内(上下各剪一刀,防止剧烈过冲)。这个设计在算力巨大、块数充足的链上运行良好——两千零一十六块的平均把单个块的随机性摊得很平。问题在于它假设链够大:小链上一天可能都凑不满一个调节周期,算力翻倍后难度要在下一个边界才反应过来,中间是套利窗口;算力崩逃后矿工又要连续亏两周才走。

难度不必等两周:山寨币难度调节算法的几种活法 图 2
难度不必等两周:山寨币难度调节算法的几种活法 · 图 2

每个块都调一族

为了把反应周期压到块粒度,多币们发明了”每块重设”家族,莱特币在 2014 年引入的 DGWv3(Dark Gravity Wave,源自 DigiShield 血统)是代表。这类算法的共同骨架是:取最近 N 个块(比如 24 个)的”难度目标乘区块间隔”求加权平均,用实际用时与目标用时的比例微调目标,再套一层限制单次变化的夹剪(常用正负百分之几到一倍之间)。DGWv3 还专门处理了时间戳:只用相邻块间隔的合法化版本,避免异常间隔污染平均。

“Gravity Well”(重力井)是 ZClassic/KawPow 圈的同类算法,强调把过去若干块的出块快慢像井一样”积累势能”,链条快了就往下拽、慢了就往上送。Ziggurat/ZigZag 一族(Zclassic 的 zigzag 与后续变体)则按上块的出块间隔给难度更新量做非线性修正:延迟越久,加得越猛,把空转时间的欠账一次补上。这些公式的具体系数在各仓库源码里可以直接读,差异主要体现在窗口长度、加权方式和夹剪比例。

锚定、夹剪与中位数:三件防身工具

无论公式怎么变,健全的 DAA 都要挂三件安全设备。第一是锚定(anchor):算法内部维护一个真实难度状态,区块头里那个 4 字节紧凑目标(bits)只允许在锚定值附近小幅漂移,防止矿工把目标字段写成天文数字再骗节点按它出块。第二是夹剪(clamp):限制单次调整幅度,避免窗口样本太少时难度一夜跳几十倍。第三是时间戳校验:比特币规定区块时间必须严格大于前块中位数附近的值、又不能超前太多;每块调整族更敏感,因为公式直接吃”间隔”这个输入,攻击者稍微拨动时间戳就能影响后续难度。

这些工具的存在本身就说明:粒度越细的算法,越依赖对时间输入的信任。这正是所有 DAA 的阿喀琉斯之踵——出块间隔是随机事件,任何用”最近多久”估算”当前算力”的公式,本质上都在用被操纵成本很低的观测量做推断。

攻击面:难度是算出来的靶子

每块调整族历史上被针对性攻击过好几次。最原型的招式叫时间前跳(forward time jump)与回溯攻击(回溯出块时间,人为制造”过去很慢”的窗口,触发难度暴涨后自己再回头收割):先让全网接受一堆带未来时间戳的块,把难度推到自己有准备的通道里,再用隐藏的历史算力重写出块序列。多个使用早期每块 DAA 的币因此在主网发生过被低成本连续重排的公案,社区随后的应对是加长窗口、加锚定、换更保守的公式,而不是放弃每块调整。

这不是”小币必然被打”的判决书,而是一条工程经验:窗口短于某个尺度时,重排几个块的收益就可能超过成本。比特币靠两周窗口加两千年规模把这条账做到不划算,小链只能靠算法设计少输一点。

用户与矿工的实际体感

矿工角度看,反应快的 DAA 让 solo 挖矿与小矿池的收益曲线平滑很多——运气差一阵,难度很快就会下调回来;代价是矿池端结算公式必须跟着难度波动设计,否则欠账会积累。钱包与资源池角度,出块间隔的方差比比特币大得多,“确认数等几个安全”这类经验值不能跨币照搬。行情工具角度,算力和难度在小链上的读数抖动剧烈,拿几天的均值当趋势是常见错误。

常见误区

第一,把”每块调整”等同于”每块精确”。夹剪与锚定决定了它只能渐进逼近,短暂超调是设计的一部分。第二,以为 DAA 能防算力突击。它能缩短窗口,改变不了攻击成本与链安全预算之比。第三,把所有币的”难度”当同一个量。有的是工作量证明目标值,有的是质押权重,有的干脆没有难度概念,跨链比较时先问”这数字由什么生成”。

风险提示

小市值工作量证明链的安全预算有限,历史事故与交易所托管风险都更高。本文不构成投资建议,亦不构成对任何链安全性的保证。

风险提示:本文只描述公开技术机制,不构成任何投资建议。数字资产价格可能剧烈波动。