diff --git a/decoders/raydium-launchpad-decoder/src/accounts/platform_config.rs b/decoders/raydium-launchpad-decoder/src/accounts/platform_config.rs index 97888bcbe..4a108001c 100644 --- a/decoders/raydium-launchpad-decoder/src/accounts/platform_config.rs +++ b/decoders/raydium-launchpad-decoder/src/accounts/platform_config.rs @@ -1,3 +1,6 @@ +use super::super::types::*; + +use alloc::vec::Vec; use carbon_core::{borsh, CarbonDeserialize}; #[derive( @@ -18,6 +21,10 @@ pub struct PlatformConfig { pub web: [u8; 256], #[serde(with = "serde_big_array::BigArray")] pub img: [u8; 256], + pub cpswap_config: solana_pubkey::Pubkey, + pub creator_fee_rate: u64, + pub transfer_fee_extension_auth: solana_pubkey::Pubkey, #[serde(with = "serde_big_array::BigArray")] - pub padding: [u8; 256], + pub padding: [u8; 180], + pub curve_params: Vec, } diff --git a/decoders/raydium-launchpad-decoder/src/accounts/pool_state.rs b/decoders/raydium-launchpad-decoder/src/accounts/pool_state.rs index f28e9e35f..dd19ab200 100644 --- a/decoders/raydium-launchpad-decoder/src/accounts/pool_state.rs +++ b/decoders/raydium-launchpad-decoder/src/accounts/pool_state.rs @@ -31,5 +31,8 @@ pub struct PoolState { pub base_vault: solana_pubkey::Pubkey, pub quote_vault: solana_pubkey::Pubkey, pub creator: solana_pubkey::Pubkey, - pub padding: [u64; 8], + pub token_program_flag: u8, + pub amm_creator_fee_on: AmmCreatorFeeOn, + #[serde(with = "serde_big_array::BigArray")] + pub padding: [u8; 62], } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/buy_exact_in.rs b/decoders/raydium-launchpad-decoder/src/instructions/buy_exact_in.rs index d6e192229..601766073 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/buy_exact_in.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/buy_exact_in.rs @@ -1,4 +1,4 @@ -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -35,28 +35,39 @@ impl carbon_core::deserialize::ArrangeAccounts for BuyExactIn { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [payer, authority, global_config, platform_config, pool_state, user_base_token, user_quote_token, base_vault, quote_vault, base_token_mint, quote_token_mint, base_token_program, quote_token_program, event_authority, program, _remaining @ ..] = - accounts - else { - return None; - }; + let mut iter = accounts.iter(); + let payer = next_account(&mut iter)?; + let authority = next_account(&mut iter)?; + let global_config = next_account(&mut iter)?; + let platform_config = next_account(&mut iter)?; + let pool_state = next_account(&mut iter)?; + let user_base_token = next_account(&mut iter)?; + let user_quote_token = next_account(&mut iter)?; + let base_vault = next_account(&mut iter)?; + let quote_vault = next_account(&mut iter)?; + let base_token_mint = next_account(&mut iter)?; + let quote_token_mint = next_account(&mut iter)?; + let base_token_program = next_account(&mut iter)?; + let quote_token_program = next_account(&mut iter)?; + let event_authority = next_account(&mut iter)?; + let program = next_account(&mut iter)?; Some(BuyExactInInstructionAccounts { - payer: payer.pubkey, - authority: authority.pubkey, - global_config: global_config.pubkey, - platform_config: platform_config.pubkey, - pool_state: pool_state.pubkey, - user_base_token: user_base_token.pubkey, - user_quote_token: user_quote_token.pubkey, - base_vault: base_vault.pubkey, - quote_vault: quote_vault.pubkey, - base_token_mint: base_token_mint.pubkey, - quote_token_mint: quote_token_mint.pubkey, - base_token_program: base_token_program.pubkey, - quote_token_program: quote_token_program.pubkey, - event_authority: event_authority.pubkey, - program: program.pubkey, + payer, + authority, + global_config, + platform_config, + pool_state, + user_base_token, + user_quote_token, + base_vault, + quote_vault, + base_token_mint, + quote_token_mint, + base_token_program, + quote_token_program, + event_authority, + program, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/buy_exact_out.rs b/decoders/raydium-launchpad-decoder/src/instructions/buy_exact_out.rs index cf283238e..b9505149b 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/buy_exact_out.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/buy_exact_out.rs @@ -1,4 +1,4 @@ -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -35,28 +35,39 @@ impl carbon_core::deserialize::ArrangeAccounts for BuyExactOut { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [payer, authority, global_config, platform_config, pool_state, user_base_token, user_quote_token, base_vault, quote_vault, base_token_mint, quote_token_mint, base_token_program, quote_token_program, event_authority, program, _remaining @ ..] = - accounts - else { - return None; - }; + let mut iter = accounts.iter(); + let payer = next_account(&mut iter)?; + let authority = next_account(&mut iter)?; + let global_config = next_account(&mut iter)?; + let platform_config = next_account(&mut iter)?; + let pool_state = next_account(&mut iter)?; + let user_base_token = next_account(&mut iter)?; + let user_quote_token = next_account(&mut iter)?; + let base_vault = next_account(&mut iter)?; + let quote_vault = next_account(&mut iter)?; + let base_token_mint = next_account(&mut iter)?; + let quote_token_mint = next_account(&mut iter)?; + let base_token_program = next_account(&mut iter)?; + let quote_token_program = next_account(&mut iter)?; + let event_authority = next_account(&mut iter)?; + let program = next_account(&mut iter)?; Some(BuyExactOutInstructionAccounts { - payer: payer.pubkey, - authority: authority.pubkey, - global_config: global_config.pubkey, - platform_config: platform_config.pubkey, - pool_state: pool_state.pubkey, - user_base_token: user_base_token.pubkey, - user_quote_token: user_quote_token.pubkey, - base_vault: base_vault.pubkey, - quote_vault: quote_vault.pubkey, - base_token_mint: base_token_mint.pubkey, - quote_token_mint: quote_token_mint.pubkey, - base_token_program: base_token_program.pubkey, - quote_token_program: quote_token_program.pubkey, - event_authority: event_authority.pubkey, - program: program.pubkey, + payer, + authority, + global_config, + platform_config, + pool_state, + user_base_token, + user_quote_token, + base_vault, + quote_vault, + base_token_mint, + quote_token_mint, + base_token_program, + quote_token_program, + event_authority, + program, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/claim_creator_fee.rs b/decoders/raydium-launchpad-decoder/src/instructions/claim_creator_fee.rs new file mode 100644 index 000000000..1c4e2cdbe --- /dev/null +++ b/decoders/raydium-launchpad-decoder/src/instructions/claim_creator_fee.rs @@ -0,0 +1,48 @@ +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; + +#[derive( + CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, +)] +#[carbon(discriminator = "0x1a618acb84ab8dfc")] +pub struct ClaimCreatorFee {} + +#[derive(Debug, PartialEq, Eq, Clone, Hash, serde::Serialize, serde::Deserialize)] +pub struct ClaimCreatorFeeInstructionAccounts { + pub creator: solana_pubkey::Pubkey, + pub fee_vault_authority: solana_pubkey::Pubkey, + pub creator_fee_vault: solana_pubkey::Pubkey, + pub recipient_token_account: solana_pubkey::Pubkey, + pub quote_mint: solana_pubkey::Pubkey, + pub token_program: solana_pubkey::Pubkey, + pub system_program: solana_pubkey::Pubkey, + pub associated_token_program: solana_pubkey::Pubkey, +} + +impl carbon_core::deserialize::ArrangeAccounts for ClaimCreatorFee { + type ArrangedAccounts = ClaimCreatorFeeInstructionAccounts; + + fn arrange_accounts( + accounts: &[solana_instruction::AccountMeta], + ) -> Option { + let mut iter = accounts.iter(); + let creator = next_account(&mut iter)?; + let fee_vault_authority = next_account(&mut iter)?; + let creator_fee_vault = next_account(&mut iter)?; + let recipient_token_account = next_account(&mut iter)?; + let quote_mint = next_account(&mut iter)?; + let token_program = next_account(&mut iter)?; + let system_program = next_account(&mut iter)?; + let associated_token_program = next_account(&mut iter)?; + + Some(ClaimCreatorFeeInstructionAccounts { + creator, + fee_vault_authority, + creator_fee_vault, + recipient_token_account, + quote_mint, + token_program, + system_program, + associated_token_program, + }) + } +} diff --git a/decoders/raydium-launchpad-decoder/src/instructions/claim_platform_fee.rs b/decoders/raydium-launchpad-decoder/src/instructions/claim_platform_fee.rs index b65e952ba..f185d8ce7 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/claim_platform_fee.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/claim_platform_fee.rs @@ -1,4 +1,4 @@ -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -26,23 +26,29 @@ impl carbon_core::deserialize::ArrangeAccounts for ClaimPlatformFee { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [platform_fee_wallet, authority, pool_state, platform_config, quote_vault, recipient_token_account, quote_mint, token_program, system_program, associated_token_program, _remaining @ ..] = - accounts - else { - return None; - }; + let mut iter = accounts.iter(); + let platform_fee_wallet = next_account(&mut iter)?; + let authority = next_account(&mut iter)?; + let pool_state = next_account(&mut iter)?; + let platform_config = next_account(&mut iter)?; + let quote_vault = next_account(&mut iter)?; + let recipient_token_account = next_account(&mut iter)?; + let quote_mint = next_account(&mut iter)?; + let token_program = next_account(&mut iter)?; + let system_program = next_account(&mut iter)?; + let associated_token_program = next_account(&mut iter)?; Some(ClaimPlatformFeeInstructionAccounts { - platform_fee_wallet: platform_fee_wallet.pubkey, - authority: authority.pubkey, - pool_state: pool_state.pubkey, - platform_config: platform_config.pubkey, - quote_vault: quote_vault.pubkey, - recipient_token_account: recipient_token_account.pubkey, - quote_mint: quote_mint.pubkey, - token_program: token_program.pubkey, - system_program: system_program.pubkey, - associated_token_program: associated_token_program.pubkey, + platform_fee_wallet, + authority, + pool_state, + platform_config, + quote_vault, + recipient_token_account, + quote_mint, + token_program, + system_program, + associated_token_program, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/claim_platform_fee_from_vault.rs b/decoders/raydium-launchpad-decoder/src/instructions/claim_platform_fee_from_vault.rs new file mode 100644 index 000000000..fd42b1182 --- /dev/null +++ b/decoders/raydium-launchpad-decoder/src/instructions/claim_platform_fee_from_vault.rs @@ -0,0 +1,51 @@ +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; + +#[derive( + CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, +)] +#[carbon(discriminator = "0x75f1c6a8f8da501d")] +pub struct ClaimPlatformFeeFromVault {} + +#[derive(Debug, PartialEq, Eq, Clone, Hash, serde::Serialize, serde::Deserialize)] +pub struct ClaimPlatformFeeFromVaultInstructionAccounts { + pub platform_fee_wallet: solana_pubkey::Pubkey, + pub fee_vault_authority: solana_pubkey::Pubkey, + pub platform_config: solana_pubkey::Pubkey, + pub platform_fee_vault: solana_pubkey::Pubkey, + pub recipient_token_account: solana_pubkey::Pubkey, + pub quote_mint: solana_pubkey::Pubkey, + pub token_program: solana_pubkey::Pubkey, + pub system_program: solana_pubkey::Pubkey, + pub associated_token_program: solana_pubkey::Pubkey, +} + +impl carbon_core::deserialize::ArrangeAccounts for ClaimPlatformFeeFromVault { + type ArrangedAccounts = ClaimPlatformFeeFromVaultInstructionAccounts; + + fn arrange_accounts( + accounts: &[solana_instruction::AccountMeta], + ) -> Option { + let mut iter = accounts.iter(); + let platform_fee_wallet = next_account(&mut iter)?; + let fee_vault_authority = next_account(&mut iter)?; + let platform_config = next_account(&mut iter)?; + let platform_fee_vault = next_account(&mut iter)?; + let recipient_token_account = next_account(&mut iter)?; + let quote_mint = next_account(&mut iter)?; + let token_program = next_account(&mut iter)?; + let system_program = next_account(&mut iter)?; + let associated_token_program = next_account(&mut iter)?; + + Some(ClaimPlatformFeeFromVaultInstructionAccounts { + platform_fee_wallet, + fee_vault_authority, + platform_config, + platform_fee_vault, + recipient_token_account, + quote_mint, + token_program, + system_program, + associated_token_program, + }) + } +} diff --git a/decoders/raydium-launchpad-decoder/src/instructions/claim_vested_token.rs b/decoders/raydium-launchpad-decoder/src/instructions/claim_vested_token.rs index dc1bc4314..0d82e68e9 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/claim_vested_token.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/claim_vested_token.rs @@ -1,4 +1,4 @@ -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -26,23 +26,29 @@ impl carbon_core::deserialize::ArrangeAccounts for ClaimVestedToken { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [beneficiary, authority, pool_state, vesting_record, base_vault, user_base_token, base_token_mint, base_token_program, system_program, associated_token_program, _remaining @ ..] = - accounts - else { - return None; - }; + let mut iter = accounts.iter(); + let beneficiary = next_account(&mut iter)?; + let authority = next_account(&mut iter)?; + let pool_state = next_account(&mut iter)?; + let vesting_record = next_account(&mut iter)?; + let base_vault = next_account(&mut iter)?; + let user_base_token = next_account(&mut iter)?; + let base_token_mint = next_account(&mut iter)?; + let base_token_program = next_account(&mut iter)?; + let system_program = next_account(&mut iter)?; + let associated_token_program = next_account(&mut iter)?; Some(ClaimVestedTokenInstructionAccounts { - beneficiary: beneficiary.pubkey, - authority: authority.pubkey, - pool_state: pool_state.pubkey, - vesting_record: vesting_record.pubkey, - base_vault: base_vault.pubkey, - user_base_token: user_base_token.pubkey, - base_token_mint: base_token_mint.pubkey, - base_token_program: base_token_program.pubkey, - system_program: system_program.pubkey, - associated_token_program: associated_token_program.pubkey, + beneficiary, + authority, + pool_state, + vesting_record, + base_vault, + user_base_token, + base_token_mint, + base_token_program, + system_program, + associated_token_program, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/collect_fee.rs b/decoders/raydium-launchpad-decoder/src/instructions/collect_fee.rs index 840007de0..cebcdbf8b 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/collect_fee.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/collect_fee.rs @@ -1,4 +1,4 @@ -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -24,21 +24,25 @@ impl carbon_core::deserialize::ArrangeAccounts for CollectFee { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [owner, authority, pool_state, global_config, quote_vault, quote_mint, recipient_token_account, token_program, _remaining @ ..] = - accounts - else { - return None; - }; + let mut iter = accounts.iter(); + let owner = next_account(&mut iter)?; + let authority = next_account(&mut iter)?; + let pool_state = next_account(&mut iter)?; + let global_config = next_account(&mut iter)?; + let quote_vault = next_account(&mut iter)?; + let quote_mint = next_account(&mut iter)?; + let recipient_token_account = next_account(&mut iter)?; + let token_program = next_account(&mut iter)?; Some(CollectFeeInstructionAccounts { - owner: owner.pubkey, - authority: authority.pubkey, - pool_state: pool_state.pubkey, - global_config: global_config.pubkey, - quote_vault: quote_vault.pubkey, - quote_mint: quote_mint.pubkey, - recipient_token_account: recipient_token_account.pubkey, - token_program: token_program.pubkey, + owner, + authority, + pool_state, + global_config, + quote_vault, + quote_mint, + recipient_token_account, + token_program, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/collect_migrate_fee.rs b/decoders/raydium-launchpad-decoder/src/instructions/collect_migrate_fee.rs index a902e685c..adf3ea7ff 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/collect_migrate_fee.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/collect_migrate_fee.rs @@ -1,4 +1,4 @@ -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -24,21 +24,25 @@ impl carbon_core::deserialize::ArrangeAccounts for CollectMigrateFee { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [owner, authority, pool_state, global_config, quote_vault, quote_mint, recipient_token_account, token_program, _remaining @ ..] = - accounts - else { - return None; - }; + let mut iter = accounts.iter(); + let owner = next_account(&mut iter)?; + let authority = next_account(&mut iter)?; + let pool_state = next_account(&mut iter)?; + let global_config = next_account(&mut iter)?; + let quote_vault = next_account(&mut iter)?; + let quote_mint = next_account(&mut iter)?; + let recipient_token_account = next_account(&mut iter)?; + let token_program = next_account(&mut iter)?; Some(CollectMigrateFeeInstructionAccounts { - owner: owner.pubkey, - authority: authority.pubkey, - pool_state: pool_state.pubkey, - global_config: global_config.pubkey, - quote_vault: quote_vault.pubkey, - quote_mint: quote_mint.pubkey, - recipient_token_account: recipient_token_account.pubkey, - token_program: token_program.pubkey, + owner, + authority, + pool_state, + global_config, + quote_vault, + quote_mint, + recipient_token_account, + token_program, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/create_config.rs b/decoders/raydium-launchpad-decoder/src/instructions/create_config.rs index a9c14261d..e59342b33 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/create_config.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/create_config.rs @@ -1,4 +1,4 @@ -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -29,21 +29,25 @@ impl carbon_core::deserialize::ArrangeAccounts for CreateConfig { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [owner, global_config, quote_token_mint, protocol_fee_owner, migrate_fee_owner, migrate_to_amm_wallet, migrate_to_cpswap_wallet, system_program, _remaining @ ..] = - accounts - else { - return None; - }; + let mut iter = accounts.iter(); + let owner = next_account(&mut iter)?; + let global_config = next_account(&mut iter)?; + let quote_token_mint = next_account(&mut iter)?; + let protocol_fee_owner = next_account(&mut iter)?; + let migrate_fee_owner = next_account(&mut iter)?; + let migrate_to_amm_wallet = next_account(&mut iter)?; + let migrate_to_cpswap_wallet = next_account(&mut iter)?; + let system_program = next_account(&mut iter)?; Some(CreateConfigInstructionAccounts { - owner: owner.pubkey, - global_config: global_config.pubkey, - quote_token_mint: quote_token_mint.pubkey, - protocol_fee_owner: protocol_fee_owner.pubkey, - migrate_fee_owner: migrate_fee_owner.pubkey, - migrate_to_amm_wallet: migrate_to_amm_wallet.pubkey, - migrate_to_cpswap_wallet: migrate_to_cpswap_wallet.pubkey, - system_program: system_program.pubkey, + owner, + global_config, + quote_token_mint, + protocol_fee_owner, + migrate_fee_owner, + migrate_to_amm_wallet, + migrate_to_cpswap_wallet, + system_program, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/create_platform_config.rs b/decoders/raydium-launchpad-decoder/src/instructions/create_platform_config.rs index 18ab5758b..d40b453ca 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/create_platform_config.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/create_platform_config.rs @@ -1,6 +1,6 @@ use super::super::types::*; -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -16,7 +16,9 @@ pub struct CreatePlatformConfigInstructionAccounts { pub platform_fee_wallet: solana_pubkey::Pubkey, pub platform_nft_wallet: solana_pubkey::Pubkey, pub platform_config: solana_pubkey::Pubkey, + pub cpswap_config: solana_pubkey::Pubkey, pub system_program: solana_pubkey::Pubkey, + pub transfer_fee_extension_authority: solana_pubkey::Pubkey, } impl carbon_core::deserialize::ArrangeAccounts for CreatePlatformConfig { @@ -25,18 +27,23 @@ impl carbon_core::deserialize::ArrangeAccounts for CreatePlatformConfig { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [platform_admin, platform_fee_wallet, platform_nft_wallet, platform_config, system_program, _remaining @ ..] = - accounts - else { - return None; - }; + let mut iter = accounts.iter(); + let platform_admin = next_account(&mut iter)?; + let platform_fee_wallet = next_account(&mut iter)?; + let platform_nft_wallet = next_account(&mut iter)?; + let platform_config = next_account(&mut iter)?; + let cpswap_config = next_account(&mut iter)?; + let system_program = next_account(&mut iter)?; + let transfer_fee_extension_authority = next_account(&mut iter)?; Some(CreatePlatformConfigInstructionAccounts { - platform_admin: platform_admin.pubkey, - platform_fee_wallet: platform_fee_wallet.pubkey, - platform_nft_wallet: platform_nft_wallet.pubkey, - platform_config: platform_config.pubkey, - system_program: system_program.pubkey, + platform_admin, + platform_fee_wallet, + platform_nft_wallet, + platform_config, + cpswap_config, + system_program, + transfer_fee_extension_authority, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/create_vesting_account.rs b/decoders/raydium-launchpad-decoder/src/instructions/create_vesting_account.rs index b3e1f943b..88efe41b5 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/create_vesting_account.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/create_vesting_account.rs @@ -1,4 +1,4 @@ -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -23,18 +23,19 @@ impl carbon_core::deserialize::ArrangeAccounts for CreateVestingAccount { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [creator, beneficiary, pool_state, vesting_record, system_program, _remaining @ ..] = - accounts - else { - return None; - }; + let mut iter = accounts.iter(); + let creator = next_account(&mut iter)?; + let beneficiary = next_account(&mut iter)?; + let pool_state = next_account(&mut iter)?; + let vesting_record = next_account(&mut iter)?; + let system_program = next_account(&mut iter)?; Some(CreateVestingAccountInstructionAccounts { - creator: creator.pubkey, - beneficiary: beneficiary.pubkey, - pool_state: pool_state.pubkey, - vesting_record: vesting_record.pubkey, - system_program: system_program.pubkey, + creator, + beneficiary, + pool_state, + vesting_record, + system_program, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/initialize.rs b/decoders/raydium-launchpad-decoder/src/instructions/initialize.rs index e46d42abf..d7f95f902 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/initialize.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/initialize.rs @@ -1,6 +1,6 @@ use super::super::types::*; -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -40,31 +40,45 @@ impl carbon_core::deserialize::ArrangeAccounts for Initialize { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [payer, creator, global_config, platform_config, authority, pool_state, base_mint, quote_mint, base_vault, quote_vault, metadata_account, base_token_program, quote_token_program, metadata_program, system_program, rent_program, event_authority, program, _remaining @ ..] = - accounts - else { - return None; - }; + let mut iter = accounts.iter(); + let payer = next_account(&mut iter)?; + let creator = next_account(&mut iter)?; + let global_config = next_account(&mut iter)?; + let platform_config = next_account(&mut iter)?; + let authority = next_account(&mut iter)?; + let pool_state = next_account(&mut iter)?; + let base_mint = next_account(&mut iter)?; + let quote_mint = next_account(&mut iter)?; + let base_vault = next_account(&mut iter)?; + let quote_vault = next_account(&mut iter)?; + let metadata_account = next_account(&mut iter)?; + let base_token_program = next_account(&mut iter)?; + let quote_token_program = next_account(&mut iter)?; + let metadata_program = next_account(&mut iter)?; + let system_program = next_account(&mut iter)?; + let rent_program = next_account(&mut iter)?; + let event_authority = next_account(&mut iter)?; + let program = next_account(&mut iter)?; Some(InitializeInstructionAccounts { - payer: payer.pubkey, - creator: creator.pubkey, - global_config: global_config.pubkey, - platform_config: platform_config.pubkey, - authority: authority.pubkey, - pool_state: pool_state.pubkey, - base_mint: base_mint.pubkey, - quote_mint: quote_mint.pubkey, - base_vault: base_vault.pubkey, - quote_vault: quote_vault.pubkey, - metadata_account: metadata_account.pubkey, - base_token_program: base_token_program.pubkey, - quote_token_program: quote_token_program.pubkey, - metadata_program: metadata_program.pubkey, - system_program: system_program.pubkey, - rent_program: rent_program.pubkey, - event_authority: event_authority.pubkey, - program: program.pubkey, + payer, + creator, + global_config, + platform_config, + authority, + pool_state, + base_mint, + quote_mint, + base_vault, + quote_vault, + metadata_account, + base_token_program, + quote_token_program, + metadata_program, + system_program, + rent_program, + event_authority, + program, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/initialize_v2.rs b/decoders/raydium-launchpad-decoder/src/instructions/initialize_v2.rs new file mode 100644 index 000000000..186ec8ec4 --- /dev/null +++ b/decoders/raydium-launchpad-decoder/src/instructions/initialize_v2.rs @@ -0,0 +1,85 @@ +use super::super::types::*; + +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; + +#[derive( + CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, +)] +#[carbon(discriminator = "0x4399af27da102620")] +pub struct InitializeV2 { + pub base_mint_param: MintParams, + pub curve_param: CurveParams, + pub vesting_param: VestingParams, + pub amm_fee_on: AmmCreatorFeeOn, +} + +#[derive(Debug, PartialEq, Eq, Clone, Hash, serde::Serialize, serde::Deserialize)] +pub struct InitializeV2InstructionAccounts { + pub payer: solana_pubkey::Pubkey, + pub creator: solana_pubkey::Pubkey, + pub global_config: solana_pubkey::Pubkey, + pub platform_config: solana_pubkey::Pubkey, + pub authority: solana_pubkey::Pubkey, + pub pool_state: solana_pubkey::Pubkey, + pub base_mint: solana_pubkey::Pubkey, + pub quote_mint: solana_pubkey::Pubkey, + pub base_vault: solana_pubkey::Pubkey, + pub quote_vault: solana_pubkey::Pubkey, + pub metadata_account: solana_pubkey::Pubkey, + pub base_token_program: solana_pubkey::Pubkey, + pub quote_token_program: solana_pubkey::Pubkey, + pub metadata_program: solana_pubkey::Pubkey, + pub system_program: solana_pubkey::Pubkey, + pub rent_program: solana_pubkey::Pubkey, + pub event_authority: solana_pubkey::Pubkey, + pub program: solana_pubkey::Pubkey, +} + +impl carbon_core::deserialize::ArrangeAccounts for InitializeV2 { + type ArrangedAccounts = InitializeV2InstructionAccounts; + + fn arrange_accounts( + accounts: &[solana_instruction::AccountMeta], + ) -> Option { + let mut iter = accounts.iter(); + let payer = next_account(&mut iter)?; + let creator = next_account(&mut iter)?; + let global_config = next_account(&mut iter)?; + let platform_config = next_account(&mut iter)?; + let authority = next_account(&mut iter)?; + let pool_state = next_account(&mut iter)?; + let base_mint = next_account(&mut iter)?; + let quote_mint = next_account(&mut iter)?; + let base_vault = next_account(&mut iter)?; + let quote_vault = next_account(&mut iter)?; + let metadata_account = next_account(&mut iter)?; + let base_token_program = next_account(&mut iter)?; + let quote_token_program = next_account(&mut iter)?; + let metadata_program = next_account(&mut iter)?; + let system_program = next_account(&mut iter)?; + let rent_program = next_account(&mut iter)?; + let event_authority = next_account(&mut iter)?; + let program = next_account(&mut iter)?; + + Some(InitializeV2InstructionAccounts { + payer, + creator, + global_config, + platform_config, + authority, + pool_state, + base_mint, + quote_mint, + base_vault, + quote_vault, + metadata_account, + base_token_program, + quote_token_program, + metadata_program, + system_program, + rent_program, + event_authority, + program, + }) + } +} diff --git a/decoders/raydium-launchpad-decoder/src/instructions/initialize_with_token_2022.rs b/decoders/raydium-launchpad-decoder/src/instructions/initialize_with_token_2022.rs new file mode 100644 index 000000000..22fb42651 --- /dev/null +++ b/decoders/raydium-launchpad-decoder/src/instructions/initialize_with_token_2022.rs @@ -0,0 +1,77 @@ +use super::super::types::*; + +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; + +#[derive( + CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, +)] +#[carbon(discriminator = "0x25be7ede2c9aab11")] +pub struct InitializeWithToken2022 { + pub base_mint_param: MintParams, + pub curve_param: CurveParams, + pub vesting_param: VestingParams, + pub amm_fee_on: AmmCreatorFeeOn, + pub transfer_fee_extension_param: Option, +} + +#[derive(Debug, PartialEq, Eq, Clone, Hash, serde::Serialize, serde::Deserialize)] +pub struct InitializeWithToken2022InstructionAccounts { + pub payer: solana_pubkey::Pubkey, + pub creator: solana_pubkey::Pubkey, + pub global_config: solana_pubkey::Pubkey, + pub platform_config: solana_pubkey::Pubkey, + pub authority: solana_pubkey::Pubkey, + pub pool_state: solana_pubkey::Pubkey, + pub base_mint: solana_pubkey::Pubkey, + pub quote_mint: solana_pubkey::Pubkey, + pub base_vault: solana_pubkey::Pubkey, + pub quote_vault: solana_pubkey::Pubkey, + pub base_token_program: solana_pubkey::Pubkey, + pub quote_token_program: solana_pubkey::Pubkey, + pub system_program: solana_pubkey::Pubkey, + pub event_authority: solana_pubkey::Pubkey, + pub program: solana_pubkey::Pubkey, +} + +impl carbon_core::deserialize::ArrangeAccounts for InitializeWithToken2022 { + type ArrangedAccounts = InitializeWithToken2022InstructionAccounts; + + fn arrange_accounts( + accounts: &[solana_instruction::AccountMeta], + ) -> Option { + let mut iter = accounts.iter(); + let payer = next_account(&mut iter)?; + let creator = next_account(&mut iter)?; + let global_config = next_account(&mut iter)?; + let platform_config = next_account(&mut iter)?; + let authority = next_account(&mut iter)?; + let pool_state = next_account(&mut iter)?; + let base_mint = next_account(&mut iter)?; + let quote_mint = next_account(&mut iter)?; + let base_vault = next_account(&mut iter)?; + let quote_vault = next_account(&mut iter)?; + let base_token_program = next_account(&mut iter)?; + let quote_token_program = next_account(&mut iter)?; + let system_program = next_account(&mut iter)?; + let event_authority = next_account(&mut iter)?; + let program = next_account(&mut iter)?; + + Some(InitializeWithToken2022InstructionAccounts { + payer, + creator, + global_config, + platform_config, + authority, + pool_state, + base_mint, + quote_mint, + base_vault, + quote_vault, + base_token_program, + quote_token_program, + system_program, + event_authority, + program, + }) + } +} diff --git a/decoders/raydium-launchpad-decoder/src/instructions/migrate_to_amm.rs b/decoders/raydium-launchpad-decoder/src/instructions/migrate_to_amm.rs index dbdf3531a..1d414087b 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/migrate_to_amm.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/migrate_to_amm.rs @@ -1,4 +1,4 @@ -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -52,45 +52,73 @@ impl carbon_core::deserialize::ArrangeAccounts for MigrateToAmm { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [payer, base_mint, quote_mint, openbook_program, market, request_queue, event_queue, bids, asks, market_vault_signer, market_base_vault, market_quote_vault, amm_program, amm_pool, amm_authority, amm_open_orders, amm_lp_mint, amm_base_vault, amm_quote_vault, amm_target_orders, amm_config, amm_create_fee_destination, authority, pool_state, global_config, base_vault, quote_vault, pool_lp_token, spl_token_program, associated_token_program, system_program, rent_program, _remaining @ ..] = - accounts - else { - return None; - }; + let mut iter = accounts.iter(); + let payer = next_account(&mut iter)?; + let base_mint = next_account(&mut iter)?; + let quote_mint = next_account(&mut iter)?; + let openbook_program = next_account(&mut iter)?; + let market = next_account(&mut iter)?; + let request_queue = next_account(&mut iter)?; + let event_queue = next_account(&mut iter)?; + let bids = next_account(&mut iter)?; + let asks = next_account(&mut iter)?; + let market_vault_signer = next_account(&mut iter)?; + let market_base_vault = next_account(&mut iter)?; + let market_quote_vault = next_account(&mut iter)?; + let amm_program = next_account(&mut iter)?; + let amm_pool = next_account(&mut iter)?; + let amm_authority = next_account(&mut iter)?; + let amm_open_orders = next_account(&mut iter)?; + let amm_lp_mint = next_account(&mut iter)?; + let amm_base_vault = next_account(&mut iter)?; + let amm_quote_vault = next_account(&mut iter)?; + let amm_target_orders = next_account(&mut iter)?; + let amm_config = next_account(&mut iter)?; + let amm_create_fee_destination = next_account(&mut iter)?; + let authority = next_account(&mut iter)?; + let pool_state = next_account(&mut iter)?; + let global_config = next_account(&mut iter)?; + let base_vault = next_account(&mut iter)?; + let quote_vault = next_account(&mut iter)?; + let pool_lp_token = next_account(&mut iter)?; + let spl_token_program = next_account(&mut iter)?; + let associated_token_program = next_account(&mut iter)?; + let system_program = next_account(&mut iter)?; + let rent_program = next_account(&mut iter)?; Some(MigrateToAmmInstructionAccounts { - payer: payer.pubkey, - base_mint: base_mint.pubkey, - quote_mint: quote_mint.pubkey, - openbook_program: openbook_program.pubkey, - market: market.pubkey, - request_queue: request_queue.pubkey, - event_queue: event_queue.pubkey, - bids: bids.pubkey, - asks: asks.pubkey, - market_vault_signer: market_vault_signer.pubkey, - market_base_vault: market_base_vault.pubkey, - market_quote_vault: market_quote_vault.pubkey, - amm_program: amm_program.pubkey, - amm_pool: amm_pool.pubkey, - amm_authority: amm_authority.pubkey, - amm_open_orders: amm_open_orders.pubkey, - amm_lp_mint: amm_lp_mint.pubkey, - amm_base_vault: amm_base_vault.pubkey, - amm_quote_vault: amm_quote_vault.pubkey, - amm_target_orders: amm_target_orders.pubkey, - amm_config: amm_config.pubkey, - amm_create_fee_destination: amm_create_fee_destination.pubkey, - authority: authority.pubkey, - pool_state: pool_state.pubkey, - global_config: global_config.pubkey, - base_vault: base_vault.pubkey, - quote_vault: quote_vault.pubkey, - pool_lp_token: pool_lp_token.pubkey, - spl_token_program: spl_token_program.pubkey, - associated_token_program: associated_token_program.pubkey, - system_program: system_program.pubkey, - rent_program: rent_program.pubkey, + payer, + base_mint, + quote_mint, + openbook_program, + market, + request_queue, + event_queue, + bids, + asks, + market_vault_signer, + market_base_vault, + market_quote_vault, + amm_program, + amm_pool, + amm_authority, + amm_open_orders, + amm_lp_mint, + amm_base_vault, + amm_quote_vault, + amm_target_orders, + amm_config, + amm_create_fee_destination, + authority, + pool_state, + global_config, + base_vault, + quote_vault, + pool_lp_token, + spl_token_program, + associated_token_program, + system_program, + rent_program, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/migrate_to_cpswap.rs b/decoders/raydium-launchpad-decoder/src/instructions/migrate_to_cpswap.rs index e8332bdb3..c0a43d645 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/migrate_to_cpswap.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/migrate_to_cpswap.rs @@ -1,4 +1,4 @@ -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -44,41 +44,65 @@ impl carbon_core::deserialize::ArrangeAccounts for MigrateToCpswap { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [payer, base_mint, quote_mint, platform_config, cpswap_program, cpswap_pool, cpswap_authority, cpswap_lp_mint, cpswap_base_vault, cpswap_quote_vault, cpswap_config, cpswap_create_pool_fee, cpswap_observation, lock_program, lock_authority, lock_lp_vault, authority, pool_state, global_config, base_vault, quote_vault, pool_lp_token, base_token_program, quote_token_program, associated_token_program, system_program, rent_program, metadata_program, _remaining @ ..] = - accounts - else { - return None; - }; + let mut iter = accounts.iter(); + let payer = next_account(&mut iter)?; + let base_mint = next_account(&mut iter)?; + let quote_mint = next_account(&mut iter)?; + let platform_config = next_account(&mut iter)?; + let cpswap_program = next_account(&mut iter)?; + let cpswap_pool = next_account(&mut iter)?; + let cpswap_authority = next_account(&mut iter)?; + let cpswap_lp_mint = next_account(&mut iter)?; + let cpswap_base_vault = next_account(&mut iter)?; + let cpswap_quote_vault = next_account(&mut iter)?; + let cpswap_config = next_account(&mut iter)?; + let cpswap_create_pool_fee = next_account(&mut iter)?; + let cpswap_observation = next_account(&mut iter)?; + let lock_program = next_account(&mut iter)?; + let lock_authority = next_account(&mut iter)?; + let lock_lp_vault = next_account(&mut iter)?; + let authority = next_account(&mut iter)?; + let pool_state = next_account(&mut iter)?; + let global_config = next_account(&mut iter)?; + let base_vault = next_account(&mut iter)?; + let quote_vault = next_account(&mut iter)?; + let pool_lp_token = next_account(&mut iter)?; + let base_token_program = next_account(&mut iter)?; + let quote_token_program = next_account(&mut iter)?; + let associated_token_program = next_account(&mut iter)?; + let system_program = next_account(&mut iter)?; + let rent_program = next_account(&mut iter)?; + let metadata_program = next_account(&mut iter)?; Some(MigrateToCpswapInstructionAccounts { - payer: payer.pubkey, - base_mint: base_mint.pubkey, - quote_mint: quote_mint.pubkey, - platform_config: platform_config.pubkey, - cpswap_program: cpswap_program.pubkey, - cpswap_pool: cpswap_pool.pubkey, - cpswap_authority: cpswap_authority.pubkey, - cpswap_lp_mint: cpswap_lp_mint.pubkey, - cpswap_base_vault: cpswap_base_vault.pubkey, - cpswap_quote_vault: cpswap_quote_vault.pubkey, - cpswap_config: cpswap_config.pubkey, - cpswap_create_pool_fee: cpswap_create_pool_fee.pubkey, - cpswap_observation: cpswap_observation.pubkey, - lock_program: lock_program.pubkey, - lock_authority: lock_authority.pubkey, - lock_lp_vault: lock_lp_vault.pubkey, - authority: authority.pubkey, - pool_state: pool_state.pubkey, - global_config: global_config.pubkey, - base_vault: base_vault.pubkey, - quote_vault: quote_vault.pubkey, - pool_lp_token: pool_lp_token.pubkey, - base_token_program: base_token_program.pubkey, - quote_token_program: quote_token_program.pubkey, - associated_token_program: associated_token_program.pubkey, - system_program: system_program.pubkey, - rent_program: rent_program.pubkey, - metadata_program: metadata_program.pubkey, + payer, + base_mint, + quote_mint, + platform_config, + cpswap_program, + cpswap_pool, + cpswap_authority, + cpswap_lp_mint, + cpswap_base_vault, + cpswap_quote_vault, + cpswap_config, + cpswap_create_pool_fee, + cpswap_observation, + lock_program, + lock_authority, + lock_lp_vault, + authority, + pool_state, + global_config, + base_vault, + quote_vault, + pool_lp_token, + base_token_program, + quote_token_program, + associated_token_program, + system_program, + rent_program, + metadata_program, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/mod.rs b/decoders/raydium-launchpad-decoder/src/instructions/mod.rs index 1f543d210..5569aaacf 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/mod.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/mod.rs @@ -3,7 +3,9 @@ use crate::PROGRAM_ID; use super::RaydiumLaunchpadDecoder; pub mod buy_exact_in; pub mod buy_exact_out; +pub mod claim_creator_fee; pub mod claim_platform_fee; +pub mod claim_platform_fee_from_vault; pub mod claim_vested_event; pub mod claim_vested_token; pub mod collect_fee; @@ -13,14 +15,18 @@ pub mod create_platform_config; pub mod create_vesting_account; pub mod create_vesting_event; pub mod initialize; +pub mod initialize_v2; +pub mod initialize_with_token_2022; pub mod migrate_to_amm; pub mod migrate_to_cpswap; pub mod pool_create_event; +pub mod remove_platform_curve_param; pub mod sell_exact_in; pub mod sell_exact_out; pub mod trade_event; pub mod update_config; pub mod update_platform_config; +pub mod update_platform_curve_param; #[derive( carbon_core::InstructionType, @@ -35,7 +41,9 @@ pub mod update_platform_config; pub enum RaydiumLaunchpadInstruction { BuyExactIn(buy_exact_in::BuyExactIn), BuyExactOut(buy_exact_out::BuyExactOut), + ClaimCreatorFee(claim_creator_fee::ClaimCreatorFee), ClaimPlatformFee(claim_platform_fee::ClaimPlatformFee), + ClaimPlatformFeeFromVault(claim_platform_fee_from_vault::ClaimPlatformFeeFromVault), ClaimVestedToken(claim_vested_token::ClaimVestedToken), CollectFee(collect_fee::CollectFee), CollectMigrateFee(collect_migrate_fee::CollectMigrateFee), @@ -43,12 +51,16 @@ pub enum RaydiumLaunchpadInstruction { CreatePlatformConfig(create_platform_config::CreatePlatformConfig), CreateVestingAccount(create_vesting_account::CreateVestingAccount), Initialize(initialize::Initialize), + InitializeV2(initialize_v2::InitializeV2), + InitializeWithToken2022(initialize_with_token_2022::InitializeWithToken2022), MigrateToAmm(migrate_to_amm::MigrateToAmm), MigrateToCpswap(migrate_to_cpswap::MigrateToCpswap), + RemovePlatformCurveParam(remove_platform_curve_param::RemovePlatformCurveParam), SellExactIn(sell_exact_in::SellExactIn), SellExactOut(sell_exact_out::SellExactOut), UpdateConfig(update_config::UpdateConfig), UpdatePlatformConfig(update_platform_config::UpdatePlatformConfig), + UpdatePlatformCurveParam(update_platform_curve_param::UpdatePlatformCurveParam), ClaimVestedEvent(claim_vested_event::ClaimVestedEvent), CreateVestingEvent(create_vesting_event::CreateVestingEvent), PoolCreateEvent(pool_create_event::PoolCreateEvent), @@ -69,7 +81,9 @@ impl carbon_core::instruction::InstructionDecoder<'_> for RaydiumLaunchpadDecode carbon_core::try_decode_instructions!(instruction, RaydiumLaunchpadInstruction::BuyExactIn => buy_exact_in::BuyExactIn, RaydiumLaunchpadInstruction::BuyExactOut => buy_exact_out::BuyExactOut, + RaydiumLaunchpadInstruction::ClaimCreatorFee => claim_creator_fee::ClaimCreatorFee, RaydiumLaunchpadInstruction::ClaimPlatformFee => claim_platform_fee::ClaimPlatformFee, + RaydiumLaunchpadInstruction::ClaimPlatformFeeFromVault => claim_platform_fee_from_vault::ClaimPlatformFeeFromVault, RaydiumLaunchpadInstruction::ClaimVestedToken => claim_vested_token::ClaimVestedToken, RaydiumLaunchpadInstruction::CollectFee => collect_fee::CollectFee, RaydiumLaunchpadInstruction::CollectMigrateFee => collect_migrate_fee::CollectMigrateFee, @@ -77,12 +91,16 @@ impl carbon_core::instruction::InstructionDecoder<'_> for RaydiumLaunchpadDecode RaydiumLaunchpadInstruction::CreatePlatformConfig => create_platform_config::CreatePlatformConfig, RaydiumLaunchpadInstruction::CreateVestingAccount => create_vesting_account::CreateVestingAccount, RaydiumLaunchpadInstruction::Initialize => initialize::Initialize, + RaydiumLaunchpadInstruction::InitializeV2 => initialize_v2::InitializeV2, + RaydiumLaunchpadInstruction::InitializeWithToken2022 => initialize_with_token_2022::InitializeWithToken2022, RaydiumLaunchpadInstruction::MigrateToAmm => migrate_to_amm::MigrateToAmm, RaydiumLaunchpadInstruction::MigrateToCpswap => migrate_to_cpswap::MigrateToCpswap, + RaydiumLaunchpadInstruction::RemovePlatformCurveParam => remove_platform_curve_param::RemovePlatformCurveParam, RaydiumLaunchpadInstruction::SellExactIn => sell_exact_in::SellExactIn, RaydiumLaunchpadInstruction::SellExactOut => sell_exact_out::SellExactOut, RaydiumLaunchpadInstruction::UpdateConfig => update_config::UpdateConfig, RaydiumLaunchpadInstruction::UpdatePlatformConfig => update_platform_config::UpdatePlatformConfig, + RaydiumLaunchpadInstruction::UpdatePlatformCurveParam => update_platform_curve_param::UpdatePlatformCurveParam, RaydiumLaunchpadInstruction::ClaimVestedEvent => claim_vested_event::ClaimVestedEvent, RaydiumLaunchpadInstruction::CreateVestingEvent => create_vesting_event::CreateVestingEvent, RaydiumLaunchpadInstruction::PoolCreateEvent => pool_create_event::PoolCreateEvent, diff --git a/decoders/raydium-launchpad-decoder/src/instructions/pool_create_event.rs b/decoders/raydium-launchpad-decoder/src/instructions/pool_create_event.rs index 33d9fb53d..3d45bdf66 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/pool_create_event.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/pool_create_event.rs @@ -13,4 +13,5 @@ pub struct PoolCreateEvent { pub base_mint_param: MintParams, pub curve_param: CurveParams, pub vesting_param: VestingParams, + pub amm_fee_on: AmmCreatorFeeOn, } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/remove_platform_curve_param.rs b/decoders/raydium-launchpad-decoder/src/instructions/remove_platform_curve_param.rs new file mode 100644 index 000000000..6dcc09b98 --- /dev/null +++ b/decoders/raydium-launchpad-decoder/src/instructions/remove_platform_curve_param.rs @@ -0,0 +1,32 @@ +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; + +#[derive( + CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, +)] +#[carbon(discriminator = "0x1b1e3ea95de01891")] +pub struct RemovePlatformCurveParam { + pub index: u8, +} + +#[derive(Debug, PartialEq, Eq, Clone, Hash, serde::Serialize, serde::Deserialize)] +pub struct RemovePlatformCurveParamInstructionAccounts { + pub platform_admin: solana_pubkey::Pubkey, + pub platform_config: solana_pubkey::Pubkey, +} + +impl carbon_core::deserialize::ArrangeAccounts for RemovePlatformCurveParam { + type ArrangedAccounts = RemovePlatformCurveParamInstructionAccounts; + + fn arrange_accounts( + accounts: &[solana_instruction::AccountMeta], + ) -> Option { + let mut iter = accounts.iter(); + let platform_admin = next_account(&mut iter)?; + let platform_config = next_account(&mut iter)?; + + Some(RemovePlatformCurveParamInstructionAccounts { + platform_admin, + platform_config, + }) + } +} diff --git a/decoders/raydium-launchpad-decoder/src/instructions/sell_exact_in.rs b/decoders/raydium-launchpad-decoder/src/instructions/sell_exact_in.rs index f74f3b7b1..4b2b21839 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/sell_exact_in.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/sell_exact_in.rs @@ -1,4 +1,4 @@ -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -35,28 +35,39 @@ impl carbon_core::deserialize::ArrangeAccounts for SellExactIn { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [payer, authority, global_config, platform_config, pool_state, user_base_token, user_quote_token, base_vault, quote_vault, base_token_mint, quote_token_mint, base_token_program, quote_token_program, event_authority, program, _remaining @ ..] = - accounts - else { - return None; - }; + let mut iter = accounts.iter(); + let payer = next_account(&mut iter)?; + let authority = next_account(&mut iter)?; + let global_config = next_account(&mut iter)?; + let platform_config = next_account(&mut iter)?; + let pool_state = next_account(&mut iter)?; + let user_base_token = next_account(&mut iter)?; + let user_quote_token = next_account(&mut iter)?; + let base_vault = next_account(&mut iter)?; + let quote_vault = next_account(&mut iter)?; + let base_token_mint = next_account(&mut iter)?; + let quote_token_mint = next_account(&mut iter)?; + let base_token_program = next_account(&mut iter)?; + let quote_token_program = next_account(&mut iter)?; + let event_authority = next_account(&mut iter)?; + let program = next_account(&mut iter)?; Some(SellExactInInstructionAccounts { - payer: payer.pubkey, - authority: authority.pubkey, - global_config: global_config.pubkey, - platform_config: platform_config.pubkey, - pool_state: pool_state.pubkey, - user_base_token: user_base_token.pubkey, - user_quote_token: user_quote_token.pubkey, - base_vault: base_vault.pubkey, - quote_vault: quote_vault.pubkey, - base_token_mint: base_token_mint.pubkey, - quote_token_mint: quote_token_mint.pubkey, - base_token_program: base_token_program.pubkey, - quote_token_program: quote_token_program.pubkey, - event_authority: event_authority.pubkey, - program: program.pubkey, + payer, + authority, + global_config, + platform_config, + pool_state, + user_base_token, + user_quote_token, + base_vault, + quote_vault, + base_token_mint, + quote_token_mint, + base_token_program, + quote_token_program, + event_authority, + program, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/sell_exact_out.rs b/decoders/raydium-launchpad-decoder/src/instructions/sell_exact_out.rs index b7b1a5427..4cfeafe4b 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/sell_exact_out.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/sell_exact_out.rs @@ -1,4 +1,4 @@ -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -35,28 +35,39 @@ impl carbon_core::deserialize::ArrangeAccounts for SellExactOut { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [payer, authority, global_config, platform_config, pool_state, user_base_token, user_quote_token, base_vault, quote_vault, base_token_mint, quote_token_mint, base_token_program, quote_token_program, event_authority, program, _remaining @ ..] = - accounts - else { - return None; - }; + let mut iter = accounts.iter(); + let payer = next_account(&mut iter)?; + let authority = next_account(&mut iter)?; + let global_config = next_account(&mut iter)?; + let platform_config = next_account(&mut iter)?; + let pool_state = next_account(&mut iter)?; + let user_base_token = next_account(&mut iter)?; + let user_quote_token = next_account(&mut iter)?; + let base_vault = next_account(&mut iter)?; + let quote_vault = next_account(&mut iter)?; + let base_token_mint = next_account(&mut iter)?; + let quote_token_mint = next_account(&mut iter)?; + let base_token_program = next_account(&mut iter)?; + let quote_token_program = next_account(&mut iter)?; + let event_authority = next_account(&mut iter)?; + let program = next_account(&mut iter)?; Some(SellExactOutInstructionAccounts { - payer: payer.pubkey, - authority: authority.pubkey, - global_config: global_config.pubkey, - platform_config: platform_config.pubkey, - pool_state: pool_state.pubkey, - user_base_token: user_base_token.pubkey, - user_quote_token: user_quote_token.pubkey, - base_vault: base_vault.pubkey, - quote_vault: quote_vault.pubkey, - base_token_mint: base_token_mint.pubkey, - quote_token_mint: quote_token_mint.pubkey, - base_token_program: base_token_program.pubkey, - quote_token_program: quote_token_program.pubkey, - event_authority: event_authority.pubkey, - program: program.pubkey, + payer, + authority, + global_config, + platform_config, + pool_state, + user_base_token, + user_quote_token, + base_vault, + quote_vault, + base_token_mint, + quote_token_mint, + base_token_program, + quote_token_program, + event_authority, + program, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/trade_event.rs b/decoders/raydium-launchpad-decoder/src/instructions/trade_event.rs index 9a14d1c52..0f8e7b710 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/trade_event.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/trade_event.rs @@ -19,7 +19,9 @@ pub struct TradeEvent { pub amount_out: u64, pub protocol_fee: u64, pub platform_fee: u64, + pub creator_fee: u64, pub share_fee: u64, pub trade_direction: TradeDirection, pub pool_status: PoolStatus, + pub exact_in: bool, } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/update_config.rs b/decoders/raydium-launchpad-decoder/src/instructions/update_config.rs index 6921659c1..263e1d9d8 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/update_config.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/update_config.rs @@ -1,4 +1,4 @@ -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -21,13 +21,13 @@ impl carbon_core::deserialize::ArrangeAccounts for UpdateConfig { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [owner, global_config, _remaining @ ..] = accounts else { - return None; - }; + let mut iter = accounts.iter(); + let owner = next_account(&mut iter)?; + let global_config = next_account(&mut iter)?; Some(UpdateConfigInstructionAccounts { - owner: owner.pubkey, - global_config: global_config.pubkey, + owner, + global_config, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/update_platform_config.rs b/decoders/raydium-launchpad-decoder/src/instructions/update_platform_config.rs index dfb478162..6ba6af2b2 100644 --- a/decoders/raydium-launchpad-decoder/src/instructions/update_platform_config.rs +++ b/decoders/raydium-launchpad-decoder/src/instructions/update_platform_config.rs @@ -1,6 +1,6 @@ use super::super::types::*; -use carbon_core::{borsh, CarbonDeserialize}; +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; #[derive( CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, @@ -22,13 +22,13 @@ impl carbon_core::deserialize::ArrangeAccounts for UpdatePlatformConfig { fn arrange_accounts( accounts: &[solana_instruction::AccountMeta], ) -> Option { - let [platform_admin, platform_config, _remaining @ ..] = accounts else { - return None; - }; + let mut iter = accounts.iter(); + let platform_admin = next_account(&mut iter)?; + let platform_config = next_account(&mut iter)?; Some(UpdatePlatformConfigInstructionAccounts { - platform_admin: platform_admin.pubkey, - platform_config: platform_config.pubkey, + platform_admin, + platform_config, }) } } diff --git a/decoders/raydium-launchpad-decoder/src/instructions/update_platform_curve_param.rs b/decoders/raydium-launchpad-decoder/src/instructions/update_platform_curve_param.rs new file mode 100644 index 000000000..4b0617f8f --- /dev/null +++ b/decoders/raydium-launchpad-decoder/src/instructions/update_platform_curve_param.rs @@ -0,0 +1,41 @@ +use super::super::types::*; + +use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize}; + +#[derive( + CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, +)] +#[carbon(discriminator = "0x8a908afadc800439")] +pub struct UpdatePlatformCurveParam { + pub index: u8, + pub bonding_curve_param: BondingCurveParam, +} + +#[derive(Debug, PartialEq, Eq, Clone, Hash, serde::Serialize, serde::Deserialize)] +pub struct UpdatePlatformCurveParamInstructionAccounts { + pub platform_admin: solana_pubkey::Pubkey, + pub platform_config: solana_pubkey::Pubkey, + pub global_config: solana_pubkey::Pubkey, + pub system_program: solana_pubkey::Pubkey, +} + +impl carbon_core::deserialize::ArrangeAccounts for UpdatePlatformCurveParam { + type ArrangedAccounts = UpdatePlatformCurveParamInstructionAccounts; + + fn arrange_accounts( + accounts: &[solana_instruction::AccountMeta], + ) -> Option { + let mut iter = accounts.iter(); + let platform_admin = next_account(&mut iter)?; + let platform_config = next_account(&mut iter)?; + let global_config = next_account(&mut iter)?; + let system_program = next_account(&mut iter)?; + + Some(UpdatePlatformCurveParamInstructionAccounts { + platform_admin, + platform_config, + global_config, + system_program, + }) + } +} diff --git a/decoders/raydium-launchpad-decoder/src/types/amm_creator_fee_on.rs b/decoders/raydium-launchpad-decoder/src/types/amm_creator_fee_on.rs new file mode 100644 index 000000000..485a04450 --- /dev/null +++ b/decoders/raydium-launchpad-decoder/src/types/amm_creator_fee_on.rs @@ -0,0 +1,9 @@ +use carbon_core::{borsh, CarbonDeserialize}; + +#[derive( + CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, +)] +pub enum AmmCreatorFeeOn { + QuoteToken, + BothToken, +} diff --git a/decoders/raydium-launchpad-decoder/src/types/bonding_curve_param.rs b/decoders/raydium-launchpad-decoder/src/types/bonding_curve_param.rs new file mode 100644 index 000000000..10a9f0032 --- /dev/null +++ b/decoders/raydium-launchpad-decoder/src/types/bonding_curve_param.rs @@ -0,0 +1,15 @@ +use carbon_core::{borsh, CarbonDeserialize}; + +#[derive( + CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, +)] +pub struct BondingCurveParam { + pub migrate_type: u8, + pub migrate_cpmm_fee_on: u8, + pub supply: u64, + pub total_base_sell: u64, + pub total_quote_fund_raising: u64, + pub total_locked_amount: u64, + pub cliff_period: u64, + pub unlock_period: u64, +} diff --git a/decoders/raydium-launchpad-decoder/src/types/mod.rs b/decoders/raydium-launchpad-decoder/src/types/mod.rs index 7f0261549..0d37f5c62 100644 --- a/decoders/raydium-launchpad-decoder/src/types/mod.rs +++ b/decoders/raydium-launchpad-decoder/src/types/mod.rs @@ -1,3 +1,7 @@ +pub mod amm_creator_fee_on; +pub use amm_creator_fee_on::*; +pub mod bonding_curve_param; +pub use bonding_curve_param::*; pub mod claim_vested_event; pub use claim_vested_event::*; pub mod constant_curve; @@ -18,8 +22,12 @@ pub mod mint_params; pub use mint_params::*; pub mod platform_config; pub use platform_config::*; +pub mod platform_config_info; +pub use platform_config_info::*; pub mod platform_config_param; pub use platform_config_param::*; +pub mod platform_curve_param; +pub use platform_curve_param::*; pub mod platform_params; pub use platform_params::*; pub mod pool_create_event; @@ -32,6 +40,8 @@ pub mod trade_direction; pub use trade_direction::*; pub mod trade_event; pub use trade_event::*; +pub mod transfer_fee_extension_params; +pub use transfer_fee_extension_params::*; pub mod vesting_params; pub use vesting_params::*; pub mod vesting_record; diff --git a/decoders/raydium-launchpad-decoder/src/types/platform_config.rs b/decoders/raydium-launchpad-decoder/src/types/platform_config.rs index ebda77533..69569c56b 100644 --- a/decoders/raydium-launchpad-decoder/src/types/platform_config.rs +++ b/decoders/raydium-launchpad-decoder/src/types/platform_config.rs @@ -1,3 +1,6 @@ +use super::*; + +use alloc::vec::Vec; use carbon_core::{borsh, CarbonDeserialize}; #[derive( @@ -17,6 +20,10 @@ pub struct PlatformConfig { pub web: [u8; 256], #[serde(with = "serde_big_array::BigArray")] pub img: [u8; 256], + pub cpswap_config: solana_pubkey::Pubkey, + pub creator_fee_rate: u64, + pub transfer_fee_extension_auth: solana_pubkey::Pubkey, #[serde(with = "serde_big_array::BigArray")] - pub padding: [u8; 256], + pub padding: [u8; 180], + pub curve_params: Vec, } diff --git a/decoders/raydium-launchpad-decoder/src/types/platform_config_info.rs b/decoders/raydium-launchpad-decoder/src/types/platform_config_info.rs new file mode 100644 index 000000000..4533baf79 --- /dev/null +++ b/decoders/raydium-launchpad-decoder/src/types/platform_config_info.rs @@ -0,0 +1,19 @@ +use super::*; + +use alloc::string::String; +use carbon_core::{borsh, CarbonDeserialize}; + +#[derive( + CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, +)] +pub struct PlatformConfigInfo { + pub fee_wallet: solana_pubkey::Pubkey, + pub nft_wallet: solana_pubkey::Pubkey, + pub migrate_nft_info: MigrateNftInfo, + pub fee_rate: u64, + pub name: String, + pub web: String, + pub img: String, + pub transfer_fee_extension_auth: solana_pubkey::Pubkey, + pub creator_fee_rate: u64, +} diff --git a/decoders/raydium-launchpad-decoder/src/types/platform_config_param.rs b/decoders/raydium-launchpad-decoder/src/types/platform_config_param.rs index 5988687fc..ba8664355 100644 --- a/decoders/raydium-launchpad-decoder/src/types/platform_config_param.rs +++ b/decoders/raydium-launchpad-decoder/src/types/platform_config_param.rs @@ -14,4 +14,6 @@ pub enum PlatformConfigParam { Name(String), Web(String), Img(String), + CpSwapConfig, + AllInfo(PlatformConfigInfo), } diff --git a/decoders/raydium-launchpad-decoder/src/types/platform_curve_param.rs b/decoders/raydium-launchpad-decoder/src/types/platform_curve_param.rs new file mode 100644 index 000000000..eaadb08a8 --- /dev/null +++ b/decoders/raydium-launchpad-decoder/src/types/platform_curve_param.rs @@ -0,0 +1,15 @@ +use super::*; + +use carbon_core::{borsh, CarbonDeserialize}; + +#[derive( + CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, +)] +pub struct PlatformCurveParam { + pub epoch: u64, + pub index: u8, + pub global_config: solana_pubkey::Pubkey, + pub bonding_curve_param: BondingCurveParam, + #[serde(with = "serde_big_array::BigArray")] + pub padding: [u64; 50], +} diff --git a/decoders/raydium-launchpad-decoder/src/types/platform_params.rs b/decoders/raydium-launchpad-decoder/src/types/platform_params.rs index 00276a11d..8048aa953 100644 --- a/decoders/raydium-launchpad-decoder/src/types/platform_params.rs +++ b/decoders/raydium-launchpad-decoder/src/types/platform_params.rs @@ -12,4 +12,5 @@ pub struct PlatformParams { pub name: String, pub web: String, pub img: String, + pub creator_fee_rate: u64, } diff --git a/decoders/raydium-launchpad-decoder/src/types/pool_create_event.rs b/decoders/raydium-launchpad-decoder/src/types/pool_create_event.rs index 9ad1a1cba..dc3bd8e75 100644 --- a/decoders/raydium-launchpad-decoder/src/types/pool_create_event.rs +++ b/decoders/raydium-launchpad-decoder/src/types/pool_create_event.rs @@ -12,4 +12,5 @@ pub struct PoolCreateEvent { pub base_mint_param: MintParams, pub curve_param: CurveParams, pub vesting_param: VestingParams, + pub amm_fee_on: AmmCreatorFeeOn, } diff --git a/decoders/raydium-launchpad-decoder/src/types/pool_state.rs b/decoders/raydium-launchpad-decoder/src/types/pool_state.rs index e817a2035..cf3ee994e 100644 --- a/decoders/raydium-launchpad-decoder/src/types/pool_state.rs +++ b/decoders/raydium-launchpad-decoder/src/types/pool_state.rs @@ -30,5 +30,8 @@ pub struct PoolState { pub base_vault: solana_pubkey::Pubkey, pub quote_vault: solana_pubkey::Pubkey, pub creator: solana_pubkey::Pubkey, - pub padding: [u64; 8], + pub token_program_flag: u8, + pub amm_creator_fee_on: AmmCreatorFeeOn, + #[serde(with = "serde_big_array::BigArray")] + pub padding: [u8; 62], } diff --git a/decoders/raydium-launchpad-decoder/src/types/trade_event.rs b/decoders/raydium-launchpad-decoder/src/types/trade_event.rs index 68e4f95d1..db150936c 100644 --- a/decoders/raydium-launchpad-decoder/src/types/trade_event.rs +++ b/decoders/raydium-launchpad-decoder/src/types/trade_event.rs @@ -18,7 +18,9 @@ pub struct TradeEvent { pub amount_out: u64, pub protocol_fee: u64, pub platform_fee: u64, + pub creator_fee: u64, pub share_fee: u64, pub trade_direction: TradeDirection, pub pool_status: PoolStatus, + pub exact_in: bool, } diff --git a/decoders/raydium-launchpad-decoder/src/types/transfer_fee_extension_params.rs b/decoders/raydium-launchpad-decoder/src/types/transfer_fee_extension_params.rs new file mode 100644 index 000000000..fa9eadff5 --- /dev/null +++ b/decoders/raydium-launchpad-decoder/src/types/transfer_fee_extension_params.rs @@ -0,0 +1,9 @@ +use carbon_core::{borsh, CarbonDeserialize}; + +#[derive( + CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash, +)] +pub struct TransferFeeExtensionParams { + pub transfer_fee_basis_points: u16, + pub maximum_fee: u64, +}