Output
dex.swaps.v1.EventsAll packages

dex_swaps
Pinax
Package ref
dex-swaps@v0.4.1Run package
CLI
Run map_events from the command line.
substreams run dex-swaps@v0.4.1 map_events -e solana --start-block -1Authenticate by running
substreams auth or directly on thegraph.market (see docs).README
DEX Swaps
dex-swaps emits a normalized protobuf stream of swap activity across supported Solana DEX protocols.
Each emitted swap includes:
- protocol enum
- protocol program ID (
amm) - pool or market identifier
- user wallet
- input token mint and amount
- output token mint and amount
Only protocols that can reliably provide the full normalized swap shape are included.
Notes:
protocolis a protobuf enum with stable protocol IDs.- Downstream packages such as
svm-dexcan materialize that enum into lowercase snake_case strings such asjupiter_v6andraydium_amm_v4. ammis the protocol program ID as raw bytes.amm_poolis the stable pool or market identifier when the protocol exposes one.- If a protocol does not expose a pool identifier,
amm_poolfalls back toamm. - Jupiter currently uses
fee_payeras the best available user-level identity from the decoded event stream. - Meteora AMM is intentionally excluded for now because its current decoded swap shape does not expose canonical token mint identities for normalization.
Current coverage:
- Boop
- Darklake
- DumpFun
- Jupiter v4
- Jupiter v6
- Orca Whirlpool
SwapV2 - Pump.fun
- Pump.fun AMM
- Raydium AMM V4
- Raydium CLMM
V2 - Raydium CPMM
- Raydium Launchpad
- Meteora DAAM
- Meteora DLMM
Currently excluded:
- Meteora AMM Current decoded swap shape does not expose canonical token mint identities for normalization.
- Saros
Current decode exposes intent fields like
amount_inandminimum_amount_out, but not the user, pool, mints, or finalized output amount needed for normalized swaps. - Sanctum Current decode exposes only the swap amount and does not provide normalized pool, mint, or finalized output fields.
- DFlow Current decoder is a placeholder that treats any instruction as a swap and does not expose reliable normalized swap fields.
Modules
Execution graph
Show 1 dependency
`blocks_without_votes` allows you to consume a full Solana Block without Vote instructions (`Vote111111111111111111111111111111111111111`). If you consume it on HISTORICAL data (+1000 blocks from HEAD), you will be reading from the StreamingFast cache, thus saving costs on the amount of TB read.
Output
sf.solana.type.v1.BlockInputs
