> For the complete documentation index, see [llms.txt](https://docs.validator247.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.validator247.com/ibc.md).

# IBC

#### **Thiết lập IBC Channels:**

Hướng dẫn này giả định rằng bạn đã thiết lập và cấu hình Hermes một cách chính xác.

**Yêu cầu trước khi bắt đầu:**

1. Node RPC đã đồng bộ hoàn chỉnh cho mỗi chuỗi mà bạn muốn truyền tải.
2. Cần có ví cụ thể cho mỗi chuỗi để tài trợ cho việc truyền tải gói tin.
3. Đã thiết lập indexing là `kv` trong `config.toml` cho mỗi node.

#### **Bước 1: Tạo tệp mnemonic**

Tạo tệp mnemonic cho Persistence và Crescent:

```bash
nano core-1.mnemonic
```

Sau đó, nhập cụm từ seed và lưu lại.

```bash
nano crescent-1.mnemonic
```

Nhập cụm từ seed cho Crescent và lưu lại.

#### **Bước 2: Thêm/phục hồi khóa**

Thêm hoặc phục hồi khóa liên quan đến tệp mnemonic đã lưu:

```bash
hermes keys add --chain core-1 --mnemonic-file core-1.mnemonic
```

Làm tương tự với Crescent:

```bash
hermes keys add --chain crescent-1 --mnemonic-file crescent-1.mnemonic
```

#### **Bước 3: Kiểm tra khóa**

Vào thư mục khóa để kiểm tra xem các khóa đã được lưu trữ đúng chưa:

```bash
hermes keys list --chain core-1
```

Kiểm tra số dư để đảm bảo bạn có đủ số dư để thực hiện lệnh tạo kênh:

```bash
hermes keys balance --chain core-1
hermes keys balance --chain crescent-1
```

#### **Bước 4: Cấu hình trong `config.toml`**

Thêm hai đoạn cấu hình cho các chuỗi vào tệp `config.toml` trên máy ảo cosmos-relayer:

```toml
[[chains]]
id = 'core-1'
rpc_addr = 'http://<ip>:<port>'
grpc_addr = 'http://<ip>:<port>'
websocket_addr = 'ws://<ip>:<port>/websocket'
rpc_timeout = '10s'
account_prefix = 'persistence'
key_name = 'persistence'
store_prefix = 'ibc'
max_gas = 2000000
max_tx_size = 180000
gas_price = { price = 0.008, denom = 'uxprt' }
gas_multiplier = 1.1
clock_drift = '15s'
trusting_period = '14days'
trust_threshold = { numerator = '1', denominator = '3' }
memo_prefix = '<add your memo>'
[chains.packet_filter]
policy = 'allow'
list = [
<channel information to be added here>
]

[[chains]]
id = 'crescent-1'
rpc_addr = 'http://<ip>:<port>'
grpc_addr = 'http://<ip>:<port>'
websocket_addr = 'ws://<ip>:<port>/websocket'
rpc_timeout = '15s'
account_prefix = 'cre'
key_name = 'crescent'
store_prefix = 'ibc'
default_gas = 3000000
max_gas = 10000000
gas_price = { price = 0.01, denom = 'ucre' }
gas_multiplier = 1.2
max_msg_num = 30
max_tx_size = 1800000
clock_drift = '15s'
trusting_period = '9days'
trust_threshold = { numerator = '1', denominator = '3' }
memo_prefix = '<add your memo>'
[chains.packet_filter]
policy = 'allow'
list = [
<channel information to be added here>
]
```

Lưu và đóng tệp.

#### **Bước 5: Kiểm tra sức khỏe relayer**

Sử dụng lệnh sau để kiểm tra xem mọi thứ đã được thiết lập đúng hay chưa:

```bash
hermes health-check
```

#### **Bước 6: Tạo kênh**

Tạo các kênh và kết nối khách hàng mới bằng lệnh sau:

```bash
hermes create channel --a-chain core-1 --b-chain crescent-1 --a-port transfer --b-port transfer --order unordered --new-client-connection
```

Nếu quá trình tạo kênh thành công, bạn sẽ nhận được thông báo với thông tin về kênh, kết nối và khách hàng.

#### **Kết quả cuối cùng**

Kênh giữa Persistence và Crescent sẽ được thiết lập như sau:

* **core-1 > crescent-1 channel-68**
* **crescent-1 > core-1 channel-30**

#### **Kết luận**

IBC cho phép giao tiếp bất đồng bộ giữa các blockchain, và việc xây dựng các kênh này là một bước quan trọng để nâng cao khả năng kết nối giữa các mạng lưới blockchain. Đảm bảo rằng bạn tiếp tục duy trì và cải thiện công nghệ này để hướng tới một tương lai đa chuỗi mạnh mẽ hơn.

#### Hướng Dẫn Thiết Lập IBC Giữa Prysm và Warden

#### Bước 1: Kiểm Tra Sự Kết Nối Kênh

Trước khi tạo kênh, hãy kiểm tra xem có kênh nào đã tồn tại giữa Prysm và Warden hay không. Bạn có thể kiểm tra điều này bằng cách sử dụng explorer như Mintscan hoặc thông qua lệnh query.

**Tùy chọn 1:** Sử dụng Mintscan\
Truy cập: [Mintscan](https://www.mintscan.io/) và kiểm tra các kênh có sẵn.

**Tùy chọn 2:** Query kênh trên \<chain-id>

```bash
hermes query channels --chain <chain-id>
```

#### Bước 2: Tạo Tệp Mnemonic

Tạo tệp mnemonic cho cả Prysm và Warden.

```bash
cd hermes
nano prysm.mnemonic
```

```bash
cd hermes
nano warden.mnemonic
```

Nhập cụm từ hạt giống (seed phrases) và lưu tệp.

#### Bước 3: Khôi Phục Khóa

Khôi phục khóa tương ứng với tệp mnemonic đã lưu.

```bash
hermes keys add --chain prysm --mnemonic-file prysm.mnemonic
```

Lặp lại cho Warden:

```bash
hermes keys add --chain warden --mnemonic-file warden.mnemonic
```

#### Bước 4: Kiểm Tra Khóa

Kiểm tra thư mục khóa để xác nhận rằng các khóa đã được lưu chính xác.

```bash
hermes keys list --chain prysm
```

```bash
hermes keys list --chain warden
```

#### Bước 5: Kiểm Tra Số Dư

Kiểm tra số dư để đảm bảo có đủ tài nguyên để thực hiện lệnh tạo kênh.

```bash
hermes keys balance --chain prysm
```

```bash
hermes keys balance --chain warden
```

#### Bước 6: Cấu Hình `config.toml`

Dưới đây là tệp cấu hình cho Prysm và Warden đã được điều chỉnh theo thông số mà bạn cung cấp:

```toml
[global]
log_level = "info"

[[chains]]
id = "prysm-devnet-1"
rpc_addr = "http://127.0.0.1:32657"  # Địa chỉ RPC của mạng
grpc_addr = "http://127.0.0.1:32090"  # Địa chỉ gRPC của mạng
event_source = { mode = "push", url = "ws://127.0.0.1:32657/websocket", batch_delay = "500ms" }
rpc_timeout = "10s"
trusted_node = false
account_prefix = "prysm"
key_name = "prysm-key"
store_prefix = "prysm"
default_gas = 100000
max_gas = 4000000
gas_price = { price = 0.025, denom = "PRYSM" }  # Chú ý dùng ký hiệu đơn vị phù hợp
gas_multiplier = 1.1
max_msg_num = 30
max_tx_size = 2097152
clock_drift = "5s"
max_block_time = "30s"
trusting_period = "14days"
trust_threshold = "2/3"
address_type = { derivation = "cosmos" }

[[chains]]
id = "buenavista-1"
rpc_addr = "http://127.0.0.1:13657"  # Địa chỉ RPC của mạng
grpc_addr = "http://127.0.0.1:13090"  # Địa chỉ gRPC của mạng
event_source = { mode = "push", url = "ws://127.0.0.1:13657/websocket", batch_delay = "500ms" }
rpc_timeout = "10s"
trusted_node = false
account_prefix = "warden"
key_name = "warden-key"
store_prefix = "warden"
default_gas = 100000
max_gas = 4000000
gas_price = { price = 0.025, denom = "Warden" }  # Chú ý dùng ký hiệu đơn vị phù hợp
gas_multiplier = 1.1
max_msg_num = 30
max_tx_size = 2097152
clock_drift = "5s"
max_block_time = "30s"
trusting_period = "14days"
trust_threshold = "2/3"
address_type = { derivation = "cosmos" }
```

#### Bước 7: Kiểm Tra Sức Khỏe Của Relayer

Sử dụng lệnh sau để kiểm tra sức khỏe của các chuỗi đã được cấu hình:

```bash
hermes health-check
```

#### Bước 8: Tạo Kênh

Tạo kênh và kết nối client mới giữa Prysm và Warden:

```bash
hermes create channel --a-chain prysm-devnet-1 --b-chain buenavista-1 --a-port transfer --b-port transfer --order unordered --new-client-connection
```

Khi lệnh thành công, bạn sẽ nhận được thông tin về kênh, kết nối và client.

#### Bước 9: Ghi Nhớ Thông Tin Kênh

Ghi nhớ tất cả thông tin client, kết nối và kênh vì chúng sẽ cần thiết để duy trì relayer giữa các chuỗi.

#### Kết Luận

Sau khi hoàn thành các bước trên, bạn sẽ có khả năng tạo ra các kênh IBC giữa Prysm và Warden. Hãy đảm bảo duy trì và cải thiện IBC để góp phần vào việc xây dựng một tương lai đa chuỗi vững mạnh.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.validator247.com/ibc.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
