# Fabric 1.0源代码笔记 之 Ledger #idStore(ledgerID数据库)
## 1、idStore概述
* Fabric支持创建多个Ledger,不同Ledger以ledgerID区分。
* 多个ledgerID及其创世区块存储在idStore数据库中,idStore数据库基于leveldb实现。
* idStore默认使用路径:/var/hyperledger/production/ledgersData/ledgerProvider/。
* idStore库中特殊key "underConstructionLedgerKey",用于标志最新在建的ledgerID,ledgerID创建成功后或失败时该标志将清除,另外此标志也用于异常时按ledgerID恢复数据。
* idStore相关代码集中在core/ledger/kvledger/kv_ledger_provider.go。
## 2、idStore结构体定义
leveldbhelper更详细内容,参考:[Fabric 1.0源代码笔记 之 LevelDB(KV数据库)](../leveldb/README.md)
```go
type idStore struct {
db *leveldbhelper.DB
}
//代码在core/ledger/kvledger/kv_ledger_provider.go
```
## 3、idStore方法定义
```go
func openIDStore(path string) *idStore //按path创建并打开leveldb数据库
func (s *idStore) setUnderConstructionFlag(ledgerID string) error //设置ledgerID在建标志,将key为"underConstructionLedgerKey",value为ledgerID写入库
func (s *idStore) unsetUnderConstructionFlag() error //取消ledgerID在建标志(确认构建失败时),删除key"underConstructionLedgerKey"
func (s *idStore) getUnderConstructionFlag() (string, error) //获取ledgerID在建标志(按ledgerID恢复时),按key"underConstructionLedgerKey",取ledgerID
func (s *idStore) createLedgerID(ledgerID string, gb *common.Block) error //创建LedgerID,即以ledgerID为key,将创世区块写入库
func (s *idStore) ledgerIDExists(ledgerID string) (bool, error) //查找ledgerID是否存在,即查库中key为ledgerID是否存在
func (s *idStore) getAllLedgerIds() ([]string, error) //获取ledgerID列表
func (s *idStore) close() //关闭idStore leveldb数据库
func (s *idStore) encodeLedgerKey(ledgerID string) []byte //为ledgerID添加前缀即"l"
func (s *idStore) decodeLedgerID(key []byte) string //解除ledgerID前缀
//代码在core/ledger/kvledger/kv_ledger_provider.go
```
func (s *idStore) createLedgerID(ledgerID string, gb *common.Block) error代码如下:
将ledgerID和Block入库,并清除ledgerID在建标志。
```go
func (s *idStore) createLedgerID(ledgerID string, gb *common.Block) error {
key := s.encodeLedgerKey(ledgerID) //为ledgerID添加前缀即"l"
var val []byte
var err error
if val, err = proto.Marshal(gb); err != nil { //Block序列化
return err
}
if val, err = s.db.Get(key); err != nil {
return err
}
if val != nil {
return ErrLedgerIDExists //ledgerID已存在
}
batch := &leveldb.Batch{}
batch.Put(key, val) //ledgerID和Block入库
batch.Delete(underConstructionLedgerKey) //清除ledgerID在建标志
return s.db.WriteBatch(batch, true) //提交执行
}
//代码在core/ledger/kvledger/kv_ledger_provider.go
```

网址:http://www.qukuailianxueyuan.io/

欲领取造币技术与全套虚拟机资料

区块链技术交流QQ群:756146052  备注:CSDN

尹成学院微信:备注:CSDN

网址:http://www.qukuailianxueyuan.io/

欲领取造币技术与全套虚拟机资料

区块链技术交流QQ群:756146052  备注:CSDN

尹成学院微信:备注:CSDN

Fabric 1.0源代码分析(20) Ledger #idStore(ledgerID数据库)相关推荐

  1. Fabric 1.0源代码分析(22)Ledger #blkstorage(block文件存储)

    # Fabric 1.0源代码笔记 之 Ledger #blkstorage(block文件存储) ## blkstorage概述 blkstorage,默认目录/var/hyperledger/pr ...

  2. Fabric 1.0源代码分析(23)LevelDB(KV数据库)

    # Fabric 1.0源代码笔记 之 LevelDB(KV数据库) ## 1.LevelDB概述 LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读 ...

  3. Fabric 1.0源代码分析(26)Orderer #ledger(Orderer Ledger)

    # Fabric 1.0源代码笔记 之 Orderer #ledger(Orderer Ledger) ## 1.Orderer Ledger概述 Orderer Ledger代码分布在orderer ...

  4. Fabric 1.0源代码分析(32) Peer #peer node start命令实现

    # Fabric 1.0源代码笔记 之 Peer #peer node start命令实现 ## 1.peer node加载子命令start和status peer node加载子命令start和st ...

  5. Fabric 1.0源代码分析(15)gossip(流言算法)

    # Fabric 1.0源代码笔记 之 gossip(流言算法) ## 1.gossip概述 gossip,翻译为流言蜚语,即为一种可最终达到一致的算法.最终一致的另外的含义就是,不保证同时达到一致. ...

  6. Fabric 1.0源代码分析(25) Orderer

    # Fabric 1.0源代码笔记 之 Orderer ## 1.Orderer概述 Orderer,为排序节点,对所有发往网络中的交易进行排序,将排序后的交易安排配置中的约定整理为块,之后提交给Co ...

  7. Fabric 1.0源代码分析(43) Tx(Transaction 交易)

    # Fabric 1.0源代码笔记 之 Tx(Transaction 交易) ## 1.Tx概述 Tx,即Transaction,交易或事务. Tx代码分布目录结构如下: * protos/commo ...

  8. Fabric 1.0源代码分析(31) Peer

    # Fabric 1.0源代码笔记 之 Peer ## 1.Peer概述 在Fabric中,Peer(节点)是指在网络中负责接收交易请求.维护一致账本的各个fabric-peer实例.节点之间彼此通过 ...

  9. Fabric 1.0源代码分析(2) blockfile(区块文件存储)

    # Fabric 1.0源代码笔记 之 blockfile(区块文件存储) ## 1.blockfile概述 blockfile,即Fabric区块链区块文件存储,默认目录/var/hyperledg ...

最新文章

  1. 千兆宽带:是为了速度而提升速度吗?
  2. Java盗刷_一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!
  3. 通过“远程桌面连接”连接到Ubuntu
  4. JSTL标签显示动态控件
  5. GDCM:gdcm::Spacing的测试程序
  6. ApplicationInsights的探测器尝鲜
  7. centos7 修改为任意网卡名_centos7首次启动需要配置的内容
  8. 【ffmpeg】基本使用方法总结
  9. php生成迷宫和迷宫寻址算法实例
  10. php实现开关效果代码,JavaScript实现开关效果的代码分享
  11. iweboffice2015库文件WebOffice.js中新增删除两个书签之间的内容实现
  12. 雷赛acc68c说明书_DMC2410C-A四轴通用型点位卡
  13. 有哪些将英文文献翻译为中文的网站或软件?
  14. 最实用windows 下python+numpy安装(转载)
  15. 转贴 30岁你会站在哪?
  16. Unregistering application *** with eureka with status DOWN
  17. 设置chrome浏览器访问http服务时使用麦克风
  18. ShadowLayout 实现阴影效果
  19. 计算机网络(六)应用层
  20. 识破贷后资金归集——关联网络

热门文章

  1. F12控制台输入代码,实现当前页面循环自动点击
  2. matlab中索引最后一个,matlab – 索引必须出现在索引表达式的最后
  3. 计算机电源检查照,如何测试计算机的电源?检查计算机功耗的操作方法
  4. 2021年低压电工模拟考试题及低压电工理论考试
  5. 微信6.6自动抢红包防撤回小程序
  6. Ada语言如何支持中文目录?
  7. Diffusion模型(李宏毅)
  8. Unity3D音乐音效学习笔记
  9. Android学习路线总结,绝对干货
  10. C#调用百度翻译API实现自己的简单翻译工具