我有一个 Hyperledger Fabric 网络,其中有多个具有相应 StateDB (CouchDB) 的对等点,并且我在 docker compose 文件下的所有对等点配置中都给出了 CORE_LEDGER_HISTORY_ENABLEHISTORYDATABASE=true。我应该能够根据 key 检索记录的更新历史的想法。这里的关键是交易号,每当交易的任何属性更新时,我都会看到 CouchDB 中发生更新,因为我看到修订值增加了。现在,在我的链代码函数中,添加了以下代码片段(现在的示例代码)
_, args := stub.GetFunctionAndParameters()
tradeNumber := args[1]
historyIer, err := stub.GetHistoryForKey(tradeNumber)
if err != nil {
fmt.Println(err.Error())
return shim.Error(err.Error())
}
if historyIer.HasNext() {
modification, err := historyIer.Next()
if err != nil {
fmt.Println(err.Error())
return shim.Error(err.Error())
}
fmt.Println("Returning information about", string(modification.Value))
} 返回 shim.Success(nil)
但是,每次我检查链代码容器时,它只打印 Trade 的最后一个值而不是它经历的更新次数,有人可以告诉我我在这里做错了什么吗?
最佳答案
好吧,问题是只使用一次历史迭代器而不是实际迭代它。
代替:
if historyIer.HasNext() {
modification, err := historyIer.Next()
if err != nil {
fmt.Println(err.Error())
return shim.Error(err.Error())
}
fmt.Println("Returning information about", string(modification.Value))
}
你需要做的:
for historyIer.HasNext() {
modification, err := historyIer.Next()
if err != nil {
fmt.Println(err.Error())
return shim.Error(err.Error())
}
fmt.Println("Returning information about", string(modification.Value))
}
这将遍历所有关键更新和打印值。
关于hyperledger-fabric - 如何获取 Hyperledger Fabric 中特定 key 的交易历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51136060/