Hyperledger Indy pool подключается android ошибка -> InvalidStateException: в библиотеке SDK произошла непредвиденная внутренняя ошибка - PullRequest
0 голосов
/ 29 марта 2020

У меня есть один вопрос.

Я пытаюсь подключить приложение Android к индейскому пулу, но я вижу источник ошибки (тайм-аут для операции главной книги) (https://github.com/jSh4rk/SampleIndyWallet )

Я установил indy в AWS (ubuntu 16.04 lts) и после запуска узла с docker

При запуске docker я ввел команду

docker build --build-arg pool_ip=172.31.37.144 -f ci/indy-pool.dockerfile -t indy_pool

, потому что я хочу, чтобы 172.31.37.144 был частным IP-адресом моего docker контейнера:

docker run -itd -p 172.31.37.144:9701-9708:9701-9708 -t indy_pool

В файле SampleIndyWallet MainActivity. java Я изменил строку ip на publi c IP моего контейнера.

Тем не менее, я получаю ошибку org.hyperledger.indy.sdk.InvalidStateException: The SDK library experienced an unexpected internal error в процессе открытия соединения с пулом.

1 Ответ

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

Чтобы подключиться к Hyperledger Indy из любой точки мира, как вы, возможно, уже знаете, вам нужен файл genesis. Файл Genesis определяет IP-адреса сетевых узлов и связанные с ними криптографические данные c (подписи, публичные c ключи ...).

При создании Indy pool docker с командой после публикации docker build --build-arg pool_ip=172.31.37.144 -f ci/indy-pool.dockerfile -t indy_pool

важно указать правильное pool_ip. pool_ip станет частью файла генезиса. И когда вы предоставляете файл genesis для indySDK, он возьмет эти IP-адреса и попытается установить с ними sh соединение. Если вы получаете сообщение об ошибке, например PoolTimeout, скорее всего, эти IP-адреса недоступны из среды, в которой вы запускаете IndySDK.

Итак, создавая изображение, как указано выше, вы говорите: « Клиенты, подключающиеся к контейнеру, сделанному из этого изображения, должны иметь возможность добраться до контейнера по адресу 172.31.37.144». Это может сработать, если вы пытаетесь подключиться к пулу из другого контейнера docker в той же сети. Но если приложение работает на вашем локальном хосте, 172.31.37.144 не будет подключаться никуда, поскольку это только внутренний IP-адрес в сети docker.

Как я понял, вы хотите запустить сеть Indy в пуле и подключиться к пулу из приложения, запущенного на вашем хосте. Самый простой способ - сделать сеть доступной на вашем локальном хосте / 127.0.0.1, открыв порты. Давайте сначала создадим сетевой контейнер indy, который будет иметь 127.0.0.1 в своих транзакциях Genesis.

docker build --build-arg pool_ip=127.0.0.1 -f ci/indy-pool.dockerfile -t indy_pool

Теперь давайте прочитаем файл Genesis вашего изображения и сохраним его локально.

docker exec indy_pool cat '/var/lib/indy/sandbox/pool_transactions_genesis' > ~/my_genesis.txn

Далее вы запустите пул так же, как вы это делали, но не нужно указывать внутренний IP-адрес контейнера - это не имеет значения.

docker run -itd -p 9701-9708:9701-9708 -t indy_pool

Теперь, когда вы запускаете приложение и пытаетесь подключиться к пулу, вам нужно будет указать путь к файлу genesis, который мы создали на вашем локальном хосте.

...