refactor: Refactor SDK core architecture and trading parameter system
- Refactor SolanaTrade main class structure with improved modular design - Refactor trading parameter system: BuyParams/SellParams -> InternalBuyParams/InternalSellParams - Remove deprecated PriorityFee and related utility functions - Add SwqosSettings to replace legacy SwqosConfig - Add comprehensive technical documentation: • Address Lookup Table usage guide (EN/CN) • Nonce Cache mechanism documentation (EN/CN) • Trading Parameters documentation (EN/CN) - Refactor all example code to adapt to new API interfaces - Optimize public API design and code comments - Clean up redundant utility functions and type definitions Impact: 43 files changed, 2013 insertions(+), 1735 deletions(-)
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
# 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:
|
||||
|
||||
```rust
|
||||
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:
|
||||
|
||||
```rust
|
||||
// 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:
|
||||
|
||||
```rust
|
||||
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,
|
||||
custom_cu_limit: None,
|
||||
};
|
||||
|
||||
// Execute transaction
|
||||
client.buy(buy_params).await?;
|
||||
```
|
||||
|
||||
## 🔄 Nonce Lifecycle
|
||||
|
||||
1. **Initialize**: Set nonce account address
|
||||
2. **Fetch**: Get the latest nonce value from RPC
|
||||
4. **Use**: Use as blockhash in transactions
|
||||
6. **Refresh**: Re-fetch new nonce value before next use
|
||||
|
||||
## 🔗 Related Documentation
|
||||
|
||||
- [Example: Nonce Cache](../examples/nonce_cache/)
|
||||
Reference in New Issue
Block a user