2017-08-13 1 views
1

J'ai créé un tissu simple, en utilisant la blockchain ./byfn.shImpossible d'interroger la suite à partir de tissu hyperledger v1.0.0 blockchain

Après que je commence le réseau et docker exe -it cli bash

J'ai réussi à installer et à instancier mon chaincode sans aucune erreur. Je invoque ensuite mon chaincode avec cette commande

> 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 a réussi un retour 200.

Cependant quand je lance une requête pour récupérer les données, il n'y avait pas de sortie.

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

ou

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

Ceci est mon chaincode (pastebin link). Soit je ne l'ai pas droit invoquer ou d'une requête mal ... je ne suis pas trop sûr

my containers

[email protected]:/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..... [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/peer#

+0

informations ne suffit pas pour vous aider à déboguer ... suggérez vous postez la sortie du journal concerné des conteneurs par les pairs et cli pour les invocations de instancier de chaincode et de requête. – christo4ferris

+0

Il vous manque le deux-points après votre Args dans la requête. Je pense que cela devrait être: requête de code d'identification pair -C ethos -n ethos_ccv100 -c '{"Args": ["queryPatientInfo", "123456"]}' –

Répondre

1

Dans Hyperledger Tissu v1.0.0 chaincode devrait confirmer API suivante:

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

NOTE

Query(stub shim.ChaincodeStubInterface) pb.Response 

ne fait pas partie de celui-ci, donc de pouvoir interroger les États du grand livre que vous devez ajouter explicitement l'envoi à cette fonction à l'intérieur du Invoke, par exemple:

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

aussi pour prévenir confusion, il est conseillé de gérer le cas où vous obtenez un nom de fonction inattendue et renvoyer une erreur, de sorte que vous obtiendrez une indication claire que vous effectuez quelque chose de mal.Ainsi, au lieu de retourner

return shim.Success(nil) 

do

return shim.Error(fmt.Errorf("Wrong function name, %s", function)) 
+0

Merci! Ceci l'a résolu: D Appréciez votre aide et merci encore –

2

Tu as fait:

shim.Success retour (néant)

Alors que ce que vous devez faire est de mettre des données à l'intérieur:

jsonResp: = "{\" Nom \ ": \" "+ A + "\", \ "Montant \": \ "" string + (Avalbytes) + "\"}" fmt. printf ("réponse de requête:% s \ n", jsonResp)

retour shim.Success (Avalbytes)

+0

Hmm j'ai mis à jour mon code et recompiler, installer et réinstancier. mais je n'obtiens toujours aucun résultat de requête dans mon cli ... j'ai reupdated mon code de pastebin –