Home/Docs/Tips & Best Practices

Tips & Best Practices

Learn how to optimize your transaction success rate and performance with these essential tips.

Implement Retry Logic

While Payload handles retries automatically, implementing client-side retry logic with exponential backoff can further improve reliability:

const connection = new Connection('https://api.payload.wtf/sendTransaction');

// Configure retry settings
const retrySettings = {
  maxRetries: 3,
  initialDelay: 500, // ms
  backoffFactor: 1.5
};

// Function to send transaction with retries
async function sendTransactionWithRetry(transaction: Transaction) {
  let attempt = 0;
  let delay = retrySettings.initialDelay;

  while (attempt < retrySettings.maxRetries) {
    try {
      const signature = await connection.sendTransaction(transaction);
      return signature;
    } catch (error) {
      attempt++;
      if (attempt === retrySettings.maxRetries) throw error;
      
      await new Promise(resolve => setTimeout(resolve, delay));
      delay *= retrySettings.backoffFactor;
    }
  }
}

Skip Preflight Checks

For time-sensitive transactions, you can skip preflight checks to reduce latency. Use this option carefully as it bypasses local simulation:

const connection = new Connection('https://api.payload.wtf/sendTransaction');

// Send transaction with preflight checks disabled
const signature = await connection.sendTransaction(transaction, {
  skipPreflight: true // Skip local simulation
});

Batch Transactions

When sending multiple transactions, consider batching them in parallel to improve throughput:

const connection = new Connection('https://api.payload.wtf/sendTransaction');

// Create multiple transactions
const transactions = [tx1, tx2, tx3];

// Send transactions in parallel
const signatures = await Promise.all(
  transactions.map(tx => connection.sendTransaction(tx))
);

Additional Tips

  • Monitor transaction status using webhooks instead of polling
  • Keep transaction size small by minimizing instruction count
  • Use compute budget instructions to adjust priority fees dynamically
  • Consider using versioned transactions for better compatibility