> For the complete documentation index, see [llms.txt](https://exfaz.gitbook.io/namada/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://exfaz.gitbook.io/namada/panduan-operator/relayer-ibc.md).

# Relayer IBC

## Menyampaikan Namada

Dokumen ini menjelaskan cara mengoperasikan relayer untuk protokol Komunikasi Antar-Blockchain (IBC) dengan Namada. Dokumentasi ini mencakup kemampuan membuat koneksi melalui IBC serta menyiapkan instance lokal Namada untuk tujuan pengujian.

Dokumen ini mencakup langkah-langkah penting untuk menggunakan IBC dengan Namada:

1. [Siapkan Hermes](https://docs.namada.net/operators/ibc#setup-hermes)
2. [Instal Hermes](https://docs.namada.net/operators/ibc#install-hermes)
3. [Menyiapkan relai](https://docs.namada.net/operators/ibc#setting-up-the-relayer)
4. [Mulai relayer](https://docs.namada.net/operators/ibc#start-the-relayer)
5. [Siapkan instans Namada lokal](https://docs.namada.net/operators/ibc#set-up-local-namada-instances-using-the-hermes-script)

Di bawah ini ditujukan bagi mereka yang ingin menyampaikan transfer pesan IBC antara dua rantai Namada. Tentu saja terdapat kemampuan untuk melakukan hal ini antara dua rantai yang kompatibel dengan IBC (seperti rantai Cosmos). Dalam hal ini, node perlu berjalan di rantai tujuan dan sumber untuk melakukan transfer paket apa pun. Di bawah ini, pertama-tama kami membahas cara mengaktifkan koneksi antara dua rantai yang sudah ada sebelumnya oleh Hermes, dan kedua, menyiapkan dua instans lokal Namada atau menggabungkan dua instans Namada yang sudah ada untuk tujuan ini.

### Siapkan Hermes

Hermes adalah relayer IBC untuk menyampaikan paket IBC antar rantai (instance). Namada menggunakan [fork Hermes yang mendukung instance Namada(terbuka di tab baru)](https://github.com/heliaxdev/hermes/tree/1.6.0-namada). Sebelum relai paket, pengguna memerlukan langkah-langkah berikut untuk mengkonfigurasi dan memulai Hermes.

1. Buat file konfigurasi Hermes
2. Buat klien/koneksi/saluran IBC antar instans
3. Jalankan Hermes

#### Buat file konfigurasi Hermes

Salah satu bagian penting dari teka-teki ini adalah membuat `config.toml`file yang menjelaskan koneksi apa yang akan diatur dan menjadi tanggung jawab relayer.

{% code overflow="wrap" %}

```
export HERMES_CONFIG="<choose path for hermes config>/config.toml"
touch $HERMES_CONFIG
```

{% endcode %}

Jika Anda tidak menentukan jalur file, `~/.hermes/config.toml`itu dibaca sebagai default.

Anda dapat menemukan contoh file konfigurasi di bawah ini. Intinya, Anda hanya mengubah ID rantai, alamat RPC, dan nama kunci di file konfigurasi untuk Namada. Jika Anda tidak memiliki node, silakan atur node secara manual atau melalui [skrip](https://docs.namada.net/operators/ibc#set-up-local-namada-instances-using-the-hermes-script) kami .

<details>

<summary>Contoh: config.toml</summary>

```
[global]
log_level = 'info'
 
[mode]
 
[mode.clients]
enabled = true
refresh = true
misbehaviour = true
 
[mode.connections]
enabled = false
 
[mode.channels]
enabled = false
 
[mode.packets]
enabled = true
clear_interval = 10
clear_on_start = false
tx_confirmation = true
 
[telemetry]
enabled = false
host = '127.0.0.1'
port = 3001
 
[[chains]]
id = 'namada-test.0a4c6786dbda39f786'  # set your chain ID
type = 'namada'
rpc_addr = 'http://127.0.0.1:27657'  # set the IP and the port of the chain
grpc_addr = 'http://127.0.0.1:9090'  # not used for now
event_source = { mode = 'push', url = 'ws://127.0.0.1:27657/websocket', batch_delay = '500ms' }  # set the IP and the port of the chain
account_prefix = ''  # not used
key_name = 'relayer'  # The key is an account name you made
store_prefix = 'ibc'
gas_price = { price = 0.001, denom = 'nam' }  # not used for now
 
[[chains]]
id = 'namada-test.647287156defa8728c'
type = 'namada'
rpc_addr = 'http://127.0.0.1:28657'
grpc_addr = 'http://127.0.0.1:9090'
event_source = { mode = 'push', url = 'ws://127.0.0.1:28657/websocket', batch_delay = '500ms' }
account_prefix = ''
key_name = 'relayer'
store_prefix = 'ibc'
gas_price = { price = 0.001, denom = 'nam' }
```

</details>

Jalur ke file konfigurasi yang disimpan dalam variabel `$HERMES_CONFIG`akan berguna nantinya.

{% hint style="info" %}
**Menafsirkan volume**

Setiap konfigurasi rantai ditentukan di bawah `[[chains]]`objek. Ini adalah bagian dari teka-teki yang ingin Anda pertahankan:

* `chains.id`adalah nama rantainya
* `chains.rpc_address`menentukan port yang dilalui saluran tersebut, dan akan menjadi argumen `ledger_address`Namada ketika berinteraksi dengan buku besar (akan menjadi lebih jelas nanti)
  * Pastikan untuk mengubah alamat IP ke alamat IP mesin lokal Anda yang menjalankan node ini!
* `chains.key_name`menentukan kunci penandatangan yang menandatangani transaksi dari relayer. Kuncinya harus dibuat sebelum memulai relayer.
* `event_source`menentukan URL soket web rantai. Ini harus sama dengan agar `rpc_address`Hermes dapat bekerja dengan baik.
  {% endhint %}

#### Buat klien/koneksi/saluran IBC antar instans

Hermes CLI memiliki perintah untuk membuatnya. Sebelum pembuatan, sebuah node dari setiap instance harus berjalan pada alamat rpc yang ditentukan. Jika Anda tidak memiliki node, silakan atur node secara manual atau melalui [skrip](https://docs.namada.net/operators/ibc#set-up-local-namada-instances-using-the-hermes-script) kami .

#### Ekspor variabel lingkungan

Pengguna yang menyampaikan perlu menyimpan variabel lingkungan tertentu. Ini adalah:

{% code overflow="wrap" %}

```
export CHAIN_A_ID="<replace-with-chain-a-id>"
export CHAIN_B_ID="<replace-with-chain-b-id>"
export HERMES_CONFIG="<replace-with-hermes-config-path>"
```

{% endcode %}

### Instal Hermes

Sebelum melakukan operasi IBC apa pun, seseorang harus mengunduh biner Hermes fork Heliax atau membuatnya dari sumber.

#### Dari biner

Seseorang dapat mengunduh rilis biner terbaru dari [halaman rilis kami(terbuka di tab baru)](https://github.com/heliaxdev/hermes/releases)dengan memilih arsitektur yang sesuai.

Misalnya

{% code overflow="wrap" %}

```
export TAG="v1.6.0-namada-beta3"
export ARCH="x86_64-unknown-linux-gnu" # or "aarch64-apple-darwin"
curl -Lo /tmp/hermes.tar.gz https://github.com/heliaxdev/hermes/releases/download/${TAG}/hermes-${TAG}-${ARCH}.tar.gz
tar -xvzf /tmp/hermes.tar.gz -C /usr/local/bin
```

{% endcode %}

{% hint style="info" %}
Untuk beberapa sistem, `/usr/local/bin`ini adalah direktori yang dilindungi. Dalam hal ini, Anda mungkin perlu menjalankan perintah di atas dengan `sudo`. Yaitu

{% code overflow="wrap" %}

```
sudo tar -xvzf /tmp/hermes.tar.gz -C /usr/local/bin
```

{% endcode %}

Hal ini juga berlaku untuk perintah `cp ./target/release/hermes /usr/local/bin/`di bawah ini (lihat komentar).
{% endhint %}

#### Dari sumber

{% code overflow="wrap" %}

```
export TAG="v1.6.0-namada-beta3"
 
git clone https://github.com/heliaxdev/hermes.git
git checkout $TAG
cd hermes
cargo build --release --bin hermes
export HERMES=$(pwd) # if needed
```

{% endcode %}

Periksa biner:

{% code overflow="wrap" %}

```
./target/release/hermes --version #or sudo cp ./target/release/hermes /usr/local/bin/
```

{% endcode %}

{% hint style="info" %}
Disarankan untuk sekarang menambahkan hermes sedemikian `$PATH`rupa sehingga dapat dipanggil tanpa pra-perbaikan apa pun. Untuk pengguna ubuntu, hal ini dapat dicapai dengan

```
cp ./target/release/hermes /usr/local/bin/
```

{% endhint %}

### Menyiapkan relai

#### Buat `namada_wallet`direktori dan direktori rantai untuk menampung setiap relayer wallet.toml

Agar relayer dapat berfungsi, ia memerlukan direktori dompet untuk menyimpan kunci relayer. Hal ini dapat dilakukan dengan berlari

{% code overflow="wrap" %}

```
# in the Hermes folder
mkdir namada_wallet
mkdir -p ~/.hermes/namada_wallet/$CHAIN_A_ID
mkdir -p ~/.hermes/namada_wallet/$CHAIN_B_ID
```

{% endcode %}

{% hint style="info" %}

Langkah ini hanya diperlukan untuk rantai namada. Untuk rantai berbasis kosmos, disarankan untuk menambahkan kunci langsung ke hermes.

{% code overflow="wrap" %}

```
./hermes --config $HERMES_CONFIG keys add --chain "<name-of-chain>" --key-file "<path-to-key>" --overwrite
```

{% endcode %}
{% endhint %}

#### Buat akun relayer

Di setiap rantai pasti ada akunnya `relayer`. Pada rantai namada, hal ini dapat dilakukan dengan berlari

```
namadaw key gen --alias relayer
```

Ini akan menghasilkan kunci untuk akun relayer. Kuncinya akan disimpan di `wallet.toml`direktori [dasar](https://docs.namada.net/operators/ledger/base-directory) node, di dalam `chain-id`folder. Misalnya, jika `chain-id`is `namada-test.0a4c6786dbda39f786`, maka `wallet.toml`akan ditemukan di `$HOME/.local/share/namada/namada-test.0a4c6786dbda39f786/wallet.toml`(pada mesin ubuntu yang `base-dir`belum dikonfigurasi dengan benar).

Sekarang penting untuk menyalin file dompet ini ke `namada_wallet`direktori yang dibuat di atas, untuk setiap rantai. Melanjutkan contoh ini, dompet pertama dapat disalin dengan menjalankan:

```
cp $HOME/.local/share/namada/$CHAIN_A_ID/wallet.toml ~/.hermes/namada_wallet/$CHAIN_A_ID/wallet.toml# Make sure this is done for both wallets on each chain!
```

Sekarang dimungkinkan untuk mengatur klien.

#### Buat saluran IBC

Perintah "buat saluran" (di bawah) tidak hanya membuat saluran IBC tetapi juga koneksi klien IBC yang diperlukan.

{% code overflow="wrap" %}

```
hermes --config $HERMES_CONFIG \
  create channel \
  --a-chain $CHAIN_A_ID \
  --b-chain $CHAIN_B_ID \
  --a-port transfer \
  --b-port transfer \
  --new-client-connection --yes
```

{% endcode %}

{% hint style="info" %}
Perhatikan bahwa hal di atas `CHAIN_IDs`akan bergantung pada pengaturan Anda sendiri, jadi periksa sendiri!
{% endhint %}

Ketika pembuatan telah selesai, Anda dapat melihat ID saluran. Misalnya, teks berikut menunjukkan bahwa saluran dengan ID `7`telah dibuat di Rantai A `namada-test.0a4c6786dbda39f786`, dan saluran dengan ID `12`telah dibuat di Rantai `namada-test.647287156defa8728c`B. Anda memerlukan ID saluran untuk transfer melalui IBC. Artinya Anda harus menentukan `channel-7`sebagai ID saluran (Awalan `channel-`selalu diperlukan) untuk transfer dari Rantai A ke Rantai B. Selain itu, Anda harus menentukan `channel-12`sebagai ID saluran untuk transfer dari Rantai B ke Rantai A.

{% code overflow="wrap" %}

```
SUCCESS Channel {
    ordering: Unordered,
    a_side: ChannelSide {
        chain: BaseChainHandle {
            chain_id: ChainId {
                id: "namada-test.0a4c6786dbda39f786",
                version: 0,
            },
            runtime_sender: Sender { .. },
        },
        client_id: ClientId(
            "07-tendermint-0",
        ),
        connection_id: ConnectionId(
            "connection-3",
        ),
        port_id: PortId(
            "transfer",
        ),
        channel_id: Some(
            ChannelId(
                "channel-7",
            ),
        ),
        version: None,
    },
    b_side: ChannelSide {
        chain: BaseChainHandle {
            chain_id: ChainId {
                id: "namada-test.647287156defa8728c",
                version: 0,
            },
            runtime_sender: Sender { .. },
        },
        client_id: ClientId(
            "07-tendermint-1",
        ),
        connection_id: ConnectionId(
            "connection-2",
        ),
        port_id: PortId(
            "transfer",
        ),
        channel_id: Some(
            ChannelId(
                "channel-12",
            ),
        ),
        version: None,
    },
    connection_delay: 0ns,
}
```

{% endcode %}

### Mulai relayer

Setelah Anda menjalankan Hermes, Hermes memonitor instance melalui node dan menyampaikan paket berdasarkan kejadian yang dipantau.

```
hermes --config $HERMES_CONFIG start
```

Anda dapat melihat lebih detail tentang Hermes di [dokumen resmi(terbuka di tab baru)](https://hermes.informal.systems/).

Setelah sinkronisasi, Anda dapat membuat saluran dan memulai Hermes seperti dijelaskan [di atas](https://docs.namada.net/operators/ibc#create-ibc-channel) .

{% code overflow="wrap" %}

```
# create a channel
hermes --config $HERMES_CONFIG \
  create channel \
  --a-chain $CHAIN_A_ID \
  --b-chain $CHAIN_B_ID \
  --a-port transfer \
  --b-port transfer \
  --new-client-connection --yes
```

{% endcode %}

#### Mentransfer aset melalui IBC

Sekarang dimungkinkan untuk [mentransfer aset antara kedua rantai tersebut.](https://docs.namada.net/users/ibc)

### Siapkan instance Namada lokal menggunakan skrip hermes

Skrip `setup-namada`akan menyiapkan dua instance dengan satu node validator, menyalin file yang diperlukan untuk Hermes, dan membuat akun untuk Hermes di setiap buku besar. Juga, itu akan membuat file konfigurasi Hermes `config_for_namada.toml`di `hermes`direktori.

Pertama, Anda perlu mengekspor beberapa variabel lingkungan:

{% code overflow="wrap" %}

```
export NAMADA_DIR="<path-to-namada-source-directory>"
export TAG="v1.6.0-namada-beta3"
```

{% endcode %}

{% code overflow="wrap" %}

```
git clone https://github.com/heliaxdev/hermes.git
git checkout $TAG # The branch is the same as our Hermes
cd hermes
./scripts/setup-namada $NAMADA_DIR $CHAIN_ID_A $CHAIN_ID_B
```

{% endcode %}

Dalam hal ini, pengguna tidak perlu menunggu sinkronisasi. Jika akun relayer di setiap instance memiliki saldo yang cukup, pengguna dapat membuat saluran dan segera memulai Hermes seperti dijelaskan [di atas](https://docs.namada.net/operators/ibc#create-ibc-channel) . Pengguna menemukan ID rantai instance ini di file konfigurasi `config_for_namada.toml`. Seseorang bisa lari `grep "id" ${HERMES_CONFIG}`.

{% code overflow="wrap" %}

```
# create a channel
hermes --config $HERMES_CONFIG \
  create channel \
  --a-chain $CHAIN_A_ID \
  --b-chain $CHAIN_B_ID \
  --a-port transfer \
  --b-port transfer \
  --new-client-connection --yes
 
# Run Hermes
hermes --config $HERMES_CONFIG start
```

{% endcode %}

Setiap data node dan file konfigurasi berada dalam format `hermes/data/namada-*/.namada`.

Untuk menutup pengaturan buku besar apa pun dengan skrip, seseorang dapat menjalankannya

```
killall namadan
```
