Невозможно запросить результат из блокчейна Hyperledger Fabric v1.0.0

Я создал простой блокчейн ткани, используя ./byfn.sh

После запуска сети и docker exe -it cli bash

Мне удалось установить и создать свой чейнкод без каких-либо ошибок. Затем я вызываю свой цепной код с помощью этой команды

> peer chaincode invoke -o orderer.example.com:7050  --tls
> $CORE_PEER_TLS_ENABLED --cafile
> /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
> -C ethos -n ethos_ccv100 -c '{"Args":["CreatePatientInfo","123456", "22", "175","74","133","37","Eggs","Fever", "Wei Quan", "Tsu",
> "11April1995","[email protected]","96259561", "SINGAPOREAN",
> "Chinese", "Buddist", "Single","13Aug2017"]}'

Invoke был успешным с возвратом 200.

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

peer chaincode query -C ethos -n ethos_ccv100 -c '{"Args["queryPatientInfo","123456"]}'

or

peer chaincode query -C ethos -n ethos_ccv100 -c '{"function":"queryPatientInfo","Args":["123456"]}'

Это мой цепной код (ссылка pastebin). Либо я не вызвал должным образом, либо запросил неверно ... я не совсем уверен

мои контейнеры

root@6b6ec9e233e3:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C ethos -n ethos_ccv100 -v 0.2 -c '{"Args":["queryPatientInfo","S9511924G"]}' -r 2017-08-13 12:48:32.066 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP 2017-08-13 12:48:32.066 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity 2017-08-13 12:48:32.066 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc 2017-08-13 12:48:32.067 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc 2017-08-13 12:48:32.067 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A98070A6A08031A0B08A095C1CC0510...74496E666F0A09533935313139323447 2017-08-13 12:48:32.067 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: 4920E5394B2048EC5629886A51A0F022BED4803495C9FC08B5AB62A1463B92BD Query Result (Raw): 2017-08-13 12:48:32.073 UTC [main] main -> INFO 007 Exiting..... root@6b6ec9e233e3:/opt/gopath/src/github.com/hyperledger/fabric/peer#


person Tsu Wei Quan    schedule 13.08.2017    source источник
comment
недостаточно информации, чтобы помочь вам отлаживать ... предлагаю вам опубликовать соответствующий вывод журнала из одноранговых контейнеров и контейнеров cli для экземпляров цепного кода и вызовов запросов.   -  person christo4ferris    schedule 13.08.2017
comment
В запросе отсутствует двоеточие после аргументов. Я думаю, это должно быть: запрос peer chaincode -C ethos -n ethos_ccv100 -c '{Args: [queryPatientInfo, 123456]}'   -  person Dave Enyeart    schedule 13.08.2017


Ответы (2)


В Hyperledger Fabric v1.0.0 чейнкод должен подтверждать следующий API:

// Chaincode interface must be implemented by all chaincodes. The fabric runs
// the transactions by calling these functions as specified.
type Chaincode interface {
    // Init is called during Instantiate transaction after the chaincode container
    // has been established for the first time, allowing the chaincode to
    // initialize its internal data
    Init(stub ChaincodeStubInterface) pb.Response

    // Invoke is called to update or query the ledger in a proposal transaction.
    // Updated state variables are not committed to the ledger until the
    // transaction is committed.
    Invoke(stub ChaincodeStubInterface) pb.Response
}

ПРИМЕЧАНИЕ

Query(stub shim.ChaincodeStubInterface) pb.Response

Не является его частью, поэтому, чтобы иметь возможность запрашивать состояния из реестра, вам необходимо явно добавить отправку к этой функции внутри Invoke, например:

func (t *SampleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
    function, args := stub.GetFunctionAndParameters()
    if function == "CreatePatientInfo" {
        return CreatePatientInfo(stub, args)
    } else if function == "queryPatientInfo" {
        return t.Query(stub)
    }
    return shim.Success(nil)
}

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

    return shim.Success(nil)

do

    return shim.Error(fmt.Errorf("Wrong function name, %s", function))
person Artem Barger    schedule 13.08.2017
comment
Спасибо! Это решило проблему: D Ценю вашу помощь и еще раз спасибо - person Tsu Wei Quan; 14.08.2017

Ты сделал:

возвратная прокладка. успех (ноль)

Что вам нужно сделать, так это поместить некоторые данные внутрь:

jsonResp: = "{\" Имя \ ": \" "+ A +" \ ", \" Amount \ ": \" "+ string (Avalbytes) +" \ "}" fmt.Printf ("Ответ на запрос:% s \ n ", jsonResp)

возвратная прокладка. успех (Avalbytes)

person yacovm    schedule 13.08.2017
comment
Хм, я обновил свой код и перекомпилировал, установил и заново создал. но я все еще не получаю результатов запроса в моем кли ... я повторно обновил свой код pastebin - person Tsu Wei Quan; 13.08.2017