Skip to main content
This guide walks you through deploying a Hyperlane Warp Route (HWR) between a Cosmos SDK chain and an SVM chain (Solana, Eclipse). It combines the Hyperlane TypeScript CLI for the Cosmos side with the Sealevel Rust CLI for the SVM side, linked via the foreignDeployment field.

Prerequisites

  • Hyperlane CLI (TypeScript CLI for Cosmos deployment)
  • Rust (latest stable version) and Solana CLI tools (3.0.14 for deployment)
  • A funded wallet on the SVM chain (Solana keypair)
  • A funded wallet on the Cosmos chain (hex private key)
    • If your Cosmos wallet uses a mnemonic, derive/export the raw hex private key first (64 hex chars, optional 0x prefix).
  • Hyperlane core deployed on both chains:

Overview

Since the SVM and Cosmos chains use different deployment tooling, the workflow is:
  1. Deploy the Cosmos side using the Hyperlane TypeScript CLI (hyperlane warp deploy)
  2. Deploy the SVM side using the Sealevel Rust CLI, referencing the Cosmos deployment via foreignDeployment
  3. Update the Cosmos side using hyperlane warp apply so the Cosmos router enrolls the SVM router

Walkthrough

Step 1: Deploy on the Cosmos Side

Create a Warp Route config for the Cosmos chain. Since we are deploying the Cosmos side first, only the Cosmos chain entry is required.
Set your Cosmos private key and (optionally) preselect a Warp Route ID for deterministic artifact filenames:
The CLI will output deployment artifacts to ~/.hyperlane/deployments/warp_routes/. If you omit --warpRouteId, use the ID shown in deploy output (usually SYMBOL/label, e.g. ATOM/yourcosmoschain) for later steps.

Step 2: Deploy on the SVM Side

Follow the SVM HWR guide for building programs and preparing your environment. Create a token-config.json for the SVM side, referencing the Cosmos deployment via foreignDeployment:
The interchainGasPaymaster value is the overhead IGP address from your SVM chain’s core deployment artifacts at <chain>/core/program-ids.json. Deploy from the Sealevel client directory:
The SVM deployment writes program IDs under rust/sealevel/environments/mainnet3/warp-routes/atom/program-ids.json. You will need the SVM warp route program ID for the next step.

Step 3: Update Cosmos-Side Router Enrollment

Create an apply config that includes the SVM chain as a foreignDeployment:
Because --config is a local deploy-config file, also pass the matching warp core config via --warp:

Step 4: Verify Both Sides

SVM side:
Cosmos side:

Step 5: Test a Transfer

hyperlane warp send does not currently support Cosmos SDK or SVM chains. To test your cross-chain warp route, run a relayer between your chains and initiate a transfer from the SVM side using the Sealevel CLI, or from the Cosmos side using native transaction tooling.
For Cosmos-initiated transfers, submit /hyperlane.warp.v1.MsgRemoteTransfer using your chain’s native tx tooling, and quote fees beforehand with QueryQuoteRemoteTransfer (hyperlane.warp.v1.Query/QuoteRemoteTransfer). To transfer from SVM to Cosmos:
The recipient address must be a 0x-prefixed 32-byte hex value (64 hex chars), not bech32. When converting from bech32, use a converter that outputs the Hyperlane recipient format (left-padded bytes32). The relayer handles conversion back to a bech32 account on the destination chain.

Important Considerations

Decimals

Cosmos tokens typically use 6 decimals, which is compatible with SVM’s standard precision. If bridging a token with different decimals on each side, use the remoteDecimals field in the SVM config (see the EVM ↔ SVM guide for an example).

Address Formats

  • SVM: Base58-encoded public keys (e.g., D6k6T3G74ij6atCtBiWBs5TbFa1hFVcrFUSGZHuV7q3Z)
  • Cosmos: Bech32 addresses (e.g., cosmos1...)
The foreignDeployment field in the SVM token-config.json should use the Cosmos warp route address in Hex32 format (0x-prefixed 32-byte value), not bech32.

Router Enrollment

This route is fully bidirectional only after both sides enroll each other:
  • The SVM deploy step enrolls the Cosmos router on the SVM side.
  • The warp apply step enrolls the SVM router on the Cosmos side.

Key Management

  • SVM side: Uses a Solana keypair file (JSON format)
  • Cosmos side: Uses a hex private key via HYP_KEY_COSMOSNATIVE or --key.cosmosnative
For production deployments, transfer ownership to a multisig setup — Squads for SVM or a Cosmos-native multisig for the Cosmos side.