Hyperledger Fabric 使用 go sdk 在 CouchDB 中存储事务
小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《Hyperledger Fabric 使用 go sdk 在 CouchDB 中存储事务》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!
问题内容我正在尝试将 couchdb 集成为 hyperledger 网络的stateb,但在将值传递到 putstate
函数(go sdk)以更新状态时遇到问题。
文档表示需要将“状态”配置添加到 core.yaml
文件中。然而,这个文件在balance-transfer中不存在,所以我修改了network-config.yaml
文件,其中statedatabase是couchdb而不是goleveldb,如下所示:
state:
statedatabase: couchdb
couchdbconfig:
couchdbaddress: https://localhost:5984
username:
password:
maxretries: 3
maxretriesonstartup: 10
requesttimeout: 35s
querylimit: 10000
我已经在 docker-compose-couch.yaml
文件中为每个对等方设置了 couchdb docker 容器的配置:
couchdb0:
container_name: peer0.org1.couchdb
image: hyperledger/fabric-couchdb
environment:
- couchdb_user=
- couchdb_password=
ports:
- "5984:5984"
我为每个对等点添加了以下参数,以便对等点的 couchdb 地址指向上面创建的容器。
core_ledger_state_statedatabase=couchdb
core_ledger_state_couchdbconfig_couchdbaddress=couchdb0:5984
基于此,couchdb docker 容器都运行良好,并且端口 5984 具有链码创建的相关数据库。我正在努力让链代码中出现 putstate()
请求的值。 go-sdk 文档概述了 putstate 需要一个键(字符串)和值(json 字节数组)。
mychannel_mycc
的数据库下的 couchdb 中,并具有我指定的 id,但我作为 json 字节数组传递的值都不会经过。 couchdb 中的文档如下所示:
{
"_id": "000000000",
"_rev": "1-6fab10bceb44087355a55b0bdc9bd9a4",
"~version": "\u0000CgMBAwA=",
"_attachments": {
"valueBytes": {
"content_type": "application/octet-stream",
"revpos": 1,
"digest": "md5-caYFgf07HPDwskuoN1DySg==",
"length": 338,
"stub": true
}
}
}
如何确保我的 json 对象传递到 couchdb 文档中?
解决方案
我发现问题与传递给 putstate() 时的 json 格式有关。我传递的是 json 对象数组,而不是 json 本身。如果通过函数传递无效的 json,couchdb 中的数据将反映为附件而不是 json 本身。
这就是我最初经历的:
[{"name": "doe", "age": "20"}]
当我应该通过时:
{"name": "doe", "age": "20"}
我还发现 json 对象中的所有内容都必须是字符串。因此“age”必须用引号引起来,而不是整数。
今天关于《Hyperledger Fabric 使用 go sdk 在 CouchDB 中存储事务》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注编程网公众号!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341