Hook
useTransactionSimulation
Simulates Solana transactions before requesting a wallet signature.
Installation
terminal
$npx shadcn@latest add https://uxdotsol.xyz/r/use-transaction-simulation.jsonUsage
use-transaction-simulation.tsx
"use client"; import type { Connection, Transaction, VersionedTransaction,} from "@solana/web3.js";import { useTransactionSimulation } from "@/hooks/use-transaction-simulation"; type TransferReviewProps = { connection: Connection; transaction: Transaction | VersionedTransaction; onContinue: () => void;}; export function TransferReview({ connection, transaction, onContinue,}: TransferReviewProps) { const simulation = useTransactionSimulation({ client: connection, transaction }); return ( <section> <h2>Review transfer</h2> <button onClick={() => simulation.simulate()} disabled={!simulation.canSimulate || simulation.isSimulating} > {simulation.isSimulating ? "Checking transfer..." : "Check before signing"} </button> {simulation.status === "success" ? ( <p>Ready to sign. Estimated compute: {simulation.unitsConsumed ?? "unknown"} units.</p> ) : null} {simulation.hasError ? ( <p role="alert">This transfer would fail. Review the amount and recipient.</p> ) : null} <button disabled={simulation.status !== "success"} onClick={onContinue}> Continue to wallet </button> </section> );}Options
| Name | Type | Default | Description |
|---|---|---|---|
| client | Connection | KitRpcLike | undefined | web3.js connection or kit-style RPC client. |
| transaction | Transaction | VersionedTransaction | string | Uint8Array | undefined | Transaction object or base64/byte payload to simulate. |
| commitment | Commitment | 'processed' | Commitment used for simulation requests. |
| replaceRecentBlockhash | boolean | true | Asks RPC to simulate with a fresh blockhash when supported. |
| sigVerify | boolean | false | Verifies signatures during versioned transaction simulation. |
Functions
| Name | Type | Default | Description |
|---|---|---|---|
| simulate | (override?: Partial<TransactionSimulationOptions>) => Promise<TransactionSimulationResult | null> | - | Runs simulation with hook options plus optional per-call overrides. |
| reset | () => void | - | Clears simulation state back to idle. |
Types
| Name | Type | Default | Description |
|---|---|---|---|
| TransactionSimulationStatus | 'idle' | 'simulating' | 'success' | 'failed' | - | Finite states exposed by the hook. |
| SimulationClient | Connection | KitRpcLike | - | Supported RPC client shapes. |
Returns
| Name | Type | Default | Description |
|---|---|---|---|
| status | TransactionSimulationStatus | 'idle' | Current simulation state. |
| value | SimulatedTransactionResponse | unknown | null | null | Raw RPC simulation response. |
| logs / unitsConsumed | string[] / number | null | [] / null | Parsed logs and compute units when RPC returns them. |
| canSimulate / isSimulating / hasError | boolean | false | Convenience flags for UI state. |