0.7.43-E5C
This commit is contained in:
327
README.md
327
README.md
@@ -4,7 +4,7 @@
|
||||
|
||||
`khadhroony-bobobot` est un workspace Rust destiné à la détection, au décodage, à l’analyse et, à terme, au trading semi-automatisé de tokens Solana.
|
||||
|
||||
Le README précédent décrivait surtout l’état `0.3.1`. Ce fichier reflète l’état de clôture documentaire `0.7.42` : le socle transport HTTP/WS, la résolution transactionnelle, le modèle SQLite, plusieurs connecteurs DEX, les candles, les signaux analytiques, la validation locale, la matrice DEX commune, Demo3, le backfill par signature et la consolidation Raydium DEX-first existent déjà. La famille Raydium est maintenant couverte sur swaps effectifs et premiers événements non-trade prouvés ; les non-swaps AMM v4 legacy restent conservés en audit, et le cas Orca Whirlpools est reporté à `0.7.44`.
|
||||
Ce document reflète le point de reprise `0.7.43-E5C`. La version Cargo reste `0.7.43`, mais le lot Meteora ouvert en `0.7.43` n’est pas considéré comme terminé. La priorité immédiate est maintenant de normaliser la roadmap DEX-first, d’ajouter un ledger de décodage/replay pour éviter les rescans inutiles, puis de reprendre les DEX un par un, variante par variante.
|
||||
|
||||
## 1. Objectif
|
||||
|
||||
@@ -13,12 +13,12 @@ L’objectif opérationnel est de construire progressivement une application cap
|
||||
- détecter l’apparition de nouveaux tokens, pools, paires et listings sur Solana ;
|
||||
- identifier en priorité les DEX effectifs sur lesquels les swaps, liquidités et événements de marché sont réellement exécutés ;
|
||||
- décoder les transactions pertinentes des DEX ciblés, puis seulement ensuite les launch surfaces et origines de mint/lancement ;
|
||||
- séparer les swaps/candles des événements utiles seulement à l’analyse : liquidité, cycle de vie de pool, fees, rewards, administration, wallets observés ;
|
||||
- séparer strictement les swaps/candles des événements utiles seulement à l’analyse : liquidité, cycle de vie de pool, fees, rewards, administration, wallet activity, mint/burn, migration ;
|
||||
- produire des métriques exploitables : prix, volume, candles/OHLCV, activité, bursts, déséquilibres buy/sell, signaux analytiques ;
|
||||
- préparer ensuite des règles déterministes de filtrage, d’achat, de vente, de stop-loss et de trailing stop ;
|
||||
- conserver une traçabilité locale suffisante pour rejouer, diagnostiquer et améliorer les décodeurs.
|
||||
- conserver une traçabilité locale suffisante pour rejouer, diagnostiquer et améliorer les décodeurs sans retraiter inutilement toute la base.
|
||||
|
||||
Le but court terme n’est pas encore le live trading. Le but court terme est de fiabiliser le décodage multi-DEX et la matérialisation des objets métier nécessaires au trading.
|
||||
Le but court terme n’est pas encore le live trading. Le but court terme est de fiabiliser le décodage multi-DEX, la matérialisation des objets métier nécessaires au trading et le mécanisme de replay incrémental.
|
||||
|
||||
## 2. Workspace
|
||||
|
||||
@@ -26,12 +26,12 @@ Le workspace contient deux crates principales.
|
||||
|
||||
| Crate | Rôle |
|
||||
|---|---|
|
||||
| `kb_lib` | Bibliothèque métier : configuration, tracing, clients réseau, pool HTTP, manager WS, résolution transactionnelle, décodage DEX, détection métier, persistance SQLite, backfill, metadata, candles, signaux analytiques. |
|
||||
| `kb_demo_app` | Application Tauri V2 de démonstration et d’inspection : fenêtres `Demo Ws`, `Demo Ws Manager`, `Demo Http`, `Demo Pipeline`, `Demo Pipeline 2`, graphiques candles et commandes de backfill/replay. |
|
||||
| `kb_lib` | Bibliothèque métier : configuration, tracing, clients réseau, pool HTTP, manager WS, résolution transactionnelle, décodage DEX, détection métier, persistance SQLite, backfill, metadata, candles, signaux analytiques, validation et diagnostics. |
|
||||
| `kb_demo_app` | Application Tauri V2 de démonstration et d’inspection : fenêtres `Demo Ws`, `Demo Ws Manager`, `Demo Http`, `Demo Pipeline`, `Demo Pipeline 2`, `Demo3`, graphiques candles et commandes de backfill/replay. |
|
||||
|
||||
La logique métier doit rester dans `kb_lib`. `kb_demo_app` doit rester une façade UI/Tauri et ne doit pas récupérer de logique Solana ou DEX profonde.
|
||||
La logique métier doit rester dans `kb_lib`. `kb_demo_app` doit rester une façade UI/Tauri utilisée pour inspecter, backfiller et constituer du corpus on-chain ; elle ne doit pas récupérer de logique DEX profonde.
|
||||
|
||||
## 3. État actuel après `0.7.42`
|
||||
## 3. État actuel au point de reprise `0.7.43-E5C`
|
||||
|
||||
### 3.1. Socle stabilisé à ne pas refactorer maintenant
|
||||
|
||||
@@ -44,7 +44,7 @@ Ces éléments fonctionnent et ne sont pas bloquants pour les DEX. Ils ne doiven
|
||||
- couches JSON-RPC WS/HTTP déjà stabilisées ;
|
||||
- orchestration réseau utilisée par les fenêtres de démonstration.
|
||||
|
||||
Ils pourront être améliorés plus tard, mais la priorité actuelle est le décodage DEX, les événements métier et les tables d’analyse.
|
||||
Ils pourront être améliorés plus tard, mais la priorité actuelle est le décodage DEX, les événements métier, les tables d’analyse et le replay incrémental.
|
||||
|
||||
### 3.2. Pipeline métier existant
|
||||
|
||||
@@ -56,95 +56,118 @@ Le pipeline `0.7.x` couvre déjà les étapes suivantes :
|
||||
4. décodage DEX dans `k_sol_dex_decoded_events` ;
|
||||
5. détection métier vers tokens, pools, paires, listings, origins et wallets observés ;
|
||||
6. matérialisation des trades exploitables ;
|
||||
7. agrégation pair metrics ;
|
||||
8. génération candles/OHLCV ;
|
||||
9. signaux analytiques simples ;
|
||||
10. inspection via l’application de démonstration.
|
||||
7. matérialisation partielle des événements non-trade prouvés ;
|
||||
8. agrégation pair metrics ;
|
||||
9. génération candles/OHLCV ;
|
||||
10. signaux analytiques simples ;
|
||||
11. inspection via l’application de démonstration.
|
||||
|
||||
### 3.3. Connecteurs validés ou observés via l’application de démo
|
||||
### 3.3. Résultat local observé avant normalisation
|
||||
|
||||
Les connecteurs suivants sont les surfaces actuellement les plus importantes pour la validation locale :
|
||||
Un corpus local de reprise contient notamment :
|
||||
|
||||
- `pump_fun` comme surface de launch / mint initial ;
|
||||
- `pump_swap` pour les swaps post-migration Pump ;
|
||||
- `raydium_cpmm` : swaps `swap_base_input` / `swap_base_output`, lifecycle `initialize`, liquidity `withdraw` et `collect_creator_fee` sur corpus prouvé ;
|
||||
- `raydium_clmm` : swaps `swap_v2` et legacy `swap`, liquidité/positions `increase_liquidity_v2`, `decrease_liquidity_v2`, `open_position_with_token22_nft`, `close_position` sur corpus prouvé ;
|
||||
- `raydium_amm_v4` : swaps AMM v4 legacy `675kPX...` matérialisés ; non-swaps legacy conservés en audit tant que le corpus ne permet pas une promotion fiable ;
|
||||
- `meteora_dlmm` ;
|
||||
- `meteora_damm_v1`, partiel : les swaps sans payload montant/prix exploitable restent conservés mais non actionnables ;
|
||||
- `meteora_damm_v2`, observé dans le corpus `0.7.36`, mais les swaps sans payload montant/prix exploitable sont maintenant `non_actionable_trade` ;
|
||||
- `meteora_dbc`, observé dans le corpus `0.7.36`, mais les swaps sans payload montant/prix exploitable sont maintenant `non_actionable_trade`.
|
||||
| Indicateur | Valeur observée |
|
||||
|---|---:|
|
||||
| transactions chain | `2956` |
|
||||
| decoded events | `7159` |
|
||||
| trade events | `2738` |
|
||||
| liquidity events | `0` |
|
||||
| pool lifecycle events | `1` |
|
||||
| fee events | `0` |
|
||||
| reward events | `0` |
|
||||
| admin events | `0` |
|
||||
|
||||
### 3.4. Connecteurs à consolider par corpus en priorité DEX-first
|
||||
Cette distribution montre que les swaps sont déjà fortement présents, mais que la matérialisation non-trade n’est pas encore homogène sur le corpus courant. Les nombreux `instruction_audit`, surtout côté Meteora, doivent devenir un axe de travail DEX par DEX.
|
||||
|
||||
Les modules ou surfaces suivantes existent, sont partiellement représentés dans le code ou doivent être recherchés, mais doivent être consolidés par corpus local, invariants et documentation avant de reprendre les launch surfaces :
|
||||
### 3.4. Connecteurs validés ou observés via l’application de démo
|
||||
|
||||
- `raydium_stable_swap` ;
|
||||
- `orca_whirlpools` ;
|
||||
- `fluxbeam` ;
|
||||
- `dexlab` ;
|
||||
- `meteora_damm_v1`, `meteora_damm_v2`, `meteora_dbc` et `meteora_dlmm` pour la couverture non-trade complète ;
|
||||
- `metaDAO` et `printr`, apparus comme DEX à vérifier côté sources externes de découverte ;
|
||||
- tout DEX ou programme récurrent détecté dans `k_sol_protocol_candidates`, DEX Screener ou les transactions locales.
|
||||
Les surfaces suivantes existent dans le code, dans la matrice ou dans le corpus local. Leur niveau de preuve doit rester explicite.
|
||||
|
||||
Les launch origins déjà amorcées (`meteora_fun_launch`, `bags`, `moonit`) et les launch surfaces enregistrables (`raydium_launchlab`, `raydium_launchpad`, `letsbonk`, `bonk_fun`, `bags`, `moonshot`, `moonit`, `boop_fun`, `believe`, `heaven`) sont conservées dans la documentation, mais elles ne sont plus prioritaires tant que les DEX effectifs ne sont pas suffisamment couverts.
|
||||
| Code | Statut de travail | Commentaire |
|
||||
|---|---|---|
|
||||
| `pump_fun` | launch surface | Surface de launch / mint initial. À traiter après les DEX effectifs sauf besoin de migration. |
|
||||
| `pump_swap` | DEX effectif | Swaps `buy` / `sell` observés. Non-trade à étendre plus tard. |
|
||||
| `raydium_cpmm` | DEX effectif consolidé partiellement | Swaps et premiers events non-trade prouvés sur corpus antérieur. |
|
||||
| `raydium_clmm` | DEX effectif consolidé partiellement | Swaps v2/legacy, positions et liquidity events prouvés sur corpus antérieur. |
|
||||
| `raydium_amm_v4` | DEX effectif legacy | Swaps AMM v4 legacy matérialisés ; non-swaps legacy conservés en audit tant que le corpus ne permet pas une promotion fiable. |
|
||||
| `meteora_dlmm` | DEX effectif à reprendre séparément | Présent et observé ; events non-trade à normaliser. |
|
||||
| `meteora_damm_v1` | DEX effectif à reprendre séparément | Swaps présents ; plusieurs events restent en audit ou non actionnables. |
|
||||
| `meteora_damm_v2` | DEX effectif à reprendre séparément | Swaps et create_pool observés ; nombreux audits à traiter. |
|
||||
| `meteora_dbc` | launch/bonding + DEX effectif partiel à reprendre séparément | Gros volume d’audits ; séparer bonding/launch, swap effectif et migration. |
|
||||
| `orca_whirlpools` | DEX effectif à vérifier | À revalider par corpus dédié avant promotion. |
|
||||
| `fluxbeam` | DEX effectif à vérifier | Program id, corpus et events à vérifier. |
|
||||
| `dexlab` | DEX effectif à vérifier | Program id, corpus et events à vérifier. |
|
||||
| `metaDAO` | candidat à vérifier | Aucun `program_id` ne doit être déclaré vérifié sans preuve/corpus. |
|
||||
| `printr` | candidat à vérifier | Aucun `program_id` ne doit être déclaré vérifié sans preuve/corpus. |
|
||||
|
||||
### 3.5. Validation acquise en `0.7.36`
|
||||
### 3.5. Statuts de preuve obligatoires
|
||||
|
||||
La validation `0.7.36_meteora_family_consolidation` est considérée comme réalisée lorsque les invariants suivants restent vrais après replay local :
|
||||
Aucun `program_id`, DEX ou event ne doit être documenté comme vérifié sans preuve reproductible.
|
||||
|
||||
- `validationPassed = true` ;
|
||||
- `diagnosticsClean = true` ;
|
||||
- `blockingIssueCount = 0` ;
|
||||
- `decodedTradeCandidateWithoutTradeEventCount = 0` ;
|
||||
- `decodedTradeCandidateWithoutAmountPayloadCount = 0` ;
|
||||
- `missingTradeEventCount = 0` ;
|
||||
- `pairWithoutTradeCount = 0` pour les paires actionnables ;
|
||||
- `pairWithoutCandleCount = 0` pour les paires actionnables.
|
||||
| Statut | Sens |
|
||||
|---|---|
|
||||
| `known` | Connu/listé dans le code, une doc, une source externe ou la matrice. |
|
||||
| `observed` | Vu dans une transaction, une instruction, une base locale ou un corpus on-chain. |
|
||||
| `decoded` | Un decoder produit un event structuré ou un `instruction_audit` classé. |
|
||||
| `materialized` | L’event alimente une table métier dédiée : trade, liquidity, lifecycle, fee, reward, admin, mint/burn, etc. |
|
||||
| `verified_by_corpus` | Validé par requêtes SQL, signatures/corpus reproductibles et invariants de validation. |
|
||||
|
||||
Point important : `meteora_damm_v2` et `meteora_dbc` peuvent produire beaucoup d’événements `swap` décodés sans produire de `trade_events` lorsque les montants ou prix ne sont pas fiables. Ces événements doivent rester `non_actionable_trade` et ne doivent pas être comptés comme `tradeCandidate` ou `candleCandidate`.
|
||||
## 4. Matrice DEX : priorité révisée
|
||||
|
||||
## 4. Matrice DEX : DEX effectifs d’abord, launch surfaces ensuite
|
||||
À partir du point de reprise `0.7.43-E5C`, la priorité est :
|
||||
|
||||
La distinction de travail à partir de `0.7.39` est la suivante :
|
||||
1. **DEX effectifs actuels** : programmes où les swaps, pools, liquidités, positions, fees, rewards, admin/config, burns/mints ou migrations sont réellement exécutés ;
|
||||
2. **launch surfaces** : surfaces de mint, bonding, launchpad, migration ou origine ;
|
||||
3. **DEX historiques / legacy / faibles priorités** : programmes anciens, peu observés, ou uniquement utiles à la compatibilité/replay historique.
|
||||
|
||||
- un **DEX effectif** est un programme ou une famille de programmes sur lesquels des swaps, pools, liquidités, fees, rewards, admin/config, burns ou mints utiles sont réellement observables ;
|
||||
- une **launch surface** peut être la première source de mint ou de lancement, mais elle ne doit pas masquer la priorité donnée aux programmes où le swap final est exécuté ;
|
||||
- pour le trading, le DEX effectif, la qualité de décodage du swap et les événements de pool sont prioritaires ; la launch origin reste une information de filtrage à réintroduire après stabilisation des DEX.
|
||||
Chaque DEX ou variante de DEX doit avoir sa propre étape de validation. Les familles larges restent utiles pour la navigation, mais le travail de décodage doit être fait par version/protocole : `raydium_cpmm`, `raydium_clmm`, `raydium_amm_v4`, `meteora_dlmm`, `meteora_damm_v1`, `meteora_damm_v2`, `meteora_dbc`, etc.
|
||||
|
||||
### 4.1. Matrice de travail
|
||||
### 4.1. Ordre de travail DEX effectifs
|
||||
|
||||
Depuis `0.7.29`, la matrice de support DEX est portée par `kb_lib/src/dex_support_matrix.rs`. Elle centralise le code interne, la famille, la version, le type de surface, les program ids vérifiés localement, le statut de support, les capacités actuelles et les raisons de skip.
|
||||
| Priorité | Code cible | Rôle | Action prochaine |
|
||||
|---:|---|---|---|
|
||||
| 1 | `pump_swap` | AMM / swap | Maintenir les invariants swaps et chercher les non-trade prouvés. |
|
||||
| 2 | `raydium_cpmm` | AMM | Garder consolidé ; ne rouvrir que sur nouveaux discriminators/corpus. |
|
||||
| 3 | `raydium_clmm` | CLMM | Garder consolidé ; ne rouvrir que sur nouveaux discriminators/corpus. |
|
||||
| 4 | `raydium_amm_v4` | AMM legacy actif | Garder swaps ; ne promouvoir les non-swaps qu’avec corpus. |
|
||||
| 5 | `meteora_dlmm` | DLMM | Reprendre séparément : swaps, liquidity, positions, lifecycle, fees/rewards/admin. |
|
||||
| 6 | `meteora_damm_v1` | AMM | Reprendre séparément : swaps exploitables, pools, liquidity, fees/admin. |
|
||||
| 7 | `meteora_damm_v2` | AMM | Reprendre séparément : create_pool, swaps exploitables, configs dynamiques, non-trade. |
|
||||
| 8 | `meteora_dbc` | bonding / DEX effectif partiel | Reprendre séparément : swap effectif, bonding curve, migration, launch attribution. |
|
||||
| 9 | `orca_whirlpools` | CLMM | Revalider par corpus dédié. |
|
||||
| 10 | `fluxbeam` | AMM | Vérifier program id, events et corpus. |
|
||||
| 11 | `dexlab` | AMM | Vérifier program id, events et corpus. |
|
||||
| 12 | `metaDAO` | candidat DEX | Vérifier par corpus avant toute promotion. |
|
||||
| 13 | `printr` | candidat DEX | Vérifier par corpus avant toute promotion. |
|
||||
|
||||
Depuis `0.7.30`, les événements décodés reçoivent aussi une classification plus fine : `eventLifecycleKind`, `eventActionability` et `nonTradeUseful`. Cette classification sert aux diagnostics et prépare la matérialisation future des événements non-trade sans alimenter directement les trades/candles.
|
||||
### 4.2. Launch surfaces reportées
|
||||
|
||||
Depuis `0.7.32`, les diagnostics distinguent explicitement les gaps littéraux de catalogue (`literalPairWithoutTradeCount`, `literalPairWithoutCandleCount`) des gaps bloquants/actionnables (`blockingPairWithoutTradeCount`, `blockingPairWithoutCandleCount`). Les anciens champs `pairWithoutTradeCount` et `pairWithoutCandleCount` restent exposés comme alias de compatibilité pour les gaps bloquants/actionnables.
|
||||
À reprendre après les DEX effectifs, sauf si une surface est indispensable pour comprendre une migration vers un pool tradable :
|
||||
|
||||
Depuis `0.7.33`, les diagnostics ajoutent une classification `pairTradingReadiness` au niveau des paires et des résumés agrégés `pairTradingReadinessSummaries`. Cette classification sépare les paires directement lisibles/tradables contre WSOL ou stable, les paires inversées avec WSOL/stable en base, les paires cross-quote nécessitant un routeur/aggregator, les paires non matérialisées en trade et les cas de quote inconnue. Elle reste purement diagnostique : elle ne modifie ni le replay, ni les `trade_events`, ni les candles.
|
||||
- `pump_fun` ;
|
||||
- `raydium_launchlab` ;
|
||||
- `raydium_launchpad` ;
|
||||
- `letsbonk` / `bonk_fun` ;
|
||||
- `bags` ;
|
||||
- `moonshot` ;
|
||||
- `moonit` ;
|
||||
- `boop_fun` ;
|
||||
- `believe` ;
|
||||
- `heaven` ;
|
||||
- autres launch origins découvertes par corpus.
|
||||
|
||||
| Code cible | Type | Priorité `0.7.39+` | Prochaine action |
|
||||
|---|---:|---|---|
|
||||
| `pump_swap` | AMM / swap | haute | conserver les invariants trade/candle et étendre les événements non-trade prouvés. |
|
||||
| `raydium_cpmm` | AMM | haute | couvert pour swaps input/output, `initialize`, `withdraw` et `collect_creator_fee` prouvés ; poursuivre seulement sur nouveaux discriminators. |
|
||||
| `raydium_clmm` | CLMM | haute | couvert pour swaps v2/legacy, increase/decrease liquidity et open/close position prouvés ; poursuivre seulement sur nouveaux discriminators. |
|
||||
| `raydium_amm_v4` | AMM legacy | haute | swaps legacy couverts et matérialisés ; non-swaps AMM v4 conservés en audit, à compléter plus tard si corpus suffisant. |
|
||||
| `raydium_stable_swap` | AMM legacy | moyenne | vérifier l’usage réel de `5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h` et ne l’activer qu’avec corpus. |
|
||||
| `meteora_dlmm` | DLMM | haute | verrouiller swaps, positions, liquidité et lifecycle. |
|
||||
| `meteora_damm_v1` | AMM legacy | haute | conserver le skip sans amounts exploitables et rechercher un corpus swap/liquidité exploitable. |
|
||||
| `meteora_damm_v2` | AMM | haute | vérifier `cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG`, les swaps, les configs dynamiques et les événements non-trade. |
|
||||
| `meteora_dbc` | bonding curve / DEX effectif partiel | haute | séparer ce qui relève du swap, du bonding curve et de la migration sans faux trade/candle. |
|
||||
| `orca_whirlpools` | CLMM | haute | consolider par corpus fiable : create_pool, swap, liquidité/positions. |
|
||||
| `fluxbeam` | AMM | moyenne | vérifier program id, corpus réel et instructions utiles. |
|
||||
| `dexlab` | AMM | moyenne | vérifier program id, corpus réel, swaps et liens OpenBook éventuels. |
|
||||
| `metaDAO` | DEX à vérifier | haute | rechercher le ou les program ids, corpus, comptes et types d’événements avant toute promotion. |
|
||||
| `printr` | DEX à vérifier | haute | rechercher le ou les program ids, corpus, comptes et types d’événements avant toute promotion. |
|
||||
| `okx_dex` | Aggregator/router | basse DEX direct | classifier sans matérialiser en trade direct avant preuve. |
|
||||
| Launch surfaces (`pump_fun`, `raydium_launchlab`, `raydium_launchpad`, `bags`, `letsbonk`, `bonk_fun`, `boop_fun`, `moonshot`, `moonit`, `believe`, `heaven`) | Launch / origine | reportée | reprendre après consolidation des DEX effectifs ; aucun `program_id` fictif. |
|
||||
| `zora` | À vérifier | hors priorité | ne pas intégrer avant preuve de programme Solana pertinent. |
|
||||
### 4.3. DEX historiques ou faibles priorités
|
||||
|
||||
## 5. Base de données
|
||||
À garder dans la matrice mais sans bloquer les versions immédiates :
|
||||
|
||||
SQLite reste le stockage local initial.
|
||||
- `raydium_stable_swap` tant que son usage réel n’est pas démontré par corpus local ;
|
||||
- vieux programmes legacy uniquement utiles pour compatibilité ou replay historique ;
|
||||
- agrégateurs/routeurs comme `okx_dex` tant qu’ils ne correspondent pas à un DEX direct matérialisable ;
|
||||
- entrées ambiguës comme `zora` tant qu’aucun programme Solana pertinent n’est prouvé.
|
||||
|
||||
## 5. Base de données et replay incrémental
|
||||
|
||||
SQLite reste le stockage local initial. Le fichier `config.json` peut pointer vers une base différente pour travailler par corpus, par DEX ou sur base vierge. Le schéma est créé au lancement via les `CREATE TABLE IF NOT EXISTS` existants.
|
||||
|
||||
Organisation actuelle à conserver :
|
||||
|
||||
@@ -154,60 +177,76 @@ Organisation actuelle à conserver :
|
||||
- les entités persistées sont sous `kb_lib/src/db/entities/` ;
|
||||
- les DTO applicatifs sont sous `kb_lib/src/db/dtos/`.
|
||||
|
||||
`schema.rs` n’est donc pas un fichier métier à splitter immédiatement. Il reste acceptable tant qu’il garde uniquement la responsabilité de création de schéma.
|
||||
|
||||
### 5.1. Tables existantes importantes
|
||||
|
||||
Le modèle actuel contient déjà notamment :
|
||||
|
||||
- transactions et instructions Solana normalisées ;
|
||||
- DEX connus ;
|
||||
- événements DEX décodés ;
|
||||
- tokens, pools, pool tokens, paires, listings ;
|
||||
- launch surfaces et attributions ;
|
||||
- pool origins ;
|
||||
- swaps et trade events ;
|
||||
- liquidity events ;
|
||||
- wallets, participations, holdings ;
|
||||
- candles ;
|
||||
- metrics et analytic signals ;
|
||||
- diagnostics locaux.
|
||||
- `k_sol_chain_transactions` ;
|
||||
- `k_sol_chain_instructions` ;
|
||||
- `k_sol_dexes` ;
|
||||
- `k_sol_dex_decoded_events` ;
|
||||
- `k_sol_tokens` ;
|
||||
- `k_sol_pools` ;
|
||||
- `k_sol_pairs` ;
|
||||
- `k_sol_pool_tokens` ;
|
||||
- `k_sol_trade_events` ;
|
||||
- `k_sol_liquidity_events` ;
|
||||
- `k_sol_pool_lifecycle_events` ;
|
||||
- `k_sol_fee_events` ;
|
||||
- `k_sol_reward_events` ;
|
||||
- `k_sol_pool_admin_events` ;
|
||||
- `k_sol_token_mint_events` ;
|
||||
- `k_sol_token_burn_events` ;
|
||||
- `k_sol_transaction_classifications` ;
|
||||
- `k_sol_protocol_candidates`.
|
||||
|
||||
### 5.2. Tables existantes à stabiliser pour les cas non-trade et inconnus
|
||||
### 5.2. Prochaine évolution DB : ledger de décodage/replay
|
||||
|
||||
Avant d’étendre trop agressivement les DEX, ces tables doivent être stabilisées et raccordées progressivement aux diagnostics et matérialisations :
|
||||
Le replay actuel peut retraiter trop largement les transactions déjà connues. La prochaine tranche DB doit ajouter une structure de suivi permettant de ne pas rescanner les events certains, sauf option explicite.
|
||||
|
||||
| Table cible | Rôle |
|
||||
Objectifs :
|
||||
|
||||
- mémoriser qu’une transaction/instruction a déjà été traitée par un decoder donné ;
|
||||
- stocker le statut de décodage : certain, partiel, inconnu, erreur, non-actionnable, multi-token ambigu ;
|
||||
- associer le résultat au `decoder_code` et à une version logique de decoder ;
|
||||
- permettre un mode `force` qui ignore le ledger ;
|
||||
- permettre un mode de reprise ciblé lorsque le decoder change ;
|
||||
- ne pas skipper automatiquement les transactions multi-token, multi-pool ou multi-event ambiguës ;
|
||||
- conserver les failed transactions comme traçables mais non actionnables.
|
||||
|
||||
Nom de table à décider dans la tranche DB, par exemple :
|
||||
|
||||
- `k_sol_decode_attempts` ; ou
|
||||
- `k_sol_replay_decode_ledger`.
|
||||
|
||||
Champs conceptuels attendus :
|
||||
|
||||
| Champ conceptuel | Rôle |
|
||||
|---|---|
|
||||
| `k_sol_transaction_classifications` | classifier les transactions connues, inconnues, partielles, échouées, non-DEX, DEX-candidates, launch-candidates. |
|
||||
| `k_sol_protocol_candidates` | conserver les programmes ou patterns suspects/récurrents qui ne correspondent pas encore à un DEX connu. |
|
||||
| `k_sol_pool_lifecycle_events` | matérialiser initialize/create/migrate/open/close/status events. |
|
||||
| `k_sol_fee_events` | conserver fees, creator fees, protocol fees, fund fees. |
|
||||
| `k_sol_reward_events` | conserver reward params, init rewards, collect rewards. |
|
||||
| `k_sol_pool_admin_events` | conserver changements de config, authority, pause/resume, paramètres de pool. |
|
||||
| `transaction_id` / `signature` | rattachement transactionnel stable |
|
||||
| `instruction_id` / `instruction_index` | granularité instruction si possible |
|
||||
| `program_id` | programme effectivement traité |
|
||||
| `protocol_name` | protocole/DEx résolu |
|
||||
| `decoder_code` | decoder logique utilisé |
|
||||
| `decoder_version` | version logique du decoder |
|
||||
| `decode_status` | certain, partial, unknown, failed, skipped, ambiguous |
|
||||
| `certainty` | niveau de confiance machine |
|
||||
| `event_count` | nombre d’events produits |
|
||||
| `payload_hash` / `instruction_hash` | détection de changement d’entrée |
|
||||
| `reason_code` / `error_json` | diagnostic sans panic |
|
||||
| `created_at` / `updated_at` | audit local |
|
||||
|
||||
`k_sol_liquidity_events` existe déjà et doit être stabilisée/étendue plutôt que recréée sans nécessité.
|
||||
## 6. Politique de replay
|
||||
|
||||
## 6. Politique de refactor actuelle
|
||||
Règles cibles :
|
||||
|
||||
Le code et la documentation sont vivants. Les refactors agressifs sont acceptables lorsque cela rend le pipeline plus propre et plus durable, à condition de respecter ces limites :
|
||||
|
||||
- ne pas casser les fonctionnalités déjà validées ;
|
||||
- ne pas toucher pour le moment aux clients et managers réseau stabilisés ;
|
||||
- faire des étapes courtes, testables et rejouables ;
|
||||
- conserver les invariants de replay local ;
|
||||
- ne pas transformer un événement non price-action en trade/candle ;
|
||||
- documenter les nouveaux types publics avec une rustdoc utile mais pas surchargée ;
|
||||
- laisser `local_pipeline_diagnostics` servir d’outil temporaire de validation tant que les DEX ne sont pas stabilisés.
|
||||
|
||||
Les fichiers à surveiller en priorité sont :
|
||||
|
||||
| Fichier | Action recommandée |
|
||||
|---|---|
|
||||
| `kb_lib/src/dex_decode.rs` | extraire classification, catégories d’événements et enrichissement commun. |
|
||||
| `kb_lib/src/dex_detect.rs` | extraire helpers communs pool/pair/listing/origin/wallets et isoler les handlers par famille. |
|
||||
| `kb_lib/src/trade_aggregation.rs` | isoler extraction de montants, normalisation trade et pricing. |
|
||||
| `kb_lib/src/dex/*.rs` | homogénéiser les contrats de décodeurs sans forcer un gros trait prématuré. |
|
||||
- par défaut, ne pas retraiter une instruction dont le ledger indique un décodage certain avec le même decoder/version et la même entrée ;
|
||||
- retraiter si `force = true` ;
|
||||
- retraiter si le decoder concerné change de version logique ;
|
||||
- retraiter si la transaction contient plusieurs tokens/pools/events et que le ledger la classe comme ambiguë ou partielle ;
|
||||
- retraiter si un event précédemment `instruction_audit` devient décodable par un nouveau decoder ;
|
||||
- ne jamais créer de faux trade/candle pour un event dont les montants ne sont pas fiables ;
|
||||
- conserver les audits utiles pour améliorer les decoders.
|
||||
|
||||
## 7. Contraintes de code
|
||||
|
||||
@@ -221,36 +260,36 @@ Contraintes maintenues :
|
||||
- `#![deny(unreachable_pub)]` et `#![warn(missing_docs)]` dans les racines concernées ;
|
||||
- pas de `anyhow` ;
|
||||
- pas de `thiserror` ;
|
||||
- pas de `?`, `unwrap`, `expect` dans le code applicatif ;
|
||||
- usage privilégié de `match`, `if let Err`, `let Err = ... else` ;
|
||||
- pas de `?`, `unwrap`, `expect` dans le code applicatif de `kb_lib` ;
|
||||
- `kb_demo_app` peut rester plus souple tant qu’elle reste une application de démonstration ;
|
||||
- usage privilégié de `match`, `if let Err`, `let Err = ... else` dans `kb_lib` ;
|
||||
- imports externes limités, sauf traits lorsque nécessaire ;
|
||||
- tests unitaires et tests de replay maintenus.
|
||||
|
||||
Les tests peuvent rester plus souples lorsque cela clarifie le test.
|
||||
Si une requête DB est ajoutée ou modifiée, mettre à jour les re-exports dans `kb_lib/src/db.rs`, puis dans `kb_lib/src/lib.rs` si la surface publique l’exige.
|
||||
|
||||
## 8. Priorité immédiate
|
||||
|
||||
Les phases `0.7.39`, `0.7.40`, `0.7.41` et `0.7.42` sont considérées comme closes côté documentation lorsque les tests locaux passent et que les requêtes SQL de contrôle Raydium confirment les invariants de la famille Raydium.
|
||||
La priorité immédiate après le point de reprise `0.7.43-E5C` est :
|
||||
|
||||
État acquis :
|
||||
1. `0.7.43` : resynchronisation documentaire, normalisation DEX-first et gel du point de reprise ;
|
||||
2. `0.7.44` : ajout du ledger de décodage/replay et options de replay `force` / skip sûr ;
|
||||
3. `0.7.45` : reprise séparée de `meteora_dlmm` ;
|
||||
4. `0.7.46` : reprise séparée de `meteora_damm_v1` ;
|
||||
5. `0.7.47` : reprise séparée de `meteora_damm_v2` ;
|
||||
6. `0.7.48` : reprise séparée de `meteora_dbc` ;
|
||||
7. `0.7.49` : revalidation séparée de `orca_whirlpools` ;
|
||||
8. `0.7.50+` : FluxBeam, DexLab, metaDAO, Printr, puis launch surfaces.
|
||||
|
||||
- `0.7.39_dex_first_effective_swap_surfaces` : matrice DEX-first, suppression de l’alias `raydium`, ajout de `metaDAO` et `Printr` en `to_verify`, aucun `program_id` fictif ;
|
||||
- `0.7.40` : Demo3 découvre on-chain signatures, mints, deltas SPL Token et comptes candidats par DEX/program id ; Demo Pipeline 2 peut backfiller une signature précise ;
|
||||
- `0.7.41` : `raydium_amm_v4.swap` décode les inner instructions `675kPX...`, produit trades/candles lorsque les montants sont exploitables, et conserve les failed transactions sans matérialisation marché ;
|
||||
- `0.7.42` : `raydium_cpmm`, `raydium_clmm` et `raydium_amm_v4` sont consolidés comme surfaces Raydium effectives ; CLMM/CPMM couvrent les premiers événements non-trade prouvés ; AMM v4 non-swap reste en audit legacy.
|
||||
Garde-fous constants :
|
||||
|
||||
Résultat de corpus Raydium `0.7.42` :
|
||||
|
||||
- swaps Raydium matérialisés : AMM v4, CLMM `swap_v2`, CLMM legacy `swap`, CPMM `swap_base_input`, CPMM `swap_base_output` ;
|
||||
- non-trade Raydium matérialisés : `25` liquidity events, `1` pool lifecycle event, `2` fee events ;
|
||||
- événements CLMM prouvés : `increase_liquidity_v2`, `decrease_liquidity_v2`, `open_position_with_token22_nft`, `close_position` ;
|
||||
- événements CPMM prouvés : `initialize`, `withdraw`, `collect_creator_fee` ;
|
||||
- audits restants AMM v4 : conservés comme `raydium_amm_v4.instruction_audit` informatifs, non promus sans preuve ;
|
||||
- transactions failed : traçables mais exclues de `trade_events`, metrics et candles.
|
||||
|
||||
Limite connue hors Raydium : la base locale peut encore contenir des decoded events `orca_whirlpools.swap` partiels issus du corpus courant. Orca Whirlpools est volontairement reporté à `0.7.44`; ce point ne doit pas bloquer la clôture Raydium `0.7.42`.
|
||||
|
||||
La prochaine étape est maintenant `0.7.43_meteora_effective_surfaces`, puis `0.7.44` pour Orca/FluxBeam/DexLab/metaDAO/Printr.
|
||||
- pas de faux trade ;
|
||||
- pas de fausse candle ;
|
||||
- pas de `program_id` fictif ;
|
||||
- pas de promotion d’un DEX sans corpus transactionnel ;
|
||||
- pas de logique métier DEX profonde dans `kb_demo_app` ;
|
||||
- pas de metadata manquante bloquante ;
|
||||
- pas de refactor réseau inutile tant que les clients HTTP/WS existants suffisent.
|
||||
|
||||
## 9. Fichiers utiles pour reprendre dans une nouvelle session
|
||||
|
||||
@@ -260,6 +299,8 @@ Pour reprendre rapidement le codage dans une nouvelle session, fournir au minimu
|
||||
- `ROADMAP.md` ;
|
||||
- `CHANGELOG.md` ;
|
||||
- `Cargo.toml` racine ;
|
||||
- `clippy.toml` ;
|
||||
- `config.json` ;
|
||||
- `kb_lib/Cargo.toml` ;
|
||||
- `kb_lib/src/lib.rs` ;
|
||||
- `kb_lib/src/constants.rs` ;
|
||||
@@ -267,15 +308,19 @@ Pour reprendre rapidement le codage dans une nouvelle session, fournir au minimu
|
||||
- `kb_lib/src/dex/*.rs` ;
|
||||
- `kb_lib/src/dex_decode.rs` ;
|
||||
- `kb_lib/src/dex_detect.rs` ;
|
||||
- `kb_lib/src/dex_support_matrix.rs` ;
|
||||
- `kb_lib/src/dex_event_classification.rs` ;
|
||||
- `kb_lib/src/non_trade_event_materialization.rs` ;
|
||||
- `kb_lib/src/trade_aggregation.rs` ;
|
||||
- `kb_lib/src/pair_candle_aggregation.rs` ;
|
||||
- `kb_lib/src/local_pipeline_replay.rs` ;
|
||||
- `kb_lib/src/local_pipeline_validation.rs` ;
|
||||
- `kb_lib/src/local_pipeline_diagnostics.rs` ;
|
||||
- `kb_lib/src/onchain_dex_pair_discovery.rs` ;
|
||||
- `kb_lib/src/db/schema.rs` ;
|
||||
- `kb_lib/src/db.rs` ;
|
||||
- `kb_lib/src/db/entities.rs` et `kb_lib/src/db/entities/*` ;
|
||||
- `kb_lib/src/db/dtos.rs` et `kb_lib/src/db/dtos/*` ;
|
||||
- `kb_lib/src/db/queries.rs` et `kb_lib/src/db/queries/*`.
|
||||
|
||||
Ajouter `kb_demo_app/src/demo_pipeline*.rs`, les fichiers frontend associés et les nouvelles démos (`Demo3`, `Demo4`, `Demo10`) seulement si la tâche concerne l’UI, la recherche de corpus, les diagnostics affichés ou le watcher temps réel.
|
||||
Ajouter `kb_demo_app/src/demo_pipeline*.rs`, `kb_demo_app/src/demo3.rs`, les fichiers frontend associés et les nouvelles démos seulement si la tâche concerne l’UI, la recherche de corpus, les diagnostics affichés ou le watcher temps réel.
|
||||
|
||||
Reference in New Issue
Block a user