Клиентское приложение Hyperledger Fabri c Node.js, развернутое на другом сервере - PullRequest
0 голосов
/ 10 марта 2020

Я борюсь с Node.js клиентской библиотекой Hyperledger Fabri c по этой конкретной ошибке:

Моя сеть блокчейнов (Hyperledger Fabri c 1.4) развернута на одном сервере с IP и все необходимые порты видны с другого сервера. Все примеры / примеры, доступные в документации, относятся к сети через localhost.

Как можно запустить клиентское приложение и указать ему IP-адрес сети вместо имен локального хоста или однорангового контейнера (например, peer0. org1.example.com)?

Должно ли каждое клиентское приложение регистрировать администратора и пользователя в своем локальном постоянном хранилище, или это может быть сделано только один раз самой сетью (и, вероятно, подключено от сети к приложению на более поздней стадии) )? Здесь мы поговорим о Dockerized сети на одном хосте и клиентском приложении (также Dockerized) на другом.

А также, как запустить приложение и подключиться к нему, например, заказанному через GRCPS, если для этого требуется файл сертификата .pem присутствует при вызове createPeer метода?

Я буду очень благодарен за любую помощь, предоставленную здесь.

РЕДАКТИРОВАТЬ, 12.03.2020:

I Я использую образец базовой сети c с изменениями в моей сети, чтобы создать 3 организации с 3 одноранговыми узлами и 5 заказчиками Raft. Я скопировал файл connection-org1. json, изменил localhost на IP-адрес моего внешнего сервера и получил следующую ошибку:

2020-03-12T12:45:31.503Z - error: [SingleQueryHandler]: evaluate: message=No peers available to query. Errors: ["14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed"], stack=FabricError: No peers available to query. Errors: ["14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed"]
    at SingleQueryHandler.evaluate ((...)/network_files/javascript/node_modules/fabric-network/lib/impl/query/singlequeryhandler.js:44:17), name=FabricError
Failed to evaluate transaction: FabricError: No peers available to query. Errors: ["14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed"]

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

Вот мой профиль подключения:

{
    "name": "first-network-org1",
    "version": "1.0.0",
    "client": {
        "organization": "Org1",
        "connection": {
            "timeout": {
                "peer": {
                    "endorser": "300"
                }
            }
        }
    },
    "organizations": {
        "Org1": {
            "mspid": "Org1MSP",
            "peers": [
                "peer0.org1.example.com",
                "peer1.org1.example.com",
                "peer2.org1.example.com"
            ],
            "certificateAuthorities": [
                "ca.org1.example.com"
            ]
        }
    },
    "peers": {
        "peer0.org1.example.com": {
            "url": "grpcs://<IP>:7051",
            "tlsCACerts": {
                "pem": "<CERT>"
            },
            "grpcOptions": {
                "ssl-target-name-override": "peer0.org1.example.com",
                "hostnameOverride": "peer0.org1.example.com"
            },
            "endorsingPeer": true,
            "chaincodeQuery": true,
            "ledgerQuery": true,
            "eventSource": true
        },
        "peer1.org1.example.com": {
            "url": "grpcs://<IP>:8051",
            "tlsCACerts": {
                "pem": "<CERT>"
            },
            "grpcOptions": {
                "ssl-target-name-override": "peer1.org1.example.com",
                "hostnameOverride": "peer1.org1.example.com"
            }
        },
        "peer2.org1.example.com": {
            "url": "grpcs://<IP>:9051",
            "tlsCACerts": {
                "pem": "<CERT>"
            },
            "grpcOptions": {
                "ssl-target-name-override": "peer2.org1.example.com",
                "hostnameOverride": "peer2.org1.example.com"
            }
        }
    },
    "certificateAuthorities": {
        "ca.org1.example.com": {
            "url": "https://<IP>:7054",
            "caName": "ca-org1",
            "tlsCACerts": {
                "pem": "<CERT>"
            },
            "httpOptions": {
                "verify": false
            }
        }
    }
}

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Если вы проводите тестирование с использованием службы docker на основе изображения fabric-tools или аналогичного, установите переменные окружения CORE_PEER_ADDRESS, CORE_PEER_LOCALMSPID и CORE_PEER_ID (между другими). ​​

Если вы Разрабатываете приложение с помощью SDK, настройте свой профиль подключения: https://hyperledger-fabric.readthedocs.io/en/release-1.4/developapps/connectionprofile.html.

Обычно вы регистрируете своего собственного пользователя в клиентском приложении. Привилегированный пользователь или служба регистрирует пользователя, а затем вы регистрируете сертификат в своем приложении с предоставленными учетными данными. Для службы docker на основе fabric-tools настройте переменную среды CORE_PEER_MSPCONFIGPATH. Для клиентского приложения, разработанного с использованием SDK, храните свой закрытый ключ в кошельке (https://hyperledger-fabric.readthedocs.io/en/release-1.4/developapps/wallet.html).

Для GRPCS вам необходим сертификат TLS CA организации. CORE_PEER_TLS_ENABLED и CORE_PEER_TLS_ROOTCERT_FILE переменных в вашем docker клиенте или подходящем профиле подключения в вашем приложении на основе SDK.

0 голосов
/ 12 марта 2020

В вашем файле connection-profile.yml, который вы будете использовать для подключения к сети, просто измените localhost на host_ip, который должен работать нормально.

...