How timbee706/kaspabattle2 works
KaspaBattle is a P2P esports wagering product: players browse or create challenges, join matches, authenticate through FACEIT, fund wagers, and receive verified-result payouts. The React app calls the Rust API and also connects to Kaspa wallet/RPC functionality; the backend coordinates match state, FACEIT verification, escrow, and settlement. Tournaments add a separate registration, deposit, and payout capability. The kdapp Episode path is documented as work in progress. Some backend wiring is inferred only where README explicitly describes it; unsampled links are omitted.
Main entry points: client.ts API client · App.tsx React app · useWallet.ts Wallet actions · main.rs API server
Components 25
Player application
- React app
battle-frontend/src/App.tsx - Match pages
battle-frontend/src/pages/MatchPage.tsx - Lobby pages
battle-frontend/src/pages/LobbyPage.tsx - Tournament pages
battle-frontend/src/pages/TournamentListPage.tsx - Wallet actions
battle-frontend/src/hooks/useWallet.ts - Auth state
battle-frontend/src/stores/useAuthStore.ts - API client
battle-frontend/src/api/client.ts
API and match domain
- API server
kaspabattle/battle-api/src/main.rs - Match handlers
kaspabattle/battle-api/src/api/handlers/matches.rs - Auth handlers
kaspabattle/battle-api/src/api/handlers/auth.rs - Match state
kaspabattle/battle-core/src/match_state.rs - FACEIT data
kaspabattle/battle-core/src/faceit_client.rs - FACEIT watcher
kaspabattle/battle-core/src/workers/faceit_watcher.rs - Payout worker
kaspabattle/battle-api/src/payout_worker.rs
Kaspa settlement
- Multisig escrow
kaspabattle/battle-kaspa/src/multisig/service.rs - Wallet integration
battle-frontend/src/kaspa/wallet.ts
Tournament and Episodes
- Tournament API
kaspabattle/battle-api/src/api/tournament.rs - Tournament payouts
kaspabattle/battle-api/src/tournament_payout_worker.rs - Episode engine
kaspabattle/battle-kdapp/src/kdapp_engine.rs - Episode handler
kaspabattle/battle-kdapp/src/handler.rs
Other components
- Player
- PostgreSQL
- FACEIT
- Kaspa node
- Wager payout
Connections 28
- Player → React app: uses
- React app → Lobby pages: routes to
- React app → Match pages: routes to
- React app → Tournament pages: routes to
- Lobby pages → API client: requests lobby
- Match pages → API client: requests match
- Tournament pages → API client: requests tournaments
- Wallet actions → Wallet integration: uses
- Wallet actions → API client: submits deposits
- Wallet actions → Auth state: updates identity
- Auth state → API client: requests auth
- API client → API server: REST requests
- API server → Match handlers: dispatches
- API server → Auth handlers: dispatches
- Match handlers → Match state: applies transitions
- Match handlers → PostgreSQL: reads and writes
- Auth handlers → PostgreSQL: reads and writes
- FACEIT watcher → FACEIT data: polls results
- FACEIT data → FACEIT: fetches match data
- Payout worker → PostgreSQL: reads and updates
- Payout worker → Multisig escrow: requests settlement
- Multisig escrow → Kaspa node: checks and broadcasts
- Multisig escrow → Wager payout: sends payout
- Tournament API → PostgreSQL: reads and writes
- Tournament payouts → PostgreSQL: tracks deposits and payouts
- Tournament payouts → Kaspa node: watches deposits
- Episode engine → Episode handler: dispatches events
- Episode handler → PostgreSQL: updates match records