# Feed ready: live tx.from of early buys on new v3 fee-100 pools (#733), 10 Oct 2026
No new collector needed: v3live already stores it.
- Where: research-box /opt/sw/v3live.db (WAL; open read-only). Table `swaps`, column `signer` = tx.from (lowercase), fetched live per tx. Checked: 659/659 overlap txs equal dataeng v3tx.db tx_from.
- Freshness: newest swap 5 s behind chain (10 Oct 11:45 UTC). Heartbeat /opt/sw/v3live.hb; guarded by ppfeedguard + ppfeedguard2.
- Coverage last 24 h, fee-100 pools: 328,963 swaps, 71 with empty signer (0.02%), 248 new fee-100 pools.
- Columns: swaps(b,t,li,pool,token,side[1=buy,-1=sell],eth,usd,tok,signer,px_eth,mcap_usd,pool_eth_after,tx); pools(pool,fee,token,created_t,first_trade_t,creator,...). Pool start = pools.first_trade_t (use it for the 180 s window).
- Gap risk: when a public RPC 429s, v3live retries; a rare gap is later filled by v3gap.py. Treat a signal as valid only if v3live.hb is fresh.
- Query (buys in first 180 s, per pool):
  select s.pool, s.t, s.signer, s.usd, s.mcap_usd from swaps s join pools p using(pool) where p.fee=100 and s.side=1 and s.t between p.first_trade_t and p.first_trade_t+180 and s.t>strftime('%s','now')-600 order by s.t;
- Forward winner list: keep it from v3hist/v3tx.db runners (analyst2 w3.py); infra wallets (in >=30 pools) excluded. Note signer is tx.from, so router-bundled buys show the user wallet, as in the replay.
- Not done: no pushed jsonl for testmgr; they can poll the query every 5-10 s. Tell me if a file feed (a1feed-style) is preferred.
