结构与共识
block、PoW/PoS/BFT、分叉、密码学哈希。
35 分钟
结构与共识
区块如何链接、网络如何就「哪条链才是真的」达成一致,是区块链技术的地基。本课覆盖区块结构、哈希、PoW/PoS/BFT 与分叉处理。路线图见 /roadmaps/blockchain。
学习目标
- 读懂区块头字段:前一区块哈希、Merkle 根、时间戳、Nonce
- 比较 PoW、PoS、BFT 三类共识的取舍
- 理解软分叉与硬分叉的区别
区块结构
区块 N
├── 区块头
│ ├── prev_hash → 区块 N-1 的哈希
│ ├── merkle_root → 本块所有交易的 Merkle 根
│ ├── timestamp
│ └── nonce → PoW 挖矿调整量
└── 交易列表 [tx1, tx2, ...]
哈希(如 SHA-256)把任意长度输入映射为固定长度摘要;改一个比特,输出完全不同。这是「改历史会被发现」的数学基础。
共识机制对比
| 机制 | 代表 | 优点 | 缺点 |
|---|---|---|---|
| PoW 工作量证明 | 比特币 | 安全经历长期验证 | 能耗高、出块慢 |
| PoS 权益证明 | 以太坊 2.0 | 节能、可扩展性更好 | 需设计惩罚与去中心化平衡 |
| BFT 拜占庭容错 | Tendermint | 终局性快、适合联盟链 | 节点数扩展受限 |
PoW 矿工不断调整 Nonce 寻找满足难度目标的哈希;PoS 验证者质押代币参与出块,作恶会被罚没(Slashing)。
分叉
- 临时分叉:两节点几乎同时出块,随后更长链胜出,短链交易被回滚。
- 软分叉:向后兼容的规则收紧,未升级节点仍可跟随(若多数算力/权益支持)。
- 硬分叉:规则不兼容,产生两条独立链(如 ETH / ETC)。
用代码理解哈希
import hashlib
def block_hash(prev: str, txs: str, nonce: int) -> str:
payload = f"{prev}{txs}{nonce}".encode()
return hashlib.sha256(payload).hexdigest()
# 改 nonce 会彻底改变哈希
print(block_hash("abc", "tx1,tx2", 0))
print(block_hash("abc", "tx1,tx2", 1))
练习
- 解释:为什么修改第 100 号区块的数据会影响第 101 号及之后所有区块?
- 对比 PoW 与 PoS 在能耗和参与门槛上的差异
- 查阅一次著名硬分叉事件,总结社区如何做出选择
小结
共识让互不信任的节点维护同一份账本。 下一课比较 UTXO 与账户模型,并介绍 Layer 2 扩容思路。
加载本节练习…