兄弟连 区块链教程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结构体: - <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>
复制代码
|