Architecture mobile
savitri-mobile est une application Flutter pour iOS et Android offrant la gestion de portefeuille, la surveillance des nœuds, la participation à la gouvernance et un jeu narratif intégré.
Pile technologique
| Couche | Technologie |
|---|---|
| Framework | Flutter 3.16+, Dart 3.0+ |
| État (DI) | Riverpod |
| État (événements) | BLoC / Cubit |
| Stockage | SQLite (sqflite), FlutterSecureStorage, SharedPreferences |
| Crypto | Rust FFI via flutter_rust_bridge |
| Réseau | HTTP, WebSocket |
| Authentification | Authentification locale (biométrique), FlutterSecureStorage |
Modèle d'architecture
Architecture propre en trois couches :
presentation/ (écrans, widgets, blocs)
│
domain/ (entités, dépôts, cas d'utilisation)
│
data/ (sources de données, modèles, implémentations de dépôts)
676 fichiers Dart dans l'ensemble de l'application.
Hub de navigation principal
L'application utilise un modèle de navigation en étoile :
| Index | Écran | Description |
|---|---|---|
| 0 | WalletSubHub | Gestion de portefeuille, soldes, transferts |
| 1 | DashboardSubHub | Vue d'ensemble du réseau, métriques |
| 2 | NodeSubHub | Surveillance de la santé des nœuds (score NHS) |
| 3 | GameGateScreen | Jeu narratif (mode paysage) |
| 4 | NewsSubHub | Actualités et mises à jour du réseau |
| 5 | BuySaviScreen | Achat de tokens |
| 6 | FaucetScreen | Demandes de robinet testnet |
| 7 | CommunityScreen | Fonctionnalités communautaires |
Portefeuille
Dérivation de clés
- BIP-39 : Génération de phrase mnémonique (12/24 mots)
- BIP-44 : Chemin de dérivation
m/44'/1337'/0'/0/0 - Ed25519 : Génération de clés via Rust FFI pour les performances
Sécurité
- Clés privées stockées dans
FlutterSecureStorage(Keychain sous iOS, EncryptedSharedPreferences sous Android) - Authentification biométrique pour les opérations sensibles
- WalletConnect v2 pour les connexions aux dApps
Base de données
Schéma SQLite
- Base de données :
savitri_mobile.db - Version : 15 (15 étapes de migration)
- Chiffrement : AES-256-GCM au niveau des colonnes via le singleton
DbEncryption - Modèle : Singleton
DatabaseHelper.instance
Prise en charge des plateformes
- Natif :
ApplicationDocumentsDirectorypour le chemin de la base de données - Web : Non pris en charge (lève une
UnsupportedError)
Surveillance des nœuds
L'application surveille les nœuds connectés via JSON-RPC :
- Score NHS (Node Health Score) : Métrique composite affichée dans le tableau de bord
- Production de blocs : Hauteur de bloc en temps réel et statut de finalisation
- Nombre de pairs : Surveillance des pairs connectés
- Score PoU : Score de participation au consensus du validateur
Jeu narratif
Un jeu narratif intégré dans l'application :
- 10 chapitres avec plusieurs niveaux par chapitre
- Moteur de jeu : Moteur Dart personnalisé avec gestion d'état BLoC
- Écrans : Plus de 50 types d'écrans de jeu (dialogue cinématique, revue de code, arbre de décision, etc.)
- Bibliothèque de widgets : Widgets personnalisés (terminal, chronologie d'archives, bilan, etc.)
- Ressources : Contenu vidéo, données de jeu JSON par chapitre
- Mode paysage : Le jeu s'exécute en orientation paysage
Systèmes de jeu
| Système | Description |
|---|---|
game_engine | Boucle de jeu principale |
narrative_state | Progression de l'histoire |
scene_renderer | Rendu des écrans |
badge_catalog | Système de récompenses |
anomaly_tracker | Mini-jeu de détection d'anomalies |
archive_system | Archive de documents en jeu |
balance_tracker | Économie en jeu |
photo_system | Collection de photos |
witness_mode | Mode observation |
tips_catalog | Système d'indices |
Intégration IoT
L'application inclut la gestion de capteurs IoT :
- Enregistrement et surveillance des appareils
- Visualisation des données de capteurs
- Intégration du service d'énergie IoT
- Collecte de données en arrière-plan via
workmanager
Pont Rust FFI
Les opérations cryptographiques critiques en termes de performances utilisent Rust via flutter_rust_bridge :
// Côté Dart
final signature = await rustBridge.signMessage(privateKey, message);
final isValid = await rustBridge.verifySignature(publicKey, message, signature);
Opérations déléguées à Rust :
- Génération de clés Ed25519
- Dérivation de clés BIP-39/44
- Signature de transactions
- Calcul de hachage
Système anti-triche
Le jeu TAP inclut des mesures anti-triche :
- Analyse de motifs : Détecte le tapotement automatisé
- Score de confiance : Score de confiance par utilisateur basé sur le comportement
- Formule AURA : Algorithme de notation anti-triche
Localisation
Langues prises en charge (fichiers ARB) :
| Langue | Fichier |
|---|---|
| Anglais | app_en.arb |
| Italien | app_it.arb |
| Espagnol | app_es.arb |
| Français | app_fr.arb |
| Hindi | app_hi.arb |
| Russe | app_ru.arb |
| Chinois | app_zh.arb |
Compilation
cd savitri-mobile
flutter pub get
flutter run # debug
flutter build apk # version Android
flutter build ios # version iOS