> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dynamic.xyz/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Send a Versioned Solana Transaction

<Card title="Recommended: JavaScript SDK with React Hooks" icon="react" color="#4779FE">
  For new React apps, we recommend the JavaScript SDK with React Hooks (`@dynamic-labs-sdk/react-hooks`) instead of the legacy React SDK documented here. The JS SDK comes with many benefits such as a much smaller bundle size and other optimizations. Use the [React quickstart (JavaScript SDK)](/javascript/reference/react-quickstart) to get started.
</Card>

```tsx React theme={"system"}
    import { isSolanaWallet } from '@dynamic-labs/solana';
    import { useDynamicContext } from '@dynamic-labs/sdk-react-core';
    import { Connection, PublicKey, SystemProgram, TransactionMessage, VersionedTransaction, VersionedTransactionResponse } from "@solana/web3.js";

    const { primaryWallet } = useDynamicContext();

    if(!primaryWallet || !isSolanaWallet(primaryWallet)) {
      return;
    }

    const connection: Connection = await primaryWallet.getConnection();

    const fromKey = new PublicKey(primaryWallet.address);
    const toKey = new PublicKey(address);
    const amountInLamports = Number(amount) * 1000000000;

    const instructions = [
      SystemProgram.transfer({
        fromPubkey: fromKey,
        lamports: amountInLamports,
        toPubkey: toKey,
      }),
    ];

    const blockhash = await connection.getLatestBlockhash();

    // create v0 compatible message
    const messageV0 = new TransactionMessage({
      instructions,
      payerKey: fromKey,
      recentBlockhash: blockhash.blockhash,
    }).compileToV0Message();

    const transferTransaction = new VersionedTransaction(messageV0);

    const signer = await primaryWallet.getSigner();

    await signer
      .signAndSendTransaction(transferTransaction)
      .then((res: any) => {
        console.log(
          `Transaction successful: https://solscan.io/tx/${res.signature}?cluster=devnet`,
        );
      })
      .catch((reason: any) => {
        console.error(reason);
      });
```

## Simulate a Transaction

Before sending a transaction, you can simulate it to preview the effects and validate that it will succeed. Transaction simulation shows all asset transfers involved in the transaction.

<Note>
  Transaction simulation uses the currently selected primary wallet. Make sure the user has a wallet connected before attempting to simulate a transaction.
</Note>
