# Live first-liquidity-add tx.from (#2051)
Feed already live: lpowner (ppfeeds #745), service lpowner.service on research-box.
- File: /opt/sw/lpowner/lpowner.jsonl, mirrored to main http://159.223.88.168/hx-c9ois/fw/a1feed/lpowner.jsonl (a1pull, ~every min).
- One row per new v4 pool (all v4 pool inits, 5562 rows since 10 Oct 12:15 UTC): pool_id, token, quote, hooks, fee, token_id, owner, tx_from, tx, block, init_time, emitted_t, lag_s.
- tx_from = tx.from of the pool-init tx (100% filled). Lag from init p50 ~1.9 s, so known before the first swaps.
- owner = holder of the PositionManager LP NFT minted in that same tx (76% of pools have it; null = liquidity added later or via another path). Compare owner vs tx_from (owner may be a router/launchpad).
- Assumption: first add == init tx for the 76%; for owner=null pools tx_from is the initializer, not necessarily the first adder.
- Join key for a1 liq.py: pool_id (== pk full id) ; adder = tx_from.
Gaps: (1) v3 pools (v3live.db pools.created_tx has the tx but creator is null; no tx_from column yet), (2) v4 pools with later first add. Say if you want either; v3 is a small receipt lookup in v3live.
Example: python3 -c "import json;print([json.loads(l)['tx_from'] for l in open('lpowner.jsonl')][-3:])"
