5.9 KiB
Nommage canonique des programmes et surfaces
Le nommage doit permettre de distinguer la fonction réelle du programme, sa famille protocolaire et sa version.
Format recommandé
<function_code>_<family_code>_<identifier_code>[_vN]
Le nom de crate correspondant est :
kb_decoder_<function_code>_<family_code>_<identifier_code>[_vN]
Préfixes fonctionnels autorisés
Le préfixe doit décrire la fonction principale du programme, pas seulement le fait qu'il s'agit d'un programme Solana.
Exemples de préfixes acceptés :
core
token
amm
cpmm
clmm
dlmm
stable_swap
weighted_swap
orderbook
router
launchpad
lending
vault
staking
bridge
perpetuals
oracle
nft
metadata
admin
fees
governance
treasury
lock
vesting
unknown
Le préfixe program est interdit pour les nouveaux noms canoniques. Une entrée non classifiée doit utiliser unknown_* et ne doit pas déclencher la création d'une crate cible avant classification.
Cas Meteora DAMM
damm est conservé comme identifiant de surface Meteora, mais pas comme préfixe fonctionnel. La forme attendue est donc amm_meteora_damm_v1 ou amm_meteora_damm_v2. En revanche cpmm, clmm, dlmm, stable_swap et weighted_swap sont des mécanismes et peuvent être utilisés comme préfixes fonctionnels.
Colonnes à conserver
Le registre ne doit pas perdre les anciens noms. Chaque programme doit conserver :
program_id: adresse Solana réelle ;source_code: nom brut issu de la liste, d’un IDL ou d’une ancienne documentation ;normalized_code: nom nettoyé sans faute évidente ;canonical_surface_code: nom cible stable ;current_crate: crate existant si la surface est déjà réservée ;target_crate: nom de crate à atteindre après migration contrôlée ;registry_status: statut de contrôle.
Exemples de normalisation
| Nom source | Fonction | Famille | Nom canonique |
|---|---|---|---|
raydium_lp_v4 |
amm |
raydium |
amm_raydium_lp_v4 |
raydium_cpmm |
cpmm |
raydium |
cpmm_raydium |
raydium_clmm |
clmm |
raydium |
clmm_raydium |
meteora_dlmm |
dlmm |
meteora |
dlmm_meteora |
meteora_damm_v2 |
amm |
meteora |
amm_meteora_damm_v2 |
jupiter_agregator_v6 |
router |
jupiter |
router_jupiter_aggregator_v6 |
okx_labs_v2 |
router |
okx |
router_okx_labs_v2 |
openbook_v2 |
orderbook |
openbook |
orderbook_openbook_v2 |
phoenix |
orderbook |
phoenix |
orderbook_phoenix_v1 |
pump_swap |
amm |
pump |
amm_pump_swap |
pump_fun |
launchpad |
pump |
launchpad_pump_fun |
pump_fees |
admin |
pump |
admin_pump_fees |
orca_whirlpool |
clmm |
orca |
clmm_orca_whirlpool |
metaplex_token_metadata |
metadata |
metaplex |
metadata_metaplex_token_metadata |
bubblegum |
nft |
metaplex |
nft_metaplex_bubblegum |
Exceptions conservées
Les programmes Solana/SPL de base restent groupés dans des crates techniques déjà lisibles :
kb_decoder_solana_core;kb_decoder_spl_token;kb_decoder_spl_token_2022;kb_decoder_spl_associated_token_account.
Ces crates ne sont pas renommées en kb_decoder_core_* ou kb_decoder_token_*, car elles servent de couche primitive avant les surfaces DEX/router.
Politique de migration
La migration physique des dossiers ne doit pas être faite en masse. Pour chaque rename :
- prouver que le
program_idcorrespond à la surface ; - créer ou renommer une seule crate ;
- mettre à jour
Cargo.toml; - mettre à jour le registre ;
- exécuter
cargo build; - supprimer l’ancien alias seulement après validation.
Préfixe hexadécimal
Les préfixes 00 à ff sont interdits comme préfixes principaux de crate. Ils peuvent exister uniquement comme champ de registre optionnel registry_code. Le nom canonique doit rester lisible et fonctionnel.
Exemple accepté :
registry_code = "01"
canonical_surface_code = "amm_pump_swap"
target_crate = "kb_decoder_amm_pump_swap"
Exemple refusé :
kb_decoder_01_pump_swap
Fichiers constants.rs
Les crates peuvent avoir un fichier src/constants.rs pour regrouper les program_id, discriminants, sélecteurs, longueurs Borsh et autres constantes techniques. Les program_id publics sont réexportés dans lib.rs. Les constantes internes futures, par exemple des discriminants ou tailles de payload, doivent rester pub(crate) sauf besoin explicite d'API publique.
Depuis un module interne de la même crate, une constante réexportée par lib.rs doit être appelée via crate::CONSTANT_NAME. Le chemin crate::constants::CONSTANT_NAME reste réservé aux constantes non réexportées.
Préfixes ajoutés après inspection IDL
adapter: wrapper technique ou adaptation de format, par exempleadapter_saber_decimal_wrapper.rwa: programme d'actifs réels tokenisés ou marchés globaux, par exemplerwa_ondo_global_markets.vesting: programme de vesting, streaming ou timelock.wallet: smart wallet applicatif ou surface d'approbation/exécution.
Préfixe fees
Le préfixe fees est autorisé pour les programmes dont le rôle principal est la configuration, distribution ou réclamation de frais. Il doit être préféré à admin lorsque la surface est explicitement centrée sur le partage de frais.