比特币:工作原理详解
基于中本聪比特币白皮书的深度教程。涵盖交易模型、工作量证明挖矿、点对点网络、共识机制、区块确认、交易选择、Merkle 树与安全性分析 — 配有交互式演示。
1. 引言与动机
比特币由化名中本聪(Satoshi Nakamoto)于 2008 年提出,是一种点对点电子现金系统,消除了对可信第三方的依赖。它解决的核心问题是:在没有中央机构的情况下防止双重支付。
双重支付问题
在数字系统中,数据可以被复制。如果没有可信中介,如何防止某人将同一枚硬币花两次?传统系统依赖银行来验证余额,但这引入了单点故障和信任问题。
比特币的解决方案
用密码学证明取代对机构的信任。一个去中心化的节点网络维护一个共享账本(区块链)。交易通过计算工作(工作量证明)来验证,使得篡改历史在计算上不可行。
核心原则
没有中央权威机构 — 数千个节点独立验证每笔交易和每个区块
任何人都可以仅使用数学和密码学来验证整个交易历史
一旦交易被足够多的区块覆盖,逆转它所需的计算能力将超过网络其余部分的总和
用户通过公钥而非真实身份来标识 — 提供隐私但非完全匿名
任何人都可以运行节点、挖矿或发送交易 — 无需许可
只有 2100 万枚比特币,由协议规则和共识强制执行
📄 白皮书第 1 节:引言
2. 交易与 UTXO 模型
比特币不追踪账户余额。相反,它使用一种叫做 UTXO(未花费交易输出)的模型。每一枚存在的比特币都存在于一个未花费的输出中。要花费比特币,你需要消耗已有的 UTXO 作为输入,并创建新的 UTXO 作为输出。
所有权链
每笔交易都通过密码学与前一笔交易相链接。所有者通过对前一笔交易的哈希值和下一位所有者的公钥进行数字签名来转移硬币。收款人可以验证签名链来确认所有权历史。
UTXO 如何工作
- 每个 UTXO 只能被花费一次 — 这防止了双重支付
- 一笔交易消耗一个或多个 UTXO 作为输入
- 一笔交易创建一个或多个新的 UTXO 作为输出
- 输入总额必须 ≥ 输出总额(差额为交易手续费)
- 找零作为新的 UTXO 返还给发送者
示例:Alice 向 Bob 发送 0.7 BTC
- Alice 有一个来自之前交易的价值 1.0 BTC 的 UTXO
- 她创建一笔包含 1 个输入(她的 1.0 BTC UTXO)和 2 个输出的交易
- 输出 1:0.7 BTC 发送到 Bob 的公钥(付款)
- 输出 2:0.29 BTC 返还到 Alice 的公钥(找零)
- 剩余的 0.01 BTC 是交易手续费(归矿工所有)
- Alice 原来的 1.0 BTC UTXO 现在已被花费,永远不能再使用
交易结构
交易格式版本号
被消耗的 UTXO 数量
每个输入引用一个前一笔交易的哈希 + 输出索引,加上解锁脚本(签名)
新创建的 UTXO 数量
每个输出指定一个金额和锁定脚本(收款人的公钥哈希)
交易可以被包含在区块中的最早时间/区块
交互式:UTXO 交易构建器
| 地址 | 金额 (BTC) | 交易 ID | 索引 | |
|---|---|---|---|---|
| 1A2b3C...x9Y0 | 0.50000000 BTC | a1b2c3d4...0001 | 0 | |
| 1D4e5F...m7N8 | 1.00000000 BTC | e5f6a7b8...0002 | 1 | |
| 1G7h8I...p2Q3 | 0.30000000 BTC | c9d0e1f2...0003 | 0 | |
| 1J0k1L...s5T6 | 2.00000000 BTC | 34a5b6c7...0004 | 2 | |
| 1M3n4O...v8W9 | 0.15000000 BTC | d8e9f0a1...0005 | 0 | |
| 1A2b3C...x9Y0 | 0.75000000 BTC | b2c3d4e5...0006 | 1 |
📄 白皮书第 2 节:交易
3. 时间戳服务器与区块链结构
比特币通过将区块链接在一起来实现分布式时间戳服务器。每个区块包含前一个区块的哈希值,形成一条不可打破的链。这证明了数据在区块创建时就已经存在。
区块内部构成
区块格式版本(指示使用哪些验证规则)
前一个区块头的 SHA-256d 哈希 — 这就是创建链的方式
一个汇总区块中所有交易的单一哈希值(详见第 10 节)
矿工创建此区块时的 Unix 时间戳
目标哈希的紧凑编码 — 决定挖矿难度
矿工调整的 32 位数字,用于寻找有效的哈希值
区块体
区块体包含交易列表,以 coinbase 交易(挖矿奖励)开头,后面是所有其他已验证的交易。
因为每个区块都包含前一个区块的哈希值,更改任何历史区块都会使所有后续区块失效 — 使区块链具有防篡改特性。
区块大小
比特币区块被限制为 1 MB 的原始数据(使用 SegWit 后为 400 万权重单位)。这将吞吐量限制在大约每秒 7 笔交易,这是为去中心化做出的有意权衡。
📄 白皮书第 3 节:时间戳服务器
4. 工作量证明
工作量证明(PoW)是保护比特币网络安全的机制。矿工竞争寻找一个数字(nonce),使得区块头的哈希值低于目标值。这本质上是一种暴力搜索 — 容易验证,难以找到。
挖矿如何运作
- 从内存池收集待处理交易并组装候选区块
- 将 nonce 设为 0
- 计算 SHA-256(SHA-256(区块头)) — 这称为双重 SHA-256
- 如果哈希值低于目标值,你找到了一个有效区块 — 广播它!
- 如果不是,递增 nonce 再试(每秒数十亿次尝试)
- 如果所有 2³² 个 nonce 值都用完了,更改 coinbase 交易或时间戳并重新开始
难度调整
每 2,016 个区块(约 2 周),网络会重新计算难度目标。如果出块速度快于平均 10 分钟,难度增加。如果更慢,难度降低。这种自我调节机制确保大约每 10 分钟找到一个区块,无论总算力如何。
算力与能耗
截至 2024 年,比特币网络算力超过 500 EH/s(百亿亿次哈希/秒)。每次哈希尝试都消耗能源,这种能源消耗正是区块链安全的保障 — 逆转区块需要重做所有工作。
类比
想象一个彩票,你必须找到一个以 20 个零开头的号码。你一次只能试一张。一旦有人找到了,每个人都能立即验证它是有效的 — 但找到它需要巨大的努力。
交互式:挖矿模拟器
| 随机数 (Nonce) | 0 |
| 尝试次数 | 0 |
| 哈希/秒 | — |
| 难度 | 00 (2 leading zeros) |
📄 白皮书第 4 节:工作量证明
5. 网络与节点通信
比特币运行在一个点对点(P2P)网络上,每个节点都是平等的。没有中央服务器。节点相互发现、共享交易和区块,并共同维护区块链。
六步网络协议(来自白皮书)
节点发现
当比特币节点启动时,它连接到 DNS 种子节点以了解其他对等节点。然后它通常维护 8 个出站连接并接受最多 125 个入站连接。
Gossip 协议
当节点收到新的交易或区块时,它会用 'inv'(清单)消息通知其对等节点。没有该项目的对等节点会用 'getdata' 消息请求它。这种泛洪方法确保信息在几秒内到达整个网络。
version初始握手 — 交换协议版本、区块高度、节点能力
addr共享已知的对等节点 IP 地址以帮助网络发现
inv宣布你有新的交易或区块(通过哈希)
getdata请求已宣布项目的完整数据
tx完整的交易消息
block完整的区块消息
getblocks请求区块哈希以同步链
ping/pong保持连接存活并测量延迟
容错性
节点可以随时加入或离开网络。当节点重新连接时,它通过请求错过的区块来追赶进度。网络没有单点故障 — 只要有任何节点存在,它就继续运行。
交互式:网络传播模拟器
📄 白皮书第 5 节:网络
6. 共识与冲突解决
去中心化网络如何就单一版本的真相达成一致?比特币使用最长链规则:累计工作量证明最多的链被认为是有效的。这种优雅的机制在没有中央协调者的情况下解决了分歧。
分叉何时发生
偶尔,两个矿工几乎同时找到有效区块。不同的节点先收到不同的区块,导致临时分叉 — 两个竞争版本的链。
分叉如何解决
- 两个矿工几乎同时找到区块 N+1(区块 A 和区块 B)
- 一些节点先收到区块 A,另一些先收到区块 B
- 两组节点都继续在他们先收到的区块上挖矿
- 最终,一组率先找到区块 N+2,使他们的链更长
- 所有节点切换到更长的链 — 另一个区块变成「孤块」
- 孤块中的交易返回到内存池等待重新打包
最长链规则
节点始终遵循累计工作量证明最多的链。这就是为什么「最长链」实际上意味着「最重链」 — 需要最多总计算努力的那条。这个规则确保最终收敛:所有诚实节点最终会就同一条链达成一致。
51% 攻击
可靠地改写历史的唯一方法是控制超过 50% 的网络算力。即使如此,攻击者也只能逆转自己最近的交易 — 他们无法凭空创造硬币或窃取他人的硬币。此类攻击的成本(硬件 + 电力)使得对于比特币的网络规模来说在经济上是不合理的。
共识机制对比
📄 白皮书第 4-5 节
7. 区块提交与确认
当交易被包含在区块中时,它获得 1 次确认。每个后续区块增加一次确认。更多确认 = 逆转难度呈指数级增长。这就是为什么比特币具有概率性(而非绝对)终结性。
区块如何被提交
- 矿工从内存池中组装包含交易的候选区块
- 矿工找到有效的工作量证明(使哈希值低于目标值的 nonce)
- 矿工将区块广播到网络
- 接收节点验证:有效的 PoW?所有交易有效?延伸最长链?区块大小 OK?
- 如果有效,节点将其添加到本地区块链副本中
- 节点开始在这个区块之上挖掘下一个区块 — 表示接受
区块验证规则
- 区块头哈希低于当前难度目标
- 所有交易有效(正确的签名、无双重支付)
- Merkle 根与包含的交易匹配
- 区块时间戳在可接受范围内
- 区块大小未超过限制
- Coinbase 奖励未超过区块补贴 + 总手续费
- 区块引用当前链顶端的哈希
确认深度与安全性
在你的交易所在区块之上构建的每个新区块都是一次确认。成功逆转的概率随每次确认呈指数级下降。
为什么是 6 次确认?
当攻击者控制 10% 的算力时,6 次确认后逆转交易的概率约为 0.0002%。即使拥有 30% 的算力,也只有约 17.7%。对于大多数实际目的,6 次确认提供了压倒性的安全保障。
交互式:确认与逆转概率
| 确认数 | 概率 | 安全性 |
|---|---|---|
| 1 | 20.46% | 危险 |
| 2 | 5.10% | 有风险 |
| 3 | 1.32% | 有风险 |
| 4 | 0.3455% | 安全 |
| 5 | 0.0914% | 安全 |
| 6 | 0.0243% | 安全 |
| 7 | 6.47e-5 | 安全 |
| 8 | 1.73e-5 | 安全 |
| 9 | 4.63e-6 | 安全 |
| 10 | 1.24e-6 | 安全 |
📄 白皮书第 3、11 节
8. 交易选择与内存池
在交易被包含在区块之前,它存在于每个节点的内存池(mempool)中 — 一个等待确认的未确认交易的等候区。矿工主要根据手续费率来选择包含哪些交易。
内存池
每个全节点维护自己的内存池。当节点收到有效交易时,会将其添加到内存池并转发给对等节点。由于传播延迟,每个节点的内存池可能略有不同。
- 交易必须有效(正确的签名、足够的资金、无双重支付)
- 交易必须满足最低中继费(防止垃圾交易)
- 如果内存池已满,最低费率的交易会被驱逐
- 每个节点可以设置自己的内存池大小限制(默认:300 MB)
矿工如何选择交易
矿工被激励最大化收入,因此他们按费率(每虚拟字节的聪数)优先选择交易。选择算法类似于背包问题:
- 按费率(sat/vB)对所有内存池交易排序,最高的排在前面
- 从最高费率开始,逐一将交易添加到候选区块
- 跳过会导致区块超过 400 万权重单位限制的交易
- 跳过与已包含交易冲突的交易
- 继续直到区块满或没有更多有效交易
- 在前面加上 coinbase 交易(区块奖励 + 总手续费)
手续费市场
比特币的手续费市场是一种自然的供需机制。当很多人想要交易时,手续费上升。当需求低时,手续费下降。用户自行设定费率 — 更高的费用意味着更快的确认。
每虚拟字节的聪数 — 标准费率单位。1 BTC = 1 亿聪。
费用替换(Replace-By-Fee)— 允许用更高费用的版本替换卡住的交易
子付父费(Child-Pays-For-Parent)— 新交易花费卡住交易的输出,并附带足够高的费用来激励矿工同时包含两笔交易
钱包通过查看最近的区块和当前内存池状态来估算适当的费用
Coinbase 交易
每个区块中的第一笔交易是特殊的 — 它是 coinbase 交易。它没有输入,创建新的比特币作为区块奖励(补贴 + 总手续费)。这是新比特币进入流通的唯一方式。
交互式:内存池与区块组装模拟器
| 交易 ID | 大小 | 费率 | 总手续费 | |
|---|---|---|---|---|
| ○ | tx_a3f20 | 250 vB | 180 sat/vB | 45,000 |
| ○ | tx_a40d7 | 380 vB | 150 sat/vB | 57,000 |
| ○ | tx_a428e | 520 vB | 120 sat/vB | 62,400 |
| ○ | tx_a4445 | 190 vB | 95 sat/vB | 18,050 |
| ○ | tx_a45fc | 670 vB | 80 sat/vB | 53,600 |
| ○ | tx_a47b3 | 300 vB | 65 sat/vB | 19,500 |
| ○ | tx_a496a | 450 vB | 55 sat/vB | 24,750 |
| ○ | tx_a4b21 | 280 vB | 45 sat/vB | 12,600 |
| ○ | tx_a4cd8 | 350 vB | 38 sat/vB | 13,300 |
| ○ | tx_a4e8f | 600 vB | 30 sat/vB | 18,000 |
| ○ | tx_a5046 | 220 vB | 25 sat/vB | 5,500 |
| ○ | tx_a51fd | 410 vB | 20 sat/vB | 8,200 |
| ○ | tx_a53b4 | 550 vB | 15 sat/vB | 8,250 |
| ○ | tx_a556b | 330 vB | 10 sat/vB | 3,300 |
| ○ | tx_a5722 | 480 vB | 5 sat/vB | 2,400 |
矿工优先选择费率(聪/vB)最高的交易,因为区块空间有限。这创造了一个手续费市场,用户之间竞争以获得打包。
📄 白皮书第 6 节:激励
9. 激励与挖矿经济学
比特币通过经济激励将矿工行为与网络安全对齐。矿工消耗真实世界的资源(硬件、电力),并获得新铸造的比特币和交易手续费作为回报 — 但前提是他们遵守规则。
区块奖励与减半
区块奖励从 50 BTC 开始,每 210,000 个区块(约 4 年)减半。这创造了一个可预测的、递减的供应计划,接近 2100 万枚的上限。
博弈论:为什么诚实挖矿?
找到有效区块的矿工可以领取奖励。但如果他们包含无效交易或试图双重支付,其他节点会拒绝他们的区块 — 浪费了所有的挖矿能源。诚实挖矿比攻击更有利可图。
- 拥有不到 50% 算力的攻击者最终会落后于诚实链
- 攻击成本(硬件 + 电力)超过双重支付的潜在收益
- 成功的攻击会导致比特币价格暴跌,贬值攻击者自己的持有量
- 挖矿硬件(ASIC)只能用于比特币 — 攻击会摧毁设备的价值
从补贴到手续费的过渡
随着区块补贴趋近于零,交易手续费必须成为矿工的主要激励。这是一个关键的长期挑战:仅靠手续费是否足以保护网络安全?手续费市场机制和潜在的协议升级旨在解决这个问题。
📄 白皮书第 6 节:激励
10. Merkle 树与 SPV
Merkle 树是一种二叉哈希树,提供了一种高效且安全的方式来验证特定交易是否包含在区块中 — 而无需下载整个区块。
Merkle 树如何工作
- 每笔交易被单独哈希(哈希 A、哈希 B、哈希 C、哈希 D……)
- 相邻的哈希配对并一起哈希:哈希 AB = SHA256(哈希 A + 哈希 B)
- 这个过程沿着树向上继续,直到剩下一个哈希 — Merkle 根
- Merkle 根存储在区块头中(无论交易数量多少,只有 32 字节)
Merkle 证明
要证明交易在区块中,你只需要交易本身、沿路径到根的兄弟哈希,以及区块头中的 Merkle 根。对于包含 1000 笔交易的区块,Merkle 证明只需要约 10 个哈希,而不是全部 1000 笔交易。
简化支付验证(SPV)
SPV 客户端(如手机钱包等轻量级钱包)不下载完整的区块链。相反,它们只下载区块头(每个约 80 字节)并为自己的交易请求 Merkle 证明。这允许它们用最少的数据验证支付。
- 下载所有区块头(完整的头链约 60 MB,而完整区块链超过 500 GB)
- 收到交易时,从全节点请求 Merkle 证明
- 根据区块头中的 Merkle 根验证证明
- 检查区块头具有足够的工作量证明
- 计算确认数(后续区块头数量)
防篡改特性
如果交易中哪怕一个比特被更改,其哈希就会改变,这会改变其父哈希,并一直传播到 Merkle 根。这使得任何篡改都能立即被检测到。
交互式:Merkle 树构建器与验证器
在下方输入交易,构建树,然后点击任意叶节点查看其 Merkle 证明路径。
📄 白皮书第 7-8 节:回收磁盘空间与 SPV
11. 隐私模型
比特币采用与传统银行不同的隐私方法。所有交易都是公开的,但地址背后的身份不会直接暴露。
传统模式
银行充当守门人:公众什么都看不到,银行看到一切。隐私来自于将信息访问限制在可信方。
比特币模式
所有交易在区块链上公开可见,但交易与现实世界身份之间的联系被切断了。你可以看到 1 BTC 从地址 A 移动到地址 B,但你不知道谁控制着这些地址。
隐私最佳实践
防止将多笔交易关联到同一实体
重复使用地址使得追踪交易历史更容易
独特的金额可以用来关联交易
合并多笔交易以模糊资金流向
局限性
链分析公司通常可以通过分析交易模式、广播时的 IP 地址、交易所 KYC 记录和金额关联来去匿名化用户。比特币是假名的,不是匿名的。
📄 白皮书第 10 节:隐私
12. 合并与拆分价值
在实践中,交易经常需要将多个小的 UTXO 合并为一笔付款,或将一个大的 UTXO 拆分为多个输出。比特币自然地处理这些情况。
合并 UTXO
如果 Alice 收到了 10 笔各 0.1 BTC 的小额支付,她有 10 个 UTXO。要发送 0.8 BTC,她创建一笔包含 8 个输入(消耗 8 个 UTXO)和 2 个输出(0.8 BTC 给收款人 + 找零)的交易。
拆分价值
一个 UTXO 可以被拆分为任意数量的输出。Bob 在一个 UTXO 中有 5 BTC,想支付给 3 个人:他创建 1 个输入和 4 个输出(3 笔付款 + 找零给自己)。
实际影响
- 更多输入/输出 = 更大的交易体积 = 更高的手续费
- 钱包自动处理 UTXO 选择(币选择算法)
- 在低手续费期间合并许多小 UTXO 可以为以后节省费用
- 扇出模式(1 输入 → 多输出)常见于交易所处理提款
📄 白皮书第 9 节:合并与拆分价值
13. 安全性分析
比特币白皮书包含了一个数学证明,表明拥有不到 50% 网络算力的攻击者,其成功概率随确认数增加而呈指数下降。
攻击模型
攻击者试图从过去的某个点创建一条替代链来逆转交易。他们必须赶上并超越诚实链。
数学公式(泊松分布)
攻击者从 z 个区块之后追赶的概率遵循泊松分布。设 q = 攻击者的算力份额,p = 诚实网络的算力份额(p + q = 1):
攻击成功概率
| 确认数 (z) | q=0.10 | q=0.20 | q=0.30 | q=0.40 | q=0.45 |
|---|---|---|---|---|---|
| 1 | 20.5% | 36.3% | 49.5% | 60.4% | 65.2% |
| 2 | 7.7% | 18.5% | 31.2% | 43.1% | 50.3% |
| 3 | 3.2% | 10.2% | 20.5% | 32.3% | 40.0% |
| 4 | 1.3% | 5.7% | 13.7% | 24.6% | 32.7% |
| 5 | 0.6% | 3.2% | 9.2% | 19.0% | 26.9% |
| 6 | 0.2% | 1.8% | 6.2% | 14.8% | 22.2% |
| 10 | 0.01% | 0.3% | 1.7% | 6.6% | 12.0% |
| 20 | 0.000006% | 0.008% | 0.08% | 1.1% | 3.5% |
| 50 | ~0 | ~0 | 0.0002% | 0.01% | 0.3% |
关键洞察
- 当 q < 50% 时,攻击者的概率随每次确认呈指数下降
- 即使 30% 的算力也不足以在 6 次确认后可靠地逆转交易
- 在 q = 10% 时,6 次确认只有 0.2% 的成功率 — 在实际用途中基本为零
- 攻击需要持续的努力(能源成本),因此即使成功的尝试也可能无利可图
📄 白皮书第 11 节:计算
14. 总结与参考文献
关键要点
- 比特币使用工作量证明和最长链规则解决了无中央权威的双重支付问题
- 交易使用 UTXO 模型 — 硬币作为未花费输出被追踪,而非账户余额
- 挖矿是寻找低于难度目标的哈希值的竞争过程
- 节点通过 gossip 协议通信 — 向对等节点广播交易和区块
- 分歧(分叉)通过最长链规则解决 — 累计 PoW 最多的链获胜
- 当找到有效的 PoW 且网络在其上构建时,区块被提交
- 交易选择由费率驱动 — 矿工挑选最有利可图的交易
- Merkle 树使得无需下载完整区块链即可高效验证交易(SPV)
- 安全性是概率性的 — 6 次确认是不可逆转性的标准
- 减半计划确保了 2100 万 BTC 的固定供应,将激励从补贴过渡到手续费