0.7.55
This commit is contained in:
@@ -1,9 +1,17 @@
|
||||
<!-- file: docs/DEX_DECODER_MATRIX.md -->
|
||||
|
||||
# DEX Decoder Matrix — `khadhroony-bobobot` `0.7.54 pump_fun closed`
|
||||
# DEX Decoder Matrix — `khadhroony-bobobot` `0.7.55 pump_fees closed`
|
||||
|
||||
|
||||
## Note `0.7.54 closed` — Pump.fun clos, Pump Fees ensuite
|
||||
## Note `0.7.55 closed` — Pump Fees clôturé, Meteora DBC ensuite
|
||||
|
||||
La tranche `0.7.55` ferme `pump_fees` comme surface fee/config/accounting. Le decoder local couvre les `29` instructions et `20` events Anchor de l'IDL locale, avec tests synthétiques pour les Anchor events IDL non observés. Les transactions failed restent audit-only, `get_fees` reste decoded-only, et aucun trade/candle direct n'est créé.
|
||||
|
||||
Deux discriminators Solscan non présents dans l'IDL locale restent conservés en coverage comme surfaces futures : `revoke_fee_sharing_authority_event` (`7217653c0ebe993e`) et `transfer_fee_sharing_authority_event` (`7c8fc6f54db808ec`).
|
||||
|
||||
La prochaine tranche programmée est `0.7.56 meteora_dbc`.
|
||||
|
||||
## Note `0.7.54 closed` — Pump.fun clôturé
|
||||
|
||||
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.
|
||||
|
||||
@@ -16,7 +24,7 @@ Décisions structurantes :
|
||||
- `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`.
|
||||
`pump_fees` est clôturé en `0.7.55`; la prochaine tranche est `0.7.56 meteora_dbc`.
|
||||
|
||||
## Note `0.7.53 final` — PumpSwap clôturé et sources IDL locales
|
||||
|
||||
@@ -59,18 +67,19 @@ 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` | `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. |
|
||||
| 12 | `meteora_damm_v2` | `partial / 0.7.59 planned` | `swap`, `instruction_audit`, registry/discriminants et corpus Demo3 existent. | Couvrir tous les events Carbon/source : create pool, liquidity, fees, dynamic config, admin ; déterminer actionability des swaps ; matérialiser si montants fiables. |
|
||||
| 13 | `phoenix_v1` | `audit-only / 0.7.60 planned` | Decoder local audit-only ; `log_audit`, order place/cancel, withdraw ; parsing strict `0x0f`; events `Reduce`, `Place`, `TimeInForce` observés ; `trade_count=0`. | Terminer tous les events Git : `Fill`, `FillSummary`, `Fee`, `Evict`, `ExpiredOrder`, etc. ; ajouter counts/flags audit ; seulement ensuite étudier trade materialization. |
|
||||
| 14 | `openbook_v2` | `audit-only / 0.7.61 planned` | Decoder local audit-only ; instructions order/cancel/consume/settle ; `Program data` mappé : `FillLog`, `OpenOrdersPositionLog`, `TotalOrderFillEvent`, `SettleFundsLog`; `trade_count=0`. | Vérifier layouts fill/out et sens maker/taker/base/quote ; ajouter table audit éventuelle ; ne matérialiser trades qu’après validation du sens économique. |
|
||||
| 15 | `orca_whirlpools` | `partial / 0.7.62 planned` | Premier decoder historique présent ; swaps/create_pool partiels. | Comparer Carbon/IDL complet ; couvrir liquidity, positions, fees/rewards, tick arrays ; valider swaps exploitables et non-trades. |
|
||||
| 16 | `legacy_launch_candidates` | `planned launch` | Anciennes entrées launch à réévaluer après `raydium_launchpad`. | Ne pas confondre Launchpad, LaunchLab, CPMM/CLMM/AMM v4 ; rattacher aux pools tradables seulement après corpus. |
|
||||
| 17 | `meteora_vault` | `to_verify` | Présent comme indice upstream / compte associé. | Corpus direct obligatoire ; decoder séparé si events vault réels ; aucune promotion via DAMM indirect. |
|
||||
| 18 | `fluxbeam` | `partial/to_verify` | Decoder initial existant ; Demo3 peut produire des candidats. | Vérifier source/IDL ; compléter swap, pool, liquidity, fees/admin ; matérialisation uniquement après corpus. |
|
||||
| 19 | `dexlab` | `partial/to_verify` | Decoder initial historique ; ancienne entrée beta supprimée. | Reconfirmer program id/source ; décoder events disponibles ; distinguer DexLab natif et liens OpenBook/market. |
|
||||
| 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. |
|
||||
| 9 | `pump_fees` | `supported / 0.7.55 closed` | Surface fee/config/accounting couverte localement : `29` instructions, `20` events Anchor, fee/reward/admin/lifecycle, tests synthétiques Anchor IDL non observés, failed tx audit-only. | Aucun trade/candle direct ; conserver les deux discriminators Solscan hors IDL comme futures surfaces non observées. |
|
||||
| 10 | `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é. |
|
||||
| 11 | `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. |
|
||||
| 12 | `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. |
|
||||
| 13 | `meteora_damm_v2` | `partial / 0.7.59 planned` | `swap`, `instruction_audit`, registry/discriminants et corpus Demo3 existent. | Couvrir tous les events Carbon/source : create pool, liquidity, fees, dynamic config, admin ; déterminer actionability des swaps ; matérialiser si montants fiables. |
|
||||
| 14 | `phoenix_v1` | `audit-only / 0.7.60 planned` | Decoder local audit-only ; `log_audit`, order place/cancel, withdraw ; parsing strict `0x0f`; events `Reduce`, `Place`, `TimeInForce` observés ; `trade_count=0`. | Terminer tous les events Git : `Fill`, `FillSummary`, `Fee`, `Evict`, `ExpiredOrder`, etc. ; ajouter counts/flags audit ; seulement ensuite étudier trade materialization. |
|
||||
| 15 | `openbook_v2` | `audit-only / 0.7.61 planned` | Decoder local audit-only ; instructions order/cancel/consume/settle ; `Program data` mappé : `FillLog`, `OpenOrdersPositionLog`, `TotalOrderFillEvent`, `SettleFundsLog`; `trade_count=0`. | Vérifier layouts fill/out et sens maker/taker/base/quote ; ajouter table audit éventuelle ; ne matérialiser trades qu’après validation du sens économique. |
|
||||
| 16 | `orca_whirlpools` | `partial / 0.7.62 planned` | Premier decoder historique présent ; swaps/create_pool partiels. | Comparer Carbon/IDL complet ; couvrir liquidity, positions, fees/rewards, tick arrays ; valider swaps exploitables et non-trades. |
|
||||
| 17 | `legacy_launch_candidates` | `planned launch` | Anciennes entrées launch à réévaluer après `raydium_launchpad`. | Ne pas confondre Launchpad, LaunchLab, CPMM/CLMM/AMM v4 ; rattacher aux pools tradables seulement après corpus. |
|
||||
| 18 | `meteora_vault` | `to_verify` | Présent comme indice upstream / compte associé. | Corpus direct obligatoire ; decoder séparé si events vault réels ; aucune promotion via DAMM indirect. |
|
||||
| 19 | `fluxbeam` | `partial/to_verify` | Decoder initial existant ; Demo3 peut produire des candidats. | Vérifier source/IDL ; compléter swap, pool, liquidity, fees/admin ; matérialisation uniquement après corpus. |
|
||||
| 20 | `dexlab` | `partial/to_verify` | Decoder initial historique ; ancienne entrée beta supprimée. | Reconfirmer program id/source ; décoder events disponibles ; distinguer DexLab natif et liens OpenBook/market. |
|
||||
| 19 | `lifinity_v2` | `to_verify` | Program id listé par sources externes/Vybe ; pas de corpus concluant. | Trouver IDL/source ; Demo3 par program/market ; audit-only d’abord. |
|
||||
| 20 | `stabble_stable_swap` / `stabble_weighted_swap` | `to_verify` | Program ids/indices via sources externes ; candidats Demo3 observables. | Source/IDL + corpus + decoder audit-only ; déterminer surface AMM et montants exploitables. |
|
||||
| 21 | `bonkswap` | `to_verify` | Program id/Carbon/Vybe selon registre ; swaps candidats possibles. | Vérifier program id, source et corpus ; décoder tous events ; pas de trade sans montants. |
|
||||
@@ -151,7 +160,7 @@ Un event peut devenir `materialized` uniquement si :
|
||||
| `launchbeam` | `launch_surface` | `launch` | `unknown` | non | non | non | `planned` | program_id_to_verify |
|
||||
| `heaven` | `launch_surface` | `launch` | `to_verify` | non | non | non | `planned` | program_id_to_verify |
|
||||
| `gavel` | `to_verify` | `auction` | `to_verify` | non | non | non | `to_verify` | upstream_git_program_id_requires_local_corpus_verification |
|
||||
| `pump_fees` | `to_verify` | `fee_program` | `to_verify` | non | non | non | `to_verify` | upstream_git_program_id_requires_local_corpus_verification |
|
||||
| `pump_fees` | `supported` | `fee_program` | `pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ` | non | non | non | `0.7.55 closed` | fee/reward/admin/lifecycle only ; no trade/candle |
|
||||
| `meteora_pools` | `dex_effective` | `AMM` | `alias_of_meteora_damm_v1` | non | non | non | `to_verify` | program_id_alias_held_by_meteora_damm_v1 |
|
||||
| `dflow_aggregator_v4` | `aggregator_router` | `aggregator` | `to_verify` | non | non | non | `to_verify` | upstream_git_program_id_requires_local_corpus_verification |
|
||||
| `drift_v2` | `to_verify` | `perps` | `to_verify` | non | non | non | `to_verify` | upstream_git_program_id_requires_local_corpus_verification |
|
||||
@@ -310,3 +319,9 @@ La tranche a été validée sur base SQLite dédiée : tous les discriminants `0
|
||||
|---|---|---:|---|---|---|
|
||||
| `pump_swap` | `pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA` | supported / 0.7.53 closed | upstream registry + `idls/pump_swap.pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA.json` + corpus Demo3/replay | instructions : `buy`, `sell`, `buy_exact_quote_in`, `deposit`, `withdraw`, `create_pool`, `create_config`, `update_fee_config`, creator-fee, cashback, token incentives, volume accumulator, admin/config ; events Anchor autonomes audit-only | `buy_exact_quote_in` trade uniquement avec `pump_swap_anchor_buy_event`; aucun non-swap en trade/candle ; failed tx decoded-only ; `buy_event`/`sell_event` Program-data audit-only ; `transfer_creator_fees_to_pump_v2` et `update_buyback_config` confirmés par Solscan IDL ; `set_reserved_fee_recipient` conservé sur preuve log locale |
|
||||
|
||||
|
||||
## 0.7.55 — Pump Fees
|
||||
|
||||
| Decoder | Program id | Statut | Source discriminants | Couverture locale | Règles métier |
|
||||
|---|---|---:|---|---|---|
|
||||
| `pump_fees` | `pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ` | supported / `0.7.55 closed` | `idls/pump_fees.pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ.json` + Carbon partiel + Solscan discriminators | `29` instructions et `20` events Anchor couverts ; tests synthétiques pour les Anchor events IDL non observés ; replay final propre ; watchlist `pump_fees` vide | Aucun trade/candle direct ; `get_fees` decoded-only ; social claim vers reward ; donation/buyback vers fee ; config/authority/tier/admin vers admin/lifecycle ; failed tx audit-only ; deux events Solscan hors IDL conservés non observés. |
|
||||
|
||||
@@ -280,5 +280,32 @@ 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_fun`, puis `pump_fees`, `jupiter_swap`, agrégateurs), gaps Meteora reportés, ou observations non attribuées.
|
||||
- Les gaps globaux Pump.fun/PumpSwap/Pump Fees sont fermés ; la watchlist résiduelle courante ne contient plus `pump_fees` et garde seulement `jupiter_swap.route_v2` comme observation ponctuelle.
|
||||
- Les checks Raydium AMM v4 / CLMM / CPMM normalisés sont vides ; aucune correction Raydium n’est incluse dans cette clôture.
|
||||
|
||||
## 0.7.55 — Pump Fees
|
||||
|
||||
| Entry group | Discriminants | Famille | Target attendu | Local event kind | Notes |
|
||||
|---|---:|---|---|---|---|
|
||||
| `get_fees` | `e7257e55cf5b3f34` | audit | decoded-only | `pump_fees.get_fees` | Calcul/preview de fees ; ne pas matérialiser comme fee payé sans transfert réalisé. |
|
||||
| social fee claim/create | IDL locale | reward / lifecycle | `k_sol_reward_events` ou `k_sol_pool_lifecycle_events` | `pump_fees.claim_social_fee_pda*`, `pump_fees.social_fee_pda_*` | Claim matérialisable seulement avec montant/acteur/mint fiables et transaction OK. |
|
||||
| donation fee PDA | IDL locale | fee / lifecycle | `k_sol_fee_events` ou `k_sol_pool_lifecycle_events` | `pump_fees.*donation_fee_pda*` | Crank avec montant fiable vers fee ; création de PDA vers lifecycle. |
|
||||
| buyback | IDL locale | fee / admin/lifecycle | `k_sol_fee_events`, `k_sol_pool_admin_events` ou lifecycle | `pump_fees.*buyback*` | Sweep matérialisable comme fee si montant fiable ; init/update comme lifecycle/admin. |
|
||||
| fee sharing/config/authority/tier | IDL locale + Carbon partiel | admin_config / lifecycle | `k_sol_pool_admin_events` ou `k_sol_pool_lifecycle_events` | `pump_fees.*config*`, `pump_fees.*authority*`, `pump_fees.*tier*`, `pump_fees.update_fee_shares*` | Aucun trade/candle ; decoded-only/audit-only si données métier insuffisantes. |
|
||||
|
||||
## 0.7.55 Pump Fees — clôture
|
||||
|
||||
Programme : `pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ`. Source locale prioritaire : `idls/pump_fees.pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ.json`.
|
||||
|
||||
| Famille | Entrées | Target | Statut | Notes |
|
||||
|---|---|---|---|---|
|
||||
| fee calculation | `get_fees` / `e7257e55cf5b3f34` | `k_sol_dex_decoded_events_only` | decoded-only validé | Calcul/preview ; ne représente pas une fee payée. |
|
||||
| reward/social fee | `claim_social_fee_pda`, `claim_social_fee_pda_v2`, `social_fee_pda_claimed` | `k_sol_reward_events` | matérialisé si tx OK | Écarts expliqués par failed tx. |
|
||||
| donation fee | `create_donation_fee_pda`, `crank_donation_fee_pda`, events associés | lifecycle / `k_sol_fee_events` | matérialisé si tx OK | Création PDA vers lifecycle ; crank vers fee. |
|
||||
| buyback | `initialize_buyback`, `sweep_buyback`, authority/rate-limit | lifecycle / fee / admin | matérialisé si tx OK | `sweep_buyback` et `sweep_buyback_event` alimentent fee. |
|
||||
| fee sharing/config/authority/tier | config/reset/transfer/revoke/update/upsert | `k_sol_pool_admin_events` ou lifecycle | matérialisé si tx OK | Aucun trade/candle ; failed tx audit-only. |
|
||||
| Anchor IDL non observés | `SetAuthorityEvent`, `SetClaimRateLimitEvent`, `SetDisableFlagsEvent`, `SetSocialClaimAuthorityEvent` | admin/audit | tests synthétiques | Aucun corpus Solscan au moment de clôture ; decoder conservé pour transactions futures. |
|
||||
| Solscan hors IDL locale | `revoke_fee_sharing_authority_event`, `transfer_fee_sharing_authority_event` | admin | mapped_unverified | Discriminators trouvés via Solscan ; conservés comme surfaces futures. |
|
||||
|
||||
Invariants propres : fallback `pump_fees` vide, decoded sans coverage vide, successful non-materialized sans skip/policy vide, failed tx matérialisée vide, multi-target vide, anti-trade/candle direct vide, watchlist globale sans `pump_fees`.
|
||||
|
||||
|
||||
216
docs/prompts/PROMPT_0_7_56_METEORA_DBC.md
Normal file
216
docs/prompts/PROMPT_0_7_56_METEORA_DBC.md
Normal file
@@ -0,0 +1,216 @@
|
||||
# Prompt de reprise — khadhroony-bobobot 0.7.56 — meteora_dbc
|
||||
|
||||
Tu reprends le workspace Rust/Tauri `khadhroony-bobobot` après clôture technique de `0.7.55 pump_fees`.
|
||||
|
||||
## 1. Archive et fichiers à fournir
|
||||
|
||||
Utiliser l'archive la plus récente après clôture `0.7.55 pump_fees`.
|
||||
|
||||
À 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_FEES_EVENT_COVERAGE_REPORT.md` ;
|
||||
- `validation_sql/SQL_VALIDATION_PUMP_FEES_0_7_55.sql` ;
|
||||
- `idls/**`, en particulier `idls/meteora_dbc.dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN.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, les sources Git et le corpus SQLite.
|
||||
|
||||
## 2. État validé avant cette version
|
||||
|
||||
`0.7.55 pump_fees` est clos.
|
||||
|
||||
Replay final rapporté :
|
||||
|
||||
```text
|
||||
127 replayed
|
||||
0 decode skipped
|
||||
150 ledger upserts
|
||||
125 unsafe ledger rows
|
||||
4 trades
|
||||
0 liquidity
|
||||
115 lifecycle
|
||||
0 tokenAccount
|
||||
16 candle upserts
|
||||
instructionObservations = 2234
|
||||
resetDeleted = 1644
|
||||
catalog = 11 tokens / 10 pools / 10 pairs
|
||||
```
|
||||
|
||||
Validation build :
|
||||
|
||||
```text
|
||||
cargo test -p kb_lib -> 431 passed / 0 failed
|
||||
cargo clippy -p kb_lib --all-targets -- -D warnings -> OK
|
||||
```
|
||||
|
||||
Checks de fermeture Pump Fees :
|
||||
|
||||
- fallback `upstream_git` `pump_fees` : vide ;
|
||||
- `instruction_name` vide : vide ;
|
||||
- `event_family = unknown` ou vide pour instruction/event : vide ;
|
||||
- decoded `pump_fees` sans coverage : vide ;
|
||||
- successful non-materialized sans skip/policy : vide ;
|
||||
- failed transaction materialization safety : vide ;
|
||||
- multi-target materialization safety : vide ;
|
||||
- anti-trade/candle direct `pump_fees` : vide ;
|
||||
- watchlist globale : plus aucun `pump_fees`, seulement `jupiter_swap.route_v2` ponctuel.
|
||||
|
||||
Décisions Pump Fees à préserver :
|
||||
|
||||
- `get_fees` est decoded-only ;
|
||||
- claims social fee vers `k_sol_reward_events` seulement si succès et montant fiable ;
|
||||
- donation/buyback vers `k_sol_fee_events` seulement si succès et montant fiable ;
|
||||
- config/authority/tier/update vers `k_sol_pool_admin_events` ;
|
||||
- create/init/extend vers `k_sol_pool_lifecycle_events` ;
|
||||
- aucun trade/candle direct ;
|
||||
- failed tx audit-only ;
|
||||
- les discriminators Solscan `revoke_fee_sharing_authority_event` et `transfer_fee_sharing_authority_event` restent conservés comme futures surfaces non observées.
|
||||
|
||||
Ne pas rouvrir `pump_fees`, `pump_fun`, `pump_swap` ou Raydium sauf bug prouvé par SQL/code.
|
||||
|
||||
## 3. Objectif de `0.7.56 meteora_dbc`
|
||||
|
||||
Ouvrir et clôturer la surface `meteora_dbc`.
|
||||
|
||||
Program id cible :
|
||||
|
||||
```text
|
||||
dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN
|
||||
```
|
||||
|
||||
IDL locale prioritaire :
|
||||
|
||||
```text
|
||||
idls/meteora_dbc.dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN.json
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
La surface DBC doit couvrir launch/bonding curve, pool/config lifecycle, swaps exploitables, migration, fees/admin/config, et events Anchor associés.
|
||||
|
||||
## 4. Méthode obligatoire : nouvelle base SQLite
|
||||
|
||||
Créer une nouvelle DB dédiée à `0.7.56 meteora_dbc`.
|
||||
|
||||
Ne pas réutiliser l'ancienne DB de validation Pump Fees 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.
|
||||
|
||||
## 5. Corpus et backfills
|
||||
|
||||
Construire le corpus local à partir de :
|
||||
|
||||
1. signatures `sample_signature` de la watchlist globale et des coverage gaps ;
|
||||
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.
|
||||
|
||||
Inclure explicitement les transactions failed dans le corpus d'audit, mais ne jamais les matérialiser métier.
|
||||
|
||||
## 6. Sources à comparer
|
||||
|
||||
Comparer au minimum :
|
||||
|
||||
- `idls/meteora_dbc.dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN.json` ;
|
||||
- Carbon `meteora-dbc-decoder` ;
|
||||
- Pinax/Substreams Solana IDLs si disponibles ;
|
||||
- Solana Streamer / sol-parser-sdk si des layouts Meteora DBC y apparaissent ;
|
||||
- code local existant `kb_lib/src/dex/*meteora*` ;
|
||||
- `upstream_registry_generated.rs` ;
|
||||
- corpus SQLite neuf.
|
||||
|
||||
## 7. Matérialisation attendue
|
||||
|
||||
Ne pas se contenter de decoded-only si une matérialisation fiable est possible.
|
||||
|
||||
Cibles probables :
|
||||
|
||||
- swaps exploitables -> `k_sol_trade_events` + candles si montants, sens, mint base/quote et pool/pair sont fiables ;
|
||||
- pool/config/create -> `k_sol_pool_lifecycle_events` et catalog/pool/pair si comptes fiables ;
|
||||
- liquidity/deposit/withdraw -> `k_sol_liquidity_events` si montants et pool fiables ;
|
||||
- migration -> lifecycle/admin selon sémantique exacte ;
|
||||
- fees/creator fees/admin/config -> `k_sol_fee_events` ou `k_sol_pool_admin_events` ;
|
||||
- events sans contexte suffisant -> decoded-only/audit-only avec skip reason.
|
||||
|
||||
Transactions failed : decoded-only/audit-only, jamais business matérialisées.
|
||||
|
||||
## 8. SQL de validation attendu
|
||||
|
||||
Créer :
|
||||
|
||||
```text
|
||||
validation_sql/SQL_VALIDATION_METEORA_DBC_0_7_56.sql
|
||||
```
|
||||
|
||||
Requêtes minimales :
|
||||
|
||||
1. upstream fallback samples `meteora_dbc` ;
|
||||
2. local instruction observations `meteora_dbc` ;
|
||||
3. coverage `meteora_dbc` ;
|
||||
4. decoded events `meteora_dbc` 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, avec colonnes successful/failed ;
|
||||
10. instruction observation versus coverage ;
|
||||
11. anti-faux trade/candle pour events non swap ;
|
||||
12. global watchlist après replay.
|
||||
|
||||
## 9. Invariants de fermeture
|
||||
|
||||
La tranche `0.7.56` ne doit être considérée close que si :
|
||||
|
||||
- aucun fallback `upstream_git` `meteora_dbc` ne reste pour les entrées couvertes localement ;
|
||||
- aucun decoded event `meteora_dbc` 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 faux trade/candle sur event non swap ;
|
||||
- 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 `meteora_dbc` comme backlog dominant.
|
||||
|
||||
## 10. 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/METEORA_DBC_EVENT_COVERAGE_REPORT.md` ;
|
||||
- créer `validation_sql/SQL_VALIDATION_METEORA_DBC_0_7_56.sql`.
|
||||
|
||||
## 11. Format de livraison attendu
|
||||
|
||||
Fournir un delta zip contenant uniquement les fichiers modifiés/ajoutés.
|
||||
|
||||
Nom recommandé :
|
||||
|
||||
```text
|
||||
khadhroony-bobobot-v0.7.56-meteora_dbc-delta-N-files.zip
|
||||
```
|
||||
|
||||
Inclure dans chaque livraison : résumé des changements, liste exacte des fichiers modifiés, commandes `cargo fmt`, `cargo test -p kb_lib`, `cargo clippy -p kb_lib --all-targets -- -D warnings`, replay recommandé, SQL à exécuter et résultats attendus.
|
||||
134
docs/reports/PUMP_FEES_EVENT_COVERAGE_REPORT.md
Normal file
134
docs/reports/PUMP_FEES_EVENT_COVERAGE_REPORT.md
Normal file
@@ -0,0 +1,134 @@
|
||||
<!-- file: docs/reports/PUMP_FEES_EVENT_COVERAGE_REPORT.md -->
|
||||
|
||||
# Pump Fees event coverage report — 0.7.55 final
|
||||
|
||||
## Portée
|
||||
|
||||
Programme cible : `pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ`.
|
||||
|
||||
Source locale prioritaire : `idls/pump_fees.pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ.json`.
|
||||
|
||||
L'IDL locale couvre `29` instructions, `20` events Anchor, `9` accounts et `34` types. La tranche ajoute un decoder local maximal `pump_fees` depuis l'IDL locale, le registre Carbon partiel et les discriminators observés via Solscan/corpus.
|
||||
|
||||
## Décisions métier
|
||||
|
||||
- `pump_fees` est traité comme programme fee/config/accounting.
|
||||
- Aucun `k_sol_trade_events` ni candle ne doit être créé pour `pump_fees` sans preuve transactionnelle stricte d'un swap autonome.
|
||||
- `get_fees` reste decoded-only : il décrit un calcul/preview de fees, pas un paiement réalisé.
|
||||
- Les claims social fee alimentent `k_sol_reward_events` seulement si transaction OK et montant/acteur/mint exploitables.
|
||||
- Les flux donation/buyback alimentent `k_sol_fee_events` seulement si transaction OK et montant fiable.
|
||||
- Les créations/configurations/autorités/tiers alimentent `k_sol_pool_lifecycle_events` ou `k_sol_pool_admin_events` selon classification.
|
||||
- Les transactions failed restent decoded-only/audit-only.
|
||||
|
||||
## Résultat build/test
|
||||
|
||||
```text
|
||||
cargo test -p kb_lib -> 431 passed / 0 failed
|
||||
cargo clippy -p kb_lib --all-targets -- -D warnings -> OK
|
||||
```
|
||||
|
||||
## Replay final rapporté
|
||||
|
||||
```text
|
||||
127 replayed
|
||||
0 decode skipped
|
||||
150 ledger upserts
|
||||
125 unsafe ledger rows
|
||||
4 trades
|
||||
0 liquidity
|
||||
115 lifecycle
|
||||
0 tokenAccount
|
||||
16 candle upserts
|
||||
instructionObservations = 2234
|
||||
resetDeleted = 1644
|
||||
catalog = 11 tokens / 10 pools / 10 pairs
|
||||
```
|
||||
|
||||
Les `4 trades` et `16 candle upserts` du replay proviennent d'autres surfaces du corpus local ; le contrôle anti-trade `pump_fees` est vide.
|
||||
|
||||
## Coverage local
|
||||
|
||||
### Instructions observées et couvertes
|
||||
|
||||
| Instruction | Discriminator | Observation principale | Matérialisation |
|
||||
|---|---:|---:|---|
|
||||
| `sweep_buyback` | `8a21cc26cfa19fe2` | `96` | `k_sol_fee_events` |
|
||||
| `create_fee_sharing_config` | `c34e564c6f34fbd5` | `42` observations / `36` decoded | `k_sol_pool_lifecycle_events` |
|
||||
| `update_fee_shares` | `bd0d8863bba4ed23` | `26` observations / `16` decoded | `k_sol_pool_admin_events` |
|
||||
| `claim_social_fee_pda_v2` | `114df0863abc3595` | `25` | `k_sol_reward_events` |
|
||||
| `update_fee_shares_v2` | `6ffb31064e4e6a12` | `19` | `k_sol_pool_admin_events` |
|
||||
| `claim_social_fee_pda` | `e115fb85a11ec7e2` | `15` observations / `10` decoded | `k_sol_reward_events` |
|
||||
| `crank_donation_fee_pda` | `dc0abda7a9111945` | `14` | `k_sol_fee_events` |
|
||||
| `get_fees` | `e7257e55cf5b3f34` | `13` observations / `5` decoded | decoded-only |
|
||||
| `transfer_fee_sharing_authority` | `ca0a4bc8a422d260` | `12` | `k_sol_pool_admin_events` |
|
||||
| `initialize_fee_program_global` | `23d78254e9387ca7` | `1` | `k_sol_pool_lifecycle_events` |
|
||||
|
||||
Le discriminator `e445a52e51cb9a1d` est classé comme `pump_fees.anchor_self_cpi_log` transport Anchor self-CPI : `271` observations / `119` tx.
|
||||
|
||||
### Instructions IDL non observées mais programmées
|
||||
|
||||
Ces entrées n'ont pas de signature Solscan/corpus au moment de la clôture, mais restent décodables si des transactions futures apparaissent :
|
||||
|
||||
| Instruction | Discriminator | Classification | Target prévu |
|
||||
|---|---:|---|---|
|
||||
| `reset_fee_sharing_config_v2` | `a9f511d15e5bf880` | admin_config | `k_sol_pool_admin_events` |
|
||||
| `set_authority` | `85fa25156ea31a79` | admin_config | `k_sol_pool_admin_events` |
|
||||
| `set_claim_rate_limit` | `b9d39faed4315804` | audit | decoded-only |
|
||||
| `set_disable_flags` | `c2d9702372de33be` | admin_config | `k_sol_pool_admin_events` |
|
||||
| `set_social_claim_authority` | `9336b89a88edb999` | admin_config | `k_sol_pool_admin_events` |
|
||||
|
||||
### Anchor events IDL non observés mais testés synthétiquement
|
||||
|
||||
| Event Anchor | Discriminator | Statut |
|
||||
|---|---:|---|
|
||||
| `SetAuthorityEvent` | `12af8442d0c957f2` | decoder + test synthétique |
|
||||
| `SetClaimRateLimitEvent` | `0d8f8febb5133328` | decoder + test synthétique |
|
||||
| `SetDisableFlagsEvent` | `0508b3413137917e` | decoder + test synthétique |
|
||||
| `SetSocialClaimAuthorityEvent` | `3c767f84ef34fe0e` | decoder + test synthétique |
|
||||
|
||||
### Discriminators Solscan hors IDL locale
|
||||
|
||||
Ces discriminators ont été trouvés par filtres Solscan, mais ne sont pas observés dans le corpus local final et ne sont pas dans l'IDL locale fournie. Ils restent conservés en coverage comme surfaces futures :
|
||||
|
||||
| Event | Discriminator | Statut |
|
||||
|---|---:|---|
|
||||
| `revoke_fee_sharing_authority_event` | `7217653c0ebe993e` | `upstream_git_mapped_unverified` |
|
||||
| `transfer_fee_sharing_authority_event` | `7c8fc6f54db808ec` | `upstream_git_mapped_unverified` |
|
||||
|
||||
## Écarts observed/materialized
|
||||
|
||||
Les écarts `observed_count > materialized_count` sont expliqués par des transactions failed ou par une politique decoded-only. La requête `09b` documente notamment :
|
||||
|
||||
| Entrée | Observed | Materialized | Explication |
|
||||
|---|---:|---:|---|
|
||||
| `get_fees` | `5` | `0` | decoded-only volontaire |
|
||||
| `claim_social_fee_pda_v2` | `25` | `21` | `4` failed decoded |
|
||||
| `create_fee_sharing_config` | `36` | `33` | `3` failed decoded |
|
||||
| `initialize_fee_config` | `5` | `2` | `3` failed decoded |
|
||||
| `social_fee_pda_claimed` | `17` | `15` | `2` failed decoded |
|
||||
| `crank_donation_fee_pda` | `14` | `12` | `2` failed decoded |
|
||||
| `update_fee_shares_v2` | `19` | `17` | `2` failed decoded |
|
||||
| `revoke_fee_sharing_authority` | `6` | `5` | `1` failed decoded |
|
||||
|
||||
La requête `06` confirme qu'il n'existe aucun successful non-materialized sans skip/policy explicite.
|
||||
|
||||
## Checks de fermeture
|
||||
|
||||
SQL dédié : `validation_sql/SQL_VALIDATION_PUMP_FEES_0_7_55.sql`.
|
||||
|
||||
Résultats de fermeture rapportés :
|
||||
|
||||
- fallback `upstream_git` `pump_fees` : vide ;
|
||||
- `instruction_name` `pump_fees` vide : vide ;
|
||||
- `event_family = unknown` ou vide pour instruction/event : vide ;
|
||||
- decoded `pump_fees` sans coverage : vide ;
|
||||
- fallback résiduel pour entrées couvertes localement : vide ;
|
||||
- successful non-materialized sans skip/policy : vide ;
|
||||
- failed transaction avec business materialization : vide ;
|
||||
- multi-target materialization : vide ;
|
||||
- anti-trade/candle direct `pump_fees` : vide ;
|
||||
- watchlist globale : plus aucun `pump_fees`, reste seulement `jupiter_swap.route_v2` comme backlog ponctuel.
|
||||
|
||||
## Statut final
|
||||
|
||||
`0.7.55 pump_fees` est clôturé techniquement. Ne pas rouvrir `pump_fees`, `pump_fun`, `pump_swap` ou Raydium sans bug prouvé par SQL/code ou apparition d'un nouveau discriminant/corpus externe exploitable.
|
||||
Reference in New Issue
Block a user