Как запросить цепной код извне организации - PullRequest
1 голос
/ 19 мая 2019

У меня есть 4 Org:

  • 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 голосов
/ 21 мая 2019

Мне наконец удалось это сделать.

1.

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

должен быть изменен на:

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

, чтобы получать информацию от пиров ввнешняя организация.

2.

Если используются личные данные, важно, чтобы поля "memberOnlyRead" и "memberOnlyWrite" (1) были удалены илив файле collections_config.json установите false.

пример:

[
 {
   "name": "collectionFacepoints",
   "policy": "OR('Org1MSP.member')",
   "requiredPeerCount": 2,
   "maxPeerCount": 2,
   "blockToLive": 0,
   "memberOnlyRead": false
 }
]

3.

В gateway.connect(connectionProfile, connectionOptions) этоважно добавить discovery.enable=true к connectionOptions.

пример:

await gateway.connect(
  connectionProfile,
  {
    wallet,
    identity: identityConfig.identityLabel,
    discovery: {
      enabled: true,
      asLocalhost: true
    },
    eventHandlerOptions: {
      strategy: DefaultEventHandlerStrategies.NETWORK_SCOPE_ALLFORTX
    }
  }
);

4.

К сожалению, кажется, что клиент изOrgCam не может напрямую запрашивать код цепи, установленный в одноранговых узлах org1, но это можно сделать, добавив пустой (2) одноранговый узел OrgCam, который действует как одноранговый одноранговый узел.


  • (1): "memberOnlyWrite" еще не доступно.См. здесь .
  • (2): «пустой» я имею в виду без установленного на нем цепного кода.
0 голосов
/ 20 мая 2019

Меня немного смущает ваша конфигурация, но я постараюсь ответить как можно лучше.

Позволяет уточнить

Цепной код делаетне «принадлежат» организации.Цепной код принадлежит каналу и имеет определенные политики одобрения.

Учитывая это, можно сказать, что цепной код принадлежит партнерам, которые являются членами канала.

Организация может взаимодействовать только сЦепной код, если он имеет однорангового узла, являющегося участником канала, который имеет цепной код.


Ответ

Вы не предоставили никакой информации о своем канале.Учитывая вашу ошибку, я полагаю, вы не присоединили одноранговый узел OrgCam к каналу, в котором одноранговые узлы Org1 развернули код цепи.

Ваш партнер OrgCam не является частью канала, вы не можете запросить код цепиchannel.

Кроме того, вы не можете использовать клиентский сертификат OrgCam для взаимодействия с партнером Org1, поскольку сертификат не известен / не принят партнерами Org1.Только явно определенные клиенты Org1 могут взаимодействовать с одноранговыми узлами org1.

...