Ошибка построения цепочки кода, написанного на go - PullRequest
0 голосов
/ 28 апреля 2018

Когда я пытаюсь изменить пример, описанный в этом примере гиперледжера , я получаю некоторую ошибку при добавлении этой внешней библиотеки для получения истории состояния кода цепи.
Почему это происходит?

Я добавляю библиотеку с govendor, но когда я запускаю эту команду:

docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n $CC_NAME -l "$LANGUAGE" -v 1.0 -c $INIT_STR -P "OR ('Org1MSP.member','Org2MSP.member')"

Я получаю эту ошибку:

Ошибка: ошибка подтверждения цепного кода:
Ошибка rpc: code = Unknown desc = ошибка запуска контейнера: не удалось сгенерировать сборку док-станции для конкретной платформы: ошибка, возвращенная из сборки: 2 "# firstExample chaincode / input / src / firstExample / firstStep.go: 104: 11: невозможно назначить * "github.com/hyperledger/fabric/protos/ledger/queryresult" .KeyModification в кМ (введите * "firstExample / vendor / github.com / hyperledger / fabric / protos / ledger / queryresult ".KeyModification) в нескольких назначениях chaincode / input / src / firstExample / firstStep.go: 146: 11: невозможно назначить * "github.com/hyperledger/fabric/protos/ledger/queryresult" .KeyModification в кМ (введите * "firstExample / vendor / github.com / hyperledger / fabric / protos / ledger / queryresult ".KeyModification) в нескольких назначениях chaincode / input / src / firstExample / firstStep.go: 156: 11: невозможно назначить * "github.com/hyperledger/fabric/protos/ledger/queryresult" .KeyModification в кМ (введите * "firstExample / vendor / github.com / hyperledger / fabric / protos / ledger / queryresult ".KeyModification) в нескольких назначениях

У меня есть некоторые проблемы с этим. Я уверен, что библиотека импортирована, потому что, если я соберу код, написанный в go, с помощью команды:

go build 

Я не получаю ошибок.
Пожалуйста, помогите мне!

1 Ответ

0 голосов
/ 30 апреля 2018

Очень трудно догадаться, не видя реального кода, который вызывает ошибку компиляции, в то время как кажется, что вы не заботитесь о втором параметре, который возвращается HistoryQueryIteratorInterface#Next() API или даже ChaincodeStubInterface#GetHistoryForKey(). Пожалуйста, посмотрите пример того, как правильно использовать эти API:

// GetPreviousValue reads previous value of given key
func (pm *personManagement) GetPreviousValue(params []string, stub shim.ChaincodeStubInterface) peer.Response {
    historyIer, err := stub.GetHistoryForKey(params[0])

    if err != nil {
        errMsg := fmt.Sprintf("[ERROR] cannot retrieve history of key <%s>, due to %s", params[0], err)
        fmt.Println(errMsg)
        return shim.Error(errMsg)
    }

    if historyIer.HasNext() {
        modification, err := historyIer.Next()
        if err != nil {
            errMsg := fmt.Sprintf("[ERROR] cannot read key record modification, key <%s>, due to %s", params[0], err)
            fmt.Println(errMsg)
            return shim.Error(errMsg)
        }
        fmt.Println("Returning information about", string(modification.Value))
        return shim.Success(modification.Value)
    }


    fmt.Printf("No history found for key %s\n", params[0])
    return shim.Success([]byte(fmt.Sprintf("No history for key %s", params[0])))
}

ПРИМЕЧАНИЕ : обратите внимание, что historyIer.Next() возвращает значение истории и ошибку.

...