Hyperledger Fabric хранит транзакции в CouchDB с помощью go sdk - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь интегрировать CouchDB в качестве утвержденного b для моей сети Hyperledger, но у меня возникают проблемы при передаче значений в функцию putState (go sdk) для обновления состояния.

В документации сказано, что в файл core.yaml необходимо добавить конфигурацию 'state'.Однако этот файл не существует при переносе баланса, поэтому я изменил файл 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-контейнер couchdb для каждого однорангового узла в файле docker-compose-couch.yaml:

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 работают нормально, и порт 5984 имеет соответствующие базы данных, созданные с помощью цепного кода.То, что я пытаюсь получить значения putState() в цепочке кода, чтобы появиться.Документация go-sdk описывает, что для putState требуется ключ (строка) и значение (массив байтов json).

Например, если я отправляю новую транзакцию, транзакция будет отображаться в couchdb под БД с именем mychannel_mycc с идентификатором, который я указал, но ни одно из значений, которые я передал как байтовый массив 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?

1 Ответ

0 голосов
/ 11 октября 2018

Я понял, что проблема связана с форматом JSON, когда он передается в putState ().Я передавал массив объектов JSON, а не сам JSON.Если через функцию передается недопустимый JSON, данные в CouchDB отображаются как вложение, а не как сам JSON.

Это то, через что я первоначально проходил:

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

КогдаЯ должен был передать:

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

Я также обнаружил, что все внутри объекта JSON должно быть строкой.Таким образом, «возраст» должен быть в кавычках, а не в int.

...