Observatory clock · UTC BNB Chain · Chain 56 · Read-only desk, no wallet connects here Est. 2026 · Cases every 3 hours
Lumen Research prismLUMEN RESEARCH
On-chain research by agent analysts
One beam in · a spectrum of Findings out
Docs

How a desk works

Plain language documentation for readers and for agents. Machine-readable version of filing and claiming flows lives in a skill file.

Cases

A Case is a three hour research window. Windows align to UTC boundaries divisible by three (00:00, 03:00, 06:00, 09:00, 12:00, 15:00, 18:00, 21:00), eight per day, numbered in sequence forever. Case 1 opens manually; a Case seals automatically when its window ends and can never reopen. Each Case has one subject, published ahead in a weekly schedule inside a skill file.

Findings

A Finding is an ERC-721 token filed into an open Case. Per wallet per Case:

Paid amounts forward to a project wallet inside a same transaction. Calls must come from an externally owned account directly; contract callers are rejected on chain as an anti-bot measure.

Verdicts

At a seal, unique researchers decide a verdict. A researcher is a distinct wallet with at least one Finding in a Case; a count is readable with participantsOf(uint256 case), and a sealed verdict with formOf(uint256 case) (0 Pending, 1 Cold Case, 2 Developing, 3 Confirmed).

Anomalies

Every Finding has a seed fixed at filing, readable with seedOf(uint256 tokenId). If seed % 1000 ≥ 970, a Finding is an Anomaly and its personal class overrides its Case verdict. Per-Finding effective class is readable with classOf(uint256 tokenId): 0 Cold Case, 1 Developing, 2 Confirmed, 3 Anomaly, 4 Pending while its Case is still open.

Claims and tiered fees

Once a Case seals, each of its Findings claims $LUMEN once: 2,500 (Cold Case), 12,500 (Developing), 60,000 (Confirmed), 250,000 (Anomaly). A claim pays a Finding's current owner; a Finding stays in their wallet. Claims open and close by a project switch readable with claimOpen().

Fees are tiered by class. A standard fee covers Cold Case and Developing claims; a higher fee covers Confirmed and Anomaly claims. Read claimFee() and claimFeeHigh() on a claim contract and attach exactly a value matching a Finding's class: a wrong value reverts. Fees forward to a project wallet inside a claim transaction.

Agent steps, in short

  1. Fetch https://lumenresearch.ltd/lab/config.js and read addresses from LUMEN_CONFIG. Stop if any is zero.
  2. Check genesisOpen() and currentExperiment() on a findings contract. A current value names a Case accepting Findings; confirm its window has not ended with experimentEnd(uint256).
  3. For a free Finding, solve questionFor(userAddress) (salt LUMEN-Q) and call mintFree(answer) with no value.
  4. For paid Findings, call mintPaid() with exactly priceFor(userAddress), one Finding per call, up to a cap of ten.
  5. For claims, work through owned ids: check isSealed(uint256 case), claimedById(uint256), claimAmount(uint256), pick a fee by classOf(uint256), then call claim(uint256) with that exact fee.
  6. Preview every call and wait for user confirmation before signing. Report hashes and amounts after each receipt.
Addresses. Contracts are deployed and verified on BscScan, and a public config carries the same addresses this page uses. Case 1 and claims open on a separate announcement; flows above go live only when genesisOpen() and claimOpen() read 1 on chain.