什么是UTXO
? ? ? ?上一篇文章簡(jiǎn)單說(shuō)了下區(qū)塊鏈和比特幣之間的關(guān)系芥被,在講解比特幣詳細(xì)的交易流程之前,我們先來(lái)說(shuō)說(shuō)比特幣的交易結(jié)構(gòu)纫溃。
? ? ? ?曾經(jīng)在讀相關(guān)的介紹文章時(shí)沪羔,看到過(guò)這樣一句話,叫做“沒(méi)有比特幣葵姥,只有UTXO”,UTXO的全稱(chēng)是Unspent Transaction Output 翻譯成中文就是未花費(fèi)的交易輸出荷鼠,是比特幣特有的一種賬戶結(jié)構(gòu)。
? ? ? ? 當(dāng)我們?cè)诂F(xiàn)實(shí)生活中進(jìn)行資金交易的過(guò)程中榔幸,整個(gè)交易的流程往往是這樣的允乐,小黃得到了現(xiàn)金10元矮嫉,轉(zhuǎn)給小牛2元,那么小黃的賬戶在現(xiàn)有基礎(chǔ)上減去2元牍疏,小牛的加上2元蠢笋;小牛和小黃又分別轉(zhuǎn)給小王1元,小牛和小黃的賬戶分別減去1元麸澜,在小王的賬戶上加上2元挺尿,整個(gè)交易過(guò)程如下圖所示。
? ? ? ? 而在比特幣交易中炊邦,我們是這樣記賬的编矾。依然是剛才的流程,小黃通過(guò)挖礦獲得了10比特幣馁害,他向小牛轉(zhuǎn)了2比特幣窄俏。后來(lái)小牛和小黃又各自向小王轉(zhuǎn)了1比特幣。整個(gè)交易流程如下圖碘菜。
? ? ?而三個(gè)人的比特錢(qián)包地址中只記錄了這幾筆交易的流水凹蜈,并沒(méi)有余額的概念,如下圖忍啸。
? ? ? ?每一個(gè)比特幣交易都有若干個(gè)輸入和輸出組成计雌,輸入直白點(diǎn)講就是你拿什么證明你能拿出這些比特幣來(lái)給別人悄晃,那么這個(gè)證明就是前一個(gè)人給你的轉(zhuǎn)帳記錄。
? ? ? ?小黃的比特幣錢(qián)包地址中有兩種交易類(lèi)型凿滤,Coinbase是一種比較特殊的交易妈橄,是指小黃挖礦后的獲得的獎(jiǎng)勵(lì),這種交易實(shí)際上是沒(méi)有輸入只有輸出的翁脆,輸出的就是挖礦者小黃的比特幣錢(qián)包地址眷蚓,小黃此時(shí)要向小牛轉(zhuǎn)2個(gè)比特幣,那么輸入就是小黃挖礦得來(lái)10比特幣的這個(gè)交易反番,輸出2個(gè)比特幣給小牛沙热,另外轉(zhuǎn)8個(gè)比特幣給自己。輸出的數(shù)量必須小于等于輸入的數(shù)量恬口,若沒(méi)有把多余的比特幣轉(zhuǎn)回給自己校读,那么很可能會(huì)作為手續(xù)費(fèi)獎(jiǎng)勵(lì)給記賬的礦工。后續(xù)流程類(lèi)似祖能,小牛轉(zhuǎn)給小王1比特幣的輸入是小牛從小黃那得到的2比特幣。這樣包含若干輸入和輸出得交易數(shù)據(jù)結(jié)構(gòu)被稱(chēng)為UTXO即未花費(fèi)的交易輸出蛾洛。數(shù)據(jù)庫(kù)中有專(zhuān)門(mén)的表記錄UTXO养铸,一旦未花費(fèi)得作為輸入產(chǎn)生了其他輸出雁芙,則輸入交易就從UTXO表中刪除。
為什么這樣做钞螟?
? ? ? ?那么中本聰為什么要采用UTXO而不是賬戶體系呢兔甘,筆者能考慮的一個(gè)比較直接的好處是交易可以并行處理,舉個(gè)例子鳞滨,在銀行的賬戶體系下洞焙,如果你和你男朋友都想操作他的某個(gè)銀行卡賬戶,這兩筆交易的處理時(shí)有先后的拯啦,例如澡匪,你想從你男朋友的賬號(hào)里面轉(zhuǎn)200塊出來(lái),而你男朋友想向賬戶里存100元褒链。在他操作存款的時(shí)候唁情,你操作了轉(zhuǎn)出200元,那么頁(yè)面上你也許看著是操作成功甫匹,進(jìn)入銀行處理狀態(tài)了甸鸟,但是銀行在真實(shí)處理這兩筆交易時(shí)是有明確的先后順序的,如果你男朋友并不是存錢(qián)兵迅,而是將錢(qián)都取出來(lái)抢韭,那么過(guò)一會(huì),你就會(huì)收到支付平臺(tái)返回的操作失敗的操作了恍箭,因?yàn)椴](méi)有足夠的余額供你轉(zhuǎn)出刻恭。而UTXO并不存在這樣的問(wèn)題,只要每筆錢(qián)都有來(lái)源季惯,且來(lái)源是未被用過(guò)的吠各,那么多少個(gè)操作同時(shí)向一個(gè)地址轉(zhuǎn)帳,或者從同一個(gè)地址轉(zhuǎn)出也是沒(méi)關(guān)系的勉抓。