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()) {
...
}
如您所见,密钥是从唯一数据中拆分出来的,然后我们从数据库中获取与其相关的所有数据。
希望这可以帮助。
推荐阅读
- html - 非登录状态时不会出现来自静态文件夹的图像 [Spring MVC & Thymeleaf]
- matrix - 从基本矩阵解释相机矩阵?
- laravel - Guzzle POST 请求总是返回 400 Bad Request
- python - Python Pygame 按两个方向键和另一个键射击没有子弹
- php - 使用 symfony 进程运行 mjml cli
- python - 如何在 PySpark 中进行聚合和转置?
- android - 有时getcount函数在firebase android中返回0
- bash - 无法通过 bash osascript shell 脚本传递名称中带有空格的变量
- audio - 如何让 Safari 播放本地音频资源?
- python - 如何将文件中的字符串数据转换为公式的整数形式