各區塊鏈底層數據存儲分析(二)

目前市場上主流的區塊鏈系統有比特幣,Ripple,以太坊和 Hyperledger Fabric 。昨天小編已經爲大家介紹了比特幣和瑞波幣(Ripple),今天小編將繼續爲大家分析當前主要流行的區塊鏈的存儲技術——以太坊和Hyperledger Fabric。
區塊鏈簡介:
區塊鏈(英語:blockchain或block chain)是用分佈式數據庫識別、傳播和記載信息的智能化對等網絡,也稱爲價值互聯網。中本聰於2008年在《比特幣白皮書》中提出“區塊鏈”概念,並在2009年創立了比特幣社會網絡,開發出第一個區塊,即“創世區塊”。區塊鏈包含一張被稱爲區塊的列表,有着持續增長並且排列整齊的記錄。每個區塊都包含一個時間戳和一個與前一區塊的鏈接,這樣設計區塊鏈使得數據不可篡改,一旦記錄下來,在一個區塊中的數據將不可逆。

各區塊鏈底層數據存儲分析(二)

數據存儲(二)
1、以太坊
以太坊是一個開源的有智能合約功能的公共區塊鏈平臺。通過其專用加密貨幣以太幣(Ether,又稱爲「以太幣」)提供去中心化的虛擬機(稱爲「以太虛擬機」Ethereum Virtual Machine)來處理點對點合約。
以太坊的區塊主要由區塊頭和交易組成,區塊在存儲的過程中分別將區塊頭和交易體經過 RLP 編碼後存入至 KV 數據當中。以太坊在數據存儲的過程中,每個 value 對應的key 都有相對應的前綴,不同類型的 value 對應不同的前綴。
區塊交易體的存儲過程如下:

  1. 將區塊中的交易數據和叔塊頭信息進行 RLP 編碼從而生成存儲值value;
  2. 將數據類型前綴,編碼後的區塊高度和區塊哈希拼接生成 key;
    3.將存儲至db數據庫中。
    區塊的信息可以通過區塊哈希和區塊高度進行檢索,其存儲過程如下:
    1.將區塊頭信息進行 RLP 編碼從而生成存儲值 value
    2.將區塊高度進行編碼(轉發成大端格式數據)生成encNum
  3. 將數據類型前綴 (headerPrefix) 和 encNum 生成以區塊高度爲檢索信息的 key
    4.將存儲至db數據庫中,從而生成以區塊高度爲檢索的信息
    5.將數據類型前綴(blockHashPrefix)和區塊哈希生成以區塊哈希爲檢索信息的key
    6.將存儲至db數據庫中,從生成區塊哈希爲檢索的信息
    在數據查詢的時候,應用層只需要提供交易 hash、區塊高度和區塊哈希就能得到交易 key,從而查詢到相關的交易信息。
    2、Hyperledger Fabric
    Hyperledger fabric (HLF)是由Linux基金會主導推廣的區塊鏈開源項目。在Hyperledger Fabric的基礎上又衍生出了其他一些相關的項目。HyperLedger項目彙集了金融、銀行、物聯網、供應鏈、製造等各界開發人員的心血。目的是爲了打造一個跨領域的區塊鏈應用。
    HLF 的存儲系統和比特幣一樣,也是由普通的文件和 kv 的數據庫(levelDB/couchDB)組成。在 HLF 中,每個 channel 對應一個賬本目錄,在賬本目錄中由 blockfile_000000、blockfile_000001 命名格式的文件名組成。爲了快速檢索區塊數據每個文件的大小是64 M Bytes。每個區塊的數據(區塊頭和區塊裏的所有交易)都會序列成字節碼的形式寫入 blockfile 文件中。
    HLF存儲區塊數據的文件名格式如圖所示:
    各區塊鏈底層數據存儲分析(二)
    HLF檢索信息文件如圖所示:
    各區塊鏈底層數據存儲分析(二)

在序列化的過程中,程序以 append 方式打開 blockfile 文件,然後將區塊大小和和區塊數據寫入至 blockfile 文件中。
以下是區塊數據寫入的具體描述:
1.寫入區塊頭數據,依次寫入的數據爲區塊高度、交易哈希和前一個區塊哈希;

  1. 寫入交易數據,依次寫入的數據爲區塊包含交易總量和每筆交易詳細數據;
  2. 寫入區塊的Metadata 數據,依次寫入的數據爲 Metadata 數據總量和每個 Metadata 項的數據詳細信息。
    在寫入數據的過程中會以 kv 的形式保存區塊和交易在 blockfile 文件中的索引信息,以方便 HLF 的快速查詢。
    HLF 區塊索引信息格式在 kv 數據庫中存儲的最終的 LevelKey 值有前綴標誌和區塊 hash 組成,而 LevelValue 的值由區塊高度,區塊 hash,本地文件信息(文件名,文件偏移等信息),每個交易在文件中的偏移列表和區塊的 MetaData 組成, HLF 按照特定的編碼方式將上述的信息拼接成 db 數據庫中的 value 。
    HLF交易索引信息格式在kv數據庫中存儲最終的LevelKey值由channel_name,chaincode_name和chaincode中的key值組合而成:
    LevelKey = channel_name + []byte + chaincode_name + []byte + key
    而 LevelValue 的值由BlockNum 區塊號,TxNum 交易在區塊中的編號組成, HLF 通過將區塊號和交易編號按照特定的方式編碼,然後與 chaincode 中的 value 相互拼接最終生成 db 數據庫中的 value 。
    總結:
    綜上所述,本文介紹的主要區塊鏈除了 Ripple 使用的關係型數據庫存儲、檢索區塊數據外,其他三種類型的區塊鏈都使用 kv 數據庫存儲區塊鏈的檢索信息。在存儲、檢索數據上,比特幣和 Hyperledger Fabric 高度一致,即使用普通文件存儲區塊數據,使用 kv 數據庫存儲檢索信息;以太坊的區塊數據和檢索信息都存儲至 kv 數據庫中,而 Ripple 的區塊數據也會存儲至 kv 數據庫中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章