[DEGEN_GAMES]S1
Season 1 · Diamonds vs Paper
Season 1 · Audits

Adversarially reviewed.

Not third-party audited.

What the code cannot do, how it was reviewed, and where that stops. Each claim below names the function that makes it true. The source is verified on the explorer; read it.

01 — What the code cannot do

Properties of the contracts, not promises.

Nothing can mint except the game, and the game cannot mint to a wallet.

The token's mint and rebase are callable only by policy. policy is the Hub, and lockPolicy() froze it — one-way; no unlock function exists. The Hub's mint accepts only two destinations: the pool, or a vault the season registered. There is no path by which new supply lands in an externally-owned wallet, ours included.

Ticket · onlyPolicy · lockPolicy()
TicketHub · mint · to == pair || moduleDestination[to]

Minting and contraction are rate-limited by constants.

The Hub caps new supply at 200% of the settlement base per settlement and contraction at 5% of it. The Season 1 Policy sets its own tighter contraction cap at 3%, bounded between 1% and 5%. A rebase can only shrink — the token rejects a positive delta — and growth goes only through the destination-limited mint.

TicketHub · MAX_MINT_BPS_PER_WINDOW · MAX_CONTRACTION_BPS
TicketPolicy · contractionCap · MIN_CONTRACTION_CAP … MAX_CONTRACTION_CAP
Ticket · rebase · supplyDelta <= 0

Transfer behaviour was fixed at construction.

transfer, transferFrom, transferAll and transferAllFrom move balances at the current index and nothing else: no hook, no fee, no exempt list, no variable read but the index. policy does not appear in any of them. The contract is proxy-free — a constructor, no initialize, no delegatecall, no selfdestruct. There is no admin path to change how a transfer behaves, before or after lockPolicy.

Ticket · transfer · transferFrom · transferAll · transferAllFrom

No key can take from a wallet.

There is no seize, no burnFrom, no blacklist. burn burns the caller's own balance only. The Safe that owns the contracts can change parameters inside hard-coded bounds during a config window, install the next season's module through the Hub's delay, and pause. It cannot move your tokens.

Ticket · burn · Ownable
TicketHub · setModule · SWAP_DELAY

The pool's liquidity is burned.

At finalize, Genesis mints the LP tokens to 0x…dEaD. The USDG and TICKET in the pool cannot be withdrawn by anyone, ever.

TicketGenesis · finalize · pair.mint(DEAD)

A pause stops the machine. It never traps your money.

pause() closes the ways in — stake is whenNotPaused — and stops rebases. It does not close the ways out: requestUnstake is not paused, and a queued exit can be withdrawn during a pause, because a pause would otherwise hold every exit in flight for as long as it ran.

A pause runs 24 hours. The pause admin can extend it to at most 30 days — a third of a season. The season's clock accounts for every paused second, and the exit path above stays open for all of it.

TicketStaking · stake whenNotPaused · withdraw · released || _paused()
TicketHub · pause · PAUSE_WINDOW · extendPause · MAX_PAUSE_EXTENSION

Genesis deposits can always come back.

If Genesis is never finalized, abort() opens refunds of every deposit in full after a seven-day grace. Above the cap, the excess is returned pro rata by refund() — a second, separate transaction, which the page tells you before you sign the first.

TicketGenesis · abort · FINALIZE_GRACE · refund · refundOf

02 — How it was reviewed

Two independent models. One brief.

Adversarial review, in rounds, by two independent AI models. Each was given the contracts, a ledger of every path value can take through the system, and a brief that asks it to break the code and to check every citation in it — and none of our reasoning about what we had already fixed.

Both found real problems. The most serious was in our rules rather than our contracts: the Jackpot draw as published could be gamed by splitting a stake across many wallets. We found it, reproduced it against the real contracts, and changed the rule.

Every finding was reproduced in the EVM before it was accepted, then fixed in the code or restated on this page. The full report and our reproductions are linked below.

Four mechanical checks gate every release: every claimed bound cites the function that enforces it and the citation resolves; every ABI the site uses matches the contracts; every owner-only call has a named owner in the hand-off; every deploy input sits inside the bound the constructor enforces.

And a full rehearsal on Robinhood Chain's testnet: a real Genesis with real wallets, oversubscribed on purpose, finalized, handed to a 2-of-3 Safe, claimed in two transactions, and run night by night by the same keeper that will run mainnet.

What the second review found, and what changed

findingwhat it waswhat changed
Jackpot drawN distinct wallets, equal shares: nine one-unit stakes beside one real staker took 90% of a drop.N tickets, drawn with replacement, paid per ticket. Same harness, both rules: 90% → 0.000%.
Supply boundWe said "×2.95 per settlement". That assumed a hostile module would also contract 5%.Restated: ×3 per settlement, ×27 per 24 hours, mint-only. Reached in the EVM.
Green nightsThis site said a green night pulls the price back to target. It is proportional to the day's average, applied to the current pool.Rule kept — it is the game — and every sentence that promised a reset corrected, here and on the rules page.
Season lengthA season configured for N days settles one night more than N — two more if the first night lands late in its window.Configured one day short of the advertised season, so the two agree; the reason is recorded where the constructor argument is read.
Queued exit feeOur ledger said a queued exit's fee keeps falling while queued. It is pinned at the request.Restated.
Owner timelockThis site said a public timelock stops the multisig. There is no timelock at launch.Restated, below and on the rules page.
Prediction marketThree findings in a module that is not wired this season.Stays unwired until each has a fix and a test.

03 — Where that stops

Read this part twice.

Nothing backs $TICKET, and you can lose everything you put in. No claim on assets, no redemption, no floor. The price can go to zero.

These are AI reviews. They are not an audit by a security firm, and this page does not call them one. They found real problems — the second found problems the first had missed across every round it ran, which is the clearest statement of their limit we can make. They are not a substitute for a professional audit and not a guarantee that none remain.

Things you should know that no review changes:

This game is not available to UK persons. Access from the United Kingdom is blocked.
Not available to UK persons. This is a game, not an investment, not a yield, and not money.
The game · How it works