250 lines
7.4 KiB
Markdown
250 lines
7.4 KiB
Markdown
# Prompt de reprise — khadhroony-bobobot `0.7.47`
|
||
|
||
Reprise du projet `khadhroony-bobobot`.
|
||
|
||
## Contexte
|
||
|
||
Le workspace contient principalement :
|
||
|
||
- `kb_lib` : logique métier Solana/DEX, clients HTTP/WS, décodage, détection, SQLite, replay, validation, diagnostics, metadata, candles, signaux ;
|
||
- `kb_demo_app` : application Tauri V2 de démo/inspection. Elle doit rester une façade UI et ne pas contenir de logique métier DEX profonde.
|
||
|
||
La version `0.7.46` est clôturée sur `meteora_damm_v1`.
|
||
|
||
## État validé à la fin de `0.7.46`
|
||
|
||
- `cargo test -p kb_lib` : vert.
|
||
- `cargo clippy -p kb_lib --all-targets -- -D warnings` : vert.
|
||
- Demo2 et Demo3 fonctionnent bien pour backfill et discovery.
|
||
- Demo3 supporte :
|
||
- multi-target ;
|
||
- multi-source ;
|
||
- pagination `before` / `until` ;
|
||
- `max_pages` ;
|
||
- `newest_first` / `oldest_first`.
|
||
- Le replay local supporte le ledger de décodage/replay et les options `skipDexDecode` / `forceDexDecode`.
|
||
- `meteora_damm_v1` couvre les surfaces observées localement :
|
||
- `swap` ;
|
||
- `claim_fee` ;
|
||
- `create_lock_escrow` ;
|
||
- `lock_liquidity` ;
|
||
- `remove_liquidity` ;
|
||
- `add_liquidity` ;
|
||
- `create_pool`.
|
||
- Les statuts/payloads ne doivent plus utiliser une terminologie spécifique à un dépôt externe particulier.
|
||
- Les statuts génériques attendus sont :
|
||
- `upstream_git_unverified` ;
|
||
- `upstream_git_mapped_unverified` ;
|
||
- `upstream_git_local_corpus_observed` ;
|
||
- `upstream_git_local_corpus_materialized` ;
|
||
- `upstream_git_layout_unverified` si le layout est connu depuis une source Git mais pas encore validé localement.
|
||
|
||
## Décision base de données pour `0.7.47`
|
||
|
||
La version `0.7.46` est considérée finalisée. Ne pas demander ni proposer de replay forcé de l’ancienne base `0.7.46` pour clôturer cette version, sauf demande explicite.
|
||
|
||
Pour `0.7.47`, le développement et la validation doivent se faire de préférence sur une **nouvelle base SQLite dédiée**. Cette base servira à constituer un corpus propre avec Demo3 et Demo2 sur plusieurs paires, pools ou programmes de DEX différents.
|
||
|
||
Règles pratiques :
|
||
|
||
- l’ancienne base `0.7.46` peut servir de référence historique ou de comparaison, mais elle ne doit pas être migrée ou redécodée automatiquement ;
|
||
- si une validation DB est nécessaire en `0.7.47`, elle doit cibler la nouvelle base de travail `0.7.47` ;
|
||
- les backfills `0.7.47` doivent être construits à partir de Demo3 discovery puis Demo2 signature/pool backfill ;
|
||
- le replay local reste utile, mais seulement après constitution du corpus `0.7.47`, pas comme étape de finalisation de `0.7.46` ;
|
||
- les entrées du registre upstream Git restent des indices tant qu’elles ne sont pas observées sur cette nouvelle base ou sur un corpus explicitement indiqué.
|
||
|
||
## Objectif de `0.7.47`
|
||
|
||
`0.7.47` est dédiée à :
|
||
|
||
```text
|
||
Upstream Git Registry / DEX discovery preparation
|
||
```
|
||
|
||
L’objectif n’est pas de valider directement un DEX unique. L’objectif est de créer un registre générique permettant d’indexer les `program_id`, discriminants d’instructions, discriminants d’events, noms d’instructions, familles de programmes et types de surfaces issus de dépôts Git externes de decoders Solana.
|
||
|
||
Ces entrées sont des **indices de découverte**, pas des preuves métier. Elles doivent rester non vérifiées tant qu’elles ne sont pas confirmées par :
|
||
|
||
1. Demo3 discovery ;
|
||
2. backfill signature/pool via Demo2 ;
|
||
3. replay local sur la base de travail `0.7.47` ;
|
||
4. requêtes SQL de validation sur cette même base ;
|
||
5. invariants métier : pas de faux trade, pas de fausse candle, pas de promotion de `program_id` sans corpus.
|
||
|
||
## Noms recommandés
|
||
|
||
Modules possibles :
|
||
|
||
```text
|
||
kb_lib/src/upstream_registry.rs
|
||
kb_lib/src/upstream_registry_types.rs
|
||
kb_lib/src/upstream_registry_match.rs
|
||
kb_lib/src/upstream_registry_generated.rs
|
||
```
|
||
|
||
Nom fonctionnel :
|
||
|
||
```text
|
||
Upstream Git Registry
|
||
```
|
||
|
||
Ne pas utiliser de nom de dépôt externe spécifique dans les noms publics, les statuts, les tables ou les payloads métier.
|
||
|
||
## Première tranche attendue
|
||
|
||
Créer une première version statique du registre dans `kb_lib`, sans modifier la DB si ce n’est pas nécessaire.
|
||
|
||
Chaque entrée de registre devrait contenir au minimum :
|
||
|
||
```text
|
||
source_repo
|
||
source_path
|
||
decoder_code
|
||
program_id
|
||
program_family
|
||
surface_kind
|
||
entry_kind = instruction | event | account | program
|
||
entry_name
|
||
discriminator_hex
|
||
discriminator_len
|
||
proof_status
|
||
notes
|
||
```
|
||
|
||
Les entrées de registre doivent être exposées à `kb_demo_app` via une commande Demo3 ou une commande dédiée, mais la logique reste dans `kb_lib`.
|
||
|
||
## Familles à indexer en priorité
|
||
|
||
DEX / AMM / CLMM / orderbook :
|
||
|
||
```text
|
||
meteora_damm_v2
|
||
meteora_dbc
|
||
meteora_dlmm
|
||
meteora_vault
|
||
raydium_amm_v4
|
||
raydium_clmm
|
||
raydium_cpmm
|
||
raydium_launchpad
|
||
raydium_liquidity_locking
|
||
raydium_stable_swap
|
||
orca_whirlpools
|
||
fluxbeam
|
||
lifinity_v2
|
||
phoenix_v1
|
||
openbook_v2
|
||
stabble_stable_swap
|
||
stabble_weighted_swap
|
||
bonkswap
|
||
boop
|
||
moonshot
|
||
heaven
|
||
okx_dex
|
||
pancake_swap
|
||
vertigo
|
||
virtuals
|
||
wavebreak
|
||
onchain_labs_dex_v1
|
||
onchain_labs_dex_v2
|
||
```
|
||
|
||
Agrégateurs / ordres / perps / lending :
|
||
|
||
```text
|
||
jupiter_swap
|
||
jupiter_dca
|
||
jupiter_limit_order
|
||
jupiter_limit_order_2
|
||
jupiter_perpetuals
|
||
jupiter_lend
|
||
kamino_lending
|
||
kamino_vault
|
||
kamino_farms
|
||
kamino_limit_order
|
||
drift_v2
|
||
marginfi_v2
|
||
dflow_aggregator_v4
|
||
zeta
|
||
```
|
||
|
||
Contexte transactionnel non DEX :
|
||
|
||
```text
|
||
system_program
|
||
token_program
|
||
token_2022
|
||
associated_token_account
|
||
address_lookup_table
|
||
memo_program
|
||
stake_program
|
||
mpl_token_metadata
|
||
mpl_core
|
||
bubblegum
|
||
name_service
|
||
marinade_finance
|
||
solayer_restaking_program
|
||
swig
|
||
sharky
|
||
circle_message_transmitter_v2
|
||
circle_token_messenger_v2
|
||
```
|
||
|
||
## Règles de validation
|
||
|
||
- Une entrée upstream Git reste `upstream_git_unverified` tant qu’elle n’a pas été vue localement.
|
||
- Une entrée branchée dans un decoder mais jamais vue localement reste `upstream_git_mapped_unverified`.
|
||
- Une entrée vue après Demo3/backfill/replay peut devenir `upstream_git_local_corpus_observed`.
|
||
- Une entrée qui alimente correctement une table métier dédiée peut devenir `upstream_git_local_corpus_materialized`.
|
||
- Aucun `program_id`, event ou discriminator ne doit être déclaré vérifié uniquement parce qu’il existe dans un dépôt Git externe.
|
||
- Aucun event non-trade ne doit produire trade, metric ou candle.
|
||
|
||
## Contraintes de code
|
||
|
||
- Rust 2024.
|
||
- Pas de `mod.rs`.
|
||
- Fichiers Rust avec entête `// file: ...`.
|
||
- Fichiers `.toml` avec entête `# file: ...`.
|
||
- Exposition centralisée via `lib.rs`.
|
||
- `#![deny(unreachable_pub)]` et `#![warn(missing_docs)]`.
|
||
- Pas de `anyhow`.
|
||
- Pas de `thiserror`.
|
||
- Pas de `?`, `unwrap`, `expect` dans le code applicatif.
|
||
- Utiliser `match`, `if let Err`, `let Err = ... else`.
|
||
- Tests verts à chaque étape.
|
||
- Si une requête DB est ajoutée/modifiée, mettre à jour les re-exports dans `kb_lib/src/db.rs`, puis `kb_lib/src/lib.rs` si nécessaire.
|
||
|
||
## Format de livraison attendu
|
||
|
||
Pour chaque tranche :
|
||
|
||
1. expliquer brièvement les fichiers touchés ;
|
||
2. fournir une archive des fichiers ajoutés/modifiés seulement, avec l’arborescence du projet ;
|
||
3. indiquer les commandes de test à lancer ;
|
||
4. indiquer les requêtes SQL utiles si validation DB nécessaire ;
|
||
5. ne jamais prétendre qu’un `program_id` ou un event est vérifié sans preuve/corpus.
|
||
|
||
|
||
dexlab
|
||
bags / letsbonk / bonk_fun
|
||
believe
|
||
moonit
|
||
launchbeam
|
||
metadao / metaDAO
|
||
printr
|
||
zora
|
||
aldrin
|
||
aldrin_v2
|
||
crema
|
||
cropper
|
||
cropper_legacy
|
||
guacswap
|
||
invariant
|
||
lifinity_v1
|
||
openbook_v1 / serum-style legacy
|
||
orca_v1
|
||
orca_v2
|
||
saber
|
||
saros
|
||
serum_v3
|
||
token_swap
|