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

# Execute Transactions with Solana Libraries

> Interact with Solana programs and execute complex transactions using Web3.js or Anchor

Execute transactions on the Solana blockchain using Para's integrated signers. This includes signing and broadcasting transactions to the network.

<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 SendTransaction() {
      const { solanaSigner, isLoading } = useParaSolanaSigner({ rpc });
      const { signAndSendAsync, isPending } = useParaSolanaSignAndSend(solanaSigner);

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

        const recipient = "RECIPIENT_ADDRESS_HERE" as Address;
        const response = await rpc.getLatestBlockhash().send();
        const { blockhash, lastValidBlockHeight } = response.value;

        const transferInstruction = getTransferSolInstruction({
          source: solanaSigner,
          destination: recipient,
          amount: lamports(LAMPORTS_PER_SOL / 10n),
        });

        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 <button onClick={sendSOL}>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 SendTransaction() {
      const { connection, signer } = useParaSolana();

      const sendSOL = async () => {
        if (!signer) {
          console.error("No signer available. Connect wallet first.");
          return;
        }

        const recipient = new PublicKey("RECIPIENT_ADDRESS_HERE");

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

        try {
          const signature = await signer.sendTransaction(transaction, {
            skipPreflight: false,
            preflightCommitment: "confirmed",
          });

          console.log("Transaction signature:", signature);

          const confirmation = await connection.confirmTransaction(signature, "confirmed");
          console.log("Transaction confirmed:", confirmation);
        } catch (error) {
          console.error("Transaction failed:", error);
        }
      };

      return <button onClick={sendSOL}>Send 0.1 SOL</button>;
    }
    ```
  </Tab>

  <Tab title="Anchor">
    ```typescript theme={null}
    import { useParaAnchor } from './hooks/useParaAnchor';
    import * as anchor from '@coral-xyz/anchor';
    import { SystemProgram, LAMPORTS_PER_SOL } from '@solana/web3.js';

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

      const executeProgram = async () => {
        if (provider.wallet.publicKey.equals(SystemProgram.programId)) {
          console.error("No wallet connected. Please authenticate first.");
          return;
        }

        anchor.setProvider(provider);
        const program = new anchor.Program(idl, provider);

        try {
          const tx = await program.methods
            .initialize()
            .accounts({
              user: provider.publicKey,
              systemProgram: SystemProgram.programId,
            })
            .rpc();

          console.log("Transaction signature:", tx);

          const confirmation = await provider.connection.confirmTransaction(tx, "confirmed");
          console.log("Transaction confirmed:", confirmation);
        } catch (error) {
          console.error("Transaction failed:", error);
        }
      };

      return <button onClick={executeProgram}>Execute Program</button>;
    }
    ```
  </Tab>
</Tabs>

## Next Steps

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

  <Card title="Send Tokens" description="Transfer SPL tokens between accounts" href="/v3/react-native/guides/web3-operations/solana/send-tokens" icon="coins" />

  <Card title="Compute Units" description="Set compute units and priority fees" href="/v3/react-native/guides/web3-operations/solana/compute-units" icon="calculator" />
</CardGroup>
