我有4个组织:
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的链码?
答案 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的对等点作为锚点对点。
>await gateway.connect(
connectionProfile,
{
wallet,
identity: identityConfig.identityLabel,
discovery: {
enabled: true,
asLocalhost: true
},
eventHandlerOptions: {
strategy: DefaultEventHandlerStrategies.NETWORK_SCOPE_ALLFORTX
}
}
);
尚不可用。参见here。