UTXO 是甚麼?一文看懂比特幣與以太坊記賬模式的根本差異

UTXO 是甚麼?一文看懂比特幣與以太坊記賬模式的根本差異
字号
【导读】UTXO 是甚麼?本文以找零比喻解釋比特幣未花費交易輸出模型,並對比以太坊帳戶模型,剖析記帳單位、手續費、隱私與擴展性的根本差異。

打開加密貨幣錢包,看到餘額顯示「0.5 BTC」,有沒有想過這 0.5 BTC 到底存在哪裡?是存在某個中央伺服器的資料庫,還是錢包地址本身載入著一個數字?答案可能跟直覺完全不同:比特幣網絡根本沒有「餘額」這個資料欄位。整個系統記錄的不是每個地址有多少錢,而是一筆又一筆未花費交易輸出。這些輸出的總和,構成了錢包顯示的金額。這套記帳架構的核心,就是 UTXO(Unspent Transaction Output)

UTXO 是甚麼?先從「找零」開始理解

UTXO 的全稱是 Unspent Transaction Output,中文通常譯作「未花費交易輸出」。要理解它,可以從一個日常情境說起。

假設實體錢包裡有一張 100 元紙幣,去商店買一杯 35 元的咖啡。顧客不會跟店員說「從我戶口扣 35 元」,因為實體錢包沒有戶口概念。顧客遞出那張 100 元紙幣,店員收下,然後找回 65 元。那張 100 元紙幣被花掉了,65 元變成手上新的現金。錢包裡的「總金額」,其實只是所有紙幣面額的加總。

比特幣的 UTXO 就是同一套邏輯。每一筆比特幣交易,輸入端引用之前收到的「未花費輸出」,輸出端則產生新的輸出。Bitcoin.org 開發者指南將這個循環定義得很明確:每筆輸入花費先前某個輸出收到的比特幣,每個輸出則等待成為一個未花費交易輸出,直到被後續輸入花費。

假設收到一筆 0.5 BTC 的轉帳,這 0.5 BTC 就是一個 UTXO。當想轉 0.3 BTC 給朋友時,系統會拿這個 0.5 BTC 的 UTXO 作為輸入,然後產生兩個輸出:一個是給朋友的 0.3 BTC,另一個是找回給自己的 0.2 BTC。那 0.3 BTC 在朋友未花掉之前,是一個新的 UTXO;找零的 0.2 BTC 也是。原本那個 0.5 BTC 的 UTXO 就被銷毀,永遠從未花費集合中消失。

UTXO 是甚麼:扁平矢量信息图展示比特币交易中UTXO输入与找零输出的资金分解过程
比特币交易将原有UTXO作为输入彻底销毁,并同时生成收款与找零两个全新的未花费交易输出。

全網所有有效但尚未被花掉的輸出集合在一起,就是比特幣的 UTXO 集合。全節點維護的不是「哪個地址有餘額」,而是「哪些輸出可以被花費」。比特幣錢包顯示餘額,其實是掃描鏈上所有屬於該地址的 UTXO,把它們的面額加總出來的結果。

這個設計看似迂迴,卻有深層考量。UTXO 讓每一筆資金都有清晰的來源與去向,無法含糊地混在一起。就像手上的每一張鈔票,面額與流向都可以獨立追溯。這種透明度是傳統帳戶結構難以提供的。

比特幣的 UTXO 模型如何運作

一筆比特幣交易由兩個部分組成:輸入和輸出。輸入必須引用既有的 UTXO,並提供解鎖證明(通常是數位簽名與公鑰),用以證明有權花費這筆輸出。輸出則定義這筆錢接下來鎖定給誰,以及金額多少。系統驗證交易時,會檢查三個關鍵條件:

  1. 輸入的 UTXO 確實存在於全網的 UTXO 集合中,且尚未被其他交易花費。
  2. 驗證簽名與該 UTXO 的鎖定腳本相配對。
  3. 輸入總額必須大於或等於輸出總額,兩者的差額即為支付給礦工的手續費。

一個重要的核心規則是:UTXO 不能「部分花費」。如果手上持有一個 0.8 BTC 的 UTXO,想轉 0.1 BTC 給別人,系統不會自動切分該 UTXO。使用者必須把整個 0.8 BTC 作為輸入,然後產生兩個輸出:0.1 BTC 給收款人,0.699 BTC 找零給自己(剩下的 0.001 BTC 為礦工費)。這種全有或全無的特性,讓每一筆交易都像一次找零操作。

這樣的設計直接影響了交易費用的計算方式。比特幣的手續費不是按轉帳金額的比例收取,而是按交易資料的大小(位元組數)收取。一筆交易引用的輸入越多、產生的輸出越多,資料體積越大,所需手續費就越高。如果賬戶積累了大量小額 UTXO,一次轉出一大筆錢時,交易會因為引用大量輸入而變得臃腫,手續費大幅上升。這種現象稱為「UTXO 碎片化」,在比特幣網絡擁堵時尤為明顯。

此外,UTXO 模型在結構上具備天然的防重放(Anti-replay)機制。同一筆交易只要被區塊確認一次,之後再次重放或複製都是無效的,因為它所引用的 UTXO 已經被消耗並移除。這種設計讓比特幣的帳本結構簡單且高度易於驗證。

以太坊的帳戶模型:另一種記帳哲學

以太坊採用的記帳方式完全不同,稱為帳戶模型(Account Model)。顧名思義,每個帳戶直接記錄一個餘額數字。外部帳戶(EOA,由私鑰控制)與合約帳戶(CA,由程式碼控制)都有明確的狀態:餘額、nonce(交易計數器)、儲存狀態等。帳戶模型的運作方式更接近傳統銀行系統:每個帳戶是一行資料,餘額是行內的一個數值。

當從錢包轉帳 1 ETH 給朋友時,以太坊的處理流程很直接:從發送方帳戶餘額減去 1 ETH,並在接收方帳戶餘額加上 1 ETH。整個過程沒有找零,不需要引用舊的交易輸出,只需要確認扣款後餘額不為負數。

帳戶模型在智能合約開發上具備顯著優勢。開發者撰寫合約時,可以直接讀取和修改帳戶狀態。例如 ERC-20 代幣合約,只需要維護一個「地址對應餘額」的映射表(Mapping),轉帳函數(transfer)就是兩個地址之間的數值加減。這種直覺的設計,大幅降低了區塊鏈應用的開發門檻。

然而,帳戶模型也帶來了特定的工程挑戰:

  • 交易序列化限制:由於餘額直接儲存在帳戶狀態中,涉及同一帳戶的多筆交易必須按順序嚴格執行,否則可能引發雙重支付或狀態衝突。這限制了全節點的並行處理能力。
  • 狀態膨脹問題:以太坊節點必須維護完整的帳戶狀態樹(Merkle Patricia Tree)。隨著用戶數與智能合約增加,整體狀態體積持續增長,且缺乏類似 UTXO「花費即銷毀」的自然回收機制(雖有自毀機制但無法完全抵消膨脹)。這成為以太坊節點硬體門檻升高的主要原因之一,也是社群長期研究「無狀態驗證(Statelessness)」的原因。

兩種模式的根本差異對照

將兩種模型置於同一框架下比較,可以清楚看出各自的設計取捨:

UTXO 是甚麼:左右对照图示展示比特币UTXO模型与以太坊账户模型的记账机制差异
UTXO模型依赖交易输出的连续销毁与重建,而账户模型则直接更新固有账户之间的余额状态。
比較維度 UTXO 模型(比特幣) 帳戶模型(以太坊)
記帳單位 未花費交易輸出(UTXO) 帳戶餘額數值
資金追溯性 在未合併前,每個 UTXO 均可追溯其來源交易 資金直接匯入餘額池,忽略單筆來源
找零機制 必須產生找零輸出 直接變更狀態,無須找零
智能合約擴充性 較受限,需透過額外協議(如 RGB、Taproot Assets) 原生支援複雜邏輯與狀態變更
交易並行驗證 互不重疊的 UTXO 交易可天然並行處理 受限於狀態依賴,通常需要序列化執行
節點存儲負擔 只需保存活躍的 UTXO 集合 需維護龐大的全網帳戶狀態樹

比特幣選擇 UTXO,核心目標是在去中心化與極簡驗證之間取得平衡;以太坊選擇帳戶模型,則旨在提供靈活的可程式化能力以支援複雜應用。目標不同,技術架構自然產生分化。

用戶體驗與實務影響:隱私、手續費與錢包操作

對使用者而言,兩種記帳架構在日常操作中帶來了明顯的體驗差異:

1. 錢包介面與找零機制:
比特幣錢包顯示「總餘額」,但後台管理著一個「UTXO 列表」。轉帳時,錢包會自動挑選合適的 UTXO 組合。為了保護隱私,現代錢包常會自動為找零生成新的地址,導致一次轉帳涉及多個地址。以太坊錢包則直觀得多:一個地址、一個數值,輸入金額後確認即可,沒有找零與地址切換的概念。

2. 鏈上隱私與追蹤:
很多人誤以為「UTXO 像現金所以更隱秘」,事實上,比特幣的交易輸入與找零地址常被鏈上分析工具關聯。當一次交易將多個輸入地址與找零地址串聯時,分析者可以推斷這些地址屬於同一持有者。為了緩解此問題,社群推出了 CoinJoin(混幣技術)以及 BIP-352 Silent Payments(隱性地址提案,尚在推進中)等方案。以太坊的帳戶模型則因所有交易均綁定特定地址,鏈上行為完全公開,隱私保護主要依賴零知識證明等外置方案。

3. 手續費計算邏輯:
比特幣的手續費取決於交易資料體積(Data Size),輸入數量越多,手續費越高;以太坊的手續費則取決於計算複雜度(Gas 消耗),與涉及多少個歷史輸出無關。前者是「按資料量計費」,後者是「按運算量計費」。

擴展性博弈:狀態規模與驗證效率

擴展性不僅是交易處理速度(TPS)的競爭,更關乎全節點的營運成本與去中心化程度。

比特幣節點維護的是 UTXO 集合。每筆交易消耗舊輸出、產生新輸出,集合規模主要與活躍的未花費輸出數量相關。據 mempool.space 的數據顯示,截至 2024 年底,比特幣 UTXO 總數約為 1.7 億個,記憶體與磁碟佔用相對可控。雖然 Ordinals 與 BRC-20 的出現加速了 UTXO 的增長,但整體而言,輕客戶端(如 SPV 錢包)僅需追蹤與自身相關的 Merkle 證明即可完成驗證,驗證門檻較低。

以太坊的狀態樹則承載著所有帳戶與智能合約的儲存資料。隨著 DeFi 與 NFT 應用的爆發,狀態樹持續膨脹,對節點的 SSD 讀寫性能與記憶體提出了極高要求。為了解決這一瓶頸,以太坊開發團隊正致力於推進 Verkle 樹與無狀態驗證,試圖讓節點在不儲存完整狀態的前提下驗證區塊。

在並行處理方面,UTXO 模型具備結構優勢:只要兩筆交易引用的 UTXO 沒有交集,節點就可以同時驗證它們。而帳戶模型由於多筆交易可能同時存取同一個帳戶狀態,必須進行衝突檢測或嚴格按順序執行。

澄清關於 UTXO 的常見誤解

在加密貨幣社群中,經常出現對 UTXO 的概念誤讀:

  • 誤解一:UTXO 是某種實體或獨立的數位硬幣。
    UTXO 在技術上僅是一段包含金額與解鎖條件(ScriptPubkey)的資料記錄,並非獨立存在的實體物件。
  • 誤解二:一個錢包地址只能包含一個 UTXO。
    同一個地址可以多次接收轉帳,每一次接收都會在該地址上產生一個獨立的 UTXO。錢包餘額是這些 UTXO 的集合加總。
  • 誤解三:UTXO 架構絕對比帳戶架構更安全。
    安全性取決於整體密碼學設計與網絡共識。UTXO 結構天然免疫重入攻擊(Reentrancy Attack),但在應用層邏輯與隱私防護上,仍需要輔助協議進行補強。
  • 誤解四:兩者完全割裂,無法融合。
    現代區塊鏈正在探索混合模式。例如 Cardano 採用的 Extended UTXO (EUTXO) 模型,就是在 UTXO 中附加自訂狀態資料,既保留了可並行驗證的特性,又實現了智能合約功能。

混合模型的演進:閃電網絡、RGB 與擴展探索

隨著區塊鏈技術的發展,UTXO 與帳戶模型的界線正逐漸變得融合。

比特幣 Layer 2 方案(如閃電網絡)利用多重簽名與時間鎖定合約,將大量交易置於鏈下執行,最終僅在通道開啟與關閉時將 UTXO 狀態提交至主網。這種設計在維持 UTXO 安全性的同時,解決了小額支付的效率問題。

同時,RGB 協議與 Taproot Assets 等新興技術,嘗試透過「用戶端驗證(Client-Side Validation)」在比特幣 UTXO 之上發行資產與執行合約。這些嘗試顯示,UTXO 模型同樣具備構建複雜生態的潛力。

日常操作建議:如何管理 UTXO

理解 UTXO 架構後,使用者可以在日常操作中採取優化策略:

  1. 定期進行 UTXO 合併(UTXO Consolidation):如果錢包中積累了許多極小額的 UTXO(例如挖礦收益或微額收款),可以在比特幣網絡手續費率較低時(如費率低於 10 sat/vB),發送一筆將資金轉給自己的交易,將多個碎片 UTXO 合併為一個大額 UTXO。這能避免日後網絡擁堵時支付昂貴的手續費。
  2. 避免地址重複使用:為了防範鏈上關聯分析,建議每次收款均使用錢包生成的新地址。現代 HD 錢包(分層確定性錢包)均原生支援此功能。
  3. 進階:查看交易輸入與輸出結構:在使用區塊瀏覽器查詢比特幣交易時,可以觀察「Inputs」與「Outputs」區塊。識別哪些是支付金額、哪些是找零金額,有助於深入理解鏈上資金的實際流動軌跡。

常見問題解答(FAQ)

Q1: UTXO 與傳統銀行帳戶的主要差異是什麼?

傳統銀行帳戶採用的是類似以太坊的「帳戶模型」,直接記錄總餘額,轉帳時進行數值加減。而 UTXO 模型沒有餘額概念,每次轉帳都是將舊的「未花費輸出」消耗掉,並產生新的「未花費輸出」,類似於使用實體現金支付並找零。

Q2: 為什麼比特幣轉帳手續費有時與轉帳金額無關?

比特幣手續費由交易的資料體積(位元組大小)決定。轉帳 100 BTC 如果只消耗 1 個 UTXO,交易體積很小,手續費會很低;相反,轉帳 0.01 BTC 如果需要湊齊 50 個小額 UTXO 作為輸入,交易體積龐大,手續費會高出許多。

Q3: 什麼是 UTXO 合併?什麼時候應該做?

UTXO 合併是指將錢包裡的很多小額未花費輸出,透過一筆自我轉帳交易合流為一個大額 UTXO。最佳實施時機是在比特幣網絡手續費率(Gas Fee)較低的離峰時段,這樣可以降低未來發送大額交易時的手續費成本。

Q4: 以太坊未來會改成 UTXO 模型嗎?

以太坊主網不會改為 UTXO 模型,因為其龐大的智能合約生態深層依賴帳戶模型。不過,以太坊社群正在透過 Verkle 樹、無狀態驗證以及 Layer 2 方案來解決帳戶模型帶來的狀態膨脹與並行計算瓶頸。

admin

作者负责资讯整理、核查与撰写。 · 已发布 18 篇文章

查看作者全部文章