> ## Documentation Index
> Fetch the complete documentation index at: https://cosmos-docs-cosmjs-docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Packages & Limitations

> Relevant CosmJS exports for EVM support and known limitations.

CosmJS EVM support is spread across three packages. Below are the relevant exports and the known limitations when working with EVM-compatible Cosmos chains.

## @cosmjs/amino

| Export                                | Purpose                                            |
| ------------------------------------- | -------------------------------------------------- |
| `EthSecp256k1Pubkey`                  | Interface for EVM public keys in Amino format      |
| `isEthSecp256k1Pubkey()`              | Type guard for EVM public keys                     |
| `rawEthSecp256k1PubkeyToRawAddress()` | Derive raw address from compressed pubkey (Keccak) |
| `encodeEthSecp256k1Pubkey()`          | Encode raw pubkey bytes to Amino format            |
| `encodeEthSecp256k1Signature()`       | Encode pubkey + signature to `StdSignature`        |
| `isEthereumSecp256k1Account()`        | Check if an account uses EVM keys                  |
| `getAminoPubkey()`                    | Auto-select correct pubkey encoding for an account |

## @cosmjs/proto-signing

| Export                       | Purpose                                       |
| ---------------------------- | --------------------------------------------- |
| `DirectEthSecp256k1HdWallet` | HD wallet with Keccak signing and EVM HD path |
| `DirectEthSecp256k1Wallet`   | Single-key wallet with Keccak signing         |

## @cosmjs/crypto

| Export      | Purpose                         |
| ----------- | ------------------------------- |
| `keccak256` | Keccak-256 hash function        |
| `Keccak256` | Streaming Keccak-256 hash class |

## Limitations

* **No Amino signing for EVM chains.** There is no `Secp256k1HdWallet`
  equivalent for EVM keys. Use Direct signing (`DirectEthSecp256k1HdWallet`)
  exclusively.
* **No `0x`-prefixed addresses.** CosmJS produces Bech32 addresses for all
  chains, including EVM ones. If you need the hex Ethereum address, extract the
  raw 20-byte address and hex-encode it yourself.
* **No EVM JSON-RPC.** CosmJS communicates over Tendermint/CometBFT RPC, not
  Ethereum's JSON-RPC. For `eth_sendTransaction` or similar calls, use an
  Ethereum library like ethers.js or viem alongside CosmJS.
* **No serialization/deserialization for EVM wallets.** Unlike
  `DirectSecp256k1HdWallet`, the EVM wallet classes do not support `serialize()`
  and `deserialize()` methods for encrypted storage.
