区块链100篇之第五篇--UTXO
第一次看到UTXO是去年10月份的時候在一個微信群上有一個人說了一句話,說:”只要理解了UTXO就理解了比特幣“,雖然這話有點夸大了,畢竟比特幣并不只有UTXO這個技術,涉及到的東西還是很多的,但可以把這句話改成”只要理解了UTXO就能理解比特幣的去中心化的含義“,因為UTXO區別于我們傳統上的交易都是基于賬戶模型的,它是中本聰發明的交易模型,暫且叫UTXO模型,理解了UTXO的交易模型就能明白為什么比特幣是去中性化的。
什么是UTXO?
UTXO的全稱叫Unspent Transaction Output,因為外國人習慣把Translation叫做TX,所以就簡稱為UTXO,中文翻譯過來就是“未消費的交易輸出”,從字面上的意思可以從兩點入手來理解,第一是:未消費;第二是:輸出。
未消費就是還沒有花出去的,這就好比你現在手上有一張十塊跟一張五塊,這時候你去吃個飯花了十塊,那么你手上就只剩五塊了,而這五塊就是未消費的。
什么是輸出?剛開始看到這兩個字時可能會有些疑問,輸出意味著拿出去,也就是花出去,那都花出去了怎么能叫未消費呢?按正常的邏輯確實講不通,但可以換個思路。既然有輸出那自然對應的就會有輸入,那什么是輸入呢?輸入就是交易時的給那筆錢,舉個例子,本來你打算只吃十塊錢的飯,但是你發現只要再加兩塊錢就可以多加一個雞腿,于是你改變主意想吃十二塊的飯,這時你手里只有一張十塊的跟一張五塊的,沒有兩張一塊的,于是你就拿著十塊跟五塊給老板。這里的十塊跟五塊就是你跟老板之間的交易的輸入,然后老板就把飯打給你,接著還找了三張一塊錢的給你,這里的三張一塊錢便是輸出,而且這三張一塊錢你還沒有花出去,也就是“未消費”,那么就可以把這三張一塊錢稱為“UTXO”。
這里可以給UTXO下個簡單的定義:UTXO = 一筆交易的總輸入 - 在這筆交易中花費了多少錢(包括手續費)。為什么說是簡單的定義,因為UTXO也有可能是挖礦得到的,比如中本聰挖的第一個區塊(也就是創世區塊)得到的50個比特幣,這50比特幣就是UTXO,所以說我剛才的定義并不準確,我下的定義是排除了挖礦這種情況,只在正常的交易過程中適用。到這里你可能會有些疑問,第一,你付給老板的那十二塊算不算UTXO?這個問題需要單獨寫一篇才能說明白,也就是比特幣的找零機制,留到第十篇講,這里先說一下為什么不能簡單的說那十二塊是不是UTXO,在概念層面上,答案是肯定的,因為這十二塊就是“未消費的輸出”,但是在實際上我們并不能將你付給老板的那一張十塊跟一張五塊拆開來,你不能把那張五塊錢撕成兩半,一半代表兩塊錢一半代表三塊錢,這個在現實世界里是做不到的,但是在比特幣的世界里卻是很輕松,這個之后再詳細講;第二,既然UTXO可以作為交易的輸入,那么交易完成后這個UTXO如何處理,答案是銷毀,一旦交易被確認并記錄到比特幣的區塊中,那么這個UTXO就會被永久的銷毀掉。
比特幣是如何通過UTXO實現交易的?
大概明白了什么是UTXO,那么就來講講UTXO的交易過程是怎樣的。為了理解我們可以舉個現實交易的例子,現在我要轉一百塊錢到你的賬戶去,基本的過程是這樣的,銀行會先檢查我的賬戶里的余額有沒有大于等于一百塊,如果有那么就會將我的賬戶減去100,接著會在你的賬戶上增加一百,這個過程看起來很容易理解,因為銀行確實就是這么干的,但是這里要注意的就是在你我之間存在著一個中心機構,它幫我們進行賬戶的驗證以及轉賬的操作,但是在比特幣的世界里是沒有中心機構的,那么它是如何做到即使沒有中心機構依然可以讓交易順利的進行?
假設我現在手里總共有十個比特幣,這個十個比特幣可能是很多個UTXO組成的,比如0.1BTC,0.5BTC,3BTC,0.0123BTC,6.18BTC,0.2077BTC,這些UTXO總共加起來有10個BTC,這個時候我想轉3.55個BTC給你,那么這個時候交易的輸入就是0.1BTC,0.5BTC,3BTC,而交易輸出就是3.55BTC跟0.05BTC,其中3.55BTC這個UTXO會使用你的公鑰進行“鎖定”,而0.05BTC的UTXO會使用我的公鑰進行“鎖定”(這里涉及到非對稱加密,可以看我的第二篇博客),一旦被腳本鎖定就說明這個比特幣是屬于誰的,因為只有擁有公鑰對應的私鑰的人才能進行解鎖。到這里我的賬戶上的比特幣總量是6.45個比特幣,分別是0.0123BTC,6.18BTC,0.2077BTC跟0.05BTC,注意到沒,這里我賬戶“余額”并不是6.45BTC,而是被我(所有者)鎖住的、分散的UTXO,在比特幣世界里并沒有所謂的“余額”,只有UTXO,我們平常所說的比特幣“余額”多少,是通過掃描區塊鏈并聚合所有屬于該用戶的UTXO來計算該用戶的余額。注意到這里你我之間并沒有任何的第三方介入,純粹就是我們兩人之間的交易而已,這邊是去中心化。
UTXO有什么優點?
看完上面可能會云里霧里,你可能會說這不就跟我們現實生活中給錢差不多嘛,假如現在我有五張一塊錢的,現在我需要給你兩塊錢,我直接把兩張一塊錢的給你就行了,這其中也不需要什么人來介入,我們兩個人就可以搞定這筆交易。
確實是這樣,但是區別就在于UTXO是可分割的,假如現在你要我給你兩塊五而不是兩塊,但我現在并沒有五毛,我沒辦法將一塊錢撕成兩半,所以這筆交易在現實中就比較難達成,但是UTXO就不一樣了,它可以切割到小數點后八位,比如可以有0.00023546BTC,所以基本可以滿足大部分的交易需求,可以這么說,UTXO使得比特幣既解決了傳統現金不可分割的問題也避免了傳統電子貨幣的中心化弊端,是去中心化的電子現金。
總結
以上是生活随笔為你收集整理的区块链100篇之第五篇--UTXO的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity 坐标 转换 详解 Worl
- 下一篇: IPv6 地址数量有多少,能够分配到地球