Files
khadhroony-bobobot/docs/reports/RAYDIUM_AMM_V4_EVENT_COVERAGE_REPORT.md
2026-06-09 10:13:03 +02:00

7.0 KiB

Raydium AMM v4 Event Coverage Report — 0.7.51-final

Scope

Tranche : 0.7.51 raydium_amm_v4.

Program id canonique local :

675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8

Code local canonique :

raydium_amm_v4

Cette tranche reprend AMM v4 legacy après 0.7.50 raydium_launchpad et les rechecks CPMM/CLMM. Les sources Git/IDL/Solscan restent des indices ; les statuts observé/matérialisé proviennent du corpus local et du replay forcé.

Sources inventoriées

Sources utilisées comme indices de coverage :

  • Carbon : decoders/raydium-amm-v4-decoder ;
  • Pinax : src/raydium/amm ;
  • fnzero sol-parser-sdk : idl/raydium_amm_v4.json et idls/raydium_amm_v4.json ;
  • fnzero sol-parser-sdk : idl/raydium_pool_v4.json et idls/raydium_pool_v4.json, audit comparatif uniquement ;
  • Solscan Program IDL et recherche instruction=<discriminator> pour 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8.

Validation Rust et replay final

Validation locale rapportée :

cargo test -p kb_lib -> 405 passed / 0 failed
cargo clippy -p kb_lib --all-targets -- -D warnings -> OK

Replay local final :

195 replayed
0 decode skipped
195 ledger upserts
70 unsafe ledger rows
168 trades
7 liquidity
15 lifecycle
0 tokenAccount
668 candle upserts
instructionObservations = 2599
resetDeleted = 1578
catalog = 61 tokens / 65 pools / 65 pairs

Coverage finale par discriminant

Discriminant Entrée Famille Local event kind Cible DB Observed Materialized Trade
00 initialize pool_create raydium_amm_v4.initialize k_sol_pool_lifecycle_events 4 4 0
01 initialize2 pool_create raydium_amm_v4.initialize2_pool k_sol_pool_lifecycle_events 8 8 0
02 monitor_step order_place raydium_amm_v4.monitor_step k_sol_orderbook_events 20 20 0
03 deposit liquidity_add raydium_amm_v4.deposit k_sol_liquidity_events 10 5 0
04 withdraw liquidity_remove raydium_amm_v4.withdraw k_sol_liquidity_events 3 2 0
05 migrate_to_open_book order_place raydium_amm_v4.migrate_to_open_book k_sol_orderbook_events 6 6 0
06 set_params admin_config raydium_amm_v4.set_params k_sol_pool_admin_events 1 1 0
07 withdraw_pnl fee raydium_amm_v4.withdraw_pnl k_sol_fee_events 1 1 0
08 withdraw_srm fee raydium_amm_v4.withdraw_srm k_sol_fee_events 2 1 0
09 swap_base_in swap raydium_amm_v4.swap_base_in k_sol_trade_events 76 66 66
0a pre_initialize pool_create raydium_amm_v4.pre_initialize k_sol_pool_lifecycle_events 8 7 0
0b swap_base_out swap raydium_amm_v4.swap_base_out k_sol_trade_events 3 1 1
0c simulate_info cpi_transport raydium_amm_v4.simulate_info k_sol_dex_decoded_events_only 6 0 0
0d admin_cancel_orders order_cancel raydium_amm_v4.admin_cancel_orders k_sol_orderbook_events 22 22 0
0e create_config_account admin_config raydium_amm_v4.create_config_account k_sol_pool_admin_events 50 50 0
0f update_config_account admin_config raydium_amm_v4.update_config_account k_sol_pool_admin_events 6 6 0
10 swap_base_in_v2 swap raydium_amm_v4.swap_base_in_v2 k_sol_trade_events 35 35 35
11 swap_base_out_v2 swap raydium_amm_v4.swap_base_out_v2 k_sol_trade_events 7 7 7

Toutes les entrées ont proof_status=upstream_git_local_corpus_materialized, sauf simulate_info, qui reste volontairement upstream_git_local_corpus_observed / decoded-only.

Matérialisation métier finale

Event kind Decoded Trade Liquidity Lifecycle Fee Admin Orderbook
raydium_amm_v4.admin_cancel_orders 22 0 0 0 0 0 22
raydium_amm_v4.create_config_account 50 0 0 0 0 50 0
raydium_amm_v4.deposit 10 0 5 0 0 0 0
raydium_amm_v4.initialize2_pool 8 0 0 8 0 0 0
raydium_amm_v4.migrate_to_open_book 6 0 0 0 0 0 6
raydium_amm_v4.monitor_step 20 0 0 0 0 0 20
raydium_amm_v4.pre_initialize 8 0 0 7 0 0 0
raydium_amm_v4.set_params 1 0 0 0 0 1 0
raydium_amm_v4.simulate_info 6 0 0 0 0 0 0
raydium_amm_v4.swap_base_in 76 66 0 0 0 0 0
raydium_amm_v4.swap_base_in_v2 35 35 0 0 0 0 0
raydium_amm_v4.swap_base_out 3 1 0 0 0 0 0
raydium_amm_v4.swap_base_out_v2 7 7 0 0 0 0 0
raydium_amm_v4.update_config_account 6 0 0 0 0 6 0
raydium_amm_v4.withdraw 3 0 2 0 0 0 0
raydium_amm_v4.withdraw_pnl 1 0 0 0 1 0 0
raydium_amm_v4.withdraw_srm 2 0 0 0 1 0 0

Invariants validés

Les requêtes finales donnent vide pour :

  • raydium_amm_v4.swap legacy ;
  • decoded AMM v4 sans coverage entry ;
  • observations AMM v4 dont length(discriminator_hex) > 2 ;
  • non-swap AMM v4 avec trade ;
  • transaction failed AMM v4 avec trade ;
  • event successful non matérialisé sans raison explicite ;
  • event AMM v4 matérialisé vers plus d'une table métier principale.

Gaps expliqués

Les écarts observed_count > materialized_count sont acceptés uniquement s'ils sont expliqués :

  • swap_base_in / swap_base_out : decoded-only lorsque les deltas vault ou montants exploitables sont absents ;
  • deposit / withdraw : non matérialisés lorsque le pool/pair catalogue ou les deltas nécessaires sont absents ;
  • withdraw_srm : non matérialisé si le contexte fee exploitable est absent ;
  • pre_initialize : 1 transaction failed ; les 7 transactions successful sont matérialisées en lifecycle audit minimal ;
  • simulate_info : decoded-only assumé.

Pour deposit, le corpus final montre 5 événements matérialisés sur le pool catalogué 2dRNngAm729NzLbb1pzgHtfHvPqR4XHFmFyYK78EfEeX / pair FIDA/RAY, et 5 événements decoded-only sur des pools absents du catalogue local.

Décisions spécifiques

  • raydium_amm_v4.swap est définitivement interdit : les swaps doivent rester spécialisés.
  • pre_initialize est conservé pour les scans historiques, matérialisé comme lifecycle audit deprecated/partial, sans pair exploitable.
  • migrate_to_open_book, monitor_step et admin_cancel_orders sont des side effects orderbook AMM v4, pas des trades OpenBook autonomes.
  • simulate_info reste k_sol_dex_decoded_events_only.
  • Les side effects SPL Token / Token-2022 restent transversaux.
  • raydium_pool_v4 n'est pas promu en decoder autonome dans 0.7.51.

Clôture

0.7.51 raydium_amm_v4 est clôturable côté kb_lib sous réserve de conserver les rechecks CPMM/CLMM/Launchpad dans la validation globale de workspace lorsque la base utilisée les contient.