Files
sol-trade-sdk/docs/NONCE_CACHE.md
T
ysq 006686e8a3 feat: major gas fee strategy and documentation overhaul
- feat(gas): add comprehensive gas fee strategy management system
  * Implement GasFeeStrategyType with Default/LowTipHighCuPrice/HighTipLowCuPrice strategies
  * Add dynamic gas fee configuration per SWQOS service and trade type
  * Integrate arc-swap for thread-safe strategy updates

- docs: restructure documentation with dedicated guides
  * Add ADDRESS_LOOKUP_TABLE.md/CN.md for lookup table configuration
  * Add NONCE_CACHE.md/CN.md for nonce management documentation
  * Add TRADING_PARAMETERS.md/CN.md for comprehensive parameter guides
  * Simplify main README.md with focused overview

- refactor: update all examples with new gas fee strategy integration
  * Modernize 14 trading examples with consistent parameter handling
  * Improve error handling and configuration management
  * Enhance parallel trading implementation
2025-09-19 00:49:45 +08:00

2.7 KiB

Nonce Cache Guide

This guide explains how to use Nonce Cache in Sol Trade SDK to implement transaction replay protection and optimize transaction processing.

📋 What is Nonce Cache?

Nonce Cache is a global singleton cache system for managing durable nonce accounts in the Solana network. Durable nonce is a Solana feature that allows you to create transactions that remain valid for extended periods, not limited by the 150-block constraint of recent block hashes.

🚀 Core Benefits

  • Transaction Replay Protection: Prevents the same transaction from being executed multiple times
  • Extended Time Window: Transactions can remain valid for longer periods
  • Network Performance Optimization: Reduces dependency on recent block hashes
  • Transaction Determinism: Provides consistent transaction processing experience
  • Offline Transaction Support: Supports offline processing of pre-signed transactions

🛠️ Implementation

Prerequisites:

You need to create a nonce account for your payer account first. Reference: https://solana.com/developers/guides/advanced/introduction-to-durable-nonces

1. Initialize Nonce Cache

First, set up the nonce account and initialize the cache:

use sol_trade_sdk::common::nonce_cache::NonceCache;

// Set nonce account
let nonce_account_str = "your_nonce_account_address_here";
NonceCache::get_instance().init(Some(nonce_account_str.to_string()));

2. Fetch Nonce Information

Get the latest nonce information from RPC:

// Fetch and update nonce information
NonceCache::get_instance().fetch_nonce_info_use_rpc(&client.rpc).await?;

// Get current nonce value
let nonce_info = NonceCache::get_instance().get_nonce_info();
let current_nonce = nonce_info.current_nonce;
println!("Current nonce: {}", current_nonce);

3. Use Nonce in Transactions

Pass the nonce as the recent_blockhash parameter to transactions:

let buy_params = sol_trade_sdk::TradeBuyParams {
    dex_type: DexType::PumpFun,
    mint: mint_pubkey,
    sol_amount: buy_sol_amount,
    slippage_basis_points: Some(100),
    recent_blockhash: current_nonce, // Use nonce as blockhash
    extension_params: Box::new(PumpFunParams::from_trade(&trade_info, None)),
    lookup_table_key: None,
    wait_transaction_confirmed: true,
    create_wsol_ata: false,
    close_wsol_ata: false,
    create_mint_ata: true,
    open_seed_optimize: false,
};

// Execute transaction
client.buy(buy_params).await?;

🔄 Nonce Lifecycle

  1. Initialize: Set nonce account address
  2. Fetch: Get the latest nonce value from RPC
  3. Use: Use as blockhash in transactions
  4. Refresh: Re-fetch new nonce value before next use