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 { useParaSolana } from './hooks/useParaSolana';
import { Transaction, TransactionInstruction, PublicKey, SystemProgram } from '@solana/web3.js';
import { Buffer } from 'buffer';

function InteractWithProgram() {
  const { connection, signer } = useParaSolana();
  
  const callProgram = async () => {
    const programId = new PublicKey("YOUR_PROGRAM_ID");
    
    // Example: Initialize account with custom data
    const [pda] = PublicKey.findProgramAddressSync(
      [Buffer.from("seed"), signer.sender.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: signer.sender, isSigner: true, isWritable: true },
        { pubkey: pda, isSigner: false, isWritable: true },
        { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
      ],
      programId,
      data: instructionData,
    });
    
    const transaction = new Transaction().add(instruction);
    
    try {
      const signature = await signer.sendTransaction(transaction);
      console.log("Program call signature:", signature);
      
      const confirmation = await connection.confirmTransaction(signature, "confirmed");
      console.log("Transaction confirmed:", confirmation);
    } catch (error) {
      console.error("Program call failed:", error);
    }
  };
  
  return <button onClick={callProgram}>Call Program</button>;
}

Next Steps