# #523 LP position owner per native no-hook pool (dataeng, 10 Oct)
File: /opt/ppcopy/lpowner.db (research-box), script /opt/sw/dataeng/lpowner.py (resumable, paid research RPC ~450 getLogs calls, ~$0.003).
Source: all ERC-721 Transfers of the v4 PositionManager 0x58daec31... (1.76M, 22 Sep to now, /opt/sw/dataeng/lpowner_tr.db tr(block,li,tx,tid,frm,too)), joined by full tx hash to each pool's PositionManager liquidity-add txs (r6nat2+r6nat3 meta = 4,852 native pools; 4,377 have PM adds; the other 475 only have adds from other senders).
- lpowner(pool PK, token_id, owner, cur_owner, n_transfers, t_mint, block_mint, tx_from_mint, t_first_remove, t_last_remove, liq_added, liq_removed, n_pos_in_pool): first position of the pool. owner = mint recipient, cur_owner = last holder. 2,256 positions have since moved (owner != cur_owner).
- lpmint(pool, token_id, owner, cur_owner, n_transfers, block, t, tx, tx_from): every mint in an add tx (48k rows); 770 pools hold >1 position.
- Owners repeat heavily: 1,768 distinct owners for 4,377 pools; top 5 own 202-338 pools each (0xd1df0676.. 338, 0x851f7af1.. 271, 0x511a69da.. 227).
- liq_added/removed are raw liquidity units summed over all PM-sender events of the pool (kind 10); t_first/last_remove from the same. 3,705 pools have a removal.
Caveats: removals from other senders are not in the PM sender filter; "owner" can be a contract (router/vault) not the economic LP.
Example: select o.owner, count(*), avg(t_first_remove - t_mint) from lpowner o group by 1 order by 2 desc limit 20;
