mirror of
https://github.com/0xfnzero/solana-streamer.git
synced 2026-08-20 04:18:06 +00:00
feat: bridge streamer to sol-parser-sdk
This commit is contained in:
@@ -323,7 +323,8 @@ pub fn pumpfun_trade_event_log_decode(data: &[u8]) -> Option<PumpFunTradeEvent>
|
||||
if data.len() < PUMPFUN_TRADE_EVENT_LOG_SIZE {
|
||||
return None;
|
||||
}
|
||||
let mut event = borsh::from_slice::<PumpFunTradeEvent>(&data[..PUMPFUN_TRADE_EVENT_LOG_SIZE]).ok()?;
|
||||
let mut event =
|
||||
borsh::from_slice::<PumpFunTradeEvent>(&data[..PUMPFUN_TRADE_EVENT_LOG_SIZE]).ok()?;
|
||||
let mut offset = PUMPFUN_TRADE_EVENT_LOG_SIZE;
|
||||
if offset < data.len() {
|
||||
let (ix_name, inc) = read_borsh_string(data, offset).unwrap_or((String::new(), 0));
|
||||
@@ -335,7 +336,8 @@ pub fn pumpfun_trade_event_log_decode(data: &[u8]) -> Option<PumpFunTradeEvent>
|
||||
offset += 1;
|
||||
}
|
||||
if offset + 8 <= data.len() {
|
||||
event.cashback_fee_basis_points = u64::from_le_bytes(data[offset..offset + 8].try_into().ok()?);
|
||||
event.cashback_fee_basis_points =
|
||||
u64::from_le_bytes(data[offset..offset + 8].try_into().ok()?);
|
||||
offset += 8;
|
||||
}
|
||||
if offset + 8 <= data.len() {
|
||||
@@ -415,6 +417,138 @@ pub struct PumpFunMigrateEvent {
|
||||
pub program: Pubkey,
|
||||
}
|
||||
|
||||
// ---------- pump-fees IDL: `idls/pump_fees.json` (Program `pfeeUx...`) ----------
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct PumpFeesShareholder {
|
||||
pub address: Pubkey,
|
||||
pub share_bps: u16,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub enum PumpFeesConfigStatus {
|
||||
Paused,
|
||||
Active,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct PumpFeesFees {
|
||||
pub lp_fee_bps: u64,
|
||||
pub protocol_fee_bps: u64,
|
||||
pub creator_fee_bps: u64,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct PumpFeesFeeTier {
|
||||
pub market_cap_lamports_threshold: u128,
|
||||
pub fees: PumpFeesFees,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct PumpFeesCreateFeeSharingConfigEvent {
|
||||
pub metadata: EventMetadata,
|
||||
pub timestamp: i64,
|
||||
pub mint: Pubkey,
|
||||
pub bonding_curve: Pubkey,
|
||||
pub pool: Option<Pubkey>,
|
||||
pub sharing_config: Pubkey,
|
||||
pub admin: Pubkey,
|
||||
pub initial_shareholders: Vec<PumpFeesShareholder>,
|
||||
pub status: PumpFeesConfigStatus,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct PumpFeesInitializeFeeConfigEvent {
|
||||
pub metadata: EventMetadata,
|
||||
pub timestamp: i64,
|
||||
pub admin: Pubkey,
|
||||
pub fee_config: Pubkey,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct PumpFeesResetFeeSharingConfigEvent {
|
||||
pub metadata: EventMetadata,
|
||||
pub timestamp: i64,
|
||||
pub mint: Pubkey,
|
||||
pub sharing_config: Pubkey,
|
||||
pub old_admin: Pubkey,
|
||||
pub old_shareholders: Vec<PumpFeesShareholder>,
|
||||
pub new_admin: Pubkey,
|
||||
pub new_shareholders: Vec<PumpFeesShareholder>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct PumpFeesRevokeFeeSharingAuthorityEvent {
|
||||
pub metadata: EventMetadata,
|
||||
pub timestamp: i64,
|
||||
pub mint: Pubkey,
|
||||
pub sharing_config: Pubkey,
|
||||
pub admin: Pubkey,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct PumpFeesTransferFeeSharingAuthorityEvent {
|
||||
pub metadata: EventMetadata,
|
||||
pub timestamp: i64,
|
||||
pub mint: Pubkey,
|
||||
pub sharing_config: Pubkey,
|
||||
pub old_admin: Pubkey,
|
||||
pub new_admin: Pubkey,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct PumpFeesUpdateAdminEvent {
|
||||
pub metadata: EventMetadata,
|
||||
pub timestamp: i64,
|
||||
pub old_admin: Pubkey,
|
||||
pub new_admin: Pubkey,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct PumpFeesUpdateFeeConfigEvent {
|
||||
pub metadata: EventMetadata,
|
||||
pub timestamp: i64,
|
||||
pub admin: Pubkey,
|
||||
pub fee_config: Pubkey,
|
||||
pub fee_tiers: Vec<PumpFeesFeeTier>,
|
||||
pub flat_fees: PumpFeesFees,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct PumpFeesUpdateFeeSharesEvent {
|
||||
pub metadata: EventMetadata,
|
||||
pub timestamp: i64,
|
||||
pub mint: Pubkey,
|
||||
pub sharing_config: Pubkey,
|
||||
pub admin: Pubkey,
|
||||
#[serde(default)]
|
||||
pub bonding_curve: Pubkey,
|
||||
#[serde(default)]
|
||||
pub pump_creator_vault: Pubkey,
|
||||
pub new_shareholders: Vec<PumpFeesShareholder>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct PumpFeesUpsertFeeTiersEvent {
|
||||
pub metadata: EventMetadata,
|
||||
pub timestamp: i64,
|
||||
pub admin: Pubkey,
|
||||
pub fee_config: Pubkey,
|
||||
pub fee_tiers: Vec<PumpFeesFeeTier>,
|
||||
pub offset: u8,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct PumpFunMigrateBondingCurveCreatorEvent {
|
||||
pub metadata: EventMetadata,
|
||||
pub timestamp: i64,
|
||||
pub mint: Pubkey,
|
||||
pub bonding_curve: Pubkey,
|
||||
pub sharing_config: Pubkey,
|
||||
pub old_creator: Pubkey,
|
||||
pub new_creator: Pubkey,
|
||||
}
|
||||
|
||||
pub const PUMPFUN_MIGRATE_EVENT_LOG_SIZE: usize = 160;
|
||||
|
||||
pub fn pumpfun_migrate_event_log_decode(data: &[u8]) -> Option<PumpFunMigrateEvent> {
|
||||
|
||||
@@ -28,7 +28,9 @@ pub fn parse_pumpfun_instruction_data(
|
||||
parse_create_v2_token_instruction(data, accounts, metadata)
|
||||
}
|
||||
discriminators::BUY_IX => parse_buy_instruction(data, accounts, metadata),
|
||||
discriminators::BUY_EXACT_SOL_IN_IX => parse_buy_exact_sol_in_instruction(data, accounts, metadata),
|
||||
discriminators::BUY_EXACT_SOL_IN_IX => {
|
||||
parse_buy_exact_sol_in_instruction(data, accounts, metadata)
|
||||
}
|
||||
discriminators::SELL_IX => parse_sell_instruction(data, accounts, metadata),
|
||||
discriminators::MIGRATE_IX => parse_migrate_instruction(data, accounts, metadata),
|
||||
_ => None,
|
||||
@@ -320,10 +322,11 @@ fn parse_buy_instruction(
|
||||
/// Same account layout as buy: 16 fixed + optional 17th (index 16).
|
||||
/// Args: spendable_sol_in (SOL), min_tokens_out (token).
|
||||
fn parse_buy_exact_sol_in_instruction(
|
||||
data: &[u8], accounts: &[Pubkey],
|
||||
data: &[u8],
|
||||
accounts: &[Pubkey],
|
||||
mut metadata: EventMetadata,
|
||||
) -> Option<DexEvent> {
|
||||
metadata.event_type = EventType::PumpFunBuy;
|
||||
metadata.event_type = EventType::PumpFunBuyExactSolIn;
|
||||
|
||||
if data.len() < 16 || accounts.len() < 16 {
|
||||
return None;
|
||||
|
||||
@@ -82,7 +82,8 @@ pub struct Global {
|
||||
pub is_cashback_enabled: bool,
|
||||
}
|
||||
|
||||
pub const GLOBAL_SIZE: usize = 1 + 32 * 2 + 8 * 5 + 32 + 1 + 8 * 2 + 32 * 7 + 32 * 2 + 1 + 32 * 2 + 1 + 32 * 7 + 1;
|
||||
pub const GLOBAL_SIZE: usize =
|
||||
1 + 32 * 2 + 8 * 5 + 32 + 1 + 8 * 2 + 32 * 7 + 32 * 2 + 1 + 32 * 2 + 1 + 32 * 7 + 1;
|
||||
|
||||
pub fn global_decode(data: &[u8]) -> Option<Global> {
|
||||
if data.len() < GLOBAL_SIZE {
|
||||
|
||||
Reference in New Issue
Block a user