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

# Configure RPC Endpoints with Solana Libraries

> Set up and configure Solana RPC endpoints and connections using Web3.js or Anchor

export const Card = ({imgUrl, title, description, href, horizontal = false, newTab = false}) => {
  const [isHovered, setIsHovered] = useState(false);
  const handleClick = e => {
    e.preventDefault();
    if (newTab) {
      window.open(href, '_blank', 'noopener,noreferrer');
    } else {
      window.location.href = href;
    }
  };
  return <div className={`not-prose relative my-2 p-[1px] rounded-xl transition-all duration-300 ${isHovered ? 'bg-gradient-to-r from-[#FF4E00] to-[#874AE3]' : 'bg-gray-200'}`} onMouseEnter={() => setIsHovered(true)} onMouseLeave={() => setIsHovered(false)}>
      <a href={href} onClick={handleClick} className={`not-prose flex ${horizontal ? 'flex-row' : 'flex-col'} font-normal h-full bg-white overflow-hidden w-full cursor-pointer rounded-[11px] no-underline`}>
        {imgUrl && <div className={`relative overflow-hidden flex-shrink-0 ${horizontal ? 'w-[30%] rounded-l-[11px]' : 'w-full'}`} onClick={e => e.stopPropagation()}>
            <img src={imgUrl} alt={title} className="w-full h-full object-cover pointer-events-none select-none" draggable="false" />
            <div className="absolute inset-0 pointer-events-none" />
          </div>}
        <div className={`flex-grow px-6 py-5 ${horizontal ? 'w-[70%]' : 'w-full'} flex flex-col ${horizontal && imgUrl ? 'justify-center' : 'justify-start'}`}>
          {title && <h2 className="font-semibold text-base text-gray-800 m-0">{title}</h2>}
          {description && <div className={`font-normal text-gray-500 re leading-6 ${horizontal || !imgUrl ? 'mt-0' : 'mt-1'}`}>
              <p className="m-0 text-xs">{description}</p>
            </div>}
        </div>
      </a>
    </div>;
};

Configure custom RPC endpoints for Solana to optimize performance, use private nodes, or connect to different networks. This guide covers RPC setup for all supported libraries.

<Card title="Setup Solana Libraries First" description="You must complete the Solana library setup before configuring RPC endpoints" href="/v2/react/guides/web3-operations/solana/setup-libraries" horizontal />

<Tabs>
  <Tab title="@solana/kit">
    ```typescript theme={null}
    import { useParaSolanaSigner } from '@getpara/react-sdk';
    import { createSolanaRpc } from '@solana/kit';

    const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");

    function ConfigureRPC() {
      // Use different RPC endpoints by creating different rpc instances
      const mainnetRpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
      const devnetRpc = createSolanaRpc('https://api.devnet.solana.com');
      const customRpc = createSolanaRpc('https://your-custom-rpc-endpoint.com');

      // Pass any rpc instance to the hook
      const { solanaSigner, isLoading } = useParaSolanaSigner({ rpc: mainnetRpc });

      const checkHealth = async () => {
        const health = await mainnetRpc.getHealth().send();
        const version = await mainnetRpc.getVersion().send();
        return { health, version };
      };

      return { solanaSigner, checkHealth };
    }
    ```
  </Tab>

  <Tab title="@solana/web3.js">
    ```typescript theme={null}
    import { ParaSolanaWeb3Signer } from '@getpara/solana-web3.js-v1-integration';
    import { Connection, clusterApiUrl, Commitment } from '@solana/web3.js';
    import { para } from './para';

    function useCustomRPC() {
      // Using Solana public RPC endpoints
      const mainnetConnection = new Connection(
        clusterApiUrl('mainnet-beta'),
        'confirmed'
      );

      const devnetConnection = new Connection(
        clusterApiUrl('devnet'),
        'confirmed'
      );

      // Using custom RPC endpoint (e.g., QuickNode, Alchemy, Helius)
      const customConnection = new Connection(
        'https://your-custom-rpc-endpoint.com',
        {
          commitment: 'confirmed',
          wsEndpoint: 'wss://your-custom-websocket-endpoint.com',
          httpHeaders: {
            'Authorization': 'Bearer YOUR_API_KEY',
          },
          disableRetryOnRateLimit: false,
          confirmTransactionInitialTimeout: 30000,
        }
      );

      // Create signers with different connections
      const mainnetSigner = new ParaSolanaWeb3Signer(para, mainnetConnection);
      const devnetSigner = new ParaSolanaWeb3Signer(para, devnetConnection);
      const customSigner = new ParaSolanaWeb3Signer(para, customConnection);

      // Example: Get network performance metrics
      const checkPerformance = async () => {
        const start = Date.now();
        const slot = await customConnection.getSlot();
        const latency = Date.now() - start;

        console.log('Current slot:', slot);
        console.log('RPC latency:', latency, 'ms');

        const perfSamples = await customConnection.getRecentPerformanceSamples(5);
        console.log('Recent performance:', perfSamples);
      };

      return { mainnetSigner, devnetSigner, customSigner, checkPerformance };
    }
    ```
  </Tab>

  <Tab title="Anchor">
    RPC configuration works the same as @solana/kit — pass different RPC URLs when creating the rpc client:

    ```typescript theme={null}
    import { useParaSolanaSigner } from "@getpara/react-sdk";
    import { createSolanaRpc } from "@solana/kit";

    const mainnetRpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
    const devnetRpc = createSolanaRpc("https://api.devnet.solana.com");
    const customRpc = createSolanaRpc("https://your-custom-rpc-endpoint.com");

    function ConfigureRPC() {
      // Pass the desired RPC to the hook
      const { solanaSigner, isLoading } = useParaSolanaSigner({ rpc: mainnetRpc });

      if (isLoading) return <p>Loading...</p>;
      return <p>Connected to: {solanaSigner?.address}</p>;
    }
    ```
  </Tab>
</Tabs>

## Next Steps

<CardGroup cols={3}>
  <Card title="Execute Transactions" description="Send transactions with configured RPC" href="/v2/react/guides/web3-operations/solana/execute-transactions" icon="bolt" />

  <Card title="Get Transaction Status" description="Check confirmations via RPC" href="/v2/react/guides/web3-operations/solana/get-transaction-status" icon="clock" />

  <Card title="Query Balances" description="Fetch account data from RPC" href="/v2/react/guides/web3-operations/solana/query-balances" icon="wallet" />
</CardGroup>
