Files
khadhroony-solana-project/deltas/0.2.10/pre.002-fix.001.md

5.7 KiB
Raw Blame History

Delta 0.2.10-pre.002-fix.001 — OrbitFlare License Key x-token

1. Base et identité

Base exacte :

0.2.10-pre.002 commité

Le fix porte une correction runtime/configuration de lauth provider. La version Cargo devient donc :

workspace.package.version = 0.2.10-pre.2.fix.1
commit attendu            = v0.2.10-pre.002-fix.001
aucun tag prerelease

2. Défaut démontré par le live pre.002

Le gate statique/workspace pre.002 est vert. Le smoke live sans metadata a atteint OrbitFlare puis louverture du stream a échoué de manière sûre :

grpc_operation = SubscribeOpen
grpc_status    = Unauthenticated
grpc_code      = The request does not have valid authentication credentials

Le Dashboard opérateur montre un produit Solana Free avec License Key ORBIT-* et API Key Mode Active.

La référence Yellowstone OrbitFlare précise ensuite le contrat data-plane :

ORBITFLARE_LICENSE_KEY
    -> metadata gRPC x-token
    -> Yellowstone

Le X-ORBIT-KEY et le Bearer Device Flow restent des credentials Customer API et ne sont pas utilisés par Transport Yellowstone.

3. Correction Config V3

config/std.transport.json conserve le même endpoint et ajoute uniquement la metadata secrète requise :

provider = orbitflare
cluster = devnet
protocol = solana_yellowstone
url = http://devnet.rpc.orbitflare.com:10000
metadata = []
secret_metadata = x-token <- ${KSP_SECRET_ORBITFLARE_DEVNET_GRPC_X_TOKEN}

Aucun format Config V4 nest créé.

.env.example inventorie désormais :

KSP_SECRET_ORBITFLARE_DEVNET_GRPC_X_TOKEN

La valeur locale attendue est la License Key ORBIT-*. Une X-ORBIT-KEY Customer API ne doit jamais être placée dans cette variable.

4. Preuve Config déterministe

Le test committed_v3_orbitflare_devnet_profile_maps_provider_neutral_yellowstone_grpc_with_license_x_token injecte un canari secret via ConfigEnvironment et prouve :

profil explicite orbitflare_devnet
companions HTTP/WS Devnet inchangés
endpoint Yellowstone OrbitFlare inchangé
metadata key = x-token
metadata classée secret
validation Transport PASS
URL provider absente du Debug
canari secret absent du Debug
X-ORBIT-KEY absent du Transport

5. Smoke live corrigé

yellowstone_orbitflare_smoke.rs ne dépend toujours pas de Config et ne lit aucun environnement. Il suit le pattern de sécurité déjà utilisé par les smokes PublicNode :

une License Key lue sur stdin
aucun secret en argument de ligne de commande
YellowstoneGrpcMetadataEntry::secret("x-token", ...)
reconnect max_retries = 0
Subscribe slots confirmed
fenêtre Slot + Ping = 45 s
close borné

Le smoke vérifie également que la License Key napparaît pas dans Debug.

Commande opérateur :

read -rsp 'OrbitFlare License Key: ' ORBITFLARE_LICENSE_KEY; echo
printf '%s\n' "$ORBITFLARE_LICENSE_KEY" | cargo test -p ksp-onchain-transport-lib --test yellowstone_orbitflare_smoke -- --ignored --nocapture
unset ORBITFLARE_LICENSE_KEY

6. Invariant architectural

Toujours inchangés :

src/grpc_settings.rs
src/grpc_channel.rs
src/grpc_unary.rs
src/grpc_subscribe.rs
src/grpc_stream.rs

Le standard Yellowstone N2 reste inchangé. Aucun SDK OrbitFlare runtime nest ajouté.

Lauth provider est entièrement composée par la surface metadata secrète déjà existante.

7. Heartbeat

Ce fix ne matérialise aucun heartbeat OrbitFlare.

Le rerun authentifié doit dabord qualifier :

Slot non nul
SubscribeUpdate::Ping serveur

Si les deux sont observés, N1 répond déjà automatiquement au Ping standard et aucune couche provider heartbeat nest requise.

Si le stream authentifié fonctionne mais német aucun Ping serveur dans la fenêtre de caractérisation, pre.003 devient une tranche provider-specific au-dessus de N1/N2. Il reste interdit dajouter un timer OrbitFlare au moteur gRPC.

8. Validation disponible dans lenvironnement de génération

Exécuté :

python3 scripts/audit_rust_workspace_rules.py
    General Rust rule audit: clean
    Rust export completeness audit: 0 candidate(s)
    KSP workspace Rust rule audit: clean

python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.2.10
    Markdown table audit: clean (99 table(s), 99 file(s))

config/std.transport.json
    JSON parse PASS
    JSON Schema validation PASS

comparaison N1 avec pre.002
    grpc_settings.rs  inchangé
    grpc_channel.rs   inchangé
    grpc_unary.rs     inchangé
    grpc_subscribe.rs inchangé
    grpc_stream.rs    inchangé

Aucune commande Cargo nest déclarée exécutée dans lenvironnement de génération.

9. Gates opérateur

Après application du fix :

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 -p ksp-config-lib
cargo test -p ksp-onchain-transport-lib
cargo test -p ksp-core-lib --test workspace_dependencies
cargo test --workspace

Puis exécuter le live authentifié décrit en section 5.

10. Fichiers ajoutés/modifiés

Cargo.toml
.env.example
config/std.transport.json
crates/ksp-config-lib/unit_tests/transport.rs
crates/ksp-onchain-transport-lib/tests/yellowstone_orbitflare_smoke.rs
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.002-fix.001.md

Le delta commité deltas/0.2.10/pre.002.md reste immuable.