Send Transactions

Use three steps for reliable submission. Simulate. Send. Confirm.

1. Simulate

Simulation catches account errors and compute budget problems before broadcast.

json
{
  "jsonrpc": "2.0",
  "id": "simulate",
  "method": "simulateTransaction",
  "params": [
    "BASE64_TRANSACTION",
    {
      "encoding": "base64",
      "commitment": "confirmed",
      "replaceRecentBlockhash": true
    }
  ]
}

Check these result fields:

  • err
  • logs
  • unitsConsumed
  • replacementBlockhash

2. Send

bash
curl https://api.mainnet-beta.solana.com \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "jsonrpc":"2.0",
    "id":"send",
    "method":"sendTransaction",
    "params":[
      "BASE64_TRANSACTION",
      {
        "encoding":"base64",
        "skipPreflight":false,
        "preflightCommitment":"confirmed",
        "maxRetries":3
      }
    ]
  }'

The result is the first transaction signature from the signed message.

3. Confirm

Poll getSignatureStatuses or subscribe with signatureSubscribe.

json
{
  "jsonrpc": "2.0",
  "id": "status",
  "method": "getSignatureStatuses",
  "params": [
    ["TRANSACTION_SIGNATURE"],
    {
      "searchTransactionHistory": true
    }
  ]
}

Failure rules

  • Rebuild after the recent blockhash expires.
  • Stop on a program error.
  • Keep the same signature for network retries.
  • Record simulation logs with the failed signature.
  • Pick confirmed for user feedback and finalized for settlement records.