[英]How is data store in Hyperledger Fabric when using CouchDB as the Ledger State database?
我在Chaincode for Developers Tutorial中运行代码,运行基本的示例链代码以在分类帐上创建资产(键值对)。
我可以使用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中。 所以我在fabric-samples / chaincode-docker-devmode / docker-compose-simple.yaml中更改了下面的环境变量
CORE_LEDGER_STATE_STATEDATABASE=CouchDB
CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984
我在运行set时看到在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中的文档时,如下所示,但在运行chaincode get查询时正确检索。
"value": {
"rev": "3-7ad1349ec711a99a2a2f1dd1c8b08a20"
}
什么时候
当密钥持久存储到DB时,它的前缀是链码的名称,在您的示例中它是mycc
并且作为分隔符使用[]byte{0x00}
值。 因此,您在示例中看到以下输出:
{
"id": "mycc\u0000a",
"key": "mycc\u0000a",
"value": {
"rev": "3-7ad1349ec711a99a2a2f1dd1c8b08a20"
}
},
它代表链mycc
关键字a
。 要获取此键的值,您只需运行curl
命令,如下所示添加查询参数attachements=true
,例如:
curl -X GET "http://localhost:5984/mychannel/mycc%00a?attachments=true"
会产生与此类似的结果:
--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--%
有关如何从CouchDB读取数据的更多信息,您可能会发现以下教程很有用。
由于数据以二进制形式保存,您将找不到确切的值(相反,您会找到哈希值),但会看到包含mycc的键的记录
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.