首页 > 解决方案 > 在 Hyperledger Fabric 中获取交易历史的算法?

问题描述

我正在寻找有关 Hyperledger Fabric 如何获取特定资产的交易历史的详细信息,包括使用了哪些数据结构和算法。理论上,特定资产的交易应该存储在不同的区块中,而不是按顺序存储。也就是说,可能需要对区块链中的所有区块进行线性搜索才能获得特定资产的所有交易。那正确吗?有没有关于这个问题的文档和代码推荐阅读?谢谢你。

标签: hyperledger-fabric

解决方案


历史不是从分类帐中获取的。

1.与可以存储在leveldb或couchdb中的状态数据不同,历史数据存储在单独的数据存储中,它是leveldb。

2.应为每个对等方启用历史数据存储。

3.这可以通过在core.yaml文件中启用它来完成

ledger->enableHistoryDatabase 设置为 true

否则传递 env 变量

CORE_LEDGER_HISTORY_ENABLEHISTORYDATABASE=true

到要启用历史数据库的容器。

相同键的历史如何存储在历史数据库中。

1.现在因为它是一个nosql数据库,它不能存储重复的key。所以一些唯一的数据被附加到key中,然后数据存储在leveldb中。

2.查询历史数据库 gethistoryforkey API 使用类似这样的查询

leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions());

for (it->Seek("theKey");
       it->Valid() && it->key().ToString() < "theKey~";
       it->Next()) {
    ...
  }

如您所见,密钥是从唯一数据中拆分出来的,然后我们从数据库中获取与其相关的所有数据。

希望这可以帮助。


推荐阅读