Server Path
Lesson 5 of 8
12 min

Multi-Network Servers (EVM + Solana)

Learning Objectives

  • Register multiple payment schemes (EVM + Solana)
  • Accept payments on different networks for the same endpoint
  • Understand CAIP-2 network identifiers
  • Learn when to use multi-network support

Why Multi-Network Support?

Your API can accept payments on multiple blockchain networks simultaneously. This means a user can pay with USDC on Base (EVM) OR USDC on Solana - whichever they prefer.

Benefits:

Broader user base (support both EVM and Solana users)
Network flexibility (users choose their preferred network)
Lower transaction costs (Solana often has lower fees)
Future-proof (easily add more networks later)

Network Identifiers (CAIP-2 Format)

x402 uses CAIP-2 format for network identifiers:

| Network | CAIP-2 Identifier |

|---------|-------------------|

| Base Mainnet | eip155:8453 |

| Base Sepolia (testnet) | eip155:84532 |

| Solana Mainnet | solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp |

| Solana Devnet (testnet) | solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1 |

Format: {namespace}:{reference}

Registering Multiple Schemes

Register both EVM and Solana schemes with your resource server:

typescript
import { x402ResourceServer, HTTPFacilitatorClient } from '@x402/core/server';
import { registerExactEvmScheme } from '@x402/evm/exact/server';
import { registerExactSvmScheme } from '@x402/svm/exact/server';

const facilitatorClient = new HTTPFacilitatorClient({
  url: 'https://api.cdp.coinbase.com/platform/v2/x402'
});

const server = new x402ResourceServer(facilitatorClient);

// Register BOTH schemes
registerExactEvmScheme(server);
registerExactSvmScheme(server);

Accepting Multiple Payment Options

Configure your endpoint to accept payments on both networks:

typescript
import { paymentMiddleware } from '@x402/express';

app.use(
  paymentMiddleware(
    {
      'GET /weather': {
        accepts: [
          {
            scheme: 'exact',
            price: '$0.001',
            network: 'eip155:8453',  // Base mainnet
            payTo: '0xYourEvmAddress',
          },
          {
            scheme: 'exact',
            price: '$0.001',
            network: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',  // Solana mainnet
            payTo: 'YourSolanaAddress',  // Base58 format
          },
        ],
        description: 'Weather data',
        mimeType: 'application/json',
      },
    },
    server,
  ),
);
Note: EVM addresses use 0x format, Solana addresses use base58 format. Make sure you have wallets for both networks to receive payments.

How It Works

When a client requests your endpoint:

1.Server returns 402 with both payment options
2.Client chooses their preferred network (EVM or Solana)
3.Client creates payment signature on chosen network
4.Client retries request with payment signature
5.Server verifies payment on the chosen network
6.Server returns data after successful verification
The x402 server automatically handles network detection and routes verification to the correct scheme. You don't need to write network-specific logic!

Interactive Playground

typescript
Output

Click "Run Code" to see the output