摘要:比特币没有「账户余额」,只有未花费输出 UTXO。本文用 Blockstream 浏览器上的真实交易,逐项看输入、输出、找零和手续费怎么对应,以及地址页的已花费/未花费记录怎么读。

比特币没有「账户余额」这个字段。链上记录的是一个个 UTXO(Unspent Transaction Output,未花费的交易输出),钱包显示的余额,是它能控制的所有 UTXO 金额之和。和以太坊、BNB Chain 的账户模型相比,UTXO 更像是「一张张面额不同的钞票」:花的时候整张拿出去,多出来的部分再找零给自己。本文只讲机制,用区块浏览器上一笔真实交易把输入、输出、找零和手续费逐项对上。

UTXO 模型三句话

  1. 每笔交易都消耗旧输出、创建新输出。输入(input)引用之前某笔交易的某个输出(写成 txid:序号),输出(output)则规定新的金额和锁定条件(通常就是收款地址)。
  2. 一个输出只能被完整花掉一次。不能只花一部分,所以金额大于付款额时,要把差额作为新输出转回自己控制的地址,这就是「找零」。
  3. 手续费不单独写。手续费 = 所有输入金额之和 − 所有输出金额之和,差额由矿工拿走。

Bitcoin Developer 文档里的配图(见图4)表达的就是这层关系:每个输入花掉一个之前的输出;每个输出在被后来的输入花掉之前,都是一个 UTXO。

实例:一笔 1 输入、2 输出的交易

下面用 Blockstream Explorer 打开交易 6505fbb8…6a4af8(2026-09-26 12:55 UTC+8 确认)。说明一下:mempool.space 是常用的比特币浏览器,但我们截图时所在网络无法访问它,因此换用 Blockstream;两者读取的是同一条链,字段含义相同,你用 mempool.space 查同一个哈希会看到一样的输入输出。

比特币 UTXO 模型是什么:看懂一笔交易的输入、输出与找零-程序旅途
图1:交易概要:Size 225 B、Virtual Size 144 vB、Weight 573 WU;手续费 0.00000173 BTC(1.21 sat/vB);隐私分析提示 Address reuse、Round payment amount、Mixed script types(界面为英文)

点「Details」展开输入和输出:

比特币 UTXO 模型是什么:看懂一笔交易的输入、输出与找零-程序旅途
图2:左侧是输入:引用上一笔交易的输出 000f941a…ff2fb:1,金额 0.02096261 BTC,来自 bc1qh84v…9lh7s8;右侧两个输出:#0 0.00035000 BTC 给 17jtZ2KV…TEXZQ8zr(P2PKH),#1 0.02061088 BTC 回到 bc1qh84v…9lh7s8(V0_P2WPKH)

把数字对一下(1 BTC = 100,000,000 sat):

项目 金额(sat) 说明
输入 #0 2,096,261 花掉的是之前一笔交易的第 1 号输出
输出 #0 35,000 付款:给一个以 1 开头的传统地址
输出 #1 2,061,088 找零:回到与输入相同的地址
手续费 173 = 2,096,261 − 35,000 − 2,061,088

费率 = 手续费 ÷ 虚拟大小 = 173 ÷ 144 ≈ 1.2 sat/vB,与页面显示的 1.21 sat/vB 一致。注意比特币手续费按交易的字节大小(vB)计价,与金额大小无关:输入越多、交易越大,费用越高。

怎么判断哪个输出是找零

协议层面并没有「找零」标记,所有输出都是平等的。浏览器和分析工具只能靠启发式推断,Blockstream 的「Privacy Analysis」就列出了这笔交易命中的三条:

  • Address reuse(地址复用):输出 #1 回到了与输入完全相同的地址,几乎可以确定是找零。这也是隐私最差的做法,现代钱包默认会为找零生成新地址。
  • Round payment amount(整数付款额):35,000 sat 是整数,更像付款;2,061,088 这种零碎数更像找零。
  • Mixed script types(脚本类型混用):输入是 P2WPKH(bc1q 开头),付款输出是 P2PKH(1 开头);找零通常沿用发送方自己的类型。

这些都只是概率判断。如果钱包把找零发到新的 bc1q 地址、金额也不整,外人就很难分辨。自己核对时,最可靠的办法是看输出地址是否属于你钱包的地址列表。

「余额」其实是 UTXO 之和:看地址页

比特币 UTXO 模型是什么:看懂一笔交易的输入、输出与找零-程序旅途
图3:地址页统计:Confirmed Received 49.06144963 BTC(179 outputs)、Confirmed Spent 47.80728129 BTC(174 outputs)、Confirmed Unspent 1.25416834 BTC(5 outputs),数值为截图时刻

地址页把账算得很直白:收到过 179 个输出,其中 174 个已经被后续交易花掉,剩下 5 个未花费,合计就是当前余额。这 5 个 UTXO 就是该地址目前可以作为输入的「钞票」。

这也解释了几个常见现象:

  • 小额 UTXO 太多,转账手续费就高。钱包要把很多个输入塞进一笔交易,字节数变大。费率低的时候合并一次小额 UTXO(自己转给自己),可以降低以后花费的成本。
  • 交易所充值地址收到的每笔充值都是一个独立 UTXO。交易所后台会定期归集,所以你在浏览器上会看到你的充值被「花掉」,这是正常的。
  • 确认数:包含交易的区块之后每多出一个区块,确认数加一。交易所入账要求的确认数各不相同,排查方法见 欧易充值不到账怎么办:确认数、TxID与自助排查。

对照官方开发者文档

比特币 UTXO 模型是什么:看懂一笔交易的输入、输出与找零-程序旅途
图4:Bitcoin Developer 文档「Transactions」:每个输入花掉之前的一个输出,每个输出在被花掉前都是一个 UTXO(界面为英文)

文档原文还有一句很好懂的话:钱包说你有 10,000 satoshi 余额,实际意思是有 10,000 satoshi 躺在一个或多个 UTXO 里。输入里真正决定能不能花的是解锁脚本(签名等见证数据),输出里写的是锁定脚本,图2里的 WITNESS、SCRIPTPUBKEY 字段就是它们。

UTXO 与账户模型的差别

对比项 比特币(UTXO) 以太坊 / BNB Chain(账户)
余额记录 未花费输出的集合,余额 = 求和 每个地址一个余额字段
防重放 每个输出只能花一次 每个账户递增的 Nonce
手续费 输入和 − 输出和,按 vB 计价 Gas 用量 × 单价,见 EIP-1559
找零 需要,钱包自动生成找零输出 不需要,直接扣减余额

以太坊那一边的计费细节,可以对照阅读 以太坊 Gas 费怎么算:Base Fee、Priority Fee 与 EIP-1559 字段对照。如果你更关心比特币的链上数据怎么看,也可以看 比特币链上成本基础怎么看(只讲指标含义)。

自己动手核对一笔交易的步骤

  1. 从钱包或交易所提现记录里复制 TxID(交易哈希)。
  2. 打开 Blockstream 或 mempool.space,粘贴到搜索框。
  3. 看确认数和确认时间;未确认的话先看费率(sat/vB),和当前内存池的费率档位比一比。
  4. 点 Details 展开,逐个核对:输入是否来自你的地址、付款输出的地址和金额是否正确、找零是否回到你的钱包。
  5. 用「输入和 − 输出和」验算手续费。

相关阅读

说明:文中交易、地址和费率均为 2026-09-26 截图时的链上数据,引用的是公开区块链记录,与地址所有者无关。比特币手续费随内存池拥堵实时变化,以你发交易时钱包显示为准。本文不构成任何投资建议。