查看: 57|回复: 0

[互联网技术] 兄弟连区块链教程Fabric1.0源代码分析blockfile区块文件存储一

发表于 2018-10-26 13:56:05
  兄弟连区块链教程Fabric1.0源代码分析blockfile区块文件存储一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。
Fabric 1.0源代码笔记 之 blockfile(区块文件存储)
1、blockfile概述
blockfile,即Fabric区块链区块文件存储,默认目录/var/hyperledger/production/ledgersData/chains,含index和chains两个子目录。
其中index为索引目录,采用leveldb实现。而chains为各ledger的区块链文件,子目录以ledgerid为名,使用文件系统实现。
区块文件以blockfile_为前缀,最大大小默认64M。
blockfile,相关代码集中在common/ledger/blkstorage/fsblkstorage目录,目录结构如下:
* blockfile_mgr.go,blockfileMgr和checkpointInfo结构体及方法。
* block_stream.go,blockfileStream、blockStream、blockPlacementInfo结构体及方法。
* blockfile_rw.go,blockfileWriter和blockfileReader结构体及方法(blockfileReader未使用)。
* blockindex.go,index接口定义,index接口实现即blockIndex结构体及方法定义,以及blockIdxInfo、locPointer、fileLocPointer结构体及方法。
* blockfile_helper.go,定义了4个工具函数,constructCheckpointInfoFromBlockFiles、retrieveLastFileSuffix、isBlockFileName、getFileInfoOrPanic。
作用分别为:扫描最新的blockfile并重新构造检查点信息、获取最新的文件后缀、根据文件前缀判断是否为区块文件、获取文件状态信息。
* block_serialization.go,block序列化相关工具函数。
* blocks_itr.go,blocksItr结构体及方法。
2、Block结构体定、以及Block序列化
2.1、Block相关结构体
Block结构体:
  1. <p class="MsoNormal"><span class="15" style="font-family: Consolas; color: rgb(0, 0, 0); letter-spacing: 0pt; font-size: 10.5pt;">go</span><span class="15" style="font-family: Consolas; color: rgb(0, 0, 0); letter-spacing: 0pt; font-size: 10.5pt;"><o:p></o:p></span></p><p class="MsoNormal"><span class="15" style="font-family: Consolas; color: rgb(0, 0, 0); letter-spacing: 0pt; font-size: 10.5pt;">type Block struct {</span><span class="15" style="font-family: Consolas; color: rgb(0, 0, 0); letter-spacing: 0pt; font-size: 10.5pt;"><o:p></o:p></span></p><p class="MsoNormal"><span class="15" style="font-family: Consolas; color: rgb(0, 0, 0); letter-spacing: 0pt; font-size: 10.5pt;">    Header   *BlockHeader //BlockHeader</span><span class="15" style="font-family: Consolas; color: rgb(0, 0, 0); letter-spacing: 0pt; font-size: 10.5pt;"><o:p></o:p></span></p><p class="MsoNormal"><span class="15" style="font-family: Consolas; color: rgb(0, 0, 0); letter-spacing: 0pt; font-size: 10.5pt;">    Data     *BlockData //BlockData</span><span class="15" style="font-family: Consolas; color: rgb(0, 0, 0); letter-spacing: 0pt; font-size: 10.5pt;"><o:p></o:p></span></p><p class="MsoNormal"><span class="15" style="font-family: Consolas; color: rgb(0, 0, 0); letter-spacing: 0pt; font-size: 10.5pt;">    Metadata *BlockMetadata</span><span class="15" style="font-family: Consolas; color: rgb(0, 0, 0); letter-spacing: 0pt; font-size: 10.5pt;"><o:p></o:p></span></p><p class="MsoNormal"><span class="15" style="font-family: Consolas; color: rgb(0, 0, 0); letter-spacing: 0pt; font-size: 10.5pt;">}</span></p>
复制代码

未完...欢迎继续关注兄弟连区块链教程分享:http://bbs.itxdl.cn/read-htm-tid-242411-page-1.html



回复

使用道具 举报