in StreamingOrdered mode the slot buffer is fed one event at a time, but every
event parsed from the same transaction carries that transaction's tx_index.
push_streaming bumps the streaming watermark to tx_index + 1 as soon as it
releases the first event, so the rest of that transaction's events have
tx_index < watermark, fall into the "already delivered" branch and get dropped
without any trace.
so any transaction that parses into more than one dex event (a swap route that
touches several pools, a create + buy, and so on) only ever delivered its first
event when order_mode was StreamingOrdered. Unordered, Ordered and MicroBatch
were not affected.
fix:
- push_streaming now takes all events of one (slot, tx_index) as a group so the
watermark advances once per transaction instead of once per event
- the buffered drain advances the watermark per distinct tx_index, since a slot
can now hold several events under the same index
- the ordered buffers use a stable sort so events inside one transaction keep
the order the parser produced them in, sort_unstable could shuffle equal keys
added tests for the multi event transaction case and for releasing buffered out
of order multi event transactions.
clear active_subscription when the yellowstone stream task exits or subscribe fails, so callers are not stuck on "already subscribed" after a disconnect.
replace unwrap/expect in grpc pool parsing with validation and skip malformed account or transaction updates instead of panicking the whole stream.
- 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
- Introduce EventSource enum (Grpc, Shred) for better event source management
- Refactor start_block_processing_thread to conditionally spawn threads based on source type
- Update callers to specify event source type
- Support multiple transaction/account filters as vectors
- Add Token2022 extended state parsing
- Add pumpswap pool monitoring example
- Enhance AccountFilter with memcmp filters
BREAKING CHANGE: API signature changes for subscription methods
- Add SubscriptionHandle for managing stream lifecycle
- Implement graceful shutdown with stop() methods
- Update documentation with new features
- Bump version to 0.3.6
- Add EventTypeFilter for precise event type filtering
- Refactor metrics to track events by type (tx/account/block)
- Add parser caching for improved performance
- Enhance gRPC subscription management
- Update examples and type definitions
- 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
1. Version upgrade: SDK version updated from 0.1.3 to 0.1.4
2. Remove BlockMetaEvent: Delete unnecessary block metadata event type and related code
3. Optimize event handling: Add block_time and block_time_ms fields to each event
4. Code optimization: Improve code formatting and structure
5. Example updates: Update example code and usage instructions in README
- Implement BlockMetaEvent and SDKSystemEventParser
- Support block metadata subscription and processing
- Optimize event handling with separate tokio tasks
- Add commitment parameter support
- Upgrade version to 0.1.3