norm.cash

norm.cash ↔ norm.game — system architecture

norm.cash is the embedded wallet & payments engine. norm.game is the only surface players touch — every money action is embedded in-site.
Core principle — zero off-site redirects. Deposit, buy-with-card, swap, and withdraw all happen inside norm.game as embedded components. Players never leave the game to manage funds. Sending a player elsewhere is a chance to lose them.

The system

flowchart TB C([Customer]):::cust C --> AUTH{{One norm account · SSO}}:::auth AUTH --> GAME subgraph GAME [ norm.game — the only surface players touch ] direction TB PLAY[Games · casino floor]:::gnode WUI[Embedded wallet panel
Deposit · Buy with card · Swap · Withdraw
in-site, no redirects]:::emb PLAY -.- WUI end subgraph CASH [ norm.cash — embedded wallet and payments engine ] direction TB LEDGER[(Single ledger
source of truth)]:::ledger WAPI[[Wallet API
balance · debit · credit · rollback]]:::wapi PAPI[[Payments API
deposit · withdraw · swap · on-ramp]]:::wapi CUST[Custody]:::adapt SWAPE[Swap engine]:::adapt LEDGER --- WAPI LEDGER --- PAPI LEDGER --- CUST LEDGER --- SWAPE end PLAY <== real-time bet debit and credit ==> WAPI WUI <== deposit withdraw swap buy ==> PAPI ONR[On-ramp providers
MoonPay · Swapped · others
embedded widgets, not redirects]:::ext -.embedded inside.-> WUI ONR --> PAPI CHAIN[(Blockchains
BTC · ETH · USDT)]:::ext <--> CUST LIQ[Swap liquidity
Changelly / exchange]:::ext <--> SWAPE OPT[norm.cash standalone site
optional dedicated wallet]:::opt -.-> LEDGER classDef cust fill:#22e0a1,stroke:#12b483,color:#04150f,font-weight:700 classDef auth fill:#1b232b,stroke:#5b9dff,color:#cfe0ff classDef emb fill:#2a2410,stroke:#f7c948,color:#f7e6ad,font-weight:600 classDef gnode fill:#1f1c12,stroke:#7a6a2e,color:#f0e6c8 classDef ledger fill:#0f1a16,stroke:#22e0a1,color:#e8eef2,font-weight:700 classDef wapi fill:#123047,stroke:#5b9dff,color:#d6e8ff,font-weight:700 classDef adapt fill:#1b232b,stroke:#3a4a58,color:#e8eef2 classDef ext fill:#161b20,stroke:#3a4a58,color:#9fb0bd classDef opt fill:#12181d,stroke:#2c3945,color:#7d8a96
norm.game — the only place players go. Embeds the wallet panel + games.
norm.cash engine — ledger, custody, swap, on-ramp orchestration. Backend + widgets, not a destination.
Two API surfaces — Wallet API (bets) + Payments API (deposit/withdraw/swap/on-ramp).
External / rented — on-ramps (embedded), custody, swap liquidity, blockchains.

Customer journey — all on norm.game

Sign up once → one norm account (works on norm.game, and on norm.cash if they ever want it).
Fund it — without leaving norm.game — by depositing crypto or buying with a card through one of the embedded on-ramp integrations (MoonPay, Swapped, and others to come). However they pay, it lands as a balance in the ledger.
Swap to the play currency (USDT) in the same embedded panel — so game odds and accounting stay stable while BTC/ETH move.
Play. Every spin fires a real-time debit (stake) then credit (win) to the wallet API. Balance updates live, in-game.
Withdraw — also in-game. The ledger debits and custody signs the on-chain send. No redirect, ever.

The two API surfaces (norm.game embeds → norm.cash engine)

Wallet API — bets

GET /balancePOST /debitPOST /creditPOST /rollback

Real-time, idempotent. Every spin debits the stake and credits the win against the ledger. Retries never double-charge.

Payments API — money movement

POST /depositPOST /withdrawPOST /swapPOST /onramp-session

Powers the embedded wallet panel: generate deposit addresses, sign withdrawals via custody, run swaps, spin up an embedded on-ramp session — all without leaving norm.game.

Game studios integrate once through an aggregator that speaks the Wallet API pattern. The embedded wallet panel is norm.game's own UI calling the Payments API. On-ramp providers render as widgets inside that panel — never a redirect to their site.

norm.cash = the wallet & treasury engine · norm.game = the casino floor + embedded wallet · players never leave the floor.
One custodial ledger; funds are used, deposited, swapped and withdrawn all in-context on norm.game.