# Validation `0.2.10` — OrbitFlare Yellowstone gRPC **Statut courant : matrice ouverte par `0.2.10-pre.001`. Le gate d'architecture est positif. Le premier objectif live est le Devnet gratuit OrbitFlare via le standard Yellowstone KSP inchangé. Les verdicts provider non encore testés restent explicitement `PENDING` ou `UNKNOWN`.** ## 1. Autorités ```text 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 | PENDING avant commit | ## 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 | non encore exécuté | **PENDING** | | Mainnet gratuit | non documenté | **OUT** | | Testnet endpoint | non prouvé | **UNKNOWN** | Sources : ```text 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 Customer API | Customer API v2 | **CONTROL-PLANE** | | RPC `api_key` | Solana HTTP RPC | **HTTP ONLY** | | API key compte opérateur | CLI/Customer API | **NOT GRPC PROOF** | | token gRPC Dashboard | quickstart Yellowstone | **ACCOUNT DEPENDENT** | | metadata upstream `x-token` | mécanisme Yellowstone standard | **POSSIBLE** | | aucune metadata gRPC | SDK Go OrbitFlare | **DOCUMENTED** | | auth Devnet Free réelle | smoke KSP à exécuter | **PENDING** | Aucun secret opérateur n'est demandé pour `pre.001`. ## 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` | **PLANNED** | | `protocol = solana_yellowstone` | **PASS** | | `cluster = devnet` | **PLANNED** | | Devnet URL publique | **PLANNED** | | secret metadata par défaut | **NO** | | `X-ORBIT-KEY` dans Transport Config | **FORBID** | | `x-token` si token gRPC prouvé | **DEFER** | | heartbeat dans `grpc_defaults` | **NO** | ## 12. Smoke Devnet attendu Premier smoke : ```text Config/fixture -> YellowstoneGrpcEndpointSettings provider = orbitflare cluster = devnet url = http://devnet.rpc.orbitflare.com:10000 metadata vide 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 | EXPECTED | | connect Devnet | **PENDING** | | Subscribe accepté | **PENDING** | | Slot reçu | **PENDING** | | server Ping reçu | **PENDING** | | auto reply KSP déterministe | **PASS** | | close borné | **PASS N1** | ## 13. Provider overlay gate La release reste sans façade OrbitFlare si `pre.002` démontre : ```text 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 : ```text 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 | **PENDING OPERATOR** | | 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 : ```text architecture/sizing gate = POSITIVE operator commit gate = PENDING full cargo tree + validations overlay live provider gate = reserved for pre.002+ ```