πŸ“– Operator Documentation

Everything you need to launch and run a white-label, provably-fair on-chain casino on the MAY protocol β€” from zero to a live branded site with a working back-office.

Contents 1 Β· How the protocol works 2 Β· Creating your brand (wizard walkthrough) 3 Β· Bonus economics & the EV formula 4 Β· AML posture 5 Β· Admin dashboard guide 6 Β· Risk module 7 Β· Emergency procedures (forceClose) 8 Β· FAQ & honest limitations

1 Β· How the protocol works

State channels, not server trust. Every play session is an on-chain payment channel on Arbitrum One (ChannelManager V4). The player deposits RUSD into the channel; the house escrows an allocation. Every round is then settled off-chain by both parties co-signing the new channel state β€” instant and gas-free β€” while the contract guarantees either side can always settle on-chain.

Provable fairness β€” zero external oracles. Randomness is fully two-party. At channel open the session seed is fixed by commit-reveal: the house publishes houseSeedCommit = keccak256(abi.encode(houseSeed)) before it ever sees the player's seed; the player's wallet signature binds both playerSeed and that commitment; the open transaction reveals houseSeed and the contract enforces sessionSeed = keccak256(abi.encode(houseSeed, playerSeed, channelId)) (no Pyth, no VRF, no fee float). Each round then additionally requires hash-chain preimages committed by both parties before play: outcome_k = keccak256(playerReveal_k, houseReveal_k, sessionSeed, channelId, k) mod N. Neither side can predict or steer an outcome; every round's math β€” and the seed itself β€” is re-verifiable in the fairness verifier. Game rules (blackjack, roulette 0–36, punto banco baccarat) are enforced by on-chain verifier contracts β€” a state that violates the rules cannot settle.

Brand accounting is native to the contract. Channels carry an operator/brand address; brand markup accrues on-chain (FeeSplitter.brandAccrued) and is claimable only by your wallet via claimBrand(). Nobody β€” including the platform β€” can redirect your accrual.

One house node (the platform's) is the channel counterparty and liquidity provider for all brands on shared infrastructure. Your brand controls: identity, enabled games, faucet, bonus tiers, AML flag, risk thresholds, admin access, and on-chain markup accrual. It does not run its own settlement β€” that is what makes launch instant and keeps the security audited-once.

2 Β· Creating your brand (wizard walkthrough)

Open the provisioning wizard:

  1. Identity β€” name, short name, planned domain, optional SVG logo (a wordmark is generated if you skip it).
  2. Palette β€” 8 colors; the entire site re-skins from these (CSS custom properties, no code).
  3. Operator wallet β€” the address that gates your admin dashboard, signs risk actions, and receives claimBrand accrual. Use a wallet you control; it cannot be changed after provisioning without the platform.
  4. Games β€” enable any subset of the 13 games.
  5. Features β€” faucet, bonus engine (tiers), open-list AML screening.
  6. πŸ‘ LIVE PREVIEW β€” renders your brand instantly in this browser (real code, session-scoped).
  7. πŸš€ GO LIVE β€” sign one free message with the operator wallet. The platform validates your config (schema + bonus EV check), then deploys a real tenant at maycasino.xyz/t/<your-brand>/. Typically live in 1–3 minutes. All 16 pages, games, wallet flows, bonuses and your gated admin work on your URL.
Shared-infra honesty: your tenant URL is a path on the reference domain, served by the same static deployment and the same house node. An own-domain dedicated deploy (your brand.json baked into a separate instance) is a platform upgrade β€” domain registration (~$11–40/yr) plus hosting.

3 Β· Bonus economics & the EV formula

The bonus engine is wallet-reputation based: fresh wallets start at zero; on-chain deposits and settled real wagering volume unlock tiers; tier credit = creditPct% of the wallet's deposits, locked until the wallet wagers credit Γ— withdrawalWagerMultiple.

The farming problem: a "bonus farmer" grinds the wagering requirement on your lowest-house-edge game with minimum-variance (near-even-money) bets. Their expected cost of unlocking is:

expected cost  = credit Γ— withdrawalWagerMultiple Γ— minHouseEdge
farmer profit  = credit βˆ’ expected cost
             = credit Γ— (1 βˆ’ withdrawalWagerMultiple Γ— minHouseEdge)

β‡’ the config is FARMABLE (+EV for the farmer) iff
   withdrawalWagerMultiple Γ— minHouseEdge < 1
Lowest-edge game enabledHouse edge usedMinimum safe multiple
Blackjack0.50%β‰₯ 200
Baccarat1.06%β‰₯ 95
Roulette (European)2.70%β‰₯ 38
House mini-games only2.00% (conservative)β‰₯ 50

The πŸš€ GO LIVE validator enforces this: tier configs where the multiple Γ— your lowest enabled edge is under 1 are rejected with the exact numbers. Keep creditPct ≀ 25 and remember the multiple is a floor, not a target β€” a margin above the minimum covers variance and imperfect play tracking.

Honest framing shown to your players (built into the bonus panel): bonuses statistically converge to house-edge losses over the required wagering β€” a retention reward, not free money. "No Santa Claus."

4 Β· AML posture

The protocol keeps compliance decentralized and vendor-free: no Chainalysis, no KYC vendors at protocol level. If you enable amlOpenListCheck, the house node screens every session-open address against the public OFAC SDN digital-currency list (open data, refreshed daily) and refuses to open sessions for listed addresses β€” before any funds move.

Honest limits: open-list screening only. No clustering, no graph analysis, no vendor risk scores. If your jurisdiction requires KYC/full AML, you layer your own provider on top at the brand level β€” the protocol does not stand in the way, and does not do it for you.

5 Β· Admin dashboard guide

Your back-office lives at /admin.html under your tenant URL. Access = connect the operator wallet + sign a one-time message (free). Modules:

6 Β· Risk module

Signals are computed by the house node from its own session data (wallet-reputation is the anti-abuse foundation β€” no external vendors):

SignalWhat it detectsWeight
Bonus-farm patternHigh share of near-even-money bets placed while bonus credit was locked (min-variance grinding)40
Rapid cyclingOpen→close cycles under 10 minutes with <5 RUSD wagered (probing / airdrop-style behavior)25
Shared funding sourceMultiple wallets whose earliest incoming RUSD transfer came from the same parent address (one-hop only)25
Sanctions attemptsSession opens attempted while on the public OFAC SDN list100

Thresholds are configurable per brand (riskThresholds in brand.json). Actions: 🏷 flag (annotation) and β›” block β€” the house node refuses new session opens for that wallet on your brand. Both require your operator wallet's signature.

What blocking can never do: touch on-chain funds. A blocked player's existing channel balance remains fully withdrawable via cooperative close or forceClose. The protocol guarantees exit β€” that guarantee is exactly why players trust the system, and it applies to abusers too. Blocking is a business decision about future service, not a seizure tool.

Honest limitations: funding analysis is one-hop RUSD transfers only (no clustering); volume-based signals live in the node's ledger, which is rebuilt from chain for deposits but resets wagering counters on node restarts; tenant deposit attribution is runtime-only (boot-time chain rebuilds land on the platform ledger).

7 Β· Emergency procedures

Player can't reach the house node

Every game page has πŸ†˜ Emergency withdraw β€” it submits forceClose with the latest dual-signed state directly to the contract. After the challenge window, funds pay out exactly per that state. No house cooperation needed. This works even if the platform disappears entirely.

Node restarts / redeploys

The node checkpoints open channels' latest dual-signed states on-chain before shutdown, and clients can recover sessions from GET /session/:address. Abandoned channels are reconciled automatically.

Operator wallet compromise

Your operator wallet gates admin/risk actions and receives accrual. If compromised, contact the platform to rotate the address in your tenant config (config change; on-chain accrual already claimed cannot be recovered β€” use a hardware wallet).

8 Β· FAQ & honest limitations

Is my casino a separate deployment? No β€” shared static site + shared house node, path-routed at /t/<brand>/. Own-domain dedicated deploy is an upgrade. Settlement is the same audited contract set either way.

Who holds player funds? The ChannelManager contract escrows them per channel. Not you, not the platform's web servers.

Can I change the game math? No. Game rules are enforced by on-chain verifiers; that is the product. You choose which games to enable, plus markup ppm.

What data can I lose? The bonus/risk ledger's wagering counters are only as durable as the node disk (deposits rebuild from chain). Treat reputation volume as best-effort operational data, not accounting. On-chain accounting (deposits, closes, fees, your accrual) is permanent.

Multiplayer / poker? Deliberately not offered β€” solo-vs-house only, eliminating collusion vectors by design.

Where's the brand kit? The wizard's ⬇ DOWNLOAD BRAND KIT bundles brand.json, your logo and step-by-step notes β€” useful for the own-domain upgrade path.

πŸ— Create your brand β†’ Β· πŸ” Operator dashboard β†’ Β· πŸ›‘ Fairness verifier β†’