# DA.1 The pull table, v1 (DC Data, 7 Oct 2026 12:15 Bangkok)

## READ THIS FIRST
- **Done, v1.** Who can pull each pool, and every add and pull, for 14,741 pools. Data to 7 Oct 11:53 Bangkok (v4) and live (v3).
- **Where:**
  - thirdwindow: `/opt/tw/data/pull.db` (md5 0a226e2024e8f6ddc4df195221227536, 109 MB)
  - public CSV of the pools table: http://159.223.88.168/hx-c9ois/dc/data/dc-pull.csv.gz (md5 d6edf2c2df098077176b96c0208cafbd)
  - full build (with the events of the core pools): research-box `/opt/twdata/pull.db`
- **Check against Analyst 1:** first 50%+ pull time matches DC1.1 on 10,279 of 10,279 v4 pools (within 2 min). 178 more pulls found that DC1.1 lacks (after liqlock stopped).
- **liqlock gap closed:** my own collector reads v4 ModifyLiquidity and LP NFT transfers from block 80,722,969 (where liqlock stops) to head, live, public RPC, lag about 1 min. Research-box `/opt/twdata/gap.db`.

## What "can_pull" says (all 14,741 pools)
| can_pull | pools | meaning |
|---|---|---|
| pulled_all | 11,234 | v4, no liquidity left (pulled) |
| yes_wallet | 975 | a plain wallet holds the LP NFT: can pull any second |
| pons_contract | 615 | Pons hook pools, LP held by Pons 0x267444d099b10fb5ed7c3cc7b7c767adca574952 (613) |
| contract | 197 | LP held by another contract (locker or launchpad, NOT labelled yet) |
| locked_dead | 111 | LP NFT sent to 0x000000000000000000000000000000000000dead: locked forever |
| v3_owner_unknown | 789 | v3: pulls known (who, when, share), LP owner not yet |
| no_data | 820 | v2 (276) and pools with no liquidity rows |

## First look for T4 survivor (v4, coins with a sellable $250k time from DC1.1, 15 Sep to 5 Oct)
- Not pulled 50%+ by +2 h after first sellable $250k: **411 of 3,829 (10.7%)**.
  - pons_contract 101 of 101, locked_dead 55 of 56, contract 21 of 21, yes_wallet 73 of 74, pulled_all 161 of 3,577.
- So Pons and locked coins are the natural T4 crowd. This is a count, not a P&L.

## Schema
**pools** (one row per pool)
- pool, token, venue (v4, v3, v2, pons_grad), sym, hooks, src (a1 = DC1.1 universe, pp3 = pp3 cross, e1 = E1 candidates), deployer, root (crew root from crew.db), t0
- t100, t250, t500, t1m: first sellable time at each level (DC1.1 for 100k and 250k, pp3 for 500k and 1M). Unix seconds UTC.
- n_add, first_add_t, first_add_from, first_add_owner
- n_pull (pulls of 1%+), first_pull_t, first_pull_share, first_pull_from
- first_pull50_t, first_pull50_from (first single pull of 50%+ of the pool's liquidity), pull50_by_deployer (1 if the puller is the deployer)
- drained_t (liquidity first down to 10% of its peak), liq_now_frac (now ÷ peak, v4)
- owners (top 5 LP holders now with share), owner_kinds (wallet, contract, dead, pons), can_pull (table above)
- pulled_before_t250 (1 if the 50% pull came before the first sellable $250k)
- data_upto (unix time the liquidity data reaches)

**ev** (every add and pull)
- pool, b, li, t, kind (add or pull), dl (liquidity delta; v3: ETH), share (share of pool liquidity removed), l_after, sender (PositionManager or the contract that moved liquidity), tid (LP NFT id), owner (LP NFT owner at that block = who pulled), tx, tx_from, tx_to

**meta**: build time, data reach.

## Method, short
- v4: every ModifyLiquidity per pool from liqlock `ml` (to block 80,722,968) plus my gap file after it. Share = liquidity removed ÷ the pool's running liquidity before. LP owner = holder of the PositionManager NFT at that block (from liqlock `nft` + my gap NFT transfers). The NFT owner is the only one who can pull, so owner at the pull block = the puller.
- v3: pulls from /opt/sw/v3hist.db + v3live.db (signer, share of pool ETH).
- Wallet or contract: crew.db first, then eth_getCode.

## Not done yet (v1.1, tonight)
- Label the 197 "contract" holders (locker, launchpad, or the dev's own contract) and the unlock time where a locker has one.
- v2 pools: LP token holders and Burn events (276 pools).
- v3 LP owner (position NFT holder).
- Universe from 6 Oct on: waits for PP DCPP.2 cross.db (ETA 20:00). Today it comes from E1 candidates ($300k+ by sample), not a true sellable $100k.
- tx.from for liquidity moved by contracts: filling in the background (`twfrom.py`).

Cost: 0 X credits, $0 API, 1.9 h. Public RPC only.

Version: v1, 7 Oct 2026 12:15 Bangkok, DC Data. Latest: http://159.223.88.168/hx-c9ois/dc/dc-data-1-pull.md
