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 :
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 worksUse for emergency pause or maintenance
Controls who can register new ERC20 tokens:
false: Only governance can register (default, recommended)true: Anyone can register via MsgRegisterERC20Permissionless risks: spam tokens, malicious contracts
State
The module maintains token pair mappings and allowances :
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
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
Permissionless Registration (ERC20 Contracts)
When
permissionless_registrationparameter istrueAny user can register existing ERC20 contracts via
MsgRegisterERC20Useful for integrating existing ERC20 tokens
Governance Registration
Always available regardless of parameter settings
Can register any ERC20 contract or create new token pairs
Required when
permissionless_registrationisfalse
Messages
MsgRegisterERC20
Register existing ERC20 contracts for conversion :
Requirements:
permissionless_registrationenabled OR sender is governance authorityValid 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:
Validate token pair enabled
Transfer coins to module account
Mint equivalent ERC20 to receiver
Emit conversion event
ERC20 → Native Coin
UserModuleEVMBankMsgConvertERC20Burn/Escrow tokensRelease coinsNative coinsUserModuleEVMBank
Steps:
Validate token pair enabled
For module-owned: burn ERC20
For external: transfer to module
Release native coins from escrow
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
Token Registration Review
Audit contracts before registration
Verify standard compliance
Check for malicious behavior
Precompile Configuration
Enable precompiles for frequently used tokens
Monitor gas consumption
Set appropriate gas costs
IBC Setup
Configure middleware stack correctly
Test auto-conversion flows
Monitor conversion events
Security Considerations
Contract Validation
Event Monitoring
Track conversion events
Monitor for unusual patterns
Alert on large conversions
Emergency Response
Disable conversions via governance
Toggle specific token pairs
Have incident response plan
Troubleshooting
Common Issues
"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
最后更新于
