1. Configuring clients

1.1. create client

First you will need to create a client for each chain:

This command submits a transaction to a destination chain (ibc-0) with a request to create a client for a source chain (ibc-1):

hermes tx raw create-client ibc-0 ibc-1

if the command is successful a message similar to the one below will be displayed status:success:

{
    Success: CreateClient(
        CreateClient(
            Attributes {
                height: Height { revision: 0, height: 43 },
                client_id: ClientId(
                    "07-tendermint-0",
                ),
                client_type: Tendermint,
                consensus_height: Height { revision: 1, height: 32 },
            },
        ),
    )
}

Please note the client_id value returned. You will need that for other commands.

You can also execute a query to view the client state on destination chain ibc-0 by specifying the client_id value 07-tendermint-0:

hermes query client state ibc-0 07-tendermint-0

which show a message similar to the one below:

Success: ClientState {
    chain_id: ChainId {
        id: "ibc-1",
        version: 1,
    },
    trust_level: TrustThresholdFraction {
        numerator: 1,
        denominator: 3,
    },
    trusting_period: 1209600s,
    unbonding_period: 1814400s,
    max_clock_drift: 3s,
    frozen_height: Height {
        revision: 0,
        height: 0,
    },
    latest_height: Height {
        revision: 1,
        height: 38,
    },
    upgrade_path: [
        "upgrade",
        "upgradedIBCState",
    ],
    allow_update_after_expiry: true,
    allow_update_after_misbehaviour: true,
}

Now let's do the same for ibc-1 as the destination chain:

hermes tx raw create-client ibc-1 ibc-0

Take note of the client_id allocated for this client. In the examples we assume is 07-tendermint-1 (this client identity is obtained by creating two clients on ibc-1 for ibc-0).

As before, if the command is successful a message with status:success is displayed:

Success: CreateClient(
    CreateClient(
        Attributes {
            height: Height {
                revision: 1,
                height: 135,
            },
            client_id: ClientId(
                "07-tendermint-1",
            ),
            client_type: Tendermint,
            consensus_height: Height {
                revision: 0,
                height: 145,
            },
        },
    ),
)

1.2 update-client

Client states can be updated by sending an update-client transaction:

hermes tx raw update-client ibc-0 07-tendermint-0
hermes tx raw update-client ibc-1 07-tendermint-1

Next Steps

In the next section, we'll establish the Connection Handshake