add Readme / Roadmap / Changelog

This commit is contained in:
2026-04-20 16:27:39 +02:00
parent 0858b72e31
commit 4261291ac1
3 changed files with 679 additions and 0 deletions

1
CHANGELOG.md Normal file
View File

@@ -0,0 +1 @@
0.0.1 - initial skel

265
README.md Normal file
View File

@@ -0,0 +1,265 @@
# file: README.md
# khadhroony-bobobot
Projet personnel Rust de détection, danalyse de patterns et de trading/swap semi-automatisé de tokens et meme-tokens sur la blockchain Solana.
## 1. Objectif
Lobjectif du projet est de construire une application capable de :
- détecter la création de tokens et de paires sur Solana,
- suivre leur évolution technique et de marché,
- collecter des informations utiles au filtrage,
- analyser des patterns statistiques ou comportementaux,
- préparer ensuite la gestion de wallets et les opérations de swap/trading.
Les cibles observées incluent notamment les DEX et protocoles tels que :
- Pump.fun
- PumpSwap
- Raydium
- Meteora
- Bags
- FluxBeam
- LaunchLab / LaunchBeam
- Heaven
- DexLab
- Moonit
- Zora
La liste exacte pourra évoluer au fil du projet.
## 2. Architecture générale
Le workspace Rust est organisé autour de deux sous-crates principales :
- `kb_lib`
- `kb_app`
### `kb_lib`
`kb_lib` porte la logique métier et technique :
- configuration JSON,
- tracing,
- constantes Solana,
- clients réseau HTTP / WebSocket,
- gestion future de gRPC Yellowstone,
- persistance,
- analyse de patterns,
- gestion des wallets,
- logique de détection et de filtrage.
### `kb_app`
`kb_app` est lapplication Tauri V2 avec frontend TypeScript.
Son rôle est de :
- afficher linterface utilisateur,
- exposer les commandes Tauri,
- déléguer la logique à `kb_lib`,
- afficher les états, logs et événements remontés par la bibliothèque.
Le crate expose une bibliothèque interne `kb_app_lib` afin de limiter le couplage avec `main.rs` et de préparer une évolution mobile ultérieure.
## 3. Contraintes techniques
Le projet suit des contraintes strictes.
### Contraintes de style et de structure
- Rust 2024.
- Pas de `mod.rs`.
- Les fichiers Rust commencent par une entête `// file: ...`.
- Les fichiers `lib.rs` et `main.rs` activent `#![deny(unreachable_pub)]` et `#![warn(missing_docs)]`.
- Les éléments publics sont documentés.
- Les expositions publiques passent par la racine des crates.
### Contraintes de code
- pas de `anyhow`,
- pas de `thiserror`,
- pas de `?` dans le code applicatif,
- pas de `unwrap` ni `expect` dans le code applicatif,
- utilisation préférée de `match`, `if let Err`, `let Err = ... else`.
Les tests unitaires peuvent utiliser `?`, `unwrap` et `expect` si nécessaire.
### Contraintes dimport
- pas de `use` sur les types/fonctions des crates externes,
- seuls les imports de traits sont tolérés,
- les appels doivent utiliser les chemins complets, par exemple `std::string::String` ou `tokio::sync::mpsc::Sender`.
## 4. Configuration
Lapplication utilisera un fichier `config.json`.
La configuration devra à terme permettre de définir :
- les endpoints HTTP,
- les endpoints WebSocket,
- leur nom logique,
- les rôles affectés à chaque endpoint,
- les limitations de débit,
- les délais et timeouts,
- les répertoires locaux,
- la base SQLite,
- le futur répertoire des wallets Solana,
- les paramètres de tracing,
- la politique de reconnexion.
Chaque endpoint devra pouvoir être identifié et affecté à une tâche spécifique, par exemple :
- réception des notifications de slots,
- réception des program subscriptions,
- réception des logs,
- exécution des requêtes HTTP,
- endpoint de secours.
Cela permet de répartir la charge ou dadapter le provider selon son niveau de service, ses limitations ou lusage dune API key.
## 5. Tracing et logs
Le tracing sera centralisé dans `kb_lib`.
Le système devra supporter :
- sortie console,
- sortie fichier,
- niveau configurable,
- format de message configurable,
- format temporel configurable,
- ANSI console activable/désactivable,
- comportement spécifique pour les tests.
## 6. Clients réseau
## 6.1. `WsClient`
`kb_lib` devra contenir un `WsClient` asynchrone basé sur `tokio-tungstenite`.
Exigences initiales :
- client duplicable,
- connexion à plusieurs serveurs WS RPC,
- identifiants de requêtes incrémentaux par instance,
- flux de lecture et flux décriture séparés,
- séparation des réponses RPC et des notifications,
- registre `subscribe` / `unsubscribe`,
- tentative dunsubscribe avant fermeture,
- timeout pour ne pas bloquer le disconnect.
Le client ne devra pas sappuyer sur `solana-pubsub-client`, même si son comportement fonctionnel peut sen inspirer.
## 6.2. `HttpClient`
`kb_lib` devra contenir un `HttpClient` asynchrone basé sur `reqwest`.
Exigences initiales :
- client duplicable,
- connexion à plusieurs endpoints HTTP RPC,
- limites de requêtes configurables,
- profils par endpoint,
- adaptation à des providers publics ou privés.
Le client ne devra pas sappuyer sur le `RpcClient` officiel de `solana-client`.
## 6.3. `GrpcClient`
Le support `GrpcClient` basé sur `yellowstone-grpc-client` et `yellowstone-grpc-proto` est prévu dans une phase ultérieure.
## 7. Types et RPC
Le projet cherchera à réutiliser autant que possible les types officiels fournis par lécosystème Solana, notamment pour les payloads et surtout pour le parsing des réponses.
Objectif :
- limiter linvention de structures approximatives,
- réutiliser les types des crates officielles lorsque cela est pertinent,
- encapsuler si besoin ces types dans une couche propre au projet.
Le projet pourra embarquer son propre générateur de requêtes JSON-RPC 2.0 afin dencapsuler proprement les appels HTTP et WS.
## 8. Base de données
Le stockage initial se fera dans SQLite.
Cette première étape doit permettre :
- de conserver lhistorique observé,
- de stocker des événements et états techniques,
- de préparer lanalyse.
Une migration vers PostgreSQL pourra être envisagée plus tard lorsque lapplication aura stabilisé ses besoins.
## 9. Frontend
Lapplication Tauri démarrera avec une interface volontairement simple.
### UI minimale prévue
- un bouton ou toggle de connexion,
- un bouton darrêt si nécessaire,
- une zone de texte scrollable et en lecture seule,
- affichage des messages reçus depuis `kb_lib`.
Cette première UI servira surtout à valider :
- linitialisation,
- le tracing,
- la délégation vers `kb_lib`,
- la remontée dévénements depuis les clients réseau.
## 10. Constantes Solana
Le projet devra réutiliser autant que possible les Program IDs et identifiants officiels fournis par les crates officielles au lieu de les recopier à la main.
Exemples :
- SPL Token
- SPL Token-2022
- Associated Token Account
- Wrapped SOL mint
- System Program
- Compute Budget Program
## 11. Génération de bindings TypeScript
Les structures partagées entre Rust et le frontend devront être générées avec `ts-rs`.
Le flux prévu est :
```bash
cargo test export_bindings
```
Exemple déjà présent :
- `kb_app/src/splash.rs`
- `kb_app/frontend/ts/bindings/SplashOrder.ts`
## 12. État du projet
Le dépôt est actuellement à un stade de fondation.
Les premières priorités sont :
- remettre le squelette en conformité,
- poser la configuration JSON,
- poser le tracing,
- préparer `WsClient` et `HttpClient`,
- brancher une UI Tauri minimale.
## 13. Feuille de route
La feuille de route détaillée est disponible dans :
- `Roadmap.md`
## 14. Licence
Licence MIT.

413
ROADMAP.md Normal file
View File

@@ -0,0 +1,413 @@
# file: Roadmap.md
# khadhroony-bobobot — Roadmap
## 1. Objet du projet
`khadhroony-bobobot` est un workspace Rust destiné à la détection, lobservation, lanalyse de patterns et, à terme, à lexécution semi-automatisée dachats/ventes de tokens sur la blockchain Solana.
Le projet vise en priorité :
- la détection de création de tokens et de paires sur différents DEX,
- la réception et le tri des événements on-chain et RPC,
- la collecte de métriques utiles au filtrage,
- lanalyse statistique et comportementale des patterns,
- la préparation dune couche wallet puis swap/trading.
## 2. Principes darchitecture
### 2.1. Structure générale
Le workspace est organisé autour de deux sous-crates principales :
- `kb_lib` : bibliothèque métier, réseau, config, tracing, stockage, analyse et logique applicative.
- `kb_app` : application Tauri V2 avec frontend TypeScript, chargée de linterface et de la délégation vers `kb_lib`.
### 2.2. Contraintes de code
Le socle du projet doit respecter les contraintes suivantes :
- Rust 2024.
- Aucun fichier `mod.rs`.
- Exposition centralisée à la racine des crates via `lib.rs` ou `main.rs`.
- Pas dusage de `anyhow` ni `thiserror`.
- Pas dusage de `?`, `unwrap`, `expect` dans le code applicatif.
- Utilisation de `match`, `if let Err`, `let Err = ... else`.
- Documentation Rust obligatoire sur les éléments publics.
- `#![deny(unreachable_pub)]` et `#![warn(missing_docs)]` activés et respectés.
- Pas de `use` pour les types/fonctions externes, sauf pour les traits.
- Tests unitaires importants et maintenus à chaque étape.
### 2.3. Règles de responsabilité
- `kb_app` ne doit pas embarquer la logique métier réseau ou Solana.
- `kb_app` doit seulement orchestrer lUI, les commandes Tauri et les appels vers `kb_lib`.
- `kb_lib` doit porter les clients réseau, la config, le tracing, les types partagés, les registres et la logique métier.
## 3. Vision fonctionnelle
Le projet doit pouvoir évoluer progressivement vers les capacités suivantes :
1. Connexion à plusieurs endpoints HTTP / WS RPC Solana.
2. Répartition des rôles par endpoint.
3. Réception des notifications de slots, comptes, programmes, logs, signatures, blocs.
4. Détection de créations de tokens, pools et paires sur plusieurs DEX.
5. Collecte de métriques : liquidité, market cap, volume, prix, activité.
6. Persistance locale dans SQLite, puis évolution possible vers PostgreSQL.
7. Analyse de patterns et filtrage des tokens non tradables.
8. Gestion de wallets Solana.
9. Préparation puis exécution semi-automatisée de swaps/trading.
10. Intégration future de gRPC Yellowstone.
## 4. Configuration cible
La configuration applicative sera stockée dans un fichier `config.json`.
### 4.1. Points à couvrir dans la configuration
Le fichier devra à terme permettre de configurer :
- les endpoints HTTP,
- les endpoints WebSocket,
- un nom logique par endpoint,
- le rôle ou les tâches affectées à chaque endpoint,
- les limites de débit par endpoint,
- les options spécifiques aux providers publics ou privés,
- les chemins de stockage local,
- le répertoire des wallets Solana,
- le tracing et ses formats,
- la stratégie de reconnexion,
- les paramètres de base de données,
- les options dUI persistées plus tard.
### 4.2. Exemple de catégories attendues
- `app`
- `logging`
- `database`
- `wallets`
- `network`
- `solana`
- `http_endpoints`
- `ws_endpoints`
### 4.3. Exigences particulières
Chaque endpoint devra pouvoir porter sa propre configuration, par exemple :
- nom logique,
- URL,
- provider,
- présence ou non dune clé API,
- plafond de requêtes,
- burst,
- timeout,
- usages autorisés,
- rôle principal.
Exemples de rôles futurs :
- `slot_notifications`
- `program_subscriptions`
- `account_subscriptions`
- `logs_subscriptions`
- `http_queries`
- `fallback`
## 5. Tracing cible
Le tracing devra être centralisé dans `kb_lib`.
### 5.1. Exigences initiales
- sortie console paramétrable,
- sortie fichier paramétrable,
- niveau de log configurable,
- format du message configurable,
- format du temps configurable,
- ANSI console activable/désactivable,
- fonctionnement compatible tests,
- séparation claire entre initialisation et usage.
### 5.2. Objectifs complémentaires
- pouvoir distinguer les logs du transport WS,
- distinguer les logs HTTP,
- distinguer les logs Tauri/UI,
- distinguer les logs DB,
- préparer une traçabilité par endpoint et par client.
## 6. Phasage par versions
## 6.1. Version `0.0.2` — Socle conforme
Objectif : corriger le squelette et poser la base de travail.
À faire :
- corriger `kb_lib/src/lib.rs`,
- créer `KbError`,
- créer `KbConfig`,
- créer `init_tracing`,
- créer les constantes Solana officielles,
- préparer les modules `ws_client` et `http_client`,
- remettre `kb_app/src/lib.rs` en conformité,
- documenter `kb_app/src/splash.rs`,
- garder une UI minimale avec bouton connect / disconnect et zone de sortie.
Livrables :
- squelette propre,
- config JSON minimale,
- tracing centralisé,
- UI Tauri minimale opérationnelle,
- premiers types partagés.
## 6.2. Version `0.1.x` — Transport WebSocket générique
Objectif : construire un vrai `WsClient` asynchrone clonable.
À faire :
- `connect`, `disconnect`, `is_connected`,
- flux de lecture séparé du flux décriture,
- identifiant incrémental interne par client,
- canal sortant borné,
- émission dévénements internes,
- support de larrêt propre,
- fermeture avec timeout.
Contraintes :
- aucune reconnexion implicite au départ,
- pas dusage de `solana-pubsub-client`,
- tests offline avec serveur mock.
## 6.3. Version `0.2.x` — Couche JSON-RPC WS Solana
Objectif : séparer clairement transport, réponses RPC et notifications.
À faire :
- enveloppes JSON-RPC 2.0,
- gestion des `request_id`,
- registre des requêtes en attente,
- distinction entre requêtes standard et subscribe/unsubscribe,
- parsing des réponses,
- séparation stricte des notifications.
Livrables :
- registre `request_id -> pending kind`,
- registre `subscription_id -> metadata`,
- tests de corrélation et de séparation des flux.
## 6.4. Version `0.3.x` — Registre subscriptions / notifications
Objectif : fiabiliser la gestion des subscriptions.
À faire :
- stockage des subscriptions actives,
- mapping entre requête de subscribe et `subscription_id` serveur,
- unsubscribe propre avant fermeture,
- timeout dattente sur unsubscribe,
- purge locale même si le serveur ne répond pas,
- routage séparé des notifications.
## 6.5. Version `0.4.x` — Transport HTTP générique
Objectif : construire un `HttpClient` clonable et limité.
À faire :
- client `reqwest` asynchrone,
- limites req/sec,
- burst configurable,
- délais configurables,
- profils par endpoint,
- endpoints publics ou API-key.
Livrables :
- `HttpClient`,
- abstraction de requêtes JSON-RPC HTTP,
- premiers appels sur endpoints Solana.
## 6.6. Version `0.5.x` — Base de données SQLite
Objectif : poser la persistance locale.
À faire :
- configuration DB dans `config.json`,
- ouverture/validation SQLite,
- premières tables techniques,
- stockage des endpoints, événements, tokens observés, subscriptions actives si utile.
## 6.7. Version `0.6.x` — Détection technique on-chain / RPC
Objectif : commencer la détection utile pour lapplication.
À faire :
- réception de notifications ciblées,
- détection de créations de comptes/programmes dintérêt,
- débuts de normalisation dévénements,
- premiers connecteurs DEX.
## 6.8. Version `0.7.x` — DEX connectors v1
Objectif : structurer les connecteurs par protocole.
Cibles initiales possibles :
- Pump.fun
- PumpSwap
- Raydium
- Meteora
- FluxBeam
- DexLab
À faire :
- identification des programmes,
- décodage des événements utiles,
- création de types métiers propres,
- enrichissement des métadonnées token/pool/pair.
## 6.9. Version `0.8.x` — Analyse et filtrage
Objectif : transformer les événements bruts en signaux exploitables.
À faire :
- agrégation des métriques,
- règles de filtrage,
- exclusions des tokens non tradables,
- statistiques de comportement,
- premiers patterns.
## 6.10. Version `1.x.y` — Wallets et swap préparatoire
Objectif : préparer la couche daction.
À faire :
- gestion du répertoire wallets,
- chargement sécurisé des keypairs,
- abstraction wallet,
- préparation dordres et de swaps,
- simulation et garde-fous.
## 6.11. Version `2.x.y` — Trading semi-automatisé
Objectif : brancher lanalyse à laction tout en gardant des garde-fous explicites.
À faire :
- scénarios dachat/vente,
- règles dentrée/sortie,
- limites de risque,
- confirmations explicites ou semi-automatiques,
- journaux dexécution.
## 6.12. Version `3.x.y` — Yellowstone gRPC
Objectif : ajouter le connecteur gRPC dédié.
À faire :
- `GrpcClient` basé sur `yellowstone-grpc-client`,
- adaptation du pipeline dévénements,
- coexistence HTTP / WS / gRPC,
- politique de répartition par source.
## 7. Organisation des modules ciblés
## 7.1. `kb_lib`
Modules cibles à court terme :
- `error.rs`
- `config.rs`
- `tracing.rs`
- `constants.rs`
- `types.rs`
- `ws_client.rs`
- `http_client.rs`
- `rpc_json.rs`
- `rpc_ws.rs`
## 7.2. `kb_app`
Responsabilités cibles :
- lancement Tauri,
- commandes UI,
- affichage des états et messages,
- réception des événements venant de `kb_lib`,
- persistance future des préférences UI.
## 8. Ligne de conduite sur le `WsClient`
Le `WsClient` doit être conçu en plusieurs couches :
1. transport brut WebSocket,
2. encodage/décodage JSON texte,
3. couche JSON-RPC 2.0,
4. couche Solana subscribe/unsubscribe/notification,
5. couche métier pour la répartition des messages.
Cette séparation évite de mélanger :
- les réponses à requêtes simples,
- les réponses de subscribe,
- les réponses de unsubscribe,
- les notifications push.
## 9. Politique initiale de reconnexion
Au départ :
- pas de reconnexion automatique,
- pas de resubscribe automatique,
- comportement explicite contrôlé par lappelant.
Plus tard, ce comportement pourra devenir configurable dans `config.json` et pilotable depuis lapplication.
## 10. Politique initiale de fermeture
À la fermeture dun `WsClient` :
1. marquer le client en arrêt,
2. tenter les `unsubscribe` actifs,
3. attendre les réponses dans une fenêtre bornée,
4. forcer la purge locale si nécessaire,
5. fermer proprement le flux décriture,
6. laisser se terminer le flux de lecture,
7. journaliser clairement les cas dégradés.
## 11. Documentation et livrables de référence
Le projet doit maintenir au minimum :
- un `README.md` global,
- un `Roadmap.md` global,
- des `README.md` et `TODO.md` par crate à mesure de lévolution,
- des tests unitaires robustes,
- les bindings TS générés via `cargo test export_bindings` lorsque les types partagés évoluent.
## 12. Priorité immédiate
La priorité immédiate est la suivante :
1. corriger le squelette,
2. poser `KbError`,
3. poser `KbConfig`,
4. poser `init_tracing`,
5. poser les constantes Solana,
6. préparer `ws_client` et `http_client`,
7. remettre `kb_app` en conformité,
8. conserver une UI minimale, puis brancher progressivement les clients réseau.