本章目标: 大多数新手把比特币钱包想象成银行账户:一个上下浮动的余额。比特币不是这么运作的。读完你会明白 UTXO 是什么、为什么「你的余额」是每次打开钱包时从头算出来的,以及为什么比特币里几乎每一个隐私泄露都能追溯到 UTXO 的连接方式。
1. 心智模型的替换
有人说「我有 0.3 BTC」,听起来就像数据库里有一行写着他的名字和数字 0.3。比特币没有这样的行。
比特币有的是 UTXO——未花费交易输出(Unspent Transaction Output)。离散的比特币碎块,每一块被一段特定脚本锁住,散落在区块链各处。当你的钱包说你有 0.3 BTC 时,它真正的意思是:「我们找到了 17 个你能花的 UTXO,加起来是 0.3 BTC。」
看清这一点就再也回不去了。找零问题、隐私泄露、手续费算术、粉尘问题——全都是 UTXO 的下游。
2. UTXO 到底是什么
一个 UTXO 有三个组成部分:
- 一个面值。 多少比特币,以聪计(1 BTC = 100,000,000 聪)。
- 一段锁定脚本。 定义谁能花它的小程序。最常见的脚本意思是「谁能提供与这把公钥哈希匹配的签名,谁就能花」。
- 一份出处。 它来自哪笔交易、那笔交易的第几个输出。
结构就这么多。UTXO 就是一段脚本把守的一个面值。有人要花它,就得证明自己能满足脚本(通常靠签名),然后这个 UTXO 被消耗掉。
区块链不存「余额」,存的是一整套 UTXO。你的节点靠检查「哪些 UTXO 你的钱包能解锁」来算出你的余额。
3. 花费:输入进,输出出
一笔比特币交易有两面:
- 输入: 被消耗的 UTXO(整笔花掉)。
- 输出: 新创造出来的 UTXO。
关键在这:UTXO 是整笔消耗的。 你不能花掉一个 UTXO 的一半。爱丽丝有一个 1.0 BTC 的 UTXO,想给鲍勃 0.5 BTC,她就得花掉整个 1.0 BTC 的 UTXO。这笔交易创造两个新 UTXO:0.5 BTC 给鲍勃,约 0.499 BTC(扣掉手续费)找零回爱丽丝。
1.0 BTC 的 UTXO 整笔消耗,产生两个新 UTXO;差额 0.001 BTC 归矿工。
第二个 UTXO 就是找零。它是你自己的钱,装进一个新碎块退回给你。
机制上和拿 20 元钞票买 4 元咖啡一模一样。你不会把 20 元撕成两半,你递出整张票子,找回 16 元。比特币交易就是这么运作的。
4. 找零地址问题
钱包造找零时面临选择:把找零送回你刚才花币的同一个地址,还是送回一个你同样控制的新地址。
几乎所有现代钱包都选新地址。为什么?隐私。
如果找零永远回到原地址,任何盯着区块链的人都能轻松把你做过的每笔交易串起来。每次换新找零地址,钱包就切断了这条便捷的连线。
但这带来另一个问题:地址复用从此成为强指纹。 一旦你复用地址,观察者能看到流向它的所有 UTXO,并能断言「这些都归同一个人」。比特币大多数隐私泄露都始于地址复用。
(链上分析公司如何利用这一点,见地址聚类。)
5. 你的「余额」是一个求和
钱包的「余额」是算出来的,不是存出来的。打开钱包时:
- 钱包从种子沿派生路径推出它能控制的所有地址。
- 钱包(或它背后的节点)扫描 UTXO 集,找出锁在这些地址上的输出。
- 钱包把它们的面值求和。
这个和就是你的余额。没有任何数据库里存着「用户 X 有 0.3 BTC」。存在的只是 17 个 UTXO,每一个都被你的钱包能解锁的脚本锁着,面值总和 0.3 BTC。
这有实际后果。如果你的 0.3 BTC 是一个 0.3 BTC 的 UTXO,转 0.1 BTC 很轻松:一个输入、两个输出、小交易、低手续费。但如果你的 0.3 BTC 是 300 个 0.001 BTC 的 UTXO,转 0.1 BTC 就要消耗其中 100 个做输入——交易大得多,手续费高得多。
你的 UTXO 集的形状和总额一样重要。
6. 硬币挑选
选哪些 UTXO 去花,叫硬币选择(coin selection)。这是个多目标优化问题,目标之间互相拉扯:
- 手续费最小。 输入越少越小,交易越小。
- 找零合理。 造出的找零要可用,别造出粉尘。
- 保住隐私。 不该连起来的 UTXO 别连起来。
- 管理 UTXO 集规模。 别让钱包塞满碎渣。
Bitcoin Core 的主选币算法叫分支定界(Branch and Bound),找不到精确解时回退到背包算法(Knapsack)。其他钱包用更简单的启发式(「从大到小」「从小到大」「随机」)。
大多数用户从不想硬币选择这件事。大多数用户大概应该想想。(哪些钱包把硬币控制暴露给你,见硬币控制。)
7. 全球 UTXO 集
截至 2026 年,比特币全网 UTXO 集大约有 8500 万到 1.1 亿个 UTXO,总面值略低于 2000 万 BTC。
这份集合存在于每个全节点上(按配置不同,放在内存、磁盘或缓存里)。收到一笔交易时,节点要验证每个输入都指向一个真实存在的、未花费的 UTXO。这个检查必须快——所以节点在 UTXO 集上做了重度优化。
UTXO 集的大小是承重的性能指标。每个新启动的节点都要下载并验证足够的链历史来重建它。制造大量小 UTXO 的垃圾交易(粉尘攻击、铭文密集交易)会把集合撑大,把成本永久地摊到每个节点运营者头上。
这就是为什么「小额交易免费」不成立。哪怕手续费极低的一笔交易,也在 UTXO 集上留下永久成本,由每个节点运营者用存储和验证工作来偿付。
8. 隐私:UTXO 是相连的
一笔交易一旦有多个输入,你就公开宣告了「这些输入归同一个实体」。这叫输入聚类,是链上分析公司手里最锋利的一件武器。
周一你收到 UTXO A,周二从另一个来源收到 UTXO B,它们「同一主人」这件事只有你知道——世界并不知道。但你把它们放进同一笔交易花掉的那一刻,这个关联就永久公开了。
这就是硬币控制重要的原因,也是 CoinJoin 和 PayJoin 存在的原因——刻意制造「哪些 UTXO 属于谁」的模糊性。
一条实用经验:你往交易里每加一个输入,就多签发一份「共同所有权」的公开声明。不同来源的 UTXO,只有在你已经接受「这些来源从此公开挂钩」时才合并。
9. 粉尘:花它比它值钱还贵
交易手续费有地板:UTXO 越小,花它时手续费占面值的比例越高。到某个点,手续费超过面值本身。
Bitcoin Core 定义了粉尘限额——典型的 P2WPKH 输出目前约 546 聪——低于它的输出,网络连中继都不会中继。理由是:花起来比面值还贵的 UTXO,是每个节点 UTXO 集里永久浪费的空间。
粉尘攻击就是利用这一点:攻击者往大量想去匿名化的地址发送略高于粉尘限额的小 UTXO。受害者一旦不小心把它和其他 UTXO 一起花掉,攻击者就通过上面的输入聚类确认了「这些 UTXO 同属一人」。
防御方法:永远不要把粉尘扫进主钱包。谨慎版操作见粉尘清扫。
10. 这套设计买来了什么
UTXO 模型是比特币最被低估的设计之一。对比账户制系统(以太坊、多数银行),UTXO:
- 可无状态验证。 每笔交易可以独立、乱序验证。不需要「最新版的全局状态」来判断一笔交易是否有效。
- 可并行。 触碰不同 UTXO 的两笔交易可以不加协调地并行验证。
- 可审计。 任意区块高度的总供应量 = 该高度所有 UTXO 的面值和。不需要「所有账户余额加总」式的体操。
- 隐私可塑。 一人多 UTXO 正是 CoinJoin、PayJoin 这类技术的原料。账户制系统没有这个选项。
代价是心智模型。账户余额对新手更好解释;UTXO 对扩容和审计更好解释。
比特币选择了可审计与可扩展。现在你知道为什么了。
划重点: 调试一笔卡住或贵得离谱的交易时,第一个问题永远是「你的钱包用了多少个 UTXO 造的它?」比特币手续费的大多数意外,都能追溯到硬币选择。