欢迎来到区块链的世界~!!!
本文最后更新于 2026年6月9日 凌晨
欢迎来到区块链的世界~!!!
本文以 Bitcoin 为参考原型,系统梳理区块链的核心原理,辅以 Mermaid 流程图、对比表格与个人理解注释,力求直观易懂。
目录
- 区块与区块链结构
- 默克尔树与 SPV 验证
- 共识机制
- 区块链网络与节点分类
- 节点故障与容错机制
- 交易模型:UTXO vs 账户模型
- 挖矿机制详解
- 出块速度与难度调整
- 矿工收益与减半经济
- 密码学与信任模型
- 分叉机制:软分叉与硬分叉
- 智能合约简介
- 全景总结
一、区块与区块链结构
1.1 什么是区块?
区块是区块链网络中打包、存储交易数据的基本单元,类比账本中的一页。每个区块由 区块头 (Block Header) 与 区块体 (Block Body) 两部分组成。
graph TB
subgraph "区块 N"
direction TB
subgraph "区块头 (Block Header) - 固定 80 字节"
A1["上一区块哈希<br/>PrevBlockHash<br/>(32 字节)"]
A2["时间戳 Timestamp<br/>(4 字节)"]
A3["难度目标 Bits<br/>(4 字节)"]
A4["随机数 Nonce<br/>(4 字节)"]
A5["版本号 Version<br/>(4 字节)"]
A6["Merkle 根<br/>MerkleRoot<br/>(32 字节)"]
end
subgraph "区块体 (Block Body)"
B1["Coinbase 交易<br/>(矿工奖励 + 手续费)"]
B2["交易 1: Alice → Bob"]
B3["交易 2: Charlie → Dave"]
B4["... 更多交易 ..."]
end
A6 -.->|"所有交易哈希汇总"| B1
end
| 字段 | 大小 | 作用 |
|---|---|---|
| PrevBlockHash | 32 字节 | 指向前一区块的哈希,形成链式结构 |
| MerkleRoot | 32 字节 | 所有交易的 Merkle 根哈希,快速校验交易完整性 |
| Timestamp | 4 字节 | 区块生成时间戳 |
| Bits | 4 字节 | 当前挖矿难度目标值 |
| Nonce | 4 字节 | 随机数,矿工不断尝试以找到合法哈希 |
| Version | 4 字节 | 区块版本号,用于软分叉升级 |
区块头这 80 字节是整个区块链安全模型的精华——通过哈希指针串联历史、通过 Merkle 根锚定交易、通过难度和 Nonce 实现 PoW 竞争。好比一个快递包裹,区块头是面单(记录来源、去向、编号),区块体是实际货物。
1.2 区块链的链式结构
区块链由无数区块按时间顺序单向串联形成:
graph LR
subgraph "创世区块"
G["Block 0<br/>PrevHash: 0000...0000<br/>Hash: 0000...19d6"]
end
subgraph "区块 1"
B1["Block 1<br/>PrevHash: → 指向 Block 0"]
end
subgraph "区块 2"
B2["Block 2<br/>PrevHash: → 指向 Block 1"]
end
subgraph "区块 N"
BN["Block N<br/>PrevHash: → 指向 Block N-1"]
end
G -->|"哈希指针"| B1 -->|"哈希指针"| B2 -->|"... ..."| BN
不可篡改的原理:每个区块的哈希由区块头所有字段 + Nonce 共同计算得出。若篡改 Block N 中任意数据 → 其哈希值改变 → Block N+1 的 PrevHash 不匹配 → 整条链断裂。
1.3 哈希函数的雪崩效应——为什么改 1 比特也不行?
哈希函数(SHA-256)有一个关键特性叫 **雪崩效应 (Avalanche Effect)**:
1 | |
这对区块链意味着什么?
1 | |
1.4 区块链在磁盘上到底长什么样?
你可能会想:Block 0 → Block 1 → Block 2 → … 这个链表是直接存在一个文件里的吗?
不是。Bitcoin 用 LevelDB(一种键值数据库)存储数据,数据库里有以下几个”桶”:
| 存储桶 | 键 | 值 | 用途 |
|---|---|---|---|
blocks/ |
区块哈希 | 完整原始区块数据 | 按哈希查找区块 |
blocks/index/ |
区块高度 | 区块哈希 + 文件位置 | 按高度快速定位区块 |
chainstate/ |
UTXO 的 txid + 输出序号 | UTXO 的面额 + 锁定脚本 | 验证新交易时快速查 UTXO 是否未花 |
peers/ |
对等节点 IP | 连接状态、最后通信时间 | P2P 网络管理 |
关键洞察:当你转账时,全节点不是去”读区块链找历史”——它直接查 chainstate/ 这个 UTXO 数据库,确认你的 UTXO 还在不在。这比遍历区块链快了无数倍。chainstate/ 是区块链的”快照索引”,每次新区块确认后同步更新。
1.5 创世区块——一切开始的地方
2009 年 1 月 3 日,中本聪挖出了 Block 0(创世区块),并在 Coinbase 交易里嵌入了一行字:
1 | |
这是当天《泰晤士报》的头版标题。这行字至少有两层含义:
- 时间证明:证明创世区块不可能早于 2009-01-03 被创建(报纸还没出呢)
- 政治宣言:讽刺传统银行体系反复需要政府救助,暗示去中心化货币的必要性
创世区块有个特殊之处——它的 PrevHash 是 0000000000000000000000000000000000000000000000000000000000000000(全是 0)。它没有”上一个区块”,所以挖它用的 Nonce 也是中本聪直接指定的,而非通过 PoW 竞争得出。
有趣的是:创世区块中的 50 BTC 奖励是永远无法花掉的——因为它不在 UTXO 集中(中本聪写代码时故意没有把它加入可花费输出)。这也算是一种”献给区块链的祭品”。
1.6 区块传播——新区块如何在网络中扩散?
当一个矿工挖到合法区块后,如何让全球所有节点尽快收到?
sequenceDiagram
participant Miner as ⛏️ 矿工 A (挖到块)
participant Peer1 as 🖥️ 节点 B
participant Peer2 as 🖥️ 节点 C
participant PeerN as 🖥️ 节点 N...
Miner->>Peer1: 发送 inv 消息 (携带区块哈希)
Peer1->>Miner: 发送 getdata 消息 (请求完整区块)
Miner->>Peer1: 发送完整区块数据
Peer1->>Peer1: 独立验证区块合法性
Peer1->>Peer2: ✅ 验证通过,转发 inv 给节点 C
Peer2->>Peer1: 请求完整区块...
Peer1->>Peer2: 发送完整区块...
Note over PeerN: 消息像涟漪一样扩散<br/>几秒内传遍全球
但有一个问题:一个 1MB 的区块在网络中层层转发,浪费了大量带宽——邻居节点之间可能 90% 的交易数据都已经在内存池里了,不需要再传一遍。
解决方案:紧凑区块 (Compact Blocks, BIP 152)
1 | |
关键补充:区块数量理论上无上限。以比特币为例,有限的是代币发行总量(2100 万枚),而非区块数量。只要网络存在交易需求,区块就会不断产生——这保证了区块链作为”永久数据存储层”的可行性。
二、默克尔树与 SPV 验证
2.1 默克尔树 (Merkle Tree)
默克尔树是一种二叉树结构,叶子节点是每笔交易的哈希值,逐层两两拼接再哈希,最终汇聚成唯一的 Merkle Root。
graph TB
ROOT["🔑 Merkle Root<br/>Hash(H12 + H34)"]
H12["H12 = Hash(H1 + H2)"] --- ROOT
H34["H34 = Hash(H3 + H4)"] --- ROOT
H1["H1 = Hash(Tx1)"] --- H12
H2["H2 = Hash(Tx2)"] --- H12
H3["H3 = Hash(Tx3)"] --- H12
H4["H4 = Hash(Tx4)"] --- H12
TX1["📝 交易 Tx1"] --- H1
TX2["📝 交易 Tx2"] --- H2
TX3["📝 交易 Tx3"] --- H3
TX4["📝 交易 Tx4"] --- H4
style ROOT fill:#f9a825,stroke:#333,color:#fff
style H12 fill:#42a5f5,stroke:#333,color:#fff
style H34 fill:#42a5f5,stroke:#333,color:#fff
style H1 fill:#66bb6a,stroke:#333,color:#fff
style H2 fill:#66bb6a,stroke:#333,color:#fff
style H3 fill:#66bb6a,stroke:#333,color:#fff
style H4 fill:#66bb6a,stroke:#333,color:#fff
2.2 SPV 轻量验证——用 3 条哈希证明一笔交易
SPV (Simplified Payment Verification) 允许轻节点无需下载完整区块链即可验证一笔交易是否存在。
下面我们一步步拆解 Merkle 证明的工作过程。假设区块里有 4 笔交易(Tx1-Tx4),你要证明 Tx3 在区块中:
1 | |
逐步可视化:
flowchart TB
subgraph "Step C: 最终验证"
ROOT["Merkle Root<br/>(区块头里存的值)"]
end
subgraph "Step B: 逐层计算"
H12_FROM["H12 ← 全节点提供"] --> ROOT_COMPUTE
H34_COMPUTE["H34 ← 你计算 = Hash(H3+H4)"] --> ROOT_COMPUTE
ROOT_COMPUTE["Root' = Hash(H12 + H34)"] -.->|"比对"| ROOT
end
subgraph "Step A: 从叶子开始"
H3_COMPUTE["H3 ← 你计算 = Hash(Tx3)"] --> H34_COMPUTE
H4_FROM["H4 ← 全节点提供"] --> H34_COMPUTE
end
style ROOT fill:#f9a825,color:#fff
style H4_FROM fill:#42a5f5,color:#fff
style H12_FROM fill:#42a5f5,color:#fff
style H3_COMPUTE fill:#66bb6a,color:#fff
为什么只需要 O(log n) 条哈希?
1 | |
2.3 奇数叶子和重复叶子——边界情况怎么处理?
Merkle 树是二叉的,但交易数量不一定是 2 的幂次:
1 | |
2.4 Merkle 证明的安全性边界
Merkle 证明能证明”交易在区块里”,但它不能证明任何事情超出这一点。一个常见的误区是:有人以为 SPV 验证了交易就万事大吉了。实际上 SPV 节点仍然信任全节点提供了正确的最长链区块头。如果一个全节点故意给轻节点一个”孤块”的区块头(不是最长链),轻节点看到 Merkle 证明通过就相信了,但实际上这个区块可能已经被主链抛弃了。
因此,轻节点的安全模型是:信任多数算力不会合谋欺骗它。对于日常支付(小额、快速确认),这种信任是足够的。但对于大额交易,还是应该运行全节点独立验证全部历史。
三、共识机制
3.1 共识问题的本质——拜占庭将军问题
在讲共识算法之前,必须先理解它要解决什么问题。
拜占庭将军问题 (Byzantine Generals Problem) 是分布式系统中的一个经典难题:
1 | |
区块链的解决方案 —— PoW:
1 | |
3.2 工作量证明 (PoW)
PoW 是 Bitcoin 使用的共识算法,核心逻辑:用算力投票,最长链胜出。
sequenceDiagram
participant 用户 as 👤 用户
participant 矿工 as ⛏️ 矿工节点
participant 网络 as 🌐 P2P 网络
用户->>网络: 广播交易 Tx
网络->>矿工: 交易进入内存池 (Mempool)
loop 挖矿循环
矿工->>矿工: 打包交易 → 构建候选区块
矿工->>矿工: 尝试 Nonce = 0, 1, 2, ...
矿工->>矿工: SHA256(区块头) → 检查是否 < 目标值
end
矿工->>矿工: 🎯 找到合法 Nonce! Hash < Target
矿工->>网络: 广播新区块
网络->>网络: 各节点验证区块合法性
网络->>网络: 接受新区块,开始下一轮挖矿
公式表达:
1 | |
- Nonce 取值范围:0 ~ 2^32(约 43 亿),现代矿机数秒内即可遍历完
- 穷举完后可修改 Coinbase 交易的 ExtraNonce 字段,或调整交易组合,重置 Nonce 空间继续尝试
3.3 权益证明 (PoS)——不拼算力,拼资产
PoW 最大的争议是耗电。PoS 换了一种思路:谁持有的币越多、持有时间越长,谁越有动力维护网络。
flowchart LR
subgraph "PoW"
P1["花 1 万元买矿机"]
P2["花 1 万元电费"]
P3["挖到价值 1.5 万的币"]
P1 --> P2 --> P3
end
subgraph "PoS"
S1["花 1 万元买币并质押 (Stake)"]
S2["被选为验证者"]
S3["验证交易 → 赚手续费"]
S4["作恶 → 质押的币被没收 (Slash)"]
S1 --> S2
S2 --> S3
S2 -.->|"如果作恶"| S4
end
Ethereum PoS 的关键机制:
| 机制 | 说明 |
|---|---|
| 质押 (Staking) | 锁定 32 ETH 成为验证者 |
| 随机选择 | 每 12 秒随机选一个验证者提议新区块 |
| 委员会投票 | 随机选数百个验证者组成委员会,投票确认区块 |
| 罚没 (Slashing) | 验证者作恶(双重签名、离线过久)→ 没收部分或全部质押金 |
| 退出队列 | 想取回质押金需排队,防止恶意验证者快速跑路 |
PoS 的博弈逻辑:
1 | |
3.4 DPoS——用选票代替算力
DPoS(委托权益证明)进一步简化:持币者**投票选出少数”超级节点”**,由这些节点轮流记账。
1 | |
3.5 PBFT——联盟链的实用方案
PBFT(实用拜占庭容错)用在已知参与者身份的联盟链中,不需要挖矿:
1 | |
3.6 最终性 (Finality) 对比——“完成”的定义不同
| 共识算法 | 最终性类型 | 解释 |
|---|---|---|
| PoW (Bitcoin) | 概率最终性 | 交易永远可能被逆转,但概率随确认数指数下降。6 个确认后逆转概率 ≈ 可忽略 |
| PoS (Ethereum) | 经济最终性 | 2 个 epoch(约 13 分钟)后,逆转需要至少 1/3 验证者被罚没(经济损失极大) |
| PBFT | 绝对最终性 | 一旦 2/3 节点同意,交易永久不可逆转 |
| DPoS | 委托绝对最终性 | 2/3 超级节点确认后不可逆转(但超级节点本身可能串通) |
共识机制的选择本质上是安全模型三选二的权衡。PoW 用物理成本换安全,代价是慢和耗能。PoS 用经济博弈换安全,代价是”有钱人说了算”。DPoS 和 PBFT 用中心化换速度,代价是信任少数人。没有一个方案能同时做到”去中心化、安全、快速”——这就是区块链的**不可能三角 (Trilemma)**。
四、区块链网络与节点分类
4.1 网络拓扑
graph TB
subgraph "区块链 P2P 网络"
FN1["🖥️ 全节点 A"]
FN2["🖥️ 全节点 B"]
FN3["🖥️ 全节点 C"]
MN1["⛏️ 矿工节点 A"]
MN2["⛏️ 矿工节点 B"]
LN1["📱 轻节点 (SPV)"]
LN2["📱 轻节点 (SPV)"]
end
FN1 <--> FN2
FN1 <--> FN3
FN2 <--> FN3
FN1 <--> MN1
FN2 <--> MN2
MN1 <--> MN2
LN1 -.->|"仅同步区块头"| FN1
LN2 -.->|"仅同步区块头"| FN2
4.2 节点类型对比
| 维度 | 🖥️ 全节点 | ⛏️ 矿工节点 | 📱 轻节点 (SPV) |
|---|---|---|---|
| 存储 | 完整区块链 (~600GB+) | 完整区块链 | 仅区块头 (~60MB) |
| 硬件要求 | 普通 PC 即可 | 专业 ASIC 矿机 | 手机即可 |
| 记账权 | ❌ 无 | ✅ 有 | ❌ 无 |
| 交易验证 | 完整独立验证 | 完整独立验证 | 依赖全节点的 Merkle 证明 |
| 收益来源 | 无直接收益 | 区块奖励 + 手续费 | 无 |
| 核心价值 | 网络监督者、数据备份 | 网络安全提供者 | 用户入口、支付便捷 |
4.3 节点发现与连接
P2P 网络通过 DNS Seed 和 硬编码种子节点 完成初始发现:
1 | |
为什么限制出入站连接数?
1 | |
4.4 八卦协议 (Gossip Protocol)——信息如何在 P2P 网络中扩散
区块链网络没有中心服务器来广播消息。所有信息通过 Gossip 协议 传播:
sequenceDiagram
participant A as 🖥️ 节点 A<br/>(收到新交易)
Note over A: 节点 A 收到一笔新交易
A->>B: 1. 转发交易给邻居 B
A->>C: 2. 转发交易给邻居 C
A->>D: 3. 转发交易给邻居 D
B->>E: B 再转发给它的邻居 E
B->>F: B 再转发给它的邻居 F
C->>G: C 再转发给它的邻居 G
Note over E,F,G: 像病毒一样扩散<br/>几秒内传遍全网
Note over F: 每个节点都有 "已见过交易" 的记录<br/>看到重复的 → 不再转发
Gossip 协议的关键规则:
1 | |
4.5 内存池 (Mempool)——交易的”候车室”
每笔交易在被矿工打包进区块之前,先进入**内存池 (Mempool)**:
1 | |
矿工如何从内存池挑选交易?
1 | |
**全节点是区块链的”陪审团”**——虽然没有直接经济激励,但它们独立验证每一笔交易和每一个区块,构成了网络的免疫系统。矿工负责”生产”,全节点负责”质检”。没有全节点的链是盲目的;没有矿工的链是停滞的。
五、节点故障与容错机制
5.1 故障场景分析
flowchart TD
START["节点状态检测"] --> Q1{"断电/掉线?"}
Q1 -->|是| R1["✅ 交易不丢失<br/>交易已在全网广播<br/>由其他节点处理"]
Q1 -->|否| Q2{"数据错乱/不一致?"}
Q2 -->|是| R2["✅ 自动修复<br/>抛弃本地错误链<br/>同步全网最长合法链"]
Q2 -->|否| Q3{"恶意作恶?"}
Q3 -->|是| R3["⚠️ 其他节点拒绝<br/>非法区块被全网忽略<br/>作恶节点被孤立"]
Q3 -->|否| OK["正常运行"]
style R1 fill:#4caf50,color:#fff
style R2 fill:#4caf50,color:#fff
style R3 fill:#ff9800,color:#fff
5.2 最长链原则 (Longest Chain Rule)
1 | |
- 节点永远选择累计工作量最大(通常是区块数最多)的合法链
- 分叉链上的交易不是丢失,而是回到内存池等待重新打包
- 这就是为什么 Bitcoin 交易通常需要 6 个确认才算最终不可逆
5.3 拜占庭容错 (Byzantine Fault Tolerance)
| 故障类型 | 传统分布式系统 | 区块链 (PoW) |
|---|---|---|
| 节点宕机 | 需要冗余设计 | 天然容忍,其他节点继续工作 |
| 节点作恶 | 需要 BFT 算法 | 最长链 + 算力成本天然遏制 |
| 网络分区 | 可能出现脑裂 | 分区恢复后自动收敛到最长链 |
| 大量节点故障 | 系统可能瘫痪 | 只要存在一个完整合法链即可恢复 |
5.4 51% 攻击到底能做什么——以及不能做什么
很多人听说过”51% 攻击”,但对其能力的理解往往不准确。精确地说:
51% 攻击者能做什么:
1 | |
51% 攻击者不能做什么:
1 | |
现实中的 51% 攻击成本:
1 | |
5.5 为什么确认数越多越安全——概率计算
1 | |
关键结论:6 个确认不是魔法数字,而是一个工程上的权衡——对于大多数场景(攻击者算力 < 30%),6 确认提供的安全性已经足够了。如果是数亿美元的大额转账,交易所通常会要求更多确认(如 20-60 个)。
六、交易模型:UTXO vs 账户模型
6.1 先忘掉”余额”,想想你口袋里的现金
这是理解 Bitcoin 最关键的一步。你钱包里显示”3 BTC”,你的直觉反应是:某个数据库里有一行记录 Alice: 3 BTC。大错特错。
Bitcoin 根本没有”余额”这个概念。它只有一堆还没花掉的收据——UTXO。
生活类比:你口袋里有一把现金
| 现实世界 | Bitcoin UTXO |
|---|---|
| 你有一张 100 元钞票 | 你有一个面额 2 BTC 的 UTXO(来自上个月别人转给你的) |
| 你还有一张 20 元钞票 | 你有一个面额 1 BTC 的 UTXO(来自上周的某笔交易) |
| 你口袋里总共有 100 + 20 = 120 元 | 你钱包里总共有 2 + 1 = 3 BTC |
| 你想买一个 105 元的东西 | 你想转 2.5 BTC 给 Bob |
在现实世界你会怎么做?
1 | |
Bitcoin 做的事情完全一样:
1 | |
关键规则:一张钞票不能撕一半用——UTXO 也不能部分花费。你要么全部花掉并找零,要么不花。就像你不能把 20 元钞票撕半张给收银员,你必须整张给出去然后等人找零。
6.2 一笔 UTXO 交易的完整生命周期
下面我们从头到尾跟踪一笔 Bitcoin 交易:
sequenceDiagram
participant 钱包 as 👛 Alice 钱包
participant 网络 as 🌐 比特币网络
participant 矿工 as ⛏️ 矿工
Note over 钱包: Alice 现有 UTXO:<br/>U1 = 2 BTC<br/>U2 = 1 BTC<br/>想转 2.5 BTC 给 Bob
钱包->>钱包: 1️⃣ 选择 UTXO: U1(2BTC) + U2(1BTC) = 3BTC
钱包->>钱包: 2️⃣ 构造交易:
钱包->>钱包: 输入: U1, U2
钱包->>钱包: 输出1: Bob → 2.5 BTC
钱包->>钱包: 输出2: 找零 → Alice 新地址 → 0.5 BTC<br/>(3 - 2.5 = 0.5, 手续费此处简化为0)
钱包->>钱包: 3️⃣ 用 Alice 私钥 签署每笔输入
钱包->>网络: 4️⃣ 广播交易
Note over 网络: 交易进入各节点的内存池 (Mempool)
矿工->>矿工: 5️⃣ 验签名 + 验 UTXO 未被花过
矿工->>矿工: 6️⃣ 将交易打包进候选区块
矿工->>网络: 7️⃣ 挖到区块后广播
Note over 网络: 区块确认后,全网更新 UTXO 集:
Note over 网络: ❌ 删除: U1, U2<br/>✅ 新增: Bob-UTXO(2.5BTC), Alice-UTXO(0.5BTC)
这一步一步发生了什么:
- 选择 UTXO:钱包扫描你所有的未花费输出,挑选面额合适的来凑金额。这叫做 Coin Selection(硬币选择),是钱包的核心算法之一。
- 输入必须 ≥ 输出:输入总额必须 ≥ 输出总额。差额 = 矿工手续费。
- 签名解锁:每笔 UTXO 被一个”锁定脚本”控制(约定”只有 Alice 的私钥签名才能花”),Alice 用私钥生成签名来解锁。
- UTXO 的生死:一笔 UTXO 被引用为输入后,就永久销毁,变成「已花费输出」。交易结束后,只有新的输出存活在 UTXO 集合中。
6.3 UTXO 选择的策略:钱包怎么挑硬币?
钱包不是简单地选最大的 UTXO,它会根据策略优化:
| 策略 | 做法 | 效果 |
|---|---|---|
| FIFO(先进先出) | 先收到的 UTXO 先花 | 简单公平 |
| Largest First(最大面额优先) | 优先选面额最大的 UTXO | 减少输入数量,降低交易体积和手续费 |
| Smallest First(最小面额优先) | 优先选小面额 UTXO | 消耗粉尘 UTXO,保持钱包整洁 |
| Branch and Bound(分支定界) | 精确计算,找刚好凑够的组合 | 避免产生找零 UTXO,省后续手续费 |
为什么”避免找零”很重要?
1 | |
6.4 粉尘攻击与粉尘 UTXO
**粉尘 (Dust)**:面额极小的 UTXO,小到「花费它需要的手续费 > 它本身的价值」。
1 | |
2015-2016 年曾有攻击者故意向大量地址发送 1 聪(0.00000001 BTC)的粉尘交易,目的不是获益,而是膨胀 UTXO 集、拖慢全节点。Bitcoin Core 后来引入了粉尘输出限制来防御此类攻击。
6.5 账户模型 (Ethereum):回归你熟悉的”银行余额”
Ethereum 抛弃了 UTXO,改回你直觉中的样子——每个地址就是一个银行账户,记录着一个数字余额。
1 | |
Nonce 机制——账户模型防止双花的武器:
1 | |
6.6 同一笔转账,两种模型下的视角
我们用一个具体例子对比:
Alice 要付 2.5 BTC 给 Bob,她目前有 3 BTC
| 步骤 | UTXO 模型 (Bitcoin) | 账户模型 (Ethereum) |
|---|---|---|
| Alice 的状态 | U1=2BTC, U2=1BTC(两个UTXO) | balance=3(一个数字) |
| 构造交易 | 引用 U1+U2 为输入,指定 Bob 和找零输出 | from=Alice, to=Bob, value=2.5 |
| Alice 新状态 | 新 UTXO = 0.5 BTC(找零地址) | balance = 0.5 |
| Bob 新状态 | 新 UTXO = 2.5 BTC | balance = 原余额 + 2.5 |
| 旧数据 | U1, U2 永久销毁 | 不保留旧余额记录 |
| 验证方式 | 查 UTXO 集确认输入未被花过 + 验签名 | 验 nonce 顺序 + 余额 ≥ 转账额 + 验签名 |
6.7 UTXO 模型被低估的深层优势
1 | |
UTXO 模型和账户模型代表两种哲学取向。Bitcoin 追求的是极致的去中心化验证——任何人用普通电脑就能独立验证全网每一笔交易。为此它牺牲了”用户体验的直观性”(你不能再像看银行余额那样看余额了)。Ethereum 则认为可编程性 > 极简验证,所以选择了账户模型来支撑智能合约。这不是谁对谁错,而是目标不同导致的设计取舍。
七、挖矿机制详解
7.1 挖矿的本质
挖矿不是计算一道有意义的数学题,而是一场 基于算力的概率性哈希竞猜:
flowchart TD
START["开始挖矿"] --> BUILD["构造候选区块<br/>选择交易 + Coinbase 交易"]
BUILD --> LOOP{"遍历 Nonce<br/>(0 ~ 2^32)"}
LOOP --> HASH["计算 Hash = SHA256(SHA256(区块头))"]
HASH --> CHECK{"Hash < Target ?"}
CHECK -->|否| INC["Nonce++"]
INC --> EXHAUST{"Nonce > 2^32 ?"}
EXHAUST -->|否| LOOP
EXHAUST -->|是| ADJUST["修改 ExtraNonce<br/>或调整交易组合"]
ADJUST --> LOOP
CHECK -->|🎯 是!| BROADCAST["广播新区块到全网"]
BROADCAST --> REWARD["获得区块奖励 + 手续费"]
style CHECK fill:#ff9800,color:#fff
7.2 哈希目标值计算
1 | |
7.3 挖矿概率
1 | |
7.4 矿机的进化——从 CPU 到 ASIC
挖矿硬件的进化史本身就是一部技术军备竞赛:
| 时代 | 硬件 | 算力 | 说明 |
|---|---|---|---|
| 2009-2010 | CPU (Intel/AMD) | ~10 MH/s | 中本聪用个人电脑挖出了早期区块 |
| 2010-2011 | GPU (ATI/NVIDIA) | ~1 GH/s | 显卡并行计算能力远优于 CPU |
| 2011-2012 | FPGA | ~10 GH/s | 可编程芯片,功耗比 GPU 低 |
| 2013-至今 | ASIC | ~100 TH/s+ | 专用集成电路,只为 SHA256 而生 |
ASIC 的残酷真相:
1 | |
7.5 矿池——个体矿工的生存策略
个人挖矿 = 中彩票,矿池挖矿 = 领工资。
flowchart TB
subgraph "矿池架构"
POOL["🏢 矿池服务器<br/>统一分配任务<br/>统一接收收益"]
M1["⛏️ 矿工1<br/>100 TH/s"]
M2["⛏️ 矿工2<br/>50 TH/s"]
M3["⛏️ 矿工3<br/>200 TH/s"]
M4["⛏️ 矿工..."]
end
M1 -->|提交工作量证明 (Share)| POOL
M2 -->|提交 Share| POOL
M3 -->|提交 Share| POOL
M4 -->|提交 Share| POOL
POOL -->|挖到区块| BLOCK["🪙 区块奖励 + 手续费"]
BLOCK -->|按 Share 比例分配| M1
BLOCK -->|按 Share 比例分配| M2
BLOCK -->|按 Share 比例分配| M3
BLOCK -->|按 Share 比例分配| M4
style POOL fill:#f9a825,color:#fff
矿池分配模式对比:
| 分配方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| PPS (按股支付) | 每提交一个 Share 即获固定收益 | 收益稳定,无方差 | 矿池承担运气风险,手续费高 |
| PPLNS (按最后 N 股支付) | 只有挖到块时才分配,按最近的 Share 比例 | 矿池风险低 | 收益波动大,矿工可能”白干” |
| FPPS (完全 PPS) | PPS 基础上 + 手续费分红 | 稳定 + 额外收益 | 较新,部分矿池不支持 |
矿池的中心化隐忧:
1 | |
7.6 矿池通信——Stratum 协议
矿工与矿池之间通过 Stratum 协议 通信,它比直接运行 Bitcoin 节点更高效:
1 | |
现实建议:个人低算力设备理论上存在出块可能,但概率极低。小算力参与者应加入矿池,合力挖矿并按算力占比分配收益,获得稳定收入流。选择矿池时注意:① 手续费率 ② 分配模式 ③ 地理位置延迟 ④ 不要给同一矿池 > 30% 的算力。
八、出块速度与难度调整
8.1 难度调整机制
flowchart LR
subgraph "每 2016 个区块 (~2 周)"
A["统计实际耗时"] --> B{"对比目标耗时"}
B -->|"快于 2 周"| C["📈 提高难度<br/>增加前导零数量"]
B -->|"慢于 2 周"| D["📉 降低难度<br/>减少前导零数量"]
B -->|"≈ 2 周"| E["➡️ 难度不变"]
end
8.2 公式
1 | |
8.3 算力与难度的动态平衡
| 算力变化 | 难度响应 | 最终效果 |
|---|---|---|
| 算力翻倍 | 2 周后难度翻倍 | 出块速度回归 10 分钟 |
| 算力减半 | 2 周后难度减半 | 出块速度回归 10 分钟 |
| 算力不变 | 难度不变 | 维持 10 分钟 |
8.4 为什么是 2016 个区块?
1 | |
8.5 时间戳的陷阱——矿工可以作弊吗?
比特币的难度调整依赖每个区块的时间戳。矿工能不能伪造时间戳来作弊,让系统误以为出块很慢、从而降低难度?
1 | |
8.6 以太坊的”难度炸弹”——另一种思路
Ethereum 曾在 PoW 时代引入 **难度炸弹 (Difficulty Bomb)**:
1 | |
核心洞察:难度调整是区块链的”恒温器”——无论全球算力是暴增还是暴跌,系统始终将出块速度稳定在 10 分钟。这保证了交易确认时间的可预测性,防止了通胀失控(出块太快)或网络停滞(出块太慢)。
九、矿工收益与减半经济
9.1 收益构成
| 收益来源 | 当前 (2026) | 说明 |
|---|---|---|
| 区块奖励 | 3.125 BTC/块 | 每 4 年减半一次 |
| 交易手续费 | 0.0005 ~ 0.001 BTC/笔 | 市场竞价,拥堵时飙升 |
9.2 比特币减半时间线
timeline
title 比特币减半历史与预测
2009 : 创世 : 50 BTC/块
2012 : 第1次减半 : 25 BTC/块
2016 : 第2次减半 : 12.5 BTC/块
2020 : 第3次减半 : 6.25 BTC/块
2024 : 第4次减半 : 3.125 BTC/块
2028 : 第5次减半 : 1.5625 BTC/块
2140 : ≈ 第33次减半 : 0 BTC/块 (发行完毕)
9.3 发行完毕后的运行逻辑
1 | |
9.4 手续费市场如何运作
交易手续费不是系统规定的,而是用户竞价、矿工挑选的自由市场:
1 | |
RBF (Replace-By-Fee) —— 加钱加速:
1 | |
CPFP (Child-Pays-For-Parent) —— 子交易替父付:
1 | |
9.5 内存池手续费热力图——可视化拥堵
在高拥堵时期(如 2017 年牛市、2021 年牛市),内存池里的交易按手续费分层:
1 | |
9.6 减半的经济逻辑——越来越稀缺
1 | |
补充观点:2140 年后 Bitcoin 的安全性将完全依赖手续费市场。如果链上交易需求不足,手续费过低,可能导致算力萎缩、51% 攻击成本下降。这也是为什么 Layer2(如闪电网络)和链上高价值结算被寄予厚望——它们确保每笔链上交易都有足够的手续费来维持安全预算。
十、密码学与信任模型
10.1 非对称加密原理
sequenceDiagram
participant Alice as 👩 Alice
participant Network as 🌐 区块链网络
participant Bob as 👨 Bob
Note over Alice: 生成密钥对<br/>私钥 SK (保密)<br/>公钥 PK (公开为地址)
Alice->>Alice: 构造交易: "支付 Bob 1 BTC"
Alice->>Alice: 用私钥签名: Sign(SK, 交易)
Alice->>Network: 广播: {交易 + 签名 + 公钥}
Network->>Network: 验证: Verify(PK, 交易, 签名)
alt 签名有效
Network->>Network: ✅ 交易合法,打包入块
else 签名无效
Network->>Network: ❌ 拒绝交易
end
10.2 两代哈希函数
| 函数 | 用途 | 安全性 |
|---|---|---|
| SHA-256 | 挖矿 PoW、交易哈希、区块哈希 | 抗碰撞、抗原像 |
| RIPEMD-160 | 将公钥缩短为比特币地址 (再经 Base58Check) | 配合 SHA-256 双重哈希 |
| SHA-256 + RIPEMD-160 | 生成 P2PKH 地址 | 双重保护 |
地址生成流程:
1 | |
10.3 为什么区块链不需要 CA 证书?
flowchart LR
subgraph "传统 PKI 信任模型"
CA["🔐 CA 证书机构<br/>(Verisign, Let's Encrypt)"]
WEB["🌐 网站"]
USER["👤 用户"]
USER -->|"1. 验证证书"| CA
CA -->|"2. 担保公钥归属"| USER
USER <-->|"3. 安全通信"| WEB
end
subgraph "区块链信任模型"
TX["📝 交易"]
NODE["🖥️ 验证节点"]
TX -->|"公钥 + 签名 一起广播"| NODE
NODE -->|"数学验证签名<br/>不关心'你是谁'<br/>只关心'私钥对不对'"| TX
end
style CA fill:#ef5350,color:#fff
style NODE fill:#66bb6a,color:#fff
核心差异:
- 传统互联网:需要 CA 证明”这个公钥确实属于 example.com” → 信任第三方
- 区块链:不验证身份,只验证签名。你是谁不重要,持有对应私钥就代表你有权支配这笔资产 → 信任数学
10.4 私钥从哪里来?——熵与随机性
私钥本质上就是一个256 位的随机数。这个东西有多随机,决定了你的资产有多安全。
1 | |
10.5 助记词与 HD 钱包——不用再背一长串字符
早期的比特币钱包让你直接保管私钥(一长串十六进制),极不友好。现代钱包使用 BIP39 助记词:
flowchart LR
ENTROPY["🎲 128-256 位<br/>随机熵"] -->|"BIP39"| MNEM["📝 12-24 个英文单词<br/>助记词 (Mnemonic)"]
MNEM -->|"PBKDF2<br/>(密码+盐,迭代2048次)"| SEED["🌱 512位种子<br/>(Seed)"]
SEED -->|"BIP32<br/>HD 钱包"| MASTER["🔑 主私钥<br/>(Master Key)"]
MASTER -->|"派生"| CHILD1["子密钥 1<br/>m/44'/0'/0'/0/0"]
MASTER -->|"派生"| CHILD2["子密钥 2<br/>m/44'/0'/0'/0/1"]
MASTER -->|"派生"| CHILDN["... 无限个子密钥"]
style MNEM fill:#f9a825,color:#fff
style SEED fill:#42a5f5,color:#fff
style MASTER fill:#66bb6a,color:#fff
为什么助记词更安全?
1 | |
真实案例:2021 年有人找回了一个存有 2 BTC 的旧钱包,因为他只记得 12 个助记词中的 11 个。剩余的 1 个词有 2048 种可能 → 他写脚本遍历 → 几分钟后第 189 个词命中了。如果他丢的是私钥文件本身,那笔钱就永别了。
10.6 比特币地址的演变——兼容与升级
| 地址类型 | 前缀 | 示例 | 特点 |
|---|---|---|---|
| P2PKH (传统) | 1... |
1A1zP1eP5QGefi2D... |
最古老,交易体积最大 |
| P2SH (脚本哈希) | 3... |
3J98t1WpEZ73CNm... |
支持多签等复杂脚本 |
| P2WPKH (原生隔离见证) | bc1q... |
bc1qar0srrr7xf... |
SegWit,体积小,手续费低 |
| P2TR (Taproot) | bc1p... |
bc1p5d7rjq7g6r... |
2021年新增,隐私+智能合约能力 |
1 | |
深入理解:区块链将”身份认证”问题转化为”资产控制权证明”问题。这是一种范式转换——不再需要权威机构担保”你是你”,而是用密码学证明”你有权花这笔钱”。这种设计消除了对任何第三方的信任依赖,实现了真正的去中心化。
十一、分叉机制:软分叉与硬分叉
11.1 分叉到底是什么?
先抛开”软”和”硬”的概念。分叉本质上就是:网络中的节点对”哪条链是对的”产生了分歧。
用生活场景来类比:
1 | |
11.2 临时分叉(偶然分叉)——每天都在发生
在理解软/硬分叉之前,必须先说临时分叉,因为它才是区块链上最频繁的现象:
flowchart TB
subgraph "⚠️ 临时分叉发生"
B4a["Block 4<br/>(矿工A挖出)"]
B4b["Block 4'<br/>(矿工B挖出)"]
B3["Block 3"] --> B4a
B3 --> B4b
end
subgraph "⏳ 下一个区块决定谁是赢家"
B5a["Block 5<br/>(接在 Block 4 后)"]
B4a --> B5a
B4b -.->|"❌ 被抛弃"| ORPHAN["孤块 (Orphan Block)"]
end
B5a -->|"✅ 成为主链"| MAIN["主链继续延伸"]
style B4b fill:#bdbdbd,stroke:#999,color:#666
style ORPHAN fill:#ef5350,color:#fff
style MAIN fill:#66bb6a,color:#fff
为什么会发生?
1 | |
临时分叉的规律:
- 每天都会发生,是正常现象
- 通常 1-2 个区块后自动解决
- 被丢弃的链上的交易不会丢失——它们回到内存池,等待下一轮打包
- 这就是为什么交易所要求 6 个确认——6 个区块深度后,临时分叉的概率趋近于零
11.3 软分叉 (Soft Fork)——收紧规则的兼容升级
软分叉的核心逻辑用一句话说:新规则是老规则的子集。以前允许的,现在不允许了;但以前就禁止的,现在还是禁止。
最经典的软分叉案例——SegWit (隔离见证)
1 | |
flowchart LR
subgraph "升级前:所有节点在一条链上"
B1["Block N<br/>(旧格式)"]
end
subgraph "软分叉生效后"
B2["Block N+1<br/>(SegWit 格式)"]
B3["Block N+2<br/>(SegWit 格式)"]
end
OLD["🖥️ 旧节点"] -.->|"视为合法交易<br/>(忽略签名数据)"| B2
NEW["🖥️ 新节点"] -->|"完整验证交易<br/>(含签名数据)"| B2
B1 --> B2 --> B3
style B2 fill:#66bb6a,color:#fff
style B3 fill:#66bb6a,color:#fff
软分叉的要求:需要大多数(通常 95%)的算力支持,这样新共识区块能确保占据最长链,旧节点即使不升级也会自动跟随。
其他软分叉案例:
| 提案 | 时间 | 内容 |
|---|---|---|
| BIP 16 (P2SH) | 2012 | 允许更复杂的脚本条件,旧节点只验证最终哈希 |
| BIP 65 (OP_CHECKLOCKTIMEVERIFY) | 2015 | 增加时间锁功能,旧节点将新操作码视为 NOP(无操作) |
| Taproot | 2021 | 提升隐私与智能合约能力,同样通过软分叉实现 |
11.4 硬分叉 (Hard Fork)——放宽规则的不兼容分裂
硬分叉的核心逻辑:新规则放宽了限制。新区块在旧节点眼里是”非法的”,旧节点会主动拒绝它们。
最经典的例子——Bitcoin Cash (BCH) 的诞生:
1 | |
flowchart TB
COMMON["公共历史<br/>[0]→[1]→...→[478,558]<br/>这是 BTC 和 BCH 共有的祖先"]
COMMON --> BTC["BTC 链 (1MB SegWit)<br/>[478,559]→[478,560]→..."]
COMMON --> BCH["BCH 链 (8MB)<br/>[478,559']→[478,560']→..."]
subgraph "分叉后永久分裂"
BTC
BCH
end
NOTE1["持有 BTC 的用户<br/>在 BCH 链上自动获得等量 BCH"]
NOTE2["两条链从此独立运行<br/>互不影响"]
style BTC fill:#f9a825,color:#fff
style BCH fill:#4caf50,color:#fff
硬分叉的连锁反应:
1 | |
Ethereum DAO 硬分叉 (2016)——最争议的分叉:
1 | |
11.5 软分叉 vs 硬分叉——一张对比表看透
| 软分叉 (Soft Fork) | 硬分叉 (Hard Fork) | |
|---|---|---|
| 规则变化方向 | 收紧(”以前允许的,现在禁止”) | 放宽或修改(”以前不允许的,现在允许”) |
| 旧节点视角 | 新区块”看起来合法”(旧规则下没犯错) | 新区块”看起来非法”(违反了旧规则) |
| 是否分裂 | 否,旧节点会自动跟随最长链 | 是,旧节点拒绝新区块后形成独立链 |
| 升级门槛 | 需要 95%+ 算力支持 | 需要全网节点升级,否则网络分裂 |
| 链上资产 | 只有一条链,资产不变 | 分叉时刻持有资产者,在两条链上都有币 |
| 技术难度 | 高(要设计得让旧节点”看不懂但能接受”) | 低(直接改规则,但社会共识难达成) |
| 典型例子 | SegWit, P2SH, Taproot | Bitcoin Cash, Ethereum Classic, BSV |
11.6 分叉后用户该怎么办?
软分叉:什么都不要做,你的钱包自动兼容,资产不变。
硬分叉:你在分叉时刻所持有的币,会同时出现在两条链上。
1 | |
11.7 分叉的本质:治理机制还是分裂工具?
flowchart LR
subgraph "社区共识"
DEV["👨💻 开发者<br/>(提出技术方案)"]
MINER["⛏️ 矿工<br/>(投票选择链)"]
USER["👤 用户<br/>(持有资产)"]
EXCH["🏦 交易所<br/>(流动性/命名权)"]
end
DEV -->|"提案"| VOTE{"社区讨论"}
MINER -->|"算力投票"| VOTE
USER -->|"经济投票"| VOTE
EXCH -->|"命名/上架"| VOTE
VOTE -->|"共识达成"| UPGRADE["软分叉升级"]
VOTE -->|"无法达成共识"| SPLIT["硬分叉分裂"]
style UPGRADE fill:#66bb6a,color:#fff
style SPLIT fill:#ef5350,color:#fff
分叉不应该被简单归类为”好事”或”坏事”。软分叉代表了社区的进化能力——在不分裂的前提下更新规则。硬分叉则是一种退出机制:当一部分人认为现状已经偏离了初心,他们有权携带资产出走,创建新系统。
在传统世界里,如果股东对公司方向不满意,只能卖掉股票离场。在区块链世界里,你不满意就可以分叉——资产保留、规则重写。这是一种用代码实现的民主,代价是网络效应的稀释。区块链治理的终极问题不是”会不会分叉”,而是”分叉后哪条链能活下来”。
十二、智能合约简介
12.1 概念
智能合约是运行在区块链上的自动化程序——“if-then”逻辑的链上实现。
1 | |
12.2 Bitcoin Script vs Ethereum EVM
flowchart LR
subgraph "Bitcoin Script"
B1["🚫 非图灵完备"]
B2["无循环/跳转"]
B3["有限的状态操作"]
B4["用途: 多重签名、时间锁、HTLC"]
end
subgraph "Ethereum EVM"
E1["✅ 图灵完备"]
E2["支持循环/条件/跳转"]
E3["任意复杂逻辑"]
E4["用途: DeFi, NFT, DAO, GameFi"]
end
| 特性 | Bitcoin Script | Ethereum Solidity |
|---|---|---|
| 图灵完备 | ❌ 故意不完整 (安全设计) | ✅ 完整 |
| Gas 机制 | ❌ 无,交易费固定 | ✅ 有,按运算量计费 |
| 编程范式 | 栈式操作码 (Forth 风格) | 高级语言 (类 JavaScript) |
| 典型应用 | 多签钱包、闪电网络 | Uniswap, AAVE, OpenSea |
| 安全风险 | 较低 (功能受限) | 较高 (代码漏洞可致巨额损失) |
12.3 Gas 机制详解——为什么智能合约不是免费的
在 Ethereum 上,每一步操作都要消耗 Gas(计算资源费)。这不是为了坑钱,而是为了防止无限循环耗尽全网资源。
1 | |
为什么要有 Gas Limit?
1 | |
12.4 史上最著名的智能合约漏洞——The DAO 重入攻击
2016 年,The DAO 合约被黑客利用重入漏洞盗走 360 万 ETH,直接导致了 Ethereum 硬分叉。这是理解智能合约安全性的经典案例。
正常提款流程:
1 | |
重入攻击的原理——漏洞在第 2 步和第 3 步的顺序:
sequenceDiagram
participant Hack as 🦹 攻击者合约
participant DAO as 🏦 The DAO 合约
Note over Hack: 攻击者存入 100 ETH
Hack->>DAO: 1. 调用 withdraw(100 ETH)
DAO->>DAO: 检查: 余额 = 100 ✅
DAO->>Hack: 2. 发送 100 ETH
Note over Hack: ⚠️ 收到 ETH 时,自动触发 fallback 函数
Hack->>DAO: 3. fallback 函数再次调用 withdraw(100 ETH)
Note over DAO: ⚠️ 注意!此时余额还没更新!
DAO->>DAO: 检查: 余额仍然 = 100 ✅ (还没减!)
DAO->>Hack: 4. 再次发送 100 ETH
Note over Hack: 循环继续...
Hack->>DAO: 5. fallback → 再取 100 ETH
DAO->>Hack: 6. 再发送 100 ETH
Note over Hack: ... 持续直到合约 ETH 被掏空
修复方案(Checks-Effects-Interactions 模式):
1 | |
教训:The DAO 事件不仅是一个漏洞,也暴露了智能合约治理的根本问题——“代码即法律”是否意味着即使代码有 bug,结果也必须被执行?Ethereum 社区选择了回滚(硬分叉),Ethereum Classic 选择了保留。至今没有统一答案。
12.5 预言机问题——区块链看不到现实世界
智能合约只能访问链上数据。如果它需要外部信息(如 BTC 价格、天气、比赛结果),怎么办?
1 | |
flowchart LR
RW["🌍 现实世界<br/>天气/价格/比赛"] -->|"数据采集"| NODES["🔗 预言机节点<br/>Chainlink"]
NODES -->|"多数共识"| SC["📜 智能合约"]
SC -->|"执行结果"| RESULT["💰 自动支付"]
style NODES fill:#f9a825,color:#fff
style SC fill:#42a5f5,color:#fff
Bitcoin 的设计哲学是”简单即安全”——故意限制 Script 的功能来降低攻击面。而 Ethereum 选择了”图灵完备”的路线,用 Gas 机制来限制资源消耗。两条路线没有绝对优劣,取决于你更看重”安全性”还是”可编程性”。智能合约的安全性不在于”没有 bug”,而在于”攻击成本 > 攻击收益”——这与 PoW 的安全模型是一脉相承的。
十三、全景总结
13.1 区块链安全金字塔
graph TB
subgraph "区块链安全模型"
L4["🔺 应用层安全<br/>智能合约审计、DApp 安全实践"]
L3["🔺 经济层安全<br/>代币激励、博弈论均衡、手续费市场"]
L2["🔺 共识层安全<br/>PoW/PoS、最长链规则、51% 攻击成本"]
L1["🔺 密码学层安全<br/>哈希函数、数字签名、非对称加密"]
end
style L1 fill:#1b5e20,color:#fff
style L2 fill:#2e7d32,color:#fff
style L3 fill:#388e3c,color:#fff
style L4 fill:#43a047,color:#fff
13.2 一图看懂区块链核心概念关系
graph LR
密码学["🔐 密码学<br/>(哈希 + 签名)"] -->|"提供"| 信任["🤝 去中心化信任"]
共识["⚖️ 共识机制<br/>(PoW/PoS)"] -->|"达成一致"| 信任
网络["🌐 P2P 网络<br/>(全节点+矿工)"] -->|"传播与验证"| 信任
经济["💰 经济激励<br/>(区块奖励+手续费)"] -->|"驱动参与"| 共识
信任 -->|"支撑"| 应用["🚀 应用层<br/>转账/DeFi/NFT/DAO"]
style 信任 fill:#f9a825,stroke:#333,color:#fff
style 应用 fill:#7b1fa2,stroke:#333,color:#fff
13.3 核心要点速查
| # | 核心原理 | 一句话总结 |
|---|---|---|
| 1 | 链式结构 | 哈希指针串联区块,篡改一处则全链断裂 |
| 2 | Merkle 树 | 二叉树哈希汇总,O(log n) 完成交易验证 |
| 3 | PoW 共识 | 算力竞猜 Nonce,最长链即真理 |
| 4 | 难度调整 | 每 2016 块自动调参,出块恒 10 分钟 |
| 5 | UTXO 模型 | 硬币模式,花即销毁,天然防双花 |
| 6 | 非对称加密 | 私钥签名、公钥验证,无 CA 信任 |
| 7 | 节点容错 | 拜占庭容错,单点故障不影响全网 |
| 8 | 减半经济 | 4 年减半,2140 年发行完毕,转手续费驱动 |
| 9 | 分叉治理 | 软分叉兼容升级,硬分叉社区分裂 |
| 10 | 智能合约 | 链上自动程序,代码即法律 |
本文以 Bitcoin 为主线,兼顾 Ethereum 等主流公链的核心差异,力求构建一个系统化的区块链认知框架。技术细节不断演进,但底层原理长期有效。