主頁 > 區塊鏈 > UTXO和account模型優缺點

UTXO和account模型優缺點

2020-09-14 00:15:30 區塊鏈

在當前區塊鏈世界中,主要有兩種記錄保存方式,UTXO 模式(Unspent Transaction Output) 和 Account 模式。Bitcoin 采用的是 UTXO 模型,Ethereum 采用的 Account 模型。

Bitcoin 的設計初衷是點對點的電子現金系統,在位元幣中,每個交易消耗之前交易生成的 UTXO 然后生成新的 UTXO,賬戶的余額即所有屬于該地址的未花費 UTXO 集合,Bitcoin 的全域狀態即當前所有未花費的 UTXO 集合。Ethereum 意圖創建一個更為通用的協議,該協議支持圖靈完備的編程語言,在此協議上用戶可以撰寫智能合約,創建各種去中心化的應用。由于 UTXO 模型在狀態保存以及可編程性方面的缺陷,Ethereum 引入了 Account 模型。

1.什么是 UTXO

在位元幣中,一筆交易“在黑盒子里”實際運作的方式是:花費一種東西的集合,這種東西被稱為 “未被花費的交易輸出”(即 “UTXO” ),這些輸出由一個或多個之前的交易所創造,并在其后制造出一筆或多筆新的 UTXO ,可以在未來的交易中花費。每一筆 UTXO 可以被理解為一個 “coin(幣)”:它有面額、有一個所有者。

一筆交易若要有效,必須滿足的兩個規則是:

1)該交易必須包含一個有效的簽名,來自它所花費的 UTXO 的擁有者;

2)被花費的 UTXO 的總面額必須等于或者大于該交易產生的 UTXO 的總面額。

一個用戶的余額因此并不是作為一個數字儲存起來的;而是用他占有的 UTXO 的總和計算出來的。

如果一個用戶想要發送一筆交易,發送 X 個幣到一個特定的地址,有時候,他們擁有的 UTXO 的一些子集組合起來面值恰好是 X,在這種情況下,他們可以創造一個交易:花費他們的 UTXO 并創造出一筆新的、價值 X 的 UTXO ,由目標地址占有。當這種完美的配對不可能的時候,用戶就必須打包其和值大于X 的 UTXO 輸入集合,并添加一筆擁有第二個目標地址的 UTXO ,稱為“零錢輸出”,分配剩下的幣到一個由他們自己控制的地址。

除了"位元幣的網路效應",我們可以為 UTXO 模型提出一些技術上的主張;一個特別的主張是:它允許交易的并行化處理,正如一個交易發送者發送兩筆獨立的交易時,他們可以小心地花費獨立的 UTXO ,因此這些交易也可以用任意次序來處理。這種順序不變性與可并行化屬性也許可以帶來可擴展性的好處。使一個人的幣可以分離開來,同樣有一些隱私保護上的好處,尤其是,當一個用戶接到的每一筆 UTXO 都使用了一個不同的地址的時候,因為這些地址的私鑰可以確切地被所有者通過一個 master seed 生成出來;雖然這種隱私所得很容易被打破,如果該用戶并沒有仔細地保證他的資金相互分離的話。

如果隱私是被強烈偏好的,那么由 UTXO 提供的資金分離對于這個任務來說是遠遠不夠的;這將需要更復雜的建構如環簽名(Ring Signatures),額外的同態加密(Homomorphic Value Encryption)以及 ZK-SNARKs。



2.UTXO 的優缺點

UTXO 模型中,交易只是代表了 UTXO 集合的變更。而賬戶和余額的概念是在 UTXO 集合上更高的抽象,賬號和余額的概念只存在于錢包中。

優點:

計算是在鏈外的,交易本身既是結果也是證明。節點只做驗證即可,不需要對交易進行額外的計算,也沒有額外的狀態存盤。交易本身的輸出 UTXO 的計算是在錢包完成的,這樣交易的計算負擔完全由錢包來承擔,一定程度上減少了鏈的負擔。
除 Coinbase 交易外,交易的 Input 始終是鏈接在某個 UTXO 后面。交易無法被重放,并且交易的先后順序和依賴關系容易被驗證,交易是否被消費也容易被舉證。
UTXO 模型是無狀態的,更容易并發處理。
對于 P2SH 型別的交易,具有更好的隱私性。交易中的 Input 是互不相關聯的,可以使用 CoinJoin 這樣的技術,來增加一定的隱私性。
缺點:

無法實作一些比較復雜的邏輯,可編程性差。對于復雜邏輯,或者需要狀態保存的合約,實作難度大,且狀態空間利用率比較低。
當 Input 較多時,見證腳本也會增多。而簽名本身是比較消耗 CPU 和存盤空間的。


3.ACCOUNT 模型的優缺點

對于 Account 模型,Account 模型保存了世界狀態,鏈的狀態一般在區塊中以 StateRoot 和 ReceiptRoot 等形式進行共識。交易只是事件本身,不包含結果,交易的共識和狀態的共識本質上可以隔離的。



優點:

合約以代碼形式保存在 Account 中,并且 Account 擁有自身狀態。這種模型具有更好的可編程性,容易開發人員理解,場景更廣泛。
批量交易的成本較低。設想礦池向礦工支付手續費,UTXO 中因為每個 Input 和 Out 都需要單獨 Witness script 或者 Locking script,交易本身會非常大,簽名驗證和交易存盤都需要消耗鏈上寶貴的資源。而 Account 模型可以通過合約的方式極大的降低成本。
缺點:

Account 模型交易之間沒有依賴性,需要解決重放問題。
對于實作閃電網路/雷電網路,Plasma 等,用戶舉證需要更復雜的 Proof 證明機制,子鏈向主鏈進行狀態遷移需要更復雜的協議。


4.UTXO VS ACCOUNT

對于以上幾個優點和缺點,我們再做一些分析和對比。

第一,關于計算的問題。

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 的特點。



5.不使用 UTXO的理由

反對 UTXO 的核心主張有下面兩部分:

1)UTXO 的復雜性是沒有必要的,而其復雜性在實際運行中會比在理論上還要大。

2)UTXO 是無狀態的(stateless),因此并不能很好的適用于比資產的發行和保存更加復雜的應用,復雜應用一般來說是有狀態的,比如不同型別的智能合約。

來考察第一種主張。考慮一下你會如何實作一個 UTXO 模式下的錢包——尤其是,生成一個發出交易的函式。這一函式不僅要求一個賬戶的私鑰作為輸入,還有一些瑣碎的資料,比如一個有序的數字,而不是屬于該賬戶的 UTXO 的全集。這一函式還必須接受集合,并確定一個價值大于需要的輸出數額的子集作為輸入。某些時候,如果存在多個最小的子集,又會產生一些決定要花費哪個子集的復雜任務。

此外,如果一個錢包真的想要從上面提到的, UTXO 的并行化交易處理屬性中獲益,該錢包必須仔細地分切“變更輸出”以至于該錢包總是有多個變更輸出可以用作資金的來源;如果一個錢包只控制一個大的變更輸出、總是從中抽取出一個小的數額來做下一筆支出,整個事情又變成連續的了。這不是純粹理論上的問題;大部分的位元幣錢包仍然不能使其最優化,與賬戶和連續數字模型相比,這在本質上使其 UTXO 的可并行化收益作廢。

在位元幣的例子(現實一點來說,任何一個公有鏈都是)中,交易費用以每千位元組計,而 UTXO 選擇演算法必須額外地小心以最優化每一筆 UTXO 的長期平均交易消耗;這甚至引發了一個拒絕服務漏洞,攻擊者可以使用小額的 UTXO(其價值比花費它們需要的邊際手續費還要小) 來堵塞一個錢包。撇開這些,每千位元組的手續費的存在在 UTXO 選擇演算法中引入了一些摩擦:可能有這樣一種情況, UTXO 的子集 S 足以支付需要的數額 X,但大小為 S 的交易要求一筆交易手續費 F, 而 S 并不足以支付 X+F,那么 S 就需要增加到 S’ ,但然后 S' 大小的交易又要求交易手續費 F' ,要求有 UTXO 的子集 S'',等等。 簡而言之,使用賬戶和連續數字,創造一個錢包只是一個高中級別的問題;然而,使用 UTXO 它就變得很接近于一個本科生研究級別的挑戰了。

UTXO 是如何地不契合于有狀態的智能合約,也是清楚的:如果需要創建一個擁有多個階段的合約,比如,必須由多方提供一些形式的輸入,一段時間以后這些參與者又必須執行一些額外的操作,最后,作為他們操作的一個函式,該合約支出資金;很難看出如何拿這個模型去適應基本上無狀態而只有花費和未花費的物件。然而,在一個基于賬戶的模型中,事情就簡單了:一個人可以確認一個合約具有他所希望的代碼,然后,這個合約就可以被其靜態地址呼叫。



結論

綜上來看,Account 模型在可編程性,靈活性等方面更有優勢;在簡單業務和跨鏈上,UTXO 有其非常獨到和開創性的優點。對于選擇何種模型,要從具體的業務場景進行出發。



主要參考資料:

https://ethfans.org/posts/compare-with-utxo-and-account-mode
————————————————
著作權宣告:本文為CSDN博主「Li_Yu_Qing」的原創文章

uj5u.com熱心網友回復:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/28604.html

標籤:區塊鏈技術

上一篇:dapp投票系統

下一篇:第四十九篇 solidity學習筆記(1)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more