# Architecture — The Arena RPS Royale ## Vue d'ensemble Le projet est un monorepo organisé en trois applications et un package partagé, orchestré par Docker Compose. ``` rps-royale/ ├── apps/ │ ├── web/ # Next.js 15 + Phaser 3 (frontend jeu) │ ├── server/ # Node.js + Socket.io + Express (backend temps réel) │ └── contracts/ # Hardhat + Solidity (smart contract commit-reveal) ├── packages/ │ └── shared/ # Types et constantes TypeScript partagés └── docker-compose.yml ``` ## Flux de données 1. Le joueur ouvre `jeu.cosmolan.fr` (Next.js + Phaser) 2. Il se connecte via Socket.io à `api.jeu.cosmolan.fr` (Node.js) 3. Le matchmaking place deux joueurs dans une "room" 4. Le serveur crée le match sur la blockchain (`createMatch`) et retourne le `matchId` on-chain 5. Chaque joueur appelle directement `commit(matchId, hash)` sur le contrat `RPSArena.sol` en payant la mise 6. Le serveur écoute les événements `Committed` on-chain et déclenche la phase **Suspense** 7. Chaque joueur appelle `reveal(matchId, choice, nonce)` sur le contrat 8. Le smart contract vérifie les hashes, détermine le gagnant et distribue automatiquement le pot (moins 3% de frais plateforme) ## Réseau Docker Tous les services partagent le réseau `npm_default` (géré par Nginx Proxy Manager). | Service | Port conteneur | Port hôte | Exposé via NPM | |---------|----------------|-----------|----------------| | rps-web | 3000 | 127.0.0.1:3050 | `jeu.cosmolan.fr` | | rps-server | 3001 | 127.0.0.1:3051 | `api.jeu.cosmolan.fr` | | rps-db | 5432 | 127.0.0.1:3052 | Interne | | rps-redis | 6379 | 127.0.0.1:3053 | Interne | | hardhat-node | 8545 | 127.0.0.1:3054 | Interne | ## Technologies clés - **Phaser 3** : moteur 2D pour les animations, particules et scènes de jeu - **Socket.io** : communication temps réel multijoueur - **Hardhat** : environnement de développement Ethereum avec tests automatiques - **Prisma ORM** : accès typé à PostgreSQL - **Commit-Reveal** : pattern blockchain anti-triche