# Prompt de reprise — khadhroony-bobobot `0.7.51` / Raydium AMM v4 event coverage Reprise du projet `khadhroony-bobobot` après clôture de `0.7.50 raydium_launchpad` et re-vérification finale CPMM/CLMM. ## Archive de départ Utiliser la dernière archive complète du workspace intégrant les deltas validés jusqu'à : 0.7.50-raydium-launchpad-final Joindre aussi les docs et SQL de validation à jour : ```text README.md ROADMAP.md CHANGELOG.md docs/DEX_DECODER_MATRIX.md docs/DEX_EVENT_COVERAGE_MATRIX.md docs/DB_EVENT_MODEL_REVIEW.md docs/reports/RAYDIUM_LAUNCHPAD_EVENT_COVERAGE_REPORT.md validation_sql/SQL_VALIDATION_RAYDIUM_LAUNCHPAD_0_7_50.sql validation_sql/SQL_VALIDATION_RAYDIUM_CPMM_AUDIT_CLEANUP_0_7_50_FINAL.sql validation_sql/SQL_VALIDATION_RAYDIUM_CPMM_0_7_50_RECHECK.sql validation_sql/SQL_VALIDATION_RAYDIUM_CLMM_0_7_50_RECHECK.sql ``` ## État validé avant reprise `0.7.50` a clôturé `raydium_launchpad` et consolidé les rechecks CPMM/CLMM. Dernier replay local rapporté avant clôture : ```text 1103 replayed 0 decode skipped 1124 ledger upserts 542 unsafe ledger rows 561 trades 50 liquidity 13 lifecycle 0 tokenAccount 2224 candle upserts instructionObservations = 7013 resetDeleted = 1182 ``` Points de clôture à préserver : ```text raydium_launchpad : surface canonique, program id LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj Launchpad trade_event matérialisé seulement quand corpus + successful tx le prouvent Launchpad initialize* fournit le catalogue pool/pair, pas de faux trade/candle CPMM 40f4bc78a7e9690a est raydium_cpmm.anchor_idl_instruction decoded-only CPMM residual raydium_cpmm.instruction_audit 40f4bc78a7e9690a doit être nettoyé après replay final CLMM residual instruction_audit / upstream fallback doivent rester vides k_sol_instruction_observations reste une table technique, pas une table métier Solscan instruction= est une aide de découverte, pas une preuve métier ``` Requête CPMM post-fix obligatoire : ```sql SELECT json_extract(payload_json, '$.discriminatorHex') AS discriminator_hex, COUNT(*) AS audit_count, COUNT(DISTINCT transaction_id) AS tx_count FROM k_sol_dex_decoded_events WHERE protocol_name = 'raydium_cpmm' AND event_kind = 'raydium_cpmm.instruction_audit' GROUP BY discriminator_hex ORDER BY audit_count DESC, discriminator_hex; ``` Cette requête doit être vide après replay `forceDexDecode=yes`. ## Objectif `0.7.51` — `raydium_amm_v4` Reprendre Raydium AMM v4 legacy au même niveau de couverture que CPMM/CLMM : ```text swaps pool lifecycle / pool_create add_liquidity / remove_liquidity fees / admin/config side effects SPL Token / Token-2022 documentés mais non promus comme raydium_amm_v4.* directs fallback instruction_audit nettoyé quand une entrée locale spécialisée couvre l'instruction coverage entries synchronisées et rafraîchies ``` Code local canonique : ```text raydium_amm_v4 ``` Program id canonique connu : ```text 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 ``` Solscan Program IDL / recherche par instruction : ```text https://solscan.io/account/675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8#programIdl https://solscan.io/account/675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8?instruction=&hide_spam=true&hide_failed=true&show_related=false&sort=desc ``` ## Sources Git/IDL à utiliser systématiquement ```text https://github.com/sevenlabs-hq/carbon/tree/main/decoders https://github.com/0xfnzero/solana-streamer https://github.com/0xfnzero/sol-parser-sdk/tree/main/idl https://github.com/pinax-network/substreams-solana-idls/tree/main/src https://github.com/hodlwarden/solana-tx-parser/tree/main/src https://docs.vybenetwork.com/docs/available-dexs-amms ``` Pour AMM v4, vérifier aussi les IDL/JSON Raydium legacy présents dans fnzero, notamment les fichiers autour de `raydium_amm_v4` / `raydium_pool_v4`, sans promouvoir `raydium_pool_v4` tant que son program id et son rôle métier ne sont pas prouvés localement. ## Règles fixes ```text Rust 2024 pas de mod.rs fichiers Rust avec // file: ... pas de anyhow pas de thiserror pas de ? / unwrap / expect dans kb_lib applicatif match / if let Err / let Err = ... else rustdoc sur API publique re-exports db.rs puis lib.rs si DB modifiée ``` ## Invariants métier ```text non-trade event = jamais trade/candle failed transaction = audit-only / jamais matérialisée métier upstream Git/IDL/Solscan = indice, pas preuve métier program id upstream non promu sans corpus local side effects SPL Token / Token-2022 restent transversaux sauf preuve multi-DEX et décision DB instruction_audit et upstream_git.instruction_match doivent être nettoyés quand une entrée locale spécialisée couvre le discriminant ``` ## Workflow conseillé 1. Créer une nouvelle base SQLite dédiée `0.7.51`. 2. Inventorier Carbon/fnzero/Pinax/Solscan Program IDL pour `raydium_amm_v4`. 3. Synchroniser `k_sol_dex_event_coverage_entries` avec `decoder_code = raydium_amm_v4`. 4. Utiliser Solscan `instruction=` pour obtenir rapidement des signatures non failed. 5. Backfill Demo2 signature/pool. 6. Replay local avec : ```text skipDexDecode = no forceDexDecode = yes deferInstructionObservations = yes ``` 7. Vérifier : ```text coverage listed/observed/materialized residual instruction_audit residual upstream_git.instruction_match failed tx materialization = 0 non-trade trade_count = 0 trade/candle only for swap events validés ``` ## Livrables attendus ```text archive delta fichiers modifiés/ajoutés README.md / ROADMAP.md / CHANGELOG.md mis à jour docs/DEX_DECODER_MATRIX.md docs/DEX_EVENT_COVERAGE_MATRIX.md docs/DB_EVENT_MODEL_REVIEW.md docs/reports/RAYDIUM_AMM_V4_EVENT_COVERAGE_REPORT.md validation_sql/SQL_VALIDATION_RAYDIUM_AMM_V4_0_7_51.sql ``` Validation finale locale : ```bash cargo fmt cargo test -p kb_lib cargo clippy -p kb_lib --all-targets -- -D warnings ```