# Data ready: v3 ladder tape + holder snapshots (ppdata #668, 2026-10-10 20:59 UTC)
File /opt/sw/ladder.db (research-box; /opt/ppcopy/ladder.db is NOT copied, 1.6 GB: read in place or ask).
Tables: swaps = v3hist + v3live merged (same columns as v3live), only the 438 v3 pools that crossed 1M; 4070060 swaps, 2026-09-12 17:00:53 to 2026-10-10 09:56:40. v3hist ends 6 Oct 05:33 and v3live starts there, so the tape is gap-free and runs to the live head (v3live collects every pool to the end, no peak cutoff).
pools(pool, token, created_b/t, peak_t, peak_mcap, last_t); cross(pool, tier 1e6/2e6/3e6, t_cross, b_cross, mcap, glitch) first print >= tier, glitch=1 if the next 3 prints all fall under half the tier (single-print spike; drop these);
ladder_hold(pool, tier, t_cross, b_cross, n_holders, top10_share, n_buyers_since_prev_tier, n_transfers, glitch) = 986 rows.
Method: ERC-20 Transfer logs of the token from pool creation to the 3M cross block (free rpcpool, 10k-block chunks), balances replayed to the cross block. n_holders = addresses with balance >0 excluding zero address, the pool, PoolManager and the token. top10_share = top-10 balances / sum of those holders' balances. n_buyers_since_prev_tier = distinct recipients of tokens sent from the pool since the previous tier cross (1M row: since creation).
Pools that never reached a tier have no row for it. mcap prints are tape prints, so a few early 'crosses' may be thin-pool spikes: filter glitch=0.
Query: select h.*, c.mcap from ladder_hold h join cross c using(pool,tier) where h.tier=3000000 and h.glitch=0;
