feat: upgrade to v3.3.2 with explicit token_program parameter support
Major changes: - Bump version from 3.3.1 to 3.3.2 - Add token_program field to PumpFun trading parameters - Support explicit token_program passing for better TOKEN_PROGRAM_2022 compatibility - Update all example code to pass token_program parameter - Optimize token program determination logic from auto-inference to explicit parameter
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "sol-trade-sdk"
|
name = "sol-trade-sdk"
|
||||||
version = "3.3.1"
|
version = "3.3.2"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = [
|
authors = [
|
||||||
"William <byteblock6@gmail.com>",
|
"William <byteblock6@gmail.com>",
|
||||||
|
|||||||
@@ -87,14 +87,14 @@ Add the dependency to your `Cargo.toml`:
|
|||||||
|
|
||||||
```toml
|
```toml
|
||||||
# Add to your Cargo.toml
|
# Add to your Cargo.toml
|
||||||
sol-trade-sdk = { path = "./sol-trade-sdk", version = "3.3.1" }
|
sol-trade-sdk = { path = "./sol-trade-sdk", version = "3.3.2" }
|
||||||
```
|
```
|
||||||
|
|
||||||
### Use crates.io
|
### Use crates.io
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
# Add to your Cargo.toml
|
# Add to your Cargo.toml
|
||||||
sol-trade-sdk = "3.3.1"
|
sol-trade-sdk = "3.3.2"
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🛠️ Usage Examples
|
## 🛠️ Usage Examples
|
||||||
|
|||||||
+2
-2
@@ -87,14 +87,14 @@ git clone https://github.com/0xfnzero/sol-trade-sdk
|
|||||||
|
|
||||||
```toml
|
```toml
|
||||||
# 添加到您的 Cargo.toml
|
# 添加到您的 Cargo.toml
|
||||||
sol-trade-sdk = { path = "./sol-trade-sdk", version = "3.3.1" }
|
sol-trade-sdk = { path = "./sol-trade-sdk", version = "3.3.2" }
|
||||||
```
|
```
|
||||||
|
|
||||||
### 使用 crates.io
|
### 使用 crates.io
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
# 添加到您的 Cargo.toml
|
# 添加到您的 Cargo.toml
|
||||||
sol-trade-sdk = "3.3.1"
|
sol-trade-sdk = "3.3.2"
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🛠️ 使用示例
|
## 🛠️ 使用示例
|
||||||
|
|||||||
@@ -149,6 +149,7 @@ async fn pumpfun_copy_trade_with_grpc(trade_info: PumpFunTradeEvent) -> AnyResul
|
|||||||
trade_info.real_sol_reserves,
|
trade_info.real_sol_reserves,
|
||||||
None,
|
None,
|
||||||
trade_info.fee_recipient,
|
trade_info.fee_recipient,
|
||||||
|
trade_info.token_program,
|
||||||
)),
|
)),
|
||||||
address_lookup_table_account: address_lookup_table_account,
|
address_lookup_table_account: address_lookup_table_account,
|
||||||
wait_transaction_confirmed: true,
|
wait_transaction_confirmed: true,
|
||||||
|
|||||||
@@ -149,6 +149,7 @@ async fn pumpfun_copy_trade_with_grpc(trade_info: PumpFunTradeEvent) -> AnyResul
|
|||||||
trade_info.real_sol_reserves,
|
trade_info.real_sol_reserves,
|
||||||
None,
|
None,
|
||||||
trade_info.fee_recipient,
|
trade_info.fee_recipient,
|
||||||
|
trade_info.token_program,
|
||||||
)),
|
)),
|
||||||
address_lookup_table_account: None,
|
address_lookup_table_account: None,
|
||||||
wait_transaction_confirmed: true,
|
wait_transaction_confirmed: true,
|
||||||
|
|||||||
@@ -145,6 +145,7 @@ async fn pumpfun_copy_trade_with_grpc(trade_info: PumpFunTradeEvent) -> AnyResul
|
|||||||
trade_info.real_sol_reserves,
|
trade_info.real_sol_reserves,
|
||||||
None,
|
None,
|
||||||
trade_info.fee_recipient,
|
trade_info.fee_recipient,
|
||||||
|
trade_info.token_program,
|
||||||
)),
|
)),
|
||||||
address_lookup_table_account: None,
|
address_lookup_table_account: None,
|
||||||
wait_transaction_confirmed: true,
|
wait_transaction_confirmed: true,
|
||||||
@@ -189,6 +190,7 @@ async fn pumpfun_copy_trade_with_grpc(trade_info: PumpFunTradeEvent) -> AnyResul
|
|||||||
trade_info.real_sol_reserves,
|
trade_info.real_sol_reserves,
|
||||||
Some(true),
|
Some(true),
|
||||||
trade_info.fee_recipient,
|
trade_info.fee_recipient,
|
||||||
|
trade_info.token_program,
|
||||||
)),
|
)),
|
||||||
address_lookup_table_account: None,
|
address_lookup_table_account: None,
|
||||||
wait_transaction_confirmed: true,
|
wait_transaction_confirmed: true,
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ async fn pumpfun_sniper_trade_with_shreds(trade_info: PumpFunTradeEvent) -> AnyR
|
|||||||
trade_info.creator_vault,
|
trade_info.creator_vault,
|
||||||
None,
|
None,
|
||||||
trade_info.fee_recipient,
|
trade_info.fee_recipient,
|
||||||
|
trade_info.token_program,
|
||||||
)),
|
)),
|
||||||
address_lookup_table_account: None,
|
address_lookup_table_account: None,
|
||||||
wait_transaction_confirmed: true,
|
wait_transaction_confirmed: true,
|
||||||
@@ -143,7 +144,7 @@ async fn pumpfun_sniper_trade_with_shreds(trade_info: PumpFunTradeEvent) -> AnyR
|
|||||||
slippage_basis_points: slippage_basis_points,
|
slippage_basis_points: slippage_basis_points,
|
||||||
recent_blockhash: Some(recent_blockhash),
|
recent_blockhash: Some(recent_blockhash),
|
||||||
with_tip: false,
|
with_tip: false,
|
||||||
extension_params: Box::new(PumpFunParams::immediate_sell(trade_info.creator_vault, true)),
|
extension_params: Box::new(PumpFunParams::immediate_sell(trade_info.creator_vault, trade_info.token_program, true)),
|
||||||
address_lookup_table_account: None,
|
address_lookup_table_account: None,
|
||||||
wait_transaction_confirmed: true,
|
wait_transaction_confirmed: true,
|
||||||
create_output_token_ata: true,
|
create_output_token_ata: true,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
common::spl_token::close_account,
|
common::spl_token::close_account,
|
||||||
constants::trade::trade::DEFAULT_SLIPPAGE,
|
constants::{trade::trade::DEFAULT_SLIPPAGE, TOKEN_PROGRAM_2022},
|
||||||
trading::core::{
|
trading::core::{
|
||||||
params::{PumpFunParams, SwapParams},
|
params::{PumpFunParams, SwapParams},
|
||||||
traits::InstructionBuilder,
|
traits::InstructionBuilder,
|
||||||
@@ -70,12 +70,8 @@ impl InstructionBuilder for PumpFunInstructionBuilder {
|
|||||||
|
|
||||||
// Determine token program based on mayhem mode
|
// Determine token program based on mayhem mode
|
||||||
let is_mayhem_mode = bonding_curve.is_mayhem_mode;
|
let is_mayhem_mode = bonding_curve.is_mayhem_mode;
|
||||||
let token_program = if is_mayhem_mode {
|
let token_program = protocol_params.token_program;
|
||||||
crate::constants::TOKEN_PROGRAM_2022
|
let token_program_meta = if protocol_params.token_program == TOKEN_PROGRAM_2022 {
|
||||||
} else {
|
|
||||||
crate::constants::TOKEN_PROGRAM
|
|
||||||
};
|
|
||||||
let token_program_meta = if is_mayhem_mode {
|
|
||||||
crate::constants::TOKEN_PROGRAM_2022_META
|
crate::constants::TOKEN_PROGRAM_2022_META
|
||||||
} else {
|
} else {
|
||||||
crate::constants::TOKEN_PROGRAM_META
|
crate::constants::TOKEN_PROGRAM_META
|
||||||
@@ -210,12 +206,8 @@ impl InstructionBuilder for PumpFunInstructionBuilder {
|
|||||||
|
|
||||||
// Determine token program based on mayhem mode
|
// Determine token program based on mayhem mode
|
||||||
let is_mayhem_mode = bonding_curve.is_mayhem_mode;
|
let is_mayhem_mode = bonding_curve.is_mayhem_mode;
|
||||||
let token_program = if is_mayhem_mode {
|
let token_program = protocol_params.token_program;
|
||||||
crate::constants::TOKEN_PROGRAM_2022
|
let token_program_meta = if protocol_params.token_program == TOKEN_PROGRAM_2022 {
|
||||||
} else {
|
|
||||||
crate::constants::TOKEN_PROGRAM
|
|
||||||
};
|
|
||||||
let token_program_meta = if is_mayhem_mode {
|
|
||||||
crate::constants::TOKEN_PROGRAM_2022_META
|
crate::constants::TOKEN_PROGRAM_2022_META
|
||||||
} else {
|
} else {
|
||||||
crate::constants::TOKEN_PROGRAM_META
|
crate::constants::TOKEN_PROGRAM_META
|
||||||
|
|||||||
@@ -58,16 +58,22 @@ pub struct PumpFunParams {
|
|||||||
pub bonding_curve: Arc<BondingCurveAccount>,
|
pub bonding_curve: Arc<BondingCurveAccount>,
|
||||||
pub associated_bonding_curve: Pubkey,
|
pub associated_bonding_curve: Pubkey,
|
||||||
pub creator_vault: Pubkey,
|
pub creator_vault: Pubkey,
|
||||||
|
pub token_program: Pubkey,
|
||||||
/// Whether to close token account when selling, only effective during sell operations
|
/// Whether to close token account when selling, only effective during sell operations
|
||||||
pub close_token_account_when_sell: Option<bool>,
|
pub close_token_account_when_sell: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PumpFunParams {
|
impl PumpFunParams {
|
||||||
pub fn immediate_sell(creator_vault: Pubkey, close_token_account_when_sell: bool) -> Self {
|
pub fn immediate_sell(
|
||||||
|
creator_vault: Pubkey,
|
||||||
|
token_program: Pubkey,
|
||||||
|
close_token_account_when_sell: bool,
|
||||||
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
bonding_curve: Arc::new(BondingCurveAccount { ..Default::default() }),
|
bonding_curve: Arc::new(BondingCurveAccount { ..Default::default() }),
|
||||||
associated_bonding_curve: Pubkey::default(),
|
associated_bonding_curve: Pubkey::default(),
|
||||||
creator_vault: creator_vault,
|
creator_vault: creator_vault,
|
||||||
|
token_program: token_program,
|
||||||
close_token_account_when_sell: Some(close_token_account_when_sell),
|
close_token_account_when_sell: Some(close_token_account_when_sell),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -82,6 +88,7 @@ impl PumpFunParams {
|
|||||||
creator_vault: Pubkey,
|
creator_vault: Pubkey,
|
||||||
close_token_account_when_sell: Option<bool>,
|
close_token_account_when_sell: Option<bool>,
|
||||||
fee_recipient: Pubkey,
|
fee_recipient: Pubkey,
|
||||||
|
token_program: Pubkey,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let is_mayhem_mode = fee_recipient == MAYHEM_FEE_RECIPIENT;
|
let is_mayhem_mode = fee_recipient == MAYHEM_FEE_RECIPIENT;
|
||||||
let bonding_curve_account = BondingCurveAccount::from_dev_trade(
|
let bonding_curve_account = BondingCurveAccount::from_dev_trade(
|
||||||
@@ -97,6 +104,7 @@ impl PumpFunParams {
|
|||||||
associated_bonding_curve: associated_bonding_curve,
|
associated_bonding_curve: associated_bonding_curve,
|
||||||
creator_vault: creator_vault,
|
creator_vault: creator_vault,
|
||||||
close_token_account_when_sell: close_token_account_when_sell,
|
close_token_account_when_sell: close_token_account_when_sell,
|
||||||
|
token_program: token_program,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,6 +120,7 @@ impl PumpFunParams {
|
|||||||
real_sol_reserves: u64,
|
real_sol_reserves: u64,
|
||||||
close_token_account_when_sell: Option<bool>,
|
close_token_account_when_sell: Option<bool>,
|
||||||
fee_recipient: Pubkey,
|
fee_recipient: Pubkey,
|
||||||
|
token_program: Pubkey,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let is_mayhem_mode = fee_recipient == MAYHEM_FEE_RECIPIENT;
|
let is_mayhem_mode = fee_recipient == MAYHEM_FEE_RECIPIENT;
|
||||||
let bonding_curve = BondingCurveAccount::from_trade(
|
let bonding_curve = BondingCurveAccount::from_trade(
|
||||||
@@ -129,6 +138,7 @@ impl PumpFunParams {
|
|||||||
associated_bonding_curve: associated_bonding_curve,
|
associated_bonding_curve: associated_bonding_curve,
|
||||||
creator_vault: creator_vault,
|
creator_vault: creator_vault,
|
||||||
close_token_account_when_sell: close_token_account_when_sell,
|
close_token_account_when_sell: close_token_account_when_sell,
|
||||||
|
token_program: token_program,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,6 +148,7 @@ impl PumpFunParams {
|
|||||||
) -> Result<Self, anyhow::Error> {
|
) -> Result<Self, anyhow::Error> {
|
||||||
let account =
|
let account =
|
||||||
crate::instruction::utils::pumpfun::fetch_bonding_curve_account(rpc, mint).await?;
|
crate::instruction::utils::pumpfun::fetch_bonding_curve_account(rpc, mint).await?;
|
||||||
|
let mint_account = rpc.get_account(&mint).await?;
|
||||||
let bonding_curve = BondingCurveAccount {
|
let bonding_curve = BondingCurveAccount {
|
||||||
discriminator: 0,
|
discriminator: 0,
|
||||||
account: account.1,
|
account: account.1,
|
||||||
@@ -153,7 +164,7 @@ impl PumpFunParams {
|
|||||||
let associated_bonding_curve = get_associated_token_address_with_program_id(
|
let associated_bonding_curve = get_associated_token_address_with_program_id(
|
||||||
&bonding_curve.account,
|
&bonding_curve.account,
|
||||||
mint,
|
mint,
|
||||||
&crate::constants::TOKEN_PROGRAM,
|
&mint_account.owner,
|
||||||
);
|
);
|
||||||
let creator_vault =
|
let creator_vault =
|
||||||
crate::instruction::utils::pumpfun::get_creator_vault_pda(&bonding_curve.creator);
|
crate::instruction::utils::pumpfun::get_creator_vault_pda(&bonding_curve.creator);
|
||||||
@@ -162,6 +173,7 @@ impl PumpFunParams {
|
|||||||
associated_bonding_curve: associated_bonding_curve,
|
associated_bonding_curve: associated_bonding_curve,
|
||||||
creator_vault: creator_vault.unwrap(),
|
creator_vault: creator_vault.unwrap(),
|
||||||
close_token_account_when_sell: None,
|
close_token_account_when_sell: None,
|
||||||
|
token_program: mint_account.owner,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user