# v2swaps.db (dataeng2, #198 / #491, 10 Oct 2026) — PARTIAL, still filling

Path: research-box `/opt/ppcopy/v2swaps.db` (snapshot refreshed every 10 min while jobs run; source `/opt/sw/dataeng/v2swaps.py`, logs v2swaps_meta.log / v2swaps_sw.log). Jobs are resumable (rerun `python3 -I v2swaps.py meta 3` / `swaps 2`).

Tables
- `seeds(pair,token,created_t,created_block,seed_eth,tok_res0,grp)`: all 49,406 v2 WETH pairs of r6tape with first Sync WETH reserve 0.9-2.1 ETH. Seed-1 (0.99-1.01 ETH) = 2,439 pairs (your "about 3,000"); of these 69 have token reserve 0.5e18-1.5e18 (64 of them = your dec9 csv).
- `tokmeta(token,pair,name,symbol,decimals,supply,owner,codehash,got_t)`: seed-1 pairs + the control set. Multicall at latest state; owner 0x0 = renounced; codehash = keccak(runtime code). STATUS: ~700 of ~2,430 done at time of writing (free RPC slow, ~40/min).
- `swaps(pair,block,li,t,tx15,tx_from,recipient,sender,amt0_in_net,amt1_in_net,grp)`: all Swap events in first 600 s of life for the 64-ish dec9 pairs (grp dec9) + 200 random other seed-1 pairs (grp ctl, seed 1): 33,402 rows in 21,852 blocks. tx_from filled by block fetch, STATUS: ~450 filled, ~7 h at current free-RPC rate.
- `pairs_sel(pair,grp)`.

Caveats
- The tape stores NET amounts (amount0_in_net / amount1_in_net), not gross a0in/a1in/a0out/a1out; sign gives direction. Mint/Burn events are not in the tape (v2ev has only swap+sync): liquidity adds/removes are visible only as reserve jumps in `v2ev` of r6tape.db.
- `sender`/`recipient` come from the Swap event (router vs end wallet); tx_from is the origin wallet.
- Tape ends block 83,999,994.

Example: `select g.grp, count(distinct s.tx_from) from swaps s join pairs_sel g using(pair) where s.t - (select created_t from seeds where pair=s.pair) < 60 and s.tx_from is not null group by 1`
