v0.2.9-pre.001-fix.002

This commit is contained in:
2026-08-24 09:23:03 +02:00
parent 3081bd1085
commit 21de590aea
5 changed files with 291 additions and 112 deletions

View File

@@ -1,9 +1,9 @@
<!-- file: docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md -->
<!-- version: 3 -->
<!-- version: 4 -->
# Plan `0.2.9` — moteur Yellowstone gRPC + standard Solana + PublicNode
> **Statut : `0.2.9-pre.001-fix.001` — gate audit/sizing corrigé. `0.2.9` est bornée à un moteur client Yellowstone partagé, une façade Solana Yellowstone standard et une première intégration concrète PublicNode. Les autres providers Yellowstone sont sortis de la release et planifiés séparément. Chaque prerelease vise 1520 minutes de travail effectif et la release complète doit rester clôturable dans une seule session de chat.**
> **Statut : `0.2.9-pre.001-fix.002` — gate audit/sizing corrigé. `0.2.9` est bornée à un moteur client Yellowstone partagé, une façade Solana Yellowstone standard et une première intégration concrète PublicNode. Seuls OrbitFlare puis Helius LaserStream gRPC sont actuellement planifiés comme releases provider suivantes ; les autres providers restent en TODO/IDEAS sans numéro réservé. Chaque prerelease vise 1520 minutes de travail effectif et la release complète doit rester clôturable dans une seule session de chat.**
## 1. Objet, base et état d'ouverture
@@ -56,21 +56,31 @@ N2 façade protocolaire Solana Yellowstone standard
N3 première intégration provider : PublicNode / Allnodes-backed
Mainnet + Testnet, capabilities/profile/config + smokes live opt-in
sans duplication du moteur ni du wire standard
sans duplication du moteur ; le wire standard est réutilisé uniquement pour les capacités réellement compatibles
```
Le moteur est **Yellowstone-specific**, pas une abstraction gRPC universelle. Le serveur/plugin Geyser reste hors de KSP ; KSP implémente le client du protocole Yellowstone exposé par les providers.
La première intégration PublicNode peut rester volontairement mince si le provider n'ajoute aucun wire ou lifecycle propriétaire : l'objectif est de matérialiser la frontière provider, les capabilities et la validation live, pas de créer artificiellement un second actor/session. Un type/facade provider-specific public n'est justifié que si PublicNode impose une différence réelle de contrat.
La compatibilité provider n'est toutefois **jamais présumée totale**. Pour chaque provider, N3 peut :
```text
réutiliser N2 pour une capacité Yellowstone réellement compatible
restreindre une capacité standard absente/non supportée
ajouter une extension provider-specific typed
adapter auth/metadata, compression, keepalive, replay/from_slot, limites ou lifecycle
```
Le moteur N1 reste unique. Le wire N2 n'est jamais recopié quand il est identique, mais une divergence réelle de wire ou de sémantique doit être isolée explicitement dans N3 plutôt que masquée derrière le standard.
Sont explicitement exclus de `0.2.9` :
```text
SubscribeDeshred et pré-exécution/deshred
OrbitFlare provider integration
Helius LaserStream gRPC provider integration
eRPC provider integration
Tatum/Triton/Chainstack/Shyft/autres providers
eRPC/Triton/Alchemy/QuickNode/Chainstack/Tatum/Shyft/Solinfra/NodeFlare/autres providers
client autoreconnect upstream comme contrat public KSP
pool/scheduler automatique complexe de sessions gRPC
exactly-once / lossless / ordre global garanti
@@ -78,7 +88,7 @@ serveur Geyser/plugin validator
Store/workers/backfill historique
```
Les providers suivants sont **des releases ultérieures**, comme Helius LaserStream WebSocket l'a été après le moteur WebSocket standard. Ils réutiliseront N1/N2 et n'ajouteront une façade spécialisée que lorsqu'une différence d'authentification, de capabilities, de wire, de keepalive, de replay ou de lifecycle le nécessite.
Après `0.2.9`, seules deux releases provider sont actuellement réservées : **OrbitFlare**, puis **Helius LaserStream gRPC**. Elles réutiliseront N1/N2 lorsque compatibles et isoleront leurs restrictions/extensions dans N3. Tous les autres providers restent en TODO/IDEAS sans numéro réservé jusqu'à décision explicite ultérieure.
## 3. Sources internes relues
@@ -551,10 +561,10 @@ Helius LaserStream WS HeliusLaserStreamWsSession
Yellowstone gRPC engine nouveau runtime/session physique partagé
Solana Yellowstone standard façade typed standard sur ce moteur
PublicNode Yellowstone première intégration provider sur standard
future providers adapters/facades séparés seulement si différence réelle
future providers adapters/capabilities pouvant réutiliser, restreindre ou étendre le standard
```
Cette structure reprend le principe validé par `0.2.7`/`0.2.8` : **le moteur physique n'est jamais recopié par provider**.
Cette structure reprend le principe validé par `0.2.7`/`0.2.8` : **le moteur physique n'est jamais recopié par provider**. En revanche, l'intégration provider doit pouvoir exprimer un sous-ensemble du standard, des overrides de comportement ou des extensions wire réelles ; l'équivalence complète avec N2 n'est jamais supposée.
Interdictions :
@@ -587,11 +597,14 @@ YellowstoneUpdate / typed update projections
# N3 — provider
provider descriptor/capabilities ouverts
standard capabilities supportées / restreintes explicitement
provider extensions typed si nécessaires
provider auth/metadata/compression/replay/lifecycle policy
PublicNode integration/profile/canaries
PublicNode-specific facade seulement si une différence réelle le justifie
```
Le backend wire Tonic/Prost reste privé. Tous les types publics nécessaires sont réexportés au crate root conformément aux règles KSP. Le provider et le protocole restent deux axes distincts : `PublicNode` décrit **où/comment** on exécute Yellowstone standard, pas un nouveau protocole.
Le backend wire Tonic/Prost reste privé. Tous les types publics nécessaires sont réexportés au crate root conformément aux règles KSP. Le provider et le protocole restent deux axes distincts : `PublicNode` décrit **où/comment et avec quelles capabilities** on exécute Yellowstone. Si une capacité provider est strictement standard, elle réutilise N2 ; si elle diverge, N3 porte explicitement cette divergence.
### 12.3 Metadata/auth provider-neutral
@@ -607,7 +620,7 @@ Il ne connaît :
```text
aucun nom KSP_SECRET_*
aucun std::env
aucun header PublicNode/OrbitFlare/Tatum hardcodé comme contrat standard
aucun header PublicNode/OrbitFlare/Helius hardcodé comme contrat standard
```
Les clés metadata sont validées avant I/O ; les valeurs sensibles ne sont jamais dans `Debug`, `Display`, `KspError`, logs ou snapshots.
@@ -721,13 +734,14 @@ Credit Limits = Unlimited
Cela répond au besoin « gratuit durable » mieux qu'un trial de quelques jours, mais nécessite un compte/credential.
Décision `0.2.9` :
Décision de séquence :
```text
OrbitFlare Devnet = smoke live opt-in secondaire
auth = via generic secret metadata Config -> Transport
aucun OrbitFlareGrpc* public
aucun header provider hardcodé avant vérification exacte de la doc/live
OrbitFlare = release provider dédiée 0.2.10
Devnet Free = cible live prioritaire de cette release
auth/capabilities/limites = auditées comme delta provider N3
réutilisation de N2 seulement pour les capacités réellement compatibles
aucun OrbitFlareGrpc* public vide si aucune divergence de contrat ne le justifie
```
Source :
@@ -736,49 +750,27 @@ Source :
https://orbitflare.com/pricing
```
### 14.3 Tatum — candidat tertiaire, non gate
### 14.3 Helius LaserStream gRPC — provider planifié après OrbitFlare
Tatum documente un endpoint Yellowstone Solana Mainnet et un plan Free utilisable sans abonnement payant, mais le plan courant impose :
Helius reste volontairement hors `0.2.9` et `0.2.10`. Sa release dédiée `0.2.11` devra auditer son delta réel avec Yellowstone upstream : auth, endpoints, replay, reconnect/continuity, capacités supplémentaires ou restrictions, et toute extension wire éventuelle. La compatibilité Yellowstone annoncée ne vaut pas preuve d'équivalence complète.
### 14.4 TODO/IDEAS — autres providers non planifiés
Aucune version n'est réservée actuellement pour les providers suivants :
```text
3 RPS
100K lifetime credits
5 subscriptions
TODO eRPC — réauditer accès, auth/IP policy, capabilities et éventuels produits Burst/Shred séparés
TODO Triton — réauditer upstream vs extensions Triton, notamment Deshred et évolutions futures
TODO Alchemy — réauditer capabilities, auth, replay et limites du produit Yellowstone
TODO QuickNode — réauditer auth, compression, from_slot, filtres et limites par plan
TODO Chainstack — réauditer add-on, networks, auth et capabilities
IDEAS Tatum — accès borné par lifetime credits ; intérêt secondaire
IDEAS Shyft — réauditer seulement si gRPC durable devient accessible
IDEAS Solinfra — free tier + Yellowstone annoncés mais entitlement gRPC gratuit non confirmé
IDEAS NodeFlare — réauditer seulement si offre Yellowstone gratuite durable apparaît
```
Le caractère « forever » du plan n'en fait donc pas une ressource illimitée dans le temps : le quota de crédits est lifetime.
Décision : **candidat manuel tertiaire**, utile pour interop Mainnet authentifiée, mais pas dépendance du gate `0.2.9`.
Sources :
```text
https://docs.tatum.io/reference/solana-grpc
https://tatum.io/pricing
```
### 14.4 Fournisseurs vérifiés mais non retenus comme gratuits gRPC
État courant vérifié :
```text
Helius Free: pas de LaserStream gRPC ; Devnet à partir de Developer, Mainnet Business
Shyft Free: No gRPC Access
Alchemy Yellowstone gRPC: PAYG ou Enterprise requis
QuickNode Yellowstone gRPC: Scale/Business ou add-on payant
Chainstack Yellowstone gRPC: add-on payant à partir de 49 USD/mois, Growth+
ERPC Geyser gRPC payant ; seulement trial 1 jour sur le plan Standard
NodeFlare endpoint Yellowstone publié, mais plan Yellowstone à forfait mensuel
Bitquery CoreCast gRPC n'est pas Yellowstone ; accès stream gratuit non garanti et offre publique payante/trial
```
Candidat non validé comme gratuit durable :
```text
Solinfra site public = free tier + Yellowstone annoncés, mais entitlement gRPC du free tier non explicite
```
Solinfra pourra être revalidé en `pre.011` si une grille publique ou le dashboard confirme un droit Yellowstone durable à 0 USD. Triton et d'autres providers peuvent également être réaudités si leur offre change, mais aucun autre accès Yellowstone gratuit durable n'a été confirmé avec une preuve publique suffisante pendant ce gate.
Ces entrées n'ont **aucun numéro de release**, aucun forecast et aucun engagement d'implémentation. Elles ne sont reprises dans la séquence active que sur décision explicite ultérieure. Bitquery/CoreCast reste hors de cette file Yellowstone tant que son protocole n'est pas Yellowstone standard.
## 15. Smoke ownership
@@ -791,7 +783,7 @@ Hiérarchie cible :
2. Transport pur programmatic -> PublicNode Testnet, si endpoint exact confirmé
3. Config V3 -> Transport -> PublicNode profile, si Config est matérialisée dans 0.2.9
OrbitFlare et les providers authentifiés sont validés dans leurs releases dédiées.
OrbitFlare et Helius sont validés dans leurs releases dédiées. Les autres providers ne font l'objet d'aucun smoke planifié tant qu'ils restent en TODO/IDEAS.
4. Tatum Mainnet authentifié, opérateur-only si utile
```
@@ -1027,7 +1019,7 @@ Config V3 backward V1/V2 si Config intégrée
PublicNode intégration provider matérialisée sans duplication du moteur
PublicNode interop Mainnet validée opt-in ou impossibilité externe documentée
PublicNode Testnet validé si endpoint live confirmé, sinon raison documentée
OrbitFlare/Helius/eRPC absents du runtime 0.2.9 hors documentation de séquence
OrbitFlare/Helius absents du runtime 0.2.9 hors documentation de séquence ; autres providers uniquement TODO/IDEAS
HTTP 52+14 non régressé
standard WS 18/18 non régressé
Helius WS non régressé
@@ -1040,17 +1032,18 @@ workspace final vert
## 21. Releases suivantes recalibrées
Le gate `pre.001-fix.001` reprend la logique WebSocket : moteur/standard d'abord, providers ensuite, un provider par release lorsque son intégration apporte un delta réel.
Le gate `pre.001-fix.002` reprend la logique WebSocket : moteur/standard d'abord, puis uniquement les providers effectivement retenus pour implémentation.
```text
0.2.9 moteur Yellowstone + Solana standard + PublicNode
0.2.10 OrbitFlare Yellowstone gRPC
0.2.11 Helius LaserStream gRPC
0.2.12 eRPC Yellowstone gRPC, conditionné à un accès exploitable et à un delta provider réel
0.2.13 off-chain price transport
0.2.14 Price Desk + intégration prix Wallet Desk
0.2.15 interface/wire foundation
0.2.16 program-api foundation
0.2.12 off-chain price transport
0.2.13 Price Desk + intégration prix Wallet Desk
0.2.14 interface/wire foundation
0.2.15 program-api foundation
```
La numérotation `0.2.10+` reste réauditable au gate de chaque release : un provider qui n'ajoute finalement qu'une URL interchangeable sans contrat propre ne doit pas provoquer une façade vide ni une release artificielle.
Les autres providers Yellowstone — eRPC, Triton, Alchemy, QuickNode, Chainstack, Tatum, Shyft, Solinfra, NodeFlare et autres — restent en **TODO/IDEAS non numérotés**. Ils ne doivent pas déplacer la séquence active tant qu'une décision explicite d'implémentation n'est pas prise.
Pour toute intégration provider future, la règle reste : N1 n'est jamais dupliqué ; N2 est réutilisé seulement là où le provider est réellement compatible ; N3 exprime explicitement les restrictions, overrides et extensions.