在比特幣社區內,有一種這樣的說法:其實並沒有比特幣,有的只是UTXO。www.emoneybtc.com還有一種說法是:如果理解了UTXO,你就理解了比特幣。
這兩種說法雖然都有不同程度的誇張,但足以體現UTXO之於比特幣的重要性。既然UTXO這麼重要,今天我們就來簡單介紹一下UTXO。
什麼是UTXO在當前的區塊鏈項目中,主要有兩種記錄保存方式,一種是賬戶/余額模型,一種是UTXO模型。比特幣采用就是UTXO模型,以太坊、EOS等則采用的是賬戶/余額模型。
UTXO是 Unspent Transaction Output的縮寫,意思是未花費的輸出,可以簡單理解為還沒有用掉的收款。比如韓梅梅收到一筆比特幣,她沒有用掉,這筆比特幣對她來說就是一個UTXO。
賬戶/余額模型和UTXO模型賬戶/余額模型生活中很常見,比如我們的銀行賬戶、微信賬戶,都是基於賬戶/余額模型。
賬戶內的余額是作為一個整體存在的。李雷賬戶上有多少錢,看一下余額便知道,在發生交易時,變動的是余額。比如,情人節當天,李雷通過微信給韓梅梅轉520元,李雷微信賬戶余額會減掉520元,而韓梅梅賬戶余額會增加520元。
UTXO模型則不同於賬戶模型。李雷有多少比特幣,要對他比特幣地址所有UTXO求和才知道。簡單來說,UTXO模型就像我們用的錢包,而錢包裡的每張紙幣或每枚硬幣都是一個單獨的UTXO,因此錢包裡有多少錢,並不一目了然,需要把所有紙幣和硬幣面額相加才能得出。
而每一次收付款,是以UTXO為單位消耗或者接收的。比如我們用10元錢買5元早餐時,這個10元作為一個UTXO先整體付給賣家,賣家再找零給你。
我們通過一個例子來說明。
情人節當天,李雷給韓梅梅買花,價格520元。用現金支付,他掏出6張百元大鈔(相當於6個100元的UTXO)給賣家,賣家需要給李雷找零80元(50元、20元和10元紙幣各一張)。這個過程中顯而易見,李雷花600元買花,得到80元找零,賣家賣出花,得到520元。從UTXO的角度看,李雷花掉了6個UTXO(6張100元),得到3個UTXO(3張找零);賣家得到6UTXO,找零時花掉了3個UTXO。
如果用比特幣完成這筆交易,過程就會稍有不同,假設李雷用6個均為1btc的UTXO付給賣家5.2BTC,最後賣家得到一個價值5.2BTC的UTXO,找零給李雷是一個價值0.8BTC的UTXO,換句話說6個UTXO被“銷毀”,變成了兩個新的UTXO。(兩者不同的原因在於,紙幣面額的種類有限,而比特幣不受這個限制)。
如果李雷和韓梅梅秀恩愛的過程發生在比特幣網絡上,轉賬過程是怎樣的?
李雷挖礦得到系統獎勵的12.5枚比特幣,於是李雷比特幣地址上就有一個12.5BTC的UTXO。
李雷要轉5.2BTC給韓梅梅,12.5BTC的UTXO將會被整體花掉,其中5.2BTC 轉給韓梅梅,剩下的7.3BTC找零給自己(為方便討論,此處忽略礦工費)。換句話說,之前12.5BTC是以一個UTXO的形式整體存在的,在進行轉賬時,這個UTXO被“銷毀”了,不存在了,變成了兩個新的UTXO:一個屬於韓梅梅,這個UTXO價值5.2BTC,另一個屬於李雷,這個UTXO價值7.3BTC,這是找零給李雷的。
兩種模型在轉賬時的對比
UTXO 核心設計思路是:它記錄交易事件,而不記錄最終狀態。要計算某個用戶有多少比特幣,就要對其錢包裡所有的UTXO求和,得到結果就是他的持幣數量。UTXO模型在轉賬交易時,是以UTXO為單位的,也就是說在支付時,調用的是整數倍UTXO,比如1個UTXO,3個UTXO,沒有0.5個UTXO的說法。