The #1 Uniswap v2 pair on Ethereum, by transactions. 66.2% of it is 3 wallets trading with themselves.
Who stands between your quote and your fill, per pool.
One row per pool. Orange is a middleman; green is where to route.
The token's last 800 prints, ordered by block and log index, grouped into pools, joined on the maker address. Then one line: where to route and what to cap. Switch tokens below — every one is a committed run, no request.
MOTO · Ethereum · last 800 prints · 3.6 h · blocks 26006339–26007416 · captured 2026-09-18 22:36:19 UTC · keyless · chosen by rule: the base token of the #1 uniswap-v2 pair on ethereum by 24h transactions at capture time
of Uniswap v2 / WETH volume is 3 wallets buying back what they just sold, in the same transaction.
29 round-trips · 0 sandwiches in 770 prints. Take the legs out and an organic fill here pays 15.5 bps median; the raw tape says 55.3.
| pool | prints | organic | round-trips | sandwiches | q→fill p50 / p90 | tax | liquidity |
|---|---|---|---|---|---|---|---|
| Uniswap v2 / WETH◀ route | 770 | 712 | 29 · 3 wallets · 66.2% | 0 | 15.5 / 60.9 bps | 0 / 0 | $956k |
| Uniswap v2 / USDC | 17 | 17 | — | 0 | 66.5 / 137.8 bps | 0 / 0 | $39k |
| Uniswap v2 / USDT | 13 | 13 | — | 0 | 71.1 / 135.2 bps | 0 / 0 | $34k |
Uniswap v2 / WETH — raw rows (round-trip)
| lgid | maker | side | a0 (base) | a1 (quote) | a1 / a0 | tx |
|---|---|---|---|---|---|---|
| 202 | 0x9c97c0a6…af7d | buy | 561,202.9606 | 0.699926 | 1.2472e-06 | 0xe76474…9653 (opens in a new tab) |
| 209 | 0xc9160fda…6d95 | sell | 842,991.8538 | 1.043025 | 1.2373e-06 | 0x1345be…028b (opens in a new tab) |
| 218 | 0xc9160fda…6d95 | buy | 829,640.6520 | 1.032594 | 1.2446e-06 | 0x1345be…028b (opens in a new tab) |
| 225 | 0xdd64c9d7…30c5 | sell | 774,494.6589 | 0.958588 | 1.2377e-06 | 0x3757ac…1cc7 (opens in a new tab) |
| 234 | 0xdd64c9d7…30c5 | buy | 762,222.4667 | 0.949003 | 1.2450e-06 | 0x3757ac…1cc7 (opens in a new tab) |
- leg 1 lgid 209 0xc9160fdab187f2e55567b760d88a87ae7fe56d95 sell a1/a0 = 1.0430246602456774 / 842991.8537715519 = 1.237289133434893e-06
- leg 2 lgid 218 0xc9160fdab187f2e55567b760d88a87ae7fe56d95 buy a1/a0 = 1.0325944136432206 / 829640.6520318444 = 1.2446285161103536e-06
- same wallet · same block 26006339 · same tx · |Δa0| / a0 = 0.0158 ≤ 0.05 → round-trip
raw JSON of these rows, verbatim from the API
[
{
"a0": 561202.9605965281,
"a1": 0.6999255340085679,
"eid": 1069,
"en": "Uniswap v2",
"ex": false,
"f": "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f",
"h": "26006339",
"lgid": "202",
"ma": "0x9c97c0a6a00b1a9f74dbe09a4c55ec9f09f8af7d",
"q": 1.247187885939e-06,
"qi": 1,
"t0a": "0xbd965230588eaa536de6aa45e8ebbc01638535e0",
"t0pt": "add",
"t0pu": 0.0032583767444015633,
"t0s": "MOTO",
"t0t": true,
"t1a": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"t1pt": "reduce",
"t1pu": 2612.578891391966,
"t1s": "WETH",
"t1t": false,
"tc": "119",
"tp": "buy",
"ts": "1789757999000",
"tx": "0xe764743a031d5ad70cc6d4ac0603b33b2ad2240b243d925295c33899a4ec9653",
"txId": "155",
"txtp": 0,
"v": 1828.6106756970341
},
{
"a0": 842991.8537715519,
"a1": 1.0430246602456774,
"eid": 1069,
"en": "Uniswap v2",
"ex": false,
"f": "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f",
"h": "26006339",
"lgid": "209",
"ma": "0xc9160fdab187f2e55567b760d88a87ae7fe56d95",
"q": 1.237289133435e-06,
"qi": 1,
"t0a": "0xbd965230588eaa536de6aa45e8ebbc01638535e0",
"t0pt": "reduce",
"t0pu": 0.0032325154725606586,
"t0s": "MOTO",
"t0t": true,
"t1a": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"t1pt": "add",
"t1pu": 2612.578891391966,
"t1s": "WETH",
"t1t": false,
"tc": "81",
"tp": "sell",
"ts": "1789757999000",
"tx": "0x1345bed7cd96a35ae5543fdbfde710c1f7b41a3a365fc31b4c3c52e47512028b",
"txId": "156",
"txtp": 0,
"v": 2724.9842105591338
},
{
"a0": 829640.6520318444,
"a1": 1.0325944136432206,
"eid": 1069,
"en": "Uniswap v2",
"ex": false,
"f": "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f",
"h": "26006339",
"lgid": "218",
"ma": "0xc9160fdab187f2e55567b760d88a87ae7fe56d95",
"q": 1.244628516111e-06,
"qi": 1,
"t0a": "0xbd965230588eaa536de6aa45e8ebbc01638535e0",
"t0pt": "add",
"t0pu": 0.003251690188814415,
"t0s": "MOTO",
"t0t": true,
"t1a": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"t1pt": "reduce",
"t1pu": 2612.578891391966,
"t1s": "WETH",
"t1t": false,
"tc": "81",
"tp": "buy",
"ts": "1789757999000",
"tx": "0x1345bed7cd96a35ae5543fdbfde710c1f7b41a3a365fc31b4c3c52e47512028b",
"txId": "156",
"txtp": 0,
"v": 2697.734368453542
},
{
"a0": 774494.6589395582,
"a1": 0.9585884495481751,
"eid": 1069,
"en": "Uniswap v2",
"ex": false,
"f": "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f",
"h": "26006339",
"lgid": "225",
"ma": "0xdd64c9d73ea795b9e92b217cab92bf44d91d30c5",
"q": 1.237695364951e-06,
"qi": 1,
"t0a": "0xbd965230588eaa536de6aa45e8ebbc01638535e0",
"t0pt": "reduce",
"t0pu": 0.003233576784442562,
"t0s": "MOTO",
"t0t": true,
"t1a": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"t1pt": "add",
"t1pu": 2612.578891391966,
"t1s": "WETH",
"t1t": false,
"tc": "41",
"tp": "sell",
"ts": "1789757999000",
"tx": "0x3757aca12af6fcb7787c577c0517ec6ab0c29af7eb8fbe27e8ba24206ab51cc7",
"txId": "158",
"txtp": 0,
"v": 2504.387948821715
},
{
"a0": 762222.4666825428,
"a1": 0.9490025650526934,
"eid": 1069,
"en": "Uniswap v2",
"ex": false,
"f": "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f",
"h": "26006339",
"lgid": "234",
"ma": "0xdd64c9d73ea795b9e92b217cab92bf44d91d30c5",
"q": 1.245046697696e-06,
"qi": 1,
"t0a": "0xbd965230588eaa536de6aa45e8ebbc01638535e0",
"t0pt": "add",
"t0pu": 0.003252782721197481,
"t0s": "MOTO",
"t0t": true,
"t1a": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"t1pt": "reduce",
"t1pu": 2612.578891391966,
"t1s": "WETH",
"t1t": false,
"tc": "41",
"tp": "buy",
"ts": "1789757999000",
"tx": "0x3757aca12af6fcb7787c577c0517ec6ab0c29af7eb8fbe27e8ba24206ab51cc7",
"txId": "158",
"txtp": 0,
"v": 2479.344069333498
}
]10 tokens, 3 chains, whatever they said.
The same engine over the hero pair on each chain — chosen by the same rule — and 7 pinned Ethereum tokens. Every receipt is committed; every number re-derives from its tape with the network unplugged.
LINK: 0.6 bps median quote-to-fill on Uniswap v4 (Ethereum) / ETH against 14.2 on Uniswap v3 (Ethereum) / USDC — same token, same hours. Also measured by the same rule: USDT/WBNB on BSC, USDC/wSOL on Solana. The sandwich rate this project was decided to headline is 0.025 %, and the page says so: both sandwiches are one wallet, and the join found them.
Every number on this page came from a call you can replay.
Each request behind the table — URL, HTTP status, UTC, sha256 of the body, credits — is listed on /evidence. The block below follows the table: switch a token or paste one and it updates.
6 keyless endpoints. One of them is the whole engine.
CoinMarketCap publishes, per swap and with no key, the maker address, the block, the log index, the side and both amounts. Order the prints, join on the maker: a middleman has to print, so the row order alone names it. No mempool view, no MEV labels — and none needed.
| endpoint | used for | key | calls behind this page |
|---|---|---|---|
/public-api/v1/dex/tokens/transactions | the engine — ma, h, lgid, tp, a0, a1, tx, en, t0a, t1a per swap | none | 80 |
/public-api/v1/dex/token/pools | pool address, venue, liqUsd — labels each (en, t0a, t1a) group | none | 10 |
/public-api/v1/dex/security/detail | extra.buyTax / extra.sellTax — a transfer tax is not a middleman | none | 10 |
/public-api/v4/dex/pairs/quotes/latest | 24h buy / sell counts — how much of a day the window covers | none | 8 |
/public-api/v4/dex/spot-pairs/latest | the hero rule — #1 pair by 24h transactions, per chain | none | 0 |
/public-api/v1/dex/platform/list | explorer URL templates for the transaction links | none | 0 |
A keyless 200 carries Allow-Headers, Allow-Methods and Max-Age — and not Access-Control-Allow-Origin. The browser discards a body it already has. Every web tool on /public-api needs a proxy; this one's is /api/swaps, which also puts every visitor behind one IP.
One keyless page, 8 iterations: most took about a second and a half; one sat through a 15 s backoff because the anonymous tier reports its per-IP limit as HTTP 500 as often as 429, with no Retry-After. The tool backs off 15 / 30 / 60 s and exits 75 when the quota is spent.
q equals a1 / a0 on 374 of 400 PEPE rows; on 22 Uniswap v4 rows and 4 Uniswap v3 rows it is rounded to two significant figures, or zero. Invisible in a chart, fatal in a basis-point comparison — so the engine never reads q; it divides a1 by a0 itself.
8 dated, evidenced findings for the CoinMarketCap team — and what is worth protecting — in FEEDBACK.md (opens in a new tab). Every endpoint the code calls is named above; tests/test_published_counts.py fails if one ever is not.
No key. No install. About ten seconds.
The judged capability is a stdlib-only script against the keyless surface. With no flags it asks CoinMarketCap's own ranking which Uniswap v2 pair is busiest, pulls that token's last 800 prints and names the middleman. The transcript is the bare command's own output, receipt kept.
$ git clone https://github.com/edycutjong/middleman.git && cd middleman $ python3 scripts/middleman.py middleman 0.1.0 — keyless, live hero rule: the base token of the #1 Ethereum Uniswap v2 pair by 24h transactions at capture time → MOTO/WETH 0xbd965230588eaa536de6aa45e8ebbc01638535e0 MOTO · ethereum · 800 prints · 3.86 h · blocks 26006381–26007537 · captured 2026-09-18T23:00:20Z · keyless 27.5% of Uniswap v2 / WETH volume is 1 wallet(s) buying back what they just sold (8 round-trips, same transaction) Uniswap v2 / WETH 771 prints · 755 organic · 8 · 1 wallet(s) · 27.5% · 39.2 / 60.8 bps ◀ route Uniswap v2 / USDC 16 prints · 16 organic · — · 70.4 / 137.8 bps Uniswap v2 / USDT 13 prints · 13 organic · — · 71.1 / 135.2 bps ▶ route via Uniswap v2 / WETH · cap slippage at 0.65 % (organic p90 60.8 bps) wrote docs/proof/live_run.json (11.3s wall clock, 0 credits — keyless)
4 windows on the same pair, one night. The wallets come and go; the ranking that put the pair at #1 does not — and a tool that can print zero on its own headline is the one whose non-zero you can believe. Also in the repository: 145 tests (139 offline, 6 live), 1,000 generated blocks with 0 violations of the join's own definition, the browser engine parity-tested against Python on every committed tape, and an engine that takes 3.3 ms per 800 prints (p95 3.7 ms, n=200).
Honest limits.
Is this page live?
The table is rendered from a committed run, captured 2026-09-18 22:36:19 UTC, and says so on every number. The paste box is live: it runs the same engine in the browser on rows fetched through a keyless proxy. The proxy shares one IP against a per-IP anonymous limit, so a 429 is shown as a 429 with the command to run instead — the CLI is the primary live path, and every reader has their own quota there.
How wide is the window?
The last 800 prints, not 24 hours — 3.6 h on the hero pair, 23 h on Mog. The span is on every row, and the receipt carries the window's share of the pool's 24 h transactions (16% here).
Is a round-trip a verdict on a person?
No. It is a shape: same wallet, same block, opposite sides, size within 5 %. The page prints the rows and the definition, never a label on a person. A router contract can appear as one maker for many users; the number is "the same address on both sides", exactly as the API reports it, and nothing more is claimed.
Why does p90 sit near 60.9 bps on the routed pool?
Quote-to-fill is a realised, fee-inclusive print-to-print move: on a 0.30 % pool two consecutive opposite-side prints straddle the fee twice, so p90 lands near 60 bps on every busy v2 pool. It is used comparatively, across the pools of one token in one window, where that bias is shared — which is also why the rule prefers the 0.05 % tiers when they are deep enough.
Why is a pool marked ×2 or ×3?
The feed carries no pool address, so pools are recovered from (venue, base, quote). Uniswap v3 fee tiers of one pair share that key and merge; a row marked ×n is n pools, and its number is per pair, not per tier. Filed as a finding in FEEDBACK.md.
What is not built?
No prediction, no wallet labelling, no composite score, no alerts, no watchlists, no key. The product names the middleman and says where to route; that verb is the whole scope. When no pool clears the routing floor the rule is printed, never widened.