Token Interop
The Single-State Model
┌──────────────────────────────────┐
│ Rome EVM │
│ │
│ ERC-20 "rUSDC" │
│ ┌────────────────────────┐ │
│ │ balanceOf(user) │─────┼──► reads directly from SPL ATA
│ │ transfer(to, amount) │─────┼──► executes SPL transfer via precompile
│ │ totalSupply() │─────┼──► reads SPL mint supply
│ └────────────────────────┘ │
│ │
└──────────────────────────────────┘
│
│ same underlying data
↓
┌──────────────────────────────────┐
│ Solana │
│ │
│ SPL Token Account (ATA) │
│ Owner: user's PDA │
│ Mint: USDC (Circle native) │
│ Amount: 1000000 (= 1 USDC) │
│ │
└──────────────────────────────────┘ERC20SPL: The Wrapper Contract
ERC20SPLFactory
Token Registry
Deposit / Withdraw Flow
Depositing SPL → EVM
Withdrawing EVM → SPL
PDA Derivation
Key Patterns
Reading SPL Balances from Solidity
Transferring Tokens via SPL Precompile
Gas Token
Constraints
What's Next
Last updated
Was this helpful?