IBC 中继器 (IBC Relayers)

在 Namada 上进行中继 (Relaying on Namada)

本文档介绍了如何为 Namada 上的跨链通信(IBC)协议操作中继器。本文档涵盖了通过 IBC 创建连接以及为测试目的设置 Namada 本地实例的能力。

本文档涵盖了与 Namada 一起使用 IBC 的基本步骤:

  • 设置 Hermes(Setup Hermes)

  • 安装 Hermes(Install Hermes)

  • 设置中继器(Setting up the relayer)

  • 启动中继器(Start the relayer)

  • 设置本地 Namada 实例(Set up local Namada instances)

以下内容适用于希望在两个 Namada 链之间中继 IBC 消息传输的人员。当然,也可以在任何两个 IBC 兼容链(如 Cosmos 链)之间执行此操作。在这种情况下,为了进行任何包传输,目标链和源链上都需要运行一个节点。下面,我们首先讨论如何通过 Hermes 在两个预先存在的链之间启用此连接,其次,为此目的设置两个 Namada 本地实例或加入两个预先存在的 Namada 实例。


设置 Hermes (Setup Hermes)

Hermes 是一个 IBC 中继器,用于在链(实例)之间中继 IBC 数据包。Namada 使用支持 Namada 实例的 Hermes 分支arrow-up-right。在数据包中继之前,用户需要执行以下步骤来配置并启动 Hermes。

  1. 创建 Hermes 配置文件 (Make Hermes config file)

  2. 在实例之间创建 IBC 客户端/连接/通道 (Create IBC client/connection/channel between instances)

  3. 运行 Hermes (Run Hermes)

创建 Hermes 配置文件 (Make Hermes config file)

解决这个问题的一个重要部分是创建一个 config.toml 文件,描述将设置哪些连接,中继器将负责这些连接。

如果您不指定文件路径,则默认读取 ~/.hermes/config.toml

您可以在下面找到配置文件的示例。基本上,您只需更改配置文件中的链 ID、RPC 地址和密钥名称即可。如果您没有节点,请手动设置节点或通过我们的脚本设置。

例子:

将在变量 $HERMES_CONFIG 中保存的配置文件路径将在后面有用。

circle-info

解析 toml (Interpreting the toml)

每个链配置都在 [[chains]] 对象下指定。这些是您想要密切关注的难题部分:

  • chains.id 是链的名称

  • chains.rpc_address 指定通道通过的端口,并将成为与账本交互时 Namada 的 ledger_address 的参数(稍后将更清晰)

  • 请确保将 IP 地址更改为运行此节点的本地机器的 IP 地址!

  • chains.key_name 指定签名交易的签名者的密钥。应在启动中继器之前生成密钥。

  • event_source 指定链的 websocket 的 URL。为了使 Hermes 正常工作,它必须与 rpc_address 相同。

在实例之间创建 IBC 客户端/连接/通道 (Create IBC client/connection/channel between instances)

Hermes CLI 有创建它们的命令。在创建之前,应在指定的 rpc 地址上运行每个实例的节点。如果您没有节点,请手动设置节点或通过我们的脚本设置。

导出环境变量 (Export environment variables)

中继用户将需要保存某些环境变量。它们是:


安装 Hermes (Install Hermes)

在进行任何 IBC 操作之前,必须下载 Heliax 的分支 Hermes 二进制文件或从源代码中构建。

从二进制文件安装 (From binaries)

可以通过选择适当的架构,从我们的发布页面arrow-up-right下载最新的二进制发布版本。

例如:

circle-info

对于某些系统,/usr/local/bin 是受保护的目录。在这种情况下,您可能需要使用 sudo 运行上述命令。即

这对于下面的命令 cp ./target/release/hermes /usr/local/bin/ 也是如此(请参见注释)。

从源代码安装 (From source)

检查二进制文件:

circle-info

现在建议将 hermes 添加到 $PATH 中,以便在没有任何前缀的情况下调用它。对于 ubuntu 用户,可以通过执行以下操作来实现:


设置中继器 (Setting up the relayer)

创建 namada_wallet 目录和链目录,以保存每个中继器的 wallet.toml。

为了使中继器正常工作,它需要有一个钱包目录来存储中继器的密钥。可以通过运行以下命令来实现:

circle-info

此步骤仅适用于 namada 链。对于基于 cosmos 的链,建议将密钥直接添加到 hermes 中。

创建中继器账户 (Create the relayer account)

在每条链上,必须有一个relayer账户。在 namada 链上,可以通过运行以下命令来实现:

这将为中继器账户生成一个密钥。密钥将存储在节点的基础目录中的 chain-id 文件夹内的 wallet.toml 中。例如,如果 chain-idnamada-test.0a4c6786dbda39f786,则 wallet.toml 将位于 $HOME/.local/share/namada/namada-test.0a4c6786dbda39f786/wallet.toml(在未正确设置 base-dir 的 ubuntu 机器上)。

现在重要的是将此钱包文件复制到上面创建的 namada_wallet 目录中,每个链都需要这样做。继续这个例子,可以通过运行以下命令复制第一个钱包:

现在可以设置客户端了。

创建 IBC 通道 (Create IBC channel)

下面的 "create channel" 命令不仅创建了 IBC 通道,还创建了必要的 IBC 客户端连接。

circle-info

请注意,上述 CHAIN_IDs 将取决于您自己的设置,因此请自行检查!

当创建完成时,您可以看到通道 ID。例如,以下文本显示在 Chain A namada-test.0a4c6786dbda39f786 上已创建了 ID 为 7 的通道,并且在 Chain B namada-test.647287156defa8728c 上已创建了 ID 为 12 的通道。您将需要通道 ID 来通过 IBC 进行转移。这意味着您必须为从 Chain A 到 Chain B 的转移指定 channel-7 作为通道 ID(前缀 channel- 总是必需的)。同样,您必须为从 Chain B 到 Chain A 的转移指定 channel-12 作为通道 ID。


启动中继器 (Start the relayer)

一旦运行 Hermes,它将通过节点监视实例并根据监视到的事件中继数据包。

您可以在官方文档arrow-up-right中查看更多有关 Hermes 的详细信息。

在同步完成后,您可以按照上述说明创建通道并启动 Hermes。

通过 IBC 转移资产 (Transferring assets over IBC)

现在可以在两条链之间转移资产了


使用 hermes 脚本设置本地 Namada 实例 (Set up local Namada instances using the hermes script)

脚本 setup-namada 将设置两个实例,每个实例有一个验证节点,为 Hermes 复制必要的文件,并在每个账本上为 Hermes 创建一个账户。它还会在 hermes 目录中创建一个 Hermes 的配置文件 config_for_namada.toml

首先,您需要导出一些环境变量:

在这种情况下,用户不必等待同步。如果每个实例上的中继器账户有足够的余额,用户可以按照上述说明立即创建通道并启动 Hermes。用户可以在配置文件 config_for_namada.toml 中找到这些实例的链 ID。可以运行 grep "id" ${HERMES_CONFIG}

每个节点的数据和配置文件都位于 hermes/data/namada-*/.namada

为了关闭由脚本设置的任何账本,可以运行:

Last updated