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

# Deposit Addresses for Solana

> Create a deposit address that automatically routes USDC from Base to a Solana wallet

Deposit addresses for Solana let users receive USDC on a Solana wallet by sending to a deterministic EVM address on Base. The sender makes a normal ERC-20 transfer. No bridge UI, no approval step, no contract interaction required.

Looking for gasless deposits into Circle Gateway instead? See [Circle Gateway Deposits](/addresses/gateway-fast-deposits). That's a different product with its own endpoints and supported chains.

<Tip>
  For the full REST endpoint reference, see [Solana API](/api-reference/programmable-addresses/solana-overview) under the API Reference tab.
</Tip>

## Environment

Base URL: `https://deposit-addresses.eco.com`

In this quickstart, you will:

<Steps>
  <Step title="Generate a deposit address">
    Request a deposit address for your Solana wallet via the API.
  </Step>

  <Step title="Send USDC">
    Transfer USDC to your deposit address on Base.
  </Step>

  <Step title="Receive on Solana">
    The deposit address routes funds automatically. Solvers fulfill the intent on Solana.
  </Step>
</Steps>

## Step 1: Generate a Deposit Address

Call the API to generate a deposit address for your Solana wallet.

```bash theme={null}
curl -X POST https://deposit-addresses.eco.com/api/v1/depositAddresses/solana \
  -H "Content-Type: application/json" \
  -d '{
    "chainId": 8453,
    "solanaAddress": "YOUR_SOLANA_ADDRESS",
    "depositor": "YOUR_EVM_ADDRESS"
  }'
```

**Request parameters:**

| Field           | Type   | Description                                                               |
| --------------- | ------ | ------------------------------------------------------------------------- |
| `chainId`       | number | Source chain ID. Currently only Base (`8453`) is supported                |
| `solanaAddress` | string | Your Solana wallet address (base58, 32-44 characters)                     |
| `depositor`     | string | EVM address authorized to claim refunds if the intent expires unfulfilled |

**Response (201 Created):**

```json theme={null}
{
  "data": {
    "addressID": "573c3006-0e7d-4874-add7-57afe6a98ee6",
    "depositAddressType": "SOLANA",
    "chainId": 8453,
    "evmDepositAddress": "0x...",
    "solanaAddress": "0x...",
    "depositor": "0x...",
    "factoryAddress": "0x...",
    "isDeployed": false,
    "lastCheckedBalance": "0",
    "lastBalanceCheckAt": "1970-01-01T00:00:00.000Z",
    "lastBlockNumber": "0",
    "createdAt": "2026-01-29T12:00:00.000Z",
    "updatedAt": "2026-01-29T12:00:00.000Z"
  }
}
```

The `evmDepositAddress` is your deposit address. This is where you'll send tokens. The address is deterministic: repeating the same request always returns the same address, and you can share it before the contract is deployed onchain.

The `solanaAddress` in the response is the hex encoding of the base58 address you submitted (a 32-byte public key).

## Step 2: Send Tokens

Transfer USDC to your deposit address on Base. The sender makes a normal ERC-20 transfer. No special app or bridge UI required.

```javascript theme={null}
import { createWalletClient, http, parseUnits } from 'viem';
import { base } from 'viem/chains';

const walletClient = createWalletClient({
  chain: base,
  transport: http()
});

// Transfer USDC to the deposit address
const hash = await walletClient.writeContract({
  address: USDC_ADDRESS,
  abi: erc20Abi,
  functionName: 'transfer',
  args: [
    depositAddress,      // evmDepositAddress from API response
    parseUnits('100', 6) // Amount in token decimals
  ]
});
```

## Step 3: Automatic Processing

Once tokens arrive at the deposit address, the routing logic executes automatically:

1. **Detects the deposit**: Balance monitoring detects the incoming tokens
2. **Deploys the contract**: If not already deployed, the contract is deployed via the factory
3. **Executes the action**: For cross-chain deposits, `createIntent()` is called
4. **Publishes to Portal**: The intent is published to the Routes Portal
5. **Solver fulfillment**: Solvers compete to fulfill the intent on Solana

## Step 4: Check Status

Query the deposit address to check its status.

```bash theme={null}
curl https://deposit-addresses.eco.com/api/v1/depositAddresses/evmAddress/0xYOUR_DEPOSIT_ADDRESS
```

**Response:**

```json theme={null}
{
  "data": {
    "addressID": "573c3006-0e7d-4874-add7-57afe6a98ee6",
    "depositAddressType": "SOLANA",
    "chainId": 8453,
    "evmDepositAddress": "0x...",
    "solanaAddress": "0x...",
    "depositor": "0x...",
    "factoryAddress": "0x...",
    "isDeployed": true,
    "lastCheckedBalance": "100000000",
    "deploymentTxHash": "0x...",
    "deploymentBlockNumber": "12345678"
  }
}
```

| Field                | Description                                 |
| -------------------- | ------------------------------------------- |
| `isDeployed`         | `true` once the contract is deployed        |
| `lastCheckedBalance` | Current token balance at the address        |
| `deploymentTxHash`   | Transaction hash of the contract deployment |

## Validation rules

The API validates input parameters:

* **solanaAddress**: Must be a valid base58 Solana address (32-44 characters)
* **depositor**: Must be a valid Ethereum address
* **chainId**: Must be a number >= 1

## Error handling

Validation failures return `400` with a `validationErrors` map:

```json theme={null}
{
  "statusCode": 400,
  "createdBy": "ValidationFilter",
  "validationErrors": {
    "solanaAddress": "solanaAddress must be a valid base58 Solana address"
  }
}
```

Business errors also return `400`, with an error envelope. If the factory is not configured for the specified chain:

```json theme={null}
{
  "statusCode": 400,
  "createdBy": "HttpExceptionFilter",
  "details": {
    "errorCode": 1016,
    "errorDesc": "FactoryAddressNotConfiguredForChain",
    "cause": "FactoryAddressNotConfiguredForChain"
  }
}
```

If the address is not found:

```json theme={null}
{
  "statusCode": 400,
  "createdBy": "HttpExceptionFilter",
  "details": {
    "errorCode": 1014,
    "errorDesc": "NoSuchDepositAddress",
    "cause": "NoSuchDepositAddress"
  }
}
```
