Merge pull request #1 from 0xfnzero/feat/dlmm_account

Feat/dlmm account
This commit is contained in:
Estereg
2025-12-09 20:19:43 -03:00
committed by GitHub
19 changed files with 1134 additions and 6 deletions
+37 -1
View File
@@ -11,9 +11,11 @@ use crate::streaming::event_parser::{
common::EventMetadata,
core::common_event_parser::{CommonEventParser, COMPUTE_BUDGET_PROGRAM_ID},
protocols::{
bonk::parser as bonk, meteora_damm_v2::parser as meteora_damm_v2, pumpfun::parser as pumpfun,
bonk::parser as bonk, meteora_damm_v2::parser as meteora_damm_v2,
meteora_dlmm::parser as meteora_dlmm, pumpfun::parser as pumpfun,
pumpswap::parser as pumpswap, raydium_amm_v4::parser as raydium_amm_v4,
raydium_clmm::parser as raydium_clmm, raydium_cpmm::parser as raydium_cpmm,
whirlpool::parser as whirlpool,
},
DexEvent, Protocol,
};
@@ -54,6 +56,8 @@ impl EventDispatcher {
Protocol::RaydiumClmm => ProtocolType::RaydiumClmm,
Protocol::RaydiumAmmV4 => ProtocolType::RaydiumAmmV4,
Protocol::MeteoraDammV2 => ProtocolType::MeteoraDammV2,
Protocol::MeteoraDlmm => ProtocolType::MeteoraDlmm,
Protocol::Whirlpool => ProtocolType::Whirlpool,
};
match protocol {
@@ -99,6 +103,14 @@ impl EventDispatcher {
accounts,
metadata,
),
Protocol::MeteoraDlmm => {
// Meteora DLMM 目前不需要解析指令数据,返回 None
None
}
Protocol::Whirlpool => {
// Whirlpool 目前不需要解析指令数据,返回 None
None
}
}
}
@@ -129,6 +141,8 @@ impl EventDispatcher {
Protocol::RaydiumClmm => ProtocolType::RaydiumClmm,
Protocol::RaydiumAmmV4 => ProtocolType::RaydiumAmmV4,
Protocol::MeteoraDammV2 => ProtocolType::MeteoraDammV2,
Protocol::MeteoraDlmm => ProtocolType::MeteoraDlmm,
Protocol::Whirlpool => ProtocolType::Whirlpool,
};
match protocol {
@@ -167,6 +181,14 @@ impl EventDispatcher {
inner_instruction_data,
metadata,
),
Protocol::MeteoraDlmm => {
// Meteora DLMM 目前不需要解析 inner instruction 数据,返回 None
None
}
Protocol::Whirlpool => {
// Whirlpool 目前不需要解析 inner instruction 数据,返回 None
None
}
}
}
@@ -187,6 +209,10 @@ impl EventDispatcher {
Some(Protocol::RaydiumAmmV4)
} else if program_id == &meteora_damm_v2::METEORA_DAMM_V2_PROGRAM_ID {
Some(Protocol::MeteoraDammV2)
} else if program_id == &meteora_dlmm::METEORA_DLMM_PROGRAM_ID {
Some(Protocol::MeteoraDlmm)
} else if program_id == &whirlpool::WHIRLPOOL_PROGRAM_ID {
Some(Protocol::Whirlpool)
} else {
None
}
@@ -225,6 +251,8 @@ impl EventDispatcher {
Protocol::RaydiumClmm => raydium_clmm::RAYDIUM_CLMM_PROGRAM_ID,
Protocol::RaydiumAmmV4 => raydium_amm_v4::RAYDIUM_AMM_V4_PROGRAM_ID,
Protocol::MeteoraDammV2 => meteora_damm_v2::METEORA_DAMM_V2_PROGRAM_ID,
Protocol::MeteoraDlmm => meteora_dlmm::METEORA_DLMM_PROGRAM_ID,
Protocol::Whirlpool => whirlpool::WHIRLPOOL_PROGRAM_ID,
}
}
@@ -261,6 +289,8 @@ impl EventDispatcher {
Protocol::RaydiumClmm => ProtocolType::RaydiumClmm,
Protocol::RaydiumAmmV4 => ProtocolType::RaydiumAmmV4,
Protocol::MeteoraDammV2 => ProtocolType::MeteoraDammV2,
Protocol::MeteoraDlmm => ProtocolType::MeteoraDlmm,
Protocol::Whirlpool => ProtocolType::Whirlpool,
};
match protocol {
@@ -284,6 +314,12 @@ impl EventDispatcher {
// Meteora DAMM 目前不需要解析账户数据,返回 None
None
}
Protocol::MeteoraDlmm => {
meteora_dlmm::parse_meteora_dlmm_account_data(discriminator, account, metadata)
}
Protocol::Whirlpool => {
whirlpool::parse_whirlpool_account_data(discriminator, account, metadata)
}
}
}
}
+15
View File
@@ -8,11 +8,13 @@ use crate::streaming::event_parser::core::common_event_parser::{
use crate::streaming::event_parser::protocols::block::block_meta_event::BlockMetaEvent;
use crate::streaming::event_parser::protocols::bonk::events::*;
use crate::streaming::event_parser::protocols::meteora_damm_v2::events::*;
use crate::streaming::event_parser::protocols::meteora_dlmm::events::*;
use crate::streaming::event_parser::protocols::pumpfun::events::*;
use crate::streaming::event_parser::protocols::pumpswap::events::*;
use crate::streaming::event_parser::protocols::raydium_amm_v4::events::*;
use crate::streaming::event_parser::protocols::raydium_clmm::events::*;
use crate::streaming::event_parser::protocols::raydium_cpmm::events::*;
use crate::streaming::event_parser::protocols::whirlpool::events::*;
use serde::{Deserialize, Serialize};
use std::fmt::Debug;
@@ -65,6 +67,7 @@ pub enum DexEvent {
RaydiumClmmAmmConfigAccountEvent(RaydiumClmmAmmConfigAccountEvent),
RaydiumClmmPoolStateAccountEvent(RaydiumClmmPoolStateAccountEvent),
RaydiumClmmTickArrayStateAccountEvent(RaydiumClmmTickArrayStateAccountEvent),
RaydiumClmmTickArrayBitmapExtensionAccountEvent(RaydiumClmmTickArrayBitmapExtensionAccountEvent),
// Raydium CPMM events
RaydiumCpmmSwapEvent(RaydiumCpmmSwapEvent),
@@ -81,6 +84,12 @@ pub enum DexEvent {
MeteoraDammV2InitializeCustomizablePoolEvent(MeteoraDammV2InitializeCustomizablePoolEvent),
MeteoraDammV2InitializePoolWithDynamicConfigEvent(MeteoraDammV2InitializePoolWithDynamicConfigEvent),
// Meteora DLMM events
MeteoraDlmmLbPairAccountEvent(MeteoraDlmmLbPairAccountEvent),
// Whirlpool events
WhirlpoolAccountEvent(WhirlpoolAccountEvent),
// Common events
TokenAccountEvent(TokenAccountEvent),
NonceAccountEvent(NonceAccountEvent),
@@ -130,6 +139,7 @@ impl DexEvent {
DexEvent::RaydiumClmmAmmConfigAccountEvent(e) => &e.metadata,
DexEvent::RaydiumClmmPoolStateAccountEvent(e) => &e.metadata,
DexEvent::RaydiumClmmTickArrayStateAccountEvent(e) => &e.metadata,
DexEvent::RaydiumClmmTickArrayBitmapExtensionAccountEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmSwapEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmDepositEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmWithdrawEvent(e) => &e.metadata,
@@ -141,6 +151,8 @@ impl DexEvent {
DexEvent::MeteoraDammV2InitializePoolEvent(e) => &e.metadata,
DexEvent::MeteoraDammV2InitializeCustomizablePoolEvent(e) => &e.metadata,
DexEvent::MeteoraDammV2InitializePoolWithDynamicConfigEvent(e) => &e.metadata,
DexEvent::MeteoraDlmmLbPairAccountEvent(e) => &e.metadata,
DexEvent::WhirlpoolAccountEvent(e) => &e.metadata,
DexEvent::TokenAccountEvent(e) => &e.metadata,
DexEvent::NonceAccountEvent(e) => &e.metadata,
DexEvent::TokenInfoEvent(e) => &e.metadata,
@@ -189,6 +201,7 @@ impl DexEvent {
DexEvent::RaydiumClmmAmmConfigAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmPoolStateAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmTickArrayStateAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmTickArrayBitmapExtensionAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmSwapEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmDepositEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmWithdrawEvent(e) => &mut e.metadata,
@@ -200,6 +213,8 @@ impl DexEvent {
DexEvent::MeteoraDammV2InitializePoolEvent(e) => &mut e.metadata,
DexEvent::MeteoraDammV2InitializeCustomizablePoolEvent(e) => &mut e.metadata,
DexEvent::MeteoraDammV2InitializePoolWithDynamicConfigEvent(e) => &mut e.metadata,
DexEvent::MeteoraDlmmLbPairAccountEvent(e) => &mut e.metadata,
DexEvent::WhirlpoolAccountEvent(e) => &mut e.metadata,
DexEvent::TokenAccountEvent(e) => &mut e.metadata,
DexEvent::NonceAccountEvent(e) => &mut e.metadata,
DexEvent::TokenInfoEvent(e) => &mut e.metadata,