> ## 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="Configure Solana libraries with Para SDK before using these operations" href="/v3/react-native/guides/web3-operations/solana/setup-libraries" horizontal />

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

    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 { value: accountData } = await rpc.getAccountInfo(usdcMint).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">
    ```typescript theme={null}
    import { useParaAnchor } from './hooks/useParaAnchor';
    import { LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js';
    import { TOKEN_PROGRAM_ID, getAccount, getAssociatedTokenAddress } from '@solana/spl-token';

    function WalletBalance() {
      const provider = useParaAnchor();
      const [solBalance, setSolBalance] = useState(0);
      const [tokenBalance, setTokenBalance] = useState(0);

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

          // Get SPL token balance
          const usdcMint = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
          const tokenAccount = await getAssociatedTokenAddress(
            usdcMint,
            provider.publicKey
          );

          try {
            const accountInfo = await getAccount(provider.connection, tokenAccount);
            setTokenBalance(Number(accountInfo.amount) / 1e6);
          } 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>
</Tabs>

## Next Steps

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

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

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