Hyperledger Fabric使用go sdk将交易存储在CouchDB中

时间:2018-10-05 19:06:29

标签: docker go hyperledger-fabric hyperledger

我正在尝试将CouchDB集成为我的Hyperledger网络的saidb,但是在将值传递到putState函数(go sdk)以更新状态时遇到麻烦。

文档说,“状态”配置需要添加到core.yaml文件中。但是,该文件在余额转移中不存在,因此我修改了network-config.yaml文件,将stateDatabase设置为beddb而不是goleveldb,如下所示:

state:
  stateDatabase: CouchDB
  couchDBConfig:
  couchDBAddress: https://localhost:5984
  username:
  password:
  maxRetries: 3
  maxRetriesOnStartup: 10
  requestTimeout: 35s
  queryLimit: 10000

我已经为docker-compose-couch.yaml文件中的每个对等方设置了一个ouchdb 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

基于此,ouchdb docker容器全部运行良好,端口5984拥有由链码创建的相关数据库。我正在努力使链式代码中的putState()请求的值显示出来。 go-sdk文档概述了putState需要一个键(字符串)和值(json字节数组)。

例如,如果我提交一个新事务,该事务将显示在名为mychannel_mycc的数据库下的长沙发上,该数据库具有我指定的ID,但是我作为json字节数组传递的值都没有通过。 Sofadb中的文档如下所示:

{
  "_id": "000000000",
  "_rev": "1-6fab10bceb44087355a55b0bdc9bd9a4",
  "~version": "\u0000CgMBAwA=",
  "_attachments": {
    "valueBytes": {
      "content_type": "application/octet-stream",
      "revpos": 1,
      "digest": "md5-caYFgf07HPDwskuoN1DySg==",
      "length": 338,
      "stub": true
    }
  }
}

如何确保将json对象传递到沙发数据库文档中?

1 个答案:

答案 0 :(得分:0)

我发现问题在于将JSON传递到putState()时的格式。我传递的是JSON对象数组,而不是JSON本身。如果通过该函数传递了无效的JSON,则CouchDB中的数据将反映为附件,而不是JSON本身。

这是我最初通过的内容:

[{"name": "doe", "age": "20"}]

当我应该通过时:

{"name": "doe", "age": "20"}

我还发现JSON对象中的所有内容都必须是字符串。因此,“年龄”必须用引号引起来,而不是整数。