Connection Handshake
The tx
commands can be used to establish a connection between two clients.
sequenceDiagram autonumber participant A as ibc-1 participant B as ibc-0 Note over A, B: No connection A->>B: ConnectionOpenInit Note over B: connection: connection-0 Note over B: counterparty: none B->>A: ConnectionOpenTry Note over A: connection: connection-1 Note over A: counterparty: connection-0 A->>B: ConnectionOpenAck note over B: connection: connection-0 note over B: counterparty: connection-1 B->>A: ConnectionOpenConfirm Note over A, B: Connection open
Table of Contents
Connection Init
Use the conn-init
command to initialize a new connection on a chain.
DESCRIPTION:
Initialize a connection (ConnectionOpenInit)
USAGE:
hermes tx conn-init --dst-chain <DST_CHAIN_ID> --src-chain <SRC_CHAIN_ID> --dst-client <DST_CLIENT_ID> --src-client <SRC_CLIENT_ID>
OPTIONS:
-h, --help Print help information
REQUIRED:
--dst-chain <DST_CHAIN_ID> Identifier of the destination chain
--dst-client <DST_CLIENT_ID> Identifier of the destination client
--src-chain <SRC_CHAIN_ID> Identifier of the source chain
--src-client <SRC_CLIENT_ID> Identifier of the source client
Example
Given that two clients were previously created with identifier 07-tendermint-0
on chain ibc-0
and
identifier 07-tendermint-1
on chain ibc-1
, we can initialize a connection between the two clients.
First, let's initialize the connection on ibc-0
:
hermes tx conn-init --dst-chain ibc-0 --src-chain ibc-1 --dst-client 07-tendermint-0 --src-client 07-tendermint-1
Success: OpenInitConnection(
OpenInit(
Attributes {
height: Height {
revision: 0,
height: 73,
},
connection_id: Some(
ConnectionId(
"connection-0",
),
),
client_id: ClientId(
"07-tendermint-0",
),
counterparty_connection_id: None,
counterparty_client_id: ClientId(
"07-tendermint-1",
),
},
),
)
A new connection has been initialized on ibc-0
with identifier connection-0
.
Note that the
counterparty_connection_id
field is currently empty.
Connection Try
Use the conn-try
command to establish a counterparty to the connection on the other chain.
DESCRIPTION:
Relay the connection attempt (ConnectionOpenTry)
USAGE:
hermes tx conn-try [OPTIONS] --dst-chain <DST_CHAIN_ID> --src-chain <SRC_CHAIN_ID> --dst-client <DST_CLIENT_ID> --src-client <SRC_CLIENT_ID> --src-connection <SRC_CONNECTION_ID>
OPTIONS:
--dst-connection <DST_CONNECTION_ID>
Identifier of the destination connection (optional) [aliases: dst-conn]
-h, --help
Print help information
REQUIRED:
--dst-chain <DST_CHAIN_ID>
Identifier of the destination chain
--dst-client <DST_CLIENT_ID>
Identifier of the destination client
--src-chain <SRC_CHAIN_ID>
Identifier of the source chain
--src-client <SRC_CLIENT_ID>
Identifier of the source client
--src-connection <SRC_CONNECTION_ID>
Identifier of the source connection (required) [aliases: src-conn]
Example
Let's now create the counterparty to connection-0
on chain ibc-1
:
hermes tx conn-try --dst-chain ibc-1 --src-chain ibc-0 --dst-client 07-tendermint-1 --src-client 07-tendermint-0 --src-connection connection-0
Success: OpenTryConnection(
OpenTry(
Attributes {
height: Height {
revision: 1,
height: 88,
},
connection_id: Some(
ConnectionId(
"connection-1",
),
),
client_id: ClientId(
"07-tendermint-1",
),
counterparty_connection_id: Some(
ConnectionId(
"connection-0",
),
),
counterparty_client_id: ClientId(
"07-tendermint-0",
),
},
),
)
A new connection has been created on ibc-1
with identifier connection-1
.
Note that the field
counterparty_connection_id
points to the connection onibc-0
.
Connection Ack
Use the conn-ack
command to acknowledge the connection on the initial chain.
DESCRIPTION:
Relay acknowledgment of a connection attempt (ConnectionOpenAck)
USAGE:
hermes tx conn-ack --dst-chain <DST_CHAIN_ID> --src-chain <SRC_CHAIN_ID> --dst-client <DST_CLIENT_ID> --src-client <SRC_CLIENT_ID> --dst-connection <DST_CONNECTION_ID> --src-connection <SRC_CONNECTION_ID>
OPTIONS:
-h, --help Print help information
REQUIRED:
--dst-chain <DST_CHAIN_ID>
Identifier of the destination chain
--dst-client <DST_CLIENT_ID>
Identifier of the destination client
--dst-connection <DST_CONNECTION_ID>
Identifier of the destination connection (required) [aliases: dst-conn]
--src-chain <SRC_CHAIN_ID>
Identifier of the source chain
--src-client <SRC_CLIENT_ID>
Identifier of the source client
--src-connection <SRC_CONNECTION_ID>
Identifier of the source connection (required) [aliases: src-conn]
Example
We can now acknowledge on ibc-0
that ibc-1
has accepted the connection attempt:
hermes tx conn-ack --dst-chain ibc-0 --src-chain ibc-1 --dst-client 07-tendermint-0 --src-client 07-tendermint-1 --dst-connection connection-0 --src-connection connection-1
Success: OpenAckConnection(
OpenAck(
Attributes {
height: Height {
revision: 0,
height: 206,
},
connection_id: Some(
ConnectionId(
"connection-0",
),
),
client_id: ClientId(
"07-tendermint-0",
),
counterparty_connection_id: Some(
ConnectionId(
"connection-1",
),
),
counterparty_client_id: ClientId(
"07-tendermint-1",
),
},
),
)
Note that the field
counterparty_connection_id
now points to the connection onibc-1
.
Connection Confirm
Use the conn-confirm
command to confirm that the connection has been acknowledged,
and finish the handshake, after which the connection is open on both chains.
DESCRIPTION:
Confirm opening of a connection (ConnectionOpenConfirm)
USAGE:
hermes tx conn-confirm --dst-chain <DST_CHAIN_ID> --src-chain <SRC_CHAIN_ID> --dst-client <DST_CLIENT_ID> --src-client <SRC_CLIENT_ID> --dst-connection <DST_CONNECTION_ID> --src-connection <SRC_CONNECTION_ID>
OPTIONS:
-h, --help Print help information
REQUIRED:
--dst-chain <DST_CHAIN_ID>
Identifier of the destination chain
--dst-client <DST_CLIENT_ID>
Identifier of the destination client
--dst-connection <DST_CONNECTION_ID>
Identifier of the destination connection (required) [aliases: dst-conn]
--src-chain <SRC_CHAIN_ID>
Identifier of the source chain
--src-client <SRC_CLIENT_ID>
Identifier of the source client
--src-connection <SRC_CONNECTION_ID>
Identifier of the source connection (required) [aliases: src-conn]
Example
Confirm on ibc-1
that ibc-0
has accepted the connection attempt.
hermes tx conn-confirm --dst-chain ibc-1 --src-chain ibc-0 --dst-client 07-tendermint-1 --src-client 07-tendermint-0 --dst-connection connection-1 --src-connection connection-0
Success: OpenConfirmConnection(
OpenConfirm(
Attributes {
height: Height {
revision: 1,
height: 239,
},
connection_id: Some(
ConnectionId(
"connection-1",
),
),
client_id: ClientId(
"07-tendermint-1",
),
counterparty_connection_id: Some(
ConnectionId(
"connection-0",
),
),
counterparty_client_id: ClientId(
"07-tendermint-0",
),
},
),
)
We have now successfully established a connection between the two chains.