此文我們會深入討論以太坊數據存儲層。我們會介紹區塊鏈“狀態”的概念。同時也會討論Patricia前綴樹結構背后的理論,使用谷歌的leveldb數據庫演示以太坊前綴樹的具體實現。
在存儲層中,我們存儲的是什么?

首先我們需要理解為了讓區塊鏈系統運行,我們需要存儲的東西。讓我們簡單地看下關于Alice給Bob轉賬10美金的例子。
我們可以看出,通過執行轉賬可以改變其中的狀態。
我們必須要追蹤余額以及不同人(狀態)的其他細節,還有在區塊鏈之間發生的細節(轉賬)。不同的平臺會有不同地處理方法。我們可以看出,比特幣和以太坊是如何處理的。
比特幣
比特幣的狀態是通過UTXO來實現的。比特幣價值轉移是通過轉賬實現的。更特別地是,比特幣用戶可以通過創建轉賬花費1個或多個UTXO,并且將他們的UTXO作為轉賬輸入。
UTXO模型讓比特幣和以太坊不同。我們可以看這些例子來理解其中的區別。
首先,比特幣UTXO不能部分花費。如果比特幣用戶花費0.5個比特幣(使用他們僅有的UTXO,價值1比特幣),他們需要特意地發回0.5個比特幣。如果他們不發送這部分,那么這個0.5比特幣就會丟失,并且給到挖出轉賬的礦工。

其次,在最基本的層面,比特幣沒有包含用戶賬戶余額。通過比特幣,用戶可以簡單地持有私鑰,在任何時間點都可以進行一個或者多個UTXO。數字錢包看起來像是讓比特幣區塊鏈能夠自動地存儲和管理用戶賬戶余額,其實不是這樣。

比特幣的UTXO系統工作的很好,這是由于數字錢包能夠完成大多數轉賬任務。其中包括,但是不限于:
a) 處理UTXO
b) 存儲秘鑰
c) 設置轉賬費用
d) 提供返回地址
e)描述UTXO狀態(展示可行性,待轉賬以及全部的余額)
UTXO模型中的轉賬可以類比為紙幣轉賬。每個賬戶都會追蹤錢包添加的賬單(UTXO)。當我們想要花錢的時候,我們會使用一個或者多個賬單(現在的UTXO),這已經足夠來承擔花銷,或許還會得到一些找零。(新的UTXO)。每個賬單只能花費一次,一旦消費,UTXO就會從資金池移走。
總結下來,我們知道:
? 比特幣區塊鏈不會持有賬戶余額
? 的秘鑰
? 如果包含在轉賬中,完整的UTXO會被消費(有時候,部分會得到新的UTXO作為找零)
以太坊
和以上的信息相反,以太坊的狀態能夠管理賬戶余額,以及更多信息。以太坊的狀態并不是個抽象的概念。它是以太坊底層協議的部分。根據黃皮書中的描述,以太坊是一個基于轉賬的狀態機器;基于狀態機器的轉賬技術能夠被創建。
我們從頭開始來講述。和其他區塊鏈一樣,以太坊區塊鏈也是從創世區塊開始的。從那時候起,例如轉賬,合約和挖礦之類的事情,都會陸續改變以太坊區塊鏈的狀態。在以太坊中,舉例來說就是賬戶余額(存儲在狀態樹中),這會隨著轉賬而改變,同時和賬戶相關連。
重要地是,例如賬戶余額之類的數據并不是直接存儲在以太坊區塊鏈的區塊中。只有根節點哈希的轉賬,狀態數據和回執數據是直接存儲在區塊鏈上的。可以根據下圖看出。

也許你也注意到了,從上面的圖表中,存儲樹的根節點哈希(所有的智能合約數據存儲在其中)其實都是指向狀態樹的,從而指向區塊鏈。接下來,我們會討論更多細節。
以太坊中有兩種不同的數據類型:永久數據和暫時數據。永久數據的例子就是轉賬。一旦轉賬確認,就會在區塊鏈中記錄;然后就再也不可以更改。暫時數據的例子就是特定以太坊賬戶地址的余額。賬戶的余額就會存儲在狀態樹中,并且當有特定賬戶轉賬的時候,就會改變。永久數據是有意義的,就好像挖礦轉賬,暫時數據,就例如賬戶余額,應該被分開存儲。以太坊會使用數據樹結構來管理數據。
以太坊的數據記錄就好像在銀行。類似使用ATM機器和存儲卡。銀行會追蹤每個借記卡來確保在在完成轉賬之前,有足夠的余額。
版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。