Optimize your Solana transactions by setting compute unit limits and priority fees. This helps ensure transactions succeed during network congestion and controls execution costs.

Setup Solana Libraries First

import { useParaSolana } from './hooks/useParaSolana';
import { 
  Transaction, 
  SystemProgram, 
  LAMPORTS_PER_SOL, 
  PublicKey,
  ComputeBudgetProgram 
} from '@solana/web3.js';

function ComputeUnitsExample() {
  const { connection, signer } = useParaSolana();
  
  const sendWithPriorityFee = async () => {
    const recipient = new PublicKey("RECIPIENT_ADDRESS");
    
    // Get recent prioritization fees
    const recentFees = await connection.getRecentPrioritizationFees();
    const avgFee = recentFees.reduce((sum, fee) => sum + fee.prioritizationFee, 0) / recentFees.length;
    const priorityFee = Math.ceil(avgFee * 1.2); // 20% above average
    
    const transaction = new Transaction()
      .add(
        // Set compute unit limit
        ComputeBudgetProgram.setComputeUnitLimit({
          units: 200000, // Adjust based on your transaction needs
        })
      )
      .add(
        // Set priority fee
        ComputeBudgetProgram.setComputeUnitPrice({
          microLamports: priorityFee,
        })
      )
      .add(
        // Your actual transaction instruction
        SystemProgram.transfer({
          fromPubkey: signer.sender,
          toPubkey: recipient,
          lamports: LAMPORTS_PER_SOL * 0.1,
        })
      );
    
    try {
      const signature = await signer.sendTransaction(transaction, {
        skipPreflight: false,
        maxRetries: 3,
      });
      
      console.log("Transaction sent with priority fee:", signature);
      console.log("Priority fee used:", priorityFee, "microLamports");
      
      const confirmation = await connection.confirmTransaction(signature, "confirmed");
      console.log("Transaction confirmed:", confirmation);
    } catch (error) {
      console.error("Transaction failed:", error);
    }
  };
  
  return <button onClick={sendWithPriorityFee}>Send with Priority Fee</button>;
}

Next Steps