21d6714c25
- Remove src/common/address_lookup.rs and tip_cache.rs to simplify common modules - Move protocol-specific utility functions from trading/ to instruction/utils/ - Refactor utility functions for PumpFun, PumpSwap, Raydium AMM V4, and Raydium CPMM - Consolidate constant definitions by inlining seeds and accounts modules into respective utility files - Update all import paths to ensure code consistency - Optimize trading parameter construction and executor logic - Improve address lookup cache and nonce management mechanisms
127 lines
4.8 KiB
Rust
Executable File
127 lines
4.8 KiB
Rust
Executable File
//! Global account for the Pump.fun Solana Program
|
|
//!
|
|
//! This module contains the definition for the global configuration account.
|
|
//!
|
|
//! # Global Account
|
|
//!
|
|
//! The global account is used to store the global configuration for the Pump.fun program.
|
|
//!
|
|
//! # Fields
|
|
//!
|
|
//! - `discriminator`: Unique identifier for the global account
|
|
//! - `initialized`: Whether the global account has been initialized
|
|
//! - `authority`: Authority pubkey that can modify settings
|
|
//! - `fee_recipient`: Account that receives fees
|
|
//! - `initial_virtual_token_reserves`: Initial virtual token reserves for price calculations
|
|
//! - `initial_virtual_sol_reserves`: Initial virtual SOL reserves for price calculations
|
|
//! - `initial_real_token_reserves`: Initial actual token reserves available for trading
|
|
//! - `token_total_supply`: Total supply of tokens
|
|
//! - `fee_basis_points`: Fee in basis points (1/100th of a percent)
|
|
//! - `withdraw_authority`: Authority that can withdraw fees
|
|
//! - `enable_migrate`: Whether migration is enabled
|
|
//! - `pool_migration_fee`: Fee for pool migration
|
|
//! - `creator_fee`: Fee for creators
|
|
//! - `fee_recipients`: Array of fee recipient accounts
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
use solana_sdk::pubkey::Pubkey;
|
|
|
|
use crate::instruction::utils::pumpfun::global_constants::{
|
|
AUTHORITY, CREATOR_FEE, ENABLE_MIGRATE, FEE_BASIS_POINTS, FEE_RECIPIENT, GLOBAL_ACCOUNT,
|
|
INITIAL_REAL_TOKEN_RESERVES, INITIAL_VIRTUAL_SOL_RESERVES, INITIAL_VIRTUAL_TOKEN_RESERVES,
|
|
POOL_MIGRATION_FEE, PUMPFUN_AMM_FEE_1, PUMPFUN_AMM_FEE_2, PUMPFUN_AMM_FEE_3, PUMPFUN_AMM_FEE_4,
|
|
PUMPFUN_AMM_FEE_5, PUMPFUN_AMM_FEE_6, PUMPFUN_AMM_FEE_7, TOKEN_TOTAL_SUPPLY,
|
|
WITHDRAW_AUTHORITY,
|
|
};
|
|
|
|
/// Represents the global configuration account for token pricing and fees
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct GlobalAccount {
|
|
/// Unique identifier for the global account
|
|
pub discriminator: u64,
|
|
/// Pubkey of the global account
|
|
pub account: Pubkey,
|
|
/// Whether the global account has been initialized
|
|
pub initialized: bool,
|
|
/// Authority that can modify global settings
|
|
pub authority: Pubkey,
|
|
/// Account that receives fees
|
|
pub fee_recipient: Pubkey,
|
|
/// Initial virtual token reserves for price calculations
|
|
pub initial_virtual_token_reserves: u64,
|
|
/// Initial virtual SOL reserves for price calculations
|
|
pub initial_virtual_sol_reserves: u64,
|
|
/// Initial actual token reserves available for trading
|
|
pub initial_real_token_reserves: u64,
|
|
/// Total supply of tokens
|
|
pub token_total_supply: u64,
|
|
/// Fee in basis points (1/100th of a percent)
|
|
pub fee_basis_points: u64,
|
|
/// Authority that can withdraw fees
|
|
pub withdraw_authority: Pubkey,
|
|
/// Whether migration is enabled
|
|
pub enable_migrate: bool,
|
|
/// Fee for pool migration
|
|
pub pool_migration_fee: u64,
|
|
/// Fee for creators
|
|
pub creator_fee: u64,
|
|
/// Array of fee recipient accounts
|
|
pub fee_recipients: [Pubkey; 7],
|
|
}
|
|
|
|
impl GlobalAccount {
|
|
/// Creates a new global account instance
|
|
pub fn new() -> Self {
|
|
Self {
|
|
discriminator: 0,
|
|
account: GLOBAL_ACCOUNT,
|
|
initialized: true,
|
|
authority: AUTHORITY,
|
|
fee_recipient: FEE_RECIPIENT,
|
|
initial_virtual_token_reserves: INITIAL_VIRTUAL_TOKEN_RESERVES,
|
|
initial_virtual_sol_reserves: INITIAL_VIRTUAL_SOL_RESERVES,
|
|
initial_real_token_reserves: INITIAL_REAL_TOKEN_RESERVES,
|
|
token_total_supply: TOKEN_TOTAL_SUPPLY,
|
|
fee_basis_points: FEE_BASIS_POINTS,
|
|
withdraw_authority: WITHDRAW_AUTHORITY,
|
|
enable_migrate: ENABLE_MIGRATE,
|
|
pool_migration_fee: POOL_MIGRATION_FEE,
|
|
creator_fee: CREATOR_FEE,
|
|
fee_recipients: [
|
|
PUMPFUN_AMM_FEE_1,
|
|
PUMPFUN_AMM_FEE_2,
|
|
PUMPFUN_AMM_FEE_3,
|
|
PUMPFUN_AMM_FEE_4,
|
|
PUMPFUN_AMM_FEE_5,
|
|
PUMPFUN_AMM_FEE_6,
|
|
PUMPFUN_AMM_FEE_7,
|
|
],
|
|
}
|
|
}
|
|
|
|
/// Calculates the initial amount of tokens received for a given SOL amount
|
|
///
|
|
/// # Arguments
|
|
/// * `amount` - Amount of SOL to spend
|
|
///
|
|
/// # Returns
|
|
/// Amount of tokens that would be received
|
|
pub fn get_initial_buy_price(&self, amount: u64) -> u64 {
|
|
if amount == 0 {
|
|
return 0;
|
|
}
|
|
|
|
let n: u128 = (self.initial_virtual_sol_reserves as u128)
|
|
* (self.initial_virtual_token_reserves as u128);
|
|
let i: u128 = (self.initial_virtual_sol_reserves as u128) + (amount as u128);
|
|
let r: u128 = n / i + 1;
|
|
let s: u128 = (self.initial_virtual_token_reserves as u128) - r;
|
|
|
|
if s < (self.initial_real_token_reserves as u128) {
|
|
s as u64
|
|
} else {
|
|
self.initial_real_token_reserves
|
|
}
|
|
}
|
|
}
|