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.

Setup Solana Libraries First

import { useParaSolanaSigner, useParaSolanaSignAndSend } from '@getpara/react-sdk';
import { PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
import {
  createSolanaRpc,
  createTransactionMessage,
  setTransactionMessageFeePayerSigner,
  setTransactionMessageLifetimeUsingBlockhash,
  appendTransactionMessageInstructions,
  pipe,
} from '@solana/kit';
import { Buffer } from 'buffer';

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 = new PublicKey("YOUR_PROGRAM_ID");

    // Example: Initialize account with custom data
    const [pda] = PublicKey.findProgramAddressSync(
      [Buffer.from("seed"), solanaSigner.publicKey.toBuffer()],
      programId
    );

    // Create instruction data (program-specific)
    const instructionData = Buffer.alloc(9);
    instructionData.writeUInt8(0, 0); // Instruction index
    instructionData.writeBigUInt64LE(BigInt(1000), 1); // Example parameter

    const instruction = new TransactionInstruction({
      keys: [
        { pubkey: solanaSigner.publicKey, isSigner: true, isWritable: true },
        { pubkey: pda, isSigner: false, isWritable: true },
        { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
      ],
      programId,
      data: instructionData,
    });

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

    const transaction = pipe(
      createTransactionMessage({ version: 0 }),
      (tx) => setTransactionMessageFeePayerSigner(solanaSigner.publicKey, tx),
      (tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),
      (tx) => appendTransactionMessageInstructions([instruction], tx)
    );

    const result = await signAndSendAsync({ transactions: [transaction] });

    console.log("Program call signature:", result);
    console.log("Transaction confirmed");
  };

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

Next Steps

Compute Units

Execute Transactions

Get Transaction Status