# Trader attribution & wallet tags

> How Crius attributes Robinhood Chain trades to the real trader behind routers, aggregators, bundlers and bot contracts, and what each wallet tag means.

Source: https://crius.sh/docs/concepts/attribution/

## Who actually traded

On-chain, the address that sends a transaction (`tx.from`) or calls the pool is often infrastructure: a router, an aggregator, a Relay solver, an ERC-4337 bundler, a launchpad's launch-and-buy helper, Permit2, or a trading bot's contract. Counting those as traders would make every stat wrong.

For each swap Crius:

1. computes every address's net token and quote change in the transaction (including internal ETH transfers);
2. removes known infrastructure (pools, the v4 PoolManager, routers, aggregators, Permit2, vaults, lockers, launchpads);
3. takes the address that **received** the token (buy) or **sent** it (sell) as the **trader**;
4. for ERC-4337, uses the smart account as trader and the bundler as `executor`;
5. for Relay and other gasless flows, uses the user whose funds moved, with the solver as `executor`;
6. for bot contracts, uses the contract as trader and tags it `bot`.

One transaction can contain several trades (a multi-recipient buy, an arbitrage). Each trade has its own `id` (`<block>-<tx index>-<log index>`).

## Wallet tags

| Tag | Meaning |
|---|---|
| `dev` | The token's deployer or launch creator |
| `dev_linked` | Funded by or funding the dev, or in the same cluster |
| `sniper` | Bought within the first blocks after trading opened |
| `bundler` | Part of a coordinated bundle |
| `fresh` | A new wallet (under 24 h old or under 5 transactions before its first buy) |
| `insider` | Received tokens from the dev or launch contract without buying |
| `whale` | Holds 1% or more of supply |
| `bot` | Trades through its own contract, or trades like a bot (very frequent, sub-second round trips, same-block buy and sell) |
| `top_trader` | Among the best traders by realized PnL |
| `pool`, `lp_locker`, `burn`, `launchpad`, `protocol_fee`, `cex`, `bridge` | Infrastructure, excluded from concentration stats by default |

Use `exclude=infra` or `exclude=bots` on holder and stats endpoints to leave those wallets out.
