Hyperledger Fabric Ledger——帳本總帳

Ledgerhtml

Ledger(帳本)即全部的state transitions(狀態切換),是有序且不可篡改的。state transitions(狀態切換)是由參與方提交的chaincode(智能合約)調用(「transactions/事務」)的結果。每一個事務都將產生一組資產鍵值對,這些鍵值對做爲建立、更新或刪除而提交給Ledger(帳本)。數據庫

Ledger(帳本)由blockchain(區塊鏈)(「chain」)組成,區塊則用來存儲有序且不可篡改的記錄,以及保存當前狀態的state database(狀態數據庫)。在每個channel中都會存在一個Ledger(帳本)。每個peer都會維護它做爲其中成員的每個channel中的本地拷貝的Ledger(帳本)。併發

 

Chain

chain是一個事務日誌,是一個由hash連接的連接各個區塊的結構,其中每一個區塊都包含了N個事務的序列。區塊header包含了該區塊的事務的hash,以及上一個區塊頭的hash。這樣,全部在帳本上的交易都是按順序排列的,並以密碼方式連接在一塊兒。換句話說,在不破壞hash連接的狀況下篡改帳本數據是不可能的。最近的區塊的hash表明了之前的每一個事務,從而確保全部的peers都處於一致和可信的狀態。
函數

chain存儲在peer文件系統(本地或附加存儲)上,有效地支持blockchain工做負載的應用程序的特性。區塊鏈

 

State Database

該帳本的當前狀態數據表示chain事務日誌中包含的全部鍵的最新值。因爲當前狀態表示channel所知道的全部最新鍵值,所以有時也稱爲「World State(世界狀態)」。spa

在chaincode調用對當前狀態數據執行操做的事務時,爲了使這些chaincode交互很是有效,全部鍵的最新值都存儲在一個狀態數據庫中。狀態數據庫只是一個索引視圖到chain的事務日誌中,所以能夠在任什麼時候候從chain中從新生成它。在事務被接受以前,狀態數據庫將自動恢復(或在須要時生成)。版本控制

狀態數據庫選項包括LevelDB和CouchDB。LevelDB是嵌入在peer進程中的默認狀態數據庫,並將chaincode數據存儲爲鍵/值對。CouchDB是一個可選的外部狀態數據庫,當你所寫的chaincode數據被建模爲JSON時,它提供了額外的查詢支持,容許對JSON內容進行豐富的查詢。
日誌

 

Transaction Flow

在高層業務邏輯處理上,transaction flow(事務處理流程)是由應用程序客戶端發送的事務協議,該協議最終發送到指定的背書節點。背書節點會驗證客戶端的簽名,並執行一個chaincode函數來模擬事務。最終返回給客戶端的是chaincode結果,即一組在chaincode(讀集)中讀取的鍵/值版本,以及在chaincode(寫集)中寫入的鍵/值集合,即返回該peer執行chaincode後模擬出來的讀寫集結果,同時還會附帶一個背書籤名。code

客戶端將背書組合成一個事務payload,並將其廣播至一個ordering service(排序服務節點),ordering service(排序服務節點)爲當前channel上的全部peers提供排序服務並生成區塊。htm

實際上,客戶端在將事務廣播到排序服務以前,先將本次請求提交到peer,由peer來驗證事務。

首先,peer將檢查背書策略,以確保指定的peer的正確分配已經簽署告終果,而且他們將根據事務payload對簽名進行身份驗證。

其次,peer將對事務讀取集進行版本控制,以確保數據完整性,並防止諸如重複開銷之類的問題。Hyperledger Fabric具備併發控制,即事務容許並行執行(經過背書)來增長吞吐量,而且在提交(全部peer)的狀況下,每一個事務都通過驗證,以確保沒有其餘事務修改它已經讀取的數據。換句話說,它確保了在執行(批准)時間以後讀取的數據沒有發生變化,所以執行結果仍然有效,而且能夠提交到帳本狀態數據庫。若是讀取的數據被另外一個事務更改,則該區塊中的相同事務被標記爲無效,而且不該用於帳本狀態數據庫。客戶端應用程序被警告,而且能夠在適當的狀況下處理錯誤或重試。

(備註:上述最後一段話的邏輯理論上是正確的,即讀取本地版本而後根據本地版本發送廣播至排序服務,再由排序服務進行事務處理。但事務處理結果經過實際使用sdk開發,該結果並未即時返回給當前調用客戶端,即客戶端沒法實時獲取事務狀態,只能經過再次查詢來確認最終結果。後續版本sdk可能會修復此問題。)

 

請參閱Hyperledger Fabric Transaction Flow——事務處理流程Hyperledger Fabric Read-Write set semantics——讀寫集Hyperledger Fabric CouchDB as the State Database——使用CouchDB,以深刻了解事務結構、併發控制和狀態數據庫。

相關文章
相關標籤/搜索