定義
UTXO 是 Unspent Transaction Outputs(未使用的交易輸出) 的縮寫,每一個比特幣其實都是 UTXO,它是比特幣的最核心概念之一。
在比特幣系統上其實並不存在“賬戶”,而只有“地址”。只要你願意,你就可以在比特幣區塊鏈上開設無限多個錢包地址,你擁有的比特幣數量是你所有的錢包地址中比特幣的總和。比特幣系統並不會幫你把這些地址匯總起來形成你的賬戶。
從以上討論中我們可以看到,的確不存在比特幣,只有未使用的交易輸出(UTXO)。每一筆比特幣都源自上一個交易,可以一直向上追溯上去。而一直向上追溯,在每一筆比特幣的源頭,都有一種特殊的交易,即比特幣礦工因挖礦獲得獎勵的創幣交易,每一個比特幣都是通過挖礦被創造出來的。假設我作為比特幣礦工挖礦成功贏得了 25 個比特幣,那么這個特殊交易是,它的輸入是 0,而輸出是 25 個比特幣進到礦工的錢包地址中。
優點
UTXO設計易於確認比特幣的所有權
如果采用傳統的賬戶設計,當我要轉賬 8 個比特幣出去時,為了完全避免造假,我們就需要逐一向上追溯,確認之前的每一筆交易,從而證明我的確擁有 8 個比特幣。
采用現在的 UTXO 設計,要確認我擁有 8 個比特幣,只要確認上一個交易我的確獲得了它們即可。通常只要上一個交易是真實的,我就的確擁有這些比特幣。而我們都知道,一個區塊經過 6 次確認,其中的交易可被認為是真實無誤的。
UTXO設計與區塊鏈賬本是完全融為一體的
區塊鏈賬本存儲的是狀態。以太坊是對比特幣區塊鏈的改進,在白皮書中,以太坊創始人維塔利克分析了比特幣,他認為,“比特幣賬本可以被認為是一個狀態轉換系統(state transition system)”。以太坊也是采用這種狀態轉換系統的設計,但對之進行了改進。
微觀地看,每一個區塊鏈中的交易都是一個狀態轉換函數,以太坊白皮書就用“以太坊狀態轉換函數”(Ethereum state transition function)來討論在區塊鏈上一個交易的進行過程。
為什么采用UTXO的形式
UTXO 與我們熟悉的賬戶概念的差別很大。我們日常接觸最多的是賬戶,比如,我在銀行開設一個賬戶,賬戶里的余額就是我的錢。
但在比特幣網絡中沒有賬戶的概念,你可以有多個錢包地址,每個錢包地址中都有着多個 UTXO,你的錢是所有這些地址中的 UTXO 加起來的總和。
中本聰發明比特幣的目標是創建一個點對點的電子現金,UTXO 的設計正可以看成是借鑒了現金的思路:我們可能在這個口袋里裝點現金,在那個櫃子角落里放點現金,在這種情況下不存在一個賬戶,你放在各處的現金加起來就是你所有的錢。
采用 UTXO 設計還有一個技術上的理由,這種特別的數據結構可以讓雙重花費更容易驗證。對比一下:
- 如果采用賬戶和賬戶余額設計,Alice 要轉賬給 Bob,為了確保 Alice 的確有錢,我們需要核查她之前所有的交易。隨着時間的推移,比特幣的交易越來越多,這個驗證的難度會持續上升。
- 采用 UTXO 設計,我們只要沿着每個交易的輸入逐級向上核查,直到查到這筆比特幣的創幣交易即可。隨着時間的推移,這個核查也會變難,但變難的速度要遠低於采用賬戶和賬戶余額設計。
這種設計使得比特幣系統作為一種電子現金系統有着非常大的可擴展性。當然,我們很快會看到,通常被認為是區塊鏈 2.0 的以太坊沒有繼續采用 UTXO 設計,而是考慮到其他因素,采用了賬戶余額的設計,其代價正是中本聰可能已經考慮到的復雜性。