SDK Fabric Gateway: как проверить, существует ли канал?

#hyperledger-fabric

Вопрос:

Я вызываю Gateway#getNetwork(String) с именем несуществующего канала.

 Network network = gateway.getNetwork("nonexistent-channel");
 

Несмотря на печать длинной трассировки стека из этой строки, результирующий сетевой объект, который я получаю, не равен нулю. Не уверен, имеет ли это значение, но мой блокчейн Fabric v1.4.9 — я пока не могу обновить версию. Я использую Gateway SDK v2.2.2.

В чем причина такого поведения? Что еще более важно, как мне проверить в этом случае, что я звоню по несуществующему каналу?

Ответ №1:

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

Когда дело доходит до фактического вызова транзакций по цепному коду, развернутому на этом канале, конечно, произойдет сбой, если именованный канал (или цепной код, или функция транзакции) на самом деле не существует.

Ответ №2:

Вы можете использовать любой из существующих каналов, чтобы получить список всех доступных каналов, используя справку CSCC (Системный цепной код конфигурации).

 const network = await gateway.getNetwork("mychannel");
const contract = network.getContract('cscc');
const result = await contract.evaluateTransaction('GetChannels');