diff --git a/Cargo.toml b/Cargo.toml index b2a0524..756229b 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer-sdk" -version = "1.4.12" +version = "1.4.13" edition = "2021" authors = ["William ", "sgxiang ", "wei <1415121722@qq.com>"] repository = "https://github.com/0xfnzero/solana-streamer" @@ -15,13 +15,13 @@ crate-type = ["cdylib", "rlib"] [features] default = ["sdk-parse-borsh"] sdk-parse-borsh = ["sol-parser-sdk/parse-borsh"] -# If both parser backend features are enabled, sol-parser-sdk 0.4.17+ uses zero-copy. +# If both parser backend features are enabled, sol-parser-sdk 0.4.18+ uses zero-copy. sdk-parse-zero-copy = ["sol-parser-sdk/parse-zero-copy"] sdk-perf-stats = ["sol-parser-sdk/perf-stats"] sdk-ultra-perf = ["sol-parser-sdk/ultra-perf"] [dependencies] -sol-parser-sdk = { version = "0.4.17", default-features = false } +sol-parser-sdk = { version = "0.4.18", default-features = false } solana-sdk = "3.0.0" solana-client = "3.1.12" solana-transaction-status = "3.1.12" diff --git a/README.md b/README.md index 9007161..ace6db4 100755 --- a/README.md +++ b/README.md @@ -123,30 +123,34 @@ Add the dependency to your `Cargo.toml`: ```toml # Add to your Cargo.toml -solana-streamer-sdk = { path = "./solana-streamer", version = "1.4.12" } +solana-streamer-sdk = { path = "./solana-streamer", version = "1.4.13" } ``` ### Use crates.io ```toml # Add to your Cargo.toml -solana-streamer-sdk = "1.4.12" +solana-streamer-sdk = "1.4.13" ``` Parser backend features: ```toml # Default: sol-parser-sdk parse-borsh backend -solana-streamer-sdk = "1.4.12" +solana-streamer-sdk = "1.4.13" # Zero-copy parser backend for latency-sensitive bots -solana-streamer-sdk = { version = "1.4.12", default-features = false, features = ["sdk-parse-zero-copy"] } +solana-streamer-sdk = { version = "1.4.13", default-features = false, features = ["sdk-parse-zero-copy"] } ``` -If both `sdk-parse-borsh` and `sdk-parse-zero-copy` are enabled, `sol-parser-sdk 0.4.17+` uses the zero-copy backend. +If both `sdk-parse-borsh` and `sdk-parse-zero-copy` are enabled, `sol-parser-sdk 0.4.18+` uses the zero-copy backend. ## 🔄 Migration Guide +### Upgrading to v1.4.13 + +Version 1.4.13 uses `sol-parser-sdk 0.4.18` and updates Raydium CLMM integration to the official upgraded IDL: current log-side event discriminators, official Swap/Liquidity/Create/Collect layouts, limit-order events, dynamic-fee related events, and the reshaped PoolState/TickState account structs. + ### Upgrading to v1.4.12 Version 1.4.12 uses `sol-parser-sdk 0.4.17` and normalizes legacy PumpFun SOL quote mints to the Solscan SOL sentinel while preserving real USDC quote mints and quote-reserve fields. Streamer bridge and merger paths keep the parser SDK semantics aligned for Yellowstone gRPC and ShredStream output. diff --git a/README_CN.md b/README_CN.md index 37d1233..f52e43b 100644 --- a/README_CN.md +++ b/README_CN.md @@ -122,30 +122,34 @@ git clone https://github.com/0xfnzero/solana-streamer ```toml # 添加到您的 Cargo.toml -solana-streamer-sdk = { path = "./solana-streamer", version = "1.4.12" } +solana-streamer-sdk = { path = "./solana-streamer", version = "1.4.13" } ``` ### 使用 crates.io ```toml # 添加到您的 Cargo.toml -solana-streamer-sdk = "1.4.12" +solana-streamer-sdk = "1.4.13" ``` 解析后端 feature: ```toml # 默认:sol-parser-sdk parse-borsh 后端 -solana-streamer-sdk = "1.4.12" +solana-streamer-sdk = "1.4.13" # 面向低延迟 Bot 的 zero-copy 解析后端 -solana-streamer-sdk = { version = "1.4.12", default-features = false, features = ["sdk-parse-zero-copy"] } +solana-streamer-sdk = { version = "1.4.13", default-features = false, features = ["sdk-parse-zero-copy"] } ``` -如果同时启用 `sdk-parse-borsh` 和 `sdk-parse-zero-copy`,`sol-parser-sdk 0.4.17+` 会优先使用 zero-copy 后端。 +如果同时启用 `sdk-parse-borsh` 和 `sdk-parse-zero-copy`,`sol-parser-sdk 0.4.18+` 会优先使用 zero-copy 后端。 ## 🔄 迁移指南 +### 升级到 v1.4.13 + +v1.4.13 使用 `sol-parser-sdk 0.4.18`,并按 Raydium CLMM 官方升级后 IDL 更新集成:当前 log-side event discriminator、官方 Swap/Liquidity/Create/Collect 事件布局、限价单事件、dynamic fee 相关事件,以及重塑后的 PoolState/TickState 账户结构。 + ### 升级到 v1.4.12 v1.4.12 使用 `sol-parser-sdk 0.4.17`,会把 legacy PumpFun SOL 的 `quote_mint` 归一为 Solscan SOL sentinel,同时保留真实 USDC quote mint 和 quote reserve 字段。Streamer bridge 与 merger 路径继续保持 Yellowstone gRPC 和 ShredStream 输出与 parser SDK 语义一致。 diff --git a/src/streaming/event_parser/common/filter.rs b/src/streaming/event_parser/common/filter.rs index 9f991f8..42c193c 100644 --- a/src/streaming/event_parser/common/filter.rs +++ b/src/streaming/event_parser/common/filter.rs @@ -216,6 +216,15 @@ fn push_streamer_event_sdk_grpc_types(t: &EventType, out: &mut Vec out.push(Sdk::RaydiumClmmClosePosition), St::RaydiumClmmIncreaseLiquidityV2 => out.push(Sdk::RaydiumClmmIncreaseLiquidity), St::RaydiumClmmDecreaseLiquidityV2 => out.push(Sdk::RaydiumClmmDecreaseLiquidity), + St::RaydiumClmmLiquidityChange => out.push(Sdk::RaydiumClmmLiquidityChange), + St::RaydiumClmmConfigChange => out.push(Sdk::RaydiumClmmConfigChange), + St::RaydiumClmmCreatePersonalPosition => out.push(Sdk::RaydiumClmmCreatePersonalPosition), + St::RaydiumClmmLiquidityCalculate => out.push(Sdk::RaydiumClmmLiquidityCalculate), + St::RaydiumClmmOpenLimitOrder => out.push(Sdk::RaydiumClmmOpenLimitOrder), + St::RaydiumClmmIncreaseLimitOrder => out.push(Sdk::RaydiumClmmIncreaseLimitOrder), + St::RaydiumClmmDecreaseLimitOrder => out.push(Sdk::RaydiumClmmDecreaseLimitOrder), + St::RaydiumClmmSettleLimitOrder => out.push(Sdk::RaydiumClmmSettleLimitOrder), + St::RaydiumClmmUpdateRewardInfos => out.push(Sdk::RaydiumClmmUpdateRewardInfos), St::RaydiumClmmCreatePool => out.push(Sdk::RaydiumClmmCreatePool), St::RaydiumClmmOpenPositionWithToken22Nft => { out.push(Sdk::RaydiumClmmOpenPositionWithTokenExtNft) @@ -329,6 +338,15 @@ fn push_protocol_sdk_grpc_event_types(protocol: &Protocol, out: &mut Vec, @@ -143,6 +171,121 @@ pub struct RaydiumClmmIncreaseLiquidityV2Event { pub vault1_mint: Pubkey, } +/// 流动性变化 +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct RaydiumClmmLiquidityChangeEvent { + pub metadata: EventMetadata, + pub pool_state: Pubkey, + pub tick: i32, + pub tick_lower: i32, + pub tick_upper: i32, + pub liquidity_before: u128, + pub liquidity_after: u128, +} + +/// 配置变化 +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct RaydiumClmmConfigChangeEvent { + pub metadata: EventMetadata, + pub index: u16, + pub owner: Pubkey, + pub protocol_fee_rate: u32, + pub trade_fee_rate: u32, + pub tick_spacing: u16, + pub fund_fee_rate: u32, + pub fund_owner: Pubkey, +} + +/// 创建个人仓位 +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct RaydiumClmmCreatePersonalPositionEvent { + pub metadata: EventMetadata, + pub pool_state: Pubkey, + pub minter: Pubkey, + pub nft_owner: Pubkey, + pub tick_lower_index: i32, + pub tick_upper_index: i32, + pub liquidity: u128, + pub deposit_amount_0: u64, + pub deposit_amount_1: u64, + pub deposit_amount_0_transfer_fee: u64, + pub deposit_amount_1_transfer_fee: u64, +} + +/// 流动性计算 +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct RaydiumClmmLiquidityCalculateEvent { + pub metadata: EventMetadata, + pub pool_liquidity: u128, + pub pool_sqrt_price_x64: u128, + pub pool_tick: i32, + pub calc_amount_0: u64, + pub calc_amount_1: u64, + pub trade_fee_owed_0: u64, + pub trade_fee_owed_1: u64, + pub transfer_fee_0: u64, + pub transfer_fee_1: u64, +} + +/// 打开限价单 +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct RaydiumClmmOpenLimitOrderEvent { + pub metadata: EventMetadata, + pub pool_id: Pubkey, + pub limit_order: Pubkey, + pub zero_for_one: bool, + pub tick_index: i32, + pub total_amount: u64, + pub transfer_fee: u64, +} + +/// 增加限价单 +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct RaydiumClmmIncreaseLimitOrderEvent { + pub metadata: EventMetadata, + pub pool_id: Pubkey, + pub limit_order: Pubkey, + pub zero_for_one: bool, + pub tick_index: i32, + pub total_amount: u64, + pub increased_amount: u64, + pub transfer_fee: u64, +} + +/// 减少限价单 +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct RaydiumClmmDecreaseLimitOrderEvent { + pub metadata: EventMetadata, + pub pool_id: Pubkey, + pub limit_order: Pubkey, + pub zero_for_one: bool, + pub tick_index: i32, + pub total_amount: u64, + pub filled_amount: u64, + pub settled_output_amount: u64, + pub decreased_amount: u64, +} + +/// 结算限价单 +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct RaydiumClmmSettleLimitOrderEvent { + pub metadata: EventMetadata, + pub pool_id: Pubkey, + pub limit_order: Pubkey, + pub zero_for_one: bool, + pub tick_index: i32, + pub total_amount: u64, + pub filled_amount: u64, + pub settled_amount_out: u64, +} + +/// 更新奖励信息 +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct RaydiumClmmUpdateRewardInfosEvent { + pub metadata: EventMetadata, + pub reward_growth_global_x64: [u128; 3], +} + /// 打开仓位v2 #[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] pub struct RaydiumClmmOpenPositionWithToken22NftEvent { diff --git a/src/streaming/event_parser/protocols/raydium_clmm/types.rs b/src/streaming/event_parser/protocols/raydium_clmm/types.rs index 61677cb..cde893f 100644 --- a/src/streaming/event_parser/protocols/raydium_clmm/types.rs +++ b/src/streaming/event_parser/protocols/raydium_clmm/types.rs @@ -25,7 +25,7 @@ pub struct RewardInfo { pub end_time: u64, pub last_update_time: u64, pub emissions_per_second_x64: u128, - pub reward_total_emissioned: u64, + pub reward_total_emitted: u64, pub reward_claimed: u64, pub token_mint: Pubkey, pub token_vault: Pubkey, @@ -33,18 +33,50 @@ pub struct RewardInfo { pub reward_growth_global_x64: u128, } +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)] +pub struct DynamicFeeInfo { + pub filter_period: u16, + pub decay_period: u16, + pub reduction_factor: u16, + pub dynamic_fee_control: u32, + pub max_volatility_accumulator: u32, + pub tick_spacing_index_reference: i32, + pub volatility_reference: u32, + pub volatility_accumulator: u32, + pub last_update_timestamp: u64, + #[serde(with = "serde_big_array::BigArray")] + pub padding: [u8; 46], +} + +impl Default for DynamicFeeInfo { + fn default() -> Self { + Self { + filter_period: 0, + decay_period: 0, + reduction_factor: 0, + dynamic_fee_control: 0, + max_volatility_accumulator: 0, + tick_spacing_index_reference: 0, + volatility_reference: 0, + volatility_accumulator: 0, + last_update_timestamp: 0, + padding: [0; 46], + } + } +} + #[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)] pub struct PoolState { pub bump: [u8; 1], pub amm_config: Pubkey, pub owner: Pubkey, - pub token_mint0: Pubkey, - pub token_mint1: Pubkey, - pub token_vault0: Pubkey, - pub token_vault1: Pubkey, + pub token_mint_0: Pubkey, + pub token_mint_1: Pubkey, + pub token_vault_0: Pubkey, + pub token_vault_1: Pubkey, pub observation_key: Pubkey, - pub mint_decimals0: u8, - pub mint_decimals1: u8, + pub mint_decimals_0: u8, + pub mint_decimals_1: u8, pub tick_spacing: u16, pub liquidity: u128, pub sqrt_price_x64: u128, @@ -55,23 +87,19 @@ pub struct PoolState { pub fee_growth_global1_x64: u128, pub protocol_fees_token0: u64, pub protocol_fees_token1: u64, - pub swap_in_amount_token0: u128, - pub swap_out_amount_token1: u128, - pub swap_in_amount_token1: u128, - pub swap_out_amount_token0: u128, + pub padding5: [u128; 4], pub status: u8, - pub padding: [u8; 7], + pub fee_on: u8, + pub padding: [u8; 6], pub reward_infos: [RewardInfo; 3], pub tick_array_bitmap: [u64; 16], - pub total_fees_token0: u64, - pub total_fees_claimed_token0: u64, - pub total_fees_token1: u64, - pub total_fees_claimed_token1: u64, + pub padding6: [u64; 4], pub fund_fees_token0: u64, pub fund_fees_token1: u64, pub open_time: u64, pub recent_epoch: u64, - pub padding1: [u64; 24], + pub dynamic_fee_info: DynamicFeeInfo, + pub padding1: [u64; 14], pub padding2: [u64; 32], } @@ -85,7 +113,11 @@ pub struct TickState { pub fee_growth_outside0_x64: u128, pub fee_growth_outside1_x64: u128, pub reward_growths_outside_x64: [u128; 3], - pub padding: [u32; 13], + pub order_phase: u64, + pub orders_amount: u64, + pub part_filled_orders_remaining: u64, + pub unfilled_ratio_x64: u128, + pub padding: [u32; 3], } impl Default for TickState { @@ -97,7 +129,11 @@ impl Default for TickState { fee_growth_outside0_x64: 0, fee_growth_outside1_x64: 0, reward_growths_outside_x64: [0; 3], - padding: [0; 13], + order_phase: 0, + orders_amount: 0, + part_filled_orders_remaining: 0, + unfilled_ratio_x64: 0, + padding: [0; 3], } } } diff --git a/src/streaming/parser_sdk_bridge/convert.rs b/src/streaming/parser_sdk_bridge/convert.rs index 4df7dcf..dd0f50c 100644 --- a/src/streaming/parser_sdk_bridge/convert.rs +++ b/src/streaming/parser_sdk_bridge/convert.rs @@ -512,6 +512,123 @@ pub(crate) fn convert_parser_event( raydium_clmm_decrease_liquidity_v2_from_parser(e, meta), )) } + PbDexEvent::RaydiumClmmLiquidityChange(e) => { + let meta = adapt_pm( + e.metadata.clone(), + bt, + recv_wall_us, + ProtocolType::RaydiumClmm, + EventType::RaydiumClmmLiquidityChange, + raydium_clmm_program(), + ); + Some(DexEvent::RaydiumClmmLiquidityChangeEvent( + raydium_clmm_liquidity_change_from_parser(e, meta), + )) + } + PbDexEvent::RaydiumClmmConfigChange(e) => { + let meta = adapt_pm( + e.metadata.clone(), + bt, + recv_wall_us, + ProtocolType::RaydiumClmm, + EventType::RaydiumClmmConfigChange, + raydium_clmm_program(), + ); + Some(DexEvent::RaydiumClmmConfigChangeEvent(raydium_clmm_config_change_from_parser( + e, meta, + ))) + } + PbDexEvent::RaydiumClmmCreatePersonalPosition(e) => { + let meta = adapt_pm( + e.metadata.clone(), + bt, + recv_wall_us, + ProtocolType::RaydiumClmm, + EventType::RaydiumClmmCreatePersonalPosition, + raydium_clmm_program(), + ); + Some(DexEvent::RaydiumClmmCreatePersonalPositionEvent( + raydium_clmm_create_personal_position_from_parser(e, meta), + )) + } + PbDexEvent::RaydiumClmmLiquidityCalculate(e) => { + let meta = adapt_pm( + e.metadata.clone(), + bt, + recv_wall_us, + ProtocolType::RaydiumClmm, + EventType::RaydiumClmmLiquidityCalculate, + raydium_clmm_program(), + ); + Some(DexEvent::RaydiumClmmLiquidityCalculateEvent( + raydium_clmm_liquidity_calculate_from_parser(e, meta), + )) + } + PbDexEvent::RaydiumClmmOpenLimitOrder(e) => { + let meta = adapt_pm( + e.metadata.clone(), + bt, + recv_wall_us, + ProtocolType::RaydiumClmm, + EventType::RaydiumClmmOpenLimitOrder, + raydium_clmm_program(), + ); + Some(DexEvent::RaydiumClmmOpenLimitOrderEvent( + raydium_clmm_open_limit_order_from_parser(e, meta), + )) + } + PbDexEvent::RaydiumClmmIncreaseLimitOrder(e) => { + let meta = adapt_pm( + e.metadata.clone(), + bt, + recv_wall_us, + ProtocolType::RaydiumClmm, + EventType::RaydiumClmmIncreaseLimitOrder, + raydium_clmm_program(), + ); + Some(DexEvent::RaydiumClmmIncreaseLimitOrderEvent( + raydium_clmm_increase_limit_order_from_parser(e, meta), + )) + } + PbDexEvent::RaydiumClmmDecreaseLimitOrder(e) => { + let meta = adapt_pm( + e.metadata.clone(), + bt, + recv_wall_us, + ProtocolType::RaydiumClmm, + EventType::RaydiumClmmDecreaseLimitOrder, + raydium_clmm_program(), + ); + Some(DexEvent::RaydiumClmmDecreaseLimitOrderEvent( + raydium_clmm_decrease_limit_order_from_parser(e, meta), + )) + } + PbDexEvent::RaydiumClmmSettleLimitOrder(e) => { + let meta = adapt_pm( + e.metadata.clone(), + bt, + recv_wall_us, + ProtocolType::RaydiumClmm, + EventType::RaydiumClmmSettleLimitOrder, + raydium_clmm_program(), + ); + Some(DexEvent::RaydiumClmmSettleLimitOrderEvent( + raydium_clmm_settle_limit_order_from_parser(e, meta), + )) + } + PbDexEvent::RaydiumClmmUpdateRewardInfos(e) => { + let meta = adapt_pm( + e.metadata.clone(), + bt, + recv_wall_us, + ProtocolType::RaydiumClmm, + EventType::RaydiumClmmUpdateRewardInfos, + raydium_clmm_program(), + ); + Some(DexEvent::RaydiumClmmUpdateRewardInfosEvent( + raydium_clmm_update_reward_infos_from_parser(e, meta), + )) + } PbDexEvent::RaydiumClmmCollectFee(e) => { let meta = adapt_pm( e.metadata.clone(), diff --git a/src/streaming/parser_sdk_bridge/filter.rs b/src/streaming/parser_sdk_bridge/filter.rs index 256d2f5..ab5dff9 100644 --- a/src/streaming/parser_sdk_bridge/filter.rs +++ b/src/streaming/parser_sdk_bridge/filter.rs @@ -88,6 +88,15 @@ fn protocol_matches_event(p: &Protocol, ev: &DexEvent) -> bool { | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmClosePositionEvent(_)) | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmIncreaseLiquidityV2Event(_)) | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmDecreaseLiquidityV2Event(_)) + | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmLiquidityChangeEvent(_)) + | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmConfigChangeEvent(_)) + | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmCreatePersonalPositionEvent(_)) + | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmLiquidityCalculateEvent(_)) + | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmOpenLimitOrderEvent(_)) + | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmIncreaseLimitOrderEvent(_)) + | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmDecreaseLimitOrderEvent(_)) + | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmSettleLimitOrderEvent(_)) + | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmUpdateRewardInfosEvent(_)) | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmCollectFeeEvent(_)) | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmCreatePoolEvent(_)) | (Protocol::RaydiumClmm, DexEvent::RaydiumClmmOpenPositionWithToken22NftEvent(_)) diff --git a/src/streaming/parser_sdk_bridge/raydium_and_damm.rs b/src/streaming/parser_sdk_bridge/raydium_and_damm.rs index bb546cf..866345f 100644 --- a/src/streaming/parser_sdk_bridge/raydium_and_damm.rs +++ b/src/streaming/parser_sdk_bridge/raydium_and_damm.rs @@ -9,10 +9,14 @@ use crate::streaming::event_parser::protocols::raydium_amm_v4::events::{ RaydiumAmmV4WithdrawEvent, RaydiumAmmV4WithdrawPnlEvent, }; use crate::streaming::event_parser::protocols::raydium_clmm::events::{ - RaydiumClmmClosePositionEvent, RaydiumClmmCollectFeeEvent, RaydiumClmmCreatePoolEvent, - RaydiumClmmDecreaseLiquidityV2Event, RaydiumClmmIncreaseLiquidityV2Event, - RaydiumClmmOpenPositionV2Event, RaydiumClmmOpenPositionWithToken22NftEvent, - RaydiumClmmSwapEvent, + RaydiumClmmClosePositionEvent, RaydiumClmmCollectFeeEvent, RaydiumClmmConfigChangeEvent, + RaydiumClmmCreatePersonalPositionEvent, RaydiumClmmCreatePoolEvent, + RaydiumClmmDecreaseLimitOrderEvent, RaydiumClmmDecreaseLiquidityV2Event, + RaydiumClmmIncreaseLimitOrderEvent, RaydiumClmmIncreaseLiquidityV2Event, + RaydiumClmmLiquidityCalculateEvent, RaydiumClmmLiquidityChangeEvent, + RaydiumClmmOpenLimitOrderEvent, RaydiumClmmOpenPositionV2Event, + RaydiumClmmOpenPositionWithToken22NftEvent, RaydiumClmmSettleLimitOrderEvent, + RaydiumClmmSwapEvent, RaydiumClmmUpdateRewardInfosEvent, }; use crate::streaming::event_parser::protocols::raydium_cpmm::events::{ RaydiumCpmmDepositEvent, RaydiumCpmmInitializeEvent, RaydiumCpmmSwapEvent, @@ -320,8 +324,19 @@ pub(crate) fn raydium_clmm_swap_from_parser( other_amount_threshold, sqrt_price_limit_x64: e.sqrt_price_x64, is_base_input: e.zero_for_one, - payer: e.sender, pool_state: e.pool_state, + sender: e.sender, + token_account_0: e.token_account_0, + token_account_1: e.token_account_1, + amount_0: e.amount_0, + transfer_fee_0: e.transfer_fee_0, + amount_1: e.amount_1, + transfer_fee_1: e.transfer_fee_1, + zero_for_one: e.zero_for_one, + sqrt_price_x64: e.sqrt_price_x64, + liquidity: e.liquidity, + tick: e.tick, + payer: e.sender, input_token_account, output_token_account, ..Default::default() @@ -335,11 +350,15 @@ pub(crate) fn raydium_clmm_create_pool_from_parser( RaydiumClmmCreatePoolEvent { metadata: meta, sqrt_price_x64: e.sqrt_price_x64, + tick: e.tick, + tick_spacing: e.tick_spacing, open_time: e.open_time, pool_creator: e.creator, pool_state: e.pool, token_mint0: e.token_0_mint, token_mint1: e.token_1_mint, + token_vault0: e.token_vault_0, + token_vault1: e.token_vault_1, ..Default::default() } } @@ -396,9 +415,14 @@ pub(crate) fn raydium_clmm_increase_liquidity_v2_from_parser( ) -> RaydiumClmmIncreaseLiquidityV2Event { RaydiumClmmIncreaseLiquidityV2Event { metadata: meta, + position_nft_mint: e.position_nft_mint, liquidity: e.liquidity, - amount0_max: e.amount0_max, - amount1_max: e.amount1_max, + amount_0: e.amount_0, + amount_1: e.amount_1, + amount_0_transfer_fee: e.amount_0_transfer_fee, + amount_1_transfer_fee: e.amount_1_transfer_fee, + amount0_max: if e.amount0_max != 0 { e.amount0_max } else { e.amount_0 }, + amount1_max: if e.amount1_max != 0 { e.amount1_max } else { e.amount_1 }, nft_owner: e.user, pool_state: e.pool, ..Default::default() @@ -411,9 +435,17 @@ pub(crate) fn raydium_clmm_decrease_liquidity_v2_from_parser( ) -> RaydiumClmmDecreaseLiquidityV2Event { RaydiumClmmDecreaseLiquidityV2Event { metadata: meta, + position_nft_mint: e.position_nft_mint, liquidity: e.liquidity, - amount0_min: e.amount0_min, - amount1_min: e.amount1_min, + decrease_amount_0: e.decrease_amount_0, + decrease_amount_1: e.decrease_amount_1, + fee_amount_0: e.fee_amount_0, + fee_amount_1: e.fee_amount_1, + reward_amounts: e.reward_amounts, + transfer_fee_0: e.transfer_fee_0, + transfer_fee_1: e.transfer_fee_1, + amount0_min: if e.amount0_min != 0 { e.amount0_min } else { e.decrease_amount_0 }, + amount1_min: if e.amount1_min != 0 { e.amount1_min } else { e.decrease_amount_1 }, nft_owner: e.user, pool_state: e.pool, ..Default::default() @@ -428,11 +460,155 @@ pub(crate) fn raydium_clmm_collect_fee_from_parser( metadata: meta, pool_state: e.pool_state, position_nft_mint: e.position_nft_mint, + recipient_token_account_0: e.recipient_token_account_0, + recipient_token_account_1: e.recipient_token_account_1, amount_0: e.amount_0, amount_1: e.amount_1, } } +pub(crate) fn raydium_clmm_liquidity_change_from_parser( + e: sol_parser_sdk::core::events::RaydiumClmmLiquidityChangeEvent, + meta: EventMetadata, +) -> RaydiumClmmLiquidityChangeEvent { + RaydiumClmmLiquidityChangeEvent { + metadata: meta, + pool_state: e.pool_state, + tick: e.tick, + tick_lower: e.tick_lower, + tick_upper: e.tick_upper, + liquidity_before: e.liquidity_before, + liquidity_after: e.liquidity_after, + } +} + +pub(crate) fn raydium_clmm_config_change_from_parser( + e: sol_parser_sdk::core::events::RaydiumClmmConfigChangeEvent, + meta: EventMetadata, +) -> RaydiumClmmConfigChangeEvent { + RaydiumClmmConfigChangeEvent { + metadata: meta, + index: e.index, + owner: e.owner, + protocol_fee_rate: e.protocol_fee_rate, + trade_fee_rate: e.trade_fee_rate, + tick_spacing: e.tick_spacing, + fund_fee_rate: e.fund_fee_rate, + fund_owner: e.fund_owner, + } +} + +pub(crate) fn raydium_clmm_create_personal_position_from_parser( + e: sol_parser_sdk::core::events::RaydiumClmmCreatePersonalPositionEvent, + meta: EventMetadata, +) -> RaydiumClmmCreatePersonalPositionEvent { + RaydiumClmmCreatePersonalPositionEvent { + metadata: meta, + pool_state: e.pool_state, + minter: e.minter, + nft_owner: e.nft_owner, + tick_lower_index: e.tick_lower_index, + tick_upper_index: e.tick_upper_index, + liquidity: e.liquidity, + deposit_amount_0: e.deposit_amount_0, + deposit_amount_1: e.deposit_amount_1, + deposit_amount_0_transfer_fee: e.deposit_amount_0_transfer_fee, + deposit_amount_1_transfer_fee: e.deposit_amount_1_transfer_fee, + } +} + +pub(crate) fn raydium_clmm_liquidity_calculate_from_parser( + e: sol_parser_sdk::core::events::RaydiumClmmLiquidityCalculateEvent, + meta: EventMetadata, +) -> RaydiumClmmLiquidityCalculateEvent { + RaydiumClmmLiquidityCalculateEvent { + metadata: meta, + pool_liquidity: e.pool_liquidity, + pool_sqrt_price_x64: e.pool_sqrt_price_x64, + pool_tick: e.pool_tick, + calc_amount_0: e.calc_amount_0, + calc_amount_1: e.calc_amount_1, + trade_fee_owed_0: e.trade_fee_owed_0, + trade_fee_owed_1: e.trade_fee_owed_1, + transfer_fee_0: e.transfer_fee_0, + transfer_fee_1: e.transfer_fee_1, + } +} + +pub(crate) fn raydium_clmm_open_limit_order_from_parser( + e: sol_parser_sdk::core::events::RaydiumClmmOpenLimitOrderEvent, + meta: EventMetadata, +) -> RaydiumClmmOpenLimitOrderEvent { + RaydiumClmmOpenLimitOrderEvent { + metadata: meta, + pool_id: e.pool_id, + limit_order: e.limit_order, + zero_for_one: e.zero_for_one, + tick_index: e.tick_index, + total_amount: e.total_amount, + transfer_fee: e.transfer_fee, + } +} + +pub(crate) fn raydium_clmm_increase_limit_order_from_parser( + e: sol_parser_sdk::core::events::RaydiumClmmIncreaseLimitOrderEvent, + meta: EventMetadata, +) -> RaydiumClmmIncreaseLimitOrderEvent { + RaydiumClmmIncreaseLimitOrderEvent { + metadata: meta, + pool_id: e.pool_id, + limit_order: e.limit_order, + zero_for_one: e.zero_for_one, + tick_index: e.tick_index, + total_amount: e.total_amount, + increased_amount: e.increased_amount, + transfer_fee: e.transfer_fee, + } +} + +pub(crate) fn raydium_clmm_decrease_limit_order_from_parser( + e: sol_parser_sdk::core::events::RaydiumClmmDecreaseLimitOrderEvent, + meta: EventMetadata, +) -> RaydiumClmmDecreaseLimitOrderEvent { + RaydiumClmmDecreaseLimitOrderEvent { + metadata: meta, + pool_id: e.pool_id, + limit_order: e.limit_order, + zero_for_one: e.zero_for_one, + tick_index: e.tick_index, + total_amount: e.total_amount, + filled_amount: e.filled_amount, + settled_output_amount: e.settled_output_amount, + decreased_amount: e.decreased_amount, + } +} + +pub(crate) fn raydium_clmm_settle_limit_order_from_parser( + e: sol_parser_sdk::core::events::RaydiumClmmSettleLimitOrderEvent, + meta: EventMetadata, +) -> RaydiumClmmSettleLimitOrderEvent { + RaydiumClmmSettleLimitOrderEvent { + metadata: meta, + pool_id: e.pool_id, + limit_order: e.limit_order, + zero_for_one: e.zero_for_one, + tick_index: e.tick_index, + total_amount: e.total_amount, + filled_amount: e.filled_amount, + settled_amount_out: e.settled_amount_out, + } +} + +pub(crate) fn raydium_clmm_update_reward_infos_from_parser( + e: sol_parser_sdk::core::events::RaydiumClmmUpdateRewardInfosEvent, + meta: EventMetadata, +) -> RaydiumClmmUpdateRewardInfosEvent { + RaydiumClmmUpdateRewardInfosEvent { + metadata: meta, + reward_growth_global_x64: e.reward_growth_global_x64, + } +} + pub(crate) fn meteora_damm_v2_add_liquidity_from_pb( e: sol_parser_sdk::core::events::MeteoraDammV2AddLiquidityEvent, meta: EventMetadata,