如何获取Hyperledger Fabric中特定密钥的交易记录?

时间:2018-07-02 12:17:38

标签: hyperledger-fabric hyperledger

我有一个Hyperledger Fabric网络,其中有多个具有对应StateDB(CouchDB)的对等体,并且在docker compose文件下的所有对等体配置中,我都给出了CORE_LEDGER_HISTORY_ENABLEHISTORYDATABASE = true。我将能够检索记录更新记录的想法是密钥。这里的关键是一个贸易编号,每当贸易的任何属性得到更新时,我都会看到CouchDB中发生更新,因为我看到修订值增加了。现在,在我的chaincode函数中,在下面的代码片段(现在为示例代码)中添加了

_,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)

但是,每次我检查chaincode容器时,它只打印Trade的最后一个值,而不是它经过的更新数量,有人可以让我知道我在做什么错吗?

1 个答案:

答案 0 :(得分:1)

好吧,这个问题是只使用一次历史迭代器,而不是对其进行实际迭代。

代替:

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))
}

它将迭代所有关键更新和打印值。