foreignDeployment field.
Prerequisites
- Hyperlane CLI (TypeScript CLI for Cosmos deployment)
- Rust (latest stable version) and Solana CLI tools (
1.18.18for 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
0xprefix).
- If your Cosmos wallet uses a mnemonic, derive/export the raw hex private key first (64 hex chars, optional
- Hyperlane core deployed on both chains:
- For SVM, see the prerequisites in Deploy an SVM HWR
- For Cosmos, see Deploy to a Cosmos Chain
Overview
Since the SVM and Cosmos chains use different deployment tooling, the workflow is:- Deploy the Cosmos side using the Hyperlane TypeScript CLI (
hyperlane warp deploy) - Deploy the SVM side using the Sealevel Rust CLI, referencing the Cosmos deployment via
foreignDeployment - Update the Cosmos side using
hyperlane warp applyso 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.~/.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 atoken-config.json for the SVM side, referencing the Cosmos deployment via foreignDeployment:
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:
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 aforeignDeployment:
--config is a local deploy-config file, also pass the matching warp core config via --warp:
Step 4: Verify Both Sides
SVM 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./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 theremoteDecimals 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...)
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 applystep 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_COSMOSNATIVEor--key.cosmosnative