本文从数据结构、密码学、共识机制、交易模型与脚本几个层面,为你剖析比特币协议中的算法架构。这些组件精密耦合,共同构建了去信任的电子现金系统。
一、核心数据结构:区块 + 链表
比特币账本由哈希指针串联的区块组成,底层是时间戳链表。
1. 区块头(80字节)
区块头的字段定义是理解算法的起点:
| 字段 | 大小 | 说明 |
|---|---|---|
| 版本号 | 4字节 | 协议升级标志 |
| 前一区块哈希 | 32字节 | 链式的哈希指针,防篡改 |
| 默克尔根 | 32字节 | 该区块所有交易的密码学摘要 |
| 时间戳 | 4字节 | Unix时间,参与难度调节 |
| 难度目标(nBits) | 4字节 | 当前区块头哈希必须小于的阈值 |
| 随机数(Nonce) | 4字节 | 工作量证明的迭代变量 |
安全逻辑:任何历史交易改动都会改变默克尔根 → 区块头哈希变化 → 打破与后续区块的链接。
2. 默克尔树
区块内所有交易ID(txid)作为叶子节点,两两双 SHA-256 哈希形成二叉树。
- 算法作用 :轻节点只需下载区块头,通过默克尔证明(一条对数级路径的哈希兄弟节点)即可验证某笔交易是否已被确认,无需存储完整区块。
- 公式:一个包含 N 笔交易的区块,默克尔路径验证复杂度为 O(log₂N)。
二、密码学算法层
1. 哈希函数:SHA-256 双重哈希
比特币几乎所有哈希运算都遵循 SHA-256(SHA-256(x)) 模式:
- 交易ID(txid):对原始交易数据做
dSHA256。 - 区块头哈希值:对80字节区块头做
dSHA256。 - PoW 验证条件:
区块头 dSHA256 结果 < 难度目标。 - 地址生成中的完整性校验(Base58Check)。
架构意义:抗碰撞、抗原像、雪崩效应,确保了数据指纹的不可伪造。
2. 数字签名:ECDSA(secp256k1曲线)
- 密钥生成 :基于 secp256k1 椭圆曲线,私钥为256位随机数,公钥由
K = k * G得出(非压缩/压缩编码)。 - 签名算法:对交易摘要(sighash)使用 ECDSA 产生 (r, s) 对,遵循 DER 编码。
- 交易验证:节点通过公钥验证签名有效性,确保仅私钥持有者可解锁(花费)UTXO。
- Schnorr 升级(Taproot):已将 ECDSA 扩展为 Schnorr 签名(BIP340),实现签名聚合和更优的隐私/效率,但从宏观架构看,依然是离散对数难题下的椭圆曲线密码体系。
3. 地址生成流水线
私钥 → 公钥 → SHA-256 → RIPEMD-160 → 公钥哈希 → Base58Check编码 → 地址
- RIPEMD-160 将公钥缩短为20字节,节省区块空间;SHA-256 提供前期抗碰撞保护。
- 这是典型的哈希再哈希结构,保证量子前安全性(在已知公钥时仍不泄露私钥)。
三、共识算法与工作量证明(PoW)
这是比特币去中心化同步账本的核心算法。
1. 工作量证明机制
矿工反复变更 Nonce(并可能修改 coinbase 交易的 extraNonce),计算 dSHA256(区块头),直到结果 ≤ 目标值。
- 无捷径:输出空间均匀分布,必须暴力试错。
- 概率特性:成功概率 = 目标值 / 2²⁵⁶,期望尝试次数与难度成正比。
2. 难度调节算法
每 2016 个区块(约2周),网络自动调整一次难度目标:
新难度 = 旧难度 × (实际生成2016块的时间 / 20160分钟)
限于 ±4 倍调节幅度,避免突变。该算法让平均出块时间稳定在10分钟,与全网算力无关。
3. 最长链选择(中本聪共识)
节点总是接受积累工作量最多的链作为主链,即累计难度最大,而非单纯链最长。发生分叉时,通过经济激励收敛到单一链。
四、交易模型与脚本算法
比特币采用UTXO(未花费交易输出)模型,交易是状态转换函数。
1. UTXO 状态转换
一笔交易的输入引用前序 UTXO,输出创建新 UTXO,满足:
∑ 输入金额 ≥ ∑ 输出金额
差额隐含为交易费,矿工在 coinbase 交易中收取。
2. 脚本系统:非图灵完备的 Forth 式语言
每笔输出带有锁定脚本(ScriptPubKey),花费时提供解锁脚本(ScriptSig),验证时两者拼接执行,若结果为 TRUE 且无失效操作,则通过。
常见的标准脚本模板(算法模式):
- P2PKH (支付到公钥哈希):
ScriptSig: <sig> <pubkey>
ScriptPubKey: OP_DUP OP_HASH160 <pubkeyHash> OP_EQUALVERIFY OP_CHECKSIG
算法:复制公钥、哈希、与存储哈希比较,最后校验签名。 - P2SH(支付到脚本哈希):将复杂脚本锁定在哈希后,揭示赎回脚本时验证。增强灵活性。
- P2WPKH / P2WSH(隔离见证):将解锁数据移出主体交易(见证部分),算法涉及块重量计算,解决交易延展性问题。
非图灵完备的设计确保:无无限循环、状态爆炸可控,静态分析即可推演执行开销。
五、网络传播算法
- Gossip 协议:交易和区块通过纯洪泛(flooding)广播,每个节点收到新数据后,验证有效性,再转发给邻居。
- 紧凑区块(BIP152):为减少传播延迟,发送方只传区块头、短交易ID(txid 前6字节加校验),接收方凭借内存池已存交易重建区块,缺失部分再请求补全。
- FIBRE 网络:矿工间使用 UDP 和前向纠错码(FEC)加速块传播,降低孤块率。
六、架构分层总览
┌──────────────────────────────────────┐
│ 钱包层(密钥、地址) │
├──────────────────────────────────────┤
│ 交易层(UTXO、脚本引擎) │
├──────────────────────────────────────┤
│ 区块层(默克尔树、哈希链) │
├──────────────────────────────────────┤
│ 共识层(PoW、难度调节、最长链) │
├──────────────────────────────────────┤
│ 网络层(P2P Gossip传播) │
└──────────────────────────────────────┘
比特币算法架构的精髓在于:用 SHA-256 构建防篡改的哈希链,用 ECDSA 赋予资产控制权,用 PoW 把物理能量转化为不可逆的数字信任,用非图灵完备脚本在局限中换取确定性。所有优化(如 Taproot、闪电网络)都在这套简洁基座上演进,而非推翻。