比特幣UTXO模型介紹-如何解讀比特幣交易
前言
如果你曾上過BlockExplorer觀察自己的比特幣入金狀況,你是否曾經被搞的一頭霧水呢?這正是因為比特幣所使用的交易模型並非我們直覺的Account Base,而是一種叫做UTXO的模型。在我的前一篇文章:深入了解NEX: Neon Exchange中,也提到了比特幣所使用UTXO Model與乙太坊使用的Account Model在功能上的一些差異,但究竟這兩個Model到底差在哪兒?
(Image Source:LifeWire.com)
ETH與Account Model
乙太坊所使用的Account Model比較容易理解,就好像我們每個人都擁有一個銀行帳戶一樣。在ETH的世界中,每個地址就像是一個帳戶,每一次的扣款、交易過後,都會將帳戶的餘額紀錄在區塊鍊當中。因此在認證交易時只要檢查帳戶是否有足夠的餘額就可以了。這個方法簡單、直觀,較利於智能合約的開發。
如果你層上過Etherscan觀察你的交易紀錄,也會發現一切都簡單好懂。輸入你的交易id之後你會看到這種畫面:
簡單的From A To B,這只要看得懂英文應該就可以理解了。
比特幣與UTXO Model
UTXO全名是Unspent Transaction Outputs,相較於Account Model比較沒那麼直觀。
在比特幣的世界裡,並沒有一個紀錄所有帳戶餘額的帳本。那麼要怎麼確定一個地址現在有多少餘額呢?簡單的說,你要回顧以前所有的交易,並且找到所有寄給你的Bitcoin,再把他們全都加起來,才會知道。
交易中的Input與Output
幣特幣中的一筆「交易」也較為複雜:假設今天,Fred給了Alice 2個BTC、Ted給了Alice 3 個BTC,我們把這兩筆寄給Alice,總和為5的BTC稱為Unspent Transaction Outputs
:也就是說現在Alice擁有了兩筆Unspent Transcation Outputs,可以當作他未來轉錢給別人的Input
。
如果現在Alice想要轉5 BTC給Bob,他要將前面兩筆總和剛好為5的UTXO當作這筆交易的Input。而礦工要驗證的就是並沒有其他交易在先前的區塊當中,已經使用過這筆Unspent Output。如果同一筆Output已經被發送過,那它就不是Unspent了,這就是比特幣預防Double Spending的方法。
(Image source: YouTube: How Bitcoin Works Under the Hood)
還有一個條件就是,Output跟Input總數要吻合。實際上在交易的時候,並不可能剛剛好總是找到兩筆加起來等於你要轉出金額的Output,就好像上圖中,如果Alice只想轉4.5個BTC給Bob,那麼他就要多加一欄的output,把多出來的0.5個BTC轉給自己,這樣的交易才是平衡的。
我們可以實際來看看比特幣的交易長什麼樣子。我們現在如果想要觀察BlockExplorer上自己的交易紀錄,會發現他長的這付德性:
一筆Transaction包含了大量的Input與Output,這很有可能是一筆交易所出金的紀錄,所有含有很多的Output。而左邊的Input則可能是大量入金交易所錢包的交易Output。
有趣的是,我們實際上在一筆交易之中無法「確定」真正的交易金額。例如下面這一筆紀錄中,右邊包含了三個output,我們無法確定究竟0.2、0.03以及56.38三個output究竟哪一個才是真正的目的地。搞不好Alice只有一筆Unspent Transaction Output 56.61 BTC,因此他在這筆交易中雖然他只想要轉0.2BTC,卻必須要動用他唯一一筆UTXO,而剩下的56.38再轉回給自己。
當然,現在的比特幣錢包已經幫我們Take Care這些事情了,所以在使用的時候就好像銀行帳戶一樣,我們只要輸出目的地址,錢包就會幫我們找出合適的Unspent Output當作Input來完成交易。但如果你很閒,或是要洗錢之類的,就可以自己來打包奇怪的input output來增加匿名性。
UTXO的優勢與劣勢
UTXO因為沒有帳戶的存在,因此容許平行進行多筆交易。假如你有許多的UTXOs,你可以同時進行多筆Transaction而不會被阻擋。再來就是匿名性,如上面提過得,你可以輕易的隱藏自己的交易目的。除此之外,UTXO也被認為比較安全且有效率,可以透過Simple Payment Verification (SPV)來快速驗證檢驗交易。
但UTXO最大的缺點就在於他是"Stateless"的,這對於其上應用程式開發非常的不利。就像有名的Qtum雖然底子是UTXO的交易模式,但是仍然會設計Account Abstraction Layer來讓應用程式開發變得容易。
小結
現在區塊鍊應用開發當道,UTXO叫傾向被大家視為一種只能簡單處理交易的模型,我覺得一定程度上算是時代的產物吧!畢竟離比特幣的發明也已經十年了,儘管有一些特性是無可取代,但是大家仍是偏好朝向Account Model或是混合式的架構前進。
但不論怎麼說,比特幣永遠都是區塊鍊世界的老大!而且現在大家免不了還是要用到BTC交易,所以我們還是有義務要了解UTXO運作方式的!
總之,希望這篇文章可以對大家對比特幣有深一點的理解啦!如果喜歡我的文章,可以Follow我@antonsteemit,這個寒假會努力產出一些區塊鍊相關的文章。如果我有寫錯或是不清楚的地方,也歡迎在留言中指正或一起討論呦!
原來你寫過UTXO,寫的還不錯呢!排在我google UTXO+Steemit的第一位喔!
說的很好,讓我有一種恍然大悟的感覺
感謝支持xD 還怕大家聽不懂呢
確實,專業性的文章有些難理解,畢竟有些專業詞彙以前都沒有接觸過
This post has received a 1.56 % upvote, thanks to: @antonsteemit.
You got a 1.85% upvote from @allaz courtesy of @antonsteemit!
Congratulations! This post has been upvoted from the communal account, @minnowsupport, by Antonasso from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, theprophet0, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.
If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.
您好,我是區塊鏈媒體BlockTempo動區動趨的編輯,十分欣賞您對比特幣UTXO模型的解釋,清晰易懂,是否有機會篇修轉載該篇文章至我們的網站中,我們會在開頭附上作者出處與連結