Skip to main content
Add priority fees to your transactions to ensure faster confirmation during network congestion. Phantom automatically applies priority fees, but you can also set them manually.
import { useSolana } from "@phantom/react-sdk";
import {
  Connection,
  PublicKey,
  VersionedTransaction,
  TransactionMessage,
  SystemProgram,
  LAMPORTS_PER_SOL,
  ComputeBudgetProgram,
} from "@solana/web3.js";

function SendWithPriorityFees() {
  const { solana } = useSolana();

  const sendWithPriorityFees = async (
    to: string,
    amount: number,
    priorityFee: number = 1000 // micro-lamports per compute unit
  ) => {
    const connection = new Connection("https://api.mainnet-beta.solana.com");
    const { blockhash } = await connection.getLatestBlockhash();
    const from = new PublicKey(await solana.getPublicKey());
    const recipient = new PublicKey(to);

    // Create transfer instruction
    const transferInstruction = SystemProgram.transfer({
      fromPubkey: from,
      toPubkey: recipient,
      lamports: amount * LAMPORTS_PER_SOL,
    });

    // Add priority fee instructions
    const instructions = [
      // Set compute unit limit (optional, defaults to 200,000)
      ComputeBudgetProgram.setComputeUnitLimit({ units: 200_000 }),
      // Set compute unit price (priority fee)
      ComputeBudgetProgram.setComputeUnitPrice({ microLamports: priorityFee }),
      transferInstruction,
    ];

    const transaction = new VersionedTransaction(
      new TransactionMessage({
        payerKey: from,
        recentBlockhash: blockhash,
        instructions,
      }).compileToV0Message()
    );

    const { signature } = await solana.signAndSendTransaction(transaction);
    return signature;
  };

  return (
    <button onClick={() => sendWithPriorityFees("RECIPIENT_ADDRESS", 0.1, 5000)}>
      Send with Priority Fee
    </button>
  );
}

Priority fee recommendations

Priority fees are measured in micro-lamports per compute unit. Common values:
  • Low priority: 1,000 - 5,000 micro-lamports (for non-urgent transactions)
  • Medium priority: 5,000 - 25,000 micro-lamports (standard transactions)
  • High priority: 25,000+ micro-lamports (urgent transactions during congestion)
Automatic priority fees: If you don’t add priority fee instructions, Phantom will automatically calculate and apply appropriate priority fees to your transaction, provided it meets certain requirements.

Dynamic priority fee calculation

Calculate priority fees based on recent network activity:
import { Connection } from "@solana/web3.js";

async function getRecommendedPriorityFee(connection: Connection): Promise<number> {
  // Get recent priority fee samples
  const feeSample = await connection.getRecentPrioritizationFees();

  if (feeSample.length === 0) {
    return 1000; // Default fallback
  }

  // Calculate median priority fee
  const fees = feeSample.map((sample) => sample.prioritizationFee);
  fees.sort((a, b) => a - b);
  const median = fees[Math.floor(fees.length / 2)];

  // Add 20% buffer for safety
  return Math.ceil(median * 1.2);
}