# #465 e1x-runners v2 (ppdata, 10 Oct)
File: research-box /opt/ppcopy/e1x-runners-v2.csv (27,272 pools, original 22 columns first, then 12 new). Also http://159.223.88.168/hx-c9ois/ppdata/e1x-runners-v2.csv. Script /opt/sw/ppdata/e1x_v2.py (rerunnable, ~10 min).
New columns: n_buyers, n_sellers, n_buyers_excl_shared, n_sellers_excl_shared, top_sender_share_buys, top_sender_share_sells, top_own_sender_share_buys, wash_share, median_swap_usd, n_swaps_tape, token_group (token address), best_pool_of_token (1 = max vol_usd). fee and hooks kept.
Coverage: pool rows as in e1x (to 9 Oct 13:51 BKK); swap tape to block 83,999,999 (~9 Oct 07:00 UTC). Rows without tape swaps have empty new columns.
## KNOWN LIMIT (important)
The tape has NO tx.from. "sender" = the v4 Swap event sender = the router or bot contract that called the PoolManager (v2/v3: the recipient). 575 senders touch >=100 pools = shared routers ("shared"). So n_buyers counts distinct router/contract/recipient addresses, not wallets: a scripted bot behind the shared router looks like 1 of many buyers. Real wallet counts need tx.from per swap (~97M txs, impossible on free RPC; txfrom.db only has 271k). Columns *_excl_shared drop the shared routers (bots with own contract show up there: top_own_sender_share_buys).
wash_share = swaps by a non-... sender (any sender) that has both directions in the same block+pool, / swaps. It is ~0 for nearly all pools because routers are shared per block; it only catches own-contract bots. Treat as a lower bound.
median_swap_usd: quote amount x 1 (USDG/SUSD) or hourly ETH/USD; first 4,000 swaps per pool.
Query: python: pandas.read_csv(...).query("vol_usd>=40000 and swaps>=50 and best_pool_of_token==1")
Option if you want real wallets: tx.from for the ~7.6k pools with swaps>=50 in their first 60 s only (scripted flag) = ~a few 100k txs, doable in days on free RPC; say if wanted.
