Files
khadhroony-bot3/docs/SOLANA_NATIVE_RPC_CLOSURE_AUDIT.md
2026-07-23 16:37:12 +02:00

8.0 KiB
Raw Blame History

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.