UTXO与账户模型对比:余额、找零和并发

 / 
4

UTXO 和账户模型最直观的区别,在你打开钱包看余额的那一刻就已经存在了。比特币钱包显示的"余额"不是链上某个地方存着的一个数字,而是钱包把你名下所有还没花掉的 UTXO 加总后算出来的。以太坊钱包显示的余额,则是链上账户状态里一个叫 balance 的字段,直接读出来就是那个数。找零和并发的问题,都从这个根本差异里长出来。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

余额:加总出来的,还是存着的

在 UTXO 模型里,没有"账户余额"这个链上实体。你收到一笔比特币,链上生成的是一个指向你地址的输出,金额是这笔转账的数。你再收到一笔,又生成一个独立的输出。钱包做的事情是扫描链上所有输出,找出那些"归属你的地址且尚未被任何交易花掉"的,把它们加起来显示给你看。所以你的"余额"是钱包替你算的一个视图,链上并不存在一个叫"你的账户"的东西存着这个总数。

账户模型反过来。以太坊的每个外部账户有四个字段:nonce、balance、storageRoot、codeHash。你转账时,系统直接在你的 balance 上减,在对方的 balance 上加。余额是一个被维护的状态,不是一个被推导出来的总和。这种设计对用户更接近银行账户的直觉,也更容易和现有金融系统的账务逻辑对接。

找零:UTXO 的日常,账户模型里不存在

UTXO 的找零不是"系统自动处理",而是交易构造时必须显式创建的一个输出。假设你有一个 1 BTC 的 UTXO,要付 0.1 BTC 给商家。交易会消耗这个 1 BTC 的输入,生成两个输出:一个 0.1 BTC 给商家,另一个 0.9 BTC 的找零输出回到你自己的地址(通常是新地址)。输入总额减去输出总额的差额,就是矿工费。如果你忘了创建找零输出,那 0.9 BTC 就全部变成手续费了——这不是系统会替你兜底的事情。

账户模型里没有找零这个概念。你从余额 1 ETH 的账户转 0.1 ETH,合约或协议直接扣 0.1,余额变成 0.9。不存在"先花掉整个账户再退回来"的步骤。这也是为什么很多从以太坊转到比特币的用户第一次手动构造交易时会感到不习惯:你得自己选输入、自己算找零、自己决定找零地址。

找零地址的选择还有一个隐私层面的考虑。如果你每次都用同一个地址接收找零,链上分析可以很容易地把你的交易串起来。用新地址接收找零是比特币钱包的常见做法,目的是切断输入和找零之间的地址关联。账户模型不存在这个问题,因为你的所有活动本来就绑定在同一个地址上,隐私保护靠的是混币器或隐私协议,不是地址更换。

并发:UTXO 的独立性和账户模型的 nonce 锁

UTXO 在并发处理上的优势来自它的"碎片"本质。每一笔交易消耗的是特定的、被引用的输出。只要两笔交易不试图花同一个 UTXO,它们就可以被独立验证,不需要互相等待。矿工或验证节点可以并行检查多个交易的输入是否存在、签名是否有效、金额是否足够,因为每个输入的状态是自包含的。

账户模型的并发困难来自共享状态。以太坊用 nonce 来管理这个问题:每个外部账户有一个交易计数器,从该账户发出的每一笔交易必须携带当前 nonce 值,执行后 nonce 加一。这意味着同一个账户的交易天然是串行的——你不能同时发两笔 nonce 相同的交易,因为它们会冲突。如果你先发了一笔低 gas 的交易卡在内存池里,后续 nonce 更高的交易也无法被确认,直到那笔卡住的交易被处理或替换。这种设计防止了重放攻击,但也给同一账户的高频操作带来了排队效应。

不过,账户模型的并发限制只针对同一个账户。不同账户之间的交易是可以并行的,因为它们的 nonce 和 balance 是独立的。UTXO 的并发优势则体现在同一用户或同一批交易内部的多个独立输出上。两者的并发瓶颈不在同一个维度上,直接说"UTXO 比账户模型更并发"是不够准确的。

一个容易被忽略的代价:手续费和碎片化

UTXO 模型的手续费不只看金额,更看数据体积。每个输入都需要签名,输入越多,交易越大,手续费越高。如果你有很多小额 UTXO(比如频繁收到小额转账后积累的"尘埃"),想转一笔大额时,钱包需要把这些小 UTXO 都作为输入打包进来,交易体积膨胀,手续费可能远高于你的预期。这就是碎片化问题。

账户模型的手续费通常按计算复杂度(gas)计算,和你"账户里有多少笔历史收款"无关。你的余额就是一个数字,转多转少,基础成本不会有数量级差异。从用户体验看,账户模型在这一点上更可预测。

给你的判断

如果你在写钱包或做链上工具,需要处理比特币,你必须把 UTXO 的选择、找零的构造、手续费的计算作为核心逻辑来对待。"余额"在你的系统里应该是一个派生值,而不是一个存储值。每次需要展示或判断可用资金时,都应该从当前 UTXO 集合重新计算,或者在本地维护一个可靠的 UTXO 缓存并处理链上重组。

如果你在以太坊或 EVM 链上开发,账户模型帮你省掉了找零和输入选择的麻烦,但你要认真对待 nonce 管理。批量交易、替换卡住的交易、并发发送,都需要围绕 nonce 的单调递增来设计。不要假设两笔交易可以"同时"从同一个账户发出并都被接受。

如果你只是普通用户,理解这个区别的实际意义在于:比特币转账时看到的手续费波动,很多时候和"你收了多少钱"无关,和"你收到了多少笔、每笔多大"有关。定期合并小额 UTXO 可以降低未来转账的成本,但合并本身也要付手续费,时机需要自己权衡。以太坊用户则不需要操心这些,但发交易时如果 nonce 出错,交易会卡住,需要知道怎么用相同 nonce 加 gas 来替换。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

参考资料

  1. Gate.com·什么是未花费交易输出(UTXO)| 比特币UTXO模型详解,页面发布或更新日期:2026-01-06;核查日期:2026-10-21。
  2. Gate.com·UTXO:全面剖析未花費交易輸出,页面发布或更新日期:2026-01-30;核查日期:2026-10-21。
  3. Ethereum.org·Contas na Ethereum,页面发布或更新日期:页面未标明更新日期;核查日期:2026-10-21。
  4. arXiv·Blockchain in a nutshell - The account-based model,页面发布或更新日期:页面未标明更新日期;核查日期:2026-10-21。