資深程序員告訴你您单,什么是UTXO斋荞?為什么沒有比特幣余額只有UTXO?

在沒有比特幣虐秦,區(qū)塊鏈之前是沒有UTXO這個詞語的凄敢。
要說清楚UTXO是什么唱凯?先給大家介紹兩個知識點报腔,一是什么是交易偎谁,二是什么是賬號模型

1、 什么是交易

交易比較好理解俺驶,英文是Transaction 被簡稱為 TX幸逆。以我們平時對交易的理解,李四給張三轉(zhuǎn)賬了一筆50塊錢暮现,那就是李四的賬上的錢少了50塊还绘,張三賬上的錢多了50塊;張三再想王五轉(zhuǎn)賬50元送矩,這樣的過程就叫做交易蚕甥,那么在計算機中怎么來記錄和保存這筆交易呢?

2栋荸、 什么是賬號模型

現(xiàn)在的銀行系統(tǒng)菇怀、證券交易系統(tǒng)、互聯(lián)網(wǎng)第三方支付系統(tǒng)等晌块,其核心都是基于賬戶的設計爱沟,由關(guān)系數(shù)據(jù)庫比如MySQL,Oracle來支撐的匆背。這是最直接最直觀符合人類思維的方式呼伸。
為了照顧沒有計算機和數(shù)據(jù)庫基礎知識的讀者,簡單介紹下數(shù)據(jù)庫知識。

數(shù)據(jù)庫指的是以一定方式儲存起來括享,能為多個用戶共享搂根,與應用程序彼此獨立的數(shù)據(jù)集合。簡單來說可視為電子化的表格铃辖,用戶可以對表格中的數(shù)據(jù)運行新增剩愧、更新、刪除等操作娇斩。

可以看出仁卷,關(guān)系數(shù)據(jù)庫可以簡單理解成一張表格。那么對于賬戶模型的數(shù)據(jù)庫犬第,簡單來講可以設計成兩個張表格:

  1. 賬戶表
  2. 交易記錄表

1 簡化的賬戶表格如下锦积,用來記錄所有人的銀行卡號及余額信息,實際情況會復雜很多:

編號 開戶人 開戶卡號 余額
1 張三 62xxx001 100
2 李四 62xxx002 100
3 王五 62xxx003 100
... ... ... ...

2 交易記錄表如下歉嗓,用來記錄所有的轉(zhuǎn)賬記錄

編號 轉(zhuǎn)賬人 接收人 轉(zhuǎn)賬金額
... ... ... ...

以上面李四給張三轉(zhuǎn)賬50元為例丰介,交易記錄表格,新增一條轉(zhuǎn)賬記錄如下:

編號 轉(zhuǎn)賬人 接收人 轉(zhuǎn)賬金額
1 李四 張三 50

同時需要在賬號表格中做下余額修改鉴分,修改后的賬戶表格為

編號 開戶人 開戶卡號 余額
1 張三 62xxx001 150
2 李四 62xxx002 50
3 王五 62xxx003 100
... ... ... ...

張三給王五轉(zhuǎn)賬50元后基矮,兩張表格的編號如下:

編號 轉(zhuǎn)賬人 接收人 轉(zhuǎn)賬金額
1 李四 張三 50
2 張三 王五 50

修改后的賬戶表格為

編號 開戶人 開戶卡號 余額
1 張三 62xxx001 100
2 李四 62xxx002 50
3 王五 62xxx003 150
... ... ... ...

3、什么是UTXO模型

上面的賬戶模型其實是人最直觀冠场、直接,容易理解的本砰。那么還有其他的方式來表示交易碴裙?中本聰設計的UTXO就是一種表示交易的方式。

UTXO是Unspent Transaction Output(未花費交易輸出)的簡寫点额,transaction 被簡稱為 TX舔株,所以上面這個短語縮寫為 UTXO。上面的賬戶模型是兩張表格組成还棱,UTXO經(jīng)過巧妙的設計不需要傳統(tǒng)的關(guān)系數(shù)據(jù)庫來支撐载慈,UTXO被翻譯成未消費交易輸出,由點拗口珍手,怎么理解呢办铡?
我們知道比特幣是挖出來的,假設張三琳要、李四寡具、王五都挖出了100個比特幣


張三.png
李四.png
王五.png

同樣,以上面李四給張三轉(zhuǎn)賬50元為例


李四給張三轉(zhuǎn)賬50元.png

張三給王五轉(zhuǎn)賬50元后


張三給王五轉(zhuǎn)賬50元.png

解釋下上面的幾個圖的意思稚补。
比特幣的區(qū)塊鏈賬本里記錄的是一筆又一筆的交易童叠。每筆交易都有若干交易輸入,也就是資金來源课幕,也都有若干筆交易輸出厦坛,也就是資金去向五垮。一般來說,每一筆交易都要花費(spend)一筆輸入杜秸,產(chǎn)生一筆輸出放仗,而其所產(chǎn)生的輸出,就是“未花費交易輸出”亩歹,也就是 UTXO匙监。
挖礦所得的獎勵叫做coinbase,沒有輸入來源小作,所以張三亭姥、李四、王五的100個幣(為方便說明為100個顾稀,實際上根據(jù)減半機制达罗,比特幣在2018每個區(qū)塊獎勵是12.5個)均來自于挖礦,假設TX hash編號分別為0x001静秆,0x002粮揉,0x003。

李四給張三轉(zhuǎn)50個幣抚笔,轉(zhuǎn)賬交易的hash編號為0x004扶认,輸入的TX編號為0x001和0x002,輸出為張三150個幣殊橙,李四為50個幣辐宾。注意這里忽略了交易打包費。

在后來膨蛮,張三要給王五轉(zhuǎn)50個幣叠纹,轉(zhuǎn)賬交易的hash編號為0x005,聰明如你應該能猜出來敞葛,輸入是0x003和0x004誉察,輸出為張三100幣,王五150個幣惹谐。同樣這里忽略了交易打包費持偏。

由此,可以看出UTXO交易遵守下面規(guī)則:

  1. 除了 coinbase 交易之外豺鼻,所有的資金來源都必須來自前面某一個或者幾個交易的 UTXO综液,就像鏈條一樣,一個接一個儒飒,錢就在交易之間流動起來了谬莹。
  2. 任何一筆交易的交易輸入總量必須等于交易輸出總量,等式兩邊必須配平。

至此你應該能明白為什么有人說:比特幣網(wǎng)絡中沒有賬戶附帽,只有地址埠戳;比特幣不是余額,而是UTXO蕉扮。
你也能理解為什么你想看到比特幣錢包的最新余額整胃,必須要同步到最高的區(qū)塊高度才能正確顯示。

4喳钟、為什么要設計UTXO模型屁使?

4.1 賬戶模型的缺點

講點題外話:其實人的認知對于大與小的概念是不夠的。0.001秒對于人來講是一個很短很短的時間奔则,但是對于計算機來講是一個很長的時間蛮寂,在計算機世界可能相當于人類的1天。當我們嘲笑魚的記憶只用7秒的時候易茬,如果計算機有意識的話酬蹋,可能也會嘲笑人類的記憶最長也只有幾十年,因為計算機的存儲時間理論上來講是無限長的抽莱。

先給大家解釋下計算機基礎知識范抓。
筆者前面的文章解釋了圖靈機(http://www.reibang.com/p/c07d83c4f3a1),其實我們現(xiàn)在的所有計算機都是圖靈機食铐,從圖靈機的模型我們知道要修改一個數(shù)據(jù)匕垫,比如銀行卡余額增加100元,需要做三步:
1虐呻,先從賬戶中讀出余額
2年缎,把余額值增加100元得出新的余額值
3,把新的余額寫到賬戶中
在三步計算機操作在我們?nèi)丝磥硎撬查g(比如0.0001秒)完成铃慷,但是在計算機內(nèi)部其實要花一定時間的,它是一個分步驟完成蜕该,在多個CPU時鐘內(nèi)完成的犁柜。

對于賬戶模型,我們在上面已經(jīng)了解到堂淡,需要有兩張表格馋缅,轉(zhuǎn)賬過程中,要保證等式兩邊必須配平绢淀。所以發(fā)出去的交易是給某個帳戶加錢萤悴,同時要給另外一個賬戶減錢,即要對兩個賬戶的數(shù)據(jù)進行修改皆的,如果交易因為網(wǎng)絡等原因重新發(fā)送覆履,變成兩筆交易重復扣錢,這是在區(qū)塊鏈里面著名的“重放攻擊”。
在分布式系統(tǒng)中硝全,要保證加錢栖雾,減錢兩個同時完成,就需要實現(xiàn)分布式事務伟众,相信做個編程的同學就知道這是一個非常非常難析藕,非常消耗資源的一個事情,也是非常容易出現(xiàn)漏洞的地方凳厢,以太坊采用就是賬戶模型账胧,所以以太坊智能合約經(jīng)常由于編程不當引起被盜幣的事情發(fā)生

4.2 比特幣是沒有開戶的過程的,只有地址先紫。

去中心化系統(tǒng)沒有專門的機構(gòu)去讓人申請每個賬戶的生成和銷毀治泥,這樣的系統(tǒng)也無需記錄和跟蹤所有賬戶的信息,以UTXO來替代跟蹤帳戶交易的方式泡孩,消耗的系統(tǒng)資源會比較少 车摄,只要跟蹤UTXO即可,且不可篡改仑鸥。

4.3 更好匿名性

比特幣有個比較好的特性是匿名性吮播,可以每次交易就換一對公私鑰,交易輸出的給自己的找零往往輸出到一個另外的帳戶下去眼俊,UTXO迎合了這種需求意狠,如門羅幣就是采用混幣的方式實現(xiàn)隱私的。而使用帳戶模型就沒那么靈活了疮胖。

4.4 更好的并行處理

UTXO是獨立的數(shù)據(jù)結(jié)構(gòu)环戈,理論上來說可以并行地利用不同的 UTXO 簽發(fā)多筆交易,并廣播到網(wǎng)絡中澎灸,而不用考慮事務問題院塞;

4.5 占用空間小

去中心化系統(tǒng)考慮是全世界人民可以使用,開多個地址性昭,長期來看拦止,UTXO不會因為地址的增多而增加額外的空間,所以數(shù)據(jù)占用更小糜颠,而賬戶模型會越來越臃腫汹族。

5、從UTXO得到的啟發(fā)

5.1 跳出大眾思維其兴。比特幣作為一種點對點的電子貨幣系統(tǒng)顶瞒,跳出傳統(tǒng)貨幣系統(tǒng)的賬戶模型設計,采用了一種全新的方式元旬,用最低的成本榴徐,解決很多分布式問題守问。

5.2 找出等價性,越簡單越美箕速。 等價性是一種很厲害的解決問題的方式酪碘,在計算機領(lǐng)域有很多等價性的例子,比如用二進制來等價十進制盐茎,解決機械運動直接計算10進制非常復雜的情況兴垦;又比如把人工智能問題等價成數(shù)學問題。UTXO把賬戶交易用一種簡單的模型進行等價字柠,雖然不符合人常規(guī)思考方式探越,但非常簡單,非常具有美感窑业。

5.3 要學會某些妥協(xié)钦幔。 比特幣設計之初就是給全世界人民使用的,并且要具有去中心化常柄、可溯源鲤氢、不可篡改、匿名等特效西潘,就必須要所妥協(xié)卷玉,比如UTXO設計要實現(xiàn)EVM功能就非常困難,即實現(xiàn)圖靈完備的智能合約非常難喷市。這也是以太坊沒有采用UTXO模型的主要原因相种。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市品姓,隨后出現(xiàn)的幾起案子寝并,更是在濱河造成了極大的恐慌,老刑警劉巖腹备,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衬潦,死亡現(xiàn)場離奇詭異,居然都是意外死亡植酥,警方通過查閱死者的電腦和手機别渔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惧互,“玉大人,你說我怎么就攤上這事喇伯『袄埽” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵稻据,是天一觀的道長艾猜。 經(jīng)常有香客問我买喧,道長,這世上最難降的妖魔是什么匆赃? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任淤毛,我火速辦了婚禮,結(jié)果婚禮上算柳,老公的妹妹穿的比我還像新娘低淡。我一直安慰自己,他們只是感情好瞬项,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布蔗蹋。 她就那樣靜靜地躺著,像睡著了一般囱淋。 火紅的嫁衣襯著肌膚如雪猪杭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天妥衣,我揣著相機與錄音皂吮,去河邊找鬼。 笑死税手,一個胖子當著我的面吹牛蜂筹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冈止,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼狂票,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了熙暴?” 一聲冷哼從身側(cè)響起闺属,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎周霉,沒想到半個月后掂器,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡俱箱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年国瓮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狞谱。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡乃摹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出跟衅,到底是詐尸還是另有隱情孵睬,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布伶跷,位于F島的核電站掰读,受9級特大地震影響秘狞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蹈集,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一烁试、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拢肆,春花似錦减响、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至移盆,卻和暖如春悼院,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咒循。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工据途, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叙甸。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓颖医,卻偏偏與公主長得像,于是被迫代替她去往敵國和親裆蒸。 傳聞我的和親對象是個殘疾皇子熔萧,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容