美文网首页区块链区块链研习社
Hyperledger-fabric的账本存储

Hyperledger-fabric的账本存储

作者: golang推广大使 | 来源:发表于2018-11-07 11:34 被阅读1次

hyperledger-fabric的账本存储

fabric的账本数据主要包含以下4个部分

  1. 区块数据存储
  2. 索引数据库
  3. 历史数据库
  4. 账本编号库

区块数据存储

区块数据存储支持多种类型:文件、json和内存。
以文件为例:区块数据存储内容如下:

File
区块数据大小的proto.EncodeVarint编码
区块数据的序列化编码
区块数据大小的proto.EncodeVarint编码
区块数据的序列化编码

区块文件名以blockfile_0000的形式存在,文件的大小设置一个上限,当存储的数据超过上限时会新建一个区块文件,并把区块写入到新的区块文件里。同时还会降checkpointInfo写入到leveldb数据库中,这个leveldb数据库其实也是索引数据库。

索引数据库存储

索引数据库采用leveldb存储,存储的内容如下:

key val
constructBlockHashKey(blockIdxInfo.blockHash) flpBytes (fileLocPointer类型的数据序列化的结果)
constructBlockNumKey(blockIdxInfo.blockNum) flpBytes
constructTxIDKey(txoffset.txID) txFlpBytes
constructBlockNumTranNumKey(blockIdxInfo.blockNum, uint64(txIterator)) txFlpBytes
constructBlockTxIDKey(txoffset.txID) flpBytes
constructTxValidationCodeIDKey(txoffset.txID) []byte{byte(txsfltr.Flag(idx))}(交易在区块中的索引)
[]byte("indexCheckpointKey") encodeBlockNum(blockIdxInfo.blockNum)
blkMgrInfoKey checkpointInfo的序列化数据

上面construct开头的函数基本是给参数添加相应的前缀,其中的前缀和涉及的结构体定义如下:

const (
    blockNumIdxKeyPrefix           = 'n'
    blockHashIdxKeyPrefix          = 'h'
    txIDIdxKeyPrefix               = 't'
    blockNumTranNumIdxKeyPrefix    = 'a'
    blockTxIDIdxKeyPrefix          = 'b'
    txValidationResultIdxKeyPrefix = 'v'
    indexCheckpointKeyStr          = "indexCheckpointKey"
)

// checkpointInfo
type checkpointInfo struct {
    latestFileChunkSuffixNum int
    latestFileChunksize      int
    isChainEmpty             bool
    lastBlockNumber          uint64
}

// fileLocPointer
type fileLocPointer struct {
    fileSuffixNum int
    locPointer
}
type locPointer struct {
    offset      int
    bytesLength int
}

历史数据库

账本的历史数据库也采用leveldb作为存储,存储的内容如下

key val
historydb.ConstructCompositeHistoryKey(ns, writeKey, blockNo, tranNo) emptyval
savePointKey height.ToBytes()
var savePointKey = []byte{0x00}
var emptyValue = []byte{}

type Height struct {
    BlockNum uint64
    TxNum    uint64
}

账本编号数据库

账本编号数据库

key val
ledgerId block的序列化值

相关文章

  • Hyperledger-fabric的账本存储

    hyperledger-fabric的账本存储 fabric的账本数据主要包含以下4个部分 区块数据存储 索引数据...

  • Hyperledger-Fabric源码分析(ledger-bl

    Hyperledger-Fabric源码分析(底层存储-BlockStore) 这里将fabric存储部分最重要的...

  • Libra教程之:执行Transactions

    Transactions是什么 我们讲到了Libra是一个分布式账本,存储着账本状态,从账本状态里面,我们可以获取...

  • 地址与私钥

    比特币系统本质是一个全网公开的账本,这些账本存储在一个个去中心化的节点,每个节点都保有一个完整账本的副本。 账本上...

  • 区块链基础知识(三)

    区块链技术栈组成 4.1 基础技术栈 4.2 分布式账本 账本存储就是一个数据库 每个节点都有自己独立的账本数据 ...

  • Hyperledger Fabric 小知识点汇总

    1 基本知识点 1.1 账本数据 记账节点的账本数据存储目录一般是 /var/hyperledger/produc...

  • Hyperledger Fabric 存储结构

    1 基本知识点 1.1 账本数据 记账节点的账本数据存储目录一般是 /var/hyperledger/produc...

  • 以太坊账本存储探秘

    以太坊中的一些键的构成 前一篇文章介绍了超级账本fabric的区块存储,其中有部分是索引数据库,其中索引的key非...

  • Hyperledger Fabric交易流程

    账本结构 1.区块链数据,这是用文件系统存储在Committer节点上的。区块链中存储了Transaction的读...

  • 2.2 Hyperledger Fabric - 核心概念 -

    核心概念 - 账本 (Ledger) 帐本是 Hyperledger Fabric 中的关键概念。它存储有关业务对...

网友评论

    本文标题:Hyperledger-fabric的账本存储

    本文链接:https://www.haomeiwen.com/subject/awduxqtx.html