Skip to main content

Overview

Cosmos SDK chains use the secp256k1 elliptic curve — the same as Ethereum. You recover the compressed public key from the EVM wallet, then derive bech32-encoded addresses. The same key works across all Cosmos chains by changing the bech32 prefix (e.g., cosmos for Cosmos Hub, osmo for Osmosis). Transactions use Amino JSON for signing and Protobuf for broadcasting.

Dependencies

Derive Address

Recover the compressed secp256k1 public key from the EVM wallet, then compute RIPEMD-160(SHA-256(pubkey)) and bech32-encode:

Multi-Chain Derivation

Derive addresses for multiple Cosmos chains from a single key recovery:

Sign a Message

Sign using a chain-specific message prefix via the EVM WaaS provider:

Verify a Signature

Recover the public key from the signature and compare it to the stored key:

Check Balance

Query the balance via the Cosmos LCD REST API:

Send a Transfer

Build an Amino JSON sign document, sign the SHA-256 hash, normalize to low-S, then encode the transaction in Protobuf for broadcasting.

Low-S Normalization

Cosmos SDK requires canonical low-S signatures:

Protobuf Encoding Helpers

Full Transfer Implementation

The Amino JSON sign document requires keys to be sorted recursively. Use a canonical JSON serializer that sorts keys at every level.
Last modified on March 28, 2026