跳到正文

UTXO 模型

了解比特幣如何以未花費交易輸出表示可花費價值、驗證花費、建立找零、為交易空間定價,以及選幣與隱私之間的權衡。

更新於

僅供教育參考,不構成投資建議;投資可能產生損失。

直接回答

未花費交易輸出(UTXO)模型把可花費價值表示為彼此獨立的輸出,而不是記在某個帳戶名下的一筆餘額。在比特幣中,普通交易的輸入透過交易識別碼和輸出索引指向先前的輸出。該輸出記錄金額和鎖定腳本。錢包顯示的餘額是它能夠花費的各項輸出之和,並非存放在某個地址裡的餘額欄位。

一個輸出必須整體花費。如果選中的輸入超過付款額與手續費之和,交易必須明確建立找零輸出;協定不會自動退回找零。一筆交易可以消耗多個既有 UTXO,並建立多個新的 UTXO,每個都有自己的金額和花費條件。

運作機制

一筆普通的非 coinbase 交易要有效,每個被引用的輸出都必須存在且尚未花費,每個輸入都必須滿足對應輸出的鎖定條件,而且輸出總額不得超過輸入總額。兩者之差可作為交易手續費:

fee = sum(inputs) - sum(outputs)

節點接受區塊時,會從目前 UTXO 集中移除已消耗的輸出,並加入新建立的輸出。驗證和重建此狀態仍需要區塊歷史。鏈重組可能替換近期區塊,因此鏈尖附近的輸出可能重新變成未確認狀態,也可能從已接受的歷史中消失。

在一條已接受的鏈歷史中,某個輸出只能被消耗一次。互相衝突的未確認交易可能爭用同一個輸出,但記憶池的接納和替換屬於節點策略,並不是讓鏈上雙花變得有效的規則。BIP 125 定義了選擇性替換訊號及相應策略,因此收到未確認交易不等於最終結算。

比特幣區塊空間的價格主要取決於交易權重和費率,而不是轉帳金額。BIP 141 定義 virtual size = ceil(weight / 4)。輸入通常比輸出增加更多交易資料,所以在相同費率下,花費許多小 UTXO 可能比花費一個較大的 UTXO 更貴。準確大小取決於所用腳本和見證類型。

花費不同 UTXO 的交易具有各自的輸入依賴,因此驗證和交易建構更容易平行處理。但它們並非在每種實作或應用中都會自動獨立:選擇同一輸出的兩筆交易會衝突,子交易也依賴其未確認父交易。錢包的選幣邏輯必須協調這些依賴。

UTXO 不會帶來匿名性。合併輸入可能暗示共同控制,找零識別模式或地址重複使用也可能關聯活動。這些只是啟發式線索,並非密碼學證明,但合併操作可能暴露分開花費時不會顯現的關係。

與帳戶模型相比,UTXO 模型會明確呈現每個可花費物件及其消耗路徑。帳戶系統通常更新餘額、nonce 等共享帳戶狀態。兩種模型沒有普遍意義上的優劣之分;它們在狀態表示、可程式設計性、並行性和錢包設計上採取了不同權衡。

完整範例

Alice 控制 0.08 BTC0.12 BTC0.50 BTC 三個 UTXO。為了向 Bob 支付 0.15 BTC,她的錢包選擇前兩個輸入,總計 0.20 BTC,並估算手續費為 0.0002 BTC。交易建立以下輸出:

  • Bob:0.15 BTC
  • Alice 的找零:0.0498 BTC

計算過程為 0.20 - 0.15 - 0.0002 = 0.0498 BTC。確認後,0.08 BTC0.12 BTC 兩個輸出已被花費;Bob 的輸出與 Alice 的找零成為新 UTXO;0.50 BTC 的輸出保持不變。

如果交易只建立 Bob 的 0.15 BTC 輸出,遺漏的 0.05 BTC 會成為手續費,而不會自動退回。錢包也可以改選另一組輸入、批次付款,或在費率較低時合併小額輸出。這些選擇需要權衡目前費用、未來費用、確認可靠性和隱私。

風險與控制

  • 費用風險: 碎片化 UTXO 會增加輸入權重;廣播前應估算簽章後交易的大小和費率。
  • 隱私風險: 合併輸入與可識別的找零可能關聯地址;不能把新地址視為必然無法關聯。
  • 確認風險: 衝突交易、替換策略和鏈重組會使未確認收款具有可逆性。
  • 復原風險: 鏈上保存 UTXO,錢包則保存或衍生查找和花費它們所需的金鑰與探索資料;應備份所有必要復原要素。

常見誤解

地址就是永久帳戶

地址編碼或表示花費條件。錢包可以控制傳送至多個收款地址和找零地址的輸出,因此單一地址並不是錢包的完整狀態。

手續費與付款金額成比例

手續費主要取決於交易權重和所選費率。輸入較少的大額付款,可能比由許多輸入拼成的小額付款更小、更便宜。

協定會自動建立找零

找零是付款方錢包主動建構的普通輸出。輸入中未分配給輸出的任何價值,都可由礦工作為手續費取得。

未確認就等於已結算

記憶池只是節點的暫時視圖,不是共識帳本。接納、替換和清除策略可能不同;確認風險會隨時間下降,但不會在廣播時消失。

相關主題

來源

導覽

搜尋知識庫...