263 lines
7.3 KiB
Markdown
263 lines
7.3 KiB
Markdown
<!-- file: deltas/0.2.8/pre.009.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta `0.2.8-pre.009` — compliance Helius courant + `slotsUpdates` + non-régressions finales
|
|
|
|
## 1. Base et objet
|
|
|
|
Base appliquée :
|
|
|
|
```text
|
|
0.2.8-pre.8
|
|
```
|
|
|
|
Le checkpoint opérateur `pre.008` est intégralement vert :
|
|
|
|
```text
|
|
cargo fmt --all OK
|
|
python3 scripts/audit_rust_workspace_rules.py clean
|
|
cargo check --workspace OK
|
|
cargo clippy --workspace --all-targets OK
|
|
Transport unit 335/335
|
|
Transport public API 40/40
|
|
Transport release completeness 30/30
|
|
Transport doctests 5/5
|
|
cargo test --workspace OK
|
|
```
|
|
|
|
`pre.009` réalise la compliance finale Helius WebSocket prévue, mais le réaudit courant révèle une évolution de la documentation provider qui impose une petite extension fonctionnelle : `slotsUpdatesSubscribe`/`slotsUpdatesUnsubscribe` est désormais retenu comme disponible sur Helius.
|
|
|
|
## 2. Version technique
|
|
|
|
```text
|
|
workspace.package.version = 0.2.8-pre.9
|
|
commit attendu = v0.2.8-pre.009
|
|
Git tag = aucun tag prerelease
|
|
```
|
|
|
|
Le header root `Cargo.toml` passe en version `233`.
|
|
|
|
## 3. Réconciliation documentaire Helius du 2026-08-23
|
|
|
|
Sources officielles relues :
|
|
|
|
```text
|
|
https://www.helius.dev/docs/rpc/websocket
|
|
https://www.helius.dev/docs/api-reference/rpc/websocket/slotsupdatessubscribe
|
|
https://www.helius.dev/docs/api-reference/rpc/websocket/slotsupdatesunsubscribe
|
|
https://www.helius.dev/docs/api-reference/rpc/websocket/blocksubscribe
|
|
https://www.helius.dev/docs/api-reference/rpc/websocket/votesubscribe
|
|
https://www.helius.dev/docs/api-reference/rpc/websocket/accountsubscribe
|
|
https://www.helius.dev/docs/api-reference/rpc/websocket/transactionsubscribe
|
|
```
|
|
|
|
État courant :
|
|
|
|
```text
|
|
overview LaserStream WebSocket
|
|
-> annonce le support du jeu complet des méthodes standard
|
|
|
|
blockSubscribe
|
|
-> page spécifique : unstable + explicitement non supporté Helius
|
|
|
|
voteSubscribe
|
|
-> page spécifique : unstable + explicitement non supporté Helius
|
|
|
|
slotsUpdatesSubscribe
|
|
-> page spécifique : unstable
|
|
-> endpoints Helius mainnet/devnet
|
|
-> request, notification et subscription ID documentés
|
|
-> aucune mention de non-support Helius
|
|
|
|
slotsUpdatesUnsubscribe
|
|
-> subscriptionId entier
|
|
-> result bool
|
|
```
|
|
|
|
Arbitrage KSP : lorsqu'une formule globale et une page de méthode divergent, **la page spécifique prévaut**.
|
|
|
|
Surface Helius retenue après réaudit :
|
|
|
|
```text
|
|
standard : account, logs, program, root, signature, slot, slotsUpdates
|
|
extension: transaction
|
|
absent : block, vote
|
|
```
|
|
|
|
## 4. `slotsUpdates` rejoint la façade Helius
|
|
|
|
`HeliusLaserStreamWsSession` expose désormais :
|
|
|
|
```rust
|
|
pub async fn slots_updates_subscribe(
|
|
&self,
|
|
) -> ksp_core_lib::Result<crate::WsSubscription<crate::SolanaSlotUpdate>>
|
|
```
|
|
|
|
Aucun nouveau DTO ni nouveau wire n'est créé. La façade délègue au même chemin déjà stabilisé :
|
|
|
|
```text
|
|
HeliusLaserStreamWsSession
|
|
-> physical_session()
|
|
-> WsSession::slots_updates_subscribe()
|
|
-> WsSubscriptionKind::SlotsUpdates
|
|
-> slotsUpdatesSubscribe
|
|
-> slotsUpdatesNotification
|
|
-> slotsUpdatesUnsubscribe via handle
|
|
```
|
|
|
|
Le caractère unstable reste celui de la famille standard : le warning central `warn_if_unstable()` est donc conservé automatiquement.
|
|
|
|
## 5. Capability guards réconciliés
|
|
|
|
Le compile-fail historique :
|
|
|
|
```text
|
|
Helius -X-> slotsUpdatesSubscribe
|
|
```
|
|
|
|
est supprimé car il contredirait la surface courante.
|
|
|
|
Restent obligatoires :
|
|
|
|
```text
|
|
Helius -X-> blockSubscribe
|
|
Helius -X-> voteSubscribe
|
|
Helius -X-> into_inner
|
|
SolanaStandard -X-> transactionSubscribe
|
|
```
|
|
|
|
Aucun escape hatch vers le `WsSession` générique n'est ajouté.
|
|
|
|
## 6. `accountSubscribe` enhanced : pas de wire inventé
|
|
|
|
L'overview Helius mentionne désormais des « advanced filters » sur `accountSubscribe`, mais la page API spécifique ne publie actuellement que :
|
|
|
|
```text
|
|
pubkey
|
|
encoding
|
|
commitment
|
|
notifyOn deprecated/no-op
|
|
```
|
|
|
|
Aucun DTO provider-specific supplémentaire n'est ajouté tant qu'un wire exact n'est pas publié. `notifyOn` reste volontairement absent.
|
|
|
|
## 7. Canaris de compliance transversaux
|
|
|
|
Trois canaris sont ajoutés dans `tests/release_completeness.rs`.
|
|
|
|
### 7.1 HTTP + Standard WebSocket
|
|
|
|
Ils verrouillent :
|
|
|
|
```text
|
|
HTTP current 52
|
|
HTTP historical 14
|
|
Standard WS 9 familles
|
|
Standard operations 18 subscribe/unsubscribe
|
|
```
|
|
|
|
Les neuf méthodes typed de `SolanaStandardWsSession` restent adressables.
|
|
|
|
### 7.2 Helius courant
|
|
|
|
Ils verrouillent :
|
|
|
|
```text
|
|
7 familles standard :
|
|
account
|
|
logs
|
|
program
|
|
root
|
|
signature
|
|
slot
|
|
slotsUpdates
|
|
|
|
1 extension :
|
|
transaction
|
|
|
|
absentes :
|
|
block
|
|
vote
|
|
```
|
|
|
|
Le source canary vérifie également que le guard `unsupported_slots_updates` a disparu tandis que `unsupported_block` et `unsupported_vote` restent présents.
|
|
|
|
### 7.3 Config / secret / dependency firewall
|
|
|
|
La compliance finale vérifie durablement :
|
|
|
|
```text
|
|
Transport -X-> Config/Store/Program/tracing direct
|
|
Config -> Transport présent
|
|
Config mappe WsProtocolKind::HeliusLaserStream
|
|
example Transport contient kind = helius_laserstream
|
|
example Transport utilise ${KSP_SECRET_HELIUS_API_KEY...}
|
|
.env.example inventorie KSP_SECRET_HELIUS_API_KEY
|
|
```
|
|
|
|
Aucune nouvelle dépendance n'est introduite.
|
|
|
|
## 8. Public API et fixture Helius standard
|
|
|
|
Un public-API canary supplémentaire adresse `HeliusLaserStreamWsSession::slots_updates_subscribe` et le DTO partagé `SolanaSlotUpdate`.
|
|
|
|
Le fixture Helius standard existant passe de six à sept familles et vérifie la paire exacte :
|
|
|
|
```text
|
|
slotsUpdatesSubscribe params []
|
|
slotsUpdatesUnsubscribe params [remoteSubscriptionId]
|
|
```
|
|
|
|
Le lifecycle, le decoder, le remote-ID mapping et l'unsubscribe restent ceux du moteur commun.
|
|
|
|
## 9. Comptages attendus
|
|
|
|
```text
|
|
Transport unit 335
|
|
Transport public API 41
|
|
release completeness 33
|
|
doctests compile-fail 4
|
|
```
|
|
|
|
La diminution de 5 à 4 doctests est intentionnelle : le compile-fail Helius `slotsUpdatesSubscribe` est retiré parce que cette API devient supportée.
|
|
|
|
## 10. Fichiers modifiés
|
|
|
|
```text
|
|
Cargo.toml
|
|
crates/ksp-onchain-transport-lib/src/lib.rs
|
|
crates/ksp-onchain-transport-lib/src/ws_cluster.rs
|
|
crates/ksp-onchain-transport-lib/src/ws_protocol_session.rs
|
|
crates/ksp-onchain-transport-lib/tests/public_api.rs
|
|
crates/ksp-onchain-transport-lib/tests/release_completeness.rs
|
|
crates/ksp-onchain-transport-lib/unit_tests/ws_helius_standard.rs
|
|
docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md
|
|
docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md
|
|
deltas/0.2.8/pre.009.md
|
|
```
|
|
|
|
## 11. Hors scope
|
|
|
|
Restent hors `pre.009` :
|
|
|
|
```text
|
|
smoke Helius live opt-in + README/USAGE + cargo tree final pre.010
|
|
fermeture workspace/docs/indexes + prompt 0.2.9 pre.011
|
|
LaserStream gRPC futur backend distinct
|
|
Gatekeeper beta / preconfirmations hors 0.2.8
|
|
```
|
|
|
|
## 12. Gate opérateur
|
|
|
|
```bash
|
|
cargo fmt --all
|
|
python3 scripts/audit_rust_workspace_rules.py
|
|
cargo check --workspace
|
|
cargo clippy --workspace --all-targets
|
|
cargo test -p ksp-onchain-transport-lib
|
|
cargo test --workspace
|
|
```
|
|
|
|
Critère de fermeture : zéro warning, audit clean, **335 unit / 41 public API / 33 completeness / 4 doctests** et workspace vert.
|