什麼是UTXO?

s0ny
Master’s note
Published in
May 27, 2018

(2022–02–13修改)

上一章我們介紹區塊鏈技術,而這一篇文會介紹什麼是UTXO

相較於以太坊的帳戶模型(Account Model),比特幣目前的交易模式是採用所謂的UTXO模型。

那麼什麼是UTXO模型?

先在這裡解釋一下UTXO這個名詞,UTXO的全稱為「Unspent Transaction* Output, UTXO」,中文翻譯叫做「未花費交易輸出」。

*Transaction可以簡稱為 Tx

我們可以從Bitcoin white paper中可以看到,中本聰對於UTXO雛形解釋如下圖:

Bitcoin White paper

中文解釋:

儘管可以單獨處理bitcoin,但要為轉賬中的每一分錢進行單獨的交易會很笨拙。 為了允許值能被拆分和組合,交易可以包含多個輸入和輸出。

在一個常態的交易(A to B, 1000 BTC)中,通常會有來自先前交易的輸入,這個輸入可能是單一很大的輸入(超過1000顆BTC)或較小金額所組合成的多個輸入(50BTC*20個先前交易的輸入),並且輸出最多為兩個:一個用於支付(A to B),另一個將零錢(如果有的話)返回給發送者。

所以,透過上方的解釋,可以把UTXO模型整體來說就是輸入 = 輸出的概念

UTXO模型

每次發生交易,用戶需要將新的交易紀錄寫到比特幣的區塊鏈網路中,等網路確認後才會被認為交易完成。每個經過驗證完成的交易包括一些輸入和輸出,輸入可以被看作過去的歷史,而輸出可以作為下一次交易的輸入,而這個輸出就被稱為未經使用的交易輸出(Unspent Transaction Outputs, UTXO)。

因此,在每一筆合法的交易中,即引用了某些過去已存在交易的UTXO,用以作為一個新交易的輸入。

而在交易過程中,轉帳方須透過數位簽名來證明自己是UTXO的合法使用者,並且指定輸出腳本來限制未來對本交易的使用者(即為受款方)。對每筆交易而言,轉帳方需要進行數位簽名認證,且總輸入的金額不能小於總輸出金額。

以下是簡單的交易案例

由上圖可以觀察出,Tx2的輸入是來自之前兩筆給A的未花費交易輸出(Unspent Transcation Output),假設A的先前兩筆未花費交易輸出加起來剛好10元,但只要給B 8元的話,那該怎麼處理?

先前我們有講到 輸入 = 輸出 的概念,但在這裡輸入10 不等於 輸出 8

所以該怎麼辦?

必須在交易多加一欄Output,把剩下的2元轉帳給自己

輸入(10) = 輸出1(A給B 8元) + 輸出2 ( A的餘額 2元)

這樣左右等式才會成立,輸出1的交易會變成B的未花費交易輸出,而輸出2就會變成A自己本身的未花費交易輸出。

這樣做的用意,再追查金流系統的時候就相當地方便,如果駭客偷走一筆錢,那一筆錢以及地址可以在鏈下標記為「黑錢」,只要關注錢包地址轉帳到哪裡,鏈上都可以看得一清二楚,而且很快就能定位到錢發送到哪些地址。

(新聞上寫駭客或洗錢都愛用BTC是錯誤的,透過BTC<->法幣這樣的兌換動作,很容易就被追查出真實身份,除非是OTC交易,不然是真的很容易追查金流動向。)

在BTC區塊鏈中的礦工,所要驗證的就是未花費交易是不是有在其他的區塊已經被使用過。如果Output被使用過的話,就不是Unspent Transaction Output,對於比特幣來說,這是預防雙重支付(Double Spending)攻擊。

我們可以透過 BlockExplorer.com 看一筆交易中有多個輸入與多個輸出

簡單的案例中未提到手續費的問題,在實際的比特幣網路中,

手續費的計算為 輸入-輸出 =差額(手續費)

轉帳手續費歸礦工所有

UTXO 與 帳戶餘額模型(Account) 優劣比較

  1. UTXO 可簽發多筆交易,並廣播到區塊鏈網路
  2. 帳戶餘額模型易理解且容易編寫程式;而UTXO要考慮到輸入與輸出之間的關係,在程式上比較難編寫
  3. 帳戶餘額模型的每一筆交易都只需要一個簽名,而輸入與輸出都是地址,能節省儲存空間。
  4. UTXO只要驗證當前的交易是符合輸出與輸入規則,不用去追朔先前交易;而帳戶餘額模型只要金額有問題必須追朔先前交易的金流動向。
  5. Account模型需要有更多的機制去保護資金;而UTXO對於雙花攻擊(Double Spending)與重放攻擊(Replay Attack)有先天的保護

現今有哪些公鏈用到UTXO模型

Ada

Bitcoin

Iota

(待補充)

結論

UTXO模型在比特幣網路多年運行下證明UTXO模型可受得住考驗,對於金融業來說,可以說是新的一種金融交易模式。不過,UTXO與Account模型各有優缺點,在應用場景上可能Account模型比較有優勢而UTXO則最差,所以對於應用上,還是得選擇最合適的模型。

--

--