0.7.54
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/DB_EVENT_MODEL_REVIEW.md -->
|
||||
|
||||
# Database Event Model Review — `khadhroony-bobobot` `0.7.47-1FE5`
|
||||
|
||||
## Conclusion courte
|
||||
|
||||
@@ -1,4 +1,22 @@
|
||||
# DEX Decoder Matrix — `khadhroony-bobobot` `0.7.53 final`
|
||||
<!-- file: docs/DEX_DECODER_MATRIX.md -->
|
||||
|
||||
# DEX Decoder Matrix — `khadhroony-bobobot` `0.7.54 pump_fun closed`
|
||||
|
||||
|
||||
## Note `0.7.54 closed` — Pump.fun clos, Pump Fees ensuite
|
||||
|
||||
La tranche `0.7.54` ferme `pump_fun` avant `pump_fees`. La surface Pump.fun principale est couverte depuis le code local, l'IDL Solscan locale `idls/pump_fun.6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P.json`, le registre upstream et le corpus SQLite.
|
||||
|
||||
Décisions structurantes :
|
||||
|
||||
- `pump_fun` est `supported / closed` côté decoder et validation locale ;
|
||||
- toutes les instructions/events connus de l'IDL locale sont inventoriés ;
|
||||
- `buy`, `sell`, `buy_exact_sol_in` peuvent être matérialisés directement avec montants fiables ;
|
||||
- `buy_v2`, `sell_v2`, `buy_exact_quote_in_v2` restent decoded/audit/routing et s'appuient sur `pump_fun.trade_event` pour la matérialisation canonique ;
|
||||
- `pump_fun.trade_event` matérialise les v2/exact quand les montants exécutés et la corrélation instruction sont prouvés ;
|
||||
- les non-trades Pump.fun alimentent uniquement les tables business adaptées ou restent audit-only avec skip reason.
|
||||
|
||||
La prochaine tranche est `0.7.55 pump_fees`.
|
||||
|
||||
## Note `0.7.53 final` — PumpSwap clôturé et sources IDL locales
|
||||
|
||||
@@ -41,7 +59,7 @@ Cette matrice complète `kb_lib/src/dex_support_matrix.rs`. Elle documente **ce
|
||||
| 5 | `raydium_stable_swap` | `supported / 0.7.52 closed` | Decoder legacy 1 octet, surface `00..0d`, swaps matérialisés depuis deltas vault exacts. | Surveiller seulement de nouveaux discriminants ou `swap_event` observé. |
|
||||
| 6 | `raydium_pool_v4` | `to_verify / late-phase conditional audit` | IDL annexe mentionnée par fnzero, non présente dans l'archive locale, pas de program id/rôle confirmé ici. | Ne pas promouvoir tant que program id distinct, rôle exact et corpus exploitable ne sont pas confirmés. |
|
||||
| 7 | `pump_swap` | `supported / 0.7.53 closed` | `buy`, `sell` + `buy_exact_quote_in` matérialisable via `BuyEvent` exact ; instructions non-trade spécialisées : liquidity, fee/creator fee, admin/config, cashback/token incentives, volume accumulator ; events Anchor autonomes audit-only. | Trades/candles uniquement depuis montants exacts ; failed tx decoded-only ; `instruction_bounds_only` reste decoded-only ; tests synthétiques IDL et SQL global ajoutés. |
|
||||
| 8 | `pump_fun` | `partial / 0.7.55 launch_surface` | Création/token launch partiellement décodée ; intégrée au pipeline de listings. | Traiter tous les events Pump.fun disponibles : buy/sell/migrate/create/update ; séparer bonding/launch de DEX effectif ; valider migration vers PumpSwap. |
|
||||
| 8 | `pump_fun` | `supported / 0.7.54 closed` | Surface launch/bonding/migration Pump.fun couverte localement ; trades directs et `trade_event` canonique validés. | Ne rouvrir que pour bug prouvé ou changement externe ; `pump_fees` suit en `0.7.55`. |
|
||||
| 9 | `meteora_dbc` | `partial / 0.7.56 planned` | Swaps/instruction audits observés ; Demo3 donne du corpus. | Couverture complète DBC : launch/bonding curve, swap, migration, config/admin, fees ; matérialiser seulement ce qui est prouvé. |
|
||||
| 10 | `meteora_dlmm` | `supported / 0.7.57 parity` | Couverture avancée validée en `0.7.45` : swaps, liquidity, positions, lifecycle, fees ; non-trade matérialisé. | Résoudre les audits résiduels non mappés ; comparer Carbon/IDL pour events rewards/admin restants ; revalidation base neuve. |
|
||||
| 11 | `meteora_damm_v1` | `supported / 0.7.58 parity` | Couverture `0.7.46` : swap, create_pool, add/remove liquidity, claim_fee, create_lock_escrow, lock_liquidity. | Vérifier les surfaces upstream non observées ; améliorer rattachement pool/pair pour remove_liquidity non matérialisés ; revalidation stricte. |
|
||||
@@ -97,7 +115,7 @@ Un event peut devenir `materialized` uniquement si :
|
||||
|
||||
| Code | Rôle | Surface | Program id status | Observed | Decoded | Materialized | Status | Skip reason |
|
||||
|---|---|---|---|---:|---:|---:|---|---|
|
||||
| `pump_fun` | `launch_surface` | `launch` | `known` | non | oui | oui | `partial` | launch_surface_requires_migration_linking_before_live_trading |
|
||||
| `pump_fun` | `launch_surface` | `launch/bonding` | `known` | oui | oui | oui | `0.7.54_closed` | Decoder maximal IDL/local ; v2/exact matérialisés via `trade_event` canonique ; non-trades selon contexte. |
|
||||
| `pump_swap` | `dex_effective` | `AMM` | `known` | oui | oui | oui | `supported` | |
|
||||
| `raydium_cpmm` | `dex_effective` | `AMM` | `known` | oui | oui | oui | `supported` | |
|
||||
| `raydium_clmm` | `dex_effective` | `CLMM` | `known` | oui | oui | oui | `supported` | |
|
||||
@@ -279,6 +297,13 @@ La tranche a été validée sur base SQLite dédiée : tous les discriminants `0
|
||||
|---|---|---|---|---|
|
||||
| `raydium_stable_swap` | `5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h` | supported / closed | legacy 1 octet | Surface locale `00..0d` couverte ; swaps `swap_base_in/out` matérialisés uniquement depuis deltas vault exacts ; instruction bounds et failed tx restent decoded-only. |
|
||||
|
||||
|
||||
## 0.7.54 — Pump.fun
|
||||
|
||||
| Decoder | Program id | Statut | Source discriminants | Couverture locale initiale | Règles métier |
|
||||
|---|---|---:|---|---|---|
|
||||
| `pump_fun` | `6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P` | supported / 0.7.54 closed | upstream registry + `idls/pump_fun.6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P.json` + corpus SQLite validé | `40` instructions et `23` events Anchor connus couverts ; `buy/sell/buy_exact_sol_in` matérialisés ; `buy_v2/sell_v2/buy_exact_quote_in_v2` audit/routing ; `trade_event` matérialise les montants exécutés v2/exact | `k_sol_trade_events` uniquement avec montants exacts ; `create/migrate` vers `k_sol_launch_events` ; creator fees vers `k_sol_fee_events` ; cashback/incentives vers `k_sol_reward_events` ; admin/config vers `k_sol_pool_admin_events` ; decoded-only/audit-only avec skip reason sinon |
|
||||
|
||||
## 0.7.53 — PumpSwap
|
||||
|
||||
| Decoder | Program id | Statut | Source discriminants | Couverture locale | Règles métier |
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
# DEX Event Coverage Matrix — `khadhroony-bobobot` `0.7.53 final`
|
||||
<!-- file: docs/DEX_EVENT_COVERAGE_MATRIX.md -->
|
||||
|
||||
# DEX Event Coverage Matrix — `khadhroony-bobobot` `0.7.54 pump_fun closed`
|
||||
|
||||
Cette matrice complète `docs/DEX_DECODER_MATRIX.md` avec une lecture par familles d'événements. Elle ne remplace pas la preuve locale : une entrée Git/IDL reste un indice tant qu'elle n'est pas observée dans le corpus local puis validée par replay et SQL.
|
||||
|
||||
@@ -214,6 +216,37 @@ Status: **closed on local corpus**.
|
||||
|
||||
Stable Swap swaps are not materialized from instruction min/max bounds. `swap_base_in/out` require `amountSource=stable_swap_vault_balance_delta`; `stable_swap_instruction_bounds_only` remains decoded-only and, in the final corpus, appears only on failed transactions.
|
||||
|
||||
|
||||
## 0.7.54 — `pump_fun` closed
|
||||
|
||||
Program id unique : `6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P`.
|
||||
|
||||
Source locale prioritaire : `idls/pump_fun.6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P.json`.
|
||||
|
||||
Replay final rapporté : `1679 replayed`, `89 trades`, `10 lifecycle`, `348 candle upserts`, catalogue `52 tokens / 50 pools / 50 pairs`.
|
||||
|
||||
| Entry / groupe | Discriminator | Family | Expected DB target | Local event kind cible | Status final |
|
||||
|---|---:|---|---|---|---|
|
||||
| `create` / `create_v2` / `create_event` | `181ec828051c0777` / `d6904cec5f8b31b4` / `1b72a94ddeeb6376` | `launch` | `k_sol_launch_events` ou decoded-only | `pump_fun.create*` | couvert ; launch matérialisé quand mint/bonding/creator sont fiables |
|
||||
| `migrate` / `migrate_v2` / migration events | `9beae792ec9ea21e` / `bbcb121fceedfe29` / voir IDL | `migration` | `k_sol_launch_events` ou decoded-only | `pump_fun.migrate*` | couvert ; migration matérialisée quand contexte fiable |
|
||||
| `buy` / `sell` | `66063d1201daebea` / `33e685a4017f83ad` | `swap` | `k_sol_trade_events` | `pump_fun.buy` / `pump_fun.sell` | matérialisés directement avec montants fiables : `17` buy, `25` sell |
|
||||
| `buy_exact_sol_in` | `38fc74089edfcd5f` | `swap` | `k_sol_trade_events` | `pump_fun.buy_exact_sol_in` | matérialisé directement ; `15` trades, y compris logs `Program data` tronqués exploitables |
|
||||
| `buy_v2` / `sell_v2` / `buy_exact_quote_in_v2` | `b817ee6167c5d33d` / `5df6823ce7e940b2` / `c2ab1c46684d5b2f` | `swap` | audit/routing + `trade_event` canonique | `pump_fun.*_v2` | decoded/covered, non matérialisés directement ; les montants exécutés sont matérialisés via `pump_fun.trade_event` |
|
||||
| `trade_event` | `bddb7fd34ee661ee` | `swap` | `k_sol_trade_events` | `pump_fun.trade_event` | `72` decoded / `25` trades ; source canonique des v2/exact quand corrélée ; skip explicite si couvert par trade direct |
|
||||
| `collect_creator_fee*` / `distribute_creator_fees*` | voir IDL | `fee` | `k_sol_fee_events` ou decoded-only | `pump_fun.collect_creator_fee*`, `pump_fun.distribute_creator_fees*` | couvert ; matérialisation fee seulement avec montant/acteur fiables |
|
||||
| `claim_cashback*` / `claim_token_incentives` / volume accumulators | voir IDL | `reward` | `k_sol_reward_events` ou decoded-only | `pump_fun.claim_*`, volume accumulator events | couvert ; rewards matérialisées seulement si preuve suffisante |
|
||||
| creator/admin/config group | voir IDL | `admin_config` | `k_sol_pool_admin_events` ou decoded-only | `pump_fun.admin_*`, `pump_fun.set_*`, `pump_fun.toggle_*`, quote/buyback/reserve entries | couvert ; promotion seulement si action/comptes exploitables |
|
||||
|
||||
### Invariants de fermeture `0.7.54`
|
||||
|
||||
- Aucun `pump_fun` local decoded event sans coverage.
|
||||
- Aucun fallback `upstream_git` résiduel pour les entrées Pump.fun couvertes localement.
|
||||
- Aucun business event matérialisé depuis transaction failed.
|
||||
- Aucun non-swap Pump.fun matérialisé en trade/candle.
|
||||
- Aucun double-count entre instruction trade directe et `trade_event` Anchor.
|
||||
- Aucun trade candidate Pump.fun réussi sans matérialisation ni skip reason.
|
||||
- Les entrées IDL-only sont couvertes localement ; les non observées restent `mapped_unverified` ou audit-only, pas des gaps bloquants.
|
||||
|
||||
## 0.7.53 — `pump_swap`
|
||||
|
||||
Program id unique : `pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA`.
|
||||
@@ -247,5 +280,5 @@ Program id unique : `pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA`.
|
||||
- `pump_swap` ne présente plus de decoded event local sans coverage dans le corpus de clôture.
|
||||
- `buy_exact_quote_in` est matérialisé seulement quand le `BuyEvent` Anchor donne les montants exacts ; les bornes d’instruction seules restent non actionnables.
|
||||
- Les events Anchor `*_event` sont décodés en audit-only pour éviter les doublons, sauf exception matérialisable explicitement testée.
|
||||
- Les gaps globaux restants sont classés comme backlog upstream (`pump_fees`, `pump_fun`, `jupiter_swap`, agrégateurs), gaps Meteora reportés, ou observations non attribuées.
|
||||
- Les gaps globaux restants sont classés comme backlog upstream (`pump_fun`, puis `pump_fees`, `jupiter_swap`, agrégateurs), gaps Meteora reportés, ou observations non attribuées.
|
||||
- Les checks Raydium AMM v4 / CLMM / CPMM normalisés sont vides ; aucune correction Raydium n’est incluse dans cette clôture.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/RAYDIUM_LAUNCHPAD_EVENT_COVERAGE_REPORT.md -->
|
||||
|
||||
# Raydium Launchpad event coverage report — `0.7.50`
|
||||
|
||||
## Scope
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/SOLSCAN_ACCOUNT_SOURCE_MATRIX.md -->
|
||||
|
||||
# Solscan account source matrix
|
||||
|
||||
This file records the manual Solscan account inventory added during the `0.7.50` Raydium Launchpad closure. It is a source catalogue, not a support guarantee. Entries with `solscan_program_idl` can be used as IDL candidates; entries with `no_idl` require source/corpus work before decoder promotion.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!-- file: VALIDATION_STATUS_0_7_51.md -->
|
||||
<!-- file: docs/VALIDATION_STATUS_0_7_51.md -->
|
||||
|
||||
# Validation status — `0.7.51 raydium_amm_v4`
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# file: VALIDATION_STATUS_0_7_51_MAX_DECODER.md
|
||||
<!-- file: docs/VALIDATION_STATUS_0_7_51_MAX_DECODER.md -->
|
||||
|
||||
# Validation status — `0.7.51 raydium_amm_v4 max-decoder`
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/VALIDATION_STATUS_0_7_52_FINAL.md -->
|
||||
|
||||
# Validation status — 0.7.52 Raydium Stable Swap final
|
||||
|
||||
## Scope
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/prompts/NEXT_SESSION_PROMPT_0.7.47_1FE5_CONTINUATION_V2.md -->
|
||||
|
||||
# Prompt de reprise — khadhroony-bobobot `0.7.47-1FE5`
|
||||
|
||||
Reprise du projet `khadhroony-bobobot`.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/prompts/NEXT_SESSION_PROMPT_0.7.47_EVENT_COVERAGE_V3.md -->
|
||||
|
||||
# Prompt de reprise — khadhroony-bobobot `0.7.47-1FE5` / Event coverage
|
||||
|
||||
Reprise du projet `khadhroony-bobobot`.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/prompts/NEXT_SESSION_PROMPT_0.7.47_UPSTREAM_REGISTRY.md -->
|
||||
|
||||
# Prompt de reprise — khadhroony-bobobot `0.7.47`
|
||||
|
||||
Reprise du projet `khadhroony-bobobot`.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/prompts/NEXT_SESSION_PROMPT_0.7.49_RAYDIUM_CLMM.md -->
|
||||
|
||||
# Prompt de reprise — khadhroony-bobobot `0.7.49` / Raydium CLMM event coverage
|
||||
|
||||
Reprise du projet `khadhroony-bobobot` après clôture fonctionnelle de `0.7.48 raydium_cpmm`.
|
||||
|
||||
@@ -269,4 +269,4 @@ Commencer par analyser l’archive fournie :
|
||||
- fichiers à modifier ;
|
||||
- hypothèse de classification par entry ;
|
||||
- SQL initial de backfill/validation ;
|
||||
4. proposer puis produire le premier delta minimal.
|
||||
4. proposer puis produire le premier delta archive minimal.
|
||||
|
||||
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.
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/prompts/PROMPT_REPRISE_khadhroony-bobobot_0.7.48-raydium-cpmm.md -->
|
||||
|
||||
# Prompt de reprise — khadhroony-bobobot `0.7.48` / Raydium CPMM event coverage
|
||||
|
||||
Reprise du projet `khadhroony-bobobot` après clôture de `0.7.48-pre`.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/reports/DEX_COVERAGE_GLOBAL_WATCHLIST_0_7_53.md -->
|
||||
|
||||
# DEX coverage global watchlist — `0.7.53`
|
||||
|
||||
## Objet
|
||||
|
||||
127
docs/reports/PUMP_FUN_EVENT_COVERAGE_REPORT.md
Normal file
127
docs/reports/PUMP_FUN_EVENT_COVERAGE_REPORT.md
Normal file
@@ -0,0 +1,127 @@
|
||||
<!-- file: docs/reports/PUMP_FUN_EVENT_COVERAGE_REPORT.md -->
|
||||
|
||||
# Pump.fun event coverage report — clôture `0.7.54`
|
||||
|
||||
## Statut du rapport
|
||||
|
||||
Ce rapport clôture la tranche `0.7.54 pump_fun` côté coverage, décodage local, matérialisation métier prudente et validation SQL.
|
||||
|
||||
Program id canonique :
|
||||
|
||||
```text
|
||||
6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
|
||||
```
|
||||
|
||||
Source IDL locale prioritaire :
|
||||
|
||||
```text
|
||||
idls/pump_fun.6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P.json
|
||||
```
|
||||
|
||||
## Sources utilisées
|
||||
|
||||
- `kb_lib/src/dex/pump_fun.rs` ;
|
||||
- `kb_lib/src/dex_decode.rs` ;
|
||||
- `kb_lib/src/trade_aggregation.rs` ;
|
||||
- `kb_lib/src/trade_amount_resolution.rs` ;
|
||||
- `kb_lib/src/dex_detection_route.rs` ;
|
||||
- `kb_lib/src/dex_event_coverage.rs` ;
|
||||
- `kb_lib/src/upstream_registry_generated.rs` ;
|
||||
- `idls/pump_fun.6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P.json` ;
|
||||
- `validation_sql/SQL_VALIDATION_PUMP_FUN_0_7_54.sql` ;
|
||||
- `validation_sql/SQL_VALIDATION_PUMP_FUN_MATERIALIZATION_0_7_54.sql` ;
|
||||
- corpus SQLite bâti par backfills Demo3/signatures/pools et replay forcé.
|
||||
|
||||
## Couverture finale
|
||||
|
||||
L'IDL locale Pump.fun contient `40` instructions et `23` events Anchor. La tranche a ajouté la couverture locale des instructions/events connues, y compris les instructions IDL-only absentes du registre upstream initial :
|
||||
|
||||
- `add_quote_mint` ;
|
||||
- `buy_exact_quote_in_v2` ;
|
||||
- `buy_v2` ;
|
||||
- `claim_cashback_v2` ;
|
||||
- `collect_creator_fee_v2` ;
|
||||
- `distribute_creator_fees_v2` ;
|
||||
- `migrate_v2` ;
|
||||
- `remove_quote_mint` ;
|
||||
- `sell_v2` ;
|
||||
- `set_virtual_quote_reserves` ;
|
||||
- `update_buyback_config`.
|
||||
|
||||
Les events Anchor sont reconnus depuis `Program data:` et depuis le transport Anchor self-CPI/log `e445a52e51cb9a1d` quand présent.
|
||||
|
||||
## Règles de matérialisation finales
|
||||
|
||||
### Trades
|
||||
|
||||
| Source locale | Matérialisation | Règle |
|
||||
|---|---|---|
|
||||
| `pump_fun.buy` | `k_sol_trade_events` | directe si montants fiables |
|
||||
| `pump_fun.sell` | `k_sol_trade_events` | directe si montants fiables |
|
||||
| `pump_fun.buy_exact_sol_in` | `k_sol_trade_events` | directe ; les logs `Program data` tronqués sont exploités quand les montants exacts sont extractibles |
|
||||
| `pump_fun.buy_v2` | non directe | instruction audit/coverage/routing uniquement |
|
||||
| `pump_fun.sell_v2` | non directe | instruction audit/coverage/routing uniquement |
|
||||
| `pump_fun.buy_exact_quote_in_v2` | non directe | instruction audit/coverage/routing uniquement |
|
||||
| `pump_fun.trade_event` | `k_sol_trade_events` | source canonique des montants exécutés v2/exact quand corrélée sans ambiguïté |
|
||||
|
||||
Les `trade_event` déjà couverts par une instruction directe reçoivent un skip explicite afin d'éviter tout double-count.
|
||||
|
||||
### Non-trades
|
||||
|
||||
Les événements non-trade sont matérialisés uniquement vers leur table métier ciblée quand les comptes, acteurs et montants sont fiables :
|
||||
|
||||
- `k_sol_launch_events` pour create/migrate/graduate ;
|
||||
- `k_sol_fee_events` pour creator fees, fee distribution et minimum fee ;
|
||||
- `k_sol_reward_events` pour cashback, incentives et volume accumulators exploitables ;
|
||||
- `k_sol_pool_admin_events` pour admin/config/creator/global authority ;
|
||||
- `k_sol_pool_lifecycle_events` pour initialization/lifecycle.
|
||||
|
||||
Sinon, ils restent decoded-only/audit-only avec `skip*Reason` explicite. Les transactions failed ne produisent aucune matérialisation métier.
|
||||
|
||||
## 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
|
||||
```
|
||||
|
||||
## Matérialisation finale Pump.fun observée
|
||||
|
||||
```text
|
||||
pump_fun.buy 17 trades
|
||||
pump_fun.sell 25 trades
|
||||
pump_fun.buy_exact_sol_in 15 trades
|
||||
pump_fun.trade_event 25 trades
|
||||
```
|
||||
|
||||
Les variantes v2/exact restent à `0` dans `k_sol_trade_events` par `decoded_event_id` d'instruction, ce qui est attendu : leur matérialisation canonique se fait via `pump_fun.trade_event`.
|
||||
|
||||
## Checks de fermeture SQL
|
||||
|
||||
Résultats finaux rapportés :
|
||||
|
||||
- `Q00` upstream fallback Pump.fun : vide ;
|
||||
- `Q04` decoded Pump.fun sans coverage : vide ;
|
||||
- `Q05` fallback upstream couvert localement : vide ;
|
||||
- `Q06` successful non-materialized sans skip reason : vide ;
|
||||
- `Q07` failed transaction materialization safety : vide ;
|
||||
- `Q08` multi-target materialization safety : vide ;
|
||||
- `Q11` trade candidates sans trade ni skip : vide ;
|
||||
- `Q12` watchlist globale : plus de `pump_fun` ; restent `pump_fees`, `jupiter_swap` et `dflow_aggregator_v4`.
|
||||
|
||||
## Décisions de clôture
|
||||
|
||||
- `pump_fun` est clos côté decoder maximal local et validation corpus.
|
||||
- Les prochaines interventions Pump.fun doivent être des corrections de bugs ou des adaptations à un changement externe prouvé.
|
||||
- La suite logique est `0.7.55 pump_fees` sur nouvelle base SQLite.
|
||||
- La politique reste : tout ce qui peut être décodé doit l'être ; tout ce qui peut être matérialisé de manière fiable doit l'être ; aucun trade/candle artificiel ne doit être créé.
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/reports/PUMP_SWAP_EVENT_COVERAGE_REPORT.md -->
|
||||
|
||||
# PumpSwap event coverage report — `0.7.53`
|
||||
|
||||
## Scope
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# file: docs/reports/RAYDIUM_CLMM_UPSTREAM_COVERAGE_REVIEW_PRE19.md
|
||||
<!-- file: docs/reports/RAYDIUM_CLMM_UPSTREAM_COVERAGE_REVIEW_PRE19.md -->
|
||||
|
||||
# Raydium CLMM upstream coverage review — `0.7.49-pre.19`
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/reports/RAYDIUM_CPMM_CLMM_RECHECK_REPORT_0_7_50_PRE_R2.md -->
|
||||
|
||||
# Raydium CPMM/CLMM re-check report — `0.7.50-pre-r2`
|
||||
|
||||
## Scope
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/reports/RAYDIUM_CPMM_EVENT_COVERAGE_REPORT.md -->
|
||||
|
||||
# Rapport `0.7.48` — Raydium CPMM event coverage
|
||||
|
||||
## Scope
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/reports/RAYDIUM_CPMM_UPSTREAM_COVERAGE_REVIEW_PRE22.md -->
|
||||
|
||||
# Raydium CPMM upstream coverage review — 0.7.49-pre.22
|
||||
|
||||
## Scope
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/reports/RAYDIUM_LAUNCHPAD_EVENT_COVERAGE_REPORT.md -->
|
||||
|
||||
# Raydium Launchpad event coverage report — `0.7.50`
|
||||
|
||||
## Scope
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<!-- file: docs/reports/RAYDIUM_STABLE_SWAP_EVENT_COVERAGE_REPORT.md -->
|
||||
|
||||
# Raydium Stable Swap event coverage report — 0.7.52 final
|
||||
|
||||
## Scope
|
||||
|
||||
Reference in New Issue
Block a user