From 02af3e98e2b856cd1631b78e0db6f33200bb24c4 Mon Sep 17 00:00:00 2001 From: ysq Date: Wed, 3 Sep 2025 21:06:14 +0800 Subject: [PATCH] feat(pumpswap): Add fee configuration support v0.5.6 --- Cargo.toml | 2 +- README.md | 4 ++-- README_CN.md | 4 ++-- src/constants/pumpswap.rs | 4 +++- src/instruction/pumpswap.rs | 11 ++++++++++- src/trading/pumpswap/common.rs | 13 ++++++++++++- 6 files changed, 30 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 6a921f9..0572904 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sol-trade-sdk" -version = "0.5.5" +version = "0.5.6" edition = "2021" authors = [ "William ", diff --git a/README.md b/README.md index e28569b..7b3f9c6 100644 --- a/README.md +++ b/README.md @@ -33,14 +33,14 @@ Add the dependency to your `Cargo.toml`: ```toml # Add to your Cargo.toml -sol-trade-sdk = { path = "./sol-trade-sdk", version = "0.5.5" } +sol-trade-sdk = { path = "./sol-trade-sdk", version = "0.5.6" } ``` ### Use crates.io ```toml # Add to your Cargo.toml -sol-trade-sdk = "0.5.5" +sol-trade-sdk = "0.5.6" ``` ## Usage Examples diff --git a/README_CN.md b/README_CN.md index ff57b2c..4b565de 100755 --- a/README_CN.md +++ b/README_CN.md @@ -33,14 +33,14 @@ git clone https://github.com/0xfnzero/sol-trade-sdk ```toml # 添加到您的 Cargo.toml -sol-trade-sdk = { path = "./sol-trade-sdk", version = "0.5.5" } +sol-trade-sdk = { path = "./sol-trade-sdk", version = "0.5.6" } ``` ### 使用 crates.io ```toml # 添加到您的 Cargo.toml -sol-trade-sdk = "0.5.5" +sol-trade-sdk = "0.5.6" ``` ## 使用示例 diff --git a/src/constants/pumpswap.rs b/src/constants/pumpswap.rs index 1e2c109..6c4c385 100755 --- a/src/constants/pumpswap.rs +++ b/src/constants/pumpswap.rs @@ -26,6 +26,7 @@ pub mod seeds { pub const USER_VOLUME_ACCUMULATOR_SEED: &[u8] = b"user_volume_accumulator"; pub const GLOBAL_VOLUME_ACCUMULATOR_SEED: &[u8] = b"global_volume_accumulator"; + pub const FEE_CONFIG_SEED: &[u8] = b"fee_config"; } /// Constants related to program accounts and authorities @@ -65,7 +66,8 @@ pub mod accounts { pub const LP_FEE_BASIS_POINTS: u64 = 20; pub const PROTOCOL_FEE_BASIS_POINTS: u64 = 5; pub const COIN_CREATOR_FEE_BASIS_POINTS: u64 = 5; - + + pub const FEE_PROGRAM: Pubkey = pubkey!("pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ"); } pub const BUY_DISCRIMINATOR: [u8; 8] = [102, 6, 61, 18, 1, 218, 235, 234]; diff --git a/src/instruction/pumpswap.rs b/src/instruction/pumpswap.rs index bdc86fb..ebac507 100755 --- a/src/instruction/pumpswap.rs +++ b/src/instruction/pumpswap.rs @@ -16,7 +16,7 @@ use crate::{ }, pumpswap::common::{ coin_creator_vault_ata, coin_creator_vault_authority, fee_recipient_ata, - get_global_volume_accumulator_pda, get_user_volume_accumulator_pda, + get_fee_config_pda, get_global_volume_accumulator_pda, get_user_volume_accumulator_pda, }, }, utils::calc::pumpswap::{buy_quote_input_internal, sell_base_input_internal}, @@ -272,6 +272,10 @@ impl PumpSwapInstructionBuilder { false, )); } + accounts + .push(solana_sdk::instruction::AccountMeta::new(get_fee_config_pda().unwrap(), false)); + accounts + .push(solana_sdk::instruction::AccountMeta::new_readonly(accounts::FEE_PROGRAM, false)); // Create instruction data let mut data = vec![]; @@ -461,6 +465,11 @@ impl PumpSwapInstructionBuilder { )); } + accounts + .push(solana_sdk::instruction::AccountMeta::new(get_fee_config_pda().unwrap(), false)); + accounts + .push(solana_sdk::instruction::AccountMeta::new_readonly(accounts::FEE_PROGRAM, false)); + // Create instruction data let mut data = vec![]; if quote_mint_is_wsol { diff --git a/src/trading/pumpswap/common.rs b/src/trading/pumpswap/common.rs index f0f0fe0..d53bbad 100755 --- a/src/trading/pumpswap/common.rs +++ b/src/trading/pumpswap/common.rs @@ -1,5 +1,5 @@ -use crate::common::SolanaRpcClient; use crate::constants::pumpswap::accounts; +use crate::{common::SolanaRpcClient, constants}; use anyhow::anyhow; use solana_account_decoder::UiAccountEncoding; use solana_sdk::pubkey::Pubkey; @@ -164,3 +164,14 @@ pub async fn get_token_balances( Ok((base_amount, quote_amount)) } + +#[inline] +pub fn get_fee_config_pda() -> Option { + let seeds: &[&[u8]; 2] = &[ + constants::pumpswap::seeds::FEE_CONFIG_SEED, + constants::pumpswap::accounts::AMM_PROGRAM.as_ref(), + ]; + let program_id: &Pubkey = &constants::pumpswap::accounts::FEE_PROGRAM; + let pda: Option<(Pubkey, u8)> = Pubkey::try_find_program_address(seeds, program_id); + pda.map(|pubkey| pubkey.0) +}