> ## 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 Solana wallet and SPL tokens

## Overview

Your Monei Solana wallet allows you to manage SOL and SPL tokens on the Solana blockchain. This guide covers wallet operations, balance management, and portfolio tracking.

**What you'll learn:**

* Get Solana wallet address
* Check SOL balance
* Check SPL token balances
* View complete portfolio
* Send SOL and SPL tokens
* Network selection (mainnet/devnet/testnet)

***

## Your Solana Wallet

<CardGroup cols={3}>
  <Card title="Fast Transactions" icon="bolt">
    \~0.4 second block time, near-instant finality
  </Card>

  <Card title="Low Fees" icon="dollar-sign">
    \~\$0.00025 per transaction
  </Card>

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

***

## Get Wallet Address

Retrieve your Solana wallet address.

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

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

  // Get Solana wallet address
  const address = await monei.solana.getAddress();

  console.log('Solana Address:', address.address);
  ```

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

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

  # Get Solana address
  address = monei.solana.get_address()

  print(f'Solana Address: {address.address}')
  ```

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

**Response:**

```json theme={null}
{
  "statusCode": 200,
  "message": "Address retrieved successfully",
  "data": {
    "address": "7KX8kq1vXWBYGNHWD3HqLNcJ6J6xWN5N3J6J6J6J6J6J"
  }
}
```

***

## Network Selection

Solana supports multiple networks for different use cases.

| Network        | Description         | Use Case          |
| -------------- | ------------------- | ----------------- |
| `mainnet-beta` | Production network  | Real transactions |
| `devnet`       | Development network | Testing           |
| `testnet`      | Testing network     | Testing           |

<CodeGroup>
  ```javascript Node.js theme={null}
  // Get balance on mainnet (default)
  const mainnetBalance = await monei.solana.getNativeBalance({
    network: 'mainnet-beta'
  });

  // Get balance on devnet for testing
  const devnetBalance = await monei.solana.getNativeBalance({
    network: 'devnet'
  });

  console.log('Mainnet Balance:', mainnetBalance.balance, 'SOL');
  console.log('Devnet Balance:', devnetBalance.balance, 'SOL');
  ```

  ```python Python theme={null}
  # Mainnet balance
  mainnet_balance = monei.solana.get_native_balance(network='mainnet-beta')

  # Devnet balance
  devnet_balance = monei.solana.get_native_balance(network='devnet')

  print(f'Mainnet: {mainnet_balance.balance} SOL')
  print(f'Devnet: {devnet_balance.balance} SOL')
  ```
</CodeGroup>

<Info>
  Default network is `mainnet-beta`. Specify `network` parameter for devnet or testnet.
</Info>

***

## Get SOL Balance

Check your native SOL balance.

<CodeGroup>
  ```javascript Node.js theme={null}
  // Get SOL balance
  const balance = await monei.solana.getNativeBalance({
    network: 'mainnet-beta' // optional, defaults to mainnet-beta
  });

  console.log('SOL Balance:', balance.balance);
  console.log('In Lamports:', balance.balanceLamports);
  ```

  ```python Python theme={null}
  # Get SOL balance
  balance = monei.solana.get_native_balance(network='mainnet-beta')

  print(f'SOL Balance: {balance.balance}')
  print(f'In Lamports: {balance.balance_lamports}')
  ```

  ```bash cURL theme={null}
  curl "https://api.monei.cc/api/v1/solana/balance?network=mainnet-beta" \
    -H "x-api-key: YOUR_API_KEY"
  ```
</CodeGroup>

**Response:**

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

<Note>
  1 SOL = 1,000,000,000 lamports (9 decimals)
</Note>

***

## Get SPL Token Balance

Check balance for a specific SPL token.

<CodeGroup>
  ```javascript Node.js theme={null}
  // Get USDC balance on Solana
  const usdcBalance = await monei.solana.getTokenBalance({
    tokenMintAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC mint
    network: 'mainnet-beta'
  });

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

  // Get USDT balance
  const usdtBalance = await monei.solana.getTokenBalance({
    tokenMintAddress: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', // USDT mint
    network: 'mainnet-beta'
  });

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

  ```python Python theme={null}
  # Get USDC balance
  usdc_balance = monei.solana.get_token_balance(
      token_mint_address='EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
      network='mainnet-beta'
  )

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

  # Get USDT balance
  usdt_balance = monei.solana.get_token_balance(
      token_mint_address='Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
      network='mainnet-beta'
  )

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

  ```bash cURL theme={null}
  # Get USDC balance
  curl "https://api.monei.cc/api/v1/solana/token-balance/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v?network=mainnet-beta" \
    -H "x-api-key: YOUR_API_KEY"
  ```
</CodeGroup>

**Response:**

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

***

## Get Portfolio

View your complete Solana portfolio including SOL and all SPL tokens.

<CodeGroup>
  ```javascript Node.js theme={null}
  // Get complete portfolio
  const portfolio = await monei.solana.getPortfolio({
    network: 'mainnet-beta'
  });

  console.log('User ID:', portfolio.userId);
  console.log('Address:', portfolio.address);
  console.log('Total Value:', portfolio.totalValueUsd, 'USD');

  // Native SOL
  console.log('\nNative SOL:');
  console.log('  Balance:', portfolio.nativeBalance, 'SOL');
  console.log('  Lamports:', portfolio.nativeBalanceLamports);
  console.log('  USD Value:', portfolio.nativeBalanceUsd);

  // SPL Tokens
  console.log('\nSPL Tokens:');
  portfolio.tokens.forEach(token => {
    console.log(`\n  ${token.symbol} (${token.name})`);
    console.log(`    Mint: ${token.mintAddress}`);
    console.log(`    Balance: ${token.balance}`);
    console.log(`    Raw Balance: ${token.rawBalance}`);
    console.log(`    Decimals: ${token.decimals}`);
    console.log(`    Price USD: $${token.priceUsd}`);
    console.log(`    Value USD: $${token.valueUsd}`);
  });
  ```

  ```python Python theme={null}
  # Get portfolio
  portfolio = monei.solana.get_portfolio(network='mainnet-beta')

  print(f'User ID: {portfolio.user_id}')
  print(f'Address: {portfolio.address}')
  print(f'Total Value: ${portfolio.total_value_usd}')

  # Native SOL
  print(f'\nNative SOL:')
  print(f'  Balance: {portfolio.native_balance} SOL')
  print(f'  Lamports: {portfolio.native_balance_lamports}')
  print(f'  USD Value: ${portfolio.native_balance_usd}')

  # SPL Tokens
  print('\nSPL Tokens:')
  for token in portfolio.tokens:
      print(f'\n  {token.symbol} ({token.name})')
      print(f'    Mint: {token.mint_address}')
      print(f'    Balance: {token.balance}')
      print(f'    Price: ${token.price_usd}')
      print(f'    Value: ${token.value_usd}')
  ```

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

**Response:**

```json theme={null}
{
  "statusCode": 200,
  "message": "Portfolio retrieved successfully",
  "data": {
    "userId": "user-uuid-here",
    "address": "7KX8kq1vXWBYGNHWD3HqLNcJ6J6xWN5N3J6J6J6J6J6J",
    "nativeBalance": "2.5",
    "nativeBalanceLamports": "2500000000",
    "nativeBalanceUsd": 250.0,
    "tokens": [
      {
        "mintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
        "name": "USD Coin",
        "symbol": "USDC",
        "balance": "1500.50",
        "rawBalance": "1500500000",
        "decimals": 6,
        "priceUsd": 1.00,
        "valueUsd": 1500.50
      },
      {
        "mintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
        "name": "USDT",
        "symbol": "USDT",
        "balance": "500.00",
        "rawBalance": "500000000",
        "decimals": 6,
        "priceUsd": 1.00,
        "valueUsd": 500.00
      }
    ],
    "totalValueUsd": 2250.50
  }
}
```

***

## Send SOL

Transfer SOL to another Solana address.

<CodeGroup>
  ```javascript Node.js theme={null}
  // Send 0.5 SOL
  const tx = await monei.solana.sendNativeToken({
    to: '9B5XszUGdMaxCZ7uSQhPzdks5ZQSmWxrmzCSvtJ6Ns6g',
    amount: '0.5',
    network: 'mainnet-beta'
  });

  console.log('Transaction Signature:', tx.signature);
  console.log('View on Solscan:', `https://solscan.io/tx/${tx.signature}`);

  // Wait for confirmation
  await monei.solana.waitForConfirmation(tx.signature);
  console.log('Transaction confirmed!');
  ```

  ```python Python theme={null}
  # Send SOL
  tx = monei.solana.send_native_token(
      to='9B5XszUGdMaxCZ7uSQhPzdks5ZQSmWxrmzCSvtJ6Ns6g',
      amount='0.5',
      network='mainnet-beta'
  )

  print(f'Signature: {tx.signature}')
  print(f'Explorer: https://solscan.io/tx/{tx.signature}')

  # Wait for confirmation
  monei.solana.wait_for_confirmation(tx.signature)
  print('Confirmed!')
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.monei.cc/api/v1/solana/transfer \
    -H "x-api-key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "to": "9B5XszUGdMaxCZ7uSQhPzdks5ZQSmWxrmzCSvtJ6Ns6g",
      "amount": "0.5",
      "network": "mainnet-beta"
    }'
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "statusCode": 200,
  "message": "Transfer successful",
  "data": {
    "signature": "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnTPLgTLpjvS3yJG3TBhVLiYt5mMXe4EH7zJ2VSkQfpYjG"
  }
}
```

**Request Parameters:**

| Parameter | Type   | Required | Description                     |
| --------- | ------ | -------- | ------------------------------- |
| `to`      | string | Yes      | Recipient Solana address        |
| `amount`  | string | Yes      | Amount of SOL to send           |
| `network` | string | No       | Network (default: mainnet-beta) |

***

## Send SPL Token

Transfer SPL tokens to another address.

<CodeGroup>
  ```javascript Node.js theme={null}
  // Send 100 USDC
  const tx = await monei.solana.sendToken({
    to: '9B5XszUGdMaxCZ7uSQhPzdks5ZQSmWxrmzCSvtJ6Ns6g',
    tokenMintAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC
    amount: '100',
    network: 'mainnet-beta'
  });

  console.log('Transaction Signature:', tx.signature);
  console.log('View on Solscan:', `https://solscan.io/tx/${tx.signature}`);

  // Send USDT
  const usdtTx = await monei.solana.sendToken({
    to: '9B5XszUGdMaxCZ7uSQhPzdks5ZQSmWxrmzCSvtJ6Ns6g',
    tokenMintAddress: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', // USDT
    amount: '50',
    network: 'mainnet-beta'
  });

  console.log('USDT Transaction:', usdtTx.signature);
  ```

  ```python Python theme={null}
  # Send USDC
  tx = monei.solana.send_token(
      to='9B5XszUGdMaxCZ7uSQhPzdks5ZQSmWxrmzCSvtJ6Ns6g',
      token_mint_address='EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
      amount='100',
      network='mainnet-beta'
  )

  print(f'Signature: {tx.signature}')
  print(f'Explorer: https://solscan.io/tx/{tx.signature}')

  # Send USDT
  usdt_tx = monei.solana.send_token(
      to='9B5XszUGdMaxCZ7uSQhPzdks5ZQSmWxrmzCSvtJ6Ns6g',
      token_mint_address='Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
      amount='50',
      network='mainnet-beta'
  )

  print(f'USDT Transaction: {usdt_tx.signature}')
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.monei.cc/api/v1/solana/transfer-token \
    -H "x-api-key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "to": "9B5XszUGdMaxCZ7uSQhPzdks5ZQSmWxrmzCSvtJ6Ns6g",
      "tokenMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
      "amount": "100",
      "network": "mainnet-beta"
    }'
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "statusCode": 200,
  "message": "Token transfer successful",
  "data": {
    "signature": "3yKGPvn2mVTpVqKLh9nWxkqVZL9RHkP2Uh8N5GqYqR7rRqKJ3sVHnT8LJ5VYqR7rRqKJ3sVHnT8LJ5VYqR7rR"
  }
}
```

**Request Parameters:**

| Parameter          | Type   | Required | Description                     |
| ------------------ | ------ | -------- | ------------------------------- |
| `to`               | string | Yes      | Recipient Solana address        |
| `tokenMintAddress` | string | Yes      | SPL token mint address          |
| `amount`           | string | Yes      | Amount of tokens to send        |
| `network`          | string | No       | Network (default: mainnet-beta) |

***

## Common SPL Token Addresses

### Stablecoins

| Token     | Mint Address                                   |
| --------- | ---------------------------------------------- |
| **USDC**  | `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` |
| **USDT**  | `Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB` |
| **PYUSD** | `2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo` |

### Wrapped Assets

| Token           | Mint Address                                   |
| --------------- | ---------------------------------------------- |
| **Wrapped SOL** | `So11111111111111111111111111111111111111112`  |
| **Wrapped BTC** | `9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E` |
| **Wrapped ETH** | `7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs` |

### Popular Tokens

| Token             | Mint Address                                   |
| ----------------- | ---------------------------------------------- |
| **JUP (Jupiter)** | `JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN`  |
| **BONK**          | `DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263` |
| **WIF**           | `EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm` |

<Info>
  Always verify token mint addresses from official sources before using them.
</Info>

***

## Transaction Fees

Solana has extremely low transaction fees:

| Transaction Type       | Fee (SOL)  | Fee (USD)  |
| ---------------------- | ---------- | ---------- |
| **SOL Transfer**       | \~0.000005 | \~\$0.0005 |
| **SPL Token Transfer** | \~0.000005 | \~\$0.0005 |
| **Token Swap**         | \~0.00001  | \~\$0.001  |

**Fee Structure:**

* Base fee: 5,000 lamports (0.000005 SOL)
* Priority fees: Optional, for faster processing
* Rent: Required for new token accounts (\~0.002 SOL, refundable)

<CodeGroup>
  ```javascript Node.js theme={null}
  // Check if recipient has token account
  async function checkTokenAccount(recipientAddress, tokenMint) {
    try {
      const balance = await connection.getTokenAccountBalance(tokenMint);
      console.log('Token account exists');
      return true;
    } catch (error) {
      console.log('Token account does not exist');
      console.log('Will require rent: ~0.002 SOL');
      return false;
    }
  }
  ```

  ```python Python theme={null}
  # Estimate total cost
  def estimate_transfer_cost(has_token_account=True):
      base_fee = 0.000005  # SOL
      rent = 0.002 if not has_token_account else 0  # SOL
      total = base_fee + rent
      
      print(f'Base Fee: {base_fee} SOL')
      if rent > 0:
          print(f'Rent (new account): {rent} SOL')
      print(f'Total Cost: {total} SOL')
      
      return total
  ```
</CodeGroup>

***

## Best Practices

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

  <Card title="Keep SOL for Fees" icon="gas-pump">
    Maintain minimum 0.01 SOL for transaction fees
  </Card>

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

  <Card title="Check Token Accounts" icon="circle-check">
    Ensure recipient has token account to avoid rent
  </Card>

  <Card title="Monitor Portfolio" icon="chart-line">
    Regularly check portfolio for all holdings
  </Card>

  <Card title="Use Mainnet" icon="network-wired">
    Always use mainnet-beta for real transactions
  </Card>
</CardGroup>

***

## Solana vs EVM Comparison

| Feature             | Solana               | EVM (Ethereum, BSC, etc.) |
| ------------------- | -------------------- | ------------------------- |
| **Block Time**      | \~0.4 seconds        | 2-15 seconds              |
| **Transaction Fee** | \~\$0.0005           | $0.01 - $50               |
| **Finality**        | \~1 second           | 30 seconds - 3 minutes    |
| **TPS**             | 65,000+              | 15 - 2,000                |
| **Address Format**  | Base58 (44 chars)    | Hex (42 chars, 0x...)     |
| **Tokens**          | SPL tokens           | ERC-20 tokens             |
| **Use Case**        | High-speed, low-cost | General purpose, DeFi     |

***

## Troubleshooting

<AccordionGroup>
  <Accordion icon="circle-xmark" title="Transaction Failed - Insufficient Balance">
    **Error:** Insufficient balance for transaction

    **Common causes:**

    * Not enough SOL for amount + fees
    * Not enough token balance
    * Need rent for new token account (\~0.002 SOL)

    **Solution:**

    ```javascript theme={null}
    // Check balance before sending
    const balance = await monei.solana.getBalance({ network: 'mainnet-beta' });
    const minRequired = parseFloat(amount) + 0.01; // amount + buffer

    if (parseFloat(balance.balance) < minRequired) {
      console.log('Insufficient SOL balance');
      console.log('Need:', minRequired, 'SOL');
      console.log('Have:', balance.balance, 'SOL');
    }
    ```
  </Accordion>

  <Accordion icon="circle-xmark" title="Token Account Does Not Exist">
    **Error:** Recipient token account not found

    **Cause:** Recipient has never received this token before

    **Solution:**

    * First transfer will create token account (costs \~0.002 SOL rent)
    * Rent is paid by sender
    * Ensure you have extra SOL for rent
    * Recipient can close account later to reclaim rent
  </Accordion>

  <Accordion icon="clock" title="Transaction Pending">
    **Problem:** Transaction not confirming

    **Expected confirmation time:** \~1 second

    **Action:**

    1. Check transaction on Solscan/Solana Explorer
    2. Wait up to 30 seconds
    3. If still pending, check network status
    4. Contact support if pending > 1 minute
  </Accordion>

  <Accordion icon="exclamation-triangle" title="Invalid Address Format">
    **Error:** Invalid Solana address

    **Valid format:**

    * Base58 encoded
    * 32-44 characters
    * Example: `9B5XszUGdMaxCZ7uSQhPzdks5ZQSmWxrmzCSvtJ6Ns6g`

    **Validation:**

    ```javascript theme={null}
    function isValidSolanaAddress(address) {
      return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(address);
    }

    if (!isValidSolanaAddress(recipientAddress)) {
      console.log('Invalid Solana address format');
    }
    ```
  </Accordion>

  <Accordion icon="ban" title="Blockhash Not Found">
    **Error:** Blockhash not found or expired

    **Cause:** Transaction took too long to process

    **Solution:**

    * Transactions on Solana expire after \~60 seconds
    * Retry the transaction
    * This is handled automatically by Monei
  </Accordion>
</AccordionGroup>

***

## Next Steps

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

  <Card title="Token Swaps" icon="arrows-rotate" href="/solana/token-swaps">
    Swap SOL and SPL tokens on Jupiter
  </Card>

  <Card title="EVM Wallet" icon="ethereum" href="/evm-blockchain/wallet-operations">
    Compare with EVM wallet operations
  </Card>

  <Card title="Networks" icon="network-wired" href="/core-concepts/networks">
    Learn about supported networks
  </Card>
</CardGroup>
