v0.2.10-pre.001
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/000-README.md -->
|
||||
<!-- version: 24 -->
|
||||
<!-- version: 25 -->
|
||||
|
||||
# Validations KSP
|
||||
|
||||
@@ -20,4 +20,5 @@ Documents :
|
||||
- [`009-V0_2_6_WALLET_DESK_COMPLIANCE.md`](009-V0_2_6_WALLET_DESK_COMPLIANCE.md) — matrice finale validée de la release stable `0.2.6`, couvrant Wallet Desk, les wires V1/V2, la migration explicite, le runtime Tauri packagé, les frontières sécurité/ownership et le gate opérateur `pre.018-fix.001` avec build final Linux vert.
|
||||
- [`010-V0_2_7_ONCHAIN_WEBSOCKET.md`](010-V0_2_7_ONCHAIN_WEBSOCKET.md) — matrice finale validée de la release stable `0.2.7`, ouverte par `pre.001`, fermée techniquement par `pre.014` puis publiée par `rel.001` : inventaire 9 subscribe + 9 unsubscribe, lifecycle borné, statuts unstable, compliance 18/18, non-régression HTTP 52+14, composition Config V2, smoke WebSocket Devnet et audit de dépendances.
|
||||
- [`011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md`](011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md) — matrice finale validée de la release stable `0.2.8`, ouverte par `pre.001`, consolidée jusqu’à `pre.011` puis publiée par `rel.001` : Helius `account/logs/program/root/signature/slot/slotsUpdates + transaction`, `block/vote` absents, heartbeat provider, sécurité/redaction, lifecycle adversarial, non-régressions HTTP/WS, stratégie smoke live et graphes Cargo finaux.
|
||||
- [`012-V0_2_9_YELLOWSTONE_GRPC.md`](012-V0_2_9_YELLOWSTONE_GRPC.md) — matrice active ouverte par `0.2.9-pre.001` : service Geyser courant, `Subscribe` standard, 7 unary, filtres/updates, dépendances/licence, replay/backpressure, Config V3 et interopérabilité PublicNode/OrbitFlare.
|
||||
- [`012-V0_2_9_YELLOWSTONE_GRPC.md`](012-V0_2_9_YELLOWSTONE_GRPC.md) — matrice finale de la release stable `0.2.9` : service Geyser courant, `Subscribe` standard, 7 unary, filtres/updates, dépendances/licence, replay/backpressure, Config V3 et smoke PublicNode Mainnet/Testnet.
|
||||
- [`013-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC.md`](013-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC.md) — matrice active ouverte par `0.2.10-pre.001` : Free Devnet, auth provider, endpoint security, heartbeat standard, capabilities, Config V3, smoke live et invariant N1/N2 immuable.
|
||||
|
||||
272
docs/validation/013-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC.md
Normal file
272
docs/validation/013-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC.md
Normal file
@@ -0,0 +1,272 @@
|
||||
<!-- file: docs/validation/013-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# 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+
|
||||
```
|
||||
Reference in New Issue
Block a user