0.7.54
This commit is contained in:
347
docs/prompts/PROMPT_0_7_55_PUMP_FEES.md
Normal file
347
docs/prompts/PROMPT_0_7_55_PUMP_FEES.md
Normal file
@@ -0,0 +1,347 @@
|
||||
<!-- file: docs/prompts/PROMPT_0_7_55_PUMP_FEES.md -->
|
||||
|
||||
# Prompt de reprise — khadhroony-bobobot 0.7.55 — pump_fees
|
||||
|
||||
Tu reprends le workspace Rust/Tauri `khadhroony-bobobot` après clôture technique de `0.7.54 pump_fun`.
|
||||
|
||||
## 1. Archive et fichiers à fournir
|
||||
|
||||
Utiliser l'archive la plus récente après clôture `0.7.54 pump_fun`.
|
||||
|
||||
À considérer comme sources locales de savoir :
|
||||
|
||||
- code Rust du workspace ;
|
||||
- `README.md`, `ROADMAP.md`, `CHANGELOG.md` ;
|
||||
- `docs/DEX_DECODER_MATRIX.md` ;
|
||||
- `docs/DEX_EVENT_COVERAGE_MATRIX.md` ;
|
||||
- `docs/reports/PUMP_FUN_EVENT_COVERAGE_REPORT.md` ;
|
||||
- `validation_sql/SQL_VALIDATION_PUMP_FUN_0_7_54.sql` ;
|
||||
- `validation_sql/SQL_VALIDATION_PUMP_FUN_MATERIALIZATION_0_7_54.sql` ;
|
||||
- `idls/**`, en particulier `idls/pump_fees.pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ.json` ;
|
||||
- les logs/requêtes SQL collés pendant la session.
|
||||
|
||||
Ne pas supposer que la documentation est parfaite : vérifier contre le code, l'IDL locale et le corpus SQLite.
|
||||
|
||||
## 2. État validé avant cette version
|
||||
|
||||
`0.7.54 pump_fun` est clos.
|
||||
|
||||
Replay final rapporté :
|
||||
|
||||
```text
|
||||
1679 replayed
|
||||
0 decode skipped
|
||||
1679 ledger upserts
|
||||
145 unsafe ledger rows
|
||||
89 trades
|
||||
0 liquidity
|
||||
10 lifecycle
|
||||
0 tokenAccount
|
||||
348 candle upserts
|
||||
instructionObservations = 13905
|
||||
resetDeleted = 1112
|
||||
catalog = 52 tokens / 50 pools / 50 pairs
|
||||
```
|
||||
|
||||
Checks de fermeture Pump.fun :
|
||||
|
||||
- upstream fallback Pump.fun : vide ;
|
||||
- decoded Pump.fun sans coverage : vide ;
|
||||
- successful non-materialized sans skip reason : vide ;
|
||||
- failed transaction materialization safety : vide ;
|
||||
- multi-target materialization safety : vide ;
|
||||
- trade candidates Pump.fun sans matérialisation ni skip : vide ;
|
||||
- watchlist globale : plus aucun `pump_fun`.
|
||||
|
||||
Décisions Pump.fun à préserver :
|
||||
|
||||
- `buy`, `sell`, `buy_exact_sol_in` sont matérialisés directement quand les montants sont fiables ;
|
||||
- `buy_v2`, `sell_v2`, `buy_exact_quote_in_v2` ne sont pas matérialisés directement ;
|
||||
- `trade_event` est la source canonique des montants exécutés v2/exact ;
|
||||
- aucun double-count entre instruction trade et event Anchor ;
|
||||
- transactions failed audit-only.
|
||||
|
||||
Ne pas rouvrir `pump_fun`, `pump_swap` ou Raydium sauf bug prouvé par SQL/code.
|
||||
|
||||
## 3. Objectif de `0.7.55 pump_fees`
|
||||
|
||||
Ouvrir et clôturer la surface `pump_fees`.
|
||||
|
||||
Program id cible :
|
||||
|
||||
```text
|
||||
pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
|
||||
```
|
||||
|
||||
IDL locale :
|
||||
|
||||
```text
|
||||
idls/pump_fees.pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ.json
|
||||
```
|
||||
|
||||
exemple de code:
|
||||
https://github.com/sevenlabs-hq/carbon/tree/main/decoders/pump-fees-decoder
|
||||
|
||||
L'IDL locale contient au minimum :
|
||||
|
||||
- `29` instructions ;
|
||||
- `20` events ;
|
||||
- `9` accounts ;
|
||||
- `34` types.
|
||||
|
||||
Règle forte :
|
||||
|
||||
> Tout ce qui peut être décodé doit être décodé. Tout ce qui peut être matérialisé de façon fiable doit être matérialisé. Ce qui ne peut pas être matérialisé doit rester decoded-only/audit-only avec `skip*Reason` explicite.
|
||||
|
||||
Le programme `pump_fees` est a priori un programme de fee/config/accounting. Aucun trade/candle direct n'est attendu sauf preuve transactionnelle très forte d'un swap économique autonome.
|
||||
|
||||
## 4. Backlog initial observé
|
||||
|
||||
La watchlist globale après `0.7.54 pump_fun` montre notamment :
|
||||
|
||||
```text
|
||||
pump_fees get_fees e7257e55cf5b3f34 173 decoded / 171 tx
|
||||
pump_fees create_fee_sharing_config c34e564c6f34fbd5 21 decoded / 21 tx
|
||||
pump_fees update_fee_shares bd0d8863bba4ed23 14 decoded / 14 tx
|
||||
```
|
||||
|
||||
Ces trois entrées doivent être les premières sources de corpus/backfill.
|
||||
|
||||
## 5. Périmètre fonctionnel
|
||||
|
||||
### Inclus
|
||||
|
||||
- décodage de toutes les instructions `pump_fees` connues par l'IDL locale ;
|
||||
- décodage de tous les events Anchor `pump_fees` connus par l'IDL locale ;
|
||||
- décodage Borsh des arguments et payloads quand les layouts sont définis ;
|
||||
- classification coverage par famille : fee, reward, admin/config, buyback, social fee, donation fee, fee sharing, account lifecycle ;
|
||||
- matérialisation vers les tables métier existantes quand les données sont fiables :
|
||||
- `k_sol_fee_events` ;
|
||||
- `k_sol_reward_events` si cashback/social/donation/claim représente une récompense exploitable ;
|
||||
- `k_sol_pool_admin_events` pour config/admin/authority/tier/update ;
|
||||
- `k_sol_pool_lifecycle_events` si création/initialisation de compte/config est pertinente ;
|
||||
- `k_sol_dex_decoded_events_only` pour les vues/calculs/audit-only ;
|
||||
- SQL de validation dédié ;
|
||||
- documentation finale et rapport.
|
||||
|
||||
### Hors périmètre sauf preuve stricte
|
||||
|
||||
- nouveau trade/candle direct ;
|
||||
- réouverture Pump.fun/PumpSwap ;
|
||||
- Raydium/Meteora/Jupiter/dFlow ;
|
||||
- refactor réseau ou UI non nécessaire.
|
||||
|
||||
## 6. Méthode obligatoire : nouvelle base SQLite
|
||||
|
||||
Créer une nouvelle DB dédiée à `0.7.55 pump_fees`.
|
||||
|
||||
Ne pas réutiliser l'ancienne DB de validation Pump.fun sauf pour lire des signatures de départ.
|
||||
|
||||
Après chaque backfill ou patch decoder :
|
||||
|
||||
```text
|
||||
skipDexDecode=no
|
||||
forceDexDecode=yes
|
||||
deferInstructionObservations=yes
|
||||
```
|
||||
|
||||
Puis :
|
||||
|
||||
- refresh catalog ;
|
||||
- replay local ;
|
||||
- relancer SQL de validation ;
|
||||
- noter les compteurs replay.
|
||||
|
||||
## 7. Corpus et backfills
|
||||
|
||||
Construire le corpus local à partir de :
|
||||
|
||||
1. signatures `sample_signature` de la watchlist globale ;
|
||||
2. filtres Solscan.io par program id + instruction/discriminator quand disponibles ;
|
||||
3. Demo3 discovery multi-source/multi-target ;
|
||||
4. batch backfill par groupes de signatures ;
|
||||
5. program/signature backfill ciblé si nécessaire ;
|
||||
6. signatures issues des requêtes SQL `instruction_observations`, fallback upstream et decoded-only résiduels.
|
||||
|
||||
Démarrer par :
|
||||
|
||||
- `get_fees` / `e7257e55cf5b3f34` ;
|
||||
- `create_fee_sharing_config` / `c34e564c6f34fbd5` ;
|
||||
- `update_fee_shares` / `bd0d8863bba4ed23`.
|
||||
|
||||
Ensuite couvrir les autres instructions/events de l'IDL locale, même non observés, par tests synthétiques lorsque le layout est connu.
|
||||
|
||||
## 8. Instructions IDL locales à inventorier
|
||||
|
||||
Inventorier et classifier au minimum :
|
||||
|
||||
- `claim_social_fee_pda` ;
|
||||
- `claim_social_fee_pda_v2` ;
|
||||
- `crank_donation_fee_pda` ;
|
||||
- `create_donation_fee_pda` ;
|
||||
- `create_fee_sharing_config` ;
|
||||
- `create_social_fee_pda` ;
|
||||
- `extend_fee_config` ;
|
||||
- `get_fees` ;
|
||||
- `initialize_buyback` ;
|
||||
- `initialize_fee_config` ;
|
||||
- `initialize_fee_program_global` ;
|
||||
- `reset_fee_sharing_config` ;
|
||||
- `reset_fee_sharing_config_v2` ;
|
||||
- `revoke_fee_sharing_authority` ;
|
||||
- `set_authority` ;
|
||||
- `set_claim_rate_limit` ;
|
||||
- `set_disable_flags` ;
|
||||
- `set_social_claim_authority` ;
|
||||
- `sweep_buyback` ;
|
||||
- `transfer_fee_sharing_authority` ;
|
||||
- `update_admin` ;
|
||||
- `update_buyback_authority` ;
|
||||
- `update_buyback_claim_rate_limit` ;
|
||||
- `update_fee_config` ;
|
||||
- `update_fee_shares` ;
|
||||
- `update_fee_shares_v2` ;
|
||||
- `update_stable_fee_config` ;
|
||||
- `upsert_fee_tiers` ;
|
||||
- `upsert_stable_fee_tiers`.
|
||||
|
||||
Events Anchor à inventorier :
|
||||
|
||||
- `CreateFeeSharingConfigEvent` ;
|
||||
- `DonationFeePdaCranked` ;
|
||||
- `DonationFeePdaCreated` ;
|
||||
- `ExtendFeeConfigEvent` ;
|
||||
- `InitializeFeeConfigEvent` ;
|
||||
- `InitializeFeeProgramGlobalEvent` ;
|
||||
- `ResetFeeSharingConfigEvent` ;
|
||||
- `SetAuthorityEvent` ;
|
||||
- `SetClaimRateLimitEvent` ;
|
||||
- `SetDisableFlagsEvent` ;
|
||||
- `SetSocialClaimAuthorityEvent` ;
|
||||
- `SocialFeePdaClaimed` ;
|
||||
- `SocialFeePdaCreated` ;
|
||||
- `SweepBuybackEvent` ;
|
||||
- `UpdateAdminEvent` ;
|
||||
- `UpdateFeeConfigEvent` ;
|
||||
- `UpdateFeeSharesEvent` ;
|
||||
- `UpdateStableFeeConfigEvent` ;
|
||||
- `UpsertFeeTiersEvent` ;
|
||||
- `UpsertStableFeeTiersEvent`.
|
||||
|
||||
## 9. Contraintes de code Rust
|
||||
|
||||
Respecter strictement les conventions du projet :
|
||||
|
||||
- Rust 2024 ;
|
||||
- pas de `?` ;
|
||||
- pas de `unwrap()` / `expect()` en code applicatif ;
|
||||
- pas de `anyhow` / `thiserror` ;
|
||||
- `match` / `if let Err` explicites ;
|
||||
- async-first ;
|
||||
- `tracing` obligatoire ;
|
||||
- pas de `mod.rs` ;
|
||||
- pas de `pub mod` ; utiliser `mod` + `pub use` ;
|
||||
- imports limités, types appelés de façon qualifiée quand c'est la convention locale ;
|
||||
- tests offline ;
|
||||
- ne pas casser `#![deny(unreachable_pub)]` et `#![warn(missing_docs)]`.
|
||||
|
||||
Si des requêtes DB sont ajoutées ou déplacées, penser aux re-exports :
|
||||
|
||||
- `kb_lib/src/db.rs` ;
|
||||
- `kb_lib/src/lib.rs`.
|
||||
|
||||
## 10. Matérialisation attendue
|
||||
|
||||
Ne pas se contenter de decoded-only si une matérialisation fiable est possible.
|
||||
|
||||
Classification cible :
|
||||
|
||||
- `get_fees` : probablement decoded-only ou fee calculation audit ; ne pas matérialiser comme fee payé sans transfert/montant réalisé ;
|
||||
- fee sharing config : `k_sol_pool_admin_events` ou lifecycle/config si comptes exploitables ;
|
||||
- social/donation fee PDA create/claim/crank : `k_sol_fee_events`, `k_sol_reward_events` ou admin/lifecycle selon le sens exact des flux ;
|
||||
- buyback init/sweep/update : fee/admin/buyback selon comptes et montants ;
|
||||
- authority/config/tier updates : `k_sol_pool_admin_events` ;
|
||||
- Anchor events : matérialiser s'ils portent le montant/acteur/compte fiable ; sinon audit-only avec skip reason ;
|
||||
- transactions failed : decoded-only/audit-only, jamais business matérialisé.
|
||||
|
||||
Aucun `pump_fees` ne doit créer de `k_sol_trade_events` ni de candle sauf preuve irréfutable d'un trade économique autonome et non doublonné.
|
||||
|
||||
## 11. SQL de validation attendu
|
||||
|
||||
Créer :
|
||||
|
||||
```text
|
||||
validation_sql/SQL_VALIDATION_PUMP_FEES_0_7_55.sql
|
||||
```
|
||||
|
||||
Requêtes minimales :
|
||||
|
||||
1. upstream fallback samples `pump_fees` ;
|
||||
2. local instruction observations `pump_fees` ;
|
||||
3. coverage `pump_fees` ;
|
||||
4. decoded events `pump_fees` sans coverage ;
|
||||
5. residual upstream fallback pour entrées couvertes ;
|
||||
6. successful non-materialized sans skip reason ;
|
||||
7. failed transaction materialization safety ;
|
||||
8. multi-target materialization safety ;
|
||||
9. materialization summary par table ;
|
||||
10. instruction observation versus coverage ;
|
||||
11. contrôle anti-trade/candle direct `pump_fees` ;
|
||||
12. global watchlist après replay.
|
||||
|
||||
## 12. Invariants de fermeture
|
||||
|
||||
La tranche `0.7.55` ne doit être considérée close que si :
|
||||
|
||||
- aucun fallback `upstream_git` `pump_fees` ne reste pour les entrées couvertes localement ;
|
||||
- aucun decoded event `pump_fees` local sans coverage ;
|
||||
- aucune transaction failed n'alimente une table métier ;
|
||||
- aucun event multi-target incohérent ;
|
||||
- aucune ligne successful non-materialized sans `skip*Reason` ;
|
||||
- aucun trade/candle `pump_fees` artificiel ;
|
||||
- toutes les instructions/events de l'IDL locale sont soit décodés/matérialisés, soit audit-only, soit non observés mais couverts par tests synthétiques ;
|
||||
- la watchlist globale ne contient plus de `pump_fees` comme backlog dominant.
|
||||
|
||||
## 13. Documentation à mettre à jour en fin de tranche
|
||||
|
||||
Mettre à jour :
|
||||
|
||||
- `CHANGELOG.md` ;
|
||||
- `README.md` ;
|
||||
- `ROADMAP.md` ;
|
||||
- `docs/DEX_DECODER_MATRIX.md` ;
|
||||
- `docs/DEX_EVENT_COVERAGE_MATRIX.md` ;
|
||||
- créer `docs/reports/PUMP_FEES_EVENT_COVERAGE_REPORT.md` ;
|
||||
- créer ou mettre à jour le SQL de validation dédié.
|
||||
|
||||
## 14. Format de livraison attendu
|
||||
|
||||
Fournir un delta zip contenant uniquement les fichiers modifiés/ajoutés.
|
||||
|
||||
Nom recommandé :
|
||||
|
||||
```text
|
||||
khadhroony-bobobot-v0.7.55-pump_fees-delta-N-files.zip
|
||||
```
|
||||
|
||||
Chaque livraison doit inclure :
|
||||
|
||||
- résumé des changements ;
|
||||
- liste exacte des fichiers modifiés ;
|
||||
- commandes à lancer :
|
||||
- `cargo fmt` ;
|
||||
- `cargo test -p kb_lib` ;
|
||||
- `cargo clippy -p kb_lib --all-targets -- -D warnings` ;
|
||||
- replay recommandé ;
|
||||
- SQL à exécuter ;
|
||||
- résultats attendus.
|
||||
|
||||
## 15. Première tâche demandée
|
||||
|
||||
1. Inspecter le code et l'IDL `pump_fees` locale.
|
||||
2. Comparer `upstream_registry_generated.rs`, `idls/pump_fees...json` et le corpus SQL.
|
||||
3. Créer une base SQLite neuve `0.7.55`.
|
||||
4. Backfiller les signatures `get_fees`, `create_fee_sharing_config`, `update_fee_shares`.
|
||||
5. Ajouter le decoder local maximal `pump_fees` : instructions + events + tests synthétiques.
|
||||
6. Ajouter coverage/materialization/validation SQL.
|
||||
7. Rejouer et fermer seulement si tous les invariants sont propres.
|
||||
Reference in New Issue
Block a user