2017-09-11 5 views
1

Je cours le code dans Chaincode for Developers Tutorial, pour exécuter un exemple de chaîne de base pour créer des actifs (paire clé-valeur) sur le registre.Comment est stocké le magasin de données dans Hyperledger Fabric lors de l'utilisation de CouchDB en tant que base de données State Ledger?

Je suis en mesure d'invoquer l'chaincode en utilisant le cli

peer chaincode invoke -n mycc -c '{"Args":["set", "a", "20"]}' -C myc 

et aussi exécuter des requêtes

peer chaincode query -n mycc -c '{"Args":["query","a"]}' -C myc 

Maintenant, je veux voir comment la valeur de clé paire est stockée dans CouchDB. Donc, je l'ai changé les variables d'environnement ci-dessous dans le tissu -échantillons/chaincode-docker-devmode/docker-Compose-simple.yaml

CORE_LEDGER_STATE_STATEDATABASE=CouchDB 
CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984 

Je vois les documents créés comme ci-dessous dans l'interface utilisateur CouchDB (http://localhost:5984/myc/_all_docs) quand je cours ensemble.

{ 
    "total_rows": 3, 
    "offset": 0, 
    "rows": [{ 
     "id": "lscc\u0000mycc", 
     "key": "lscc\u0000mycc", 
     "value": { 
     "rev": "1-dc6dc8ff92efd35358cf5b89e7949c25" 
     } 
    }, 
    { 
     "id": "mycc\u0000a", 
     "key": "mycc\u0000a", 
     "value": { 
     "rev": "3-7ad1349ec711a99a2a2f1dd1c8b08a20" 
     } 
    }, 
    { 
     "id": "statedb_savepoint", 
     "key": "statedb_savepoint", 
     "value": { 
     "rev": "6-2c3d131fc75772cc9e70311998bdde9d" 
     } 
    } 
    ] 
} 

Comment/Où la valeur de la clé est-elle stockée et extraite? Il est vu comme ci-dessous, lors de la vérification du document dans la base de données, mais est récupéré correctement lors de l'exécution de la requête get chaincode.

"value": { 
    "rev": "3-7ad1349ec711a99a2a2f1dd1c8b08a20" 
} 

Lorsque

Répondre

2

Alors que la clé a persisté dans DB il est préfixé avec le nom du chaincode, dans votre exemple, il est mycc et comme séparateur utilisé valeur []byte{0x00}. Par conséquent, vous voyez en vous par exemple, après la sortie:

{ 
    "id": "mycc\u0000a", 
    "key": "mycc\u0000a", 
    "value": { 
    "rev": "3-7ad1349ec711a99a2a2f1dd1c8b08a20" 
    } 
}, 

qui signifie clé a de chaincode mycc. Pour obtenir la valeur de cette clé, vous pouvez simplement exécuter une commande curl comme suit en ajoutant le paramètre de requête attachements=true, par exemple:

curl -X GET "http://localhost:5984/mychannel/mycc%00a?attachments=true" 

se traduira par quelque chose de semblable à ceci:

--bdb0a91d2e233fdc193f2359e6a50472 
Content-Type: application/json 

{"_id":"mycc\u0000a","_rev":"2-2af72e502c2b43c73064728852103fbf","chaincodeid":"mycc","version":"4:0","_attachments":{"valueBytes":{"content_type":"application/octet-stream","revpos":2,"digest":"md5-qpvq4/JGMCgu7WtvFu5zbg==","length":2,"follows":true,"encoding":"gzip","encoded_length":22}}} 
--bdb0a91d2e233fdc193f2359e6a50472 
Content-Disposition: attachment; filename="valueBytes" 
Content-Type: application/octet-stream 
Content-Length: 22 
Content-Encoding: gzip 

4鯄i 
--bdb0a91d2e233fdc193f2359e6a50472--% 

Pour plus d'informations sur comment lire les données de CouchDB vous pourriez trouver la suite tutorial utile.

+0

http: // localhost: 5984/myc/_all_docs donne le résultat suivant { "TOTAL_ROWS": 3, "offset": 0, "lignes": [{ "id": "LSCC \ u0000mycc" "clé": "LSCC \ u0000mycc" "Valeur": "rev": "1-35f379c3ea35ef0077b595923bf36151" } }, { "id": "Mycc \ u0000a", "clé": "Mycc \ u0000a", "valeur": { "rev": "2-f3049e0b19f6969f01671889c8b1456f" } }, { « id « : "statedb_savepoint", "clé": "statedb_savepoint", "valeur": { "rev": "3-62ba0d88e905ef321c85c542bec7bd15" }} ] } –

+0

Comment puis-je obtenir la valeur de la clé ' mycc \ u0000a '? http: // localhost: 5984/myc/mycc \ u0000a ne semble pas fonctionner. Essayé URL codée http: // localhost: 5984/myc/mycc% 5Cu0000a aussi –

+0

Comment est-il converti en '/ mycc% 00a', qui semble fonctionner curl -X GET "http: // localhos": 5984/myc/mycc% 00a? attachments = true ". –

0

Depuis les données sont enregistrées en binaire, vous ne trouverez pas des valeurs exactes (au lieu que vous trouverez hash), mais allez voir les enregistrements ayant la clé contenant Mycc

+0

solution unique/suggestion devrait être Posté dans le commentaire – Rumit

+0

Sure Rumit Comme je n'avais pas assez de réputation, je viens de répondre. –