比特幣網(wǎng)絡(luò)不是賬本/余額模型,而是UTXO模型,UTXO是比特幣交易生成及驗證的一個核心概念。交易構(gòu)成了一組鏈式結(jié)構(gòu),所有合法的比特幣交易都可以追溯到前向一個或多個交易的輸出,這些鏈條的源頭都是挖礦獎勵,末尾則是當前未花費的交易輸出。所有的未花費(使用)的輸出即整個比特幣網(wǎng)絡(luò)的UTXO。什么是UTXO呢?
TX是Transaction(交易)的縮寫,TXO即為 TX output(交易輸出):包含一個value值和一段腳本,該腳本規(guī)定了誰有權(quán)使用這筆交易(比如需要私鑰簽名)。UTXO就是Unspent TXO(未花費的交易輸出),比特幣網(wǎng)絡(luò)規(guī)定,只有對“尚未使用過”的交易簽名才能是有效簽名。每筆交易都有若干交易輸入,也就是資金來源,也都有若干筆交易輸出,即資金去向。一般來說,每一筆交易都要花費(spend)一筆輸入,產(chǎn)生一筆輸出,而其所產(chǎn)生的輸出,就是“未花費過的交易輸出”,也就是 UTXO。
比特幣交易遵守以下規(guī)則:
1、所有的資金來源都必須來自前面某一個或者幾個交易的 UTXO,歷史交易出入相接,生生不息,錢就在交易之間流動起來了。
2、任何一筆交易的交易輸入總量必須等于交易輸出總量,等式兩邊必須配平。
數(shù)字貨幣無法像金屬貨幣(比如黃金)那樣,僅靠物理轉(zhuǎn)移即可轉(zhuǎn)移所有權(quán)————即當A將一份黃金交給B后,A必然不再擁有這份黃金。
而A將一份數(shù)字貨幣轉(zhuǎn)給(簽名)B后,A仍可以把同一筆交易轉(zhuǎn)給C,因為A掌握私鑰,這兩份簽名均為有效簽名,這就構(gòu)成了“雙花”。以往的密碼學貨幣無法有效解決雙花問題,因而無法擺脫對第三方中心化機構(gòu)認證的依賴(第三方信任)。因此必須有一種機制來確保每筆交易只能使用一次,即只有對“尚未使用過”的交易簽名才能是有效簽名。
比特幣規(guī)定每一筆新的交易的輸入必須是某筆交易未花費的輸出,每一筆輸入同時也需要上一筆輸出所對應(yīng)的私鑰進行簽名,并且每個比特幣的節(jié)點都會存儲當前整個區(qū)塊鏈上的UTXO,整個網(wǎng)絡(luò)上的節(jié)點通過UTXO及簽名算法來驗證新交易的合法性。這樣,節(jié)點不需要追溯歷史就可以驗證新交易的合法性。
UTXO模型的好處是:
可擴展性 - 由于可以同時處理多個UTXO,因此可以實現(xiàn)并行事務(wù)并鼓勵可伸縮性創(chuàng)新。
隱私 - 甚至比特幣也不是一個完全匿名的系統(tǒng),但只要用戶為每筆交易使用新地址,UTXO就可以提供更高級別的隱私。 如果需要增強隱私性,可以考慮更復(fù)雜的方案,例如環(huán)簽名。
相比使用賬戶/余額模型的以太坊來說,這種模型的復(fù)雜度更高,效率也不及后者,但對于雙花攻擊的抗性更強。目前除了比特幣,也有一些其他的區(qū)塊鏈開始推廣這種模型,例如Hyperledger,理由也正如前述,允許并行處理多個交易,同時可以保護隱私。但反對使用UTXO模型的人認為,UTXO在實際運行中會比理論上產(chǎn)生更大的復(fù)雜性,而這可能是沒必要的,而且由于其無狀態(tài)性,和智能合約的契合性不好。