0.7.47-1FE5

This commit is contained in:
2026-05-31 16:43:19 +02:00
parent 7bd6593015
commit 8b09e82b3b
39 changed files with 24260 additions and 332 deletions

View File

@@ -0,0 +1,232 @@
# DEX Event Coverage Matrix — `khadhroony-bobobot` `0.7.47-1FE5`
Cette matrice complète `DEX_DECODER_MATRIX.md`.
La matrice précédente répondait à la question : **quel DEX/version est couvert ?**
Cette matrice répond à la question : **quels events/instructions doivent être décodés, audit-only ou matérialisés ?**
## Principe
Lobjectif nest plus seulement de décoder les swaps. Lobjectif est de décoder le maximum dévénements disponibles dans les sources Git/IDL et dans le corpus local, parce que certains événements non-trade peuvent influencer une décision de trading :
- perte ou ajout de liquidité ;
- burn de tokens ou de LP ;
- mint anormal ;
- lock/unlock de liquidité ;
- close account / fermeture de position ;
- admin/config changes ;
- fees/rewards ;
- migration launch → DEX ;
- market/orderbook activity ;
- vault deposit/withdraw ;
- changement de market cap ou de supply dérivée.
Un event peut donc être important même sil ne produit jamais de `trade_event` ou de candle.
## Règle de couverture
Pour chaque DEX/version, on doit viser trois niveaux :
| Niveau | Description |
|---|---|
| `listed` | Levent/instruction existe dans une source Git/IDL/Carbon/Vybe/autre. |
| `decoded_audit` | Le code local reconnaît levent et le persiste dans `k_sol_dex_decoded_events` avec payload structuré ou audit-only. |
| `materialized` | Levent alimente une table métier spécialisée : trade, liquidity, lifecycle, fee, reward, admin, mint, burn, orderbook, vault, launch/migration, etc. |
Ne pas sauter directement de `listed` à `materialized`.
## Univers minimal devents à suivre
Cette liste doit devenir la grille commune pour toutes les tranches `0.7.48+`.
| Famille | Exemples | Impact possible | Table actuelle / cible |
|---|---|---|---|
| `swap/trade` | swap, buy, sell, route swap, exact in/out | Prix, volume, candles | `k_sol_trade_events`, `k_sol_pair_metrics`, `k_sol_pair_candles` |
| `pool_create` | initialize, create_pool, initialize_market | Découverte pool/pair | `k_sol_pool_lifecycle_events`, `k_sol_pools`, `k_sol_pairs` |
| `liquidity_add` | add_liquidity, deposit liquidity, bootstrap | Profondeur, risque, market cap indirect | `k_sol_liquidity_events` |
| `liquidity_remove` | remove_liquidity, withdraw liquidity | Rug/liquidity drain | `k_sol_liquidity_events` |
| `position_open` | open_position, init_position | CLMM/DLMM state | `k_sol_pool_lifecycle_events` ou future `k_sol_position_events` |
| `position_close` | close_position, close_position_if_empty | Sortie de LP, risque | `k_sol_pool_lifecycle_events` ou future `k_sol_position_events` |
| `fee` | claim_fee, collect_protocol_fee, collect_creator_fee | Rentabilité, activité pool | `k_sol_fee_events` |
| `reward` | claim_reward, fund_reward, update_reward | Incitations, farming | `k_sol_reward_events` |
| `admin/config` | set_config, update_fee, pause, whitelist, authority change | Risque protocole/pool | `k_sol_pool_admin_events` |
| `mint` | token mint, LP mint, position NFT mint | Supply, launch, LP | `k_sol_token_mint_events` + future token activity |
| `burn` | token burn, LP burn, position NFT burn | Supply, LP burn, risque/réassurance | `k_sol_token_burn_events` + future token activity |
| `transfer` | SPL transfer, Token-2022 transfer, routed transfer | Flux wallet/vault, whale movement | future `k_sol_token_transfer_events` |
| `account_create` | ATA create, token account init | Préparation trade/wallet/vault | future `k_sol_token_account_events` |
| `account_close` | close token account, close open orders | Sortie position/wallet cleanup | future `k_sol_token_account_events` ou `k_sol_orderbook_events` |
| `wrap/unwrap` | wrap SOL, unwrap SOL, close WSOL ATA | Routing, PnL, trade prep | future token account/activity |
| `order_place` | place_order, post_only, IOC | Orderbook pressure | future `k_sol_orderbook_events` |
| `order_cancel` | cancel_order, cancel_all, reduce order | Changement intention | future `k_sol_orderbook_events` |
| `order_fill` | FillLog, fill event, trade event | Trade réel orderbook | future `k_sol_orderbook_events`; trade seulement après validation économique |
| `settle_funds` | settle_funds, withdraw funds | Finalisation CLOB | future `k_sol_orderbook_events` |
| `consume_events` | crank/event queue processing | Orderbook fill/out | future `k_sol_orderbook_events` |
| `vault_deposit` | deposit into vault | TVL/risque | future `k_sol_vault_events` |
| `vault_withdraw` | withdraw from vault | TVL drain | future `k_sol_vault_events` |
| `lock` | lock_liquidity, create_lock_escrow | LP lock/risk | `k_sol_pool_lifecycle_events` ou future lock table |
| `unlock` | unlock, release escrow | Risque de retrait LP | future lock/lifecycle |
| `launch` | create bonding curve, launch pool | Origine token | future `k_sol_launch_events` |
| `migration` | migrate to DEX, migrate liquidity | Passage launch → tradable | future `k_sol_launch_events`, pool origins |
| `stake/unstake` | stake LP/token, unstake | Incentives/withdraw risk | future staking/reward events |
| `oracle/price` | oracle update, price account update | Pricing/risk | future oracle/context events |
| `unknown` | unmapped discriminator | Dette de décodage | `k_sol_dex_decoded_events` audit-only |
## Matrice de couverture par DEX/version
Légende :
- `M` = matérialisé déjà ou historiquement validé ;
- `A` = audit-only local ;
- `P` = partiel / doit être complété ;
- `L` = listé upstream, non validé localement ;
- `-` = non applicable connu ;
- `?` = à vérifier.
| DEX/version | swap | pool create | liq add/remove | position | fee/reward | admin/config | mint/burn | transfer/account | orderbook | vault | launch/migration | état immédiat |
|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
| `raydium_cpmm` | M | P | P | - | P | P | ? | ? | - | - | ? | Reprendre en `0.7.48`, comparer tous events Carbon/IDL/fnzero. |
| `raydium_clmm` | M | P | M/P | M/P | P | P | P | ? | - | - | ? | Reprendre en `0.7.49`, compléter positions/rewards/fees/admin. |
| `pump_swap` | M | P | P | - | P | P | ? | P | - | - | P | Reprendre en `0.7.50`, couvrir buy/sell/cashback/fee/volume/admin. |
| `pump_fun` | P | P | - | - | ? | P | P | P | - | - | M/P | Reprendre en `0.7.51`, launch/bonding/migration/buy/sell/create/update. |
| `meteora_dbc` | P | P | P | - | P | P | P | ? | - | P | M/P | Reprendre en `0.7.52`, séparer bonding, swap, migration, config, fees. |
| `meteora_dlmm` | M | M | M | M | M/P | P | ? | ? | - | ? | ? | Reprendre en `0.7.53` pour exhaustive upstream + audits résiduels. |
| `meteora_damm_v1` | M/P | M | M/P | - | M/P | P | ? | ? | - | P | ? | Reprendre en `0.7.54`, vérifier toutes surfaces upstream non observées. |
| `meteora_damm_v2` | P | P | L/P | - | L/P | L/P | ? | ? | - | P | ? | Reprendre en `0.7.55`, decoder tous events Carbon/source. |
| `phoenix_v1` | A | A/P | - | - | A/P | A/P | - | A/P | A | - | - | Continuer audit des events Git, pas de trade/candle. |
| `openbook_v2` | A | A/P | - | - | A/P | A/P | - | A/P | A | - | - | Audit-only avancé, matérialisation orderbook future. |
| `orca_whirlpools` | P | P | L/P | L/P | L/P | L/P | P | ? | - | - | ? | Reprendre en `0.7.58`, IDL complet + corpus dédié. |
| `raydium_launchlab` | - | P | ? | - | ? | P | P | P | - | - | P | Launch/migration après DEX effectifs. |
| `bonkswap` | L | L | L | - | L | L | ? | ? | - | - | L | Vérifier source/corpus. |
| `moonshot` | L/P | P | ? | - | ? | P | P | P | - | - | P | Séparer launch, buy/sell, migration. |
| `heaven` | L/P | L/P | L/P | - | L/P | L/P | P | P | - | ? | P | Vérifier AMM vs launch. |
| `goosefx_v1` | L/P | L/P | L/P | ? | ? | ? | ? | ? | ? | ? | ? | Vybe/Demo3 candidates ; source nécessaire. |
| `obric_v2` | L/P | L/P | ? | ? | ? | ? | ? | ? | ? | ? | ? | Bon candidat après sources. |
| `solfi_v2` | L/P | L/P | ? | ? | ? | ? | ? | ? | ? | ? | ? | Bon candidat après sources. |
## Points critiques manquants dans lancienne matrice
### `burn`
`burn` doit être une famille de première classe, pas seulement une sous-note. Il peut signaler :
- burn de LP tokens ;
- burn de supply token ;
- fermeture ou destruction indirecte de position ;
- réduction du risque de dump si le burn est réel et vérifié ;
- au contraire, faux signal si le burn ne concerne pas la bonne mint ou si le compte propriétaire est ambigu.
Action : ajouter `burn` à toutes les checklists DEX et aux diagnostics de couverture.
### `transfer`
Les transfers ne sont pas des trades par défaut, mais ils sont nécessaires pour :
- repérer vault movements ;
- détecter migration / liquidity routing ;
- comprendre des orderbook settle/fill ;
- analyser whale movement ou sortie de pool.
Action : prévoir une table dédiée plutôt que tout stocker uniquement dans `payload_json`.
### `account close/create`
Les close/create ATA sont utiles pour détecter :
- fin de route WSOL ;
- sortie de position ;
- cleanup après swap ;
- close open-orders account ;
- activité de bots.
Action : famille dédiée `token_account` / `account_lifecycle`.
## Checklist exhaustive par DEX
Pour chaque DEX/version, la tranche doit remplir un tableau événementiel :
| Colonne | Description |
|---|---|
| `source_repo` | Git/IDL/source utilisée. |
| `source_path` | Chemin exact du fichier source. |
| `decoder_code` | Code interne/upstream. |
| `program_id` | Program id ou `to_verify`. |
| `entry_kind` | `instruction`, `event`, `account`, `log`, `program_data`. |
| `entry_name` | Nom source exact. |
| `discriminator_hex` | Discriminator ou tag. |
| `discriminator_len` | Longueur en octets. |
| `event_family` | Famille commune : swap, burn, admin, order_fill, etc. |
| `local_event_kind` | Event local produit. |
| `local_status` | `not_implemented`, `audit_only`, `decoded`, `materialized`. |
| `db_target` | Table cible ou `k_sol_dex_decoded_events_only`. |
| `proof_status` | Statut upstream/local. |
| `observed_count` | Count local après replay. |
| `materialized_count` | Count table métier. |
| `trade_count` | Count trades générés, doit être 0 sauf swap validé. |
| `notes` | Ambiguïtés, layout, corpus, reste à faire. |
## Requêtes SQL génériques de couverture
### Couverture decoded events par programme
```sql
SELECT
protocol_name,
event_kind,
program_id,
json_extract(payload_json, '$.upstreamEntryName') AS upstream_entry_name,
json_extract(payload_json, '$.upstreamDiscriminatorHex') AS upstream_discriminator_hex,
COUNT(*) AS n
FROM k_sol_dex_decoded_events
GROUP BY
protocol_name,
event_kind,
program_id,
upstream_entry_name,
upstream_discriminator_hex
ORDER BY protocol_name, n DESC;
```
### Sécurité trades pour audit-only
```sql
SELECT
de.protocol_name,
de.event_kind,
COUNT(te.id) AS trade_count
FROM k_sol_dex_decoded_events de
LEFT JOIN k_sol_trade_events te
ON te.decoded_event_id = de.id
WHERE de.event_kind LIKE '%_audit'
OR de.protocol_name IN ('upstream_git', 'phoenix_v1', 'openbook_v2')
GROUP BY de.protocol_name, de.event_kind
ORDER BY trade_count DESC;
```
### Vérifier burn/mint présents dans decoded payloads
```sql
SELECT
protocol_name,
event_kind,
json_extract(payload_json, '$.eventLifecycleKind') AS lifecycle,
json_extract(payload_json, '$.eventActionability') AS actionability,
COUNT(*) AS n
FROM k_sol_dex_decoded_events
WHERE event_kind LIKE '%burn%'
OR event_kind LIKE '%mint%'
OR lifecycle IN ('burn', 'mint')
GROUP BY protocol_name, event_kind, lifecycle, actionability
ORDER BY n DESC;
```
## Décision
À partir de maintenant, une tranche DEX nest pas complète si elle ne liste que les swaps. Elle doit explicitement indiquer :
- events source listés ;
- events décodés audit-only ;
- events matérialisés ;
- events volontairement non implémentés ;
- events non observés localement ;
- trous de DB éventuels.