260 lines
6.8 KiB
Markdown
260 lines
6.8 KiB
Markdown
<!-- file: deltas/0.2.8/pre.003.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta `0.2.8-pre.003` — Surface standard Helius WebSocket
|
|
|
|
## 1. Objet
|
|
|
|
Cette tranche expose sur `HeliusLaserStreamWsSession` uniquement les six familles WebSocket standard que l'audit Helius courant classe comme supportées, sans ajouter de wire provider parallèle et sans ouvrir encore Config Helius, `transactionSubscribe` ou le heartbeat.
|
|
|
|
Le checkpoint opérateur de `pre.002-fix.001` est intégralement vert ; aucune dette de gate n'est reportée dans cette tranche.
|
|
|
|
Version workspace :
|
|
|
|
```text
|
|
0.2.8-pre.3
|
|
```
|
|
|
|
Livraison / commit attendu :
|
|
|
|
```text
|
|
0.2.8-pre.003
|
|
v0.2.8-pre.003
|
|
```
|
|
|
|
Aucun tag prerelease.
|
|
|
|
## 2. Surface Helius ajoutée
|
|
|
|
`HeliusLaserStreamWsSession` expose désormais :
|
|
|
|
```text
|
|
account_subscribe
|
|
program_subscribe
|
|
logs_subscribe
|
|
signature_subscribe
|
|
slot_subscribe
|
|
root_subscribe
|
|
```
|
|
|
|
Chaque wrapper délègue au `WsSession` physique partagé et réutilise exactement les DTOs, encoders, decoders, `WsSubscriptionKind` et méthodes d'unsubscribe standard acquis en `0.2.7`.
|
|
|
|
Aucun type suivant n'est créé :
|
|
|
|
```text
|
|
HeliusAccountSubscribeConfig
|
|
HeliusAccountNotification
|
|
HeliusProgramSubscribeConfig
|
|
HeliusProgramNotification
|
|
HeliusLogsSubscribeFilter
|
|
HeliusLogsNotification
|
|
HeliusSignatureSubscribeConfig
|
|
HeliusSignatureNotification
|
|
HeliusSlotNotification
|
|
HeliusRootNotification
|
|
```
|
|
|
|
L'absence de ces copies est volontaire : aucun écart de wire Helius courant ne les justifie.
|
|
|
|
## 3. Surface Helius explicitement absente
|
|
|
|
La façade Helius continue de ne pas exposer :
|
|
|
|
```text
|
|
block_subscribe
|
|
slots_updates_subscribe
|
|
vote_subscribe
|
|
transaction_subscribe
|
|
```
|
|
|
|
Les trois familles standard non supportées sont verrouillées par des rustdocs `compile_fail` :
|
|
|
|
```text
|
|
blockSubscribe
|
|
slotsUpdatesSubscribe
|
|
voteSubscribe
|
|
```
|
|
|
|
`transactionSubscribe` reste réservé à la tranche provider-specific dédiée du forecast.
|
|
|
|
## 4. Organisation du code
|
|
|
|
`ws_protocol_session.rs` reste limité au lifecycle des façades et à l'accès crate-private au moteur partagé. Les wrappers sont rangés auprès du propriétaire de leur wire :
|
|
|
|
```text
|
|
ws_accounts.rs
|
|
SolanaStandardWsSession : account / program
|
|
HeliusLaserStreamWsSession : account / program
|
|
|
|
ws_transactions.rs
|
|
SolanaStandardWsSession : logs / signature
|
|
HeliusLaserStreamWsSession : logs / signature
|
|
|
|
ws_cluster.rs
|
|
SolanaStandardWsSession : root / slot / slotsUpdates / vote
|
|
HeliusLaserStreamWsSession : root / slot
|
|
|
|
ws_blocks.rs
|
|
SolanaStandardWsSession : block uniquement
|
|
|
|
ws_protocol_session.rs
|
|
connect / id / snapshot / state / close
|
|
physical_session() crate-private
|
|
```
|
|
|
|
Cette répartition évite de transformer le module de façade en fichier fourre-tout tout en conservant un seul actor/socket/registry.
|
|
|
|
Aucun accès public `inner()` / `into_inner()` / `physical_session()` n'est ajouté.
|
|
|
|
## 5. Fixture Helius standard
|
|
|
|
Une fixture locale dédiée couvre les six familles contre un peer WebSocket local Helius-typed.
|
|
|
|
Elle vérifie pour chaque paire :
|
|
|
|
```text
|
|
nom subscribe exact
|
|
params exacts
|
|
remote subscription id
|
|
nom unsubscribe exact
|
|
params [remote_id]
|
|
result true
|
|
```
|
|
|
|
Couverture :
|
|
|
|
```text
|
|
accountSubscribe / accountUnsubscribe
|
|
programSubscribe / programUnsubscribe
|
|
logsSubscribe / logsUnsubscribe
|
|
signatureSubscribe / signatureUnsubscribe
|
|
slotSubscribe / slotUnsubscribe
|
|
rootSubscribe / rootUnsubscribe
|
|
```
|
|
|
|
Les tests standard historiques restent propriétaires du décodage exact des notifications ; la nouvelle fixture prouve que la façade Helius traverse le même wire plutôt que de créer une seconde pile de décodage.
|
|
|
|
## 6. Canaries publiques et release completeness
|
|
|
|
Ajouts :
|
|
|
|
```text
|
|
public API : les six wrappers Helius sont accessibles depuis le crate-root
|
|
public API : les types de paramètres/résultats restent les types Solana partagés
|
|
release completeness : surface Helius courante = six familles standard, avant extension transaction
|
|
source canary : ws_protocol_session.rs ne redevient pas propriétaire des wrappers métier
|
|
```
|
|
|
|
Les neuf familles de `SolanaStandardWsSession` et les 18 opérations standard acquises restent inchangées.
|
|
|
|
## 7. Hors périmètre préservé
|
|
|
|
Cette tranche ne modifie pas :
|
|
|
|
```text
|
|
ksp-config-lib
|
|
config/std.transport.json
|
|
config/schemas/std.transport.schema.json
|
|
.env.example
|
|
WsSubscriptionKind
|
|
transactionSubscribe / transactionUnsubscribe
|
|
notification transaction Helius
|
|
heartbeat/idle timer
|
|
HTTP 52/14
|
|
Store / Program / Wallet
|
|
```
|
|
|
|
Aucune dépendance Rust n'est ajoutée.
|
|
|
|
## 8. Preuve opérateur héritée avant ouverture
|
|
|
|
Le checkpoint fourni après `pre.002-fix.001` est :
|
|
|
|
```text
|
|
cargo fmt --all OK
|
|
python3 scripts/audit_rust_workspace_rules.py clean
|
|
cargo check --workspace OK
|
|
cargo clippy --workspace --all-targets OK
|
|
cargo test -p ksp-onchain-transport-lib OK
|
|
cargo test --workspace OK
|
|
```
|
|
|
|
`pre.002` + `pre.002-fix.001` sont donc considérés `DONE` avant ce delta.
|
|
|
|
## 9. Fichiers de la livraison
|
|
|
|
Nouveau :
|
|
|
|
```text
|
|
crates/ksp-onchain-transport-lib/unit_tests/ws_helius_standard.rs
|
|
deltas/0.2.8/pre.003.md
|
|
```
|
|
|
|
Modifiés :
|
|
|
|
```text
|
|
Cargo.toml
|
|
crates/ksp-onchain-transport-lib/src/ws_protocol_session.rs
|
|
crates/ksp-onchain-transport-lib/src/ws_accounts.rs
|
|
crates/ksp-onchain-transport-lib/src/ws_blocks.rs
|
|
crates/ksp-onchain-transport-lib/src/ws_cluster.rs
|
|
crates/ksp-onchain-transport-lib/src/ws_transactions.rs
|
|
crates/ksp-onchain-transport-lib/unit_tests/ws_protocol_session.rs
|
|
crates/ksp-onchain-transport-lib/tests/public_api.rs
|
|
crates/ksp-onchain-transport-lib/tests/release_completeness.rs
|
|
docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md
|
|
docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md
|
|
```
|
|
|
|
## 10. Validation exécutée dans le sandbox de préparation
|
|
|
|
Exécuté après modification :
|
|
|
|
```text
|
|
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
|
|
```
|
|
|
|
Le sandbox ne fournit pas Cargo/rustfmt ; les nouvelles fixtures et doctests ne sont donc pas déclarés compilés avant le checkpoint opérateur.
|
|
|
|
## 11. Gate opérateur
|
|
|
|
Après application :
|
|
|
|
```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
|
|
```
|
|
|
|
Attendu :
|
|
|
|
```text
|
|
nouvelle fixture Helius six familles verte
|
|
4 doctests compile_fail de HeliusLaserStreamWsSession verts
|
|
public API pre.003 verte
|
|
release completeness pre.003 verte
|
|
aucun warning/clippy
|
|
standard WebSocket 9/9 non régressé
|
|
workspace complet vert
|
|
```
|
|
|
|
## 12. Suite
|
|
|
|
Si le checkpoint est vert, `pre.004` ouvre uniquement :
|
|
|
|
```text
|
|
Config V2 kind = helius_laserstream
|
|
schema / fixtures
|
|
mapping Config -> Transport
|
|
secret Helius dans URL résolue par Config
|
|
redaction api-key
|
|
```
|
|
|
|
`transactionSubscribe` reste hors `pre.004` conformément au forecast courant.
|