孟巖
渡鴉區塊鏈專欄作者
utxo 代表 unspent transaction output。
在位元幣社群裡,transaction 被簡稱為 tx,所以上面這個短語縮寫為 utxo。一般會認為 utxo 是位元幣區塊鏈設計當中的一部分,但事實上 utxo 和區塊鏈沒有必然的聯絡,你可以完全照搬位元幣區塊鏈,但不使用 utxo。
hyperledger 和ethereum 一開始並沒有採用 utxo,現在前者已經切換回 utxo,後者打算增加這個選項。我覺得這也是中本聰的過人之處——後來者照著臨摹,中間想搞點小改進,結果做到後面,發現還是人家原版的水平高,紛紛又改回來…..
那麼到底什麼是 utxo 呢?
前不久我聽「卓老闆談科技」
裡「位元幣」那一集,裡面講到位元幣的付款過程,說他要給付給奶茶妹妹5個位元幣,於是系統在他的賬戶裡減掉5,在奶茶妹妹的賬戶裡增加5,然後把這筆交易記入區塊鏈總賬,完成。雖然這個節目做得不錯,不過在這一點上卓老闆完全搞錯了,他描述的是基於賬戶的方案,而不是位元幣實際採用的 utxo 方案。
如果讓我們設計乙個支付系統,一定會跟卓老闆想到一起去,給張三乙個賬戶,裡面有餘額 100 元,李四有乙個賬戶,裡面有餘額50元。當張三要付給李四20元時,做以下操作:
1. 檢查張三賬戶餘額是否充足,如果不足20元就終止交易,向張三報「餘額不足」
2. 在張三賬戶裡減去20元(假設零手續費)
3. 在李四賬戶裡增加20元
現在的銀行也好、信用卡也好、**交易系統也好,網際網路第三方支付系統也好,其核心都是基於賬戶(account based)
的設計,由關聯式資料庫支撐。
資料庫要確保兩點,第一是你要確保業務規則得到遵守,張三的餘額充足。第二是確保事務性,也就是原子性、一致性、隔離性、永續性(acid)。這些都是資料庫的常識性知識,這裡不贅述。這種基於賬戶的設計,簡單直觀,而且在 it 系統設計裡用了幾十年,應該說沒有什麼問題。
但位元幣沒有設計成基於賬戶的系統,而是發明了 utxo 方案。
要理解utxo,最簡單的辦法就是把一枚位元幣從誕生到在商海中沉浮的經歷描述一下。我們假設乙個這樣的場景:張三挖到12.5 枚位元幣。過了幾天,他把其中 2.5 枚支付給李四。又過了幾天,他和李四各出資 2.5 位元幣湊成 5 位元幣付給王五。
如果是基於賬戶的設計,張、李、王三人在資料庫中各有乙個賬戶,則他們三人的賬戶變化如下圖所示:
但在位元幣中,這個過程是通過 utxo 實現的,圖示如下:
位元幣的區塊鏈賬本裡記錄的是一筆又一筆的交易。
每筆交易都有若干交易輸入,也就是資金**,也都有若干筆交易輸出,也就是資金去向。一般來說,每一筆交易都要花費(spend)一筆輸入,產生一筆輸出,而其所產生的輸出,就是「未花費過的交易輸出」,也就是 utxo。
位元幣交易遵守幾個規則。
第一,除了 coinbase 交易之外,所有的資金**都必須來自前面某乙個或者幾個交易的 utxo
,就像接水管一樣,乙個接乙個,此齣彼入,此入彼出,生生不息,錢就在交易之間流動起來了。
第二,任何一筆交易的交易輸入總量必須等於交易輸出總量,等式兩邊必須配平。
上圖第乙個交易 #1001 號交易是 coinbase 交易。位元幣是礦工挖出來的。當乙個礦機費盡九牛二虎之力找到乙個合格的區塊之後,它就獲得乙個特權,能夠創造乙個 coinbase 交易,在其中放入一筆新錢,並且在交易輸出的收款人位址一欄,堂堂正正的寫上自己的位址。在我寫文章的這一天(2023年8月9日),這筆位元幣的數額規定為 12.5 枚,市價 48,576元人民幣。這個 coinbase 交易隨著張三挖出來的區塊被各個節點接受,經過六個確認以後永遠的烙印在歷史中。
過了幾天,張三打算付 2.5 個位元幣給李四,張三就發起一#2001號交易,這個交易的資金**項寫著「#1001(1)」,也就是 #1001 號交易——張三挖出礦的那個 coinbase 交易——的第一項 utxo。然後在本交易的交易輸出 utxo 項中,把2.5個位元幣的收款人位址設為李四的位址。
請注意,
這一筆交易必須將前面產生那一項 12.5 個位元幣的輸出項全部消耗,而由於張三隻打算付給李四 2.5 個位元幣,為了要消耗剩下的10位元幣,他只好把剩餘的那 10 個位元幣支付給自己,這樣才能符合輸入與輸出配平的規則。
再過幾天,張三和李四打算aa製合起來給王五付 5 枚位元幣。那麼張三或李四發起 #3001 號交易,在交易輸入部分,有兩個資金**,分別是#2001(1) 和 #2001(2),代表第 #2001 號交易的第 (1) 和第 (2) 項 utxo。然後在這個交易的輸出部分裡如法炮製,給王五5位元幣,把張三剩下的 7.5 位元幣發還給自己。以後王五若要再花他這5位元幣,就必須在他的交易裡註明資金的**是 #3001(1)。
所以,其實並沒有什麼位元幣,只有 utxo。
當我們說張三擁有 10 枚位元幣的時候,我實際上是說,當前區塊鏈賬本中,有若干筆交易的 utxo 項收款人寫的是張三的位址,而這些 utxo 項的數額總和是 10。因為在位元幣系統裡,乙個人可以擁有的位址資源,可謂取之不盡用之不竭。要知道自己的一大堆位址裡一共收了多少 utxo,人是算不過來的,需要由位元幣錢包代為跟蹤計算。
以上即為 utxo 的乙個簡要的介紹。
那麼utxo高在**?
位元幣的很多技術點都不是中本聰的原創。比如基於「工作量證明(proof-of-work)」的共識達成機制是adam back 在 hashcash 裡提出來的,將全部交易計入一本總賬、並給交易打時間戳來防範雙花攻擊(double-spend attack)的思想是wei dai 的b-money 和nick szabo 的bitgold 提出來的,更不用說位元幣網路是零優化的大水漫灌式p2p網路,僅就 p2p 技術而言,很多方面還趕不上2023年出現的 bittorrent 。
但是有三個技術點絕對是中本聰原創,乙個是區塊鏈的設計,乙個是utxo,乙個是智慧型合約。
而這三個設計是極為天才的,被史丹福大學密碼學和計算機安全教授 dan boneh 評價為「extremely brilliant」,「必將激發無窮的創新」。
當然,但中本聰最了不起的地方並不是這三個單點創新,而是將所有這些技術點跟密碼學貨幣自身特點相結合,設計了一套「懲惡揚善」的經濟激勵制度,將技術創新與制度設計糅合成乙個嚴絲合縫的體系。
在這個體系裡,任何人都可以建立乙個匿名節點,編寫破壞性的**,然後實施匿名攻擊,即便你攻擊得手、偷來大筆財富,也不會暴露身份,所以可以逍遙法外。
這個系統赤身**,開門揖盜,任由你攻擊破壞,甚至如果你成功的突破防線偷來一大筆財富,整個位元幣體系不但不會懲罰你,還會堅定的保障你的贓款。然後懸賞100億美金,執行七年,至今為止,在主幹區塊鏈上,沒有發生一起成功的攻擊,一次都沒有。
中本聰把位元幣設計得跟數學原理一樣漂亮,很多後來者連抄都抄不到這個水平。
我想這就是為什麼加州大學洛杉磯分校的金融學教授 bhagwan chowdhry會提名中本聰為2023年度諾貝爾經濟學獎候選人。我相信中本聰在位元幣裡的很多設計思想,以及整個位元幣開發者社群所做的大量改進,不僅是區塊鏈的開山之作,而且也會成為it系統設計的乙個創新思想源泉。
utxo 的設計就很值得玩味。在《什麼是utxo》一文中對其設計方案進行了介紹。本文要討論的是utxo 的優點和不足。
中本聰為什麼要把位元幣設計成這樣呢?考慮到他應該也不是從未來穿越回來的人物,以常理推論,他一開始應該也是從基於賬戶的系統出發來設計的,但他後來決定切換到utxo方案,一定是遇到什麼問題。
很遺憾,位元幣的源**裡找不到這些問題的答案。位元幣的開發始於2023年5月,目前在github 上最早的一版位元幣源**是2023年9月16日中本聰 push 上去的 0.1.5 版,但其中 utxo 的設計已經成型。
後來有人翻出自己的老郵件,找到了位元幣2023年9月版的**。那份**是位元幣區塊鏈上線之前幾個星期發布的,應該非常接近位元幣創世紀執行的那個版本。可如果你仔細去看的話,其中 utxo 也已經定型。我們注定無法通過**考據來發現 utxo 的設計脈絡了。
其他文獻材料呢?也不行。中本聰在發表位元幣之前,主要是與一些密碼學專家郵件交流,這些郵件外界看不到。而他積極參加論壇討論,主要發生在位元幣已經發表以後。我找不到他在 utxo 設計形成過程之中發表過任何相關的只言片語。
既然這些辦法都不行,我們就只好靠猜了。
我猜測,中本聰一開始設計位元幣時,也採用了賬戶方案。
但在2023年下半年或2023年上半年的某乙個時刻,中本聰發現基於賬戶的方案有問題,於是創造了 utxo 方案。
那麼基於賬戶的方案會遇到哪些問題呢?
如果採用基於賬戶的方案,可以肯定的是,你需要乙個資料庫。這個資料庫能夠讓你很方便的查到張
三、李四各自的賬戶餘額。
而 utxo 方案當然也需要乙個資料庫,這個資料庫記錄著當前系統裡每一筆「沒有花出去的交易輸出」,也是就位元幣。當節點接收到一筆交易的時候,它需要去 utxo 資料庫里查,看看這筆交易所引用的 utxo 是否存在,它的收款人(擁有者)是不是當前新交易的付款者。而交易結束之後,資料庫要做相應的更新。
首先要明確,無論是賬戶資料庫還是 utxo 資料庫,必須是分散的,每結點乙個轉殖,一定不能是中心化的。如果位元幣系統有乙個中心資料庫,不管你有多少節點,每一筆交易都要跑去中心資料庫驗證一下、然後再執行「轉賬」的事務操作,那就完全談不上「去中心化」,位元幣就毫無價值了,不如老老實實用支付寶。
既然都是每個節點轉殖乙個資料庫,根據交易過程同步修改,那麼乙個賬戶資料庫跟乙個 utxo 資料庫,又有什麼分別呢?
進一步思考,我們會發現還是有很大分別。
首先,長期來看,賬戶資料庫會無限膨脹,而utxo 資料庫體積會小很多。
要知道,位元幣是個匿名體系,它的賬戶就是「位址」。每乙個位元幣使用者可以擁有幾乎無限多的位址,在位元幣系統來看,它完全不知道兩個位址背後對應的是不是同乙個人。
簡單 畢業其實並沒有多久
描述 作為2019年入學的新生,大部分同學會在2023年的夏天離開台州學院,4年時間,希望大家都能收穫到知識 友情 愛情。那麼我們來算算,假如我們畢業離校是在2023年的6月30日,那還有多久吧。輸入多組輸入,按照yyyy mm dd的格式輸入乙個日期,例如2019 12 31 日期肯定大於等於20...
矽谷並沒有發明什麼
矽谷的人們創造的器械很少。盤算機並非矽谷的創造,矽谷沒有創造電晶體 積體電路 網際網路,生物科技和綠色科技也並非出自矽谷。矽谷所起的感化,是使這些技巧 敏捷傳達 矽谷有著共同的 近乎魔鬼般的嗅覺,能敏捷了解一項創造給社會帶來的推翻性的變更,並從中盈利。毀壞性的發明 這就是人們談起矽谷是立異工場時的最...
中國盜版率其實並沒有那麼高
人們影響中,中國的盜版是很嚴重的.為什麼有這種印象,在於人們很少會花錢去買軟體.但是其實這種感覺是不可靠的,所謂的正版軟體,並不是一定要花錢才算正版軟體.就如同你不需要花錢 或者花很少的錢 也能看電視,因為免費的電視有廣告幫那些製作商收回成本,所以不需要你花錢,也是正正當當的正版.比如最流行也最重要...