一、什么是UTXO? UTXO(Unspent Transaction Output)指未花費的交易輸出。 每筆比特幣交易都有輸入和輸出,別人付給你的錢是“交易輸入”,你收到的錢是“交易輸出”。 ![]() 你一定會奇怪,你收到的錢明明放在賬戶里沒動,為什么會被叫做“輸出”? 對,這就是“輸出”,只不過是“未花費的交易輸出”。一旦你支付出去,就是真正的“交易輸出”。 如果xxx昨天轉你1.5個比特幣,交易是這樣的: 綠箭頭左右兩側,分別是xxx和你的地址。 注意:地址看起來像賬戶,但它不是賬戶,因為賬戶的另一頭對應你的姓名和密碼,而地址的另一頭卻只有公鑰和私鑰。 換句話說,比特幣系統根本不認識持幣者是誰,它只認識私鑰和公鑰。 那么飄來一個問題:xxx轉給你你1.5個比特幣,你的地址收到幣的一瞬間,余額是多少? 答案是:沒有余額。 這1.5個比特幣不是余額,而是你地址里的未花費交易輸出(UTXO)。 xxx賬戶之所以沒有余額,不是因為沒有幣,而是比特幣系統沒有“賬戶”一說,只有“地址”的概念。“賬戶”對應“余額”;而“地址”只對應UTXO。 你一定會更奇怪,余額和UTXO都代表擁有的財富,不就是一回事么? 其實,看起來相似的東西,實際上可能完全不同。 二、UTXO和余額區別在哪? 回答這個問題前,我們首先一起思考:如果比特幣和傳統貨幣一樣,使用賬戶系統,會有什么問題? 首先需要一個數據庫,記錄所有人的余額。 如果所有人的余額都像刻在石碑上一樣,風吹雨打十年不變,那沒問題。可實際上,我們的賬戶余額常常一天變十次。 記錄余額不算個事,更新余額才折騰人。 如果全世界有10億用戶,每人每天交易10次,那么平均每秒余額變動將達11萬次。按照這個速度生產余額表,幾周之后,就能撐爆Google和支付寶兩家店所有的服務器。 而且,如果每次支付都更新余額表,那么一定有信息冗余:如果你雙十一那天什么都沒買,但你的余額會隨著全國人民被更新14.8億次: 任何一筆交易發生后,所有人的余額即使沒變也要更新,這又是為什么? 因為要避免雙重支付。 比如這種情況: 有人給我1個比特幣,我很高興,但我轉念一想:應該確認這筆錢別人有沒有付給過其他人,否則我就會像收到空頭支票一樣。 于是,我打開余額表一看,發現別人確實有這筆錢,我更高興了,一激動給別人發貨。晚上噩耗傳來:我被雙重支付了,收到的那個比特幣根本沒法用,因為已經被支付給其他人了,而我查的那張余額表在當時還沒更新。 都找不到衙門喊冤。 點對點系統沒有中心的權威賬本,達成共識需要經過大多數節點確認,如果信息傳遞有時間差,就不能同時確認所有賬戶余額,所以必然面臨雙重支付。 如果比特幣被設計成這樣,一定出師未捷身先死,而UTXO一舉掃平余額方案搬不走的兩座大山:數據庫肥碩和雙重支付問題。 UTXO的方案簡單到極致:只確認交易本身。 使用UTXO產生的數據庫比使用余額系統的數據庫小得多。比特幣運行八年多,全部交易記錄不過幾百G,一臺普通家用電腦就能裝下。 至于賬戶余額嘛,你從上到下掃描一遍同一地址所有的進進出出,立等可取。你只要等上6個區塊的確認時間,就能確保不被雙重支付,因為這筆交易得到了全網的確認。 中本聰在比特幣白皮書上說:
中本聰的意思是:我根本不怕交易多,因為我的工具和別人不一樣。 三、反直覺的UTXO 幾年前,如果不理解UTXO你甚至都不敢做交易。因為你會經歷這樣的場景: 12月1日,你爸爸給你1個幣; 12月2日,你媽媽給你2個幣; 12月3日,你客戶給你5個幣; 現在你的地址上一共有8個幣。 如果你要花4個幣買餅吃,那么你會看到交易記錄是這樣的: 從你地址上減5個幣。 可是,你明明只要花4個幣,為什么會扣5個? 因為比特幣沒有余額,只有UTXO。 你有三個未支付的交易輸出(UTXO),分別是1、2和5,這三個UTXO像三個硬幣一樣,沒辦法掰開來花,只能全部付出去,但系統會給你找零。 所以別擔心,看起來你多付了錢,但其中4個幣給賣餅的,另外1個幣會回到你地址上,而這一切都由系統自動完成。 原來這些都要我們自己動手編程做,所以我們不得不感謝現在的比特幣錢包,是它們讓我們即使不理解UTXO,也不影響使用。 UTXO的設計非常反直覺,得到專欄作家卓克曾經有篇文章介紹比特幣付款的過程: 他說他給奶茶妹妹5個比特幣,系統會在他的賬上扣5個幣,在奶茶妹妹賬上加5個幣,然后這筆交易全世界都幫他記入區塊中永久保存。 這篇文章非常精彩,但在這點上卓老板徹底搞錯了。這種理解是完美的余額系統定式思維,他一定沒讀過這篇文章,才會犯下這樣的錯誤。 關于比特幣的一切都是公開的:賬本公開、白皮書公開、源代碼公開,但就是這么一個完全公開的東西,大多數人沒有理解,這是比較好玩的。 結語 現在你一定明白:其實并沒有什么比特幣,只有UTXO。 如果比特幣價格一直漲,手握6位數比特幣的李笑來身價超過比爾·蓋茨也不會成為世界首富,不是因為他沒有余額,而是因為另一個人有7位數的比特幣,他就是比特幣之父中本聰(Satoshi Nakamoto),我們都聽過他名字,卻不知道這名字背后對應的是誰。 但他一定是個高質量的思想者,所謂“高質量”,不是“什么都想到”,而是盡可能做到“想到那些必要條件”,而UTXO就是其中之一。 于是,僅僅是設計思想的分岔,面對平庸和不朽兩條大道,比特幣頭也不回地向后者奔去。 附封面圖: ![]() |
|