跳至主要內容
交易 進階

UTXO

Unspent Transaction Output

又稱:未花費交易輸出

UTXO(Unspent Transaction Output,未花費交易輸出)是比特幣交易模型的核心概念。與傳統銀行的帳戶餘額不同,比特幣沒有「餘額」這個概念——你擁有的是一組可花費的 UTXO。

基本概念

每個 UTXO 包含:

欄位說明
金額這個 UTXO 代表多少聰(satoshi)
鎖定腳本scriptPubKey,定義誰可以花費
交易 ID創建此 UTXO 的交易 hash
輸出索引該交易中的第幾個輸出(從 0 開始)

你的「餘額」實際上是你擁有的所有 UTXO 金額總和。

運作方式

收款:創建新 UTXO

當你收到比特幣時,發送方的交易會創建一個新的輸出(你的 UTXO):

發送方交易:
輸入:發送方的 UTXO(被消耗)
輸出:
  - 你的地址:1.0 BTC(新 UTXO 給你)
  - 找零地址:0.5 BTC(新 UTXO 還給發送方)

付款:消耗 UTXO 並創建新的

當你花費時,必須將整個 UTXO 作為輸入,多餘的部分作為找零:

你的交易:
輸入:你的 1.5 BTC UTXO(完全消耗)
輸出:
  - 收款方:1.0 BTC(新 UTXO)
  - 你的找零:0.4999 BTC(新 UTXO 給自己)
  - 手續費:0.0001 BTC(輸入 - 輸出 = 礦工收取)

現實類比

UTXO 就像紙幣:

你有:一張 100 元紙幣
購買:70 元的商品

你不能「撕下 70 元」給商家
你必須:
1. 給出整張 100 元(輸入)
2. 收回 30 元找零(找零輸出)
3. 商家收到 70 元(支付輸出)

UTXO vs 帳戶模型

特性UTXO 模型(比特幣)帳戶模型(以太坊)
餘額表示UTXO 集合總和單一數字
隱私性較高(可用不同地址)較低(地址持續使用)
平行處理容易(UTXO 獨立)困難(需處理 nonce)
雙花檢測簡單(UTXO 存在即可)需追蹤 nonce 順序
智能合約受限靈活
驗證方式只需驗證輸入存在需執行狀態轉換

UTXO 集(UTXO Set)

所有未花費的 UTXO 構成「UTXO 集」,這是比特幣全節點必須維護的關鍵數據:

UTXO 集大小(2024):約 5-8 GB
UTXO 數量:約 7000-8000 萬個
新增:每個區塊的交易輸出
移除:每個區塊的交易輸入

為什麼 UTXO 集很重要?

  1. 驗證交易:確認輸入的 UTXO 真的存在且未被花費
  2. 防止雙花:UTXO 被使用後立即從集合移除
  3. 快速查詢:節點不需遍歷整個區塊鏈

UTXO 碎片化問題

問題描述

頻繁小額收款會產生大量小 UTXO:

你的 UTXO:
- 0.001 BTC(第1次收款)
- 0.002 BTC(第2次收款)
- 0.0015 BTC(第3次收款)
- ... 100 個小額 UTXO

問題:
- 要花費全部餘額,需要 100 個輸入
- 交易大小大 = 手續費高
- 可能超過交易大小限制

解決方案:UTXO 整合

在手續費低的時候,把小 UTXO 合併成大的:

整合交易:
輸入:100 個小 UTXO(趁低費率整合)
輸出:1 個大 UTXO(所有金額減手續費)

好處:
- 未來花費只需 1 個輸入
- 大幅降低未來手續費

最佳實踐

建議說明
定期整合趁週末或低費時段整合小 UTXO
避免粉塵不要創建太小的輸出
Coin Control使用錢包的 UTXO 選擇功能
監控費率在 mempool.space 追蹤最佳時機

UTXO 選擇演算法

錢包在花費時需要選擇哪些 UTXO 作為輸入:

常見策略

FIFO(先進先出)

優先使用最舊的 UTXO
優點:隱私較好,舊 UTXO 已經被多次確認

最大先用

優先使用最大的 UTXO
優點:減少輸入數量,降低交易大小

最佳匹配

找到最接近支付金額的 UTXO 組合
優點:減少找零,可能避免產生粉塵

隱私優先

避免合併來自不同來源的 UTXO
優點:防止地址關聯分析

粉塵(Dust)UTXO

當 UTXO 金額太小,花費它的手續費比它的價值還高時,稱為「粉塵」:

粉塵閾值計算:
P2PKH: 148 bytes × 當前費率
P2WPKH: 68 vbytes × 當前費率

例如費率 10 sat/vB:
P2PKH 粉塵閾值:約 1480 sat
P2WPKH 粉塵閾值:約 680 sat

低於此金額的 UTXO 經濟上不值得花費。

UTXO 與隱私

地址重用風險

交易 1:A(你)→ B(對方),找零 → A'(你的找零地址)
交易 2:A'(找零)+ C(另一筆收款)→ D

問題:觀察者可以推測 A 和 A' 屬於同一人
      進而推測 C 也屬於你

改善隱私

  1. 每次使用新地址:避免地址重用
  2. Coin Control:手動選擇不暴露關聯的 UTXO
  3. CoinJoin:與他人混合 UTXO,打破關聯

技術細節

UTXO 在交易中的引用

交易輸入:
{
  "txid": "7a3b...",     // 前序交易 ID
  "vout": 0,             // 輸出索引
  "scriptSig": "...",    // 解鎖腳本
  "sequence": 0xffffffff // 序列號
}

UTXO 在輸出中的創建

交易輸出:
{
  "value": 100000,       // 金額(satoshi)
  "scriptPubKey": {
    "asm": "OP_DUP OP_HASH160 ... OP_CHECKSIG",
    "type": "pubkeyhash",
    "address": "1A1zP1..."
  }
}

開發者工具

  • Bitcoin Core RPC

    • listunspent:列出你的 UTXO
    • gettxout:查詢特定 UTXO
    • getutxosetinfo:UTXO 集統計
  • 區塊瀏覽器:查看地址的 UTXO

  • Electrum:支援 Coin Control 的錢包

已複製到剪貼簿