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

栏目: 编程工具 · 发布时间: 6年前

内容简介:区块链教程Fabric1.0源代码分析Ledger(账本)一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。Ledger,即账本数据库。Fabric账本中有四种数据库,idStore(ledgerID数据库)、blkstorage(block文件存储)、statedb(状态数据库)、historydb(历史数据库)。其中idStore、historydb使用leveldb实

区块链教程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

未完待续欢迎继续关注兄弟连区块链教程分享!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Clean Code

Clean Code

Robert C. Martin / Prentice Hall / 2008-8-11 / USD 49.99

Even bad code can function. But if code isn’t clean, it can bring a development organization to its knees. Every year, countless hours and significant resources are lost because of poorly written code......一起来看看 《Clean Code》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具