本章目标: 你能完整追踪一笔交易——从「点下发送」到「不可逆转」。你会真正理解内存池、手续费、区块、矿工分别在干什么,脑子里有一个足够具体的模型,可以推理比特币,而不是只能相信比特币。
1. 发送按钮
爱丽丝有 1 BTC,想转 0.5 BTC 给鲍勃。她打开钱包,填入鲍勃的地址,输入金额,选好手续费,按下发送。
几秒钟后,鲍勃的钱包显示一笔「未确认」的 incoming。大约十分钟后,显示「1 个确认」。一小时后,「6 个确认」——实际上已不可撤销。
本章讲的就是中间发生的事。我们一层层剥开。读完之后,你能在一张餐巾纸上把它画出来。
2. 没有余额这回事
先讲一个大多数人都会搞错的概念:
比特币不记账户余额。 任何地方都没有一行写着*「爱丽丝:1.00000000 BTC」*。账本不是这么记的。
账本记录的是交易,每笔交易会创造若干输出,输出可以被之后的花费。一笔未花费的输出(UTXO,unspent transaction output)才是唯一真实存在的东西。你所谓的「余额」,只是你的钱包能花的所有 UTXO 加在一起。
一个好用的心智模型:比特币更像现金,而不是银行账户。
你拿一张 5 元钞票在咖啡店买 4.5 元的东西,不会跟收银员说「从我的 5 元里扣掉 4.5」。你递过去一张完整的钞票,收银员找你 0.5 元——那是新的钞票。你钱包里装的东西,从此换了实物。
UTXO 的运作一模一样。爱丽丝的「1 BTC」可能是一个 1 BTC 的 UTXO,也可能是两个 0.5 BTC、一百个 0.01 BTC,或者任何组合。钱包替你把这些藏起来了,但链上没得选。
这听起来像个怪癖。实际上它是后面一切的地基。
3. 一笔交易的解剖
爱丽丝发给鲍勃的这笔交易有三个部分:
- 输入。 引用爱丽丝当前控制的 UTXO。每个输入的意思是「我花费的是那笔历史交易里的那个输出」。每个输入还带一个密码学签名——证明爱丽丝握有被授权花费该 UTXO 的私钥。
- 输出。 比特币要去哪。爱丽丝这里有两个输出:0.5 BTC 到鲍勃的地址,约 0.499 BTC 找零回她自己(找零去的是钱包自动生成的新地址)。
- 手续费。 输入减去输出后剩下的部分。它不是一个独立字段——就是你没有找回去的零头。矿工把它当作打包你这笔交易的报酬。
爱丽丝的例子里:输入合计 1.0 BTC,输出合计 0.999 BTC,凭空消失的 0.001 BTC 就是手续费。
爱丽丝的 1.0 BTC UTXO 被整笔消耗,产生两个新 UTXO;输入与输出的差额 0.001 BTC 归矿工。
然后交易被签名——爱丽丝的钱包用她的私钥生成签名,证明她有权花掉这些特定输入。签名不会泄露私钥:任何人都能验证它,但只有爱丽丝造得出来。
广播到网络上的,是大约 250 字节的数据:输入、输出、签名、元数据。就这些。整笔交易的字节数还没一张缩略图大。
4. 内存池——候客厅
爱丽丝的钱包把交易广播出去后,先到达钱包连接的某个节点,节点转发给自己的对等节点,对等节点再继续转发。几秒之内,比特币网络的每个节点都听说了这笔交易,把它放进本地的内存池(mempool,memory pool 的缩写)——等待被打包的有效交易队列。
几个要点:
- 内存池不是全球唯一的一份数据。 每个节点都有自己的一份,几乎一样但不完全同步——东京的节点和圣保罗的节点可能有几秒钟的差异,最终会收敛。
- 内存池里的交易有效但未确认。 每个节点都已经查过:签名有效、要花的 UTXO 真实存在且未花过、账目对得上。任何一项不过关,交易直接丢弃。
- 内存池按费率排序。 矿工想让每个区块的收益最大化,所以优先挑手续费高的交易。你的手续费决定你排在队伍哪个位置。
5. 挖矿:一个区块到底是怎么出来的
矿工就是一台跑着专用软件的计算机,同时干两件事:
- 组装候选区块。 从自己的内存池里挑出收益最大的一组交易,加上一笔给自己发工资的 coinbase 交易(区块奖励 + 累积的手续费),再构造一个区块头。
- 用不同的随机数反复哈希区块头。 「随机数」(nonce)就是一个数——区块头里一个可以随便填值的槽位。矿工每秒试数万亿次,寻找一个低于当前目标值的哈希输出。
某个矿工找到有效随机数后,把区块广播出去。每个节点:
- 收到区块
- 验证哈希确实低于目标
- 验证区块里的每一笔交易
- 把区块接到自己那条链上
- 把这些交易从自己的内存池里移除
- 在新区块之上继续挖
这整条瀑布——从「矿工找到随机数」到「地球上每个节点都拿到区块」——只要几秒钟。区块落地了,爱丽丝的交易就在里面,鲍勃的钱包显示「1 个确认」。
6. 难度:自动调节的时钟
比特币的目标出块时间是 10 分钟。不是 10 分钟有什么神奇,而是中本聪选的折中:长到区块来得及传播到全网,短到确认不用等太久。
但全网算力时刻在变。算力翻倍,区块会变成 5 分钟一个;算力减半,变成 20 分钟一个。
为了守住约 10 分钟的平均出块节奏,协议每 2016 个区块(约两周)调整一次难度:前 2016 个区块如果不到两周就挖完了,难度上调;超过了两周,下调。调整是精确的——按实际时间与期望时间的比值缩放。
这是比特币里最漂亮的机制设计之一。没有任何人来设定难度。 没有委员会开会「加息」。网络对自己的状况自动响应,每两周一次,永远如此。
7. 区块头与默克尔树
一个比特币区块分两部分:一个小小的区块头(80 字节)和一个装着全部交易的区块体(目前平均约 1.5 MB)。
区块头信息密度很高,包含:
- 版本 —— 软件版本位
- 父区块哈希 —— 把本块和上一个块连起来
- 默克尔根 —— 一个 32 字节的哈希,概括了区块体里每一笔交易
- 时间戳 —— 矿工构造它的时间
- 难度目标 —— 随机数必须打败的哈希门槛
- 随机数 —— 矿工找到的那个数
巧妙之处在默克尔根。它是一棵二叉树的根:交易两两一组哈希,得到一组哈希,再两两组哈希,一层层向上,最后只剩一个值。这个值依赖于区块里的每一笔交易——改动任何一笔交易,默克尔根就变,区块哈希就变,链条就断。
这有什么用?因为一个只拿到 80 字节区块头的人,等于持有全部交易内容的密码学承诺,而不必下载它们。轻钱包(SPV)就是靠这个成立的:验证某笔交易在某个区块里,只需要下载默克尔路径——一小把哈希——而不是整个区块。
默克尔树属于那种第一次见觉得「杀鸡用牛刀」、第一百次见才明白「刀正好那么大」的设计。
8. 确认数:为什么我们要等
爱丽丝的交易进了第 N 个区块,鲍勃的钱包显示「1 个确认」。
为什么要等更多?因为在概率性的网络里,没有什么是「真正最终」的——只有越来越最终。
想象一个想撤销爱丽丝付款的攻击者。他必须:
- 从爱丽丝交易之前的那个区块开始,分叉出一条替代链
- 让这条替代链的挖矿速度超过全世界其他人在真链上的速度
- 最后广播自己更长的链,让所有诚实节点倒戈
一个区块,如果攻击者恰好握有足够算力再碰上一次好运气,办得到。连续六个区块呢?几乎不可能。
假设攻击者控制了全网 30% 的算力,粗略概率如下:
| 确认数 | 成功逆转的概率 |
|---|---|
| 1 | 约 17.5% |
| 2 | 约 4.4% |
| 3 | 约 1.2% |
| 4 | 约 0.3% |
| 5 | 约 0.1% |
| 6 | 约 0.025% |
这就是为什么「6 个确认」(约一小时)是约定俗成的「已结算」门槛。金额特别大可以多等一会儿;买杯咖啡,1 个确认绰绰有余。交易所通常要求 6 个。
交易埋得越深,撤销它的成本越天文数字。到 12 个确认,你得在整整两小时内持续跑赢全球总算力。那不叫「难」,那叫「十六年没发生过」。
9. 链(以及重组)
每个区块头都包含上一个区块的哈希。这就是它是链而不只是一串的原因:改动任何区块,它的哈希就变,下一个区块里记的「父哈希」就对不上,所有节点都会拒绝这个改动。
想实质性地篡改老历史,你得从目标区块开始向后重建每一个区块——按现代算力算,这大致相当于一个小国的能源预算,还得从链诞生起持续供应到今天。往回看得越远,代价按几何级数增长。
有时候网络会对「哪个块先出现」产生短暂分歧——两个矿工几乎同时挖出有效区块,网络的不同部分先看到不同的那个。这叫重组(reorg)。它一般在一两个区块内自行解决:谁先在新块上接出下一个有效块,谁赢,落败的那个成为「孤块」,只在孤块里的交易回到内存池重新排队。
1–2 个区块的重组每年发生几次。超过 2 个的极其罕见。比特币历史上最深的意外重组是 4 个区块,发生在 2010 年,此后再没有过。
10. 验证,而非信任
这一切你不必听任何人转述。你可以运行一个全节点——它下载整条链(目前约 600 GB),从创世区块开始验证每一笔交易,并永远验证下去。
全节点验证:
- 每笔交易的每个签名
- 每个 UTXO 引用(这个输出真实存在吗?没花过吗?花钱的人有权花吗?)
- 每个区块头(哈希低于目标了吗?)
- 每条共识规则(不许双花、不许凭空造币、不许违规)
如果有矿工产出了无效区块——比如给自己的奖励超出时间表——地球上每一个全节点都会拒绝它,矿工的算力白烧,区块永远进不了链。
这才是「无需信任」的准确含义。不是玄学意义上的「没人管」,而是「每个参与者都能独立验证每一条规则」。你不信任矿工,不信任开发者,甚至不用信任写这本书的人。你运行软件,软件告诉你什么是真的。
一台笔记本电脑能跑全节点,一块树莓派也能。不需要任何人批准,只需要软件和硬盘。第 6 章,你会亲手跑起来。
划重点: 本章记住三件事,其余都是细节。**一:**没有余额,只有 UTXO。**二:**挖矿是时钟加安全预算。**三:**链可以被任何有电脑的人端到端验证。下一章,你从「读比特币」进入「拥有比特币」。