钱包显示你有0.5 BTC,为什么支付0.1 BTC 时,区块浏览器却显示使用了0.5 BTC,还多出一笔转往另一个地址的输出呢?
这通常与Bitcoin 的UTXO 模型及找零机制有关。钱包呈现的是汇整后的余额,但链上记录的资产,是一笔笔具有金额与花费条件的交易输出。
理解UTXO,能帮助你看懂转帐纪录、手续费,以及为什么同一笔比特币不能被重复花费。
UTXO 是Unspent Transaction Output的缩写,中文称为「未花费交易输出」。
一笔交易产生输出后,只要它仍未被后续交易使用,且属于可花费的输出,就能存在于相应的UTXO 状态中。花费时须满足该输出的条件,例如提供所需签章。
Bitcoin(比特币)钱包所显示的余额,可以由多笔不同金额的UTXO 组成,而不是链上某个帐户栏位中的单一数字。
UTXO 不是另一种代币,也不是钱包额外发放的奖励。
一般比特币付款会引用先前输出作为输入,再建立新的输出。
每个被引用的输出,可透过「原交易ID(TxID)+输出序号(vout)」识别。因此,同一笔交易即使产生两个相同金额的输出,也仍是两笔不同UTXO。
转帐时,钱包会选择合适的资金来源,并准备符合条件的授权资料。节点检查的重点包括来源是否有效、是否尚未被花费,以及花费条件是否被满足。
被选中的UTXO 必须整笔花费;剩余价值可建立为新的找零输出。这不表示不能支付小于UTXO 金额的款项。
矿工领取区块补贴的coinbase 交易是特殊情况,不应直接套用一般付款「引用既有输出」的描述;本文操作例子均指一般交易。
假设你的钱包控制一笔0.5 BTC 的UTXO,准备支付0.1 BTC,且这笔交易的费用假设为0.00001 BTC:
0.50000=0.10000+0.39999+0.00001 BTC。
交易成立后,原本的0.5 BTC 输出已被花费;收款与找零则成为新的输出。若之后尚未被使用,它们会是新的UTXO。
因此,看到输入金额为0.5 BTC,不等于你向商家支付了全部0.5 BTC。需要一起看付款、找零与费用。
以上数字只用来说明机制,不代表目前建议费率。
钱包可能自动建立新的找零地址,并继续管理该地址的资产。地址不同,不代表资产必然转给其他人。
但区块浏览器未必能准确标示哪一笔是你的找零,也不能只凭输出排序或金额大小判定。核对时,以自己的钱包纪录及实际付款内容为准。
可以。假设你控制三笔输出,分别为0.02、0.03 与0.05 BTC,总额就是0.10 BTC。钱包可选择其中多笔作为同一交易的输入。
若付款与费用合计超过任一单笔金额,就可能需要组合多笔输入。反过来,一笔交易也可以建立多个收款输出;输入、输出数量并没有必须一对一的关系。
这也能解释为什么「钱包总额相同」的两个人,建立的交易资料量可能不同。
一般交易的实际手续费,可由以下差值计算:
交易费=所有输入金额总和-所有输出金额总和。
费用不是交易中另一笔支付到「矿工地址」的普通输出,而是由区块生产者依规则收取的差额。矿工可在coinbase 交易中领取区块补贴及该区块交易费。
决定愿意付多少费用时,钱包通常会考虑交易资料量、费率与当时区块空间需求,而不是单纯对BTC 金额抽取固定百分比。
多笔小额UTXO 若被同时花费,通常会增加输入与授权资料。其他条件相近时,交易可能更大,在相同费率下需要较高总费用。
因此,转出较少BTC 不一定比较便宜;使用较少输入转出大额BTC,也可能比组合大量小额输入的付款节省资料量。
这不是「UTXO 数量」单独决定费用。输入类型、输出数量及花费条件同样有影响。
sat 是satoshi 的缩写,1 BTC=100,000,000 sat。 vB 是虚拟位元组,与交易权重换算有关,不能一律当成原始档案位元组数。
费用可用「交易虚拟大小× 费率」估算。例如假设交易为200 vB、费率为5 sat/vB,则费用为1,000 sat,也就是0.00001 BTC。
这是假设计算,未引用即时建议费率;实际签署后大小及钱包确认页金额仍须核对。
合并是将多笔输出作为输入,再建立较少的新输出。之后付款若不必使用那么多输入,可能降低未来交易的资料需求。
但合并本身就是链上交易,需要支付当次费用;是否节省整体成本,取决于当时费率与未来怎么花费,并非合并越多越好。
部分钱包提供Coin Control,让使用者选择哪些UTXO 参与交易。例如,区分不同用途的收款,或避免一次动用太多小额输出。
这不是每个钱包都有的功能。以Bitcoin Core 的listunspent 为例,可查看钱包输出对应的txid、vout、金额、确认数,以及是否可花费等资讯;不需要为了正常转帐而先学会操作RPC。
把不同来源的资金一起花费,可能增加外界推测它们由同一方控制的线索。这是分析线索,不是对所有交易都成立的身分证明。
使用新地址有助于减少直接重用地址的关联,但不代表链上纪录因此匿名。合并前可同时考虑费用与资金用途。
在同一条符合规则的有效链上,一笔输出不能被两笔交易重复花费。节点会依交易历史更新哪些输出仍未花费。
因此,两笔交易若竞争使用同一笔输出,不能都在该有效历史中成立。这是理解双重支付(Double Spending)的重要基础。
但「同一笔输出不能在有效链上花两次」,不等于看到未确认付款就能立即放心交货。仍须区分交易被广播、收进区块与取得多少确认,相关保障可参考Finality 最终确认。
若发生Reorg 区块重组,节点会依改采的有效历史调整状态;不能把旧分支中的已花费/未花费结果,无条件当成目前状态。
以太坊(Ethereum)使用帐户与状态记录资产及执行结果。 ETH 转帐不需要像Bitcoin 一般付款那样,选择UTXO 并建立找零输出。
这是资料与执行模型的比较,不直接代表哪种共识更安全或交易更便宜。 UTXO 也不等于PoW;资料模型与共识机制是不同面向。
查询自己的BTC 交易时,可依序查看:
不同浏览器栏位及标示方式不同。 「未花费」也不代表任意人都能使用,还须满足花费条件;锁定条件、确认状态与钱包政策,也可能影响立即可用的金额。
不是。它是未花费交易输出的名称,用来描述资产记录状态。
不是。同一地址可以对应多次收款产生的不同输出,地址与UTXO 不是一对一关系。
原输出会整笔被花费,但交易可把其中部分付给收款人,剩余价值扣除费用后建立为找零输出。
不一定。钱包可能使用新的找零地址,资产仍由同一钱包管理。
不是。重点在这次交易实际使用多少输入,以及输入类型、输出与适用费率;没被使用的UTXO 不会单纯因存在就增加该笔交易费。
不能直接画上等号。交易所帐面余额通常是平台内部纪录;链上资产如何保管及提币如何安排,需依平台服务机制理解。
不一定。还要满足输出的花费条件、成熟或锁定要求,以及钱包对确认状态的处理方式。
不是。 Ethereum 等网路使用帐户模型,不同网路也可能采用其他设计。