Skip to main content
The x/erc20 module from cosmos/evm enables bidirectional conversion between Cosmos SDK coins and ERC20 tokens within the EVM runtime.
For conceptual understanding of Single Token Representation v2, see Single Token Representation.

Parameters

The module parameters control token conversion and registration (source):

Parameter Details

State

The module maintains token pair mappings and allowances (source):

Token Pair Structure

Token Pair Registration

Registration Methods

  1. Automatic Registration (IBC Tokens)
    • IBC tokens (denoms starting with “ibc/”) are automatically registered on first receipt
    • No governance proposal or user action required
    • Creates ERC20 precompile at deterministic address
  2. Permissionless Registration (ERC20 Contracts)
    • When permissionless_registration parameter is true
    • Any user can register existing ERC20 contracts via MsgRegisterERC20
    • Useful for integrating existing ERC20 tokens
  3. Governance Registration
    • Always available regardless of parameter settings
    • Can register any ERC20 contract or create new token pairs
    • Required when permissionless_registration is false

Messages

MsgRegisterERC20

Register existing ERC20 contracts for conversion (source):
Requirements:
  • permissionless_registration enabled OR sender is governance authority
  • Valid ERC20 contract at address
  • Contract not already registered
  • Contract implements standard ERC20 interface

MsgConvertCoin

Convert Cosmos coins to ERC20 tokens:
Validation:
  • Token pair exists and enabled
  • Sender has sufficient balance
  • Valid receiver address

MsgConvertERC20

Convert ERC20 tokens to Cosmos coins:
Validation:
  • Token pair exists and enabled
  • Sender has sufficient ERC20 balance
  • Valid receiver address

MsgToggleConversion

Enable/disable conversions for a token pair (governance only):

MsgUpdateParams

Update module parameters (governance only):

Conversion Flows

Native Coin → ERC20

Steps:
  1. Validate token pair enabled
  2. Transfer coins to module account
  3. Mint equivalent ERC20 to receiver
  4. Emit conversion event

ERC20 → Native Coin

Steps:
  1. Validate token pair enabled
  2. For module-owned: burn ERC20
  3. For external: transfer to module
  4. Release native coins from escrow
  5. Emit conversion event

Precompile System

Native Precompiles

Automatically created for Cosmos coins at deterministic addresses:
Interface:

Dynamic Precompiles (WERC20)

Optional wrapped interface for registered tokens:

IBC Integration

IBC Middleware v1

Standard IBC transfer integration (source):
Automatic Registration:
  • IBC tokens (denoms starting with “ibc/”) are automatically registered on first receipt
  • Factory tokens (denoms starting with “factory/”) are skipped
  • Native chain tokens require explicit registration

IBC Middleware v2

Enhanced IBC v2 support (source):
  • New packet format support
  • Improved error handling
  • Multi-hop awareness
  • Backward compatibility

Events

Registration Events

Conversion Events

IBC Events

Queries

gRPC

CLI

Integration Examples

DeFi Protocol Integration

Automatic IBC Conversion

Manual Conversion Flow

Best Practices

Chain Integration

  1. Token Registration Review
    • Audit contracts before registration
    • Verify standard compliance
    • Check for malicious behavior
  2. Precompile Configuration
    • Enable precompiles for frequently used tokens
    • Monitor gas consumption
    • Set appropriate gas costs
  3. IBC Setup
    • Configure middleware stack correctly
    • Test auto-conversion flows
    • Monitor conversion events

Security Considerations

  1. Contract Validation
  2. Event Monitoring
    • Track conversion events
    • Monitor for unusual patterns
    • Alert on large conversions
  3. Emergency Response
    • Disable conversions via governance
    • Toggle specific token pairs
    • Have incident response plan

Troubleshooting

Common Issues

Debug Commands

References

Source Code