1.目前的鏈用的都是哪些模型

以太坊,EOS,Solana 這些大家所熟知的鏈都使用的是賬戶模型,甚至可以說90%以上的項目都使用的是賬戶模型,而只有一些老牌項目用的是 UTXO 模型,如,BTC,DOGE,LTC,當然也有一些比較新的項目也用的這個模型,如 Layer2 中使用 OP 方案的 FUEL。

2.什麼是賬戶模型

簡單理解,就是銀行賬戶那套系統,比如銀行之間的轉賬,支付寶、微信的轉賬等等都屬於賬戶模型。下面我舉個栗子:

假如 A 有 100,B 有 100

這時 A 給 B 轉賬 50 塊錢

在系統中的表現形式就是

A -50,B +50

所以他們的餘額

A 50, B 150

這是一筆轉賬。

再假如,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

所以他們的餘額

A 0,第 100 個人 1

理論上要轉賬 100 次,而且下一次的轉賬都必須要先完成前一筆,不然賬戶餘額就無法保證一致性,會混亂,有沒有多轉,餘額夠不夠轉出等。

理論上,隨着交易筆數的增長,執行所需要的時間就越多。

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 萬數字人民幣?

再說回上面那個例子

A 有 100,他要給 100 個新開戶的新人轉賬 1 元。

面值 100 的 UTXO 可以拆分成 100 個面值 1 塊錢的 UTXO,然後在一筆交易中直接分給 100 個人,瞬間完成。

總之,把 UTXO 的面值想象成更加靈活的現金,在鏈上不斷的銷燬和重建。

想知道這個錢包地址到底有多少錢就需要統計底下有多少個餘額的 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 模型是無狀態的,更容易併發處理。

對於 P2SH 類型的交易,具有更好的隱私性。交易中的 Input 是互不相關聯的,可以使用 CoinJoin 這樣的技術,來增加一定的隱私性。

UTXO 缺點:

無法實現一些比較複雜的邏輯,可編程性差。對於複雜邏輯,或者需要狀態保存的合約,實現難度大,且狀態空間利用率比較低。

當 Input 較多時,見證腳本也會增多。而簽名本身是比較消耗 CPU 和存儲空間的。

5.賬戶模型和 UTXO 簡要區別有哪些

賬戶餘額

賬戶模型:可以簡單明瞭的看到賬戶底下有多少錢。

UTXO 模型:統計該地址底下有多少個 UTXO ,把他們彙總起來的結果纔是餘額。

當交易筆數指數級上升時

賬戶模型:會越來越喫力。

UTXO 模型:天然支持高併發。

從智能合約/開發者角度出發

賬戶模型符合開發者的邏輯習慣,相對容易寫邏輯

UTXO 腳本編程較爲複雜