1. 程式人生 > >比原鏈設計思考: 擴展性UTXO模型

比原鏈設計思考: 擴展性UTXO模型

打折 活性 數據 記錄 account 最大 每一個 技術 這一

用戶模型是比原鏈在最初就需要確定的重要數據結構, 團隊的選擇還是聚焦在兩種典型的模型系統中,Account模型和UTXO模型,和其他大多數區塊鏈設計一樣, 選擇了模型就決定了協議層的重要實現,兩種模型各有利弊,不同區塊鏈針對想聚焦的場景自身會有判斷。

UTXO 的起源(來自高明的中本聰)

中本聰對比特幣的設計,讓整個世界進入了數字貨幣時代。比特幣起源於中本聰,UTXO出自比特幣。自然,UTXO來自高明的中本聰。UTXO的優點:

  • 在版本控制方面的考慮,svn 是中心化的數據庫保持一份賬本,這和區塊鏈的設計自然是相違背的,git 是去中心化的數據庫,但會保存太多冗余數據,對於分布式性能肯定是要大打折扣。UTXO數據庫是拋棄了歷史包袱的git, 只存儲了最後一個版本。簡易實用。

技術分享圖片

  • UTXO 具有天然的匿名效果,一個賬戶所對應的未花費交易是難以發現的,如門羅幣就是采用混幣的方式實現隱私的。
  • 在性能方面,由於UTXO是獨立的數據記錄, 那麽就存在極大的並行性可以提升區塊鏈交易驗證速度。

設計的易實現性 — 以太坊 棄UTXO用賬戶模型

以太坊黃皮書的設計者Gavin Wood 對UTXO的理解,十分深刻, 既然UTXO有這麽多的優點,他為什麽棄用UTXO了? 這時你應該提出個問題,以太坊的最大亮點是什麽?你肯定會回答:智能合約。正是因為智能合約的考慮,Gavin Wood要基於UTXO去實現圖靈完備的智能合約(功能多樣性的超級電腦)是困難的。而賬戶模型是天然的面向對象的,對每一筆交易,都會在相對應賬戶上進行記錄(nonce++)。為了易於管理賬戶,而引入了世界狀態,每一筆交易都會改變這個世界狀態。這和現實世界是相對應的,每一個微小的改變,都會改變這個世界。

技術分享圖片

追求更高的性能

以太坊的賬戶模型很容易的實現了超級電腦模型。然而,性能一直是一道難以逾越的坎。在性能方面,utxo天然的可以並行運行,而基於世界狀態的以太坊難以擴展。Gavin Wood當然是認識到這一點的,但要去改變,很難。那到不如用帶有函數式編程特點的rust 去重寫以太坊,也算是一種折中方案。

比原鏈的思考

馬克思哲學的否定之否定規律,事物的發展變化是螺旋式上升的。在區塊鏈領域也是適合的,前進一步,也需要後退半步。基於UTXO模型去實現堆棧式虛擬機, 那還是會失去靈活性,用UTXO去結合以太坊EVM, 難度極大,也是不太實用的,這好比用haskell語言,去實現cpp風格的面向對象編程, 看不到有什麽實際的意義。世界上沒有銀彈,比原鏈必須舍棄部分,妥協部分才能更好地適應場景。

我們在采用了比特幣UTXO的易於並行運算的模型前提下,還做了針對性的改進,加了個資產號字段,使不同的資產可以在同一筆交易中處理轉換,只要滿足總輸入等於總輸出就可以。技術分享圖片

但為了數據易於管理,易於編程, 我們引入以太坊的世界狀態的概念,每一種資產都維持一個全局世界狀態,該全局世界狀態具有快速可查找,不可更改,簡單易提供證明的特性。它的具體實現會參考以太坊的PAT樹(一種擴展的基數樹),比特幣的merkle樹,以及cosmos的IAVL樹(一種不可更改的平衡二叉樹)。每一種資產的所有outputs在一個全局的UTXO數據庫中會有一個索引計數(每一個output的計數不能超過1,保持並行計算時,一個output最多能被一個BVM實例所使用,確保了數據一致性)。BVM是比原鏈實現的智能合約虛擬機模型, 每一筆交易的的執行,都會實例化一個BVM實例,只有在BVM實例中,各資產的世界狀態才能在保持有效性,一致性的前提下更新狀態。BVM可以並行創造多個”合約沙盒”實例, 在沙盒中合約的運行不受外界影響。

技術分享圖片

比原鏈創造的初衷是解決數字資產登記流轉的問題, 對於公有鏈項目,保持簡潔,保持高效,保持專註,就是保障安全, 新的擴展型UTXO模型正是基於這種場景實現的融合和改進。

比原鏈設計思考: 擴展性UTXO模型