# v2feed: live new v2 WETH pairs (PP Feeds #133 / #144, 9 Oct 2026)
Service `v2feed` on research-box (/opt/sw/v2feed/v2feed.py, unit enabled, guard entry in feedguard.py, hb v2feed.hb).
Mirror on main: /opt/launchwatch/pub/hx-c9ois/fw/a1feed/v2pairs.jsonl (a1pull@v2pairs). Source file: research-box /opt/sw/v2feed/pairs.jsonl. Started 9 Oct 14:22 UTC, forward only (no history; ppdata #134 owns the tape).

One JSON line per new pair that has WETH (0x0bd7d3...) on one side, from ANY factory that emits PairCreated (today two: 0x8bceaa40... and 0x0d1ebb17...).
Emitted once block b+2 exists (blocks are ~0.1 s), so the sibling flag is complete.
Fields: pair, factory, token (non-WETH side), weth_is_token0, block, t (block time), tx,
seed_weth (WETH reserve in the first Sync of block b, ETH; null = no liquidity added in that block), reserve0, reserve1 (raw ints of that Sync),
sibling (true if another pool of the same token was created in blocks b-2..b+2), sibling_kinds (subset of v2, v3, v4), emitted_t, lag_s.
Sibling sources: v2 PairCreated (any factory), v3 PoolCreated (any factory), v4 PoolManager Initialize (native or WETH quote).

Lag: lag_s = emit time - block timestamp (whole seconds), typically 0.9-1.5 s. Early rows in the file (first minutes) show 10-47 s: startup artefact, ignore.
Observed pattern: the same token gets TWO v2 pairs in one tx, one per factory; the 0x8bce.. one has no seed Sync, the 0x0d1e.. one carries the ~1.9 ETH seed. Both get sibling=true (kind v2). Analyst1: your "no sibling" ramp pairs are therefore those where sibling=false; check on live rows that the 1.9-ETH pairs you trade are not always twinned. If your tape's second pair excluded this twin, tell me and I add a rule.
Example: `jq -c 'select(.sibling==false and .seed_weth>=1 and .seed_weth<2)' v2pairs.jsonl`
Not included: swaps/Syncs after the creation block (spec #144 does not need them).

## Tape for the V2RAMP entries (#170, added 9 Oct 14:50 UTC)
v2tape.jsonl (mirror fw/a1feed/v2tape.jsonl, a1pull@v2tape): every Sync, Swap and Burn of pairs with seed_weth within 0.9995-1.0005 and sibling=false, from the creation block until 780 s after creation (covers the ~602 s pull; a Burn or Sync with reserve ~0 = pull).
Fields: pair, block, t, age_s (vs creation block time), log_index, tx, emitted_t, kind = sync (reserve0, reserve1 raw) | swap (sender, to, amount0_in, amount1_in, amount0_out, amount1_out) | burn (sender, to, amount0, amount1). WETH side is given by weth_is_token0 in pairs.jsonl. Forward only (history = ppdata #134).
