8.6 KiB
Delta 0.2.10-pre.001 — audit/sizing OrbitFlare Yellowstone gRPC
1. Base requise et vérifiée
Archive autoritaire fournie :
khadhroony-solana-project-v0.2.9-full-from-gitea.zip
État vérifié :
workspace.package.version = 0.2.9
deltas/0.2.9/rel.001.md présent
prompts/015-V0_2_10_START_PROMPT.md présent
metadata .git absente de l'archive Gitea
Cette livraison ouvre :
workspace.package.version = 0.2.10-pre.1
commit attendu = v0.2.10-pre.001
aucun tag prerelease
2. Objet
pre.001 exécute le gate documentaire obligatoire :
lecture base/règles/architecture
baseline stable
réaudit OrbitFlare actuel
réaudit Yellowstone actuel
auth control-plane/data-plane
endpoints/network/security
Free Devnet gRPC
heartbeat
capabilities/unary/replay
limits/quotas
architecture N1/N2 immuable
threat model
sizing et forecast
Aucun code provider lourd, SDK OrbitFlare, metadata secrète ou heartbeat supplémentaire n'est ajouté.
3. Baseline opérateur acquise
Preuves fournies le 2026-08-25 sur v0.2.9 :
cargo fmt --all OK
python3 scripts/audit_rust_workspace_rules.py OK / clean
python3 scripts/audit_markdown_tables.py OK / 87 tables / 261 files
cargo check --workspace OK
cargo clippy --workspace --all-targets OK
cargo test --workspace OK
cargo tree -p ksp-onchain-transport-lib --duplicates fourni
Transport pendant le workspace test :
383 unit
49 public_api
43 release_completeness
4 doctests
Les live smokes restent opt-in/ignored par défaut.
Le cargo tree -p ksp-onchain-transport-lib complet n'a pas encore été fourni et doit être rejoué avant commit.
4. Graphe de dépendances inspecté
Versions utiles visibles :
yellowstone-grpc-proto 12.6.0
tonic 0.14.6
tonic-prost 0.14.6
prost 0.14.4
tokio 1.53.1
http 1.5.0
reqwest 0.13.4
Aucune divergence Tonic/Prost/Yellowstone ne justifie une intervention. Les doublons restants sont sans impact matériel pour OrbitFlare.
5. Réaudit OrbitFlare du 2026-08-25
Free Devnet
Le pricing actuel confirme :
Free 0 USD/mois
RPC 10 RPS
transactions 1 TPS
gRPC Devnet only
credit limits unlimited
Le CLI documente :
RPC Devnet = http://devnet.rpc.orbitflare.com
gRPC Devnet = http://devnet.rpc.orbitflare.com:10000
Objectif opérationnel fermé : utiliser OrbitFlare comme provider gRPC Devnet gratuit pour les tests KSP futurs, en complément de PublicNode Mainnet/Testnet.
Auth
Classification :
X-ORBIT-KEY Customer API only
Bearer Customer API v2
RPC api_key HTTP RPC only
account API key ne prouve pas une auth Yellowstone
gRPC Dashboard token possible selon licence/service
x-token mécanisme Yellowstone plausible si token gRPC distinct
aucune metadata documentée par SDK Go pour endpoints régionaux
La clé de compte opérateur ne doit pas être fournie au dépôt ni injectée par supposition dans gRPC.
Heartbeat
OrbitFlare recommande un SubscribeRequest::Ping périodique. Yellowstone upstream envoie déjà un SubscribeUpdate::Ping périodique et KSP N1 répond automatiquement par un Ping standard sans modifier le dernier full request mémorisé.
Décision :
aucun timer OrbitFlare ajouté au moteur
aucun changement YellowstoneGrpcSessionSettings
aucune modification grpc_stream.rs
pre.002 doit observer le Ping serveur live OrbitFlare Devnet
Si ce Ping est observé, la policy standard N1 est suffisante. Sinon, une divergence provider doit être démontrée puis composée au-dessus de N1 sans le modifier.
Limits
50 connexions gRPC simultanées par IP sur shared
subscriptions par connexion annoncées unlimited
idle timeout environ 10 minutes
RESOURCE_EXHAUSTED au dépassement
backoff exponentiel conseillé
Ces valeurs restent provider-owned.
6. Réaudit Yellowstone actuel
État observé :
release GitHub courante v15.1.2+solana.4.2.0
yellowstone-grpc-proto publié 12.6.0
Aucune évolution matérielle ne remet en cause le standard N2 de 0.2.9. Aucune dependency n'est modifiée.
7. Invariant architectural supersédant l'hypothèse initiale
Décision opérateur explicite :
le moteur gRPC ne change jamais pour un provider
le moteur WebSocket ne change jamais pour un provider
les fonctionnalités provider se composent au-dessus du moteur
Pour 0.2.10 :
N1 moteur Yellowstone = IMMUTABLE
N2 standard Solana = IMMUTABLE
N3 OrbitFlare = profile/capability/facade seulement si besoin démontré
Le prompt 015 reste autoritatif sauf sur toute formulation qui permettrait de mettre une policy OrbitFlare directement dans le moteur partagé.
8. Config V3
La shape existante suffit :
profile_id = orbitflare_devnet
provider = orbitflare
cluster = devnet
protocol = solana_yellowstone
url = http://devnet.rpc.orbitflare.com:10000
metadata = []
secret_metadata = []
Pas de V4. Pas de secret ajouté avant preuve live. Pas de champ heartbeat moteur.
9. Smoke prévu
pre.002 doit commencer par un canari standard N2 :
connect OrbitFlare Devnet Free sans metadata
Subscribe slots confirmed
recevoir Slot non nul
observer SubscribeUpdate::Ping pendant une fenêtre bornée de caractérisation
fermer proprement
Puis sonder séparément les unary et replay sans rendre le smoke minimal dépendant d'entitlements provider non garantis.
10. Forecast recalibré
Chemin standard probable :
pre.001 audit/sizing
pre.002 Config Devnet + characterization smoke standard N2
pre.003 gate technique/live final
pre.004 réconciliation documentaire finale
pre.005 publication minimale
rel.001 stable
Chemin avec divergence provider démontrée :
pre.001 audit/sizing
pre.002 Config Devnet + characterization smoke
pre.003 provider overlay minimal au-dessus de N1/N2
pre.004 gate technique/live final
pre.005 réconciliation documentaire finale
pre.006 publication minimale
rel.001 stable
11. Fichiers ajoutés
docs/plans/017-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC_PLAN.md
docs/validation/013-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC.md
deltas/0.2.10/pre.001.md
12. Fichiers modifiés
Cargo.toml
docs/000-README.md
docs/plans/000-README.md
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
docs/validation/000-README.md
13. Fichiers volontairement inchangés
ROADMAP.md
CHANGELOG.md
.env.example
config/**
crates/**
docs/architecture/**
crates/ksp-onchain-transport-lib/README.md
crates/ksp-onchain-transport-lib/USAGE.md
Aucune implémentation provider ou Config runtime n'est introduite dans pre.001.
14. Sources externes réauditées
https://docs.orbitflare.com/llms.txt
https://docs.orbitflare.com/cli
https://docs.orbitflare.com/authentication
https://docs.orbitflare.com/data-streaming/yellowstone
https://docs.orbitflare.com/data-streaming/yellowstone-quickstart
https://docs.orbitflare.com/sdk/go-grpc
https://orbitflare.com/pricing
https://orbitflare.com/products/rpc-nodes
https://orbitflare.com/products/solana-grpc
https://github.com/rpcpool/yellowstone-grpc
https://github.com/rpcpool/yellowstone-grpc/releases
https://github.com/rpcpool/yellowstone-grpc/blob/master/README.md
https://github.com/rpcpool/yellowstone-grpc/blob/master/yellowstone-grpc-proto/proto/geyser.proto
15. Validations de préparation
Le sandbox a exécuté :
inspection archive/version/rel/prompt OK
lecture code N1/N2/Config et docs 0.2.9 OK
réaudit OrbitFlare/Yellowstone actuel OK
inspection cargo tree --duplicates fourni par opérateur OK
Le sandbox ne dispose pas de Cargo ; aucun cargo check/clippy/test/tree post-overlay n'est déclaré réussi localement.
16. Validation opérateur attendue avant commit
Comme pre.001 change uniquement la version Cargo et la documentation :
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.2.10
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test --workspace
cargo tree -p ksp-onchain-transport-lib
cargo tree -p ksp-onchain-transport-lib --duplicates
Attendu : aucun changement de dependency et aucun changement sous crates/.