日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Libra教程之:数据结构和存储

發布時間:2024/2/28 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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,比特幣等持續更新
  • Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
  • Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
  • java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程

更多教程請參考 flydean的博客

總結

以上是生活随笔為你收集整理的Libra教程之:数据结构和存储的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。