---
# System prepended metadata

title: Fetchhub-3 IBC migration

---

# Fetchhub-3 IBC migration

## Introduction

With the migration from fetchhub-3 to fetchhub-4, the existing IBC channels need to be upgraded.
This can be done through relayer software commandline using the `UpdateClient` and `UpgradeClient` commands (see [1]).

## IBC migration

The `3Tekos` and `Cros-nest` teams are working together to migrate their IBC channels to fetchhub-4.

Form migration to be possible, a channel must not be expired or frozen.

We need to query the `state` of each channel's client to know if it can be migrated or not.
We are interested in two parameters: 
 - trusting_period : The time in seconds the client will be valid without any update or transaction.
 - latest_height : The counterparty block height of the last update. (we will query the time in seconds since this block)

Time elapsed since last_height must be smaller than the trusting_period

Fetch.ai <> Osmosis
`hermes query client state fetchhub-3 07-tendermint-0`
 - trusting_period => 777600 (9days)
 - latest_height => 3814639 (5 days ago)

`hermes query client state fetchhub-3 07-tendermint-1`
 - trusting_period => 864000 (10 days)
 - latest_height => 3401037 (1 months ago) 

Fetch.ai <> CosmosHub
`hermes query client state fetchhub-3 07-tendermint-2`
 - trusting_period => 1209600 (14 days)
 - latest_height => 9491412 (1 months ago)

Fetch.ai <> Juno
`hermes query client state fetchhub-3 07-tendermint-3`
 - trusting_period => 1209600 (14 days)
 - latest_height => 2467141 (9 days ago) 

Fetch.ai <> Umee
`hermes query client state fetchhub-3 07-tendermint-4`
 - trusting_period => 777600 (9 days)
 - latest_height => 171754 (1 months ago) 

Fetch.ai <> Sifchain
`hermes query client state fetchhub-3 07-tendermint-5`
 - trusting_period => 1209600 (14 days)
 - latest_height => 5727224 (1 months ago)

Fetch.ai <> Gravity-Bridge 
`hermes query client state fetchhub-3 07-tendermint-6`
 - trusting_period => 86300 (24 hours)
 - latest_height => 1521091 (1 days ago)

Fetch.ai <> Gravity-Bridge 
`hermes query client state fetchhub-3 07-tendermint-7`
 - trusting_period => 86300 (24 hours)
 - latest_height => 1514474 (1 days ago)

### 1/ observations

Only 2 channels are not expired (Osmosis and Juno)
Juno is currently stuck and we don't have any ETA for the restart.

### 2/ actions

We need to update the client on the osmosis side. 
With the migration to a new chain-id, we are not totally sure of the actions to take.
A ticket is open with IBC experts to know the exact steps to follow.
It might be necessary to open a governance proposal on Osmosis to migrate the client to new chain-id

## solutions for the expired channels

An expired channel can be swapped with a new one via a governance proposal. The channel parameters cannot however be modified.
The Gravity-Bridge channel with only 24h of trusting_period is very dangerous (high risk of expiration).

### unfreeze channels

To unfreeze a channel, a governance proposal must be deposited to swap the existing expired channel with a new one.
This option must be chosen if the channel is valuable (great number of tokens sent over IBC).
Sending through a different channel will create a different denom which is non-fungible with the existing one.

### create new channels

For channel without high value, a new channel can be open with correct parameters.

## Channel value

### balances on Fetch chain

We need to know the token present on the Fetch chain:

`fetchd q bank total`
```
supply:
- amount: "1085754012246102179709738759"
  denom: afet
- amount: "80"
  denom: ibc/3554989531C7DB295D548F373FE93205215CAC2820A62D748E5A3703044D481E
- amount: "30"
  denom: ibc/64ADA1661E3C1A4293E3BB15D5BD13012D0DB3D9002C117C30D7C429A32F4D51
- amount: "50002"
  denom: ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518
- amount: "100000000000000000"
  denom: nanomobx
- amount: "1000000000000000000"
  denom: nanonomx
- amount: "100000000000000"
  denom: ulrn
```

IBC Hash must be translated to human denom
`fetchd query ibc-transfer denom-trace 3554989531C7DB295D548F373FE93205215CAC2820A62D748E5A3703044D481E`
```
denom_trace:
  base_denom: ugraviton
  path: transfer/channel-6
```
`fetchd query ibc-transfer denom-trace 64ADA1661E3C1A4293E3BB15D5BD13012D0DB3D9002C117C30D7C429A32F4D51`
```
denom_trace:
  base_denom: ugraviton
  path: transfer/channel-7
```

`fetchd query ibc-transfer denom-trace ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518`
```
denom_trace:
  base_denom: uosmo
  path: transfer/channel-0
```

=> 50002 uosmo from channel-0
=> 80 ugraviton from channel-6
=> 30 ugraviton from channel-7

### balances on Osmosis chain

The same exercice must be done on Osmosis chain to know the number of FET sent.

=> 12 610 000 000 000 afet from channel-175 => 12 FET

### balances on Juno chain

=> 1 afet from channel-55

### balances on Gravity-Bridge chain

=> 70 afet from channel-30

### balances on CosmosHub chain

=> No token exist on CosmosHub

### balances on Umee chain

=> No token exist on Umee

### balances on SifChain chain

=> No token exist on SifChain


# Conclusion

It does not exist high value channel on FET.
The decision can be taken to open new IBC channels with correct parameters.


[1](https://github.com/cosmos/ibc-go/blob/main/docs/ibc/upgrades/quick-guide.md#step-by-step-upgrade-process-for-relayers-upgrading-counterparty-clients) Step-by-Step Upgrade Process for Relayers Upgrading Counterparty Clients
[2](https://docs.fetch.ai/ledger_v2/networks/#mainnet-archives) fetchhub-3 archive node