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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
CTF入门篇writeup——D0g3 Games
今天在网上找到一个CTF的小游戏,题目我做了几道感觉挺简单,很适合入门,之前了解CTF,参加各种杯或者是看各种比赛题的writeup,感觉太难了,想到这我还是决定从点滴做起,记录一下学习过程,同时也想做一套CTF从入门到精通的教程。 网址:http://ctf.d0g3.cn/ image.png 下面就简单记录下每道题的解题过程,希望能一点一点积累知识点 WEB 1. _GET 题目地址:http://106.12.21.77:8080/get/get.php image.png 题目分析:很简单了,通过get接受一个变量what,其值等于字符串flag. 解题方法: image.png 2. _POST 题目地址:http://106.12.21.77:8080/post/post.php image.png 题目分析:同理同上,只不过通过POST方式传参。 解题方法: image.png 3. 突破物理极限 题目地址:http://106.12.21.77:8080/length/length.html image.png 题目分析:根据提示输入12345提交,但是由于限制只能输...
- 下一篇
spring api接口返回数据优化 —— 只返回需要的字段数据
概述 spring/spring boot 返回的json数据,通常包含了对象所有的字段,有时候浪费流量。例如一个接口有10个字段,而前端只需要2个字段,都返回会浪费流量。解决方案:前端在header中传递需要包含或需要排除的字段;后端在返回数据前进行统一拦截,只返回需要的字段。具有有多种实现方式(这里只提供spring boot)。 首先约定返回的BaseResult对象格式如下,里面result属性就是实际各种数据对象。 { "ret":0, "msg":null, "result":{ "id":1, "name":"后摄像头53" }, "time":1540972430498 } 实现方式一:通过AOP controller来实现 aop实现步骤说明: 判断返回的是不是BaseResult对象 判断request header或params是否有x-include-fields、x-exclude-fields属性(有则取出来放入set中) 满足以上条件则对BaseResult.result 对象进行处理,用Map替换result对象,Map只返回需要的字段。如果是Array...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案