UTXO模型是什么?比特币为什么用未花费交易输出记账?
UTXO模型是什么?比特币为什么用未花费交易输出记账?
日期: 2026-06-18
来源: https://xiaoyinsi.com/wiki/crypto/utxo-model
UTXO模型是什么?比特币为什么用未花费交易输出记账? – 投资百科 – 小隐寺
UTXO模型是什么?比特币为什么用未花费交易输出记账?
UTXO模型用尚未花费的交易输出表示可用余额,是比特币账本结构的核心。
UTXO 是 Unspent Transaction Output 的缩写,即“未花费交易输出”。在比特币等采用 UTXO 模型的网络中,账本并不直接保存“某地址余额为多少”这一账户状态,而是保存一组尚未被后续交易消费的输出。钱包显示的余额,是它能够用相应私钥解锁的所有 UTXO 金额之和。
每个交易输出都包含金额和锁定条件。最常见的条件要求花费者提供与某个公钥哈希对应的有效签名,但脚本也可以表达多签、时间锁等规则。一个输出一旦被成功交易引用,就整体视为已花费,不能只从中切下一部分继续保留。若要支付小于输入总额的金额,交易必须创建一个找零输出。
UTXO更像一组带面额和锁的数字票据,而不是银行账户中的单一余额。用户可能同时拥有0.01 BTC、0.2 BTC和1 BTC三个UTXO,总余额为1.21 BTC。支付0.15 BTC时,可以花费0.2 BTC的那个输出,创建0.15 BTC给收款方,再创建扣除手续费后的找零给自己。
一笔有效交易必须满足输入引用的UTXO确实存在且尚未花费、解锁数据满足输出脚本、输入金额总和不小于输出金额总和等条件。两者差额即矿工费:
手续费 = 输入金额总和 - 输出金额总和
节点维护当前UTXO集合。验证新区块时,节点检查每笔交易的输入,移除被消费的旧输出,再加入新生成的输出。因为无需从创世区块重新汇总每个地址的全部历史,UTXO集合提供了验证当前可花费状态的紧凑索引。完整历史仍用于审计和重建状态。
双花防范体现在“一个输出只能被确认消费一次”。如果两笔未确认交易引用同一个UTXO,节点和矿工最终只能接受其中一条进入有效链。零确认收款仍存在被替换或冲突的风险,确认数增加只是降低链重组概率,并不把风险变成数学意义上的绝对零。
UTXO模型天然支持并行性。只要两笔交易使用不同UTXO,它们的状态依赖相对独立,验证和构造不必争抢同一个账户余额。但如果钱包只有一个大UTXO,同时发起两笔都引用它的交易,就会冲突。钱包需要合理选币,或者先拆分UTXO。
费用 = 交易虚拟大小 × sat/vB费率
隐私方面,UTXO并不自动等于匿名。多输入交易常被分析者推测为同一实体控制,因为花费者需要同时提供各输入签名;找零输出的金额、地址类型和行为模式也可能暴露关联。地址复用会进一步聚合交易图信息。UTXO提供假名化记录,但公开账本仍可被聚类分析。
与账户模型相比,UTXO模型把状态分散在独立输出中。账户模型直接更新地址余额和nonce,开发复杂合约较直观;UTXO模型强调局部状态和明确的消费链。两者并非简单的先进与落后之分,而是状态表达、并发、可编程性和验证方式的不同权衡。
假设Alice钱包有三个UTXO:0.08 BTC、0.12 BTC和0.50 BTC。她要向Bob支付0.15 BTC,钱包选择0.08和0.12两个输入,总计0.20 BTC。若预计手续费为0.0002 BTC,交易可创建0.15 BTC的Bob输出和0.0498 BTC的找零输出。交易确认后,原来的0.08和0.12两个UTXO消失,Bob获得一个0.15的UTXO,Alice获得新的0.0498找零UTXO;0.50那个UTXO没有变化。
若钱包错误地创建0.15 BTC给Bob和0.05 BTC找零,输出刚好等于输入0.20 BTC,矿工费为零,交易可能因不符合节点最低转发费率而难以传播。若只创建0.15 BTC输出而没有找零,剩余0.05 BTC会全部成为矿工费,而不是自动退回。可靠钱包必须显式构造找零。
考虑费用差异。用户有100个各0.001 BTC的小UTXO,总额0.1 BTC。假设一笔采用特定脚本格式的交易,100个输入加2个输出约占6800 vB,费率为20 sat/vB,手续费约136000 sat,即0.00136 BTC。若同样金额来自一个大UTXO,交易可能只有约140 vB,手续费约2800 sat。数值只是示意,但清楚说明UTXO碎片化会抬高高费率时期的使用成本。
钱包可在网络空闲、费率2 sat/vB时把多个小UTXO合并成一个。若合并交易6800 vB,费用约13600 sat;相比20 sat/vB时节省122400 sat。但合并会把原本可能不相关的UTXO放进同一交易,增加地址关联线索,因此费用优化与隐私之间存在权衡。
再看并发支付。商户钱包有UTXO A为1 BTC、UTXO B为1 BTC。它可以用A支付供应商、用B支付工资,两笔交易互不引用同一输出。若钱包只有一个2 BTC的UTXO,两笔支付不能同时独立消费它;可以先构造一笔包含两个付款输出的批量交易,或等待第一笔的找零可用。批量付款通常减少输出之外的重复开销,但操作错误影响范围也更大。
区块浏览器上“地址收到10 BTC”也不表示地址仍控制10 BTC。必须查看相关输出是否已被后续交易消费。某交易输入10 BTC,输出9.5 BTC给另一地址、0.499 BTC找零、0.001 BTC手续费,原10 BTC输出已全部花费。把历史入账总额当当前余额,是对UTXO最常见的阅读错误之一。
确认过程还涉及区块内的依赖顺序。交易B可以花费同一区块中交易A刚创建的输出,只要区块中的顺序和脚本验证都正确;若A无效,B也随之无效。钱包看到“未确认余额”时,应区分来自已确认UTXO、内存池父交易还是自身找零。多层未确认祖先会受到节点策略限制,并增加费用估算难度。
节点保存UTXO集合也有资源成本。集合中的每个输出都要长期可检索,小额且经济上不值得花费的“尘埃输出”会增加状态负担。所谓尘埃阈值与输出未来花费所需费用有关,并非全球固定面额。向大量地址发送极小金额不仅未必有实用价值,还可能给接收者制造隐私和选币问题。
备份钱包时,真正需要保护的是能派生私钥的种子和相关恢复信息,而不是一份静态余额截图。分层确定性钱包可从种子生成多个收款与找零地址;若使用额外口令、多签或特殊派生路径,仅有助记词可能仍无法恢复。UTXO在链上,钱包文件保存的是控制和识别它们所需的信息。
把地址当作永久账户
地址只是锁定条件的一种表示。钱包可以不断生成新地址,找零也常发往新地址;用账户直觉追踪单一地址会漏掉资金控制关系。
认为手续费按转账金额比例收取
比特币费用主要取决于交易数据大小和市场费率。转1 BTC的一输入交易可能比转0.01 BTC的多输入交易便宜。
忽略找零输出
找零不是协议自动计算后退回的余额,而是钱包明确创建的新输出。手工构造交易时遗漏找零可能导致异常高额手续费。
把未确认交易视为最终结算
未确认交易可能被冲突交易替换,也可能长期滞留。接受风险应结合金额、交易特征和确认数,不应把广播成功等同于最终不可逆。
常见问题 FAQ
一个UTXO能否分几次花费?
不能。它在交易中被整体消费,但交易可以创建多个新输出,实现付款和找零。剩余金额若没有写入输出,会成为手续费。
钱包余额为什么与某个地址余额不同?
现代钱包通常管理许多地址和找零地址。钱包余额是所有可由钱包密钥解锁的UTXO之和,不一定集中在一个地址。
UTXO越多越安全吗?
没有这种必然关系。多个UTXO可提高支付并发和选币灵活性,但会增加管理复杂度,未来花费时可能产生更大的交易和更高费用。
为什么交易迟迟未确认?
常见原因是费率相对当前区块空间需求过低,或交易依赖尚未确认的父交易。应查看sat/vB、内存池状态和钱包是否支持费用替换或子为父偿付,而不是只看转账金额。
UTXO模型是否完全保护隐私?
否。交易图、共同输入、找零模式、地址复用和链下身份信息都可能产生关联。隐私需要钱包行为、网络层和使用习惯共同配合。
比特币是什么?为什么它是加密货币的起点?
区块链是什么?为什么它是加密货币的底层技术?
账户模型是什么?以太坊余额和比特币UTXO有什么区别?
CBDC央行数字货币是什么?它和加密货币有什么不同?
撸空投是什么?Airdrop Farming为什么越来越卷?
一个人做交易,亏多赚少?不得方法?
快快加入小隐寺的Discord社区,跟多位高手交流美股当下主题板块,研究基本面、技术分析,还有专属分类频道