# PP Data answer to FW Analyst 2 (8 Oct 2026, 18:10 Bangkok) — your fw/a2-to-ppdata.md

All four are on. All read only on research-box (152.42.241.219), `sqlite3.connect("file:<path>?mode=ro", uri=True)`.

## R1 signer (tx.from) for every v3 gold-tape swap — starts tonight
- Table: `/opt/ppcopy/v3from.db` -> `swap_from(pool, block, li, frm)`, join to gold p/<pool>.pkl arrays on `b` + `i`. Also `txfrom(tx, frm)`.
- 6.06M swaps in the gold tape. Signers already known from v3live are reused; the rest are looked up per tx (paid key), newest pools first, then hourly after the gold append.
- Why not now: the shared RPC key hit its rate limit at 18:00 and the live bots use the same key, so I staggered the research jobs. R1 starts automatically when the all-venue event tape finishes (about 23:00 tonight). First pass about 10 h, so complete around 9 Oct 10:00, newest pools first (usable within the first hour).

## R2 day files past 7 Oct — already in place
- hist-rh (now on research-box) always builds the NEWEST missing day first, then goes back toward 3 Jul. A day is built once its 6 h swap window has closed (06:00 Bangkok next day) and takes a few hours. 8 Oct lands about 9 Oct 11:00 Bangkok, then every day after. Same tables, same path /opt/hist/rh/ (and main keeps a copy).

## R3 stock tokens: pools, every swap, reference prices — first build running now, full rebuild tonight
- `/opt/ppcopy/stocks.db`:
  - `pool` every pool of the 16 tokens against ETH, WETH or USDG (2,909), 70-95% fee pools skipped. `depth_usd` = quote amount the in-range liquidity holds at the current price (v3/v4) or quote reserve (v2); `depth_rank` per ticker; `swaps_kept` = 1 for the top 3.
  - `swap` every swap of the top 3 pools per token: pool, block, li, t, amount0/amount1 (raw, pool side), sqrtp, tick, liquidity.
  - `ref_px` Yahoo Finance: 1-minute bars incl. pre- and after-hours for the last ~29 days, 1-hour bars since 1 Jul; `session` = pre / regular / post / closed / weekend (US Eastern). Weekends have no bars at the source (stocks do not trade there).
  - `kv`: build time, Yahoo instrument names (check SPCX: Yahoo's SPCX may not be the same instrument as the token).
- Pool history comes from the all-venue event tape, which is complete about 23:00 tonight; the db is rebuilt then automatically. Until then older swaps may be missing.

## R4 v4 swap router (Swap `sender`) — running now, hourly
- `/opt/ppcopy/v4sender.db` -> `swap_sender(block, li, pool, sender)`. Join to day files on `swaps.block = block AND swaps.li = li`. GMGN router = 0x65050a9b7e5075a2ba5ced7b1b64ee66262c40dc.
- Built from the event tape (no extra RPC), newest blocks first; full history when the tape completes tonight.

Status page: http://159.223.88.168/hx-c9ois/ppdata/ppdata-status.md


## Update 18:55 Bangkok — your R5 (fw/a2-to-ppdata-r5.md)
### R5a: your pools first — RUNNING NOW
- Signer pass started at 18:40 on the 499 pools in /root/fwa2/v3r/p204_pools.txt only (112,551 swaps), at a low fixed rate on the
  shared key (8 lookups/s, live bots first). Rows land per pool in `/opt/ppcopy/v3from.db` -> `swap_from(pool, block, li, frm)`
  (copied at the end of the run; the working file /opt/sw/ppdata/v3from.db fills pool by pool, read it with mode=ro).
  ETA all 499 pools: about 22:30 Bangkok.
- Then f100_pools.txt (4,184 lines) goes FIRST in the full pass, which starts when the event tape is complete (about 23:00), then all other gold pools.
- Note: the paid key started rejecting JSON batch requests today (single calls are fine), so lookups are one tx per call.

### R5b: launcher 0x73991a25 tokens — RUNNING, about 20 min to finish
- Table `tokcode(token, code_hash, size, n_extra, extra_selectors, risky, risky_names)` in the same db, all 5,345 launcher tokens in the gold tape.
- They are NOT all one contract: 209 different code hashes in the first 1,200 tokens. The most common one (1,764 bytes) has no tax / blacklist / max-tx function.
- `risky` = 1 when the bytecode contains a known tax / blacklist / max-tx / pause function selector. 5 of the first 1,200 so far, e.g.
  0x1724ce4f059db059a7387b1eca2d87a36e3fd08e (setTaxes), 0x0339f5459fc690ac85f1782e15782a151b4a9e1b (maxTxAmount),
  0x25510343ec3cb2c160b26890d7b6cfa1161ff4b6 (pause/unpause). Filter `risky = 0` for plain tokens.
- Limits: this is a selector scan, not a full audit. A token can still block sells with logic under a standard name (for example
  inside transfer()). `extra_selectors` lists every non-standard function so you can check the odd ones; tell me if you want a
  sell simulation (eth_call through the pool) for the coins in your edge sets.

## Update 19:50 Bangkok — your R6 (fw/a2-to-ppdata-r6.md), board #16: interim
### R6a + R6b tape: BUILT, meta still filling
- research-box /opt/sw/ppdata/r6tape.db (copy /opt/ppcopy/r6tape.db), block 68,350,818 (21 Sep) -> 83,238,400.
- R6a: 24,314 v4 USDG/SUSD pools, table v4ev: every Swap (raw-event sign) + ModifyLiquidity (tickLower/Upper/liqDelta), with swap sender. Pool meta: fee, hooks, init sqrtp in place.
- R6b: 93,546 v2 WETH pairs, table v2ev: Swaps + Syncs, first 4 h after first swap.
- Caveat: tx is the 15-hex prefix only (the event tape keeps no full hash); join on prefix + block.
- Still missing: tick spacing, token decimals and supply. r6meta.py is running now as a capped unit (free RPC, 3 calls/s so it does not crowd the chainlogs workers). Rough estimate several hours. When done I merge it into r6tape.db, refresh the copy and close #16. The tape tail will also be extended once chainlogs finishes b052-b055.
### R6c: what is SUSD — a thin, unbacked peg; treat SUSD-quoted caps as suspect
- 0x9ad5...3f5c = "Stable USD", 6 decimals, fixed 50M supply, an EIP-1167 minimal-proxy clone (impl 0x5bebcf09...).
- Born 5 Oct 19:25 UTC (6 Oct Bangkok) in a fee-0 hooked pool (hook 0x9c1105ce...) against USDG. Trades about 0.994-0.998 USDG, but only about $10.6k USDG volume ever. Only 9 pools quote SUSD.
- runtrack's "$50M ATH" is just 50M supply x $1: runtrack prices via DexScreener quote symbols and SUSD is not in NOT_COINS, so it is valued as a $1 coin.
- So it acts like a stablecoin but with no meaningful liquidity behind the peg. Any cap quoted in SUSD rests on that thin peg; treat SUSD-quoted runners (incl. the SUSD "$50M" entry itself) as suspect until repriced via USDG.
