Monitor transaction confirmation status and wait for finality on Solana. This guide covers checking transaction results and understanding commitment levels.

Setup Solana Libraries First

import { useParaSolana } from './hooks/useParaSolana';
import { TransactionSignature, Commitment } from '@solana/web3.js';

function TransactionStatus() {
  const { connection } = useParaSolana();
  
  const checkTransactionStatus = async (signature: string) => {
    try {
      // Get signature status
      const status = await connection.getSignatureStatus(signature);
      
      if (status.value === null) {
        console.log("Transaction not found");
        return null;
      }
      
      console.log("Confirmations:", status.value.confirmations || "Max (32+)");
      console.log("Confirmation status:", status.value.confirmationStatus);
      console.log("Slot:", status.value.slot);
      
      if (status.value.err) {
        console.error("Transaction failed:", status.value.err);
        return false;
      }
      
      return status.value.confirmationStatus;
    } catch (error) {
      console.error("Error checking status:", error);
      throw error;
    }
  };
  
  const waitForConfirmation = async (
    signature: string, 
    commitment: Commitment = 'confirmed'
  ) => {
    try {
      const startTime = Date.now();
      
      // Wait for confirmation with timeout
      const confirmation = await connection.confirmTransaction(
        signature,
        commitment
      );
      
      const elapsed = Date.now() - startTime;
      console.log(`Transaction confirmed in ${elapsed}ms`);
      
      if (confirmation.value.err) {
        throw new Error(`Transaction failed: ${confirmation.value.err}`);
      }
      
      // Get detailed transaction info
      const txInfo = await connection.getTransaction(signature, {
        commitment,
        maxSupportedTransactionVersion: 0,
      });
      
      if (txInfo) {
        console.log("Block time:", new Date(txInfo.blockTime! * 1000));
        console.log("Fee:", txInfo.meta?.fee, "lamports");
        console.log("Compute units consumed:", txInfo.meta?.computeUnitsConsumed);
      }
      
      return txInfo;
    } catch (error) {
      console.error("Confirmation error:", error);
      throw error;
    }
  };
  
  return (
    <div>
      <button onClick={() => checkTransactionStatus("YOUR_SIGNATURE")}>
        Check Status
      </button>
      <button onClick={() => waitForConfirmation("YOUR_SIGNATURE", "finalized")}>
        Wait for Finalization
      </button>
    </div>
  );
}

Next Steps