您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Libra數據結構和存儲知識點有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Libra數據結構和存儲知識點有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
驗證的數據結構是通過Merkle樹來實現的。如果大家熟悉其他的區塊鏈的話,大家可能知道Merkle樹由于其特殊的結構,被用在大多數區塊鏈中。
如下圖所示,我們來詳細的講解其存儲的數據結構:
(1)用Merkle樹來表示的不斷累加的賬本歷史。而Merkle樹的根hash值是通過(2)驗證者的簽名來得到的。
每當有交易提交到賬本的時候,會把TransactionInfo提交到Merkle樹的葉子節點。
3表示的就是和這個葉子節點,它包含3部分內容:
簽名過的交易(4)。
交易過程中的事件Event(5),也是以Merkle樹來表示。
還有交易i執行過后的賬本狀態(6),是用Sparse Merkle樹來表示的,其中它的葉子節點是賬戶信息。
對于大多數區塊鏈來說,比如比特幣,他們存儲的是交易記錄,然后以一個一個包含交易的塊來構成的。后面的塊包含了前面塊的hash值。
這樣做的缺點就是,如果我知道某個區塊B1是準確的,那么我想驗證現在的區塊B2,則必須拉取從B1到B2之間的所有交易記錄,這對于區塊鏈的驗證效率是不高的。
在Libra中,這個得到了改善。我們使用的是單一的Merkle樹來提供表示賬本歷史的驗證過的數據結構。
在上面的圖中我們可以看到,TransactionInfo包含了賬本狀態,事件和賬戶信息。在Merkle樹中,每個TransactionInfo都是與一個數據庫版本號i相對應的。
在Libra中,我們使用增量的Merkle tree數據結構,這對于構建效率非常有幫助,因為我們只需要向老的Merkle tree中添加新的交易即可。
對于驗證節點來說,新的交易只跟上一個賬本狀態相關,那么驗證節點其實可以刪除掉不需要的賬本狀態版本來節省空間和效率。
賬本狀態Si表示了所有在版本i中的賬戶的信息。它可以看成是一個key value的map。其中key是256bit的賬戶地址,value就是驗證過的賬戶。
Si也是用Merkle tree來表示的,既然key是256bit,那么整個Merkle tree可以表示為一個2256大小的樹如下所示:
如果直接用256大小來表示太浪費空間了,因為我們并沒有這么多的賬戶。那么我們可以做適當的優化:
(1)表示的是原始狀態的Merkle tree。
在(2)中,我們將所有的空節點用方框表示。這樣會導致樹的不平衡,因為葉子節點總是樹的最低一層。那么我們可以做適當的優化如(3)所示。
當狀態樹進行更新的時候,可以重用之前未更新的賬戶數據,這樣可以在驗證者中存儲狀態樹的多個版本,也可以加快驗證節點的驗證速度。
在邏輯上,一個賬戶是資源和module的集合,并存儲在賬戶的地址中。
在物理上,賬戶存儲的是排序后的access paths映射。access paths可以看成類似文件路徑一樣的東西。
和其他的區塊鏈不同的是,在Libra中,我們鼓勵用戶將資源存儲在自己的賬戶中,在現有的版本中,我們對小賬戶做了優化,在后面的版本中我們同樣會對大賬戶也進行優化升級。
如果所有的資源都存儲在賬戶中,那么隨著時間的推移,賬戶信息會變得越來越大,這會是一個問題。
針對這個問題,Libra提出了空間租賃的概念。簡單講就是給賬戶一個過期時間,過期之后賬戶就不可以被訪問了。當然,Libra也提供了過期賬戶的恢復機制,只需要支付一定數量的Libra幣即可。
和賬戶一樣,事件也是使用Merkle tree來存儲的,并被包含在TransactionInfo中。
讀到這里,這篇“Libra數據結構和存儲知識點有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。