Fabric 1.0源代码分析(18) Ledger(账本)

# Fabric 1.0源代码笔记 之 Ledger(账本)

## 1、Ledger概述

Ledger,即账本数据库。Fabric账本中有四种数据库,idStore(ledgerID数据库)、blkstorage(block文件存储)、statedb(状态数据库)、historydb(历史数据库)。
其中idStore、historydb使用leveldb实现,statedb可选择使用leveldb或couchDB。而blkstorage中index部分使用leveldb实现,实际区块链数据存储使用文件实现。

* idStore,默认目录/var/hyperledger/production/ledgersData/ledgerProvider,更详细内容,参考:[ Fabric 1.0源代码笔记 之 Ledger #idStore(ledgerID数据库)]( idstore.md)
* blkstorage,默认目录/var/hyperledger/production/ledgersData/chains,更详细内容,参考:[ Fabric 1.0源代码笔记 之 Ledger #blkstorage(block文件存储)]( blkstorage.md)
* statedb,默认目录/var/hyperledger/production/ledgersData/stateLeveldb,更详细内容,参考:[ Fabric 1.0源代码笔记 之 Ledger #statedb(状态数据库)]( statedb.md)
* historydb,默认目录/var/hyperledger/production/ledgersData/historyLeveldb,更详细内容,参考:[ Fabric 1.0源代码笔记 之 Ledger #historydb(历史数据库)]( historydb.md)

## 2、Ledger代码目录结构

Ledger相关代码分布在common/ledger、core/ledger和protos/ledger目录下。目录结构如下:

* common/ledger目录
     * ledger_interface.go,定义了通用接口Ledger、ResultsIterator、以及QueryResult和PrunePolicy(暂时均为空接口)。
     * blkstorage目录, **blkstorage相关接口及实现**
     * util/leveldbhelper目录,LevelDB数据库操作的封装。
    
* core/ledger目录
     * ledger_interface.go,定义了核心接口PeerLedgerProvider、PeerLedger、ValidatedLedger(暂时未定义)、QueryExecutor、HistoryQueryExecutor和TxSimulator。
     * kvledger目录,目前PeerLedgerProvider、PeerLedger等接口仅有一种实现即:kvledger。
         * kv_ledger_provider.go,实现PeerLedgerProvider接口,即Provider结构体及其方法,以及**idStore结构体及方法**。
         * kv_ledger.go,实现PeerLedger接口,即kvLedger结构体及方法。
         * txmgmt目录,交易管理。
             * statedb目录, **statedb相关接口及实现**
         * history/historydb目录, **historydb相关接口及实现**
     * ledgermgmt/ledger_mgmt.go,Ledger管理相关函数实现。
     * ledgerconfig/ledger_config.go,Ledger配置相关函数实现。
     * util目录,Ledger工具相关函数实现。
    

## 3、核心接口定义

PeerLedgerProvider接口定义:提供PeerLedger实例handle。

```go
type PeerLedgerProvider interface {
    Create(genesisBlock *common.Block) (PeerLedger, error) //用给定的创世纪块创建Ledger
    Open(ledgerID string) (PeerLedger, error) //打开已创建的Ledger
    Exists(ledgerID string) ( bool, error) //按ledgerID查Ledger是否存在
    List() ([] string, error) //列出现有的ledgerID
    Close() //关闭 PeerLedgerProvider
}
//代码在core/ledger/ledger_interface.go
```

PeerLedger接口定义:
PeerLedger和OrdererLedger的不同之处在于PeerLedger本地维护位掩码,用于区分有效交易和无效交易。

```go
type PeerLedger interface {
    commonledger.Ledger
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值