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

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

 

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

 

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

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

utxo

  • UTXO 具備自然的匿名效果,一個帳戶所對應的未花費交易是難以發現的,如門羅幣就是採用混幣的方式實現隱私的。
  • 在性能方面,因爲UTXO是獨立的數據記錄, 那麼就存在極大的並行性能夠提高區塊鏈交易驗證速度。

 

 

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

 

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

ethertransition

追求更高的性能

 

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

 

比原鏈的思考

 

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

咱們在採用了比特幣UTXO的易於並行運算的模型前提下,還作了針對性的改進,加了個資產號字段,使不一樣的資產能夠在同一筆交易中處理轉換,只要知足總輸入等於總輸出就能夠。asset分佈式

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

bvm

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

相關文章
相關標籤/搜索