Crates.io | substreams-solana-idls |
lib.rs | substreams-solana-idls |
version | 0.5.5 |
created_at | 2025-06-23 02:13:33.604676+00 |
updated_at | 2025-09-13 18:02:36.324824+00 |
description | Type-safe Solana IDLs & instruction/event decoders for Substreams modules. |
homepage | |
repository | |
max_upload_size | |
id | 1722102 |
size | 2,798,143 |
Type‑safe instruction & event decoders for any Solana program you want to index with Substreams.
This crate bundles thin, no_std
‑friendly byte‑codecs that turn on‑chain instruction and event byte arrays into well‑typed Rust enums & structs, ready for use inside Substreams modules.
Status | Ecosystem | Protocol / App | Program ID |
---|---|---|---|
✅ | Pump.fun | Bonding‑Curve | 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P |
✅ | Pump.fun | PumpSwap AMM | pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA |
✅ | Jupiter | Swap Aggregator V6 | JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 |
✅ | Jupiter | Swap Aggregator V4 | JUP4Fb2cqiRUcaTHdrPC8h2gNsA2ETXiPDD33WcGuJB |
✅ | Raydium | AMM V4 | 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 |
✅ | Raydium | AMM CP | CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C |
✅ | Raydium | CLMM V3 | CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK |
✅ | Raydium | LaunchPad | LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj |
✅ | Stabble | Stable Swap | swapNyd8XiQwJ6ianp9snpu4brUqFxadzvHebnAXjJZ |
✅ | Orca | Whirlpool (CLMM) | whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc |
✅ | Meteora | Pools | Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB |
✅ | Meteora | DAMM V2 | cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG |
✅ | Meteora | DLLM | LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo |
✅ | BonkSwap | AMM | BSwp6bEBihVLdqJRKGgzjcGLHkcTuzmSo1TQkHepzH8p |
✅ | Raydium | Stable AMM Anchor | 5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h |
✅ | Jupiter | Limit Order | jupoNjAxXgZ4rjzxzPMP4oxduvQsQtZzyknqvzYNrNu |
✅ | Jupiter | DCA | DCA265Vj8a9CEuX1eb1LWRnDT7uK6q1xMipnNyatn23M |
✅ | Phoenix | on-chain CLOB | PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY |
❌ | DFlow | Swap Aggregator V4 | DF1ow4tspfHX9JwWJsAb9epbkA8hmpSEAtxXy1V27QBH |
❌ | Saros | AMM Swap | SSwapUtytfBdBn1b9NUGG6foMVPtcWgpRU32HToDUZr |
❌ | PancakeSwap | AMM Swap | HpNfyc2Saw7RKkQd8nEL4khUcuPhQ7WwY1B2qjx8jxFq |
❌ | OKX DEX | Aggregation Router V2 | 6m2CDdhRgxpH4WjvdzxAYbGxwdGUz5MziiL5jek2kBma |
❌ | SolFi | Swap | SoLFiHG9TfgtdUXUjWAxi3LtvYuFyDLVhBWxdMZxyCe |
| 💀 | Orca | Token Swap ("Classic") | 9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP
|
Legend ✅ done · 🚧 in progress · ❌ planned / help wanted · 💀 no IDL
Want another program supported? Open an issue or PR with the program ID and IDL link.
substreams_solana_idls::
├── <protocol>::PROGRAM_ID // Program ID constant
├── <protocol>::instructions // Instruction enum + `unpack(&[u8])`
├── <protocol>::accounts // Account structs + `get_*_accounts`
└── <protocol>::events // Event enum + `unpack(&[u8])`
Every protocol lives in its own module so you only pull in what you need.
use substreams_solana_idls::pumpfun;
#[substreams::handlers::map]
fn map_events(block: Block) -> Result<Events, Error> {
for tx in block.transactions() {
for ix in tx.walk_instructions() {
// Fast path: ignore anything not coming from Pump.fun
if ix.program() != pumpfun::PROGRAM_ID { continue; }
match pumpfun::events::unpack(ix.data()) {
pumpfun::events::PumpFunEvent::Trade(tr) => {
// …handle trade…
}
_ => {}
}
}
}
Ok(Default::default())
}
Swap pumpfun
for any supported protocol and you get the same ergonomic API.
src/<protocol>
with instructions.rs
, events.rs
, and mod.rs
.borsh
, serde
, solana_program
only).PRs and issues welcome!