二級標題
以太坊,EOS,Solana 這些大家所熟知的鏈都使用的是賬戶模型,甚至可以說90% 以上的項目都使用的是賬戶模型,而只有一些老牌項目用的是UTXO 模型,如,BTC,DOGE ,LTC,當然也有一些比較新的項目也用的這個模型,如Layer 2 中使用OP 方案的FUEL。
二級標題
二級標題
二級標題
2.什麼是賬戶模型
簡單理解,就是銀行賬戶那套系統,比如銀行之間的轉賬,支付寶、微信的轉賬等等都屬於賬戶模型。下面我舉個栗子:
A -50 ,B + 50
假如A 有100 ,B 有100
A 50 , B 150
這時A 給B 轉賬50 塊錢
在系統中的表現形式就是
所以他們的餘額
這是一筆轉賬。
再假如,A 還是有100 ,他要給100 個新開戶的新人轉賬1 元。
這時需要A 同時給100 人轉賬1 塊錢
第1 筆
A -1 ,第1 個人+ 1
所以他們的餘額
A 99 ,第1 個人1
第2 筆
A -1 ,第2 個人+ 1
所以他們的餘額
A 98 ,第2 個人1
第3 筆
A -1 ,第3 個人+ 1
......
所以他們的餘額
A 97 ,第3 個人1
以此類推
第100 人
A -1 ,第100 個人+ 1
理論上,隨著交易筆數的增長,執行所需要的時間就越多。
二級標題
二級標題
二級標題
3.什麼是UTXO 模型
前面也有提到,很多老牌主流用的是UTXO,而這個圈子的老祖宗比特幣也是用的UTXO 模型,順便提一下,我們國家的發行的法定數字貨幣DCEP 也是基於UTXO 模型做的,所以這個模型必然有它的獨特之處。
UTXO 全稱Unspent Transaction Output,意思是“未花費交易輸出”,他的模型簡單說有點像日常生活中的現金體系,舉個栗子:
A 有一個錢包(現實中的錢包),裡面有1 元面值, 10 元面值以及100 元面值。
A 要給B、C、D 分別1 塊錢。
A 有三種方式
第一種:拿出1 元面值的錢給 B
第二種:拿出10 元面值的錢給C,找回9 元
第三種:拿出100 元面值的錢給D,找回99 元
這三種方式都可以把這次交易完成。
再回到鏈上,想像一下這裡每一個面值的錢其實就是一個鏈上UTXO,具體在使用過程中的UTXO 並不是在轉移的,而是在不斷的銷毀和重建,例如:
A 用第二種方式給C 轉錢, 10 元面值的UTXO 會被銷毀,系統會重新印出一張1 元面值和一張9 元面值的UTXO, 1 元的給C, 9 元的還給A。
第三種方式也同理, 100 元的銷毀,印出1 張1 元面值的和一張99 元面值的UTXO, 1 元的給D, 99 元的還給A。
這是UTXO 和賬戶模型轉賬方式的不同,更牛逼的是,UTXO 模型可以並行轉賬,因為餘額是通過分散的UTXO 存在的,所以每個面值其實可以同時轉賬給不同的人,上面三種方式是可以在一筆交易中同時完成的,因為不會涉及到賬戶一致性問題,每個UTXO 都是單獨獨立計算的。
我們在對比上面的賬戶模型,每一筆交易都必須依託於上一筆交易的完成,這其中的性能差距可想而知。這樣就理解為什麼央行數字貨幣使用的是UTXO 模型了,不然深圳怎麼給5 萬個錢包發送1000 萬數字人民幣?
再說回上面那個例子:
想知道這個錢包地址到底有多少錢就需要統計底下有多少個餘額的UTXO 並求和。
二級標題
二級標題
二級標題
4.賬戶模型和UTXO 的優缺點
賬戶模型優點:
合約以代碼形式保存在Account 中,並且Account 擁有自身狀態。這種模型具有更好的可編程性,容易開發人員理解,場景更廣泛。
批量交易的成本較低。設想礦池向礦工支付手續費,UTXO 中因為每個Input 和Out 都需要單獨Witness script 或者Locking script,交易本身會非常大,簽名驗證和交易存儲都需要消耗鏈上寶貴的資源。而Account 模型可以通過合約的方式極大的降低成本。
賬戶模型缺點:
Account 模型交易之間沒有依賴性,需要解決重放問題。 Ethereum 是怎麼解決的,我們清楚Ethereum 是採用的是唯一的Nonce 值的方法,每個交易Tx 中有一個Nonce 字段,對於每個用戶來說,這個Nonce 都不能重複,從而避免了重放攻擊。
對於實現閃電網絡/雷電網絡,Plasma 等,用戶舉證需要更複雜的Proof 證明機制,子鏈向主鏈進行狀態遷移需要更複雜的協議。
UTXO 優點:
計算是在鏈外的,交易本身既是結果也是證明。節點只做驗證即可,不需要對交易進行額外的計算,也沒有額外的狀態存儲。交易本身的輸出UTXO 的計算是在錢包完成的,這樣交易的計算負擔完全由錢包來承擔,一定程度上減少了鏈的負擔。
除Coinbase 交易外,交易的Input 始終是鏈接在某個UTXO 後面。交易無法被重放,並且交易的先後順序和依賴關係容易被驗證,交易是否被消費也容易被舉證。
UTXO 模型是無狀態的,更容易並發處理。
當Input 較多時,見證腳本也會增多。而簽名本身是比較消耗CPU 和存儲空間的。
二級標題
二級標題
二級標題
5.賬戶模型和UTXO 簡要區別有哪些
賬戶餘額
賬戶模型:可以簡單明了的看到賬戶底下有多少錢。
UTXO 模型:統計該地址底下有多少個UTXO ,把他們匯總起來的結果才是餘額。
當交易筆數指數級上升時
賬戶模型:會越來越吃力。
UTXO 模型:天然支持高並發。