15 KiB
Validation 0.2.10 — OrbitFlare Yellowstone gRPC
Statut courant : 0.2.10-pre.002 matérialise le profil Config V3 OrbitFlare Devnet et le smoke opt-in de caractérisation sur le standard Yellowstone KSP inchangé. Les preuves statiques sont fermées ; connect, Subscribe, Slot et Ping restent PENDING jusqu'au run live opérateur.
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 | non encore exécuté | PENDING |
| 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 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 le premier smoke pre.002 ; la tentative initiale est explicitement sans metadata.
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 par défaut | NO / PASS |
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 :
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 Config/N1 | PASS STATIC |
| connect Devnet | PENDING |
| Subscribe accepté | PENDING |
| Slot reçu | PENDING |
| server Ping reçu | PENDING |
| 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 gate = READY FOR OPERATOR VALIDATION
live provider gate = PENDING pre.002 characterization
16. Gate pre.002 candidat
| Critère | Verdict |
|---|---|
Cargo 0.2.10-pre.2 |
PASS STATIC |
profil Config orbitflare_devnet |
PASS STATIC |
| endpoint gRPC sans metadata | PASS STATIC |
| companions HTTP/WS Devnet préservés | PASS STATIC |
| nouveau format Config | NO |
.env.example / secret OrbitFlare ajouté |
NO |
| moteur N1 modifié | NO |
| standard N2 modifié | NO |
| SDK OrbitFlare ajouté | NO |
| smoke provider dans Transport | PASS STATIC |
| reconnect du smoke | zéro retry |
| fenêtre caractérisation | 45 secondes |
Subscribe -> Slot live |
PENDING OPERATOR |
SubscribeUpdate::Ping live |
PENDING OPERATOR |
| close live | PENDING OPERATOR |
| auth Devnet Free sans metadata | PENDING OPERATOR |
Commande live dédiée :
cargo test -p ksp-onchain-transport-lib --test yellowstone_orbitflare_smoke -- --ignored --nocapture
Le résultat live décide la suite :
Slot + Ping PASS
-> OrbitFlare reste standard ; aucun provider heartbeat/facade
connection/auth failure
-> classifier le service/licence réel avant toute metadata
Slot PASS mais Ping absent
-> divergence heartbeat à prouver avant une couche provider-specific