Skip to main content

Overview

Your Monei EVM wallet works across all supported Ethereum-compatible networks with a single address. This guide covers wallet operations, balance management, and portfolio tracking. What you’ll learn:
  • Get wallet address and details
  • Check balances (native tokens and ERC-20)
  • View portfolio across networks
  • Get supported networks
  • Send tokens and native currency
  • Multi-chain management

Your EVM Wallet

Your EVM wallet uses the same address across all supported networks:

Single Address

One address works on all 6+ EVM chains

Multi-Chain

Manage assets across Ethereum, BSC, Polygon, etc.

Custodial

Monei securely manages your private keys

Get Wallet Address

Retrieve your EVM wallet address.
import MoneiSDK from 'monei-sdk';

const monei = new MoneiSDK({
  apiKey: process.env.MONEI_API_KEY,
});

// Get wallet information
const wallet = await monei.wallet.me();

// Find EVM subwallet
const evmWallet = wallet.subwallets.find(w => w.chain === 'EVM');

console.log('EVM Address:', evmWallet.publicAddress);
console.log('Chain:', evmWallet.chain);
console.log('Balance:', evmWallet.balance);
Response:
{
  "statusCode": 200,
  "message": "User wallet retrieved successfully",
  "data": {
    "nairaBalance": "1805.00",
    "subwallets": [
      {
        "id": "uuid-here",
        "type": "CRYPTO",
        "currency": "ETH",
        "balance": 0.00008,
        "chain": "EVM",
        "publicAddress": "0x4e7859f17B7A6b3D440D444b3e2157e3806EDA23",
        "evmPortfolio": { /* portfolio data */ }
      }
    ]
  }
}

Supported Networks

Get all supported EVM networks.
// Get supported networks
const networks = await monei.evm.getSupportedNetworks();

networks.forEach(network => {
  console.log(`${network.name} (Chain ID: ${network.chainId})`);
  console.log(`  Native Token: ${network.nativeToken}`);
  console.log(`  Explorer: ${network.blockExplorerUrl}`);
  console.log(`  Testnet: ${network.isTestnet}`);
});
Response:
{
  "statusCode": 200,
  "message": "Networks retrieved successfully",
  "data": [
    {
      "chainId": 56,
      "name": "BNB Smart Chain",
      "nativeToken": "BNB",
      "blockExplorerUrl": "https://bscscan.com",
      "isTestnet": false
    },
    {
      "chainId": 137,
      "name": "Polygon",
      "nativeToken": "MATIC",
      "blockExplorerUrl": "https://polygonscan.com",
      "isTestnet": false
    }
  ]
}
Supported Networks:
NetworkChain IDNative TokenBlock Time
Ethereum1ETH~12s
BNB Smart Chain56BNB~3s
Polygon137MATIC~2s
Base8453ETH~2s
Arbitrum42161ETH~0.25s
Optimism10ETH~2s

Get Native Token Balance

Check your native token balance (ETH, BNB, MATIC, etc.).
// Get native token balance for a specific chain
const balance = await monei.evm.getBalance({
  chainId: 56 // BSC
});

console.log('Balance:', balance.balance, 'BNB');
console.log('In Wei:', balance.balanceWei);
Response:
{
  "statusCode": 200,
  "message": "Balance retrieved successfully",
  "data": {
    "balance": "0.5234"
  }
}

Get ERC-20 Token Balance

Check balance for specific ERC-20 tokens.
// Get USDT balance on BSC
const usdtBalance = await monei.evm.getTokenBalance({
  tokenAddress: '0x55d398326f99059fF775485246999027B3197955', // USDT on BSC
  chainId: 56
});

console.log('USDT Balance:', usdtBalance.balance);

// Get USDC balance on Polygon
const usdcBalance = await monei.evm.getTokenBalance({
  tokenAddress: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', // USDC on Polygon
  chainId: 137
});

console.log('USDC Balance:', usdcBalance.balance);

Get Portfolio

View complete portfolio for a specific chain.
// Get portfolio for BSC (Chain ID 56)
const portfolio = await monei.evm.getPortfolio(56);

console.log('Network:', portfolio.network);
console.log('Wallet Address:', portfolio.walletAddress);
console.log('Total Value:', portfolio.totalPortfolioValueUSD, 'USD');

// Native token
console.log('\nNative Token:');
console.log('  Symbol:', portfolio.nativeToken.symbol);
console.log('  Balance:', portfolio.nativeToken.balance);
console.log('  USD Value:', portfolio.nativeToken.balanceUSD);

// ERC-20 tokens
console.log('\nERC-20 Tokens:');
portfolio.tokens.forEach(token => {
  console.log(`  ${token.symbol}: ${token.balance} ($${token.balanceUSD})`);
  console.log(`    Contract: ${token.contractAddress}`);
  console.log(`    Price: $${token.priceUSD}`);
});
Response:
{
  "statusCode": 200,
  "message": "Portfolio retrieved successfully",
  "data": {
    "userId": "user-id-here",
    "walletAddress": "0x4e7859f17B7A6b3D440D444b3e2157e3806EDA23",
    "network": "BNB Smart Chain",
    "totalPortfolioValueUSD": "1250.75",
    "nativeToken": {
      "contractAddress": null,
      "name": "BNB",
      "symbol": "BNB",
      "decimals": 18,
      "type": "native",
      "balance": "0.5234",
      "balanceUSD": "150.25",
      "priceUSD": "287.00",
      "rawBalance": "523400000000000000",
      "network": "BNB Smart Chain"
    },
    "tokens": [
      {
        "contractAddress": "0x55d398326f99059fF775485246999027B3197955",
        "name": "Tether USD",
        "symbol": "USDT",
        "decimals": 18,
        "type": "token",
        "balance": "1000.50",
        "balanceUSD": "1000.50",
        "priceUSD": "1.00",
        "rawBalance": "1000500000000000000000",
        "network": "BNB Smart Chain",
        "logoUrl": "https://assets.coingecko.com/coins/images/325/large/Tether.png"
      },
      {
        "contractAddress": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
        "name": "USD Coin",
        "symbol": "USDC",
        "decimals": 18,
        "type": "token",
        "balance": "100.00",
        "balanceUSD": "100.00",
        "priceUSD": "1.00",
        "rawBalance": "100000000000000000000",
        "network": "BNB Smart Chain"
      }
    ],
    "updatedAt": "2024-02-15T10:30:00Z"
  }
}

Send Native Token

Send native tokens (ETH, BNB, MATIC, etc.) to another address.
// Send 0.01 BNB on BSC
const tx = await monei.evm.sendNativeToken({
  to: '0xRecipientAddress',
  amount: '0.01',
  chainId: 56
});

console.log('Transaction Hash:', tx.txHash);
console.log('Explorer:', `https://bscscan.com/tx/${tx.txHash}`);

// Check transaction status
const status = await monei.evm.getTransactionStatus(tx.txHash, 56);
console.log('Status:', status.status);
console.log('Confirmations:', status.confirmations);
Response:
{
  "statusCode": 200,
  "message": "Transaction sent successfully",
  "data": {
    "txHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
  }
}

Send ERC-20 Token

Send ERC-20 tokens to another address.
// Send 100 USDT on BSC
const tx = await monei.evm.sendToken({
  to: '0xRecipientAddress',
  tokenAddress: '0x55d398326f99059fF775485246999027B3197955', // USDT on BSC
  amount: '100',
  chainId: 56
});

console.log('Transaction Hash:', tx.txHash);
console.log('Explorer:', `https://bscscan.com/tx/${tx.txHash}`);

// Send USDC on Polygon
const usdcTx = await monei.evm.sendToken({
  to: '0xRecipientAddress',
  tokenAddress: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', // USDC on Polygon
  amount: '50',
  chainId: 137
});

console.log('USDC Transaction:', usdcTx.txHash);
Response:
{
  "statusCode": 200,
  "message": "Token transfer successful",
  "data": {
    "txHash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
  }
}

Multi-Chain Portfolio

View assets across all networks.
// Get portfolio across all chains
const chains = [56, 137, 1, 8453, 42161, 10]; // BSC, Polygon, ETH, Base, Arbitrum, Optimism

const portfolios = [];
let totalValue = 0;

for (const chainId of chains) {
  try {
    const portfolio = await monei.evm.getPortfolio(chainId);
    portfolios.push(portfolio);
    totalValue += parseFloat(portfolio.totalPortfolioValueUSD);
    
    console.log(`${portfolio.network}: $${portfolio.totalPortfolioValueUSD}`);
  } catch (error) {
    console.log(`${chainId}: No assets`);
  }
}

console.log('\nTotal Portfolio Value:', totalValue, 'USD');

// Group by token
const tokenBalances = {};
portfolios.forEach(p => {
  p.tokens.forEach(token => {
    if (!tokenBalances[token.symbol]) {
      tokenBalances[token.symbol] = 0;
    }
    tokenBalances[token.symbol] += parseFloat(token.balanceUSD);
  });
});

console.log('\nBalances by Token:');
Object.entries(tokenBalances).forEach(([symbol, value]) => {
  console.log(`  ${symbol}: $${value.toFixed(2)}`);
});

Common Token Addresses

Stablecoins

NetworkContract Address
BSC0x55d398326f99059fF775485246999027B3197955
Polygon0xc2132D05D31c914a87C6611C10748AEb04B58e8F
Ethereum0xdAC17F958D2ee523a2206206994597C13D831ec7
Arbitrum0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9

Best Practices

Verify Addresses

Always verify recipient addresses before sending

Check Network

Ensure recipient supports the network you’re using

Test Small First

Send small test amount before large transfers

Monitor Gas

Keep native token for gas fees on each chain

Use Low-Cost Chains

Use Polygon or BSC for smaller transactions

Track Portfolio

Regularly check portfolio across all chains

Gas Fees

Keep native tokens for gas on each network:
NetworkTypical Gas CostRecommended Balance
Polygon0.0010.001 - 0.010.1 MATIC
BSC0.050.05 - 0.200.01 BNB
Base0.020.02 - 0.100.001 ETH
Arbitrum0.100.10 - 0.500.002 ETH
Optimism0.050.05 - 0.300.002 ETH
Ethereum2.002.00 - 10.000.01 ETH

Troubleshooting

Common causes:
  • Insufficient balance for amount + gas
  • Invalid recipient address
  • Network congestion
  • Gas price too low
Solutions:
  • Check balance includes gas fees
  • Verify address format
  • Retry with higher gas
  • Wait for network congestion to clear
Problem: Transaction stuck in pending stateConfirmations needed:
  • Ethereum: 12 blocks (~3 min)
  • BSC: 15 blocks (~45 sec)
  • Polygon: 128 blocks (~4 min)
  • Base/Arbitrum/Optimism: Near instant
Action:
  • Wait for required confirmations
  • Check block explorer
  • Contact support if pending > 1 hour
Problem: Sent to wrong networkPrevention:
  • Always verify network before sending
  • Check recipient supports the network
  • Use network-specific explorers
Recovery:
  • If same address on both networks, tokens are safe
  • Import wallet to correct network
  • Contact support for assistance

Next Steps

Transactions

Learn about EVM transaction management

Token Swaps

Swap tokens across DEXs

Networks

Deep dive into supported networks

Security

Learn security best practices