> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monei.cc/llms.txt
> Use this file to discover all available pages before exploring further.

# Wallet Operations

> Manage your EVM wallet across multiple blockchain networks

## 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:

<CardGroup cols={3}>
  <Card title="Single Address" icon="fingerprint">
    One address works on all 6+ EVM chains
  </Card>

  <Card title="Multi-Chain" icon="network-wired">
    Manage assets across Ethereum, BSC, Polygon, etc.
  </Card>

  <Card title="Custodial" icon="shield">
    Monei securely manages your private keys
  </Card>
</CardGroup>

***

## Get Wallet Address

Retrieve your EVM wallet address.

<CodeGroup>
  ```javascript Node.js theme={null}
  import MoneiSDK from 'monei-sdk';

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

  // Get wallet information
  const wallet = await monei.account.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);
  ```

  ```python Python theme={null}
  from monei import MoneiClient

  monei = MoneiClient(
      api_key=os.getenv('MONEI_API_KEY')
  )

  # Get wallet information
  wallet = monei.account.me()

  # Find EVM subwallet
  evm_wallet = next(w for w in wallet.subwallets if w.chain == 'EVM')

  print(f'EVM Address: {evm_wallet.public_address}')
  print(f'Chain: {evm_wallet.chain}')
  print(f'Balance: {evm_wallet.balance}')
  ```

  ```bash cURL theme={null}
  curl https://api.monei.cc/api/v1/wallet/me \
    -H "x-api-key: YOUR_API_KEY"
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "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.

<CodeGroup>
  ```javascript Node.js theme={null}
  // 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}`);
  });
  ```

  ```python Python theme={null}
  # Get supported networks
  networks = monei.evm.get_supported_networks()

  for network in networks:
      print(f'{network.name} (Chain ID: {network.chain_id})')
      print(f'  Native: {network.native_token}')
      print(f'  Explorer: {network.block_explorer_url}')
  ```

  ```bash cURL theme={null}
  curl https://api.monei.cc/api/v1/evm/networks \
    -H "x-api-key: YOUR_API_KEY"
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "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:**

| Network         | Chain ID | Native Token | Block Time |
| --------------- | -------- | ------------ | ---------- |
| Ethereum        | 1        | ETH          | \~12s      |
| BNB Smart Chain | 56       | BNB          | \~3s       |
| Polygon         | 137      | MATIC        | \~2s       |
| Base            | 8453     | ETH          | \~2s       |
| Arbitrum        | 42161    | ETH          | \~0.25s    |
| Optimism        | 10       | ETH          | \~2s       |

***

## Get Native Token Balance

Check your native token balance (ETH, BNB, MATIC, etc.).

<CodeGroup>
  ```javascript Node.js theme={null}
  // Get native token balance for a specific chain
  const balance = await monei.evm.getNativeBalance({
    chainId: 56 // BSC
  });

  console.log('Balance:', balance.balance, 'BNB');
  console.log('In Wei:', balance.balanceWei);
  ```

  ```python Python theme={null}
  # Get native balance
  balance = monei.evm.get_native_balance(chain_id=56)

  print(f'Balance: {balance.balance} BNB')
  print(f'In Wei: {balance.balance_wei}')
  ```

  ```bash cURL theme={null}
  curl "https://api.monei.cc/api/v1/evm/balance/native?chainId=56" \
    -H "x-api-key: YOUR_API_KEY"
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "statusCode": 200,
  "message": "Balance retrieved successfully",
  "data": {
    "balance": "0.5234"
  }
}
```

***

## Get ERC-20 Token Balance

Check balance for specific ERC-20 tokens.

<CodeGroup>
  ```javascript Node.js theme={null}
  // 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);
  ```

  ```python Python theme={null}
  # Get USDT balance
  usdt_balance = monei.evm.get_token_balance(
      token_address='0x55d398326f99059fF775485246999027B3197955',
      chain_id=56
  )

  print(f'USDT Balance: {usdt_balance.balance}')

  # Get USDC balance
  usdc_balance = monei.evm.get_token_balance(
      token_address='0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',
      chain_id=137
  )

  print(f'USDC Balance: {usdc_balance.balance}')
  ```

  ```bash cURL theme={null}
  # Get USDT balance on BSC
  curl "https://api.monei.cc/api/v1/evm/balance/token?tokenAddress=0x55d398326f99059fF775485246999027B3197955&chainId=56" \
    -H "x-api-key: YOUR_API_KEY"
  ```
</CodeGroup>

***

## Get Portfolio

View complete portfolio for a specific chain.

<CodeGroup>
  ```javascript Node.js theme={null}
  // 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}`);
  });
  ```

  ```python Python theme={null}
  # Get portfolio for BSC
  portfolio = monei.evm.get_portfolio(56)

  print(f'Network: {portfolio.network}')
  print(f'Total Value: ${portfolio.total_portfolio_value_usd}')

  # Native token
  print(f'\nNative: {portfolio.native_token.symbol}')
  print(f'  Balance: {portfolio.native_token.balance}')
  print(f'  USD Value: ${portfolio.native_token.balance_usd}')

  # Tokens
  print('\nTokens:')
  for token in portfolio.tokens:
      print(f'  {token.symbol}: {token.balance} (${token.balance_usd})')
      print(f'    Contract: {token.contract_address}')
  ```

  ```bash cURL theme={null}
  curl https://api.monei.cc/api/v1/evm/portfolio/56 \
    -H "x-api-key: YOUR_API_KEY"
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "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.

<CodeGroup>
  ```javascript Node.js theme={null}
  // 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);
  ```

  ```python Python theme={null}
  # Send native token
  tx = monei.evm.send_native_token(
      to='0xRecipientAddress',
      amount='0.01',
      chain_id=56
  )

  print(f'Transaction Hash: {tx.tx_hash}')
  print(f'Explorer: https://bscscan.com/tx/{tx.tx_hash}')
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.monei.cc/api/v1/evm/send/native \
    -H "x-api-key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "to": "0xRecipientAddress",
      "amount": "0.01",
      "chainId": 56
    }'
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "statusCode": 200,
  "message": "Transaction sent successfully",
  "data": {
    "txHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
  }
}
```

***

## Send ERC-20 Token

Send ERC-20 tokens to another address.

<CodeGroup>
  ```javascript Node.js theme={null}
  // 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);
  ```

  ```python Python theme={null}
  # Send USDT
  tx = monei.evm.send_token(
      to='0xRecipientAddress',
      token_address='0x55d398326f99059fF775485246999027B3197955',
      amount='100',
      chain_id=56
  )

  print(f'Transaction Hash: {tx.tx_hash}')

  # Send USDC on Polygon
  usdc_tx = monei.evm.send_token(
      to='0xRecipientAddress',
      token_address='0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',
      amount='50',
      chain_id=137
  )

  print(f'USDC Transaction: {usdc_tx.tx_hash}')
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.monei.cc/api/v1/evm/send/token \
    -H "x-api-key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "to": "0xRecipientAddress",
      "tokenAddress": "0x55d398326f99059fF775485246999027B3197955",
      "amount": "100",
      "chainId": 56
    }'
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "statusCode": 200,
  "message": "Token transfer successful",
  "data": {
    "txHash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
  }
}
```

***

## Multi-Chain Portfolio

View assets across all networks.

<CodeGroup>
  ```javascript Node.js theme={null}
  // 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)}`);
  });
  ```

  ```python Python theme={null}
  # Get multi-chain portfolio
  chains = [56, 137, 1, 8453, 42161, 10]

  total_value = 0
  portfolios = []

  for chain_id in chains:
      try:
          portfolio = monei.evm.get_portfolio(chain_id)
          portfolios.append(portfolio)
          total_value += float(portfolio.total_portfolio_value_usd)
          
          print(f'{portfolio.network}: ${portfolio.total_portfolio_value_usd}')
      except Exception as e:
          print(f'{chain_id}: No assets')

  print(f'\nTotal Value: ${total_value}')
  ```
</CodeGroup>

***

## Common Token Addresses

### Stablecoins

<Tabs>
  <Tab title="USDT">
    | Network  | Contract Address                             |
    | -------- | -------------------------------------------- |
    | BSC      | `0x55d398326f99059fF775485246999027B3197955` |
    | Polygon  | `0xc2132D05D31c914a87C6611C10748AEb04B58e8F` |
    | Ethereum | `0xdAC17F958D2ee523a2206206994597C13D831ec7` |
    | Arbitrum | `0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9` |
  </Tab>

  <Tab title="USDC">
    | Network  | Contract Address                             |
    | -------- | -------------------------------------------- |
    | BSC      | `0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d` |
    | Polygon  | `0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174` |
    | Ethereum | `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48` |
    | Base     | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` |
  </Tab>

  <Tab title="CNGN">
    | Network  | Contract Address                             |
    | -------- | -------------------------------------------- |
    | BSC      | `0xaAa9214F675316182Eaa21C85f0Ca99160CC3AAA` |
    | Polygon  | `0x8a87497488073307E1a17e8A12475a94Afcb413f` |
    | Ethereum | `0x...` (check latest)                       |
  </Tab>
</Tabs>

***

## Best Practices

<CardGroup cols={2}>
  <Card title="Verify Addresses" icon="check-double">
    Always verify recipient addresses before sending
  </Card>

  <Card title="Check Network" icon="network-wired">
    Ensure recipient supports the network you're using
  </Card>

  <Card title="Test Small First" icon="vial">
    Send small test amount before large transfers
  </Card>

  <Card title="Monitor Gas" icon="gas-pump">
    Keep native token for gas fees on each chain
  </Card>

  <Card title="Use Low-Cost Chains" icon="dollar-sign">
    Use Polygon or BSC for smaller transactions
  </Card>

  <Card title="Track Portfolio" icon="chart-line">
    Regularly check portfolio across all chains
  </Card>
</CardGroup>

***

## Gas Fees

Keep native tokens for gas on each network:

| Network  | Typical Gas Cost | Recommended Balance |
| -------- | ---------------- | ------------------- |
| Polygon  | $0.001 - $0.01   | 0.1 MATIC           |
| BSC      | $0.05 - $0.20    | 0.01 BNB            |
| Base     | $0.02 - $0.10    | 0.001 ETH           |
| Arbitrum | $0.10 - $0.50    | 0.002 ETH           |
| Optimism | $0.05 - $0.30    | 0.002 ETH           |
| Ethereum | $2.00 - $10.00   | 0.01 ETH            |

***

## Troubleshooting

<AccordionGroup>
  <Accordion icon="circle-xmark" title="Transaction Failed">
    **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
  </Accordion>

  <Accordion icon="clock" title="Transaction Pending">
    **Problem:** Transaction stuck in pending state

    **Confirmations 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
  </Accordion>

  <Accordion icon="exclamation-triangle" title="Wrong Network">
    **Problem:** Sent to wrong network

    **Prevention:**

    * 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
  </Accordion>
</AccordionGroup>

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Transactions" icon="arrow-right-arrow-left" href="/evm-blockchain/transactions">
    Learn about EVM transaction management
  </Card>

  <Card title="Token Swaps" icon="arrows-rotate" href="/evm-blockchain/token-swaps">
    Swap tokens across DEXs
  </Card>

  <Card title="Networks" icon="network-wired" href="/core-concepts/networks">
    Deep dive into supported networks
  </Card>

  <Card title="Security" icon="shield" href="/security/guidelines">
    Learn security best practices
  </Card>
</CardGroup>
