2017-09-11 10 views
1

저는 장부에 애셋 (키 - 값 쌍)을 생성하기 위해 기본 샘플 체인 코드를 실행하기 위해 Chaincode for Developers Tutorial에 코드를 실행하고 있습니다.CouchDB를 원장 데이터베이스로 사용할 때 Hyperledger 패브릭에 데이터를 저장하는 방법은 무엇입니까?

가 나는 CLI를

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

또한 쿼리를 실행

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

지금은 키 값 쌍은 CouchDB를에 저장되는 방식을보고 싶어

를 사용하여 chaincode를 호출 할 수 있어요. 그래서 패브릭 샘플/chaincode-고정 표시기-DEVMODE/고정 표시기-작성-simple.yaml 이하에서 환경 변수를 변경

I는 CouchDB를 UI 이하와 같이 생성 된 문서를 참조

CORE_LEDGER_STATE_STATEDATABASE=CouchDB 
CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984 
( 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에서 문서를 검사 할 때 아래와 같이 보이지만, chaincode get query를 실행할 때 제대로 검색됩니다.

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

키가 DB에 지속하는 동안

답변

2

그것이 chaincode의 이름을 접두어로하는 경우, 귀하의 예제에서는 mycc이고 구분 기호로 []byte{0x00} 값을 사용했다. 따라서 당신이 출력 다음, 당신이 예에서 볼 :

chaincode mycc의 키 a을 의미
{ 
    "id": "mycc\u0000a", 
    "key": "mycc\u0000a", 
    "value": { 
    "rev": "3-7ad1349ec711a99a2a2f1dd1c8b08a20" 
    } 
}, 

.

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

이 비슷한으로 발생합니다 : 예를 들어, 쿼리 매개 변수 attachements=true를 추가 다음과 같이 단순히 curl 명령을 실행할 수 있습니다이 키의 값을 얻으려면 CouchDB에서 데이터를 읽는 방법은 다음과 같이 유용 할 수 있습니다. tutorial.데이터가 바이너리에 저장되어 있기 때문에

+0

에 http : // localhost를 : 5984/myc의/3 "오프셋"0, "행"[{ "ID"_all_docs 다음과 같은 출력을 { "TOTAL_ROWS을"제공 "LSCC \ u0000mycc" "키"를 "LSCC \ u0000mycc" , "value": { "rev": "1-35f379c3ea35ef0077b595923bf36151" } } { "ID": "mycc의 \의 u0000a" "키" "mycc \ u0000a" "값"{ "REV": "2 f3049e0b19f6969f01671889c8b1456f" } } { "ID ":"statedb_savepoint " "키 ":"statedb_savepoint " "값 ": { "REV ":"3-62ba0d88e905ef321c85c542bec7bd15 " } } ] } –

+0

어떻게 키 '의 값을받을 수 있나요 마이클 \ u0000a '? http : // localhost : 5984/myc/mycc \ u0000a가 작동하지 않는 것 같습니다. 시도한 URL은 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

확실한 Rumit. 평판이 충분하지 않아서 방금 대답했습니다. 감사합니다. –