> ## 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

```ts React Native theme={"system"}
    import { dynamicClient } from '<path to client file>'
    import {
      LAMPORTS_PER_SOL,
      PublicKey,
      SystemProgram,
      TransactionMessage,
      VersionedTransaction,
    } from '@solana/web3.js'

    const wallet = dynamicClient.wallets.primary
    if (!wallet) {
      // user is not connected yet
    } else {
      const connection = dynamicClient.solana.getConnection()
      const signer = dynamicClient.solana.getSigner({ wallet })

      const { blockhash } = await connection.getLatestBlockhash()
      const amountInLamports = 1 * LAMPORTS_PER_SOL
      const fromKey = new PublicKey(wallet.address)
      const toKey = new PublicKey('<destinationAddress>')

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

      const messageV0 = new TransactionMessage({
        instructions,
        payerKey: fromKey,
        recentBlockhash: blockhash,
      }).compileToV0Message()

      const transaction = new VersionedTransaction(messageV0)
      const { signature } = await signer.signAndSendTransaction(transaction)

      console.log('Successful transaction signature:', signature)
    }
```

## 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>

```ts React Native theme={"system"}
    import { dynamicClient } from '<path to client file>'
    import {
      LAMPORTS_PER_SOL,
      PublicKey,
      SystemProgram,
      TransactionMessage,
      VersionedTransaction,
    } from '@solana/web3.js'

    const simulateSolanaVersionedTransaction = async (to: string, amountSol: number) => {
      const connection = dynamicClient.solana.getConnection()

      const { blockhash } = await connection.getLatestBlockhash()
      const amountInLamports = Math.round(amountSol * LAMPORTS_PER_SOL)
      const fromKey = new PublicKey(dynamicClient.wallets.primary.address)
      const toKey = new PublicKey(to)

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

      const messageV0 = new TransactionMessage({
        instructions,
        payerKey: fromKey,
        recentBlockhash: blockhash,
      }).compileToV0Message()

      const transaction = new VersionedTransaction(messageV0)

      const simulationResult = await dynamicClient.solana.simulateSVMTransaction({
        transaction,
        type: 'SignTransaction',
      })

      console.log('Simulation result:', simulationResult)
      return simulationResult
    }
```
