Custody & safety
Non-Custodial & Security
The protocol never holds your money in a wallet it controls. Contracts hold only what's in play, and no admin can take it.
Who holds what
GAP is fully non-custodial. There is no operator wallet that ever "holds user funds." On-chain, the contracts hold only:
- Locked session stakes — your
$BELLwhile a position is open, released back to you (right side) or partly burned (wrong side) strictly by the resolve rules. - The Floor Pot — funded by losing stakes and fees, paid out by weight.
- The insurance vault — VOID rebates and poke bounties.
Claims are pull-based (you call collect; nothing is pushed in loops), state is written before any external call (checks-effects-interactions), and per-user accounting is O(1) — no unbounded loops over players.
No team tap
Oracle safety
Outcomes come only from on-chain observables — Chainlink feeds read via their proxy, with dynamic decimals and a staleness guard (Robinhood Chain has no L2 sequencer-uptime feed, so freshness is enforced by feed updatedAt plus off-chain block-recency checks). Resolution is a TWAP over a window, so a single tick can never settle a session. If the official feed and the token feed disagree beyond a configured bound, the session VOIDs rather than guessing.
Audit status
The current core (PRINT, Combo, tickets, the pot, the oracle router, the calendar) ships with per-phase threat models and audit notes (THREATS-*.md / AUDIT-*.md in the repo), an invariants file where each invariant maps to a named test, and an adversarial test suite (fuzzing + reentrancy). Static analysis (slither) is run and its findings triaged — no open high or medium severity at this stage.
External audit gates custody features