| Attacker (tx origin) | Sandwiches | Profit | Kuru | AMM | Last block |
|---|---|---|---|---|---|
| waiting for first detections… | |||||
| Pool | Venue | Swaps | Sandwiched |
|---|---|---|---|
| waiting… | |||
| Venue | Blocks | Attacker | Victim | Victims | Profit | Via | Front / back tx | |
|---|---|---|---|---|---|---|---|---|
| No sandwiches detected yet. | ||||||||
| When | Block | Pools touched | Tx |
|---|---|---|---|
| waiting… | |||
A front-run and a back-run bracketing a victim on one pool, within 3 blocks. On AMMs (Uniswap v2/v3/v4 deployments) the bracket is confirmed by transaction sender or a shared bot contract, resolved with batched, retried RPC lookups. On the Kuru CLOB, one market order emits one Trade per maker fill, so fills are first collapsed into taker actions (tx × book × direction), then bracketed by the txOrigin the event itself carries — no per-tx lookups at all.
Per sandwich, the attacker's front+back token deltas are netted on the sandwiched pool itself (what the pool paid out minus what was paid in, per token — wallet flows can't be used because Monad bots settle in native MON and park inventory in vault contracts). Leftover inventory is marked at the victim's own execution price. Stables are $1; MON is priced from live WMON/USDC v3 swaps. Attacker gas is deducted where shown. Kuru CLOB sandwiches are not yet priced. A negative figure means the bracket lost money — bots misfire, and sandwich each other.
One transaction swapping on two or more distinct pools in the same block. These are candidates, not confirmed profit — token flows are not yet netted.
Every Swap/Trade event on Monad mainnet from the public RPC: Uniswap v2, v3, v4 (and forks emitting the canonical topics) plus Kuru orderbooks. Live blocks stream in continuously; history is backfilled with the exact same detectors. All detection is heuristic — figures are candidates for verification, not settled ground truth.