How the registry reads the chain
The source, contract call, schedule and coverage behind each recorded observation.
Last verified against production: . See current limits and availability.
The scheduled jobs
The Registry daemon runs these 33 jobs against mainnet, chain 4663. A cadence is the delay after a run finishes. Jobs run independently, so a long scan can overlap another job while its own next run waits. The status page shows each job's last run, last success and available coverage.
The table uses the scheduler's base intervals. With a dedicated RPC, dex-state ticks every 30 seconds; its active-pool eligibility and published freshness threshold still use the 10-minute base interval. A faster tick works through due pools sooner. It does not reread every pool every 30 seconds.
| Job | Source | Method | Cadence | Where it shows |
|---|---|---|---|---|
| control-plane | AccessControlsRegistry on mainnet | Read pause, block, upgrade and role logs; call implementation() and paused(); retain a block checkpoint. | 20 s | Registry header, Changes, token control history and registry alerts |
| authority-match | Recorded authority events and enabled subscriptions | Match up to 200 unmatched events to registry or token watchers and enqueue deliveries. | 10 s | Dashboard Alerts, Telegram and webhooks |
| new-pool-match | Discovered pools and enabled new-pool subscriptions | Match pools after the subscription's starting block; apply depth and lookalike filters; enqueue up to 20 per watcher. | 1 min | Dashboard Alerts, Telegram and webhooks |
| chain-health | L2 RPC, Ethereum rollup contracts and the chain operator's status JSON | Read block timing, gas, confirmed assertions, governance and inbox activity; retain unavailable fields as unread. | 1 min | Registry chain health and chain API |
| feeds | Chainlink's Robinhood feed directory and matching feed contracts | Cache the directory for one hour; call latestRoundData() through Multicall3; record answers and round times. | 1 min | Token feed panel, Registry feed filters, history and token alerts |
| supply-events | Tracked issued-token Transfer logs | Scan transfers from or to the zero address as mints and burns, with separate resumable checkpoints. | 2 min | Token supply history, supply reconciliation and Changes |
| multiplier-events | Stock Token multiplier logs | Decode announced multiplier changes and retain their transaction and block references. | 5 min | Token multiplier history and Changes |
| token-state | Tracked token contracts | Multicall current and pending multipliers, effective time, pause flags and raw/display supply where supported. | 5 min | Token state panel, Registry filters, daily history and token alerts |
| api-prices | Robinhood's public /rhj/prices/{symbol} endpoint | Read bid, ask and trading halt; compare midpoint times the recorded multiplier with the feed answer. | 5 min | Token quotes, halt/divergence filters and history |
| corporate-actions | Robinhood's public /rhj/corporate-actions endpoint | Store announced actions and report additions or changed status after the initial baseline. | 1 h | Token corporate actions and Changes |
| canonical | Active Stock Token storage and bytecode | Read the EIP-1967 beacon slot and compare its address with AccessControlsRegistry; retain the code hash. | 6 h | Token canonical observation, Registry totals and Changes |
| bridged | Configured Ethereum token candidates and the L2 GatewayRouter | Call calculateL2TokenAddress(), check deployed bytecode and read ERC-20 metadata and supply. | 6 h | Registry bridged listings and token pages |
| transfer-ledger | Transfer logs for tracked assets, excluding wrapped native tokens | Apply balance deltas and daily activity in committed windows, 300 blocks behind head. | 1 min | Token holders, activity, concentration and history |
| holder-labels | Holder balances, known addresses, pools and mint recipients | Combine known labels with bounded getCode probes and mint-pattern inference for material holders. | 1 h | Holder labels and circulating-float categories |
| concentration | Covered transfer ledger and holder labels | Record top-holder shares, Gini and float categories when the ledger is sufficiently caught up. | 24 h | Token holders and concentration history |
| dex-pools | Uniswap v4 PoolManager Initialize logs | Scan pools with a tracked asset or quote on either side and store discovered pool identities. | 10 min | Markets, token DEX panels and new-pool alerts |
| dex-pools-v3 | Uniswap v3 factory PoolCreated logs | Scan tracked sides in bounded block ranges and store pool addresses and factory provenance. | 10 min | Markets, token DEX panels and new-pool alerts |
| dex-state | v4 StateView, v3 pools and quote-token balances | Read price state and liquidity for due pools; calculate prices and observed or estimated quote depth. | 10 min | Markets prices/depth, token DEX panels and premium observations |
| dex-tokens | Token contracts encountered in discovered pools | Read symbol, name, decimals, supply, bytecode and burn-address balances in bounded batches. | 1 min | Markets token pages, trust badges and metadata backlog status |
| dex-prices | Recorded pool state | Save eligible price samples and retain 48 hours for change calculations. | 5 min | Markets price changes and token DEX views |
| dex-tiers | Recorded pool depth, liquidity, activity and observation times | Assign active, quiet or dormant tiers to control subsequent sampling. | 1 h | Markets pool tiers and sampling coverage |
| dex-swaps | v4 Swap logs and factory-enrolled v3 pool Swap logs | Advance a bounded live tail 30 blocks behind head; validate window hashes and record raw swap legs. | 1 min | Markets activity, rolling-window coverage and swap-indexer status |
| dex-swap-backfill | Historical Swap logs for enrolled active and quiet pools | Extend contiguous coverage backwards for up to 100 pools in a bounded range. | 1 min | Markets rolling-window coverage and swap-indexer status |
| market-refresh | Queued requests for token metadata or pool state | Claim up to one token and one pool request per tick; use bounded RPC reads and persisted retry state. | 15 s | Markets and token pages after a refresh request |
| bridge-flows | Configured L2 gateway deposit and withdrawal logs | Scan tracked bridge movements 30 blocks behind head and record withdrawal waiting times. | 2 min | Bridged-token panels, bridge API and Changes |
| bridge-escrow | Ethereum gateway balances and recorded L2 supply | Resolve getGateway(), read the L1 token's balanceOf(gateway), and compare it with stored L2 supply. | 30 min | Bridged-token escrow panel and bridge API |
| issuer-docs | Robinhood Europe's legal hub and linked document headers | Parse document links; read ETag, Last-Modified and size with HEAD; track additions, changes and removed links. | 6 h | Issuer documents, token paperwork and Changes |
| issuer-pages | Configured Robinhood issuer and chain-notice pages | Fetch page text, remove markup and page chrome, and compare SHA-256 hashes. | 1 h | Issuer pages and Changes |
| feed-history | Attached Chainlink feed contracts | Call getRoundData() for up to 100 older rounds per feed per pass, toward a 2,000-round target. | 30 min | Token feed charts and feed-history API |
| second-source | Blockscout token details and counters | Read holder, transfer and supply counts; compare indexed supply with the recorded contract supply. | 1 h | Token second-source comparison and history |
| lookalikes | Blockscout token search and candidate beacon storage | Compare ticker/name claims; read the beacon for newly found candidates and retain observed holder counts. | 6 h | Lookalikes, token warnings, trust badges and Changes |
| supply-snapshot | Contract totalSupply() and recorded mint/burn totals | Once scanners are close enough to head, record total supply minus net mint/burn history for the UTC day. | 24 h | Token supply reconciliation, residual filter and Changes |
| state-daily | Recorded token state, feeds, quotes, holders and coverage | Upsert the current UTC day's observations; retain unread fields where the source was not read that day. | 1 h | Token daily history and history API |
Listings and address checks
A separate 15-minute service imports Robinhood's published Stock Token list, checks bytecode at listed addresses and refreshes ERC-20 metadata when due. Successful metadata reads are normally reused for seven days. Bridged assets come from a configured set of Ethereum tokens checked through the gateway router.
For an active Stock Token, the canonical job reads the EIP-1967 beacon storage slot and checks whether it points to AccessControlsRegistry. It also records the bytecode hash and the registry's recorded implementation address. The trust badge has its own listing, symbol and decimals checks, described on the trust page.
Lookalike discovery searches the first Blockscout results page for each tracked ticker. New candidates receive a beacon read; discovered DEX tokens can also supply folded-name collisions. Unicode normalization catches selected Greek and Cyrillic lookalikes and invisible characters. The result describes an address and matching labels; search coverage remains bounded.
Feeds, supply and holders
Chainlink answers carry the feed's update time. The reader uses a 24-hour heartbeat to mark an answer stale and keeps the previous successful observation when a call fails. Robinhood's quote comparison multiplies the bid/ask midpoint by the recorded token multiplier before comparing it with the feed.
The transfer ledger commits holder balance deltas, activity and block progress together. Newly tracked assets need their own historical coverage. Concentration and supply snapshots wait for their required scanners to catch up; a successful skipped run can still leave a figure unread.
The holder ledger stays 300 blocks behind head. A deeper reorganization is logged for investigation and its applied balances are not automatically reversed. Control-plane and supply scanners use separate hash checks and a 2,000-block rewind. Watch uses the different rollback path shown on its product page.
Holder labels combine known addresses, bytecode reads and mint-pattern inference. Blockscout holder counts remain a separate measurement. Daily history records available observations for the current UTC day, so an earlier missing day remains a coverage gap.
Markets work in bounded passes
Pool discovery reads supported v3 and v4 events involving tracked assets or quote tokens. State reads select at most 1,000 due pools, reserving one slot in four for the oldest backlog. Active pools become due after ten minutes and quiet pools after a day; dormant state is refreshed on demand. Failed reads retain the previous observation and defer retry.
Token metadata uses batches of up to 40 and a 45-second work window. Successful reads become due after a day; failed reads retry after an hour. Pool-state and demand reads have daily allowances of 40,000 and 4,000 RPC methods and also consume the shared 200,000-call bucket. Other readers have their own pacing and limits.
The swap reader records raw token legs and block hashes, then measures coverage for each rolling window. Historical USD valuation remains unavailable. A v3 depth reading uses that pool's quote balance; v4 depth is a one-percent price-movement estimate bounded by the shared PoolManager's quote holdings. Read the displayed timestamps and coverage alongside the figures.
Bridge and issuer observations
Bridge flows come from the configured L2 gateways. Escrow compares an Ethereum gateway's token balance with the stored L2 supply reading, which may have a different timestamp. Withdrawal waiting time is derived from recorded events and the configured challenge window; a claim still needs its own transaction.
Issuer document tracking compares linked-document headers such as ETag and Last-Modified. Issuer page tracking hashes cleaned page text. These observations help identify changed source material; they do not establish what a document's legal terms mean.
Freshness, failure and coverage
Each job records its start, finish, result and available error. Failed jobs retry with increasing delays capped by their normal interval. Partial reads can retain earlier values, so a successful job run alone does not make every asset current.
A job is late when its last success is older than twice its base cadence, with a minimum one-minute allowance. A history scanner more than 10,000 blocks behind is filling; if its checkpoint stops moving beyond the larger of 30 minutes or twice its cadence, it is stalled. Missing figure timestamps are unread. Token metadata can remain filling while due or failed entries remain.
The Registry daemon reports every 15 seconds. After a minute without a heartbeat, its overall status is stale. Live permits jobs that are still filling; degraded includes failing, late, stalled or never-completed jobs. The separate observer records those verdicts and changes every minute without advancing a job's own timestamps.
The status API includes checkedAt and ages measured from that reading, and caches the same reading for ten seconds. Read the verdict in the response body: stale data can still return HTTP 200. Per-figure newest times describe the newest recorded observation, so use asset timestamps and scanner coverage for a particular token.