内容简介:区块链教程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
未完待续欢迎继续关注兄弟连区块链教程分享!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 区块链和分布式账本技术
- 区块链与分布式账本技术的区别
- 区块链和分布式账本有区别吗?
- 区块链分布式账本Fabric、Corda和以太坊比较
- 分布式账本技术大PK:区块链Vs哈希图
- Hyperledger Fabric 1.4 LTS 发布,区块链分布式账本
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Ruby Cookbook
Lucas Carlson、Leonard Richardson / O'Reilly Media / 2006-7-29 / USD 49.99
Do you want to push Ruby to its limits? The "Ruby Cookbook" is the most comprehensive problem-solving guide to today's hottest programming language. It gives you hundreds of solutions to real-world pr......一起来看看 《Ruby Cookbook》 这本书的介绍吧!