21 KiB
Validation 0.2.10 — OrbitFlare Yellowstone gRPC
Statut courant : 0.2.10-pre.003 ferme le gate technique/live final. Le workspace complet est vert, les graphes Cargo ont été inspectés et le smoke OrbitFlare Devnet authentifié par License Key ORBIT-* en secret x-token observe Subscribe -> Slot + Ping puis ferme proprement. N1/N2 restent inchangés ; pre.004 réconcilie uniquement la documentation finale.
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 | Subscribe authentifié, Slot + Ping | PASS LIVE |
| 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 n’est pas une X-ORBIT-KEY Customer API.
Le CLI OrbitFlare courant n’est pas utilisé comme oracle positif pour l’auth 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 n’injecte 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 et non-régression pre.003 |
PASS |
| moteur N1 à modifier | non | PASS |
| Ping serveur OrbitFlare Devnet observé | live pre.002-fix.001 + pre.003 |
PASS |
| heartbeat provider additionnel | aucune divergence live | NO |
Le gate est fermé : OrbitFlare émet le Ping Yellowstone standard et le chemin de réponse automatique N1 reste suffisant sans timer provider.
8. Capabilities streaming
| Capability | Docs OrbitFlare | KSP N2 | Live provider |
|---|---|---|---|
| accounts | oui | PASS | non sondé exhaustivement |
| slots | oui | PASS | PASS |
| transactions | oui | PASS | non sondé exhaustivement |
| transactions_status | partiel | PASS | non sondé exhaustivement |
| blocks | oui | PASS | non sondé exhaustivement |
| blocks_meta | oui | PASS | non sondé exhaustivement |
| entry | oui | PASS | non sondé exhaustivement |
| commitment | oui | PASS | PASS confirmed |
| accounts_data_slice | oui | PASS | non sondé exhaustivement |
| Subscribe Ping/Pong | oui | PASS | PASS Ping serveur |
La release prouve le chemin provider nécessaire à sa mission sans transformer les familles non sondées en capacités absentes.
9. Unary et replay
| Capability | N2 KSP | OrbitFlare docs | Verdict provider |
|---|---|---|---|
| SubscribeReplayInfo | PASS | non prouvé | UNKNOWN / non bloquant |
| Ping unary | PASS | non prouvé | UNKNOWN / non bloquant |
| GetLatestBlockhash | PASS | non prouvé | UNKNOWN / non bloquant |
| GetBlockHeight | PASS | non prouvé | UNKNOWN / non bloquant |
| GetSlot | PASS | non prouvé | UNKNOWN / non bloquant |
| IsBlockhashValid | PASS | non prouvé | UNKNOWN / non bloquant |
| GetVersion | PASS | non prouvé | UNKNOWN / non bloquant |
| from_slot | PASS | non prouvé | N1 disponible, provider non sondé |
| retention | N/A | non documentée | UNKNOWN / provider-owned |
Une restriction ou un inconnu provider ne rétrograde jamais la disponibilité de la méthode dans le standard global KSP. Le reconnect N1 tolère déjà l'indisponibilité de SubscribeReplayInfo et poursuit avec le from_slot conservateur demandé.
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 |
protocol = solana_yellowstone |
PASS |
cluster = devnet |
PASS |
| Devnet URL publique | PASS |
secret metadata x-token |
PASS |
valeur License Key via KSP_SECRET_* |
PASS |
X-ORBIT-KEY dans Transport Config |
NO |
heartbeat dans grpc_defaults |
NO |
Contrat final :
secret_metadata = x-token <- ${KSP_SECRET_ORBITFLARE_DEVNET_GRPC_X_TOKEN}
Le test Config prouve la classification secrète et la redaction ; le live prouve que ce credential ouvre le Subscribe OrbitFlare Devnet.
12. Smoke Devnet final
Smoke durable :
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
close borné
| Preuve | Verdict |
|---|---|
| endpoint parsé par N1 | PASS |
| sans metadata | FAIL EXPECTED / CLASSIFIED |
secret x-token représentable par Config V3 |
PASS |
| License Key redacted | PASS |
| connect authentifié | PASS LIVE |
| Subscribe authentifié | PASS LIVE |
| Slot reçu | PASS LIVE |
| server Ping reçu | PASS LIVE |
| auto reply KSP déterministe | PASS N1 |
| close borné | PASS LIVE |
Résultats :
pre.002-fix.001 1/1 PASS en 5.10 s
pre.003 final 1/1 PASS en 5.19 s
13. Provider overlay gate
Verdict final : aucune façade/policy OrbitFlare n'est nécessaire.
Les conditions de réutilisation directe sont toutes satisfaites :
standard Subscribe fonctionne
heartbeat standard fonctionne
Config V3 exprime endpoint/auth
aucune restriction consumer-visible ne requiert un type provider
Les interdictions restent durables :
N1 ne change pas
N2 ne change pas
pas de raw Tonic
pas de SDK OrbitFlare
14. Non-régressions finales
| Surface | Baseline | Final |
|---|---|---|
| HTTP current typed | 52 sur 52 | PASS |
| HTTP historical | 14 sur 14 | PASS |
| WebSocket standard | 18 sur 18 | PASS |
| Helius LaserStream WebSocket | stable 0.2.8 | PASS |
| Yellowstone N1/N2 | stable 0.2.9 | PASS |
| PublicNode Mainnet/Testnet | stable 0.2.9 | PASS deterministic |
| Config V1/V2/V3 backward readable | stable 0.2.9 | PASS |
| dependency firewall | stable 0.2.9 | PASS |
Les smokes PublicNode live n'ont pas été rejoués en pre.003 car N1/N2 et les profils PublicNode n'ont pas changé ; leurs preuves live de 0.2.9 restent la baseline et la non-régression déterministe est verte.
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 FINAL |
| capabilities auditées | PASS |
| 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 final : architecture positive, inconnus provider non requis qualifiés, aucun split déclenché.
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 la caractérisation historique qui a imposé le fix d'auth, pas une régression du moteur.
17. Gate pre.002-fix.001
| Critère | Verdict |
|---|---|
Cargo 0.2.10-pre.2.fix.1 |
PASS |
.env.example inventorie le secret OrbitFlare |
PASS |
Config secret_metadata contient x-token |
PASS |
valeur provenant de KSP_SECRET_ORBITFLARE_DEVNET_GRPC_X_TOKEN |
PASS |
| test Config prouve redaction et classification secrète | PASS |
| smoke lit la License Key sur stdin | PASS |
| secret absent des arguments CLI | PASS |
| moteur N1 modifié | NO |
| standard N2 modifié | NO |
| SDK OrbitFlare ajouté | NO |
| connect authentifié | PASS LIVE |
Subscribe -> Slot live |
PASS LIVE / 5.10 s |
SubscribeUpdate::Ping live |
PASS LIVE |
| close live | PASS LIVE |
Le fix ferme l'auth et confirme que le chemin standard suffit.
18. Gate pre.003 technique/live final
Gate opérateur du 2026-08-25 :
| Critère | Verdict |
|---|---|
Cargo 0.2.10-pre.3 |
PASS |
cargo fmt --all |
PASS |
| audit Rust | PASS / 0 export candidate |
| audit Markdown | PASS / 99 tables / 100 files |
cargo check --workspace |
PASS |
cargo clippy --workspace --all-targets |
PASS |
| Config unit | 114 sur 114 PASS |
| Config ownership | 5 sur 5 PASS |
| Config public API | 15 sur 15 PASS |
| Transport unit | 383 sur 383 PASS |
| Transport public API | 49 sur 49 PASS |
| Transport release completeness | 43 sur 43 PASS |
| Transport doctests | 4 sur 4 PASS |
| workspace dependency canary | 3 sur 3 PASS |
cargo test --workspace |
PASS |
| OrbitFlare Devnet live | 1 sur 1 PASS / 5.19 s |
| graphes Cargo | INSPECTÉS / PAS DE BLOCAGE |
| moteur N1 modifié | NO |
| standard N2 modifié | NO |
Pile directe réconciliée :
yellowstone-grpc-proto 12.6.0
tonic / tonic-prost 0.14.6
prost / prost-types 0.14.4
Verdict : gate technique/live final fermé.
19. Gate pre.004 documentaire
Cette tranche doit uniquement synchroniser :
plan 017
validation 013
README Transport
USAGE Transport
docs/000-README.md
Elle ne change ni code, ni Config runtime, ni schema, ni test, ni dependency. CHANGELOG.md, ROADMAP.md et le prompt suivant restent réservés au couloir publication-minimal.
La décision de séquence est prise avant pre.005 : Helius LaserStream gRPC est reporté dans les TODO Yellowstone sans numéro de release faute d'accès live raisonnable, et 0.2.11 devient off-chain price transport. Aucun prompt suivant n'est généré dans pre.004.