From 0e256a8ecfa14473d75065a554e543693d37e384 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Sun, 23 Aug 2026 09:17:13 +0200 Subject: [PATCH] v0.2.7-pre.011-fix.001 --- Cargo.toml | 4 +- .../src/ws_cluster.rs | 64 ++++++++++++++++--- docs/IDEAS.md | 16 ++++- 3 files changed, 72 insertions(+), 12 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e092a6d..1075d2f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 210 +# version: 211 [workspace] resolver = "3" members = ["crates/ksp-app-config-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-wallet-lib"] [workspace.package] -version = "0.2.7-pre.11" +version = "0.2.7-pre.11.fix.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-onchain-transport-lib/src/ws_cluster.rs b/crates/ksp-onchain-transport-lib/src/ws_cluster.rs index eef8c3f..63fb994 100644 --- a/crates/ksp-onchain-transport-lib/src/ws_cluster.rs +++ b/crates/ksp-onchain-transport-lib/src/ws_cluster.rs @@ -1,5 +1,5 @@ // file: crates/ksp-onchain-transport-lib/src/ws_cluster.rs -// version: 2 +// version: 3 /// Slot relationship reported by the standard Solana `slotNotification` WebSocket method. #[derive(Clone, Copy, Debug, Eq, PartialEq)] @@ -68,23 +68,69 @@ impl SolanaSlotUpdateStats { #[derive(Clone, Debug, PartialEq)] pub enum SolanaSlotUpdate { /// The first shred for a slot was received. - FirstShredReceived { slot: u64, timestamp: i64 }, + FirstShredReceived { + /// Slot whose first shred was observed. + slot: u64, + /// Millisecond Unix timestamp reported by the validator. + timestamp: i64, + }, /// All shreds for a slot were received. - Completed { slot: u64, timestamp: i64 }, + Completed { + /// Slot whose shred set completed. + slot: u64, + /// Millisecond Unix timestamp reported by the validator. + timestamp: i64, + }, /// A bank was created for the slot. - CreatedBank { slot: u64, timestamp: i64, parent: u64 }, + CreatedBank { + /// Slot whose bank was created. + slot: u64, + /// Millisecond Unix timestamp reported by the validator. + timestamp: i64, + /// Parent slot used to create the bank. + parent: u64, + }, /// A bank was frozen and execution statistics are available. - Frozen { slot: u64, timestamp: i64, stats: crate::SolanaSlotUpdateStats }, + Frozen { + /// Slot whose bank was frozen. + slot: u64, + /// Millisecond Unix timestamp reported by the validator. + timestamp: i64, + /// Execution statistics reported for the frozen bank. + stats: crate::SolanaSlotUpdateStats, + }, /// The slot was marked dead. - Dead { slot: u64, timestamp: i64, error: std::string::String }, + Dead { + /// Slot marked dead by the validator. + slot: u64, + /// Millisecond Unix timestamp reported by the validator. + timestamp: i64, + /// Upstream diagnostic string explaining why the slot was marked dead. + error: std::string::String, + }, /// The slot reached the current unstable optimistic-confirmation marker. - OptimisticConfirmation { slot: u64, timestamp: i64 }, + OptimisticConfirmation { + /// Slot that reached optimistic confirmation. + slot: u64, + /// Millisecond Unix timestamp reported by the validator. + timestamp: i64, + }, /// The slot became root. - Root { slot: u64, timestamp: i64 }, + Root { + /// Slot that became root. + slot: u64, + /// Millisecond Unix timestamp reported by the validator. + timestamp: i64, + }, /// A future upstream variant that KSP does not yet interpret. /// /// `raw` is bounded by the physical session's configured inbound WebSocket message limit before JSON decoding. - Unknown { update_type: std::string::String, raw: serde_json::Value }, + Unknown { + /// Upstream `type` discriminator that KSP does not yet recognize. + update_type: std::string::String, + /// Complete bounded JSON object preserved for forward-compatible inspection. + raw: serde_json::Value, + }, } impl SolanaSlotUpdate { diff --git a/docs/IDEAS.md b/docs/IDEAS.md index 8751aa9..eb0d784 100644 --- a/docs/IDEAS.md +++ b/docs/IDEAS.md @@ -1,5 +1,5 @@ - + # Idées à explorer @@ -96,6 +96,20 @@ Aucun `ksp-data-api` global n'est prévu actuellement. Les modèles appartiennen Réévaluer seulement si les premières implémentations montrent une duplication réellement nuisible impossible à résoudre sans contrat commun supplémentaire. +### Mesure du trafic et metering futur + +**Status :** À explorer plus tard + +Ne pas introduire de métriques de volume supplémentaires dans `ksp-onchain-transport-lib` pendant `0.2.7`. La surface HTTP/WebSocket doit d'abord être clôturée et les besoins réels doivent être observés avec le futur stockage raw. + +La direction à étudier est de conserver `ksp-onchain-transport-lib` comme source de vérité pour les faits effectivement observés à la frontière réseau, par exemple volumes de payload entrants/sortants, requêtes/réponses, notifications WebSocket, retries et reconnects. Ces mesures doivent rester neutres et ne pas embarquer de modèle de prix, de crédits ou de facturation propre à un fournisseur. + +Le futur Store conservera les données raw nécessaires aux analyses historiques sur les types de réponses, leurs tailles, leur fréquence et leur distribution. Il ne doit cependant pas être considéré comme la source de vérité des octets réellement transportés, car les données persistées peuvent différer de ce qui a été reçu ou envoyé sur le réseau. + +Étudier ultérieurement une crate dédiée, nom provisoire `ksp-metering-lib` ou `ksp-metering-observer-lib`, chargée d'observer/agréger ces mesures sans devenir un filtre obligatoire dans le data path. Son nom, son API, sa relation exacte avec Store et la granularité des événements restent à définir. + +Le besoin visé est d'abord l'observabilité et l'analyse statistique internes KSP ; aucune dépendance aux données de facturation remontées par les fournisseurs n'est requise. + ### Off-chain volontairement hétérogène **Status :** Retenue