区块链教程Fabric1.0源代码分析Ledger(账本)一兄弟连区块链

简介:

  区块链教程Fabric1.0源代码分析Ledger(账本)一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。

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数据库)
  • blkstorage,默认目录/var/hyperledger/production/ledgersData/chains,更详细内容,参考:Fabric 1.0源代码笔记 之 Ledger #blkstorage(block文件存储)
  • statedb,默认目录/var/hyperledger/production/ledgersData/stateLeveldb,更详细内容,参考:Fabric 1.0源代码笔记 之 Ledger #statedb(状态数据库)
  • historydb,默认目录/var/hyperledger/production/ledgersData/historyLeveldb,更详细内容,参考:Fabric 1.0源代码笔记 之 Ledger #historydb(历史数据库)

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。

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本地维护位掩码,用于区分有效交易和无效交易。

type PeerLedger interface {
    commonledger.Ledger //嵌入common/ledger/Ledger接口
    GetTransactionByID(txID string) (*peer.ProcessedTransaction, error) //按txID获取交易
    GetBlockByHash(blockHash []byte) (*common.Block, error) //按blockHash获取Block
    GetBlockByTxID(txID string) (*common.Block, error) //按txID获取包含交易的Block
    GetTxValidationCodeByTxID(txID string) (peer.TxValidationCode, error) //获取交易记录验证的原因代码
    NewTxSimulator() (TxSimulator, error) //创建交易模拟器,客户端可以创建多个"TxSimulator"并行执行
    NewQueryExecutor() (QueryExecutor, error) //创建查询执行器,客户端可以创建多个'QueryExecutor'并行执行
    NewHistoryQueryExecutor() (HistoryQueryExecutor, error) //创建历史记录查询执行器,客户端可以创建多个'HistoryQueryExecutor'并行执行
    Prune(policy commonledger.PrunePolicy) error //裁剪满足给定策略的块或交易
}
//代码在core/ledger/ledger_interface.go
相关文章
|
消息中间件 Kafka 测试技术
超级账本(Hyperledger Fabric)共识
超级账本(Hyperledger Fabric)共识
|
存储 区块链
【超级账本】Fabric 层次结构以及核心模块的介绍(二)
目录 1. 结构介绍 2. 核心代码 3. 核心模块 3.1 peer 系统模块 3.2 order 系统模块 3.3 cryptogen 工具模块 3.4 configtxgen 工具模块 3.5 configtxlator 工具模块 最后
260 0
【超级账本】Fabric 层次结构以及核心模块的介绍(二)
|
存储 JavaScript Go
【超级账本】Fabric介绍及其环境搭建(一)
目录 前言 1. fabric 介绍 1.1 fabric和以太坊的区别 1.2 身份管理介绍 1.3 账本:每个节点中都有 1.4 交易管理介绍 1.5 节点介绍 1.6 通道介绍--channel 2. fabric 环境搭建 2.1 安装虚拟机 2.2 安装必要配置 2.2.1换源 2.2.2 安装vim 2.2.3 安装python2.7 以及 python-pip2 2.2.5 安装go 2.2.6 安装docker 2.2.7 安装docker-compose 2.2.8 Fabric的Docker镜像下载 2.2.9 拉取fabric代码 最后
965 0
【超级账本】Fabric介绍及其环境搭建(一)
|
网络安全 区块链 PHP
区块链之旅(五)超级账本简介及Git、Docker、Fabric的配置
超级账本是推动区块链行业应用的开源项目的总称,组织成员可以发起新的区块链项目,加入超级账本项目,但是还是要遵循Hyperledger的生命周期。
224 0
区块链之旅(五)超级账本简介及Git、Docker、Fabric的配置
|
存储 监控 JavaScript
Hyperledger Fabric on SAP Cloud Platform(SAP云平台上的超级账本简介)
Hyperledger Fabric on SAP Cloud Platform(SAP云平台上的超级账本简介)
124 0
Hyperledger Fabric on SAP Cloud Platform(SAP云平台上的超级账本简介)
|
JavaScript 前端开发 关系型数据库

热门文章

最新文章