BlockLucky Documentation officielle GitHub

Index des fichiers clés

Les fichiers à lire en premier dans chaque projet, avec leur rôle. Ils suffisent pour comprendre le fonctionnement d'ensemble avant d'entrer dans un module. L'organisation complète du dépôt est décrite dans Organisation du dépôt.

Racine du dépôt

Fichier Rôle
docker-compose.yml Infrastructure locale et stack complète (profil app), voir Docker Compose
docker/postgres/init/01-extensions.sql Création de pg_stat_statements à l'initialisation de la base
.nvmrc Version de Node.js (22), lue par la CI
.gitleaks.toml Règles de détection de secrets et valeurs publiques autorisées
.editorconfig, .gitattributes Indentation et fins de ligne communes
LICENSE Licence MIT du code de BlockLucky, avec une note sur les licences des dépendances (BUSL-1.1 de @chainlink/contracts)
SECURITY.md Politique de signalement des vulnérabilités
CONTRIBUTING.md Règles de contribution
.vscode/launch.json Configurations de débogage de l'éditeur

Intégration continue

Fichier Rôle
.github/workflows/ci.yml Contrôles par projet, intégration sur la chaîne, images Docker, gitleaks
.github/workflows/codeql.yml Analyse CodeQL hebdomadaire et à chaque pull request
.github/dependabot.yml Mises à jour hebdomadaires des dépendances npm, Docker et Actions
.github/CODEOWNERS Relecteurs obligatoires par dossier
.github/pull_request_template.md Modèle de description des pull requests
.github/scripts/check-static-links.mjs Vérification des ressources locales du site de l'Office de Tourisme

Smart contracts

Fichier Rôle
contracts/BlockLucky.sol Contrat de loterie : tours, tickets, tirage VRF, cagnotte, remboursements, commission, pause, rôles
contracts/BlockLuckyPOAP.sol Badge ERC-721 non transférable, un par participant et par tour
hardhat.config.ts Compilateur 0.8.34, réseaux localhost et sepolia, clé Etherscan
scripts/deploy-local.ts Déploiement local avec coordinateur VRF simulé et rôles séparés (administrateur n° 2, trésorerie n° 1, opérateur du backend)
scripts/local-vrf-responder.ts Oracle VRF simulé qui répond aux demandes d'aléa
scripts/deploy-sepolia.ts Déploiement Sepolia avec contrôles du coordinateur et de l'abonnement, attribution des rôles au multisig, à la trésorerie et à l'opérateur, renonciation du déployeur
scripts/setup-vrf-sepolia.ts Création et financement en ETH de l'abonnement Chainlink VRF (npm run vrf:sepolia)
scripts/register-automation-sepolia.ts Inscription de l'upkeep Chainlink Automation (npm run automation:sepolia)
scripts/verify-sepolia.ts Publication du code source sur Etherscan (npm run verify:sepolia)
scripts/lib/roles.ts Plan, attribution et contrôle des rôles des deux contrats
scripts/lib/sepolia.ts Adresses Chainlink de Sepolia, ABI minimales, fichier deployments/sepolia-vrf.json
scripts/lib/deployment.ts Configuration des tours par variables d'environnement (un ticket par participant par défaut), écriture de deployments/
scripts/export-abi.mjs Copie des ABI vers le backend, mode --check pour la CI
docker/start-local-chain.sh Démarrage du conteneur : nœud, déploiement, oracle
test/BlockLucky.test.ts Tests unitaires du contrat de loterie
test/BlockLucky.t.sol Tests de fuzzing en Solidity
test/BlockLuckyPOAP.test.ts Tests du badge
test/roles.test.ts Tests de la répartition des rôles par les scripts
scripts/check-coverage.mjs Exigence de 100 % de couverture des lignes
slither.config.json Configuration de l'analyse statique Slither

Voir Smart contracts.

Backend

Démarrage et configuration

Fichier Rôle
src/server.ts Point d'entrée de l'API : serveur HTTP, Socket.IO, workers si RUN_WORKERS, arrêt propre
src/worker.ts Point d'entrée du worker : files, indexeur, keeper, sonde sur PORT + 1
src/app.ts Application Express : middlewares globaux, CORS, maintenance, rate limiting, montage des routes sous /api/v1 et /api
src/config/env.config.ts Schéma Zod de toutes les variables d'environnement et contrôles de production
src/config/prisma.config.ts Client Prisma, pool et délais PostgreSQL
src/config/redis.config.ts Client Redis avec préfixe, délais et repli en mémoire
prisma/schema.prisma Modèle de données
prisma/seed.ts Données de démonstration
.env.example Valeurs de développement de chaque variable
Dockerfile Image multi-étapes, cibles migrator et runtime

Blockchain

Fichier Rôle
src/blockchain/chain.client.ts Fournisseurs RPC, compte opérateur, instances des contrats
src/blockchain/lottery.gateway.ts Lecture des tours, achats, tirage, retrait, traduction des erreurs du contrat
src/blockchain/lottery.indexer.ts Projection des événements du contrat dans PostgreSQL
src/blockchain/lottery.keeper.ts Keeper du tirage et démarrage des services blockchain
src/blockchain/draw-reveal.ts Heure à laquelle le tour est devenu tirable et heure de révélation, gardées dans Redis
src/blockchain/chain-actions.ts File des actions on-chain (cagnotte, remboursement, badge)
src/blockchain/wallet.service.ts Création, chiffrement et dotation des portefeuilles intégrés
src/blockchain/poap.metadata.ts Métadonnées et visuel des badges
src/blockchain/abi/BlockLucky.json ABI du contrat, générée

Transverse

Fichier Rôle
src/middlewares/auth.middleware.ts Vérification du JWT
src/middlewares/rbac.middleware.ts Contrôle des rôles en base et 2FA des administrateurs
src/middlewares/age-verification.middleware.ts Refus 403 AGE_VERIFICATION_REQUIRED tant que l'âge du compte n'est pas vérifié
src/middlewares/body-parser.middleware.ts Analyse des corps JSON : 1 Mo par défaut, 12 Mo pour l'envoi de la pièce d'identité, corps brut des webhooks
src/middlewares/idempotency.middleware.ts En-tête Idempotency-Key
src/middlewares/rateLimiter.middleware.ts Limites de débit partagées dans Redis
src/middlewares/error.middleware.ts Format unique des erreurs
src/services/session.service.ts Émission et révocation des sessions
src/services/oauth-verifier.service.ts Vérification des jetons d'identité Google
src/services/otp-challenge.service.ts Codes email à usage unique, verrouillage après échecs, tickets de connexion (loginTicket) de la 2FA par application
src/services/otp-challenge.service.ts Codes à 6 chiffres de connexion, d'inscription et de réinitialisation, verrouillage après échecs
src/services/ledger.service.ts Mouvements d'EtherPoints
src/utils/crypto.util.ts Chiffrement AES-256-GCM des textes et des images, hachage bcrypt, HMAC, comparaison à temps constant
src/utils/identity-image.util.ts Décodage et contrôle des images d'identité (JPEG ou PNG, 4 Mo au plus)
src/observability/metrics.ts Métriques Prometheus
src/observability/shutdown.ts Arrêt propre
src/api/system/system.routes.ts Sondes de santé et configuration des clients
src/socket/socket.handler.ts Serveur Socket.IO
src/socket/event-bridge.ts Relais des événements du worker vers les clients
src/queues/queue.options.ts Tentatives et rétention des jobs

Modules métier

Chaque dossier de src/api/ suit le même découpage : *.routes.ts (routes et validation), *.controllers.ts (HTTP), *.services.ts (règles métier), *.repo.ts (Prisma), *.validators.ts (schémas Zod). Le plus central est lottery.services.ts. Voir Modules métier.

Tests

Fichier Rôle
__tests__/setup-env.ts Environnement commun des tests
__tests__/chain/onchain-lottery.chain.ts Scénarios sur une vraie chaîne (npm run test:chain)
jest.chain.config.json Configuration Jest de ces scénarios
scripts/check-env-example.mjs Cohérence entre .env.example et le schéma

Frontend web

Fichier Rôle
next.config.mjs En-têtes de sécurité, CSP calculée depuis les URL de l'API, sortie standalone
src/app/layout.tsx Mise en page racine
src/app/globals.css Jetons de couleur repris du mobile, rayons, échelle typographique, thèmes clair et sombre
src/app/fonts/ Police Inter chargée par next/font/local, avec sa licence
src/components/ui/Icon.tsx, src/components/ui/iconData.ts Icônes SVG copiées du mobile
src/components/layout/AppShell.tsx Barre latérale, en-tête et barre d'onglets des espaces connectés
src/app/providers.tsx Store Redux, restauration de la session, thème, capture de la source UTM, fenêtres globales, bandeau de consentement
src/content/legal.ts Textes des conditions générales, du règlement, des mentions légales, de la confidentialité, des traceurs et de la charte de transparence, en français et en anglais (même fichier sur le mobile)
src/lib/consent.ts, src/components/layout/ConsentBanner.tsx Choix de mesure d'audience (bl.consent.choice, 6 mois) et bandeau de consentement
src/hooks/useSound.ts Sons de la roue et du chronomètre, préférence bl.pref.sound
src/lib/config.ts URL de l'API et constantes de la loterie
src/store/api/baseApi.ts Client RTK Query, en-tête d'authentification
src/store/index.ts Store Redux
src/hooks/useBlockLuckyWallet.ts Portefeuille intégré et achat de tickets
src/hooks/useAgeVerification.ts Statut de vérification d'âge relu par GET /user/identity et recopié dans le profil stocké
src/hooks/useSocket.ts, src/lib/socket.ts Temps réel
src/components/layout/GlobalOverlays.tsx Fenêtres globales : points gagnés, relance, file d'attente, informations réseau
src/theme/ThemeProvider.tsx Thème clair ou sombre et traductions
src/app/mairie/page.tsx Tableau de bord de la Mairie
src/app/mairie/identites/page.tsx Examen des pièces d'identité et décision sur la vérification d'âge
src/app/mairie/comptes/page.tsx Comptes Mairie et partenaires : création avec invitation, changement et retrait de rôle
src/app/(citoyen)/billetterie/page.tsx Achat et cadeau de tickets
src/app/(citoyen)/tirage/page.tsx Salle de tirage en direct
Dockerfile Image de production

Voir Frontend web.

Application mobile

Fichier Rôle
src/App.tsx Point d'entrée
app.json Configuration Expo
eas.json Profils de build EAS (development, preview, production)
src/navigation/RootNavigator.tsx Navigation racine, bascule authentifié ou non, écrans empilés, ouverture de la vérification d'âge
src/navigation/MainTabs.tsx Quatre onglets : Accueil, Mes tickets, Parrains, Profil
src/types/navigation.types.ts, src/navigation/hooks.ts Paramètres typés des routes et hooks de navigation
src/services/api.client.ts Client HTTP et URL de l'API
src/services/socket.client.ts Client Socket.IO
src/services/secureStorage.ts Stockage sécurisé du jeton de session
src/store/api/baseApi.ts Client RTK Query
src/hooks/useAuth.ts Connexion par mot de passe ou Google, inscription, vérification des codes avec loginTicket, réinitialisation, déconnexion
src/hooks/useSound.ts Sons de la roue et du chronomètre (expo-audio), préférence blocklucky_sound_enabled
src/screens/settings/LegalScreen.tsx, src/content/legal.ts Écran Legal et textes légaux partagés avec le web
src/hooks/useCitizenWallet.ts Portefeuille intégré, achat et cadeau, classement des erreurs
src/screens/settings/VerifyAgeScreen.tsx Envoi du recto et du verso de la pièce d'identité
src/theme/ThemeProvider.tsx, src/theme/colors.ts Thème et jetons de couleur de la maquette
src/components/ui/icons/Icon.tsx Icônes SVG du design system

Voir Application mobile.

Office de Tourisme

Fichier Rôle
assets/js/main.js Point d'entrée JavaScript commun
assets/js/data/site.js Identité et coordonnées de l'Office, lien vers l'application de loterie (lotteryAppUrl), menus
assets/js/data/places.js, events.js, content.js Contenus : lieux, événements, articles
assets/js/modules/cart.js Panier de la billetterie
assets/js/modules/cookies.js Bandeau de consentement
assets/css/tokens.css Variables de la charte graphique
docker/nginx.conf Configuration nginx
docker/security-headers.conf En-têtes de sécurité et CSP
serve.json En-têtes du serveur de développement

Voir Office de Tourisme.

Tests de charge

Fichier Rôle
load-tests/smoke.js Test de fumée
load-tests/load.js Profils de charge, stress, pic et endurance

Voir Tests de charge.

Documentation officielle

Fichier Rôle
content/SUMMARY.md Liste et ordre des pages
scripts/build.mjs Construction du site statique
scripts/lib/generators.mjs Tableaux générés depuis le code
content/_data/ Descriptions des tableaux générés

Voir Écrire la documentation.