Fabric 1.0原始碼分析(20) Ledger #idStore(ledgerID資料庫)
# Fabric 1.0原始碼筆記 之 Ledger #idStore(ledgerID資料庫)
## 1、idStore概述
* Fabric支援建立多個Ledger,不同Ledger以ledgerID區分。
* 多個ledgerID及其創世區塊儲存在idStore資料庫中,idStore資料庫基於leveldb實現。
* idStore預設使用路徑:/var/hyperledger/production/ledgersData/ledgerProvider/。
* idStore庫中特殊key "underConstructionLedgerKey",用於標誌最新在建的ledgerID,ledgerID建立成功後或失敗時該標誌將清除,另外此標誌也用於異常時按ledgerID恢復資料。
* idStore相關程式碼集中在core/ledger/kvledger/kv_ledger_provider.go。
## 2、idStore結構體定義
leveldbhelper更詳細內容,參考:[Fabric 1.0原始碼筆記 之 LevelDB(KV資料庫)](../leveldb/README.md)
```go
type idStore struct {
db *leveldbhelper.DB
}
//程式碼在core/ledger/kvledger/kv_ledger_provider.go
```
## 3、idStore方法定義
```go
func openIDStore(path string) *idStore //按path建立並開啟leveldb資料庫
func (s *idStore) setUnderConstructionFlag(ledgerID string) error //設定ledgerID在建標誌,將key為"underConstructionLedgerKey",value為ledgerID寫入庫
func (s *idStore) unsetUnderConstructionFlag() error //取消ledgerID在建標誌(確認構建失敗時),刪除key"underConstructionLedgerKey"
func (s *idStore) getUnderConstructionFlag() (string, error) //獲取ledgerID在建標誌(按ledgerID恢復時),按key"underConstructionLedgerKey",取ledgerID
func (s *idStore) createLedgerID(ledgerID string, gb *common.Block) error //建立LedgerID,即以ledgerID為key,將創世區塊寫入庫
func (s *idStore) ledgerIDExists(ledgerID string) (bool, error) //查詢ledgerID是否存在,即查庫中key為ledgerID是否存在
func (s *idStore) getAllLedgerIds() ([]string, error) //獲取ledgerID列表
func (s *idStore) close() //關閉idStore leveldb資料庫
func (s *idStore) encodeLedgerKey(ledgerID string) []byte //為ledgerID新增字首即"l"
func (s *idStore) decodeLedgerID(key []byte) string //解除ledgerID字首
//程式碼在core/ledger/kvledger/kv_ledger_provider.go
```
func (s *idStore) createLedgerID(ledgerID string, gb *common.Block) error程式碼如下:
將ledgerID和Block入庫,並清除ledgerID在建標誌。
```go
func (s *idStore) createLedgerID(ledgerID string, gb *common.Block) error {
key := s.encodeLedgerKey(ledgerID) //為ledgerID新增字首即"l"
var val []byte
var err error
if val, err = proto.Marshal(gb); err != nil { //Block序列化
return err
}
if val, err = s.db.Get(key); err != nil {
return err
}
if val != nil {
return ErrLedgerIDExists //ledgerID已存在
}
batch := &leveldb.Batch{}
batch.Put(key, val) //ledgerID和Block入庫
batch.Delete(underConstructionLedgerKey) //清除ledgerID在建標誌
return s.db.WriteBatch(batch, true) //提交執行
}
//程式碼在core/ledger/kvledger/kv_ledger_provider.go
```
網址:http://www.qukuailianxueyuan.io/
欲領取造幣技術與全套虛擬機器資料
區塊鏈技術交流QQ群:756146052 備註:CSDN
尹成學院微信:備註:CSDN
網址:http://www.qukuailianxueyuan.io/
欲領取造幣技術與全套虛擬機器資料
區塊鏈技術交流QQ群:756146052 備註:CSDN
尹成學院微信:備註:CSDN
相關文章
- Fabric 1.0原始碼分析(19) Ledger #statedb(狀態資料庫)原始碼資料庫
- Fabric 1.0原始碼分析(21)Ledger #historydb(歷史資料庫)原始碼資料庫
- Fabric 1.0原始碼分析(26)Orderer #ledger(Orderer Ledger)原始碼
- Fabric 1.0原始碼分析(18) Ledger(賬本)原始碼
- Fabric 1.0原始碼分析(23)LevelDB(KV資料庫)原始碼資料庫
- Fabric 1.0原始碼分析(22)Ledger #blkstorage(block檔案儲存)原始碼BloC
- Fabric 1.0原始碼分析(25) Orderer原始碼
- Fabric 1.0原始碼分析(31) Peer原始碼
- Fabric 1.0原始碼分析(40) Proposal(提案)原始碼
- Fabric 1.0原始碼分析(3)Chaincode(鏈碼)原始碼AI
- Fabric 1.0原始碼分析(43) Tx(Transaction 交易)原始碼
- Fabric 1.0原始碼分析(47)Fabric 1.0.4 go程式碼量統計原始碼Go
- Fabric 1.0原始碼分析(42)scc(系統鏈碼)原始碼
- Fabric 1.0原始碼分析(13)events(事件服務)原始碼事件
- Fabric 1.0原始碼分析(39) policy(背書策略)原始碼
- Fabric 1.0原始碼分析(15)gossip(流言演算法)原始碼Go演算法
- Fabric 1.0原始碼分析(44)Tx #RWSet(讀寫集)原始碼
- Fabric 1.0原始碼分析(14) flogging(Fabric日誌系統)原始碼
- Fabric 1.0原始碼分析(10)consenter(共識外掛)原始碼
- Fabric 1.0原始碼分析(29) Orderer #multichain(多鏈支援包)原始碼AI
- Fabric 1.0原始碼分析(35)Peer #EndorserServer(Endorser服務端)原始碼Server服務端
- Fabric 1.0原始碼分析(36) Peer #EndorserClient(Endorser客戶端)原始碼client客戶端
- Fabric 1.0原始碼分析(41)putils(protos/utils工具包)原始碼
- Fabric 1.0原始碼分析(45)gRPC(Fabric中註冊的gRPC Service)原始碼RPC
- Fabric 1.0原始碼分析(5)Chaincode(鏈碼)體系總結原始碼AI
- Fabric 1.0原始碼分析(2) blockfile(區塊檔案儲存)原始碼BloC
- Fabric 1.0原始碼分析(32) Peer #peer node start命令實現原始碼
- Fabric 1.0原始碼分析(42)scc(系統鏈碼) #cscc(通道相關)原始碼
- Fabric 1.0原始碼分析(30) Orderer #BroadcastServer(Broadcast服務端)原始碼ASTServer服務端
- Fabric 1.0原始碼分析(37) Peer #DeliverClient(Deliver客戶端)原始碼client客戶端
- Fabric 1.0原始碼分析(38) Peer #BroadcastClient(Broadcast客戶端)原始碼ASTclient客戶端
- Fabric 1.0原始碼分析(4)Chaincode(鏈碼)#platforms(鏈碼語言平臺)原始碼AIPlatform
- Fabric 1.0原始碼分析(27) Orderer #configupdate(處理通道配置更新)原始碼
- Fabric 1.0原始碼分析(33) Peer #peer channel命令及子命令實現原始碼
- Fabric 1.0原始碼分析(1)BCCSP(區塊鏈加密服務提供者)原始碼區塊鏈加密
- Fabric 1.0原始碼分析(9)configtx(配置交易)體系介紹原始碼
- Fabric 1.0原始碼分析(11)consenter(共識外掛) #filter(過濾器)原始碼Filter過濾器
- Fabric 1.0原始碼分析(12)cryptogen(生成組織關係和身份證書)原始碼