Hyperledger Fabric資料儲存結構

2022-01-25 20:44:46 字數 2372 閱讀 3612

原文:

hyperledger fabric支援多鏈。每個鏈對應一套賬本。所以區塊鏈每個peer節點會維護多套賬本。每個超級賬本包含以下元素:

每個peer節點會維護4個db,它們分別是:

如下圖:(因只展示了單鏈的資料儲存情況,故idstore未在圖中展示)

fabric db.png

其中,世界狀態和賬本資料是兩個賬本最重要的組成部分。

賬本編號的資料儲存在leveldb資料庫中,只是記錄了有哪些賬本,建立新的賬本會檢查是否有相同的賬本編號存在,保證了全域性唯一性。賬本編號庫並不儲存與區塊相關的資料。

賬本資料是以二進位制檔案的形式儲存的,每個賬本資料儲存在不同的目錄下。賬本資料的所有操作都是通過區塊檔案管理器(blockfilemgr)實現的。區塊檔案管理器建立的檔案以「blockfile_」為字首,6位數字為字尾,字尾必須是從小到大連續的數字,中間不能有缺失。預設的區塊檔案大小上限是64m(目前這個大小是硬編碼在**中的),乙個賬本能儲存最大資料量大概是61tb。

下圖是區塊賬本資料的結構:

區塊(block)

每個區塊包含三個部分。

區塊頭(block header)

區塊數(block number):乙個從0(創世區塊)開始的整數,並且對於附加到區塊鏈的每個新塊增加1。

當前區塊hash(current block hash):當前區塊中包含的所有交易的hash。

前一區塊hash(previous block hash):前乙個區塊的hash。

區塊資料(block data)

區塊資料報含了一組交易,交易在區塊建立時寫入。

區塊元資料(block matadata)

元資料報含了區塊建立時間,寫入程式的證書,公鑰和簽名。

交易(transaction)

交易頭(header)

交易頭中包含了一些重要的交易元資料,例如鏈碼的名稱、版本。

簽名(signature)

交易提案(proposal)

交易提案返回(response)

包含了由背書節點返回的模擬執行結果(讀寫集rwset)。這是鏈碼的輸出,如果交易驗證通過,這些資料會被用於更新世界狀態。

背書(endorsements)

包含了交易的背書。乙個返回對應多個背書。

hyperledger fabric提供了多種區塊索引的方式,以便能快速找到區塊。索引的內容是檔案位置指標(file location pointer)。檔案位置指標由三個部分組成:所在檔案的編號(filesuffixnum)、檔案內的偏移量(offset)、區塊占用的位元組數(byteslength)。

狀態資料(state database)記錄的是交易執行的結果,最新的狀態代表了通道(channel)上所有鍵的最新值,所以又稱為「世界狀態」。狀態資料庫目前支援leveldb和couchdb。

不同賬本的狀態資料庫存放在不同的目錄下,不同鏈碼的資料是按鏈碼編號(chaincodeid)作為命名空間來劃分資料。

狀態資料庫的基本操作是基於鍵值對的管理。讀取狀態資料的時候不用指定版本,讀取到的狀態資料是某個時刻最新的版本,返回的資料報含版本和資料兩個部分。

上述描述了世界狀態資料庫的基本儲存結構。當發生交易後,改變資料內容,並變更版本號。

歷史資料記錄了每個狀態資料的歷史資訊,歷史資訊是儲存在leveldb資料庫中的。

Hyperledger Fabric資料,持續更新

fabric原理 hyperledge bric1.2聯盟鏈架構 網易雲課堂 hyperledger fabric的簡單入門 搭建fabric網路的步驟 1.生成證書,相當於賬號 組織,節點,使用者 yaml配置檔案 2.建立生成創始區塊和通道的檔案 執行在docker中 3.啟動節點 ordere...

棧 順序儲存結

棧是線性表的特例,棧的順序儲存其實也是線性表順序的儲存的簡化,我們簡稱為順序棧。對於這種只能一頭插入,一頭刪除的線性表來說,下標為0的一端作為棧底比較好,因為首元素都存在棧底,變化最小。我們定義乙個top變數來指示棧頂元素在陣列中的位置,這top如同中學的游標卡尺的游標,它可以來回移動,意味著棧頂的...

Oracle start with 儲存樹狀結構

create table priortest id number not null fatherid number,name varchar2 4000 not null insert into priortest id,fatherid,name values 1000 null 一級分組 ins...