Accueil
BlockLucky est la loterie citoyenne de fin d'année de la Ville d'EtherBay. C'est un projet de l'Epitech Digital School (rush « BlockLucky, création d'un smart contract », promotion DIGI3), conçu comme un pilote pédagogique : les tickets s'achètent en ethers fictifs, sans aucune valeur monétaire, sur un vrai smart contract Solidity.
Cette documentation s'adresse aux développeurs de la Ville qui reprennent le code source et au jury de l'école. Elle décrit ce que fait réellement le code, la manière de le lancer, de le modifier et de l'exploiter, ainsi que ce qui reste simulé ou à faire.
Le projet en bref
Le cœur du projet est le contrat smart-contract/contracts/BlockLucky.sol. Il encaisse les tickets, ferme le tour quand il est complet ou quand sa durée est écoulée, demande un nombre aléatoire à Chainlink VRF v2.5, désigne le gagnant et lui réserve la cagnotte. Un second contrat, smart-contract/contracts/BlockLuckyPOAP.sol, frappe un badge de participation ERC-721 non transférable par participant et par tour.
Autour du contrat, le dépôt contient une plateforme complète :
- un backend Express 5 en TypeScript (
backend/src/app.ts) avec PostgreSQL, Redis, BullMQ et Socket.IO. Il crée pour chaque citoyen un portefeuille Ethereum intégré, chiffré en AES-256-GCM, lui verse une dotation de bienvenue en ethers fictifs, signe ses achats avec sa clé et projette les événements du contrat en base ; - un frontend web Next.js 16 avec trois espaces : citoyen, commerçant partenaire et dashboard de la Mairie, qui examine aussi les pièces d'identité envoyées pour la vérification d'âge ;
- une application mobile Expo pour les citoyens, avec compte par mot de passe ou Google, vérification d'âge, salle d'attente et roue du tirage ;
- un site vitrine statique de l'Office de Tourisme, livré en bonus ;
- une blockchain locale en conteneur (nœud Hardhat, contrats déployés à des adresses fixes, oracle VRF simulé), une CI GitHub Actions et des scénarios de charge k6.
Les citoyens gagnent aussi des EtherPoints en participant (achat, cadeau, parrainage, quêtes). Ces points, tenus en base de données et non sur la chaîne, s'échangent contre des offres des commerçants partenaires.
Important
Le projet n'est pas encore en production. Aucun déploiement sur Sepolia n'a été réalisé et l'application n'est pas en ligne sur etherbay.tech. Tout fonctionne en local sur une blockchain Hardhat. La page Réel, simulé ou à venir fait l'inventaire exact.
flowchart LR
C["Citoyen"] --> W["Web Next.js"]
C --> M["Mobile Expo"]
A["Mairie et partenaires"] --> W
W --> B["Backend Express"]
M --> B
B --> P[("PostgreSQL")]
B --> R[("Redis")]
B --> K["Contrat BlockLucky"]
B --> N["Contrat POAP"]
K --> V["Chainlink VRF"]Par où commencer
Le tableau suivant propose un parcours de lecture par profil. Chaque ligne liste les pages à lire dans l'ordre.
Les questions les plus fréquentes
| Question | Réponse courte | Page détaillée |
|---|---|---|
| Faut-il MetaMask ou acheter de la crypto ? | Non. Le backend crée le portefeuille et la Mairie le dote en ethers fictifs. | Portefeuilles intégrés |
| Qui choisit le gagnant ? | Chainlink VRF. Ni la Mairie ni le backend ne peuvent influencer le tirage. | Tirage Chainlink VRF |
| Que se passe-t-il si un tour est annulé ? | Chaque mise est remboursable sur le contrat et le backend réclame le remboursement pour le citoyen. | Annulation et remboursement |
| Comment se connecter en local ? | Sur le web, par un code à 6 chiffres reçu dans Mailpit ; sur mobile, avec le mot de passe EtherBay2026demo des comptes de démonstration. |
Comptes de démonstration et connexion |
| La blockchain locale a redémarré, plus rien ne marche | La chaîne a perdu son état : il faut réinitialiser la base. | Dépannage |
| Qu'est-ce qui est encore fictif ? | Notifications push, Sentry, libellé multi-signatures, paliers de la jauge, solde ETH en mode simulé, notamment. | |
| Pourquoi l'achat répond-il 403 ? | L'âge du compte n'est pas encore vérifié par la Mairie (AGE_VERIFICATION_REQUIRED). |
FAQ |
Adresses locales utiles
Une fois l'environnement lancé comme décrit dans Lancer les applications :
| Service | Adresse |
|---|---|
| API et documentation Swagger | http://localhost:2053/api/docs |
| Frontend web | http://localhost:3000 |
| Site de l'Office de Tourisme | http://localhost:4000 |
| Boîte mail de développement (Mailpit) | http://localhost:8025 |
| Nœud Hardhat (JSON-RPC, chain ID 31337) | http://127.0.0.1:8545 |
Conventions de cette documentation
Les liens de la forme backend/src/app.ts ouvrent le fichier source sur GitHub. Certaines pages, comme la référence de l'API ou le dictionnaire de données, sont générées depuis le code à chaque construction du site. La page Comment lire cette documentation détaille l'organisation en 16 parties, les encadrés et la recherche.