Как получить историю транзакций по определенному ключу в Hyperledger Fabric? - PullRequest
0 голосов
/ 02 июля 2018

У меня есть сеть Hyperledger Fabric с несколькими одноранговыми узлами с соответствующим StateDB (CouchDB), и я дал CORE_LEDGER_HISTORY_ENABLEHISTORYDATABASE = true во всех конфигурациях одноранговых узлов в файле компоновки Docker. Идея, что я буду в состоянии извлечь историю обновлений на основе ключа записи. Ключ здесь - это номер сделки, и всякий раз, когда обновляется какой-либо атрибут Trade, я вижу, что обновление происходит в 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 (ноль)

Однако, каждый раз, когда я проверяю контейнер с цепочечным кодом, он печатает только последнее значение Trade, а не количество обновлений, через которые он прошел. Может кто-нибудь сообщить мне, что я здесь не так делаю?

1 Ответ

0 голосов
/ 03 июля 2018

Ну, проблема в том, что итератор истории используется только один раз, вместо того, чтобы фактически перебирать его.

Вместо:

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

, который будет перебирать все ключевые обновления и печатать значения.

...