# taborswanson1/monad_blitz_gamble architecture

> Architecture diagram of the GitHub repository taborswanson1/monad_blitz_gamble, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/taborswanson1/monad_blitz_gamble
- Repository: https://github.com/taborswanson1/monad_blitz_gamble

## Overview

Block Casino is a browser-based, block-timed betting application with a Solidity contract backend and a simulation mode. Players connect or start a simulated session, place bets during an open round, request settlement when needed, and view results after resolution; crash replays delay publishing round history and session totals. The frontend also includes sim-only Crash and Beauty Contest games and session-limit/reality-check controls. Source excerpts show frontend orchestration and game logic; contract internals and some client behavior are unsampled, so their relationships are not inferred.

Main entry points: [`frontend/src/App.tsx`](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/App.tsx) (Casino app), [`frontend/src/hooks/useCasino.ts`](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/hooks/useCasino.ts) (Casino state), [`frontend/src/client/sim.ts`](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/client/sim.ts) (Simulation client), [`frontend/src/lib/outcomes.ts`](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/lib/outcomes.ts) (Bet resolution)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Casino interface"]
  node_app["Casino app<br/>[App.tsx]"]
  node_session["Session controls<br/>[useSession.ts]"]
  node_bet["Bet panel<br/>[BetPanel.tsx]"]
  node_roundui["Round display<br/>[RoundHud.tsx]"]
  node_history["Bet history<br/>[History.tsx]"]
  node_reveal["Result reveal<br/>[RevealOverlay.tsx]"]
  node_blocks["Block stream<br/>[BlockStream.tsx]"]
end

subgraph group_client["Client connectivity"]
  node_clientfactory["Client selector<br/>[index.ts]"]
  node_chainclient["Chain client<br/>[chain.ts]"]
  node_simclient["Simulation client<br/>[sim.ts]"]
  node_casino["Casino state<br/>[useCasino.ts]"]
end

subgraph group_games["Game and round logic"]
  node_rounds["Round timing<br/>[rounds.ts]"]
  node_catalog["Game definitions<br/>[games.ts]"]
  node_outcomes["Bet resolution<br/>[outcomes.ts]"]
  node_crash["Crash rules<br/>[crash.ts]"]
  node_beauty["Beauty rules<br/>[beauty.ts]"]
  node_seedlib["Seed utilities<br/>[seedlib.mjs]"]
end

subgraph group_contracts["On-chain casino"]
  node_blockcasino["Casino contract<br/>[BlockCasino.sol]"]
  node_uniform["Uniform games<br/>[UniformGame.sol]"]
  node_chip["Chip token<br/>[ChipToken.sol]"]
  node_gameinterface["Game interface<br/>[IGame.sol]"]
end

subgraph group_randomness["Randomness"]
  node_randominterface["Randomness interface<br/>[IRandomness.sol]"]
  node_pyth["Pyth adapter"]
  node_mockrandom["Mock randomness<br/>[MockRandomness.sol]"]
  node_seedsol["Seed library<br/>[SeedLib.sol]"]
end

node_player(("Player"))

node_player -.->|"uses"| node_app
node_app -->|"creates"| node_clientfactory
node_app -->|"orchestrates"| node_casino
node_app -->|"tracks session"| node_session
node_app -->|"renders"| node_bet
node_app -->|"renders"| node_roundui
node_app -->|"renders"| node_history
node_app -->|"renders"| node_reveal
node_app -->|"renders"| node_blocks
node_clientfactory -->|"selects"| node_chainclient
node_clientfactory -->|"selects"| node_simclient
node_casino -->|"calls client"| node_clientfactory
node_casino -->|"resolves bets"| node_outcomes
node_casino -->|"checks game kind"| node_catalog
node_casino -->|"checks lock"| node_rounds
node_outcomes -->|"resolves beauty"| node_beauty
node_outcomes -->|"resolves crash"| node_crash
node_outcomes -->|"uses definitions"| node_catalog
node_catalog -->|"uses crash rules"| node_crash
node_simclient -->|"uses timing"| node_rounds
node_simclient -->|"uses definitions"| node_catalog
node_simclient -->|"uses rules"| node_beauty

click node_app "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/App.tsx"
click node_session "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/hooks/useSession.ts"
click node_bet "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/components/BetPanel.tsx"
click node_roundui "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/components/RoundHud.tsx"
click node_history "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/components/History.tsx"
click node_reveal "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/components/RevealOverlay.tsx"
click node_blocks "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/components/BlockStream.tsx"
click node_clientfactory "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/client/index.ts"
click node_chainclient "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/client/chain.ts"
click node_simclient "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/client/sim.ts"
click node_casino "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/hooks/useCasino.ts"
click node_rounds "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/lib/rounds.ts"
click node_catalog "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/lib/games.ts"
click node_outcomes "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/lib/outcomes.ts"
click node_crash "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/lib/crash.ts"
click node_beauty "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/lib/beauty.ts"
click node_seedlib "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/sdk/seedlib.mjs"
click node_blockcasino "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/BlockCasino.sol"
click node_uniform "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/games/UniformGame.sol"
click node_chip "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/ChipToken.sol"
click node_gameinterface "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/interfaces/IGame.sol"
click node_randominterface "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/interfaces/IRandomness.sol"
click node_pyth "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/randomness/PythEntropyAdapter.sol"
click node_mockrandom "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/randomness/MockRandomness.sol"
click node_seedsol "https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/lib/SeedLib.sol"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_session,node_bet,node_roundui,node_history,node_reveal,node_blocks toneBlue
class node_clientfactory,node_chainclient,node_simclient,node_casino toneAmber
class node_rounds,node_catalog,node_outcomes,node_crash,node_beauty,node_seedlib toneMint
class node_blockcasino,node_uniform,node_chip,node_gameinterface toneRose
class node_randominterface,node_pyth,node_mockrandom,node_seedsol,node_player toneIndigo
```

## Components

### Casino interface

- [Casino app](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Session controls](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/hooks/useSession.ts): `frontend/src/hooks/useSession.ts`
- [Bet panel](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/components/BetPanel.tsx): `frontend/src/components/BetPanel.tsx`
- [Round display](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/components/RoundHud.tsx): `frontend/src/components/RoundHud.tsx`
- [Bet history](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/components/History.tsx): `frontend/src/components/History.tsx`
- [Result reveal](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/components/RevealOverlay.tsx): `frontend/src/components/RevealOverlay.tsx`
- [Block stream](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/components/BlockStream.tsx): `frontend/src/components/BlockStream.tsx`

### Client connectivity

- [Client selector](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/client/index.ts): `frontend/src/client/index.ts`
- [Chain client](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/client/chain.ts): `frontend/src/client/chain.ts`
- [Simulation client](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/client/sim.ts): `frontend/src/client/sim.ts`
- [Casino state](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/hooks/useCasino.ts): `frontend/src/hooks/useCasino.ts`

### Game and round logic

- [Round timing](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/lib/rounds.ts): `frontend/src/lib/rounds.ts`
- [Game definitions](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/lib/games.ts): `frontend/src/lib/games.ts`
- [Bet resolution](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/lib/outcomes.ts): `frontend/src/lib/outcomes.ts`
- [Crash rules](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/lib/crash.ts): `frontend/src/lib/crash.ts`
- [Beauty rules](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/frontend/src/lib/beauty.ts): `frontend/src/lib/beauty.ts`
- [Seed utilities](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/sdk/seedlib.mjs): `backend/sdk/seedlib.mjs`

### On-chain casino

- [Casino contract](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/BlockCasino.sol): `backend/contracts/BlockCasino.sol`
- [Uniform games](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/games/UniformGame.sol): `backend/contracts/games/UniformGame.sol`
- [Chip token](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/ChipToken.sol): `backend/contracts/ChipToken.sol`
- [Game interface](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/interfaces/IGame.sol): `backend/contracts/interfaces/IGame.sol`

### Randomness

- [Randomness interface](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/interfaces/IRandomness.sol): `backend/contracts/interfaces/IRandomness.sol`
- [Pyth adapter](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/randomness/PythEntropyAdapter.sol): `backend/contracts/randomness/PythEntropyAdapter.sol`
- [Mock randomness](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/randomness/MockRandomness.sol): `backend/contracts/randomness/MockRandomness.sol`
- [Seed library](https://github.com/taborswanson1/monad_blitz_gamble/blob/main/backend/contracts/lib/SeedLib.sol): `backend/contracts/lib/SeedLib.sol`

### Other components

- **Player**

## Connections

- Player → Casino app: uses
- Casino app → Client selector: creates (evidence: `frontend/src/App.tsx`)
- Casino app → Casino state: orchestrates (evidence: `frontend/src/App.tsx`)
- Casino app → Session controls: tracks session (evidence: `frontend/src/App.tsx`)
- Casino app → Bet panel: renders (evidence: `frontend/src/App.tsx`)
- Casino app → Round display: renders (evidence: `frontend/src/App.tsx`)
- Casino app → Bet history: renders (evidence: `frontend/src/App.tsx`)
- Casino app → Result reveal: renders (evidence: `frontend/src/App.tsx`)
- Casino app → Block stream: renders (evidence: `frontend/src/App.tsx`)
- Client selector → Chain client: selects (evidence: `frontend/src/client/index.ts`)
- Client selector → Simulation client: selects (evidence: `frontend/src/client/index.ts`)
- Casino state → Client selector: calls client (evidence: `frontend/src/hooks/useCasino.ts`)
- Casino state → Bet resolution: resolves bets (evidence: `frontend/src/hooks/useCasino.ts`)
- Casino state → Game definitions: checks game kind (evidence: `frontend/src/hooks/useCasino.ts`)
- Casino state → Round timing: checks lock (evidence: `frontend/src/hooks/useCasino.ts`)
- Bet resolution → Beauty rules: resolves beauty (evidence: `frontend/src/lib/outcomes.ts`)
- Bet resolution → Crash rules: resolves crash (evidence: `frontend/src/lib/outcomes.ts`)
- Bet resolution → Game definitions: uses definitions (evidence: `frontend/src/lib/outcomes.ts`)
- Game definitions → Crash rules: uses crash rules (evidence: `frontend/src/lib/games.ts`)
- Simulation client → Round timing: uses timing (evidence: `frontend/src/client/sim.ts`)
- Simulation client → Game definitions: uses definitions (evidence: `frontend/src/client/sim.ts`)
- Simulation client → Beauty rules: uses rules (evidence: `frontend/src/client/sim.ts`)
