簡體   English   中英

Hyperledger Fabric使用Go SDK將交易存儲在CouchDB中

[英]Hyperledger Fabric storing transactions in CouchDB using go sdk

我正在嘗試將CouchDB集成為我的Hyperledger網絡的saidb,但是在將值傳遞到putState函數(go sdk)以更新狀態時遇到麻煩。

該文檔說,“狀態”配置需要添加到core.yaml文件中。 但是,此文件在余額轉移中不存在,因此我修改了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文件中為每個對等方設置了一個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

基於此,ouchdb docker容器全部運行良好,端口5984擁有由chaincode創建的相關數據庫。 我正在努力使putState()中的putState()請求的值出現。 go-sdk文檔概述了putState需要一個鍵(字符串)和值(json字節數組)。

例如,如果我提交一個新事務,該事務將顯示在名為mychannel_mycc的數據庫下的mychannel_mycc具有我指定的ID,但是我作為json字節數組傳遞的值都沒有通過。 ouchdb中的文檔如下所示:

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

我如何確保我的json對象傳遞到ouchdb文檔中?

我發現問題在於將JSON傳遞到putState()中時的格式。 我傳遞的是JSON對象數組,而不是JSON本身。 如果通過該函數傳遞了無效的JSON,則CouchDB中的數據將反映為附件,而不是JSON本身。

這是我最初通過的內容:

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

當我應該通過時:

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

我還發現JSON對象中的所有內容都必須是字符串。 因此,“年齡”必須用引號引起來,而不是整數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM