This commit fixes multiple critical issues found when comparing SDK structures
with the official IDL repository (https://github.com/0xfnzero/solana-program-idls):
1. PumpSwap GlobalConfig
- Add missing reserved_fee_recipients: [Pubkey; 7] field
- Update GLOBAL_CONFIG_SIZE constant
2. PumpFun Global
- Add missing reserved_fee_recipients: [Pubkey; 7] field
- Update GLOBAL_SIZE constant
3. Raydium CPMM AmmConfig
- Add missing creator_fee_rate: u64 field
- Adjust padding from [u64; 16] to [u64; 15]
4. Raydium CPMM PoolState
- Add creator_fee_on: u8 field
- Add enable_creator_fee: bool field
- Add padding1: [u8; 6] field
- Add creator_fees_token_0: u64 field
- Add creator_fees_token_1: u64 field
- Adjust padding from [u64; 31] to [u64; 28]
5. Bonk (Raydium Launchpad) PoolState
- Add AmmCreatorFeeOn enum with borsh discriminant support
- Add token_program_flag: u8 field
- Add amm_creator_fee_on: AmmCreatorFeeOn field
- Add platform_vesting_share: u64 field
- Fix padding from [u64; 8] to [u8; 54] with serde_big_array
- Update POOL_STATE_SIZE constant
6. Bonk (Raydium Launchpad) PlatformConfig
- Add BondingCurveParam and PlatformCurveParam structures
- Fix name from Vec<u8> to [u8; 64] with serde_big_array
- Fix web from Vec<u8> to [u8; 256] with serde_big_array
- Fix img from Vec<u8> to [u8; 256] with serde_big_array
- Add cpswap_config: Pubkey field
- Add creator_fee_rate: u64 field
- Add transfer_fee_extension_auth: Pubkey field
- Add platform_vesting_wallet: Pubkey field
- Add platform_vesting_scale: u64 field
- Add platform_cp_creator: Pubkey field
- Fix padding from Vec<u8> to [u8; 108] with serde_big_array
- Add curve_params: Vec<PlatformCurveParam> field
- Update PLATFORM_CONFIG_SIZE constant
7. PumpSwap buy_exact_quote_in parameter order bug
- Create separate parse_buy_exact_quote_in_instruction function
- Fix parameter parsing order: spendable_quote_in (SOL) first, then min_base_amount_out (token)
- Previous bug: buy_exact_quote_in incorrectly reused parse_buy_instruction which has reversed parameter order
- Add detailed comments explaining the parameter order difference
All changes have been verified against the official IDL files and compile successfully.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
PumpFun and PumpSwap have additional buy instruction variants that were not being parsed:
- PumpFun: `buy_exact_sol_in` (discriminator: [56, 252, 116, 8, 158, 223, 205, 95])
- PumpSwap: `buy_exact_quote_in` (discriminator: [198, 46, 21, 82, 180, 217, 232, 112])
These discriminators are from the official PumpFun IDL:
https://github.com/pump-fun/pump-public-docs/tree/main/idl
Without this fix, approximately 4-5% of trades were being missed.
- Replace instance-based EventParser with static method design
- Introduce ParserCache module for protocol config caching
- Simplify EventProcessor to pure functional handlers
- Optimize metrics: remove min/max tracking, keep last + avg only
- Reduce atomic operations in hot path for better performance
- Convert UnifiedEvent from trait object (Box<dyn UnifiedEvent>) to concrete enum type
- Remove match_event! macro in favor of native match expressions
- Simplify event metadata access: event.event_type() -> event.metadata().event_type
- Unify event callback signatures: Fn(Box<dyn UnifiedEvent>) -> Fn(UnifiedEvent)
- Update all example code to use the new enum-based event system
- Optimize type system to reduce runtime overhead and improve type safety
Affected scope:
- Core event parser and processor
- All protocol event definitions (PumpFun, PumpSwap, Bonk, Raydium series, etc.)
- gRPC and Shred streaming modules
- All example code
- Add requires_inner_instruction field to GenericEventParseConfig
- Skip events that require but lack inner instruction data during processing
- Set PumpFun migrate events to require inner instructions (prevents parsing failed migrations)
- Improve borsh deserialization safety across all protocol decoders
- Add MarketState support for raydium_amm_v4
- Prevent buffer overflow in data decoding operations
- Add account event parser (account_event_parser.rs) for account-level event handling
- Introduce type definitions for pumpfun, pumpswap, raydium_amm_v4, raydium_clmm, raydium_cpmm protocols
- Enhance event processor to support account event processing alongside transactions
- Improve subscription system with separate transaction and account filters
- Optimize parser configuration using Option types for cleaner code structure
- Update examples and documentation to reflect new capabilities
Changes include:
- 6 new types.rs files for protocol-specific data structures
- Updated event processor for account, transaction, and block meta events
- Refactored subscription manager with account filtering support
- Enhanced metrics and batch processing logic
- Refactor streaming architecture with modular grpc components
- Add batch processing system with backpressure strategies
- Implement performance monitoring and metrics collection
- Add multi-protocol parser with block metadata support
- Enhance configuration system with preset profiles
- Add parse_tx_events example and update documentation
- Optimize yellowstone_grpc client complexity
- Bump version to 0.1.11
- Upgrade Solana deps to 2.3.x, yellowstone-grpc to 8.0.0
- Fix inner instruction indexing and timestamp handling
- Improve PumpFun/PumpSwap parser program ID support
This update includes the following improvements:
- Version upgraded to 0.1.5
- Added subscribe_events_v2 API with more granular account filtering
- Marked original subscribe_events API as deprecated
- Fixed bug