词条 · 加密与分布式 · 核心
UTXO / 未花费交易输出
账本里没有余额这一栏,只有一堆还没被花掉的收据。
也称:UTXO、未花费交易输出、未花费输出、UTXO 集合、UTXO set、unspent transaction output、unspent output
一句话
比特币的账本里没有”余额”这一栏。它只有一长串还没被花掉的输出——每一个都像一张写明了金额和收款人的收据。钱包显示的那个数字,是把散落在链上、你有权动用的所有收据加起来算出来的。
为什么要这么绕
直觉上更简单的做法是账户模型:给每个人记一个数字,转账就是一边减一边加。银行就是这么干的。
UTXO 模型换了个思路:钱不是一个数字,而是一批有明确出处的收据。花钱的动作是——引用若干张旧收据当输入,写出若干张新收据当输出。旧的当场作废,新的开始生效。
这么绕换来三样东西:
- 可追溯。 每一枚币都能顺着输入一路回溯,最终落到某个区块里创造它的那笔交易。所有权是一条链,不是一个余额快照。
- 验证便宜。 判断一笔交易合不合法,只要问”它引用的那些输出,现在还在未花费的集合里吗”。不需要重放整个账本的历史。
- 天然并行。 两笔交易只要引用的输出互不重叠,就可以同时验证,彼此无关。而账户模型下同一个账户的并发转账必须排队。
双重支付在这个模型里有了非常干脆的定义:同一张收据被两笔交易同时引用。
术语考古:白皮书里没有”UTXO”这个词
关键事实:UTXO 这个缩写在比特币白皮书原文中出现 0 次。
白皮书通篇只讲 inputs(输入)和 outputs(输出)。第 9 节的原话是:
Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender.
这里有规则,有输入输出,但没有给”当前所有未花费输出构成的那个集合”起名字。UTXO 以及 UTXO set 是后来的实现者与社区从这套规则里抽出来的抽象——中本聪写的是交易怎么构造,UTXO 是后人给这套规则所产生的状态取的名。
这种”概念在、名字不在”的情形在比特币术语里是常态,不是例外。币基交易、51% 攻击、女巫攻击都属于同一类:先有机制,后有名词。读白皮书时把这两层分开,能省掉很多误会。
边界与常见误解
“钱包里有钱”是个比喻。 钱包里存的是私钥。钱在链上,形态是一堆你有能力签名花掉的输出。备份钱包备份的是签名的权力,不是钱本身。
一张收据不能只花一半。 手上一张 1 BTC 的输出,要付给别人 0.3,必须把整张作废,然后造出两个新输出:0.3 给对方,剩下的扣掉手续费退回自己。这就是找零的来由,也是为什么区块链上的交易数量远多于”人们实际付款的次数”。
UTXO 集合是状态,链才是历史。 节点为了快速验证会在本地维护一份当前的未花费输出集合,但这份集合随时可以从整条链重新算出来。它是缓存,不是账本。
提到这个词条的文章
- 比特币白皮书逐节拆解经典拆解 2026-07-31