在當前區塊鏈世界中,主要有兩種記錄保存方式,UTXO 模式(Unspent Transaction Output) 和 Account 模式。Bitcoin 採用的是 UTXO 模型,Ethereum 採用的 Account 模型,一樣 CITA 也採用了 Account 模型。
Bitcoin 的設計初衷是點對點的電子現金系統,在比特幣中,每一個交易消耗以前交易生成的 UTXO 而後生成新的 UTXO,帳戶的餘額即全部屬於該地址的未花費 UTXO 集合,Bitcoin 的全局狀態即當前全部未花費的 UTXO 集合。Ethereum 意圖建立一個更爲通用的協議,該協議支持圖靈完備的編程語言,在此協議上用戶能夠編寫智能合約,建立各類去中心化的應用。因爲 UTXO 模型在狀態保存以及可編程性方面的缺陷,Ethereum 引入了 Account 模型。下面咱們對兩種模型的優缺點作進一步展開。git
UTXO 模型中,交易只是表明了 UTXO 集合的變動。而帳戶和餘額的概念是在 UTXO 集合上更高的抽象,帳號和餘額的概念只存在於錢包中。github
對於 Account 模型,Account 模型保存了世界狀態,鏈的狀態通常在區塊中以 StateRoot 和 ReceiptRoot 等形式進行共識。交易只是事件自己,不包含結果,交易的共識和狀態的共識本質上能夠隔離的。編程
對於以上幾個優勢和缺點,咱們再作一些分析和對比。
第一,關於計算的問題的。UTXO 交易自己對於區塊鏈並無複雜的計算,這樣簡單的講其實並不徹底準確,緣由分有兩個,一是 Bitcoin 自己的交易多爲 P2SH,且 Witness script 是非圖靈完備的,不存在循環語句。而對於 Account 模型,例如 Ethereum,因爲計算多在鏈上,且爲圖靈完備,通常計算較爲複雜,同時合約安全性就容易成爲一個比較大的問題。固然是否圖靈完備對因而否是帳戶模型並無直接關聯。可是帳戶模型引入以後,合約能夠做爲一個不受任何人控制的獨立實體存在,這一點意義重大。
第二,關於 UTXO 更易併發的問題。在 UTXO 模型中,世界狀態即爲 UTXO 的集合,節點爲了更快的驗證交易,須要在內存中存儲全部的 UTXO 的索引,所以 UTXO 是很是昂貴的。對於長期不消費的 UTXO,會一直佔用節點的內存。因此對於此種模型,理論上應該鼓勵用戶減小生產 UTXO,多消耗 UTXO。可是若是要使用 UTXO 進行並行交易則須要更多的 UTXO 做爲輸入,同時要產生更多的 UTXO 來保證併發性,這本質上是對網絡進行了粉塵攻擊。而且因爲交易是在錢包內構造,因此須要錢包更復雜的設計。反觀 Account 模型,每一個帳戶能夠當作是單獨的互不影響的狀態機,帳戶之間經過消息進行通訊。因此理論上用戶發起多筆交易時,當這些交易之間不會互相調用同一 Account 時,交易是徹底能夠併發執行的。
第三,關於 Account 模型的交易重放問題。Ethereum 使用了在 Account 中增長 nonce 的方式,每筆交易對應一個 nonce,nonce 每次遞增。這種方式雖然意在解決重放的問題,可是同時引入了順序性問題,同時使得交易沒法並行。例如在 Ethereum中,用戶發送多筆交易,若是第一筆交易打包失敗,將引發後續多筆交易都打包不成功。在 CITA 中咱們使用了隨機 nonce 的方案,這樣用戶的交易之間沒有順序性依賴,不會引發串聯性失敗,同時使得交易有並行處理的可能。
第四,存儲問題。由於 UTXO 模型中,只能在交易中保存狀態。而 Account 模型的狀態是在節點保存,在 Ethereum 中使用MPT 的方式存儲,Block 中只須要共識 StateRoot 等便可。這樣對於鏈上數據,Account 模型實際更小,網絡傳輸的量更小,同時狀態在節點本地使用 MPT 方式保存,在空間使用上也更有效率。例如 A 向 B 轉帳,若是在 UTXO 中假設存在 2 個 Input 和2個 Output,則須要 2 個 Witness script 和 2 個Locking script;在 Account 模型中則只須要一個簽名,交易內容只包含金額便可。在最新的隔離見證明現後,Bitcoin的交易數據量也大大減小,可是實際上對於驗證節點和全節點仍然須要針對 Witness script 進行傳輸和驗證。
第五,對於輕節點獲取某一地址狀態,UTXO 更復雜。例如錢包中,須要向全節點請求全部關於某個地址的全部 UTXO,全節點能夠發送部分 UTXO,錢包要驗證該筆 UTXO 是否已經被消費,有必定的難度,並且錢包很難去證實 UTXO 是全集而不是部分集合。而對於 Account 模型則簡單不少,根據地址找到 State 中對應狀態,當前狀態的 State Proof 則能夠證實合約數據的真僞。固然對於 UTXO 也能夠在每一個區塊中對 UTXO 的 root 進行驗證,這一點與當前 Bitcoin 的實現有關,並不是 UTXO 的特色。瀏覽器
綜上來看,Account 模型在可編程性,靈活性等方面更有優點;在簡單業務和跨鏈上,UTXO 有其很是獨到和開創性的優勢。對於選擇何種模型,要從具體的業務場景進行出發。安全
《Thoughts on UTXOs》 by Vitalik Buterin網絡
《What are the pros and cons of Ethereum balances vs. UTXOs?》架構
《Mastering Bitcoin 2nd Edition - Programming the Open Blockchain》併發
NingNing,Architect at Cryptape, former core developer at EthFans.org.
Github:u2 (zhangyaning)
------------------------- End --------------------
若是你對創造將來的加密經濟感興趣,對本身的能力有自信,歡迎投簡歷到 join@cryptape.com 加入咱們:
Appchain Team - Appchain 是 Nervos Network 的 Layer 2 方案之一,以 CITA 爲核心,包含 Neuron 錢包和 Microscope 瀏覽器。不管你是移動應用高手,Web 應用高手,仍是有特殊技能的產品小王子,Appchain Team 都歡迎!
CITA Core Team - CITA 是世界上第一個使用微服務架構的許可鏈項目,用 Rust 實現,追求高性能與高穩定性。CITA 與大多數許可鏈不一樣,不是 Ethereum 或者 Fabric 的 fork,而是一個從零開始設計的項目,這給咱們帶來了許多挑戰,也帶來了許多樂趣。這裏隱藏大佬不少哦~
CKB Core Team - CKB 是 Nervos Network 的 Layer 1, 是一條公有鏈,用 Rust 實現,追求安全性與穩定性。這裏隱藏大佬也不少哦~
Cryptape Research