IBC is elegant on paper—blockchains verify each other’s state using light clients and exchange packets with cryptographic proofs. No trusted third parties. Just math.

But blockchains don’t talk to each other directly. Someone has to watch for packets on one chain and submit the corresponding proofs to the other. That’s what a relayer does.

The Go Relayer started in early 2020 as a way to test IBC end-to-end. By 2022, it was running in production across dozens of chain pairs, and the original architecture was showing its limits.


What Broke#

The v1 relayer polled chain state to find packets that needed relaying. Simple and it worked—until it didn’t:

  • RPC load: Constant state queries hammered chain nodes. Operators were burning money on infrastructure.
  • Websocket issues: Tendermint’s websocket connection was unreliable under production load.
  • Scaling: Each chain pair needed its own relayer process. More paths meant more processes.
  • Cosmos-only: Everything assumed Cosmos SDK chains. The ecosystem was diversifying.

Something had to change.


The v2 Architecture#

The v2 rewrite centered on one insight: instead of querying state, parse events from finalized blocks.

Chain Processor — An event bus that polls for new blocks, extracts IBC events, and emits them downstream. This dropped RPC load dramatically and created a clean interface for chain-specific logic. Want to support a new chain type? Implement the Chain Processor interface.

Path Processor — Consumes events and takes action: building proofs, submitting transactions, completing handshakes. Moving to event-based processing made handshakes 30-40% faster and enabled one process to handle many chain pairs.

Chain Provider — An abstraction layer for all chain-specific operations. This is what enabled non-Cosmos chains (Penumbra, eventually Polkadot) to plug into IBC.

The rewrite took most of early 2022. Seven betas, four release candidates. The team at Strangelove—Andrew Gouin, Justin Tieri, Mark Rushakoff, and others—did the heavy lifting on the processor refactors.


Connection-Based Relaying#

IBC started with token transfers. By 2022, there was also Interchain Accounts, Interchain Queries, and contract-to-contract messaging. Channels were multiplying.

v2 moved to connection-based relaying: any new channel on a monitored connection gets picked up automatically. Operators set allowlists or denylists when they need control, but the default is “relay everything on this connection.”


Chain Registry#

Relayer configuration used to mean hand-editing YAML files with RPC endpoints and chain metadata. Tedious and error-prone.

v2 integrated with the Chain Registry:

$ rly chains add cosmoshub osmosis
$ rly paths fetch
$ rly start

Zero to relaying in minutes.


Relayer Economics#

A common worry is relayer economics—without on-chain fees, will anyone bother running them?

In practice, yes. Validators run relayers as a service. Chain teams subsidize operations. MEV searchers have their own reasons. The incentives work. Packets flow.


The code lives at github.com/cosmos/relayer.