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

# Query Wallet Balances with Solana Libraries

> Check SOL and SPL token balances using Solana Web3.js or Anchor with Para wallets

Query SOL and SPL token balances for Para wallets using Solana libraries. This guide covers checking native SOL balances and SPL token balances.

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

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

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

    function WalletBalance() {
      const { solanaSigner, isLoading } = useParaSolanaSigner({ rpc });
      const [solBalance, setSolBalance] = useState(0);
      const [tokenBalance, setTokenBalance] = useState(0);

      const fetchBalances = async () => {
        if (!solanaSigner) return;

        try {
          // Get SOL balance
          const { value } = await rpc.getBalance(solanaSigner.address).send();
          setSolBalance(Number(value) / 1e9);

          // Get SPL token balance
          const usdcMint = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
          const tokenAccount = await getAssociatedTokenAddress(
            usdcMint,
            solanaSigner.address
          );

          const { value: accountData } = await rpc.getAccountInfo(tokenAccount).send();
          if (accountData && accountData.data) {
            const parsed = JSON.parse(accountData.data);
            setTokenBalance(Number(parsed.parsed.info.tokenAmount.amount) / 1e6);
          } else {
            setTokenBalance(0);
          }
        } catch (error) {
          console.error("Error fetching balances:", error);
        }
      };

      return (
        <div>
          <button onClick={fetchBalances}>Refresh Balances</button>
          <p>SOL Balance: {solBalance}</p>
          <p>USDC Balance: {tokenBalance}</p>
        </div>
      );
    }
    ```
  </Tab>

  <Tab title="@solana/web3.js">
    ```typescript theme={null}
    import { useParaSolana } from './hooks/useParaSolana';
    import { LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js';
    import { TOKEN_PROGRAM_ID, getAccount, getAssociatedTokenAddress } from '@solana/spl-token';

    function WalletBalance() {
      const { connection, signer } = useParaSolana();
      const [solBalance, setSolBalance] = useState(0);
      const [tokenBalance, setTokenBalance] = useState(0);

      const fetchBalances = async () => {
        try {
          // Get SOL balance
          const balance = await connection.getBalance(signer.sender);
          setSolBalance(balance / LAMPORTS_PER_SOL);

          // Get SPL token balance (example: USDC)
          const usdcMint = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
          const tokenAccount = await getAssociatedTokenAddress(
            usdcMint,
            signer.sender
          );

          try {
            const accountInfo = await getAccount(connection, tokenAccount);
            setTokenBalance(Number(accountInfo.amount) / 1e6); // USDC has 6 decimals
          } catch (error) {
            console.log("Token account not found");
            setTokenBalance(0);
          }
        } catch (error) {
          console.error("Error fetching balances:", error);
        }
      };

      return (
        <div>
          <button onClick={fetchBalances}>Refresh Balances</button>
          <p>SOL Balance: {solBalance}</p>
          <p>USDC Balance: {tokenBalance}</p>
        </div>
      );
    }
    ```
  </Tab>

  <Tab title="Anchor">
    Query balances using the RPC client directly:

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

    const rpc = createSolanaRpc("https://api.devnet.solana.com");

    function QueryBalances() {
      const { solanaSigner, isLoading } = useParaSolanaSigner({ rpc });

      const getBalance = async () => {
        if (!solanaSigner) return;

        const { value: balance } = await rpc.getBalance(solanaSigner.address as any).send();
        console.log("SOL Balance:", Number(balance) / 1e9);

        // Query token accounts
        const { value: tokenAccounts } = await rpc.getTokenAccountsByOwner(
          solanaSigner.address as any,
          { programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" as any },
          { encoding: "jsonParsed" },
        ).send();

        for (const account of tokenAccounts) {
          const parsed = account.account.data.parsed.info;
          console.log(`Token: ${parsed.mint}, Balance: ${parsed.tokenAmount.uiAmountString}`);
        }
      };

      if (isLoading) return <p>Loading...</p>;
      return <button onClick={getBalance}>Query Balances</button>;
    }
    ```
  </Tab>
</Tabs>

## Next Steps

<CardGroup cols={3}>
  <Card title="Send Tokens" description="Transfer SOL and SPL tokens" href="/v3/react/guides/web3-operations/solana/send-tokens" icon="paper-plane" />

  <Card title="Manage Token Accounts" description="Create and manage SPL token accounts" href="/v3/react/guides/web3-operations/solana/manage-token-accounts" icon="folder" />

  <Card title="Execute Transactions" description="Build complex transactions" href="/v3/react/guides/web3-operations/solana/execute-transactions" icon="bolt" />
</CardGroup>
