DetectedDetected

What runs off chain, what runs on chain, and how a payout gets to your wallet.

The game runs on Detected’s servers. Rewards live on Robinhood Chain, an Arbitrum Orbit layer 2 (chain ID 4663) where gas is paid in ETH. Anything off chain is labelled as such.

Off chain · Detected’s servers

  • The daily set of pairs
  • Your draw of 10
  • The six-second timer
  • Your answers and score
  • Streaks and the board
  • Reviews and holds

On chain · Robinhood Chain

  • The payout contract
  • The 50 stock tokens
  • Every payout transfer
  • Your wallet and balances
  • Token pauses by the issuer
  • Address screening

Payouts are sent by a contract on Robinhood Chain. The payout worker’s key can do one thing with it: send an allowed stock token to a player, at most a fixed amount per transfer and per token per day, and never twice for the same drop and token. If that key ever leaked, the most it could move is one day’s caps before it is replaced.

Every payout emits PaidOut(dropId, token, to, amount), so each one has its own transaction you can open from the app.

Payouts are Robinhood stock tokens: ERC-20 contracts with 18 decimals, upgradeable and pausable, issued by Robinhood Assets (Jersey) Limited. All of them are beacon proxies pointing at one beacon, so a single upgrade changes them all:

Splits and dividends are handled by a UI multiplier (ERC-8056): the raw balance never changes, and balanceOfUI() returns the display balance in shares. The app reads newUIMultiplier() and effectiveAt() before any corporate action.

MakerTokenContract
GeminiGOOGL0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE3
ChatGPTMSFT0xe93237C50D904957Cf27E7B1133b510C669c2e74
Meta AIMETA0xc0D6457C16Cc70d6790Dd43521C899C87ce02f35
Amazon NovaAMZN0x12f190a9F9d7D37a250758b26824B97CE941bF54
FireflyADBE0x232B8ed6377BE97813853B0Ac104c4Cda8378d1B
QwenBABA0xad25Ac6C84D497db898fa1E8387bf6Af3532a1c4
Other AI modelsNVDA0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC
DollarUSDG0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 (6 decimals)

All 50 tokens Detected can pay in are on the makers page, each checked on chain: a “• Robinhood Token” name, the matching symbol, 18 decimals and the shared beacon.

Rewards are set in US cents. Each token has a Chainlink price feed that returns the price of one raw token, which is the share price times uiMultiplier(). The payout’s raw amount is:

raw = usdAmount × 10^18 × 10^feedDecimals ÷ feedAnswer

A price is used only when it is fresh (within the feed’s heartbeat), above zero, Chainlink’s layer 2 sequencer feed says the chain is up, and the token’s oraclePaused() is false. Feeds update 24 hours a day, five days a week, so they are stale every weekend. To show a balance in dollars: balanceOfUI() shares at the share price (feed answer × 10^18 ÷ uiMultiplier()), or balanceOf() at the feed price, never one with the other.

The app preloads every item in your drop as encrypted blobs, each with its own key for you and that round, padded to the same size as its twin and served with identical headers, so nothing about a file gives away which side is AI. When you start a round, the server releases that round’s two keys and records the time. Your answer counts if it arrives within the window; the server’s clock decides.

One paid drop per player per day is enforced by a unique key on (player, Riga date), so two requests at once can’t start two drops. Each pair’s catch rate is tracked through the day; a pair that suddenly becomes much easier is pulled from the draw.

Every pair belongs to one company. The real side is a licensed photo of something from that company’s world (Pexels or CC0 images from Openverse, with the photographer credited on the reveal): a self-driving taxi for Google, a game controller for Microsoft, a VR headset for Meta, a graphics card for Nvidia. A vision model writes a plain description of the real photo, and that company’s own model generates the AI side from it; Nvidia’s pairs use every other model. Companies are balanced across the day’s set.

Both sides are matched in every way except who made them: aspect ratio, size, format and quality, with all metadata stripped. Adults only: no children, public figures, logos, readable text, news, nudity or violence. A person approves every pair before it can enter a drop.

When a passing drop ends, the day’s budget is reserved in the same database transaction, and one payout per token is queued under the key (drop, token), so nobody is paid twice; the payout contract enforces the same rule on chain. The worker checks that the token isn’t paused and simulates each call before sending it.

Robinhood Chain’s sequencer silently drops any transaction that touches a screened address. If a payout has no receipt after 60 seconds and its nonce is still unused, the worker fills that nonce with an empty transaction to itself, marks the payout held (“address screened”) and carries on, so one screened address never stalls the queue.

Every address on this site can be opened on the Robinhood Chain explorer. The token list matches docs.robinhood.com/chain/contracts. The issuer’s documents are at robinhood.com/eu/en/legal/rhj.