OpenBook v2 historical data as Parquet
Every OpenBook v2 instruction and event in Solana history, decoded with an Anchor IDL that we checked against real transactions. Trawl gives you 8 event tables and 29 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
- opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb
- Preset
openbook-v2- Tables
- 8 event tables and 29 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":"openbook-v2","start_epoch":1058,"end_epoch":1058}' -- then, in DuckDB, on the files of the job SELECT slot, signature, openOrdersAccount, signer, baseAmount FROM 'ev-deposit_log-*.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-deposit_logopenOrdersAccount base58 string, signer base58 string, baseAmount u64, quoteAmount u64ev-fill_logmarket base58 string, takerSide u8, makerSlot u8, makerOut bool, timestamp u64, seqNum u64, maker base58 string, makerClientOrderId u64, makerFee u64, makerTimestamp u64, taker base58 string, takerClientOrderId u64, takerFeeCeil u64, price i64, quantity i64ev-market_meta_data_logmarket base58 string, name string, baseMint base58 string, quoteMint base58 string, baseDecimals u8, quoteDecimals u8, baseLotSize i64, quoteLotSize i64ev-total_order_fill_eventside u8, taker base58 string, totalQuantityPaid u64, totalQuantityReceived u64, fees u64ev-set_delegate_logopenOrdersAccount base58 string, delegate base58 stringev-settle_funds_logopenOrdersAccount base58 string, baseNative u64, quoteNative u64, referrerRebate u64, referrer base58 stringev-sweep_fees_logmarket base58 string, amount u64, receiver base58 stringev-open_orders_position_logowner base58 string, openOrdersAccountNum u32, market base58 string, bidsBaseLots i64, bidsQuoteLots i64, asksBaseLots i64, baseFreeNative u64, quoteFreeNative u64, lockedMakerFees u64, referrerRebatesAvailable u64, makerVolume decimal string, takerVolume decimal stringInstruction 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-create_marketmarket, marketAuthority, bids, asks, eventHeap, payer, marketBaseVault, marketQuoteVault, baseMint, quoteMint, systemProgram, tokenProgram, associatedTokenProgram, oracleA, oracleB, collectFeeAdmin, openOrdersAdmin, consumeEventsAdmin, closeMarketAdmin, eventAuthority, programargs:
name string, oracleConfig JSON string, quoteLotSize i64, baseLotSize i64, makerFee i64, takerFee i64, timeExpiry i64ix-close_marketcloseMarketAdmin, market, bids, asks, eventHeap, solDestination, tokenProgramix-create_open_orders_indexerpayer, owner, openOrdersIndexer, systemProgramix-close_open_orders_indexerowner, openOrdersIndexer, solDestination, tokenProgramix-create_open_orders_accountpayer, owner, delegateAccount, openOrdersIndexer, openOrdersAccount, market, systemProgramargs:
name stringix-close_open_orders_accountowner, openOrdersIndexer, openOrdersAccount, solDestination, systemProgramix-place_ordersigner, openOrdersAccount, openOrdersAdmin, userTokenAccount, market, bids, asks, eventHeap, marketVault, oracleA, oracleB, tokenProgramargs:
args JSON stringix-edit_ordersigner, openOrdersAccount, openOrdersAdmin, userTokenAccount, market, bids, asks, eventHeap, marketVault, oracleA, oracleB, tokenProgramargs:
clientOrderId u64, expectedCancelSize i64, placeOrder JSON stringix-edit_order_peggedsigner, openOrdersAccount, openOrdersAdmin, userTokenAccount, market, bids, asks, eventHeap, marketVault, oracleA, oracleB, tokenProgramargs:
clientOrderId u64, expectedCancelSize i64, placeOrder JSON stringix-place_orderssigner, openOrdersAccount, openOrdersAdmin, userQuoteAccount, userBaseAccount, market, bids, asks, eventHeap, marketQuoteVault, marketBaseVault, oracleA, oracleB, tokenProgramargs:
ordersType variant name, arg_bids JSON string, arg_asks JSON string, limit u8ix-cancel_all_and_place_orderssigner, openOrdersAccount, openOrdersAdmin, userQuoteAccount, userBaseAccount, market, bids, asks, eventHeap, marketQuoteVault, marketBaseVault, oracleA, oracleB, tokenProgramargs:
ordersType variant name, arg_bids JSON string, arg_asks JSON string, limit u8ix-place_order_peggedsigner, openOrdersAccount, openOrdersAdmin, userTokenAccount, market, bids, asks, eventHeap, marketVault, oracleA, oracleB, tokenProgramargs:
args JSON stringix-place_take_ordersigner, penaltyPayer, market, marketAuthority, bids, asks, marketBaseVault, marketQuoteVault, eventHeap, userBaseAccount, userQuoteAccount, oracleA, oracleB, tokenProgram, systemProgram, openOrdersAdminargs:
args JSON stringix-consume_eventsconsumeEventsAdmin, market, eventHeapargs:
limit u64ix-consume_given_eventsconsumeEventsAdmin, market, eventHeapargs:
slots JSON stringix-cancel_ordersigner, openOrdersAccount, market, bids, asksargs:
orderId decimal stringix-cancel_order_by_client_order_idsigner, openOrdersAccount, market, bids, asksargs:
clientOrderId u64ix-cancel_all_orderssigner, openOrdersAccount, market, bids, asksargs:
sideOption variant name, limit u8ix-depositowner, userBaseAccount, userQuoteAccount, openOrdersAccount, market, marketBaseVault, marketQuoteVault, tokenProgramargs:
baseAmount u64, quoteAmount u64ix-refillowner, userBaseAccount, userQuoteAccount, openOrdersAccount, market, marketBaseVault, marketQuoteVault, tokenProgramargs:
baseAmount u64, quoteAmount u64ix-settle_fundsowner, penaltyPayer, openOrdersAccount, market, marketAuthority, marketBaseVault, marketQuoteVault, userBaseAccount, userQuoteAccount, referrerAccount, tokenProgram, systemProgramix-settle_funds_expiredcloseMarketAdmin, owner, penaltyPayer, openOrdersAccount, market, marketAuthority, marketBaseVault, marketQuoteVault, userBaseAccount, userQuoteAccount, referrerAccount, tokenProgram, systemProgramix-sweep_feescollectFeeAdmin, market, marketAuthority, marketQuoteVault, tokenReceiverAccount, tokenProgramix-set_delegateowner, openOrdersAccount, delegateAccountix-set_market_expiredcloseMarketAdmin, marketix-prune_orderscloseMarketAdmin, openOrdersAccount, market, bids, asksargs:
limit u8ix-stub_oracle_createpayer, owner, oracle, mint, systemProgramargs:
price f64ix-stub_oracle_closeowner, oracle, solDestination, tokenProgramix-stub_oracle_setowner, oracleargs:
price f64Files are split at 2 GB: ix-<name>-tNN-SSSS.parquet. Large integers stay
exact: u128 is a decimal string. All decoded types.
Get OpenBook v2 data for your range.
Select an epoch range and get a firm price. You pay only when you send the job.