0

我有一个问题。

我正在尝试将 Android 应用程序连接到 indy 池,但我看到错误(分类帐操作发生超时)源(https://github.com/jSh4rk/SampleIndyWallet

我在 AWS(ubuntu 16.04 lts)中安装了 indy,并在使用 docker 运行节点之后

运行docker时我输入了命令

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

因为我想172.31.37.144成为我的 docker 容器的私有 IP 地址:

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

在 SampleIndyWallet 的文件 MainActivity.java 中,我将字符串 ip 更改为容器的公共 IP。

但是,org.hyperledger.indy.sdk.InvalidStateException: The SDK library experienced an unexpected internal error在打开与池的连接的过程中出现错误。

4

1 回答 1

0

为了从任何地方连接到 Hyperledger Indy,您可能已经知道,您需要 genesis 文件。Genesis 文件指定网络节点的 IP 地址及其相关的加密数据(签名、公钥...)。

使用您发布的命令构建 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成为创世文件的一部分。当您向 indySDK 提供 genesis 文件时,它将获取这些 IP 并尝试与它们建立连接。如果您收到诸如PoolTimeout之类的错误,可能是因为您运行 IndySDK 的环境无法访问这些 IP。

因此,通过如上所述构建图像,您是在说:“连接到由该图像构成的容器的客户端必须能够通过地址到达容器172.31.37.144”。如果您尝试从同一网络中的其他 docker 容器连接到池,这可能会起作用。但是,如果应用程序在您的本地主机上运行,172.31.37.144​​则不会连接到任何地方,因为这只是 docker 网络中的内部 IP 地址。

据我了解,您想在池中运行 Indy 网络,并从主机上运行的应用程序连接到池。127.0.0.1最简单的方法是通过公开端口使您的 localhost / 上的网络可访问。让我们首先构建 indy 网络容器,它将127.0.0.1在其创世交易中。

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 文件的路径。

于 2020-03-30T16:30:03.290 回答