摘要:加密經(jīng)濟(jì)網(wǎng)絡(luò)中的底層公鏈?zhǔn)潜缺忍貛鸥癖忍貛诺膬r(jià)值存儲(chǔ)平臺(tái)。這一點(diǎn)將會(huì)在經(jīng)濟(jì)模型設(shè)計(jì)中講到,敬請(qǐng)期待在技術(shù)實(shí)現(xiàn)上,我們也充分對(duì)比了比特幣模型和以太坊模型的優(yōu)劣,從中繼承了比特幣協(xié)議對(duì)狀態(tài)為核心的優(yōu)秀架構(gòu)。
Nervos 加密經(jīng)濟(jì)網(wǎng)絡(luò)中的底層公鏈 CKB 是比比特幣更像比特幣的價(jià)值存儲(chǔ)平臺(tái)。(這一點(diǎn)將會(huì)在經(jīng)濟(jì)模型設(shè)計(jì)中講到,敬請(qǐng)期待~)在技術(shù)實(shí)現(xiàn)上,我們也充分對(duì)比了比特幣 UTXO 模型和以太坊 Account 模型的優(yōu)劣,從中繼承了比特幣協(xié)議對(duì)狀態(tài)為核心的優(yōu)秀架構(gòu)。我們稱 CKB 是一個(gè)通用驗(yàn)證網(wǎng)絡(luò),Cell 是對(duì) UTXO 的一般化版本。并且,發(fā)展出了 CKB 模型的優(yōu)勢(shì),在 CKB 當(dāng)前狀態(tài)中存儲(chǔ)的是任意的共同知識(shí),而不再僅僅是某一種單一數(shù)字貨幣。在深入了解 CKB 公鏈中的 Cell 模型前,我們來談一談前置概念:UTXO 和 Account 模型!
秘猿科技區(qū)塊鏈小課堂 17 期
在當(dāng)前區(qū)塊鏈?zhǔn)澜缰校饕袃煞N記錄保存方式,UTXO 模式(Unspent Transaction Output) 和 Account 模式。Bitcoin 采用的是 UTXO 模型,Ethereum 采用的 Account 模型,同樣 CITA 也采用了 Account 模型。
Bitcoin 的設(shè)計(jì)初衷是點(diǎn)對(duì)點(diǎn)的電子現(xiàn)金系統(tǒng),在比特幣中,每個(gè)交易消耗之前交易生成的 UTXO 然后生成新的 UTXO,賬戶的余額即所有屬于該地址的未花費(fèi) UTXO 集合,Bitcoin 的全局狀態(tài)即當(dāng)前所有未花費(fèi)的 UTXO 集合。Ethereum 意圖創(chuàng)建一個(gè)更為通用的協(xié)議,該協(xié)議支持圖靈完備的編程語(yǔ)言,在此協(xié)議上用戶可以編寫智能合約,創(chuàng)建各種去中心化的應(yīng)用。由于 UTXO 模型在狀態(tài)保存以及可編程性方面的缺陷,Ethereum 引入了 Account 模型。下面我們對(duì)兩種模型的優(yōu)缺點(diǎn)做進(jìn)一步展開。
UTXO 模型UTXO 模型中,交易只是代表了 UTXO 集合的變更。而賬戶和余額的概念是在 UTXO 集合上更高的抽象,賬號(hào)和余額的概念只存在于錢包中。
優(yōu)點(diǎn):計(jì)算是在鏈外的,交易本身既是結(jié)果也是證明。節(jié)點(diǎn)只做驗(yàn)證即可,不需要對(duì)交易進(jìn)行額外的計(jì)算,也沒有額外的狀態(tài)存儲(chǔ)。交易本身的輸出 UTXO的計(jì)算是在錢包完成的,這樣交易的計(jì)算負(fù)擔(dān)完全由錢包來承擔(dān),一定程度上減少了鏈的負(fù)擔(dān)。
除 Coinbase 交易外,交易的 Input 始終是鏈接在某個(gè)
UTXO后面。交易無法被重放,并且交易的先后順序和依賴關(guān)系容易被驗(yàn)證,交易是否被消費(fèi)也容易被舉證。
UTXO 模型是無狀態(tài)的,更容易并發(fā)處理。
對(duì)于 P2SH 類型的交易,具有更好的隱私性。交易中的 Input 是互不相關(guān)聯(lián)的,可以使用 CoinJoin 這樣的技術(shù),來增加一定的隱私性。
缺點(diǎn):無法實(shí)現(xiàn)一些比較復(fù)雜的邏輯,可編程性差。對(duì)于復(fù)雜邏輯,或者需要狀態(tài)保存的合約,實(shí)現(xiàn)難度大,且狀態(tài)空間利用率比較低。
當(dāng) Input 較多時(shí),見證腳本也會(huì)增多。而簽名本身是比較消耗 CPU 和存儲(chǔ)空間的。
ACCOUNT 模型對(duì)于 Account 模型,Account 模型保存了世界狀態(tài),鏈的狀態(tài)一般在區(qū)塊中以 StateRoot 和 ReceiptRoot 等形式進(jìn)行共識(shí)。交易只是事件本身,不包含結(jié)果,交易的共識(shí)和狀態(tài)的共識(shí)本質(zhì)上可以隔離的。
優(yōu)點(diǎn):合約以代碼形式保存在 Account 中,并且 Account 擁有自身狀態(tài)。這種模型具有更好的可編程性,容易開發(fā)人員理解,場(chǎng)景更廣泛。
批量交易的成本較低。設(shè)想礦池向礦工支付手續(xù)費(fèi),UTXO 中因?yàn)槊總€(gè) Input 和 Out 都需要多帶帶 Witness script 或者 Locking script,交易本身會(huì)非常大,簽名驗(yàn)證和交易存儲(chǔ)都需要消耗鏈上寶貴的資源。而 Account 模型可以通過合約的方式極大的降低成本。
缺點(diǎn):Account 模型交易之間沒有依賴性,需要解決重放問題。
對(duì)于實(shí)現(xiàn)閃電網(wǎng)絡(luò)/雷電網(wǎng)絡(luò),Plasma 等,用戶舉證需要更復(fù)雜的 Proof 證明機(jī)制,子鏈向主鏈進(jìn)行狀態(tài)遷移需要更復(fù)雜的協(xié)議。
UTXO VS ACCOUNT對(duì)于以上幾個(gè)優(yōu)點(diǎn)和缺點(diǎn),我們?cè)僮鲆恍┓治龊蛯?duì)比。
第一,關(guān)于計(jì)算的問題的。UTXO 交易本身對(duì)于區(qū)塊鏈并沒有復(fù)雜的計(jì)算,這樣簡(jiǎn)單的講其實(shí)并不完全準(zhǔn)確,原因分有兩個(gè),一是 Bitcoin 本身的交易多為 P2SH,且 Witness script 是非圖靈完備的,不存在循環(huán)語(yǔ)句。而對(duì)于 Account 模型,例如 Ethereum,由于計(jì)算多在鏈上,且為圖靈完備,一般計(jì)算較為復(fù)雜,同時(shí)合約安全性就容易成為一個(gè)比較大的問題。當(dāng)然是否圖靈完備對(duì)于是否是賬戶模型并沒有直接關(guān)聯(lián)。但是賬戶模型引入之后,合約可以作為一個(gè)不受任何人控制的獨(dú)立實(shí)體存在,這一點(diǎn)意義重大。
第二,關(guān)于 UTXO 更易并發(fā)的問題。在 UTXO 模型中,世界狀態(tài)即為 UTXO 的集合,節(jié)點(diǎn)為了更快的驗(yàn)證交易,需要在內(nèi)存中存儲(chǔ)所有的 UTXO 的索引,因此 UTXO 是非常昂貴的。對(duì)于長(zhǎng)期不消費(fèi)的 UTXO,會(huì)一直占用節(jié)點(diǎn)的內(nèi)存。所以對(duì)于此種模型,理論上應(yīng)該鼓勵(lì)用戶減少生產(chǎn) UTXO,多消耗 UTXO。但是如果要使用 UTXO 進(jìn)行并行交易則需要更多的 UTXO 作為輸入,同時(shí)要產(chǎn)生更多的 UTXO 來保證并發(fā)性,這本質(zhì)上是對(duì)網(wǎng)絡(luò)進(jìn)行了粉塵攻擊。并且由于交易是在錢包內(nèi)構(gòu)造,所以需要錢包更復(fù)雜的設(shè)計(jì)。反觀 Account 模型,每個(gè)賬戶可以看成是多帶帶的互不影響的狀態(tài)機(jī),賬戶之間通過消息進(jìn)行通信。所以理論上用戶發(fā)起多筆交易時(shí),當(dāng)這些交易之間不會(huì)互相調(diào)用同一 Account 時(shí),交易是完全可以并發(fā)執(zhí)行的。
第三,關(guān)于 Account 模型的交易重放問題。Ethereum 使用了在 Account 中增加 nonce 的方式,每筆交易對(duì)應(yīng)一個(gè) nonce,nonce 每次遞增。這種方式雖然意在解決重放的問題,但是同時(shí)引入了順序性問題,同時(shí)使得交易無法并行。例如在 Ethereum中,用戶發(fā)送多筆交易,如果第一筆交易打包失敗,將引起后續(xù)多筆交易都打包不成功。在 CITA 中我們使用了隨機(jī) nonce 的方案,這樣用戶的交易之間沒有順序性依賴,不會(huì)引起串聯(lián)性失敗,同時(shí)使得交易有并行處理的可能。
第四,存儲(chǔ)問題。因?yàn)?UTXO 模型中,只能在交易中保存狀態(tài)。而 Account 模型的狀態(tài)是在節(jié)點(diǎn)保存,在 Ethereum 中使用MPT 的方式存儲(chǔ),Block 中只需要共識(shí) StateRoot 等即可。這樣對(duì)于鏈上數(shù)據(jù),Account 模型實(shí)際更小,網(wǎng)絡(luò)傳輸?shù)牧扛。瑫r(shí)狀態(tài)在節(jié)點(diǎn)本地使用 MPT 方式保存,在空間使用上也更有效率。例如 A 向 B 轉(zhuǎn)賬,如果在 UTXO 中假設(shè)存在 2 個(gè) Input 和2個(gè) Output,則需要 2 個(gè) Witness script 和 2 個(gè)Locking script;在 Account 模型中則只需要一個(gè)簽名,交易內(nèi)容只包含金額即可。在最新的隔離見證實(shí)現(xiàn)后,Bitcoin的交易數(shù)據(jù)量也大大減少,但是實(shí)際上對(duì)于驗(yàn)證節(jié)點(diǎn)和全節(jié)點(diǎn)仍然需要針對(duì) Witness script 進(jìn)行傳輸和驗(yàn)證。
第五,對(duì)于輕節(jié)點(diǎn)獲取某一地址狀態(tài),UTXO 更復(fù)雜。例如錢包中,需要向全節(jié)點(diǎn)請(qǐng)求所有關(guān)于某個(gè)地址的所有 UTXO,全節(jié)點(diǎn)可以發(fā)送部分 UTXO,錢包要驗(yàn)證該筆 UTXO 是否已經(jīng)被消費(fèi),有一定的難度,而且錢包很難去證明 UTXO 是全集而不是部分集合。而對(duì)于 Account 模型則簡(jiǎn)單很多,根據(jù)地址找到 State 中對(duì)應(yīng)狀態(tài),當(dāng)前狀態(tài)的 State Proof 則可以證明合約數(shù)據(jù)的真?zhèn)?。?dāng)然對(duì)于 UTXO 也可以在每個(gè)區(qū)塊中對(duì) UTXO 的 root 進(jìn)行驗(yàn)證,這一點(diǎn)與當(dāng)前 Bitcoin 的實(shí)現(xiàn)有關(guān),并非 UTXO 的特點(diǎn)。
結(jié)論綜上來看,Account 模型在可編程性,靈活性等方面更有優(yōu)勢(shì);在簡(jiǎn)單業(yè)務(wù)和跨鏈上,UTXO 有其非常獨(dú)到和開創(chuàng)性的優(yōu)點(diǎn)。對(duì)于選擇何種模型,要從具體的業(yè)務(wù)場(chǎng)景進(jìn)行出發(fā)。
參考文獻(xiàn)Thoughts on UTXOs by Vitalik Buterin:
https://medium.com/@ConsenSys...
What are the pros and cons of Ethereum balances vs. UTXOs?:
https://ethereum.stackexchang...
Mastering Bitcoin 2nd Edition - Programming the Open Blockchain: https://github.com/bitcoinboo...
Accounts and not UTXOs: https://github.com/ethereum/w...
交易中的nonce的作用是什么?: https://docs.nervos.org/cita/...
Why is EVM-on-Plasma hard?: https://medium.com/@kelvinfic...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/24726.html
摘要:區(qū)塊鏈上的底層模型設(shè)計(jì),實(shí)際上就是分別以比特幣和以太坊為代表的兩種模型比特幣的模型以太坊的模型而實(shí)際上二者的差異千差萬別,代表了兩種思路。以太坊的模型和銀行賬戶類似,在賬戶中記錄用戶的余額。 showImg(https://segmentfault.com/img/bVbt7zb?w=2779&h=1179); 6 月 18 日,F(xiàn)acebook 加密貨幣項(xiàng)目 Libra 發(fā)布的白皮書...
摘要:比特幣與模型全名是,未花費(fèi)交易輸出,相比于賬戶模型來說沒那么直觀。在比特幣的世界里,并沒有一個(gè)紀(jì)錄所有帳戶余額的帳本。 如果你曾上過BlockExplorer觀察自己的比特幣收入狀況,你是否曾經(jīng)被搞的一頭霧水呢?這正是因?yàn)楸忍貛潘褂玫慕灰啄P筒⒎俏覀冎庇X上以賬戶為基礎(chǔ)的,而是一種叫做UTXO的模型 。在我的前一篇文章:《深入了解NEX:Neon Exchange》中,也提到了比特幣所...
摘要:比特幣與模型全名是,未花費(fèi)交易輸出,相比于賬戶模型來說沒那么直觀。在比特幣的世界里,并沒有一個(gè)紀(jì)錄所有帳戶余額的帳本。 如果你曾上過BlockExplorer觀察自己的比特幣收入狀況,你是否曾經(jīng)被搞的一頭霧水呢?這正是因?yàn)楸忍貛潘褂玫慕灰啄P筒⒎俏覀冎庇X上以賬戶為基礎(chǔ)的,而是一種叫做UTXO的模型 。在我的前一篇文章:《深入了解NEX:Neon Exchange》中,也提到了比特幣所...
摘要:比特幣與模型全名是,未花費(fèi)交易輸出,相比于賬戶模型來說沒那么直觀。在比特幣的世界里,并沒有一個(gè)紀(jì)錄所有帳戶余額的帳本。 如果你曾上過BlockExplorer觀察自己的比特幣收入狀況,你是否曾經(jīng)被搞的一頭霧水呢?這正是因?yàn)楸忍貛潘褂玫慕灰啄P筒⒎俏覀冎庇X上以賬戶為基礎(chǔ)的,而是一種叫做UTXO的模型 。在我的前一篇文章:《深入了解NEX:Neon Exchange》中,也提到了比特幣所...
摘要:的起源來自高明的中本聰中本聰對(duì)比特幣的設(shè)計(jì),讓整個(gè)世界進(jìn)入了數(shù)字貨幣時(shí)代。比原鏈的思考馬克思哲學(xué)的否定之否定規(guī)律,事物的發(fā)展變化是螺旋式上升的。 用戶模型是比原鏈在最初就需要確定的重要數(shù)據(jù)結(jié)構(gòu), 團(tuán)隊(duì)的選擇還是聚焦在兩種典型的模型系統(tǒng)中,Account模型和UTXO模型,和其他大多數(shù)區(qū)塊鏈設(shè)計(jì)一樣, 選擇了模型就決定了協(xié)議層的重要實(shí)現(xiàn),兩種模型各有利弊,不同區(qū)塊鏈針對(duì)想聚焦的場(chǎng)景自身會(huì)...
閱讀 1866·2021-09-23 11:21
閱讀 710·2019-08-30 15:55
閱讀 844·2019-08-29 15:40
閱讀 549·2019-08-29 12:56
閱讀 3176·2019-08-26 12:00
閱讀 3568·2019-08-23 18:24
閱讀 2261·2019-08-23 17:08
閱讀 1650·2019-08-23 17:03