v0.1.0-pre.064-065

This commit is contained in:
2026-07-30 17:50:29 +02:00
parent e0028b323e
commit 0befb170c7
440 changed files with 36186 additions and 39 deletions

View File

@@ -0,0 +1,106 @@
<!-- file: docs/SOLANA_NATIVE_RPC_CLOSURE_AUDIT.md -->
<!-- version: 4 -->
# Audit de clôture native, exécution et RPC — `0.4.2`
## Décision
Le jalon `0.4.2` est clôturé. Laudit distingue quatre contrats indépendants :
1. les opérations futures constructibles par `kb_executor_solana_core` ;
2. les instructions passées décodables par `kb_decoder_solana_core` ;
3. les méthodes standard HTTP/WebSocket exposées par `kb_rpc` ;
4. lorchestration de sécurité, de simulation, denvoi et de replay post-exécution.
Une méthode transportable via JSON brut nest pas considérée comme un adaptateur typé. Un builder stateless nautorise pas à lui seul une opération dépendant dun compte, dune autorité, du rent, dun slot ou dun epoch. Une opération dangereuse peut être complète dans la bibliothèque tout en restant absente de lUI et désactivée sur Mainnet.
## Résultat synthétique
| Domaine | Inventaire canonique | Contrat final `0.4.2` |
|-------------------------|-------------------------------------------------------------------------:|------------------------------------------------------------------------------------------------|
| Exécuteur natif | 18 surfaces, 14 appelables, 4 non invocables/historiques, 109 opérations | égalité imposée par test Rust ; builders comparés aux interfaces ou layouts officiels |
| Décodeur natif | 18 surfaces, 121 déclarations | égalité imposée avec `kb_program_ids::native_program_ids()` et `SolanaCoreDecoder::coverage()` |
| HTTP JSON-RPC | 52 méthodes | 52 contrats typés configurables, 0 méthode standard limitée au JSON brut |
| WebSocket JSON-RPC | 9 paires / 18 méthodes | 9 requêtes, 9 notifications et 9 runtimes persistants typés |
| Préflight stateful | ALT, Config, Feature, Slashing, ZK ElGamal | rapports `NotRequired` / `Ready` / `Blocked`, Localnet/Devnet uniquement |
| Parcours mutable validé | System transfer Devnet | simulation, signature, envoi, confirmation, canonical, core et decode replay réussis |
## Exécuteur Solana Core
`docs/NATIVE_SOLANA_EXECUTION_MATRIX.json` et `SOLANA_CORE_OPERATION_CODES` imposent :
- exactement 18 surfaces ;
- exactement 14 surfaces appelables et 4 surfaces sans instruction client ;
- exactement 109 codes dopération uniques ;
- Program IDs présents dans `kb_program_ids` ;
- contrat de construction, politique, tests, validation cluster et décision UI pour chaque opération ;
- distribution des préflights `27 none / 14 required / 68 future`.
Les surfaces sans builder client sont BPF Loader v1, BPF Loader v2, Native Loader et lancien ZK Token Proof Program. Stake `Redelegate` reste historique `decode-only`. Cette classification évite dinventer des instructions qui ne sont plus ou nont jamais été appelables par un client moderne.
Les entrées `future` ne signifient pas « non implémenté ». Elles signifient que le wire et le plan sont couverts offline, mais que lactivation mutable exige encore une preuve stateful par scénario sur Localnet/Devnet. Aucune de ces opérations nest activée sur Mainnet par `0.4.2`.
## Décodeur Solana Core
`docs/NATIVE_SOLANA_DECODER_MATRIX.json` couvre exactement les 18 surfaces du registre natif et 121 déclarations. Les tests de complétude parcourent les enums officielles ou les tables wire auditées pour System, Compute Budget, ALT, Stake, Vote, loaders, précompiles, Slashing et preuves ZK.
Stake Config reste un compte bien connu non exécutable. Il ne possède ni dispatch dinstruction ni plan dexécution.
## HTTP JSON-RPC standard
`docs/SOLANA_STANDARD_RPC_MATRIX.json` et `STANDARD_HTTP_METHODS` enregistrent 52 méthodes. Chacune possède un contrat de requête/résultat propre à `kb_rpc`. Les options facultatives restent indépendantes : commitment, `minContextSlot`, encodage, `dataSlice`, filtres, contexte, tri, niveau de détail, rewards et version maximale de transaction.
Les DTO Agave ne font pas partie de lAPI publique. La voie JSON brute reste une primitive interne ou dextension fournisseur, pas un substitut à une méthode standard absente.
## WebSocket JSON-RPC standard
Les neuf paires standard possèdent paramètres, notifications et runtime persistant dans `kb_rpc`. `WsSession` fournit :
- une socket multiplexée ;
- des identifiants locaux stables et distants remappables ;
- unsubscribe explicite ;
- timeouts bornés ;
- ping/pong et fermeture ;
- reconnexion exponentielle bornée ;
- réabonnement ;
- suppression terminale de `signatureSubscribe`.
`blockSubscribe`, `slotsUpdatesSubscribe` et `voteSubscribe` sont désactivées par défaut, mais activables lorsquun endpoint les annonce explicitement. La première souscription réelle sert de probe paresseux. Une réponse `Method not found`, `not enabled`, `unavailable` ou `unsupported` désactive uniquement la capacité concernée pour la session ; les erreurs de paramètres, dauthentification ou de rate limit ne la désactivent pas.
## Frontière Tauri et TS-rs
Les payloads actifs de `kb_app_demo` et `kb_config` transmis par JSON utilisent des `number`, pas des `bigint`. Les valeurs didentifiants sont contrôlées avec `Number.isSafeInteger` avant invocation. Les types génériques hors frontière Tauri conservent leurs contrats exacts lorsquils ne sont pas sérialisés par `JSON.stringify`.
Le navigateur SQL applique maintenant la limite maximale reçue du backend avant lappel Tauri. Une valeur supérieure à 5 000 produit un diagnostic frontend et natteint plus PostgreSQL.
## Preuves de validation
Validations fournies le 13 juillet 2026 :
| Crate / contrôle | Résultat |
|------------------------------------|----------:|
| `kb_program_ids` | 5 tests |
| `kb_decoder_solana_core` | 116 tests |
| `kb_executor_solana_core` | 88 tests |
| `kb_execution_api` | 22 tests |
| `kb_execution_safety` | 15 tests |
| `kb_execution_solana` | 12 tests |
| `kb_rpc` | 113 tests |
| `kb_pipeline` | 56 tests |
| `kb_config` | 41 tests |
| `kb_app_demo` | 88 tests |
| `kb_store_pg` avec PostgreSQL réel | 45 tests |
| `cargo clippy --all-targets` | propre |
Le test Devnet opt-in a exécuté un transfert de 1 000 000 lamports avec airdrop nul depuis un wallet préfinancé. Il a confirmé simulation, signature, envoi, confirmation, hydratation canonique, extraction core et decode replay. `cargo tauri dev` a démarré Vite, initialisé les treize tables attendues et exercé les sessions WebSocket.
Larchive de logs Mainnet/Tauri confirme des unsubscribe réels pour `slot`, `root` et `program`. Le refus de sélectionner un autre endpoint tant quune session est active est un garde-fou volontaire. Lancien échec `JSON.stringify cannot serialize BigInt` nest plus présent.
## Limites conservées après clôture
- Mainnet reste désactivé par défaut et exige une politique explicite.
- Les opérations stateful administratives non exercées sur cluster restent hors UI et bloquées avant toute future activation mutable.
- Le parcours validé utilise une transaction legacy avec recent blockhash ; durable nonce et transactions v0 sont couverts par les bibliothèques mais nécessitent leurs propres parcours opérateur avant exposition.
- Les méthodes WebSocket instables dépendent du nœud et peuvent être désactivées automatiquement à lexécution.
La clôture de `0.4.2` nouvre aucune version suivante et ne fixe aucun plan de sources historiques externes.