DEX

Raydium CPMM historical data as Parquet

Every Raydium CPMM instruction and event in Solana history, decoded with an Anchor IDL that we checked against real transactions. Trawl gives you 2 event tables and 14 instruction tables, with a column for each account, argument and field. Calls from other programs (CPI) are in the result too.

Updated

The preset

Program
CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C
Preset
raydium-cpmm
Tables
2 event tables and 14 instruction tables, and part-* with the raw bytes of each match
Price
$4 for one recent epoch, $8.68 for one week of chain

The price is the same for every program: you pay for the archive the scan reads, not for the rows. Pricing.

# ask for a price: a 402 with the quote, no payment yet
curl -X POST https://trawl.run/scan \
  -H 'Content-Type: application/json' \
  -d '{"preset":"raydium-cpmm","start_epoch":1058,"end_epoch":1058}'

-- then, in DuckDB, on the files of the job
SELECT slot, signature, pool_id, input_vault_before, output_vault_before
FROM 'ev-swap_event-*.parquet'
ORDER BY slot
LIMIT 10;

Add "filter": {"accounts": ["<wallet>"]} to keep only the transactions that touch one wallet. How a filter changes a preset.

Event tables

One table for each event in the IDL. Each row also has log_index and the context columns. An event that the program writes two ways gives one row.

ev-lp_change_event
fields: pool_id base58 string, lp_amount_before u64, token_0_vault_before u64, token_1_vault_before u64, token_0_amount u64, token_1_amount u64, token_0_transfer_fee u64, token_1_transfer_fee u64, change_type u8
ev-swap_event
fields: pool_id base58 string, input_vault_before u64, output_vault_before u64, input_amount u64, output_amount u64, input_transfer_fee u64, output_transfer_fee u64, base_input bool, input_mint base58 string, output_mint base58 string, trade_fee u64, creator_fee u64, creator_fee_on_input bool

Instruction tables

One table for each instruction in the IDL: the named accounts, then the arguments. Each row also has the context columns: slot, tx_index, signature, success, fee, program_id, ix_index, is_inner, inner_index, stack_height, accounts. What each one holds.

ix-close_permission_pda
accounts: owner, permission_authority, permission, system_program
ix-collect_creator_fee
accounts: creator, authority, pool_state, amm_config, token_0_vault, token_1_vault, vault_0_mint, vault_1_mint, creator_token_0, creator_token_1, token_0_program, token_1_program, associated_token_program, system_program
ix-collect_fund_fee
accounts: owner, authority, pool_state, amm_config, token_0_vault, token_1_vault, vault_0_mint, vault_1_mint, recipient_token_0_account, recipient_token_1_account, token_program, token_program_2022
args: amount_0_requested u64, amount_1_requested u64
ix-collect_protocol_fee
accounts: owner, authority, pool_state, amm_config, token_0_vault, token_1_vault, vault_0_mint, vault_1_mint, recipient_token_0_account, recipient_token_1_account, token_program, token_program_2022
args: amount_0_requested u64, amount_1_requested u64
ix-create_amm_config
accounts: owner, amm_config, system_program
args: index u16, trade_fee_rate u64, protocol_fee_rate u64, fund_fee_rate u64, create_pool_fee u64, creator_fee_rate u64
ix-create_permission_pda
accounts: owner, permission_authority, permission, system_program
ix-deposit
accounts: owner, authority, pool_state, owner_lp_token, token_0_account, token_1_account, token_0_vault, token_1_vault, token_program, token_program_2022, vault_0_mint, vault_1_mint, lp_mint
args: lp_token_amount u64, maximum_token_0_amount u64, maximum_token_1_amount u64
ix-initialize
accounts: creator, amm_config, authority, pool_state, token_0_mint, token_1_mint, lp_mint, creator_token_0, creator_token_1, creator_lp_token, token_0_vault, token_1_vault, create_pool_fee, observation_state, token_program, token_0_program, token_1_program, associated_token_program, system_program, rent
args: init_amount_0 u64, init_amount_1 u64, open_time u64
ix-initialize_with_permission
accounts: payer, creator, amm_config, authority, pool_state, token_0_mint, token_1_mint, lp_mint, payer_token_0, payer_token_1, payer_lp_token, token_0_vault, token_1_vault, create_pool_fee, observation_state, permission, token_program, token_0_program, token_1_program, associated_token_program, system_program
args: init_amount_0 u64, init_amount_1 u64, open_time u64, creator_fee_on variant name
ix-swap_base_input
accounts: payer, authority, amm_config, pool_state, input_token_account, output_token_account, input_vault, output_vault, input_token_program, output_token_program, input_token_mint, output_token_mint, observation_state
args: amount_in u64, minimum_amount_out u64
ix-swap_base_output
accounts: payer, authority, amm_config, pool_state, input_token_account, output_token_account, input_vault, output_vault, input_token_program, output_token_program, input_token_mint, output_token_mint, observation_state
args: max_amount_in u64, amount_out u64
ix-update_amm_config
accounts: owner, amm_config
args: param u8, value u64
ix-update_pool_status
accounts: authority, pool_state
args: status u8
ix-withdraw
accounts: owner, authority, pool_state, owner_lp_token, token_0_account, token_1_account, token_0_vault, token_1_vault, token_program, token_program_2022, vault_0_mint, vault_1_mint, lp_mint, memo_program
args: lp_token_amount u64, minimum_token_0_amount u64, minimum_token_1_amount u64

Files are split at 2 GB: ix-<name>-tNN-SSSS.parquet. Large integers stay exact: u128 is a decimal string. All decoded types.

Get Raydium CPMM data for your range.

Select an epoch range and get a firm price. You pay only when you send the job.

Get a price