使用者模型是比原鏈在最初就需要確定的重要資料結構, 團隊的選擇還是聚焦在兩種典型的模型系統中,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模型正是基於這種情境實現的融合和改進。