sol-parser-sdk 0.5.8

A lightweight Rust library for real-time event streaming from Solana DEX trading programs. Supports PumpFun, PumpSwap, Raydium LaunchLab, and Raydium protocols with Yellowstone gRPC and ShredStream.
Documentation
# Non-Pump DEX Gap Analysis

Date: 2026-05-30

## Scope

This audit keeps `sol-parser-sdk` as the runtime architecture and uses
`Shyft-to/solana-defi` only as a development oracle: IDL references, sample
transactions/accounts, and scenario fixtures for golden tests.

First-stage scope is Raydium, Orca, and Meteora. Fluxbeam, Moonshot, Jupiter,
Defi API examples, and bot examples remain out of core SDK scope.

## Canonical Baseline

The cross-language baseline lives at `protocols/canonical.json`.

Confirmed program-id baseline:

| Protocol | Program id | Notes |
| --- | --- | --- |
| PumpFun | `6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P` | Existing |
| PumpSwap | `pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA` | Existing |
| PumpFees | `pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ` | Rust existed, other languages needed parity |
| RaydiumLaunchlab | `LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj` | Canonical `RaydiumLaunchlab*` event names |
| Raydium CPMM | `CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C` | Existing |
| Raydium CLMM | `CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK` | Node/Python/Go had stale variants |
| Raydium AMM V4 | `675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8` | Existing |
| Orca Whirlpool | `whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc` | Rust existed, Node/Python partial |
| Meteora Pools | `Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB` | Rust existed, Node/Python partial |
| Meteora DAMM V2 | `cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG` | Existing |
| Meteora DLMM | `LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo` | Rust existed, Node/Python partial |
| Meteora DBC | `dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN` | New protocol baseline, parser pending |

## Shyft Strengths To Borrow

### Raydium

Shyft has good scenario coverage for:

- LaunchLab migration and LaunchLab buy/sell direction examples.
- CPMM new pool and token price examples.
- CLMM new pool, token price, Token-2022 and v2 instruction variants.
- Account streaming examples for AMM V4, CPMM, CLMM, and LaunchLab.

SDK gaps:

- Rust has broad Raydium log/instruction coverage, but golden tests should be
  pinned against Shyft fixtures for LaunchLab migration, CPMM new pool, and CLMM
  token price.
- LaunchLab account parsing is still missing from `parse_account_unified`.
- Node/Python/Go had program-id drift for LaunchLab and Raydium CLMM.

### Orca Whirlpool

Shyft has useful Whirlpool account-update and transaction examples, especially
for Whirlpool, Position, TickArray, FeeTier, Config and V2/adaptive-fee paths.

SDK gaps:

- Rust recognizes core Whirlpool transaction events, but account parsers for
  Whirlpool, Position, TickArray, FeeTier and Config are still missing.
- V2/Token Extension/adaptive fee instruction variants need explicit fixture
  coverage before claiming accuracy parity.
- Node/Python protocol tables did not expose Orca Whirlpool in the same way as
  Rust.

### Meteora

Shyft has the strongest useful coverage for Meteora:

- DAMM V2 accounts, new pools, token price and buy/sell examples.
- DLMM accounts and transactions.
- Pools account and transaction examples.
- DBC virtual pool, new minted tokens, migration and token price examples.

SDK gaps:

- Rust supports Pools/DAMM V2/DLMM transaction events, but account parsers are
  still mostly absent.
- Meteora DBC was absent as an SDK protocol baseline and needs parser work for
  swap, virtual-pool initialization, curve complete and migration.
- Golden fixtures should compare key fields only: program id, event type,
  signature, pool, mints, vaults, user, raw amounts, u128/sqrt price as decimal
  strings, and normalized buy/sell direction.

## Completed In First Pass

- Added `protocols/canonical.json` as the protocol/program-id/discriminator
  baseline.
- Added `Protocol::MeteoraDbc` and the Meteora DBC program id to Rust gRPC and
  instruction constants.
- Added a Rust program-aware Meteora DBC log parser for `EvtSwap`,
  `EvtInitializePool` and `EvtCurveComplete`; migration/account parsing remains
  pending.
- Added Rust account parsers for Raydium CPMM `AmmConfig` / `PoolState` and
  Orca Whirlpool `Whirlpool`, `Position`, `TickArray`, `FeeTier` and
  `WhirlpoolsConfig`; Node/Python/Go now expose the corresponding account event
  type constants.
- Planned parity updates for Node/Python/Go protocol tables to match Rust.
- Added market helper direction and price formulas as additive APIs.
- Added lightweight examples for the requested non-Pump scenarios.

## Pending Parser Work

These items need deeper parser implementation and golden fixtures:

1. Raydium LaunchLab account parser: pool/config/vesting/migration state.
2. Raydium CPMM golden fixtures: pool/config/vault state for new pool detection.
3. Orca Whirlpool golden fixtures plus remaining account variants: adaptive fee
   tier and token badge.
4. Meteora Pools/DAMM V2/DLMM account parser: pool, bin array, position and
   fee/config accounts.
5. Meteora DBC transaction parser: swap, initialize virtual pool, curve complete
   and migrations.
6. Meteora DBC account parser: VirtualPool, PoolConfig and Config.
7. Cross-language golden fixture runner: Rust is source of truth; Node, Python
   and Go should compare JSON output against the same fixture set.

## Test Strategy

- Use Shyft examples as fixture/oracle sources, not runtime dependencies.
- Store small sanitized fixtures in the SDK repos and compare only fields that
  are semantically stable across languages.
- Keep u64/u128 and BigInt fields as decimal strings in JSON.
- Gate real gRPC smoke tests behind environment variables. Default CI should
  run deterministic golden and parity tests only.
- Keep all PumpFun/PumpSwap regression tests in place to protect latency,
  deduplication and existing event naming.

## ShredStream Note

ShredStream parsing remains constrained by available transaction account keys.
For V0/ALT transactions, parser output can be incomplete until loaded addresses
are available. The recommended path is:

1. Parse what can be determined directly from the ShredStream transaction.
2. Use RPC/Yellostone transaction completion for V0/ALT loaded addresses.
3. Re-run the same Rust source-of-truth parser so JSON output stays identical.