Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

PoW(Nakamoto)

工作量证明把提议权交给能展示指定难度哈希原像的节点。Bitcoin 用 SHA-256 双哈希;网络接受累积工作最多的链(最重链,不是单纯最长链)。开放加入,无身份列表。

出块规则

候选块头包含:版本、父哈希、Merkle 根、时间戳、nBits(目标压缩)、nonce。矿工搜索 nonce(及多余 nonce)使得

\[ H(\textit{header}) \le T \]

\(T\) 由难度编码。验证只需一次哈希,搜索期望次数为 \(2^{256}/T\)。

Bitcoin 约每 2016 块(目标两周)调整一次难度:

\[ T_{\textit{new}} = T_{\textit{old}} \cdot \frac{t_{\textit{actual}}}{1209600} \]

\(t_{\textit{actual}}\) 夹在 \([1/4, 4]\) 倍目标区间,防止一次调整过度。出块间隔 \(\gg\) 传播延迟时,诚实矿工的块多数能成为主链延伸。

最重链

分叉选择:在所有合法链中选 累积难度之和最大 的那条。等长但总工作不同时,工作多的赢。重组深度 \(k\) 的成本约为重做这 \(k\) 块的哈希工作。

最终性是概率的:\(k\) 个后续块之后被替换的概率随诚实算力占比指数下降,协议不提供不可逆提交。交易所的「\(N\) 确认」是风险阈值,不是共识原语。

重组概率

设诚实算力占比 \(p\)、攻击者 \(q = 1-p\)。攻击者落后 \(z\) 块时,要在追上期间持续比诚实侧多出块,胜率可用赌徒破产模型估计:\(q < p\) 时

\[ P_{\textit{catch-up}}(z) \approx (q/p)^z \]

\(q \ge p\) 时则为 1(多数算力必胜)。

  • 一次成功重组 = 攻击者自落后处连续赢得每一轮的出块竞赛,每一轮的劣势概率相乘。
  • 例:\(p=0.9, q=0.1\),等 \(z=6\) 块后重组的概率约 \((1/9)^6 \approx 2\times 10^{-6}\);\(z=10\) 降至约 \(10^{-10}\)。
  • 该式是理想化模型:假定攻击者固定落后、不计算自私挖矿的算力复用优势,也不计入网络传播延迟——真实阈值更低,见「安全假设」。

安全假设

诚实算力占比 \(> 1/2\)(对抗自私挖矿等策略时,实际阈值更高)。攻击者持续超过该比例可以:

  • 双花:私下挖更重链,待商户确认后再广播。
  • 审查:拒绝包含特定交易的块。
  • 无限制重组。

无法凭空增发(增发规则在脚本/共识验证里),也不能伪造签名。

自私挖矿:发现合法块后不立即广播,先私下延长自己的链,抢在诚实侧揭示时再批量放出,让诚实矿工在一轮里白做工作。效果是攻击者以低于 1/2 的算力也能取得高于份额的收益,并把重组所需的实际算力阈值抬高。对策是同步(沿用已广播的块)与后续块中奖惩;纯协议层面,诚实算力阈值实际高于 1/2。

抗女巫

一次投票的成本是焦耳,不是身份。无许可:任意硬件可加入。代价是能耗,以及 ASIC 与矿池导致的算力集中——协议仍按哈希计数,不识别「多少台机器」。

变体

变体要点
叔块 / GHOST侧枝块仍给奖励、计入难度,降低大矿工优势。以太坊合并前使用。
内存硬哈希Scrypt、Ethash、RandomX,提高 ASIC 门槛。
合并挖矿同一 PoW 提交给多条链。

PoW 只解决提议权与分叉权重。账户、脚本、难度算法都是附加规则。质押系用权益代替哈希,见 PoS。