Files
khadhroony-solana-project/docs/validation/013-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC.md

19 KiB
Raw Blame History

Validation 0.2.10 — OrbitFlare Yellowstone gRPC

Statut courant : 0.2.10-pre.002 est commité et son gate statique/workspace est vert. Son live sans metadata a atteint OrbitFlare mais SubscribeOpen a été rejeté Unauthenticated. 0.2.10-pre.002-fix.001 corrige lauth en License Key ORBIT-* transmise comme secret x-token, sans modification N1/N2. Le rerun authentifié Subscribe -> Slot + Ping reste PENDING OPERATOR.

1. Autorités

RULES.md + docs/rules/*
archive stable v0.2.9
plan 016 et validation 012 pour N1/N2
plan 017 courant
prompt 015 pour les contraintes non supersédées
deltas/0.2.10/*
OrbitFlare docs/pricing/SDK/CLI actuels
Yellowstone upstream actuel

2. Baseline stable

Gate Résultat
version de base 0.2.9 PASS
deltas/0.2.9/rel.001.md PASS
prompt 015 PASS
cargo fmt --all PASS
audit Rust PASS
audit Markdown PASS
cargo check --workspace PASS
cargo clippy --workspace --all-targets PASS
cargo test --workspace PASS
Transport unit 383 sur 383 PASS
Transport public API 49 sur 49 PASS
Transport release completeness 43 sur 43 PASS
Config unit 113 sur 113 PASS
graph duplicates Transport fourni, aucun conflit N1 visible
graph complet Transport fourni sur 0.2.10-pre.1 PASS

3. Invariant architecture

Exigence Verdict
moteur gRPC N1 modifié pour OrbitFlare NO
standard Yellowstone N2 modifié NO
second client Tonic NO
SDK OrbitFlare runtime NO
provider séparé du protocol PASS
Config -> Transport seulement PASS
Transport -> Config/env PASS
façade provider sans divergence NO

Toute modification de grpc_stream.rs, grpc_channel.rs, grpc_settings.rs, grpc_unary.rs ou grpc_subscribe.rs motivée uniquement par OrbitFlare invalide ce gate.

4. Pricing et réseau

Point Preuve actuelle Verdict
plan Solana Free 0 USD par mois PASS
gRPC Free Devnet only PASS
RPS Free 10 INFO
TPS Free 1 INFO
crédit unlimited dans le RPS INFO
Devnet gRPC endpoint http://devnet.rpc.orbitflare.com:10000 PASS
Devnet live KSP service atteint, Subscribe auth rejeté AUTH GATE
Mainnet gratuit non documenté OUT
Testnet endpoint non prouvé UNKNOWN

Sources :

https://orbitflare.com/pricing
https://orbitflare.com/products/rpc-nodes
https://docs.orbitflare.com/cli

5. Transport security

Forme endpoint Classification Verdict
http://*.rpc.orbitflare.com:10000 HTTP/2 plaintext PASS
https://*.grpc.orbitflare.com HTTP/2 TLS PASS
transformation automatique http/https interdite PASS
endpoint Dashboard autoritaire si fourni PASS

KSP ne prétend pas qu'un canal gRPC plaintext bénéficie d'une sécurité TLS implicite.

6. Auth classification

Élément Usage prouvé Verdict
X-ORBIT-KEY Customer API CONTROL-PLANE
Bearer Device Flow Customer API v2 CONTROL-PLANE
RPC api_key Solana HTTP RPC HTTP ONLY
License Key ORBIT-* produit Solana Free DATA-PLANE PROVIDER
metadata x-token Yellowstone gRPC OrbitFlare REQUIRED / PROVEN DOC
sans metadata live KSP pre.002 REJECTED UNAUTHENTICATED
IP whitelist autre mode produit NOT ACTIVE FOR OPERATOR

Preuve live pre.002 :

grpc_operation = SubscribeOpen
grpc_status    = Unauthenticated
grpc_code      = The request does not have valid authentication credentials

Preuve provider : la référence Yellowstone OrbitFlare construit le client avec X_TOKEN = ORBITFLARE_LICENSE_KEY et indique que le token est porté par la metadata gRPC x-token.

Le Dashboard opérateur classe le produit Solana Free en API Key Mode Active. La License Key est donc le secret data-plane à utiliser ; elle nest pas une X-ORBIT-KEY Customer API.

Le CLI OrbitFlare courant nest pas utilisé comme oracle positif pour lauth gRPC : après stockage de la License Key, orbitflare ping --service grpc --network devnet retourne invalid x-token: api key not found, et son implémentation courante ninjecte pas le secret dans le canal gRPC.

7. Heartbeat

Point Preuve Verdict
OrbitFlare idle timeout partagé environ 10 minutes PASS
OrbitFlare recommande client Ping 30 secondes PASS
Yellowstone serveur Ping périodique upstream documenté PASS
KSP auto reply au serveur Ping test N1 0.2.9 PASS
moteur N1 à modifier non PASS
Ping serveur OrbitFlare Devnet observé live non encore exécuté PENDING
heartbeat provider additionnel non justifié tant que live non contraire NO

Critère de fermeture : observer le Ping standard sur OrbitFlare Devnet ou qualifier précisément pourquoi il n'est pas observable et quelle divergence provider existe.

8. Capabilities streaming

Capability Docs OrbitFlare KSP N2 Live provider
accounts oui PASS PENDING
slots oui PASS PENDING
transactions oui PASS PENDING
transactions_status partiel PASS PENDING
blocks oui PASS PENDING
blocks_meta oui PASS PENDING
entry oui PASS PENDING
commitment oui PASS PENDING
accounts_data_slice oui PASS PENDING
Subscribe Ping/Pong oui PASS PENDING

Le premier smoke n'a pas besoin de démontrer chaque famille. Il doit prouver que le provider exécute le standard KSP sur Devnet ; les capacités supplémentaires sont sondées sans élargir N2.

9. Unary et replay

Capability N2 KSP OrbitFlare docs Live
SubscribeReplayInfo PASS non prouvé PENDING
Ping unary PASS non prouvé PENDING
GetLatestBlockhash PASS non prouvé PENDING
GetBlockHeight PASS non prouvé PENDING
GetSlot PASS non prouvé PENDING
IsBlockhashValid PASS non prouvé PENDING
GetVersion PASS non prouvé PENDING
from_slot PASS non prouvé PENDING
retention N/A non documentée UNKNOWN

Une restriction provider ne rétrograde jamais la disponibilité de la méthode dans le standard global KSP.

10. Limits provider

Limite Valeur Verdict
concurrent gRPC connections 50 par IP INFO
subscriptions par connection unlimited INFO
cap partagé entre régions oui INFO
idle timeout environ 10 minutes INFO
dépassement RESOURCE_EXHAUSTED INFO
backoff recommandé exponentiel jusqu'à 30 s INFO

Ces valeurs restent provider-owned et ne deviennent pas des validations génériques de YellowstoneGrpcSessionSettings.

11. Config V3

Exigence Verdict
nouveau format Config nécessaire NO
provider = orbitflare PASS STATIC
protocol = solana_yellowstone PASS STATIC
cluster = devnet PASS STATIC
Devnet URL publique PASS STATIC
secret metadata x-token REQUIRED
valeur License Key via KSP_SECRET_* PASS DESIGN
X-ORBIT-KEY dans Transport Config FORBID
heartbeat dans grpc_defaults NO

pre.002-fix.001 corrige le profil en :

secret_metadata = x-token <- ${KSP_SECRET_ORBITFLARE_DEVNET_GRPC_X_TOKEN}

La valeur effective doit rester redacted dans toutes les projections safe/debug.

12. Smoke Devnet attendu

Smoke corrigé :

License Key lue sur stdin
YellowstoneGrpcMetadataEntry::secret("x-token", ...)
provider = orbitflare
cluster = devnet
url = http://devnet.rpc.orbitflare.com:10000
open standard Subscribe
request slots confirmed
receive Slot non nul
observe Ping serveur pendant fenêtre bornée de caractérisation
close borné

Verdicts actuels :

Preuve Verdict
endpoint parsé par N1 PASS STATIC
sans metadata FAIL EXPECTED / CLASSIFIED
secret x-token représentable par Config V3 PASS STATIC
License Key redacted PASS STATIC
connect authentifié PENDING OPERATOR
Subscribe authentifié PENDING OPERATOR
Slot reçu PENDING OPERATOR
server Ping reçu PENDING OPERATOR
auto reply KSP déterministe PASS N1
close borné PASS N1 / LIVE PENDING

13. Provider overlay gate

La release reste sans façade OrbitFlare si pre.002 démontre :

standard Subscribe fonctionne
heartbeat standard fonctionne
Config V3 exprime endpoint/auth
aucune restriction consumer-visible ne requiert un type provider

Une façade/policy OrbitFlare devient admissible seulement après preuve live d'une divergence. Même dans ce cas :

N1 ne change pas
N2 ne change pas
pas de raw Tonic
pas de SDK OrbitFlare
ownership/close provider bornés

14. Non-régressions finales

Surface Baseline Final
HTTP current typed 52 sur 52 PENDING
HTTP historical 14 sur 14 PENDING
WebSocket standard 18 sur 18 PENDING
Helius LaserStream WebSocket stable 0.2.8 PENDING
Yellowstone N1/N2 stable 0.2.9 PENDING
PublicNode Mainnet/Testnet stable 0.2.9 PENDING
Config V1/V2/V3 backward readable stable 0.2.9 PENDING
dependency firewall stable 0.2.9 PENDING

15. Gate pre.001

Critère Verdict
base stable v0.2.9 PASS
baseline fmt/audits/check/clippy PASS
workspace test PASS
graph duplicates PASS
graph complet Transport PASS
sources OrbitFlare actuelles PASS
sources Yellowstone actuelles PASS
Free Devnet gRPC confirmé PASS
endpoints classifiés PASS
auth planes distingués PASS
heartbeat KSP vs provider classifié PASS, LIVE PENDING
capabilities auditées PASS, LIVE PENDING
replay/from_slot UNKNOWN PROVIDER
N1 immutable PASS
N2 immutable PASS
Config V3 shape PASS
smoke ownership PASS
threat model PASS
sizing/forecast PASS
provider runtime lourd ajouté NO

Verdict :

architecture/sizing gate      = POSITIVE
operator pre.001 gate          = PASS
pre.002 static/workspace gate  = PASS
pre.002 live auth hypothesis   = FAIL CLASSIFIED
pre.002-fix.001 static gate    = READY FOR OPERATOR VALIDATION
live provider gate             = PENDING authenticated characterization

16. Gate pre.002 commité

Validation opérateur du 2026-08-25 :

Critère Verdict
Cargo 0.2.10-pre.2 PASS
cargo fmt --all PASS
audit Rust PASS
audit Markdown PASS / 98 tables / 98 files
cargo check --workspace PASS
cargo clippy --workspace --all-targets PASS
Config unit 114 sur 114 PASS
Transport unit 383 sur 383 PASS
Transport public API 49 sur 49 PASS
Transport release completeness 43 sur 43 PASS
workspace test PASS
graphes Transport FOURNIS / PAS DE CONFLIT N1
moteur N1 modifié NO
standard N2 modifié NO
live sans metadata FAIL CLASSIFIED
SubscribeOpen UNAUTHENTICATED

Le failure live est un résultat de caractérisation utile et non une régression du moteur. Il impose un fix de configuration/auth provider parce que pre.002 est déjà commité.

17. Gate pre.002-fix.001

Critère Verdict
Cargo 0.2.10-pre.2.fix.1 PASS STATIC
.env.example inventorie le secret OrbitFlare PASS STATIC
Config secret_metadata contient x-token PASS STATIC
valeur provenant de KSP_SECRET_ORBITFLARE_DEVNET_GRPC_X_TOKEN PASS STATIC
test Config prouve redaction et classification secrète PASS STATIC
smoke lit la License Key sur stdin PASS STATIC
secret absent des arguments CLI PASS STATIC
moteur N1 modifié NO
standard N2 modifié NO
SDK OrbitFlare ajouté NO
connect authentifié PENDING OPERATOR
Subscribe -> Slot live PENDING OPERATOR
SubscribeUpdate::Ping live PENDING OPERATOR
close live PENDING OPERATOR

Commande live dédiée, avec secret saisi sans linscrire dans lhistorique :

read -rsp 'OrbitFlare License Key: ' ORBITFLARE_LICENSE_KEY; echo
printf '%s\n' "$ORBITFLARE_LICENSE_KEY" | cargo test -p ksp-onchain-transport-lib --test yellowstone_orbitflare_smoke -- --ignored --nocapture
unset ORBITFLARE_LICENSE_KEY

Interprétation :

Slot + Ping PASS
    -> auth et heartbeat standards composables ; pre.003 devient gate technique/live final

Subscribe/Slot PASS mais Ping absent
    -> divergence heartbeat provider à traiter au-dessus de N1/N2 dans pre.003

auth encore rejetée avec la License Key x-token
    -> blocker provider/account à qualifier ; ne jamais modifier N1 pour contourner le gate