Date: 2026-05-30
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.
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 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.
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.
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.
- Added
protocols/canonical.jsonas the protocol/program-id/discriminator baseline. - Added
Protocol::MeteoraDbcand the Meteora DBC program id to Rust gRPC and instruction constants. - Added a Rust program-aware Meteora DBC log parser for
EvtSwap,EvtInitializePoolandEvtCurveComplete; migration/account parsing remains pending. - Added Rust account parsers for Raydium CPMM
AmmConfig/PoolStateand Orca WhirlpoolWhirlpool,Position,TickArray,FeeTierandWhirlpoolsConfig; 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.
These items need deeper parser implementation and golden fixtures:
- Raydium LaunchLab account parser: pool/config/vesting/migration state.
- Raydium CPMM golden fixtures: pool/config/vault state for new pool detection.
- Orca Whirlpool golden fixtures plus remaining account variants: adaptive fee tier and token badge.
- Meteora Pools/DAMM V2/DLMM account parser: pool, bin array, position and fee/config accounts.
- Meteora DBC transaction parser: swap, initialize virtual pool, curve complete and migrations.
- Meteora DBC account parser: VirtualPool, PoolConfig and Config.
- Cross-language golden fixture runner: Rust is source of truth; Node, Python and Go should compare JSON output against the same fixture set.
- 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 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:
- Parse what can be determined directly from the ShredStream transaction.
- Use RPC/Yellostone transaction completion for V0/ALT loaded addresses.
- Re-run the same Rust source-of-truth parser so JSON output stays identical.