[英]writing applcation using fabric client and fabric ca client SDK for Hyperledger
[英]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.