2017-09-11 3 views
1

私はChaincode for Developers Tutorialのコードを実行して、元帳の資産(キーと値のペア)を作成するための基本的なサンプルチェーンコードを実行しています。CouchDBを元帳データベースとして使用する場合、Hyperledgerファブリックにデータストアはどのように格納されますか?

私は、CLI

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

を使用してchaincodeを起動しても実行することができるよ今、私はキーと値のペアは、CouchDBの中に格納されますどのように見てみたい

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

を照会します。だから私はファブリックサンプル/ chaincode-ドッキングウィンドウ-DEVMODE /に以下の環境変数を変更しドッカ-構成-simple.yaml

CORE_LEDGER_STATE_STATEDATABASE=CouchDB 
CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984 

私はCouchDBのUI(http://localhost:5984/myc/_all_docs)に以下のように作成したドキュメントを参照してください。私はセットを実行するとき。

{ 
    "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" 
     } 
    } 
    ] 
} 

どのように格納され、取得されるキーの値はありますか? DB内の文書をチェックするときは以下のようになりますが、チェーンコードgetクエリを実行するときは正しく検索されます。

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

は鍵がDBに持続している間

答えて

2

それはchaincodeの名前が付いている場合は、あなたの例ではそれはmyccだとセパレータとして[]byte{0x00}値を使用しました。

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

chaincode myccのキーaの略:したがって、あなたは出力を次のよう、あなたの例を参照してください。このキーの値を取得するには、単にたとえば、クエリパラメータattachements=trueを追加し、次のようcurlのコマンドを実行することができます。詳細については

--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--% 

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

は、これに似たものとなりますCouchDBからデータを読み込むには、tutorialという便利な情報があります。データはバイナリで保存されているので

+0

ます。http:// localhostを:5984/MYC/3、 "オフセット":0、 "行":[{ "ID": "LSCC \ u0000mycc"、 "キー": "LSCC \ u0000mycc" _all_docsは、以下の出力を { "TOTAL_ROWS" を与えます、 "値":{ "rev": "1-35f379c3ea35ef0077b595923bf36151" } } { "ID": "mycc \ u0000a"、 "キー": "mycc \ u0000a"、 "値":{ "REV": "2-f3049e0b19f6969f01671889c8b1456f" } }、 { 「ID 「: "statedb_savepoint"、 "キー": "statedb_savepoint"、 "値":{ "REV": "3-62ba0d88e905ef321c85c542bec7bd15" }} ] } –

+0

がどのように私は 'キーの値を得るのですかmycc \ u0000a '? http:// localhost:5984/myc/mycc \ u0000aは動作していないようです。 http:// localhost:5984/myc/mycc%5Cu0000a –

+0

これは '/ mycc%00a'に変換されます。curl -X GET "http:// localhos":5984/myc/mycc%00a?attachments = true "。 –

0

、あなたは正確な値を(代わりに、あなたはハッシュを見つけるでしょう)見つけることができませんが、キーを持つレコードを含む表示されますmycc

+0

単一行の解決策/提案が必要です – Rumit

+0

Sure Rumit。私は十分な評判がなかったので、私はちょうど答えました。ありがとう –

関連する問題