Files
khadhroony-solana-project/crates/ksp-app-raw-transaction-ingest-desk/USAGE.md
2026-09-19 08:36:52 +02:00

7.9 KiB
Raw Blame History

Utilisation de ksp-app-raw-transaction-ingest-desk

1. Lancement

Depuis la racine du workspace :

(cd crates/ksp-app-raw-transaction-ingest-desk && cargo tauri dev)

Tauri déclenche lui-même les hooks frontend configurés. Les scripts npm applicatifs de développement, contrôle ou build ne sont pas lancés directement par l'opérateur.

Le runtime prépare les ressources Config nécessaires, charge le composite dédié, initialise Logging puis ouvre le shell desktop.

2. Vue Routes

La vue Routes charge un inventaire déterministe construit côté Rust depuis le composite Config validé. Le sélecteur présente les réseaux logiques devnet, mainnet et testnet, jamais les providers. Chaque réseau agrège les profils Transport same-network configurés pour ses capabilities. La vue projette, pour chaque route V1 :

route_id
famille et label sûrs
réseau logique lorsque résolu
état Config
selectable oui/non
raison sûre lorsque la route est indisponible
génération d'inventaire

Configured signifie uniquement que toutes les requirements Config nécessaires à la route sont cohérentes. Les profils solana-public standard committés déclarent explicitement les capabilities Logs et Block; standard-block-direct est donc Configured sur les trois réseaux logiques tant que ce socle Config reste valide. L'inventaire seul ne fait aucun probe réseau et n'ouvre aucun Store ni Worker.

Un refresh reconstruit l'inventaire depuis Config et publie une nouvelle génération. La sélection visuelle d'un réseau ne choisit aucune URL, provider ou ressource physique et ne démarre aucune acquisition. Une capability optionnelle dont le secret n'est pas résolu rend uniquement la route qui en dépend indisponible ; les routes satisfaites par le Transport de base du même réseau restent composables. Une route provider-specific dont aucune source nest déclarée pour le réseau nest pas une erreur de configuration : elle est hors inventaire pour ce réseau. Par exemple, Helius Transaction est projetée sur Devnet/Mainnet lorsque transport.helius existe, mais pas sur Testnet lorsquaucune source Helius Testnet nest déclarée.

Les URLs, tokens, metadata secrètes, handles Transport/Store/Worker, URI Store, source keys et payloads RAW restent backend-only.

Les commandes Start/Stop refusent les champs IPC inconnus et les identifiants logiques non bornés ou contenant des caractères de contrôle. Le logging frontend est lui aussi borné avant l'IPC ; une entrée hostile ne doit jamais être recopiée dans les diagnostics backend.

Start/Stop multi-route

Pour une route Configured, choisir confirmed ou finalized puis utiliser Start. Le backend revalide la génération d'inventaire et la composition Config, ouvre le Store correspondant lorsqu'aucun Store compatible n'est encore actif, exige son état Ready, construit le Worker exact puis installe son handle avant de renvoyer l'accusé runtime.

Plusieurs routes peuvent être actives simultanément lorsqu'elles appartiennent au même réseau logique. Chaque route conserve son Worker indépendant et son Stop ciblé. Le Store est partagé entre ces Workers ; le dernier Worker terminal déclenche la fermeture explicite du Store. Une route Faulted ne force pas l'arrêt des autres routes. Un Start d'un autre réseau est refusé tant que le Store partagé du réseau courant reste ouvert.

Un Stop peut être demandé même si le Start ciblé n'a pas encore fini d'ouvrir le Store ou d'installer le Worker : la réservation est alors marquée pour arrêt et le backend attend sa résolution. Lors de la fermeture de la fenêtre principale, le Desk ferme d'abord l'admission Start, demande l'arrêt de toutes les routes actives ou encore en démarrage et attend un cleanup borné avant de quitter. Il n'est donc pas nécessaire d'arrêter manuellement chaque route avant de fermer l'application.

Le backend expose désormais un flux latest-value par route via l'événement Tauri ksp-raw-ingest-route-status. Chaque projection contient uniquement l'identité logique sûre de la route, lifecycle/health/activity, compteurs admission/persistence, backpressure, reconnect/replay, continuité, gaps et repair. La commande get_route_monitoring permet une resynchronisation explicite des routes actives et des derniers terminaux retenus dans la session runtime courante. Les séquences, slots et compteurs u64 sont transmis en texte décimal pour préserver leur exactitude côté JavaScript. Le bouton Resync monitoring recharge explicitement les latest values backend ; les événements ksp-raw-ingest-route-status actualisent ensuite les cartes sans polling frontend. Le relais backend coalesce les changements à une cadence maximale d'une émission toutes les 500 ms par route, et les changements steady-state mettent à jour la carte en place sans recréer les boutons Start/Stop. Une carte disposant d'un snapshot montre un résumé sûr (health, activity, persisted, sources actives, gaps) et le bouton Supervision ouvre le détail pipeline/persistence, sources, reconnect/replay, continuité et repair. Les derniers terminaux de la session restent consultables jusqu'à remplacement par un nouveau Start ou changement de session réseau.

Sur Mainnet, yellowstone-hydrated utilise un abonnement Yellowstone Block comme signal de temps réel puis reconcile chaque slot via getBlock Full/Base64. Cette stratégie évite l'hydration getTransaction unitaire par transaction. Le profil PublicNode peut exposer plusieurs endpoints HTTP sous le même rôle logique ; Transport distribue alors les requêtes selon ses règles de priorité, disponibilité, concurrence et cooldown. La livraison gRPC et les hydrations restent bornées : une saturation locale applique de la backpressure au stream au lieu de dropper les updates ou de fault sur grpc_backpressure_overflow. Lors d'un Stop ciblé, un status distant reçu après le half-close local est une fermeture coopérative ; une erreur gRPC observée avant Stop reste une panne source/reconnect normale. La conversion directe du payload Yellowstone vers le RAW canonique reste réservée à une évolution ultérieure tant que la parité complète du meta n'est pas prouvée.

Lorsque plusieurs routes observent la même transaction, l'entité canonique reste unique et les provenances restent séparées. Le cas canonique complet + entrant explicitement Log truncated compatible est accepté sans remplacer le canonique ni passer la route en Faulted. Les autres divergences de contenu restent fail-closed en 0.3.15; les variantes conflictuelles durables et leur résolution via Store Desk sont prévues pour 0.3.16.

3. Raisons d'indisponibilité

Les reasons exposées sont des codes applicatifs bornés, par exemple :

profile_unresolved
network_mismatch
missing_http_get_block
missing_http_get_transaction
missing_http_block_scan
missing_ws_logs_capability
missing_ws_block_capability
missing_helius_transaction_capability
missing_yellowstone_grpc
missing_required_secret

Le texte arbitraire d'une erreur provider ou d'un secret Config n'est jamais projeté dans l'inventaire.

4. Diagnostics

La vue Diagnostics expose uniquement des informations techniques sûres nécessaires à l'exploitation du Desk, notamment l'identité de version, l'état du shell, la composition Config bootstrap, l'état Logging et la génération d'inventaire.

Les diagnostics ne doivent pas exposer de credentials, d'URI Store, d'URL d'endpoint, de source key, de handle runtime ou de payload RawTransaction.

5. Runtime packagé

Le build Tauri embarque les documents Config et schemas enregistrés. ksp-config-lib prépare ensuite la racine KSP user-writable sans embarquer .env.

Les fichiers Config et les secrets restent administrés par les mécanismes Config KSP ; l'interface ne contourne pas cette ownership.