Skip to main content

Channels

Mainnet IBC is live

ICS-20 transfer channels to Noble and Osmosis are OPEN on safrochain-1. All identifiers below were verified on-chain (2026-06-25). Independent relayers can relay the same paths — see Join as a relayer.

Mainnet: safrochain-1

Topology summary

CounterpartySafrochain clientSafrochain connectionSafrochain channelCounterparty clientCounterparty connectionCounterparty channelState
Noble (noble-1)07-tendermint-0connection-0channel-007-tendermint-224connection-210channel-581OPEN
Osmosis (osmosis-1)07-tendermint-1connection-1channel-107-tendermint-3719connection-11075channel-110497OPEN

Both channels use port transfer, ordering ORDER_UNORDERED, and version ics20-1.

ICS-20 transfer is enabled (send_enabled=true, receive_enabled=true). ICS-29 fee channels are not registered yet (ibc-fee channels returns an empty list).

ICS-20 transfer channels

CounterpartyPortChannel (Safrochain)Channel (counterparty)Escrow (Safrochain)Foundation relayerPrimary use
Noble (noble-1)transferchannel-0channel-581addr_safro1a53udazy8ayufvy0s434pfwjcedzqv34wqrjq7yesUSDC in/out, SAF → Noble
Osmosis (osmosis-1)transferchannel-1channel-110497addr_safro1kq2rzz6fq2q7fsu75a9g7cpzjeanmk68sfygsyyesOSMO in/out, SAF → Osmosis DEX

Public endpoints for relayers

Use stable RPC + gRPC on both sides of each path. Examples below are community-operated; any equivalent endpoint works if it supports IBC queries.

ChainChain IDRPCgRPC
Safrochainsafrochain-1https://rpc1.safrochain.network:443https://grpc1.safrochain.network:443
Noblenoble-1https://noble-rpc.polkachu.com:443https://noble-grpc.polkachu.com:443
Osmosisosmosis-1https://rpc.osmosis.zone:443https://grpc.osmosis.zone:443

Full Safrochain endpoint list: Mainnet endpoints.

Verify on-chain (Safrochain)

NODE="https://rpc1.safrochain.network:443"

# Clients tracking counterparties
safrochaind q ibc client states --node "$NODE" -o json \
| jq '.client_states[] | select(.client_id | startswith("07-tendermint")) | {client_id, chain_id: .client_state.chain_id}'

# Connections
safrochaind q ibc connection end connection-0 --node "$NODE" -o json | jq '.connection.counterparty'
safrochaind q ibc connection end connection-1 --node "$NODE" -o json | jq '.connection.counterparty'

# Channels
safrochaind q ibc channel end transfer channel-0 --node "$NODE" -o json | jq '.channel'
safrochaind q ibc channel end transfer channel-1 --node "$NODE" -o json | jq '.channel'

# Escrow accounts (SAF locked when bridging out)
safrochaind q ibc-transfer escrow-address transfer channel-0 --node "$NODE"
safrochaind q ibc-transfer escrow-address transfer channel-1 --node "$NODE"

# Inbound IBC denoms registered on Safrochain
safrochaind q ibc-transfer denom-traces --node "$NODE" -o json | jq '.denom_traces'

Relayed token registry

Each row lists the full denom trace (path + base_denom) used to compute the ibc/<hash> voucher on the destination chain.

USDC (Noble → Safrochain)

FieldValue
SymbolUSDC
Source chainnoble-1
Base denomuusdc (6 decimals)
Safrochain channelchannel-0
Noble channelchannel-581
Trace on Safrochaintransfer/channel-0/uusdc
IBC denom on Safrochainibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5
safrochaind q ibc-transfer denom-trace 8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5 \
--node https://rpc1.safrochain.network:443

echo -n "transfer/channel-0/uusdc" | shasum -a 256
# 8e27ba2d5493af5636760e354e46004562c46ab7ec0cc4c1ca14e9e20e2545b5

OSMO (Osmosis → Safrochain)

FieldValue
SymbolOSMO
Source chainosmosis-1
Base denomuosmo (6 decimals)
Safrochain channelchannel-1
Osmosis channelchannel-110497
Trace on Safrochaintransfer/channel-1/uosmo
IBC denom on Safrochainibc/0471F1C4E7AFD3F07702BEF6DC365268D64570F7C1FDC98EA6098DD6DE59817B
safrochaind q ibc-transfer denom-trace 0471F1C4E7AFD3F07702BEF6DC365268D64570F7C1FDC98EA6098DD6DE59817B \
--node https://rpc1.safrochain.network:443

echo -n "transfer/channel-1/uosmo" | shasum -a 256
# 0471f1c4e7afd3f07702bef6dc365268d64570f7c1fdc98ea6098dd6de59817b

SAF (Safrochain → Noble)

FieldValue
SymbolSAF
Source chainsafrochain-1
Base denomusaf (6 decimals)
Safrochain channelchannel-0
Noble channelchannel-581
Trace on Nobletransfer/channel-581/usaf
IBC denom on Nobleibc/416D906365215CB6641B38CCDAA01385AA4B20E5E8EF2D65702A1B3F383FBBA2
nobled q ibc-transfer denom-trace 416D906365215CB6641B38CCDAA01385AA4B20E5E8EF2D65702A1B3F383FBBA2 \
--node https://noble-rpc.polkachu.com:443

echo -n "transfer/channel-581/usaf" | shasum -a 256
# 416d906365215cb6641b38ccdaa01385aa4b20e5e8ef2d65702a1b3f383fbba2

Send from Safrochain:

safrochaind tx ibc-transfer transfer transfer channel-0 \
<noble-bech32-recipient> 1000000usaf \
--from <sender> --chain-id safrochain-1 \
--node https://rpc1.safrochain.network:443 \
--gas auto --gas-adjustment 1.3 --gas-prices 0.05usaf -y

SAF (Safrochain → Osmosis)

FieldValue
SymbolSAF
Source chainsafrochain-1
Base denomusaf (6 decimals)
Safrochain channelchannel-1
Osmosis channelchannel-110497
Trace on Osmosistransfer/channel-110497/usaf
IBC denom on Osmosisibc/DBAA4846F611A7603EFCE6F9F46F4F561D48B1F492A576022F000614A17089CE
osmosisd q ibc-transfer denom-trace DBAA4846F611A7603EFCE6F9F46F4F561D48B1F492A576022F000614A17089CE \
--node https://rpc.osmosis.zone:443

echo -n "transfer/channel-110497/usaf" | shasum -a 256
# dbaa4846f611a7603efce6f9f46f4f561d48b1f492a576022f000614a17089ce

Send from Safrochain:

safrochaind tx ibc-transfer transfer transfer channel-1 \
<osmosis-bech32-recipient> 1000000usaf \
--from <sender> --chain-id safrochain-1 \
--node https://rpc1.safrochain.network:443 \
--gas auto --gas-adjustment 1.3 --gas-prices 0.05usaf -y

USDC (Noble → Osmosis, transit — not a direct Safrochain hop)

The Foundation relayer also clears Noble↔Osmosis USDC for users who route liquidity through Osmosis. This path does not use Safrochain channels.

FieldValue
SymbolUSDC
Base denomuusdc on noble-1
Noble channelchannel-1
Osmosis channelchannel-750
Trace on Osmosistransfer/channel-750/uusdc
IBC denom on Osmosisibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4

Foundation relayer

The Safrochain Foundation runs Hermes on safro-relayer-1 for:

PathStatus
safrochain-1noble-1 (channel-0channel-581)live
safrochain-1osmosis-1 (channel-1channel-110497)live
noble-1osmosis-1 (USDC transit)live

Telemetry and wallet provisioning live in the private operator repo. Relay keys are never committed to source control.

Join as a relayer

Channels are already open — do not run hermes create channel unless you are opening a new counterparty. To relay an existing path:

  1. Install Hermes — see Hermes setup.
  2. Configure safrochain-1 plus the counterparty (noble-1 or osmosis-1).
  3. Import a funded key on each chain (fee token: usaf, uusdc/ustake on Noble, uosmo on Osmosis).
  4. Run hermes config validate and hermes health-check.
  5. Start Hermes — it discovers open channels and clears packets automatically.

Minimal Hermes path filter (optional, in config.toml):

[[chains]]
id = 'safrochain-1'
# ... rpc_addr, grpc_addr, key_name, gas_price ...

[[chains]]
id = 'noble-1'
# ... rpc_addr, grpc_addr, key_name, gas_price ...

# After both chains are configured:
# hermes start --chains safrochain-1,noble-1

Coordinate in Discord #ibc-relayers before duplicating foundation paths so we can share monitoring and upgrade windows.

ICS-27 (interchain accounts)

Controller chainHost portStatus
Cosmos Hubicahostenabled at genesis
Osmosisicahostenabled at genesis
Neutronicahostenabled at genesis

ICS-721 (NFT transfers)

ICS-721 will be enabled in a post-launch upgrade once a counterparty wires in the matching nft-transfer module. Track progress in Governance.

Testnet: safro-testnet-1

The testnet runs the same ibc-go module set as mainnet but does not participate in cross-chain testnet relays today. To test IBC end-to-end, connect two of your own local chains using Hermes setup.

Operator coordination

If you relay one of the paths above, coordinate via Discord #ibc-relayers. We track:

  • Which operator runs which channel pair (redundancy is healthy)
  • ICS-29 fee escrow funding when fee channels are enabled
  • Trusting period vs unbonding period drift (avoids client expired)
  • Joint upgrade windows so a chain upgrade does not trip your relayer

Updating this page

This file is canonical. When a channel opens or changes, submit a PR to Docs/docs/ibc/channels.md along with the chain registry update.