如何从组织外部查询链码

时间:2019-05-19 16:39:10

标签: hyperledger-fabric hyperledger

我有4个组织:

  • Org1-2个对等人
  • Org2-2个对等
  • OrgCam-0个对等方,1个客户端
  • OrgView-0个对等方,1个客户端

Org1的对等方上安装了一个链码,用于访问一些仅Org1可用的私有数据。

作为OrgCam的客户端,我想访问Org1的对等节点上安装的链码。

当我尝试这样做时:

const result = await contract.evaluateTransaction('getPoints','ID1');

发生此错误

2019-05-19T15:20:20.084Z - error: [SingleQueryHandler]: evaluate: message=No peers available to query. Errors: [], stack=FabricError: No peers available to query. Errors: []
    at SingleQueryHandler.evaluate (/home/zanna/fabric-samples/first-network/clientCode/node_modules/fabric-network/lib/impl/query/singlequeryhandler.js:39:17)
    at Transaction.evaluate (/home/zanna/fabric-samples/first-network/clientCode/node_modules/fabric-network/lib/transaction.js:246:29)
    at Contract.evaluateTransaction (/home/zanna/fabric-samples/first-network/clientCode/node_modules/fabric-network/lib/contract.js:172:39)
    at main (/home/zanna/fabric-samples/first-network/clientCode/camera.js:41:39)
    at <anonymous>, name=FabricError
Failed to evaluate transaction: FabricError: No peers available to query. Errors: []

我的问题是:即使我不是Org1的客户,如何查询Org1的链码?

2 个答案:

答案 0 :(得分:0)

我对您的配置有些困惑,但是我会尽力回答。

让我们说清楚

链码不“属于”组织。链码属于某个渠道,并且具有特定的认可政策。

考虑到这一点,您可以说一个链码属于该频道的对等点。

一个组织只有拥有一个拥有链码的渠道成员的对等方,才能与链码进行交互。


答案

您未提供有关您频道的任何信息。考虑到您的错误,我想您没有将OrgCam对等加入到Org1对等部署链码的通道中。

您的OrgCam对等点不属于频道,您无法查询频道的链码。

此外,您不能使用OrgCam客户端证书与Org1对等方进行交互,因为Org1对等方不知道/不接受该证书。只有Org1明确定义的客户端才能与org1对等方进行交互。

答案 1 :(得分:0)

我终于设法做到了。

1。

const result = await contract.evaluateTransaction('getPoints','ID1');

必须更改为:

const result = await contract.submitTransaction('getPoints','ID1');

为了从外部组织的同伴那里获取信息。

2。

如果正在使用私有数据,则必须删除"memberOnlyRead""memberOnlyWrite" (1)字段或将{中的字段设置为false {1}}文件。

示例:

collections_config.json

3。

[ { "name": "collectionFacepoints", "policy": "OR('Org1MSP.member')", "requiredPeerCount": 2, "maxPeerCount": 2, "blockToLive": 0, "memberOnlyRead": false } ] 中,将gateway.connect(connectionProfile, connectionOptions)添加到discovery.enable=true很重要。

示例:

connectionOptions

4。

不幸的是,似乎OrgCam的客户端无法直接查询安装在org1的对等点中的链码,但是可以添加一个空白的(2) OrgCam的对等点作为锚点对点。

>
  • (1):await gateway.connect( connectionProfile, { wallet, identity: identityConfig.identityLabel, discovery: { enabled: true, asLocalhost: true }, eventHandlerOptions: { strategy: DefaultEventHandlerStrategies.NETWORK_SCOPE_ALLFORTX } } ); 尚不可用。参见here
  • (2):空是指未安装任何链码。