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:

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). 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.tomlfile yang menjelaskan koneksi apa yang akan diatur dan menjadi tanggung jawab relayer.

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

Jika Anda tidak menentukan jalur file, ~/.hermes/config.tomlitu 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 kami .

Contoh: config.toml
[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' }

Jalur ke file konfigurasi yang disimpan dalam variabel $HERMES_CONFIGakan berguna nantinya.

Menafsirkan volume

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

  • chains.idadalah nama rantainya

  • chains.rpc_addressmenentukan port yang dilalui saluran tersebut, dan akan menjadi argumen ledger_addressNamada 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_namemenentukan kunci penandatangan yang menandatangani transaksi dari relayer. Kuncinya harus dibuat sebelum memulai relayer.

  • event_sourcemenentukan URL soket web rantai. Ini harus sama dengan agar rpc_addressHermes dapat bekerja dengan baik.

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 kami .

Ekspor variabel lingkungan

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

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>"

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)dengan memilih arsitektur yang sesuai.

Misalnya

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

Untuk beberapa sistem, /usr/local/binini adalah direktori yang dilindungi. Dalam hal ini, Anda mungkin perlu menjalankan perintah di atas dengan sudo. Yaitu

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

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

Dari sumber

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

Periksa biner:

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

Disarankan untuk sekarang menambahkan hermes sedemikian $PATHrupa sehingga dapat dipanggil tanpa pra-perbaikan apa pun. Untuk pengguna ubuntu, hal ini dapat dicapai dengan

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

Menyiapkan relai

Buat namada_walletdirektori 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

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

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

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

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.tomldirektori dasar node, di dalam chain-idfolder. Misalnya, jika chain-idis namada-test.0a4c6786dbda39f786, maka wallet.tomlakan ditemukan di $HOME/.local/share/namada/namada-test.0a4c6786dbda39f786/wallet.toml(pada mesin ubuntu yang base-dirbelum dikonfigurasi dengan benar).

Sekarang penting untuk menyalin file dompet ini ke namada_walletdirektori 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.

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

Perhatikan bahwa hal di atas CHAIN_IDsakan bergantung pada pengaturan Anda sendiri, jadi periksa sendiri!

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

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,
}

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).

Setelah sinkronisasi, Anda dapat membuat saluran dan memulai Hermes seperti dijelaskan di atas .

# 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

Mentransfer aset melalui IBC

Sekarang dimungkinkan untuk mentransfer aset antara kedua rantai tersebut.

Siapkan instance Namada lokal menggunakan skrip hermes

Skrip setup-namadaakan 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.tomldi hermesdirektori.

Pertama, Anda perlu mengekspor beberapa variabel lingkungan:

export NAMADA_DIR="<path-to-namada-source-directory>"
export TAG="v1.6.0-namada-beta3"
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

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 . Pengguna menemukan ID rantai instance ini di file konfigurasi config_for_namada.toml. Seseorang bisa lari grep "id" ${HERMES_CONFIG}.

# 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

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

Last updated