Integrate Raydium CLMM upgraded parser events

This commit is contained in:
0xfnzero
2026-05-25 23:06:44 +08:00
parent 0875ec1a9d
commit 983aedf27c
11 changed files with 585 additions and 42 deletions
+3 -3
View File
@@ -1,6 +1,6 @@
[package]
name = "solana-streamer-sdk"
version = "1.4.12"
version = "1.4.13"
edition = "2021"
authors = ["William <byteblock6@gmail.com>", "sgxiang <sgxiang@gmail.com>", "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"
+9 -5
View File
@@ -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.
+9 -5
View File
@@ -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 语义一致。
@@ -216,6 +216,15 @@ fn push_streamer_event_sdk_grpc_types(t: &EventType, out: &mut Vec<SdkGrpcEventT
St::RaydiumClmmClosePosition => 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<SdkGrpc
Sdk::RaydiumClmmClosePosition,
Sdk::RaydiumClmmIncreaseLiquidity,
Sdk::RaydiumClmmDecreaseLiquidity,
Sdk::RaydiumClmmLiquidityChange,
Sdk::RaydiumClmmConfigChange,
Sdk::RaydiumClmmCreatePersonalPosition,
Sdk::RaydiumClmmLiquidityCalculate,
Sdk::RaydiumClmmOpenLimitOrder,
Sdk::RaydiumClmmIncreaseLimitOrder,
Sdk::RaydiumClmmDecreaseLimitOrder,
Sdk::RaydiumClmmSettleLimitOrder,
Sdk::RaydiumClmmUpdateRewardInfos,
Sdk::RaydiumClmmOpenPositionWithTokenExtNft,
Sdk::RaydiumClmmCollectFee,
]),
@@ -611,6 +629,15 @@ mod tests {
EventType::RaydiumClmmClosePosition,
EventType::RaydiumClmmIncreaseLiquidityV2,
EventType::RaydiumClmmDecreaseLiquidityV2,
EventType::RaydiumClmmLiquidityChange,
EventType::RaydiumClmmConfigChange,
EventType::RaydiumClmmCreatePersonalPosition,
EventType::RaydiumClmmLiquidityCalculate,
EventType::RaydiumClmmOpenLimitOrder,
EventType::RaydiumClmmIncreaseLimitOrder,
EventType::RaydiumClmmDecreaseLimitOrder,
EventType::RaydiumClmmSettleLimitOrder,
EventType::RaydiumClmmUpdateRewardInfos,
EventType::RaydiumClmmCreatePool,
EventType::RaydiumClmmOpenPositionWithToken22Nft,
EventType::RaydiumClmmOpenPositionV2,
@@ -120,6 +120,15 @@ pub enum EventType {
RaydiumClmmClosePosition,
RaydiumClmmIncreaseLiquidityV2,
RaydiumClmmDecreaseLiquidityV2,
RaydiumClmmLiquidityChange,
RaydiumClmmConfigChange,
RaydiumClmmCreatePersonalPosition,
RaydiumClmmLiquidityCalculate,
RaydiumClmmOpenLimitOrder,
RaydiumClmmIncreaseLimitOrder,
RaydiumClmmDecreaseLimitOrder,
RaydiumClmmSettleLimitOrder,
RaydiumClmmUpdateRewardInfos,
RaydiumClmmCreatePool,
RaydiumClmmOpenPositionWithToken22Nft,
RaydiumClmmOpenPositionV2,
+18
View File
@@ -83,6 +83,15 @@ pub enum DexEvent {
RaydiumClmmClosePositionEvent(RaydiumClmmClosePositionEvent),
RaydiumClmmIncreaseLiquidityV2Event(RaydiumClmmIncreaseLiquidityV2Event),
RaydiumClmmDecreaseLiquidityV2Event(RaydiumClmmDecreaseLiquidityV2Event),
RaydiumClmmLiquidityChangeEvent(RaydiumClmmLiquidityChangeEvent),
RaydiumClmmConfigChangeEvent(RaydiumClmmConfigChangeEvent),
RaydiumClmmCreatePersonalPositionEvent(RaydiumClmmCreatePersonalPositionEvent),
RaydiumClmmLiquidityCalculateEvent(RaydiumClmmLiquidityCalculateEvent),
RaydiumClmmOpenLimitOrderEvent(RaydiumClmmOpenLimitOrderEvent),
RaydiumClmmIncreaseLimitOrderEvent(RaydiumClmmIncreaseLimitOrderEvent),
RaydiumClmmDecreaseLimitOrderEvent(RaydiumClmmDecreaseLimitOrderEvent),
RaydiumClmmSettleLimitOrderEvent(RaydiumClmmSettleLimitOrderEvent),
RaydiumClmmUpdateRewardInfosEvent(RaydiumClmmUpdateRewardInfosEvent),
RaydiumClmmCollectFeeEvent(RaydiumClmmCollectFeeEvent),
RaydiumClmmCreatePoolEvent(RaydiumClmmCreatePoolEvent),
RaydiumClmmOpenPositionWithToken22NftEvent(RaydiumClmmOpenPositionWithToken22NftEvent),
@@ -214,6 +223,15 @@ impl_dex_event_metadata!(
RaydiumClmmClosePositionEvent,
RaydiumClmmIncreaseLiquidityV2Event,
RaydiumClmmDecreaseLiquidityV2Event,
RaydiumClmmLiquidityChangeEvent,
RaydiumClmmConfigChangeEvent,
RaydiumClmmCreatePersonalPositionEvent,
RaydiumClmmLiquidityCalculateEvent,
RaydiumClmmOpenLimitOrderEvent,
RaydiumClmmIncreaseLimitOrderEvent,
RaydiumClmmDecreaseLimitOrderEvent,
RaydiumClmmSettleLimitOrderEvent,
RaydiumClmmUpdateRewardInfosEvent,
RaydiumClmmCollectFeeEvent,
RaydiumClmmCreatePoolEvent,
RaydiumClmmOpenPositionWithToken22NftEvent,
@@ -12,9 +12,20 @@ pub struct RaydiumClmmSwapEvent {
pub other_amount_threshold: u64,
pub sqrt_price_limit_x64: u128,
pub is_base_input: bool,
pub pool_state: Pubkey,
pub sender: Pubkey,
pub token_account_0: Pubkey,
pub token_account_1: Pubkey,
pub amount_0: u64,
pub transfer_fee_0: u64,
pub amount_1: u64,
pub transfer_fee_1: u64,
pub zero_for_one: bool,
pub sqrt_price_x64: u128,
pub liquidity: u128,
pub tick: i32,
pub payer: Pubkey,
pub amm_config: Pubkey,
pub pool_state: Pubkey,
pub input_token_account: Pubkey,
pub output_token_account: Pubkey,
pub input_vault: Pubkey,
@@ -65,7 +76,15 @@ pub struct RaydiumClmmClosePositionEvent {
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct RaydiumClmmDecreaseLiquidityV2Event {
pub metadata: EventMetadata,
pub position_nft_mint: Pubkey,
pub liquidity: u128,
pub decrease_amount_0: u64,
pub decrease_amount_1: u64,
pub fee_amount_0: u64,
pub fee_amount_1: u64,
pub reward_amounts: [u64; 3],
pub transfer_fee_0: u64,
pub transfer_fee_1: u64,
pub amount0_min: u64,
pub amount1_min: u64,
pub nft_owner: Pubkey,
@@ -93,6 +112,8 @@ pub struct RaydiumClmmCollectFeeEvent {
pub metadata: EventMetadata,
pub pool_state: Pubkey,
pub position_nft_mint: Pubkey,
pub recipient_token_account_0: Pubkey,
pub recipient_token_account_1: Pubkey,
pub amount_0: u64,
pub amount_1: u64,
}
@@ -102,6 +123,8 @@ pub struct RaydiumClmmCollectFeeEvent {
pub struct RaydiumClmmCreatePoolEvent {
pub metadata: EventMetadata,
pub sqrt_price_x64: u128,
pub tick: i32,
pub tick_spacing: u16,
pub open_time: u64,
pub pool_creator: Pubkey,
pub amm_config: Pubkey,
@@ -122,7 +145,12 @@ pub struct RaydiumClmmCreatePoolEvent {
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct RaydiumClmmIncreaseLiquidityV2Event {
pub metadata: EventMetadata,
pub position_nft_mint: Pubkey,
pub liquidity: u128,
pub amount_0: u64,
pub amount_1: u64,
pub amount_0_transfer_fee: u64,
pub amount_1_transfer_fee: u64,
pub amount0_max: u64,
pub amount1_max: u64,
pub base_flag: Option<bool>,
@@ -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 {
@@ -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],
}
}
}
+117
View File
@@ -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(),
@@ -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(_))
@@ -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,