Skip to main content

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.

Interact with Solana programs by calling instructions and working with Anchor IDLs. This guide covers manual instruction creation and Anchor’s type-safe program interaction.
import { useParaSolanaSigner, useParaSolanaSignAndSend } from "@getpara/react-native-wallet/solana";
import { Address } from '@solana/addresses';
import {
  createSolanaRpc,
  createTransactionMessage,
  setTransactionMessageFeePayer,
  setTransactionMessageLifetimeUsingBlockhash,
  appendTransactionMessageInstruction,
  pipe,
} from '@solana/kit';
import { getTransferSolInstruction } from '@solana-program/system';

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

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

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

    const programId = "YOUR_PROGRAM_ID" as Address;

    // Create instruction data (program-specific)
    const instructionData = new Uint8Array(9);
    instructionData[0] = 0; // Instruction index
    const view = new DataView(instructionData.buffer);
    view.setBigUint64(1, BigInt(1000), true); // Example parameter

    const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();

    const transactionMessage = pipe(
      createTransactionMessage({ version: 0 }),
      (tx) => setTransactionMessageFeePayer(solanaSigner.address, tx),
      (tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),
      (tx) => appendTransactionMessageInstruction(
        {
          programAddress: programId,
          accounts: [
            { address: solanaSigner.address, role: 3 /* WritableSigner */ },
          ],
          data: instructionData,
        },
        tx
      )
    );

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

  return <button onClick={callProgram}>Call Program</button>;
}

Next Steps