Method v1

How a Reading Is Made

Where every number comes from, how it turns into risk points, and what it cannot tell you. The method is one open file (src/lib/method.ts) that the site, the tests and the keeper script all run.

The reading

  1. Pick the report block: the chain head minus 20 blocks. Every read below uses that block, so a later reader can repeat it with archive calls.
  2. Find the token's pools: v4 Initialize events naming the token on the four PoolManagers, and v3-style pools that a known factory returns from getPool() for the token against WHYPE, USDC or KNTQ at each standard fee or spacing.
  3. Read each pool's price and active liquidity, value the depth within ±2% (pools against HYPE, WHYPE, USDC or KNTQ only), keep the six deepest; the deepest is the main pool.
  4. Re-read the same pools 1 hour, 24 hours and 7 days earlier (block numbers from the block time measured over the last 200,000 blocks).
  5. Read the main pool's 24 hours of Swap events for hourly closes and swap counts; replay its ModifyLiquidity events for positions (v4).
  6. Take candidate holders from the explorer's list, re-read every balance and code size on chain at the report block, set pools and position managers apart.
  7. Write the inputs document (keys sorted, one JSON encoding), hash it with keccak256, and run the method on it.

Indicators and formulas

LIQUIDITY · weight 25%

Pool depth

How many dollars sit within 2% of the price, across the token's pools that a listed price can value.

Inputs: sqrt price + active liquidity of each pool at the report block; HYPE/KNTQ from Montra's public API, USDC at $1

points = clamp((log10 $250k − log10 depth) / (log10 $250k − log10 $1k)) × 10000

LP CONCENTRATION · weight 15%

Who holds the liquidity

The largest single position's share of the liquidity that is in range right now, on the main v4 pool.

Inputs: every ModifyLiquidity event of the pool replayed to the report block; must add up to the pool's active liquidity

points = clamp((top share − 20%) / (90% − 20%)) × 10000

VOLATILITY · weight 20%

How far the price swings

Daily volatility from the main pool's hourly closing prices over the last 24 hours.

Inputs: tick at the window start (archive read) + every Swap event in the window

σ = stdev(hourly log returns) × √24; points = clamp((σ − 2%) / (30% − 2%)) × 10000

HOLDERS · weight 25%

Who holds the token

The ten largest holders' share of circulating supply, with pools and position managers set apart.

Inputs: candidate holders from the explorer's list; every balance re-read on chain at the report block; code size per address

points = clamp((top-10 share − 20%) / (80% − 20%)) × 10000

ACTIVITY CHANGE · weight 15%

What changed lately

A burst of swaps in the last hour, or depth leaving the pools over 24 hours, whichever is larger.

Inputs: swaps in the last hour vs the 23 before; ±2% depth now vs 24 hours ago (archive read)

points = max(burst, fall); burst: 2× → 0, 10× → 10000 (log); fall: 0% → 0, 50% → 10000

Overall

One score, never a verdict

The weighted mean of the indicators read in full. Any missing indicator makes the whole reading "incomplete"; its band is never lower or moderate.

Overall score = weighted mean of the indicators that were read in full; weights renormalise over those. Bands: under 25 lower on measured inputs, 25–50 moderate, 50–75 elevated, 75 and up high. If any indicator is missing the band says "incomplete". Breakpoints in code: depth $250,000 / $1,000, LP share 20% / 90%, σ 2% / 30%, top-10 20% / 80%, burst 2× / 10×, depth fall 50%.

Sources

Elysium mainnet, chain id 99901, gas in HYPE, through the public RPC https://rpc.elysium.kinetiq.xyz (archive calls work there). The contracts below were identified on chain on 11 November 2026 (emitters of the v4 Swap event, explorer-verified names, getPool() answers) and read again for this site on 13 November 2026.

ContractAddress
Uniswap v4 PoolManager (v4 e2e1)0xe2e105d3f7209a9da11f83ccf3e7398a753823f1
Uniswap v4 PoolManager (v4 06c6)0x06c63714fbf1f5753017123e2fcfdede4540b2c4
Uniswap v4 PoolManager (v4 5fb0)0x5fb015a49f5b35073f9ce01c2adb287a75f89600
Uniswap v4 PoolManager (v4 b308)0xb308b5df891c300a5f5a5b8fdbc30108ba842490
v3-style factory (v3 1707, getPool by fee)0x1707327f626496a7b5b3872e7e4d2879df7d7a9f
v3-style factory (v3 8c60, getPool by fee)0x8c60243181370bda9a7d1a45b1249a8263da0158
v3-style factory (v3 29cd, getPool by tickSpacing)0x29cd8852ff040cfe74fb20277a121ed1293afb41
v3-style factory (v3 efd7, getPool by tickSpacing)0xefd7a089d3057f05189b05f74ffcf30610c42891
  • Dollar prices: HYPE and KNTQ from Montra's public API (https://api.montramarkets.xyz/api/stats), USDC counted at $1.
  • Candidate holders: the Elysium explorer API (https://elysium.kinetiq.xyz/explorer/api, tokenholderlist). Balances themselves are read on chain.
  • Token list on the scanner: tokens in pools with swaps in the last ~hour (chain), and Montra's public token list (its figures, labelled as Montra's).

Limits

  • A reading, not advice. Pervix never calls a token safe: low points mean low on the inputs it could measure, at the block it read.
  • Every number is read from Elysium at one confirmed block (20 blocks behind the head), shown on the report. The chain keeps moving after that.
  • If a read fails or cannot be decoded, that indicator is marked incomplete and left out of the score. An incomplete reading is never shown as low risk.
  • Dollar values use HYPE and KNTQ prices from Montra's public API and USDC at $1. Pools against any other token have no dollar value and do not count toward depth.
  • Depth within 2% assumes the active liquidity stays the same across that band.
  • LP concentration covers the main pool when it is a Uniswap v4 pool. v3-style positions sit inside a position manager and are not split by owner.
  • The holder list starts from the explorer's index; balances are then read on chain. An address missing from that index would be missed.
  • Token names and symbols come from the token contracts themselves. Only HYPE, WHYPE, USDC and KNTQ are on the checked list; a well-known symbol (USDC, kHYPE, ETH…) at any other address is flagged as not checked.
  • Pervix does not check a token's contract code (mint, pause, blocklist, upgrade). It measures the market around the token.
  • The tools work without $PERVIX. Alerts run while a page is open; nothing is pushed to you yet.

PervixSignalBoard

Keepers register once and post readings: score, coverage, the five components, the inputs hash, and the inputs themselves (emitted in the event). The board refuses inputs that do not hash to the stated hash, an empty or oversized document, and a reading for a block that is not yet in the past (it reads the Elysium block number from the ArbSys precompile, since block.number there is the parent chain's). A keeper cannot post an older reading for a token after a newer one. Anyone can flag a reading with an evidence hash; the keeper can answer once. Users keep up to 64 open alert rules; checkRule() evaluates a rule against a reading the same way this site does. No owner, no fee, no funds, no upgrade.

Questions about risk

Is a low score a safety rating?
No. Pervix measures five market inputs at one block. It does not read the token's contract code, its team or anything off chain. Low points mean low on what was measured.
Does Pervix hold or move funds?
No. It reads the chain. PervixSignalBoard stores readings and alert rules and accepts no funds: it has no payable function, no owner and no upgrade path.
Can a token be fake?
Yes. Anyone can deploy a token with any symbol, and create pools for it. Only HYPE, WHYPE, USDC and KNTQ are on the checked list; a symbol copying one is flagged, and only pools against those four get a dollar value.
Is PervixSignalBoard reviewed?
It is new and has not had an independent security review. It holds no funds, has no admin and keeps one rule per namespace (keeper, rule owner). Its tests and a written self-review are in the repository.

Planned

  • plannedPush notifications (browser push, email or messages) when a rule triggers. Today alerts run while a Pervix page is open, plus rules stored on chain.
  • plannedMore chains than Elysium.
  • plannedLP concentration for v3-style pools, split by position owner.
  • plannedA hosted keeper that posts readings for many tokens on a schedule. Today anyone can run the keeper script in the repository.
  • plannedLonger history (7-day and 30-day volatility) once a private RPC carries the extra reads.
  • plannedAPI access for other apps.
  • planned$PERVIX as the way to pay for alert quotas once they exist. Unproven until then.