diff --git a/Cargo.toml b/Cargo.toml index cee3ba1..183822f 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sol-trade-sdk" -version = "3.1.3" +version = "3.1.4" edition = "2021" authors = [ "William ", diff --git a/README.md b/README.md index b9df029..e386c66 100644 --- a/README.md +++ b/README.md @@ -87,14 +87,14 @@ Add the dependency to your `Cargo.toml`: ```toml # Add to your Cargo.toml -sol-trade-sdk = { path = "./sol-trade-sdk", version = "3.1.3" } +sol-trade-sdk = { path = "./sol-trade-sdk", version = "3.1.4" } ``` ### Use crates.io ```toml # Add to your Cargo.toml -sol-trade-sdk = "3.1.3" +sol-trade-sdk = "3.1.4" ``` ## 🛠️ Usage Examples diff --git a/README_CN.md b/README_CN.md index 741c4c0..1062f1f 100755 --- a/README_CN.md +++ b/README_CN.md @@ -87,14 +87,14 @@ git clone https://github.com/0xfnzero/sol-trade-sdk ```toml # 添加到您的 Cargo.toml -sol-trade-sdk = { path = "./sol-trade-sdk", version = "3.1.3" } +sol-trade-sdk = { path = "./sol-trade-sdk", version = "3.1.4" } ``` ### 使用 crates.io ```toml # 添加到您的 Cargo.toml -sol-trade-sdk = "3.1.3" +sol-trade-sdk = "3.1.4" ``` ## 🛠️ 使用示例 diff --git a/src/instruction/bonk.rs b/src/instruction/bonk.rs index dde7794..f7655a7 100755 --- a/src/instruction/bonk.rs +++ b/src/instruction/bonk.rs @@ -316,6 +316,15 @@ impl InstructionBuilder for BonkInstructionBuilder { if params.close_output_mint_ata { instructions.extend(crate::trading::common::close_wsol(¶ms.payer.pubkey())); } + if params.close_input_mint_ata { + instructions.push(crate::common::spl_token::close_account( + &protocol_params.mint_token_program, + &user_base_token_account, + ¶ms.payer.pubkey(), + ¶ms.payer.pubkey(), + &[¶ms.payer.pubkey()], + )?); + } Ok(instructions) } diff --git a/src/instruction/meteora_damm_v2.rs b/src/instruction/meteora_damm_v2.rs index 7ca7f96..fd8b54f 100644 --- a/src/instruction/meteora_damm_v2.rs +++ b/src/instruction/meteora_damm_v2.rs @@ -220,6 +220,19 @@ impl InstructionBuilder for MeteoraDammV2InstructionBuilder { if params.close_output_mint_ata { instructions.extend(crate::trading::common::close_wsol(¶ms.payer.pubkey())); } + if params.close_input_mint_ata { + instructions.push(crate::common::spl_token::close_account( + if is_a_in { + &protocol_params.token_a_program + } else { + &protocol_params.token_b_program + }, + &input_token_account, + ¶ms.payer.pubkey(), + ¶ms.payer.pubkey(), + &[¶ms.payer.pubkey()], + )?); + } Ok(instructions) } diff --git a/src/instruction/pumpfun.rs b/src/instruction/pumpfun.rs index e52e106..a6fa544 100755 --- a/src/instruction/pumpfun.rs +++ b/src/instruction/pumpfun.rs @@ -241,7 +241,7 @@ impl InstructionBuilder for PumpFunInstructionBuilder { )); // Optional: Close token account - if protocol_params.close_token_account_when_sell.unwrap_or(false) { + if protocol_params.close_token_account_when_sell.unwrap_or(false) || params.close_input_mint_ata { instructions.push(close_account( &crate::constants::TOKEN_PROGRAM, &user_token_account, diff --git a/src/instruction/pumpswap.rs b/src/instruction/pumpswap.rs index bba3b49..f00d669 100755 --- a/src/instruction/pumpswap.rs +++ b/src/instruction/pumpswap.rs @@ -356,6 +356,23 @@ impl InstructionBuilder for PumpSwapInstructionBuilder { if close_wsol_ata { instructions.extend(crate::trading::common::close_wsol(¶ms.payer.pubkey())); } + if params.close_input_mint_ata { + instructions.push(crate::common::spl_token::close_account( + if quote_is_wsol_or_usdc { + &base_token_program + } else { + "e_token_program + }, + if quote_is_wsol_or_usdc { + &user_base_token_account + } else { + &user_quote_token_account + }, + ¶ms.payer.pubkey(), + ¶ms.payer.pubkey(), + &[¶ms.payer.pubkey()], + )?); + } Ok(instructions) } } diff --git a/src/instruction/raydium_amm_v4.rs b/src/instruction/raydium_amm_v4.rs index 6ad0aa5..6a87503 100755 --- a/src/instruction/raydium_amm_v4.rs +++ b/src/instruction/raydium_amm_v4.rs @@ -236,6 +236,15 @@ impl InstructionBuilder for RaydiumAmmV4InstructionBuilder { if params.close_output_mint_ata { instructions.extend(crate::trading::common::close_wsol(¶ms.payer.pubkey())); } + if params.close_input_mint_ata { + instructions.push(crate::common::spl_token::close_account( + &crate::constants::TOKEN_PROGRAM, + &user_source_token_account, + ¶ms.payer.pubkey(), + ¶ms.payer.pubkey(), + &[¶ms.payer.pubkey()], + )?); + } Ok(instructions) } diff --git a/src/instruction/raydium_cpmm.rs b/src/instruction/raydium_cpmm.rs index 16bdd6a..ddab752 100755 --- a/src/instruction/raydium_cpmm.rs +++ b/src/instruction/raydium_cpmm.rs @@ -293,6 +293,15 @@ impl InstructionBuilder for RaydiumCpmmInstructionBuilder { // Close wSOL ATA account, reclaim rent instructions.extend(crate::trading::common::close_wsol(¶ms.payer.pubkey())); } + if params.close_input_mint_ata { + instructions.push(crate::common::spl_token::close_account( + &mint_token_program, + &input_token_account, + ¶ms.payer.pubkey(), + ¶ms.payer.pubkey(), + &[¶ms.payer.pubkey()], + )?); + } Ok(instructions) } diff --git a/src/lib.rs b/src/lib.rs index 3956340..455eef6 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -148,6 +148,8 @@ pub struct TradeSellParams { pub create_output_token_ata: bool, /// Whether to close output token associated token account after trade pub close_output_token_ata: bool, + /// Whether to close mint token associated token account after trade + pub close_mint_token_ata: bool, /// Whether to enable seed-based optimization for account creation pub open_seed_optimize: bool, /// Durable nonce information @@ -409,7 +411,7 @@ impl SolanaTrade { durable_nonce: params.durable_nonce, data_size_limit: 0, create_input_mint_ata: false, - close_input_mint_ata: false, + close_input_mint_ata: params.close_mint_token_ata, create_output_mint_ata: params.create_output_token_ata, close_output_mint_ata: params.close_output_token_ata, fixed_output_amount: params.fixed_output_token_amount,