ERC20

Token pair management and conversion between Ontomir coins and ERC20 tokens

The x/erc20 module from Ontomir evm enables bidirectional conversion between Ontomir SDK coins and ERC20 tokens within the EVM runtime.

For conceptual understanding of Single Token Representation v2, see [Single Token Representation](/docs/evm/next/documentation/concepts/single-token-representation).

Parameters

The module parameters control token conversion and registration :

Parameter
Type
Default
Description

enable_erc20

bool

true

Enable token conversions globally

permissionless_registration

bool

false

Allow anyone to register ERC20 tokens

Parameter Details

Master switch for token conversions:

  • true: All conversions enabled (default)

  • false: Disables all conversions, registration still works

  • Use for emergency pause or maintenance

Controls who can register new ERC20 tokens:

  • false: Only governance can register (default, recommended)

  • true: Anyone can register via MsgRegisterERC20

  • Permissionless risks: spam tokens, malicious contracts

State

The module maintains token pair mappings and allowances :

Object
Key
Value
Description

TokenPair

0x01 + ID

TokenPair

Token pair configuration

TokenPairByERC20

0x02 + address

ID

Lookup by ERC20 address

TokenPairByDenom

0x03 + denom

ID

Lookup by denomination

Allowance

0x04 + hash

Allowance

ERC20 allowances

NativePrecompiles

0x05 + address

bool

Native precompile registry

DynamicPrecompiles

0x06 + address

bool

Dynamic precompile registry

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 :

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 Ontomir coins to ERC20 tokens:

Validation:

  • Token pair exists and enabled

  • Sender has sufficient balance

  • Valid receiver address

MsgConvertERC20

Convert ERC20 tokens to Ontomir 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

UserModuleBankEVMMsgConvertCoinEscrow coinsMint ERC20ERC20 tokensUserModuleBankEVM

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

UserModuleEVMBankMsgConvertERC20Burn/Escrow tokensRelease coinsNative coinsUserModuleEVMBank

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 Ontomir coins at deterministic addresses:

Interface:

Dynamic Precompiles (WERC20)

Optional wrapped interface for registered tokens:

IBC Integration

IBC Middleware v1

Standard IBC transfer integration :

```go // Automatic registration and conversion on receive OnRecvPacket(packet) { // Auto-register new IBC tokens (with "ibc/" prefix) if !tokenPairExists && hasPrefix(denom, "ibc/") { RegisterERC20Extension(denom) }

}

// Automatic conversion on acknowledgment OnAcknowledgementPacket(packet, ack) { if wasConverted { convertBackToOntomir(refund) } }

CLI

```bash Query-Params # Query module parameters evmd query erc20 params ```

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

Issue
Cause
Solution

"token pair not found"

Token not registered

Register via governance

"token pair disabled"

Conversions toggled off

Enable via governance

"insufficient balance"

Low balance for conversion

Check balance in correct format

"invalid recipient"

Wrong address format

Use hex for EVM, bech32 for Ontomir

"module disabled"

enable_erc20 = false

Enable via governance

Debug Commands

最后更新于