打開加密貨幣錢包,看到餘額顯示「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 的鎖定腳本相配對。
- 輸入總額必須大於或等於輸出總額,兩者的差額即為支付給礦工的手續費。
一個重要的核心規則是: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 均可追溯其來源交易 | 資金直接匯入餘額池,忽略單筆來源 |
| 找零機制 | 必須產生找零輸出 | 直接變更狀態,無須找零 |
| 智能合約擴充性 | 較受限,需透過額外協議(如 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 架構後,使用者可以在日常操作中採取優化策略:
- 定期進行 UTXO 合併(UTXO Consolidation):如果錢包中積累了許多極小額的 UTXO(例如挖礦收益或微額收款),可以在比特幣網絡手續費率較低時(如費率低於 10 sat/vB),發送一筆將資金轉給自己的交易,將多個碎片 UTXO 合併為一個大額 UTXO。這能避免日後網絡擁堵時支付昂貴的手續費。
- 避免地址重複使用:為了防範鏈上關聯分析,建議每次收款均使用錢包生成的新地址。現代 HD 錢包(分層確定性錢包)均原生支援此功能。
- 進階:查看交易輸入與輸出結構:在使用區塊瀏覽器查詢比特幣交易時,可以觀察「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 方案來解決帳戶模型帶來的狀態膨脹與並行計算瓶頸。



