摘要:模型模型中,交易只是代表了集合的變更。模型是無狀態(tài)的,更容易并發(fā)處理。模型對于模型,模型保存了世界狀態(tài),鏈的狀態(tài)一般在區(qū)塊中以和等形式進行共識。交易只是事件本身,不包含結果,交易的共識和狀態(tài)的共識本質上可以隔離的。
在當前區(qū)塊鏈世界中,主要有兩種記錄保存方式,UTXO 模式(Unspent Transaction Output) 和 Account 模式。Bitcoin 采用的是 UTXO 模型,Ethereum 采用的 Account 模型,同樣 CITA 也采用了 Account 模型。
Bitcoin 的設計初衷是點對點的電子現(xiàn)金系統(tǒng),在比特幣中,每個交易消耗之前交易生成的 UTXO 然后生成新的 UTXO,賬戶的余額即所有屬于該地址的未花費 UTXO 集合,Bitcoin 的全局狀態(tài)即當前所有未花費的 UTXO 集合。Ethereum 意圖創(chuàng)建一個更為通用的協(xié)議,該協(xié)議支持圖靈完備的編程語言,在此協(xié)議上用戶可以編寫智能合約,創(chuàng)建各種去中心化的應用。由于 UTXO 模型在狀態(tài)保存以及可編程性方面的缺陷,Ethereum 引入了 Account 模型。下面我們對兩種模型的優(yōu)缺點做進一步展開。
UTXO 模型UTXO 模型中,交易只是代表了 UTXO 集合的變更。而賬戶和余額的概念是在 UTXO 集合上更高的抽象,賬號和余額的概念只存在于錢包中。
優(yōu)點:
計算是在鏈外的,交易本身既是結果也是證明。節(jié)點只做驗證即可,不需要對交易進行額外的計算,也沒有額外的狀態(tài)存儲。交易本身的輸出 UTXO 的計算是在錢包完成的,這樣交易的計算負擔完全由錢包來承擔,一定程度上減少了鏈的負擔。
除 Coinbase 交易外,交易的 Input 始終是鏈接在某個 UTXO 后面。交易無法被重放,并且交易的先后順序和依賴關系容易被驗證,交易是否被消費也容易被舉證。
UTXO 模型是無狀態(tài)的,更容易并發(fā)處理。
對于 P2SH 類型的交易,具有更好的隱私性。交易中的 Input 是互不相關聯(lián)的,可以使用 CoinJoin 這樣的技術,來增加一定的隱私性。
缺點:
無法實現(xiàn)一些比較復雜的邏輯,可編程性差。對于復雜邏輯,或者需要狀態(tài)保存的合約,實現(xiàn)難度大,且狀態(tài)空間利用率比較低。
當 Input 較多時,見證腳本也會增多。而簽名本身是比較消耗 CPU 和存儲空間的。
對于 Account 模型,Account 模型保存了世界狀態(tài),鏈的狀態(tài)一般在區(qū)塊中以 StateRoot 和 ReceiptRoot 等形式進行共識。交易只是事件本身,不包含結果,交易的共識和狀態(tài)的共識本質上可以隔離的。
優(yōu)點:
合約以代碼形式保存在 Account 中,并且 Account 擁有自身狀態(tài)。這種模型具有更好的可編程性,容易開發(fā)人員理解,場景更廣泛。
批量交易的成本較低。設想礦池向礦工支付手續(xù)費,UTXO 中因為每個 Input 和 Out 都需要多帶帶 Witness script 或者 Locking script,交易本身會非常大,簽名驗證和交易存儲都需要消耗鏈上寶貴的資源。而 Account 模型可以通過合約的方式極大的降低成本。
缺點:
Account 模型交易之間沒有依賴性,需要解決重放問題。
對于實現(xiàn)閃電網(wǎng)絡/雷電網(wǎng)絡,Plasma 等,用戶舉證需要更復雜的 Proof 證明機制,子鏈向主鏈進行狀態(tài)遷移需要更復雜的協(xié)議。
對于以上幾個優(yōu)點和缺點,我們再做一些分析和對比。
第一,關于計算的問題的。
UTXO 交易本身對于區(qū)塊鏈并沒有復雜的計算,這樣簡單的講其實并不完全準確,原因分有兩個,一是 Bitcoin 本身的交易多為 P2SH,且 Witness script 是非圖靈完備的,不存在循環(huán)語句。而對于 Account 模型,例如 Ethereum,由于計算多在鏈上,且為圖靈完備,一般計算較為復雜,同時合約安全性就容易成為一個比較大的問題。當然是否圖靈完備對于是否是賬戶模型并沒有直接關聯(lián)。但是賬戶模型引入之后,合約可以作為一個不受任何人控制的獨立實體存在,這一點意義重大。
第二,關于 UTXO 更易并發(fā)的問題。
在 UTXO 模型中,世界狀態(tài)即為 UTXO 的集合,節(jié)點為了更快的驗證交易,需要在內存中存儲所有的 UTXO 的索引,因此 UTXO 是非常昂貴的。對于長期不消費的 UTXO,會一直占用節(jié)點的內存。所以對于此種模型,理論上應該鼓勵用戶減少生產(chǎn) UTXO,多消耗 UTXO。但是如果要使用 UTXO 進行并行交易則需要更多的 UTXO 作為輸入,同時要產(chǎn)生更多的 UTXO 來保證并發(fā)性,這本質上是對網(wǎng)絡進行了粉塵攻擊。并且由于交易是在錢包內構造,所以需要錢包更復雜的設計。反觀 Account 模型,每個賬戶可以看成是多帶帶的互不影響的狀態(tài)機,賬戶之間通過消息進行通信。所以理論上用戶發(fā)起多筆交易時,當這些交易之間不會互相調用同一 Account 時,交易是完全可以并發(fā)執(zhí)行的。
第三,關于 Account 模型的交易重放問題。
Ethereum 使用了在 Account 中增加 nonce 的方式,每筆交易對應一個 nonce,nonce 每次遞增。這種方式雖然意在解決重放的問題,但是同時引入了順序性問題,同時使得交易無法并行。例如在 Ethereum中,用戶發(fā)送多筆交易,如果第一筆交易打包失敗,將引起后續(xù)多筆交易都打包不成功。在 CITA 中我們使用了隨機 nonce 的方案,這樣用戶的交易之間沒有順序性依賴,不會引起串聯(lián)性失敗,同時使得交易有并行處理的可能。
第四,存儲問題。因為 UTXO 模型中,只能在交易中保存狀態(tài)。
而 Account 模型的狀態(tài)是在節(jié)點保存,在 Ethereum 中使用MPT 的方式存儲,Block 中只需要共識 StateRoot 等即可。這樣對于鏈上數(shù)據(jù),Account 模型實際更小,網(wǎng)絡傳輸?shù)牧扛。瑫r狀態(tài)在節(jié)點本地使用 MPT 方式保存,在空間使用上也更有效率。例如 A 向 B 轉賬,如果在 UTXO 中假設存在 2 個 Input 和2個 Output,則需要 2 個 Witness script 和 2 個Locking script;在 Account 模型中則只需要一個簽名,交易內容只包含金額即可。在最新的隔離見證實現(xiàn)后,Bitcoin的交易數(shù)據(jù)量也大大減少,但是實際上對于驗證節(jié)點和全節(jié)點仍然需要針對 Witness script 進行傳輸和驗證。
第五,對于輕節(jié)點獲取某一地址狀態(tài),UTXO 更復雜。
例如錢包中,需要向全節(jié)點請求所有關于某個地址的所有 UTXO,全節(jié)點可以發(fā)送部分 UTXO,錢包要驗證該筆 UTXO 是否已經(jīng)被消費,有一定的難度,而且錢包很難去證明 UTXO 是全集而不是部分集合。而對于 Account 模型則簡單很多,根據(jù)地址找到 State 中對應狀態(tài),當前狀態(tài)的 State Proof 則可以證明合約數(shù)據(jù)的真?zhèn)?。當然對?UTXO 也可以在每個區(qū)塊中對 UTXO 的 root 進行驗證,這一點與當前 Bitcoin 的實現(xiàn)有關,并非 UTXO 的特點。
綜上來看,Account 模型在可編程性,靈活性等方面更有優(yōu)勢;在簡單業(yè)務和跨鏈上,UTXO 有其非常獨到和開創(chuàng)性的優(yōu)點。對于選擇何種模型,要從具體的業(yè)務場景進行出發(fā)。
參考資料《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》
《Accounts and not UTXOs》
《交易中的nonce的作用是什么?》
《Why is EVM-on-Plasma hard?》
NingNing,Architect at Cryptape, former core developer at EthFans.org.
Github:u2 (zhangyaning)
------------------------- End --------------------
如果你對創(chuàng)造未來的加密經(jīng)濟感興趣,對自己的能力有自信,歡迎投簡歷到 join@cryptape.com 加入我們:
Appchain Team - Appchain 是 Nervos Network 的 Layer 2 方案之一,以 CITA 為核心,包含 Neuron 錢包和 Microscope 瀏覽器。無論你是移動應用高手,Web 應用高手,還是有特殊技能的產(chǎn)品小王子,Appchain Team 都歡迎!
CITA Core Team** - CITA 是世界上第一個使用微服務架構的許可鏈項目,用 Rust 實現(xiàn),追求高性能與高穩(wěn)定性。CITA 與大多數(shù)許可鏈不同,不是 Ethereum 或者 Fabric 的 fork,而是一個從零開始設計的項目,這給我們帶來了許多挑戰(zhàn),也帶來了許多樂趣。這里隱藏大佬很多哦~
CKB Core Team - CKB 是 Nervos Network 的 Layer 1, 是一條公有鏈,用 Rust 實現(xiàn),追求安全性與穩(wěn)定性。這里隱藏大佬也很多哦~
Cryptape Research
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/24245.html
摘要:模型模型中,交易只是代表了集合的變更。模型是無狀態(tài)的,更容易并發(fā)處理。模型對于模型,模型保存了世界狀態(tài),鏈的狀態(tài)一般在區(qū)塊中以和等形式進行共識。交易只是事件本身,不包含結果,交易的共識和狀態(tài)的共識本質上可以隔離的。 在當前區(qū)塊鏈世界中,主要有兩種記錄保存方式,UTXO 模式(Unspent Transaction Output) 和 Account 模式。Bitcoin 采用的是 UT...
摘要:加密經(jīng)濟網(wǎng)絡中的底層公鏈是比比特幣更像比特幣的價值存儲平臺。這一點將會在經(jīng)濟模型設計中講到,敬請期待在技術實現(xiàn)上,我們也充分對比了比特幣模型和以太坊模型的優(yōu)劣,從中繼承了比特幣協(xié)議對狀態(tài)為核心的優(yōu)秀架構。 Nervos 加密經(jīng)濟網(wǎng)絡中的底層公鏈 CKB 是比比特幣更像比特幣的價值存儲平臺。(這一點將會在經(jīng)濟模型設計中講到,敬請期待~)在技術實現(xiàn)上,我們也充分對比了比特幣 UTXO 模型...
摘要:為了理解底層公鏈的模型,我們前置了幾篇概念性文章,講述了我們應該以狀態(tài)為中心設計區(qū)塊鏈系統(tǒng)的,以及這么做帶來的好處。交易依然表示狀態(tài)的變化遷移。 為了理解底層公鏈 CKB 的 Cell 模型,我們前置了幾篇概念性文章,講述了我們應該以狀態(tài)為中心設計區(qū)塊鏈系統(tǒng)的,以及這么做帶來的好處。并且在上一篇文章中,詳細分析了比特幣 UTXO 模型和以太坊的 Account 模型,以及進行了對比分析...
摘要:比特幣與模型全名是,未花費交易輸出,相比于賬戶模型來說沒那么直觀。在比特幣的世界里,并沒有一個紀錄所有帳戶余額的帳本。 如果你曾上過BlockExplorer觀察自己的比特幣收入狀況,你是否曾經(jīng)被搞的一頭霧水呢?這正是因為比特幣所使用的交易模型并非我們直覺上以賬戶為基礎的,而是一種叫做UTXO的模型 。在我的前一篇文章:《深入了解NEX:Neon Exchange》中,也提到了比特幣所...
閱讀 4040·2021-11-25 09:43
閱讀 2671·2021-11-18 13:11
閱讀 2363·2019-08-30 15:55
閱讀 3342·2019-08-26 11:58
閱讀 2899·2019-08-26 10:47
閱讀 2289·2019-08-26 10:20
閱讀 1342·2019-08-23 17:59
閱讀 3103·2019-08-23 15:54