crosschain.dex.trades table aggregates DEX trades indexed by Allium across multiple blockchains (EVM and non-EVM) into a single table.
The crosschain.dex.trades_evm table aggregates DEX trades for EVM-compatible blockchain.
This model includes EVM-specific fee details (e.g. priority fees) that are not found on non-EVM chains.
Blockchain Coverage
- Overview
- EVM DEX Coverage
- Sui DEX Coverage
- Solana DEX Coverage
This table currently does not contain aggregator swaps to avoid double-counting volume.
The dex trades table only contains swap events/instructions from DEXs with liquidity pools/vaults.
dex.trades.
For trades routed by aggregators, they are found in the dex.aggregator_trades models on the respective blockchain.Inclusion Criteria
dex.trades is a curated table, not a raw swap-event feed. A Swap event that exists on-chain can
be absent from dex.trades. If you are reconciling a specific transaction and finding no row, work
through the three layers below in order.
Pool registry: the factory must be labeled
Pool registry: the factory must be labeled
Allium resolves the
project for each trade from the factory address that created the
liquidity pool, matched against a label set maintained per chain and protocol. Trades are joined
to that registry, so a pool missing from it produces no trades.- A new DEX fork is invisible until its factory is labeled. A Uniswap v2 clone deployed
today emits the same
PairCreatedandSwapevents as any other, but its swaps do not reachdex.tradesuntil the factory is added. - Pools from unlabeled factories appear in neither
dex.tradesnordex.pools. This is deliberate. Rogue factories emit incorrect pool-to-token mappings, which would produce duplicate and mis-mapped rows downstream. - Pools missing
token0ortoken1on their creation event are dropped.
Row filters: zero-amount legs and aggregators
Row filters: zero-amount legs and aggregators
Swaps where either leg is zero are excluded. Dust-sized swaps where the pool’s math rounds
the output down to
0 emit a valid Swap event but produce no trade row. This is the most
common reason a real, successful transaction has no match in dex.trades.Aggregator-level swaps are excluded to avoid double-counting volume, as described in the
Overview tab. Find them in dex.aggregator_trades on the respective chain.A trade also requires its block and transaction records. Rows can be transiently absent while a
chain is backfilling, and appear once the backfill lands.USD guards: when the USD columns are null or substituted
USD guards: when the USD columns are null or substituted
These guards protect volume metrics from flashloan- and wash-trade-inflated prices. They change
the USD columns only. The trade row, and its raw and normalized token amounts, always survive.
A
null or 0 in usd_amount does not mean the trade did not happen. Filter on
usd_amount is not null when you need priced volume, and use the raw amount columns when you
need swap counts or token flow.Protocol-specific behavior
Protocol-specific behavior
- Uniswap v4 trades are built from decoded traces rather than the
Swapevent. Hooks that alter swap amounts cause the event to emit0for both amounts, so the trace output is the only reliable source of the true amounts. - EulerSwap swaps routed through the Uniswap v4 singleton are attributed once, to EulerSwap,
so they are not double-counted against
uniswap_v4. - Curve meta-pool swaps that emit
TokenExchangeUnderlyingare indexed in addition to standardTokenExchangeswaps.
Sample Query
- DEX Volume
- DEX Transaction Fees
Query DEX Volume and Users Across Blockchains indexed by Allium in the last 90 days.
Table Columns
- crosschain.dex.trades
- crosschain.dex.trades_evm
For blockchains (e.g. Solana) that are not EVM-compatible, the additional fields only relevant to these chains (e.g. Signer for Solana) are added and appended at the end of this table.