4.6 KiB
ksp-app-backfill-desk
ksp-app-backfill-desk est l'application desktop spécialisée de contrôle d'un backfill historique RawTransaction KSP.
Elle reste une couche de composition Tauri : Config sélectionne les profils, Transport possède les endpoints/rôles/retry/rate-limit, Store possède la persistence et le backend, et ksp-job-backfill-lib possède découverte, hydratation, frontier/checkpoint et lifecycle du job.
Package
package : ksp-app-backfill-desk
lib : ksp_app_backfill_desk_lib
bin : ksp-app-backfill-desk
Le binaire est un launcher mince. La bibliothèque applicative possède le bootstrap, l'état Rust single-run, les DTOs Tauri, les commands et le bridge latest-value vers le frontend.
Composition
ksp-config-lib -> composite, profils, secrets et runtime packagé
ksp-core-lib -> erreurs, Pubkey et registre Program IDs
ksp-onchain-transport-lib -> HTTP pool, rôles, admission, retry/rate-limit
ksp-store-lib -> façade Store backend-neutral
ksp-job-api -> lifecycle Job commun
ksp-job-backfill-lib -> request/runtime/checkpoint/snapshots Backfill
ksp-logging-lib -> logging/tracing applicatif
ksp-app-backfill-desk -> orchestration Tauri + projections sûres
L'application ne dépend pas directement de ksp-store-api, ksp-store-postgres-lib, tokio-postgres, reqwest, tonic ou yellowstone-grpc-proto.
Capacités
La surface utilisateur comprend :
- quatre scopes : latest address, before address, after address et explicit signatures ;
- engagements
finalizedetconfirmed; - sélection d'un rôle HTTP logique compatible avec
getSignaturesForAddressetgetTransaction; - bornes page/candidats/concurrence validées côté Rust par le contrat Backfill ;
- validation de la requête avant Start ;
- un seul run actif ;
- monitoring latest-value par événement
ksp-backfill-statusavec resynchronisation explicite ; - Cancel ciblé par JobId backend et idempotent ;
- Resume in-session lorsqu'un checkpoint terminal est disponible ;
- autocomplete libre des Program IDs provenant du registre canonique
ksp-core-lib.
L'autocomplete n'est jamais une allow-list : une adresse Solana valide non enregistrée reste saisissable.
Checkpoint et Resume
Le checkpoint concret ne traverse jamais IPC. Le backend conserve uniquement en mémoire Rust le dernier terminal compatible et la requête nécessaire à une reprise dans la même session.
Un Resume crée un nouveau JobId backend. ksp-job-backfill-lib valide le checkpoint contre la requête d'origine puis le réémet pour ce nouveau Job sans modifier le scope fingerprint ni la frontier. Il n'existe pas de checkpoint durable de Backfill Desk après redémarrage de l'application.
Config et réseaux
Le composite dédié est :
cfg.composite.ksp-app-backfill-desk
Les profils committed couvrent mainnet, devnet et testnet. Mainnet est le profil par défaut. Transport et Store doivent sélectionner exactement le même réseau avant que la composition soit déclarée ready.
Les profils Store committed utilisent actuellement TLS PostgreSQL disabled; cette politique de profil n'enlève pas le support verify_full du Store/schema.
Le frontend ne reçoit jamais URI Store, URL RPC, credential provider, secret Config ou backend physique.
Monitoring et sécurité
Le monitoring expose des compteurs et codes sûrs : lifecycle, phase, boundary, candidats, entités/observations, missing/conflicts/holes, concurrence maximale, frontier contiguë, présence de checkpoint et éventuel domain/code d'échec.
Il n'expose pas :
- payload RAW ;
- adresse ou signatures de campagne ;
- checkpoint/cursor concret ;
- endpoint URL ou credential ;
- contexte d'erreur arbitraire.
Le frontend ne possède ni accès direct filesystem/réseau, ni persistence navigateur de données Backfill. Les capabilities Tauri guest restent core:default et tracing:default.
Ports et développement
Vite HTTP : 1436
Vite WS : 1437
Lancement :
(cd crates/ksp-app-backfill-desk && cargo tauri dev)
Build production :
(cd crates/ksp-app-backfill-desk && cargo tauri build)
Voir également USAGE.md, ../ksp-job-backfill-lib/README.md, ../../docs/architecture/009-ACQUISITION_WORKERS_AND_JOBS.md et ../../docs/validation/024-V0_3_7_BACKFILL_DESK.md.