Files
khadhroony-solana-project/deltas/0.2.11/pre.005.md
2026-08-25 22:32:07 +02:00

4.9 KiB

Delta 0.2.11-pre.005 — Kraken + Coinbase Exchange

1. Base requise

Cette tranche s'applique exclusivement après 0.2.11-pre.004-fix.001 validé par l'opérateur.

Version Cargo attendue à l'entrée :

0.2.11-pre.4.fix.1

Version Cargo de sortie :

0.2.11-pre.5

Le gate d'entrée du 2026-08-25 est intégralement PASS : audit Rust clean, audit Markdown clean, cargo check --workspace, cargo clippy --workspace --all-targets, cargo test -p ksp-offchain-transport-lib et cargo test --workspace.

2. Objet strict de la tranche

pre.005 ajoute uniquement les deux providers exchange prévus par le forecast :

Kraken Spot
Coinbase Exchange

Le contrat reste :

SOL/USD uniquement
HTTP REST direct via reqwest
aucun SDK provider
aucun credential provider pour Kraken/Coinbase Exchange
MarketPriceSemantics::ExchangeLastTrade
pas de registry global
pas de Config
pas de refresh multiple
pas de smoke live revendiqué

3. Kraken Spot

Ajout de :

market_price_kraken.rs
unit_tests/market_price_kraken.rs
MarketPriceKrakenSettings
MarketPriceKrakenProvider

Le provider est keyless et utilise l'endpoint public fixe :

https://api.kraken.com/0/public/Ticker?pair=SOLUSD

Le dernier trade est lu dans c[0] et normalisé par MarketPriceDecimal::parse_json_raw sans passage par f64.

Le ticker public Kraken ne porte pas de timestamp du dernier trade dans cette forme. KSP conserve donc :

provider_timestamp = None

et n'invente aucune heure provider à partir de l'heure de réception locale.

La sémantique reste :

MarketPriceSemantics::ExchangeLastTrade

La documentation Kraken indique qu'une cadence de 1 req/s ou moins reste dans les limites des endpoints REST publics. Le descriptor V1 retient donc une limite locale conservatrice :

1 req/s
scope IP
burst non documenté

4. Coinbase Exchange

Ajout de :

market_price_coinbase_exchange.rs
unit_tests/market_price_coinbase_exchange.rs
MarketPriceCoinbaseExchangeSettings
MarketPriceCoinbaseExchangeProvider

Le provider est keyless et utilise l'endpoint public fixe :

https://api.exchange.coinbase.com/products/SOL-USD/ticker

KSP conserve :

price
provider timestamp RFC3339 time

Le prix est parsé exactement via RawValue et le timestamp est converti dans le contrat millisecondes UTC existant.

Le descriptor conserve le token bucket public documenté par Coinbase Exchange :

10 req/s par IP
burst 15

La sémantique reste :

MarketPriceSemantics::ExchangeLastTrade

5. Façade publique

La taxonomie publique reste capability-scoped :

MarketPriceKraken*
MarketPriceCoinbaseExchange*

Le nom CoinbaseExchange est volontairement explicite afin de ne pas confondre cette surface avec Advanced Trade ou d'autres APIs Coinbase futures.

Aucun type wire provider n'est exporté. Les primitives http_* restent crate-private.

6. Tests déterministes ajoutés

Les nouveaux canaries couvrent :

Kraken exact last trade decimal
Kraken provider_timestamp absent
Kraken descriptor keyless + 1 req/s IP
Kraken provider error rejetée
Kraken résultat d'une autre paire rejeté
Coinbase exact last trade decimal
Coinbase timestamp RFC3339 conservé
Coinbase descriptor keyless + 10 req/s IP + burst 15
Coinbase timestamp invalide rejeté
façade publique des deux adapters
endpoints fixes et absence de std::env

7. Documentation réconciliée

Mise à jour de :

docs/plans/018-V0_2_11_OFFCHAIN_PRICE_TRANSPORT_PLAN.md
docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md

Le plan marque pre.004-fix.001 comme gate opérateur complet PASS et pre.005 comme réalisé en attente de son gate Cargo.

8. Fichiers ajoutés

crates/ksp-offchain-transport-lib/src/market_price_coinbase_exchange.rs
crates/ksp-offchain-transport-lib/src/market_price_kraken.rs
crates/ksp-offchain-transport-lib/unit_tests/market_price_coinbase_exchange.rs
crates/ksp-offchain-transport-lib/unit_tests/market_price_kraken.rs
deltas/0.2.11/pre.005.md

9. Fichiers modifiés

Cargo.toml
crates/ksp-offchain-transport-lib/src/lib.rs
crates/ksp-offchain-transport-lib/tests/dependency_boundary.rs
crates/ksp-offchain-transport-lib/tests/public_api.rs
docs/plans/018-V0_2_11_OFFCHAIN_PRICE_TRANSPORT_PLAN.md
docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md

10. Validation attendue

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.11
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-offchain-transport-lib
cargo test --workspace

pre.006 ne doit commencer qu'après un gate propre de pre.005 ou un delta fix explicite.