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

# Send Tokens with Solana Libraries

> Transfer SOL tokens using Solana Web3.js or Anchor with Para wallets

Transfer SOL tokens between wallets using Para's integrated signers with different Solana libraries.

<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, useParaSolanaSignAndSend } from "@getpara/react-native-wallet/solana";
    import { Address } from '@solana/addresses';
    import {
      createSolanaRpc,
      createTransactionMessage,
      setTransactionMessageFeePayer,
      setTransactionMessageLifetimeUsingBlockhash,
      appendTransactionMessageInstruction,
      lamports,
      pipe,
    } from '@solana/kit';
    import { getTransferSolInstruction } from '@solana-program/system';

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

    function SendTokens() {
      const { solanaSigner, isLoading } = useParaSolanaSigner({ rpc });
      const { signAndSendAsync, isPending } = useParaSolanaSignAndSend(solanaSigner);

      const sendSOL = async (recipient: string, amount: number) => {
        if (!solanaSigner) return;

        const response = await rpc.getLatestBlockhash().send();
        const { blockhash, lastValidBlockHeight } = response.value;

        const transferInstruction = getTransferSolInstruction({
          source: solanaSigner,
          destination: recipient as Address,
          amount: lamports(BigInt(Math.floor(amount * Number(LAMPORTS_PER_SOL)))),
        });

        const transactionMessage = pipe(
          createTransactionMessage({ version: "legacy" }),
          (tx) => setTransactionMessageFeePayer(solanaSigner.address, tx),
          (tx) => setTransactionMessageLifetimeUsingBlockhash({ blockhash, lastValidBlockHeight }, tx),
          (tx) => appendTransactionMessageInstruction(transferInstruction, tx)
        );

        const txSignature = await signAndSendAsync({ transactionMessage });
        console.log("Transaction signature:", txSignature);

        return txSignature;
      };

      return (
        <button onClick={() => sendSOL("RECIPIENT_ADDRESS", 0.1)}>
          Send 0.1 SOL
        </button>
      );
    }
    ```
  </Tab>

  <Tab title="@solana/web3.js">
    ```typescript theme={null}
    import { useParaSolana } from './hooks/useParaSolana';
    import { Transaction, SystemProgram, LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js';

    function SendTokens() {
      const { connection, signer } = useParaSolana();

      const sendSOL = async (recipient: string, amount: number) => {
        if (!signer) {
          console.error("No signer available. Connect wallet first.");
          return;
        }

        const transaction = new Transaction().add(
          SystemProgram.transfer({
            fromPubkey: signer.sender,
            toPubkey: new PublicKey(recipient),
            lamports: LAMPORTS_PER_SOL * amount,
          })
        );

        const signature = await signer.sendTransaction(transaction);
        console.log("Transaction signature:", signature);

        await connection.confirmTransaction(signature, "confirmed");
        console.log("Transaction confirmed");

        return signature;
      };

      return (
        <button onClick={() => sendSOL("RECIPIENT_ADDRESS", 0.1)}>
          Send 0.1 SOL
        </button>
      );
    }
    ```
  </Tab>

  <Tab title="Anchor">
    ```typescript theme={null}
    import { useParaAnchor } from './hooks/useParaAnchor';
    import { Transaction, SystemProgram, LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js';

    function SendTokens() {
      const provider = useParaAnchor();

      const sendSOL = async (recipient: string, amount: number) => {
        if (provider.wallet.publicKey.equals(SystemProgram.programId)) {
          console.error("No wallet connected. Please authenticate first.");
          return;
        }

        const transaction = new Transaction().add(
          SystemProgram.transfer({
            fromPubkey: provider.wallet.publicKey,
            toPubkey: new PublicKey(recipient),
            lamports: LAMPORTS_PER_SOL * amount,
          })
        );

        const signature = await provider.sendAndConfirm(transaction);
        console.log("Transaction signature:", signature);
        console.log("Transaction confirmed");

        return signature;
      };

      return (
        <button onClick={() => sendSOL("RECIPIENT_ADDRESS", 0.1)}>
          Send 0.1 SOL
        </button>
      );
    }
    ```
  </Tab>
</Tabs>

## Next Steps

<CardGroup cols={3}>
  <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="Get Transaction Status" description="Check transaction confirmations" href="/v3/react-native/guides/web3-operations/solana/get-transaction-status" icon="clock" />

  <Card title="Query Balances" description="Check wallet balances" href="/v3/react-native/guides/web3-operations/solana/query-balances" icon="wallet" />
</CardGroup>
