KEEPERS

Documentation

Reference for bands, ledger updates, scan policy, and what $KEEPERS unlocks. If a fact is not measured, we say we do not know.

Overview

  • KEEPERS measures how much of each equity token has not moved for 7, 30, and 90 days, plus the remainder that moved inside the last week.
  • Age of a position is time since the wallet's last transfer of that token in either direction.

Bands

  • deep: age >= 90 days of blocks
  • kept: age >= 30 days
  • settled: age >= 7 days
  • churn: everything younger
  • At ~0.102s per block, DAY_BLOCKS = 847,000.

Ledger rules

  • applyTransfer resets lastMoveBlock for both sender and recipient.
  • Excluded addresses (pools, routers) never enter the map.
  • Zero address is skipped. Wallets that drain to ~0 leave the ledger.
  • A uiMultiplier change recalculates share size without resetting lastMoveBlock.

Initial scan

  • The first build is a resumable batch job chunked by block range.
  • Until a scan completes for an asset, the UI prints not yet measured.
  • Never publish partial band fractions for an unfinished asset.

Data surface

  • Public: current cores by supply and by holders for every tracked asset.
  • $KEEPERS unlocks weekly history, custom thresholds, and embeddable cores.
  • Anti-pattern: projects cannot pay to highlight or rank a core.

Conduct

  • Aggregates only. No wallet addresses. No top keepers lists.
  • No labels that imply virtue or foolishness in holding or trading.
  • These tokens are not registered in the US and are not offered to US residents.

Snippet

function band(lastMoveBlock, head) {
  const age = head - lastMoveBlock;
  if (age >= 90 * DAY_BLOCKS) return "deep";
  if (age >= 30 * DAY_BLOCKS) return "kept";
  if (age >= 7 * DAY_BLOCKS) return "settled";
  return "churn";
}