主頁/學習指南/區塊鏈百科/基礎概念/什麼是未花費的交易輸出(UTXO)?

什麼是未花費的交易輸出(UTXO)?

2023.06.13 MEXC
分享


區塊鏈的本質是去中心化的分布式數據庫,那麼「區塊鏈賬本」如何記賬呢?在當前區塊鏈項目中,有兩種主流記賬方式:一種是以太坊為代表的賬戶餘額模式,一種是比特幣為代表的未花費的交易輸出(UTXO)模式。了解UTXO便可以輕鬆理解比特幣的記賬邏輯。

UTXO,全稱Unspent Transaction Output,即未花費的交易輸出,可以理解為比特幣交易中的基本單位。比如Bob收到了一筆比特幣,沒有花費掉,這筆比特幣就是一個UTXO。UTXO模型類似錢包,每個UTXO都是只能使用一次的現金紙幣。每個UTXO(現金紙幣)都代表了一定數額的錢,把所有UTXO(現金紙幣)相加,就可以得出用戶的餘額。

每一次交易,調用的是整數倍UTXO,比如1個UTXO,2個UTXO,不可能使用0.5個UTXO之類的(類似不可能使用半張紙幣)。如果發生1次交易,則現有的UTXO(舊的紙幣)會被消耗掉,然後變成新的UTXO(新的紙幣)。舉個例子:你早上去買咖啡和麵包,需要支付50元,你拿出100元現金給服務員,這個100元作為一個UTXO會被付給商家,商家再找零給你50塊,此時你收到新的UTXO(新的現金50元)。

如果這筆交易發生在區塊鏈上,UTXO模型是如何運轉的呢?為了理解,我們抽象出三種轉賬方式,並分別舉例。為方便討論,此處忽略礦工費。

1.兩人轉賬


假設Bob收到10BTC,於是Bob比特幣地址上就有一個10BTC的UTXO。此時Bob需要給Alice轉賬2BTC,那麼10BTC的UTXO將會被作為整體花掉(舊的紙幣消失),其中2BTC(新的紙幣)被轉給Alice,剩下的8BTC(新的紙幣)會找零給自己。也就是,之前10BTC是以一個UTXO的形式整體存在的,在轉賬時,這個UTXO(舊的紙幣)被銷毀了,不存在了,變成了兩個新的UTXO(新的紙幣)。這兩個新的UTXO,一個屬於Bob,這個UTXO價值8BTC,這是找零給Bob的,另外一個屬於Alice,這個UTXO價值2BTC。未來Alice可以將這個UTXO用作餘額轉給他人。


假如Alice要將這2BTC轉給Frank,為了預防Alice此前已經將這2BTC轉給他人(相當於Alice兩次花費這2BTC,即著名的雙花攻擊),礦工需要驗證這個UTXO沒有在其他交易中使用過。如果這個UTXO已經發送過,那礦工將拒絕執行這筆交易。

2.多人轉賬


再舉兩個例子,讓我們加深理解。(1)1個地址給3個地址轉賬(2)3個地址給1個地址轉賬。這4個地址,我們簡稱為A/B/C/D,情況①A轉賬給B/C/D,情況②A/B/C轉賬給D。假設剛開始時,A地址有10個BTC,B/C/D沒有BTC,即地址為0 BTC。

那麼情況(1),A地址上有1個10BTC的UTXO,分別轉賬B/C/D 2BTC。


首先,A 10BTC的UTXO將會被作為整體花掉,其中2BTC被轉給B,2BTC被轉給C,2BTC被轉給D,剩餘4BTC會找零給自己。此時,之前10BTC的UTXO,不存在了,變成了四個新的UTXO,一個屬於A 價值4BTC,另外三個分別屬於B/C/D,均價值2BTC。所以,在發生轉賬後,A地址上有1個4BTC的UTXO,B地址有1個2BTC的UTXO,C地址有1個2BTC的UTXO,D地址有1個2BTC的UTXO。

然後,我們進行情況(2)的模擬,A/B/C分別轉給D 2BTC。


A地址4BTC的UTXO將會被作為整體花掉,其中2BTC被轉給D,2BTC找零給自己。B地址2BTC的UTXO被轉給D,C地址2BTC的UTXO被轉給D。在發生轉賬後,A地址上有1個2BTC的UTXO,B地址無UTXO,C地址無UTXO,D地址有4個2BTC的UTXO(其中1個是情況①轉賬留下的,剩下3個是情況②轉賬留下的)。

3.兩人轉賬,其中一人有多個UTXO


假設A有多個UTXO,分別是1BTC的UTXO、2BTC的UTXO、3BTC的UTXO和4BTC的UTXO,B沒有BTC。此時,A需要轉賬給B 2.5BTC。那麼UTXO模型如何運作?


此時A地址2BTC的UTXO將會直接轉給B,1BTC的UTXO將會被作為整體花掉,其中0.5BTC被轉給B,0.5BTC找零給自己。在轉賬後,A地址上還有0.5BTC的UTXO、3BTC的UTXO和4BTC的UTXO。B有2BTC的UTXO和0.5BTC的UTXO。

在採用UTXO模型的幣種中,如果用戶填寫錯誤合約地址,很可能幣種將無法找回。因為UTXO沒有額外存儲轉出狀態,且幣轉賬操作後其對應的UTXO已經不存在於數據庫中,也就是系統默認你已花出且此動作無法撤銷。而合約地址不兼容又將導致錯誤的Input,接收方無法正常接受。因此,幣種很可能無法找回。

可以看出:①UTXO會記錄事件,而不是記錄最終狀態②每個UTXO都代表了一定數量的比特幣,所有UTXO相加即可得出賬戶餘額③一個UTXO就是比特幣交易的輸出 ④一筆完整的交易由交易輸出(輸出方)和交易輸入(接收方)組成。其中,交易輸出可以稱為Output,交易輸入可以稱為Input。在交易完成後,任何新生成的UTXO都將記錄在比特幣賬本之中,可以用於轉賬交易。UTXO 作為比特幣交易的樞紐,具有安全性、隱私性和可擴展性等優點,被眾多區塊鏈項目作為底層交易框架。

以下上線MEXC幣種均是採用UTXO模型:


ada、ae 、avax-xchain、bch 、bcha 、beam、bhd 、bsv 、btc 、btcv 、btm 、btm2
chia 、ckb、dash 、doge、firo、hc 、hns、hydra、ioex 、KAS(KASPA)、lbc 、lbtc、ltc
mass、pac、plcu、psl、qtum、rvn、sc、sys、ut 、wit、xrd、xvg、zel、zen


如以上幣種出現轉賬錯誤,我們無法幫您找回,請您充值前務必填寫正確充值地址!


新手福利

立即註冊,免費領取新人福利大禮包,高達1,000USDT合約贈金在等您!