首页 > 解决方案 > 如何知道我在超级账本结构中使用的 stateDB

问题描述

我已经安装了 Hyperledger Fabric 2.0。我正在织物示例目录中运行 fabcar 示例。fabcar 链代码使用测试网络作为结构网络。我想知道 fabcar 示例正在使用哪个 stateDB。

当我运行命令时docker ps -a,我得到的输出为 couchdb,如下所示。

bdf6370d6f5d        hyperledger/fabric-couchdb                                                                                                                                            "tini -- /docker-ent…"   16 minutes ago      Up 16 minutes              4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp   couchdb0



660ba3f7d2a4        hyperledger/fabric-couchdb                                                                                                                                            "tini -- /docker-ent…"   16 minutes ago      Up 16 minutes              4369/tcp, 9100/tcp, 0.0.0.0:7984->5984/tcp   couchdb1

但是链码在 fab-car 链码中以键值对的形式存储数据。键值对存储用于level-db

        await ctx.stub.putState(carNumber, Buffer.from(JSON.stringify(car)));

我真的很困惑我是使用 level-db 还是 state-db 作为 fabcar 示例。

标签: hyperledger-fabrichyperledgerhyperledger-chaincode

解决方案


'State DB' = 存储状态的 DB。这是术语,不是软件。

“LevelDB”或“CouchDB”都可以作为状态数据库(这些是软件)。这取决于从 HLF 2.0 开始将哪些开关传递到“startFabric.sh”中的“byfn.sh”

'startFacric.sh' 中的以下命令将导致'CouchDB' 被用作'State DB'。从中删除“-s couchdb”,HLF 将使用“LevelDB”。

echo y | ./byfn.sh up -a -n -s couchdb

同样在“fabric-samples\first-network\docker-compose-couch.yaml”中,您将拥有以下类型的条目,这些条目会说明您的对等连接到哪个沙发数据库实例。

peer0.org1.example.com:
environment:
  - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
  - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984
  # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD
  # provide the credentials for ledger to connect to CouchDB.  The username and password must
  # match the username and password set for the associated CouchDB.
  - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=
  - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=
depends_on:
  - couchdb0

在这种情况下,“peer0.org1.example.com”连接到端口 5984 上的“couchdb0”。假设整个设置在“localhost”上运行,以下 URL 将显示 CouchDB 实例,您可以四处看看'状态'也保存到它。

http://localhost:5984/_utils/

假设您的频道名称是“mychannel”并且链代码名称是“mycc”,那么您将在“CouchDB”中有一个名为“mychannel_mycc”的数据库。这保存了“mycc”链码的世界状态。


推荐阅读