Check transaction confirmation status and finality on Solana
Monitor transaction confirmation status and wait for finality on Solana. This guide covers checking transaction results and understanding commitment levels.
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>
);
}