hyperledger-fabric - 如何获取 Hyperledger Fabric 中特定 key 的交易历史记录?

标签 hyperledger-fabric hyperledger

我有一个 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/

相关文章:

mysql - 由于证书错误,无法为 Fabric-ca 服务器设置 mysql 数据库

java - 使用 Hyperledger Fabric Java sdk 获取区 block 信息

hyperledger-fabric - 如何将新的订购者组织添加到现有的 Hyperledger Fabric 网络

hyperledger-fabric - Fabric 中对等点的物理表示是什么?

hyperledger-fabric - super 账本创世区 block

hyperledger-fabric - hyperledger fabric first_network 示例创建 channel 得到 BAD_REQUEST

hyperledger-fabric - 错误: PEM encoded certificate is required

docker - 无法连接 尝试连接到本地对等点时出错 : context deadline exceeded

azure - Kubernetes:AKS 上的某些服务 (LoadBalancer) 的外部 IP 正在等待处理

hyperledger-fabric - super 账本结构 : Enrollment check failed: Idemix enrollment information does not exist