比特币的 UTXO 是什么?为什么和银行账户不一样

读到这里你大概以为 BTC 像银行账户一样有"余额"。实际上比特币没有余额这个概念——它用一种叫 UTXO 的模型记录资产。这一课用最朴素的例子讲清楚 UTXO 是什么、它为什么这么设计。学习的同时可以打开 币安官网 看一笔 BTC 交易的链上详情;下载 币安官方APP 设个小额转账感受一下;iPhone 用户先看 iOS安装教程

银行账户怎么记账

银行用"账户余额"记账:

  • 张三有 1000 元
  • 李四有 500 元
  • 张三转 200 给李四
  • 张三 800,李四 700

数据库里只存"账户ID + 当前余额"两栏,每次转账加加减减。

BTC 怎么记账

BTC 不存"余额"。它存"未花费输出"(Unspent Transaction Output,简称 UTXO)。

类比一下:你的钱包里不是一个数字 1000,而是一堆面值不同的"硬币":

  • 一个面值 500 的 UTXO
  • 一个面值 300 的 UTXO
  • 一个面值 200 的 UTXO

加起来 1000,但它们是分开的"硬币"。

一笔 UTXO 转账怎么发生

假设你要转 700 给李四,你有上面三个 UTXO:

第一种思路:用 500 + 300 = 800

  • 输出 700 给李四
  • 输出 100 给自己(找零)

第二种思路:用 500 + 200 = 700

  • 输出 700 给李四
  • 没有找零

第三种思路:用 300 + 500 = 800(顺序不同但结果同第一种)

UTXO 模型下,每一笔转账都会消耗你某些 UTXO,产生新的 UTXO。被消耗的 UTXO 进入"已花费"状态,再也不能用。

你的"BTC 余额"其实是什么

钱包 APP 显示的余额是所有属于你的 UTXO 之和。底层数据是几十几百个独立的 UTXO,UI 帮你加了起来。

为什么这么设计

UTXO 模型有几个优点:

第一,容易并行验证。每个 UTXO 是独立的,节点可以并行检查多笔交易,不用全局锁定。

第二,隐私性更好。每次找零会换一个新地址,让链上分析者难以追踪你的整体资产。

第三,简单。没有"账户状态"这个全局概念,节点只要维护"哪些 UTXO 还没被花"。

第四,容错性强。即便某一笔交易失败,不影响其他 UTXO。

缺点是什么

第一,不直观。普通人理解"余额"比理解"一堆硬币"容易。

第二,复杂逻辑难写。BTC 不能轻松实现"如果 A 满足条件就转给 B"这种合约逻辑。

第三,发起交易要凑数。如果你的 UTXO 都是小额,要凑出大额交易就需要把很多 UTXO 合并,交易费用高。

ETH 等链就用了"账户模型"(类似银行余额),适合智能合约但不如 UTXO 简单可靠。

一个真实例子

打开任何一个区块链浏览器(mempool.space、blockchain.com 等),找一笔 BTC 交易,你会看到:

  • Inputs(输入):来自哪几个 UTXO
  • Outputs(输出):产生哪几个 UTXO

差额(Inputs - Outputs)就是矿工的手续费。

每一笔转账都是 UTXO 在被消耗和创造。整个比特币账本就是一棵巨大的"UTXO 流转图"。

找零是什么

如果你有一个 1.0 BTC 的 UTXO,要转 0.3 给别人,会发生:

  • 输入:1.0 BTC UTXO
  • 输出 1:0.3 BTC 给收款人
  • 输出 2:约 0.6999 BTC 给你自己(找零,扣掉手续费)

找零地址通常是一个新地址,由钱包 APP 自动生成。这是为什么有些人觉得"我钱包地址越来越多"。

新人常犯的错误:以为给别人转账的"剩下"会自动留在原来的地址。实际上原来的 UTXO 已经被花掉,找零生成在新地址里

钱包怎么帮你管理 UTXO

钱包 APP 在背后自动做这些:

  • 监听所有属于你的地址
  • 把每个地址的 UTXO 累加成"总余额"
  • 转账时自动选择哪些 UTXO 来用(一般选最少的、能凑够的)
  • 自动生成找零地址
  • 提交交易到网络

你看到的"输入收款地址 + 输入金额 + 点确认"是 UI 简化层,底层全是 UTXO 操作。

UTXO 与币安账户的关系

币安账户里的 BTC 不是 UTXO——它是币安数据库里的一行记录,类似银行账户。当你提币到链上时,币安从它的冷热钱包里拿出 UTXO 给你。

这意味着:

  • 在币安内部转账:秒到(数据库改一行)
  • 提币到链上:要等链上确认(创建实际 UTXO)
  • 充值到币安:链上 UTXO 到账后币安数据库才入账

理解这个差别,能帮你看懂为什么有时充提币要等。

一份"UTXO 思维练习"

每次你做一笔 BTC 转账,问自己:

  • 我用了哪几个 UTXO 作为输入?
  • 我创造了哪几个 UTXO 作为输出?
  • 找零进了哪个地址?
  • 矿工手续费多少?

练习几次之后,UTXO 就不再是抽象概念。

常见疑问

Q:UTXO 一定是 BTC 的吗? A:BTC 是 UTXO 的代表。LTC、BCH、Doge 等也是 UTXO 模型。ETH、SOL、ADA 等不是。

Q:UTXO 越多越好吗? A:不一定。UTXO 太多反而让转账时的手续费变高(要打包多个输入)。

Q:能合并多个小 UTXO 吗? A:可以。把它们一次性转给自己即可合并成一个大 UTXO。

Q:UTXO 会过期吗? A:不会。UTXO 永远有效,直到被花掉。

Q:UTXO 可以分割吗? A:可以。任何一笔转账都可以把一个 UTXO 拆成多个输出。

延伸阅读

  • 想理解 ETH 的账户模型:去看 ETH知识 分类
  • 想看链上浏览器的用法:去看 区块链基础 分类
  • 想理解 BTC 找零地址的隐私意义:去看 风险管理 分类