v0.2.8-pre.004
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md -->
|
||||
<!-- version: 8 -->
|
||||
<!-- version: 9 -->
|
||||
|
||||
# Plan `0.2.8` — Helius LaserStream WebSocket
|
||||
|
||||
> **Statut : `0.2.8-pre.002` + `pre.002-fix.001` sont validés ; `0.2.8-pre.003` est préparé.** La façade `HeliusLaserStreamWsSession` expose désormais uniquement les six familles standard documentées comme supportées par Helius (`account`, `logs`, `program`, `root`, `signature`, `slot`) en réutilisant le wire standard existant. `block`, `slotsUpdates` et `vote` restent absents de la façade Helius. Le checkpoint Cargo opérateur de `pre.003` reste à exécuter.
|
||||
> **Statut : `0.2.8-pre.003` est validé ; `0.2.8-pre.004` est préparé.** La façade `HeliusLaserStreamWsSession` possède désormais sa surface standard 6/6 validée. `pre.004` étend uniquement Config V2 au discriminateur WebSocket `helius_laserstream`, ajoute la fixture/exemple Helius et verrouille la résolution/redaction de `KSP_SECRET_HELIUS_API_KEY`, sans ouvrir `transactionSubscribe`.
|
||||
|
||||
## 1. Objet, base et état courant
|
||||
|
||||
@@ -26,14 +26,15 @@ pre.001-fix.001 séparation des façades + fermeture gate Cargo
|
||||
pre.001-fix.002 forecast compact + namespace LaserStream WS/gRPC
|
||||
pre.002 socle protocolaire validé
|
||||
pre.002-fix.001 correction Clippy + normalisation structure documentaire validées
|
||||
pre.003 six familles standard Helius préparées ; checkpoint opérateur pending
|
||||
pre.003 six familles standard Helius validées
|
||||
pre.004 Config V2 Helius + secret/redaction préparés
|
||||
|
||||
workspace.package.version courant = 0.2.8-pre.3
|
||||
commit attendu = v0.2.8-pre.003
|
||||
workspace.package.version courant = 0.2.8-pre.4
|
||||
commit attendu = v0.2.8-pre.004
|
||||
aucun tag prerelease
|
||||
```
|
||||
|
||||
Le checkpoint opérateur de `pre.002-fix.001` est intégralement vert : `cargo fmt`, audit Rust, `cargo check --workspace`, `cargo clippy --workspace --all-targets`, tests Transport et `cargo test --workspace`. `pre.003` peut donc ouvrir la surface standard Helius sans reporter de dette de gate.
|
||||
Le checkpoint opérateur de `pre.003` est intégralement vert : `cargo fmt`, audit Rust, `cargo check --workspace`, `cargo clippy --workspace --all-targets`, tests Transport et `cargo test --workspace`. Les six familles standard Helius sont donc acquises sans dette de gate avant l'ouverture de Config Helius en `pre.004`.
|
||||
|
||||
## 2. Forecast souple courant
|
||||
|
||||
@@ -47,9 +48,9 @@ pre.001 DONE — audit Helius actuel + matrice + architecture + threat model +
|
||||
pre.002 DONE — socle protocolaire : WsProtocolKind::HeliusLaserStream + façades standard/Helius
|
||||
+ connexion physique partagée + guards, sans duplication de l'actor
|
||||
fix.001 DONE — correction Clippy `implicit_return` + audit/normalisation structure docs
|
||||
pre.003 PREPARED — surface Helius standard supportée : account/logs/program/root/signature/slot
|
||||
pre.003 DONE — surface Helius standard supportée : account/logs/program/root/signature/slot
|
||||
+ absence typée de block/slotsUpdates/vote sur Helius + non-régression standard 9/9
|
||||
pre.004 Config V2 helius_laserstream + schema/fixtures + mapping Config -> Transport
|
||||
pre.004 PREPARED — Config V2 helius_laserstream + schema/fixtures + mapping Config -> Transport
|
||||
+ stratégie de secret Helius et redaction URL
|
||||
pre.005 transactionSubscribe request typed + filters/options/tokenAccounts + transactionUnsubscribe
|
||||
+ bounds 50k + maxSupportedTransactionVersion conditionnel
|
||||
@@ -241,12 +242,15 @@ profiles[].endpoints[]
|
||||
profiles[].ws_endpoints[].kind
|
||||
```
|
||||
|
||||
Le schema et l'adapter n'acceptent actuellement que :
|
||||
Après `pre.004`, le schema V2 et l'adapter acceptent :
|
||||
|
||||
```text
|
||||
solana_standard
|
||||
helius_laserstream
|
||||
```
|
||||
|
||||
Le document canonique `config/std.transport.json` reste volontairement une baseline publique Solana sans credential provider. La représentation Helius est portée par la fixture Config et `config/examples/std.transport.example.json`, afin de prouver le contrat sans introduire une fausse clé Helius dans le profil runtime par défaut.
|
||||
|
||||
## 5. Audit Helius officiel du 2026-08-23
|
||||
|
||||
### 5.1 Sources primaires utilisées
|
||||
@@ -592,7 +596,7 @@ La façade standard délègue déjà les neuf familles existantes sans recopier
|
||||
account block logs program root signature slot slotsUpdates vote
|
||||
```
|
||||
|
||||
La façade Helius ne recevra les six délégations communes qu'en `pre.003`, afin de garder la tranche actuelle limitée au socle protocolaire et aux guards.
|
||||
La façade Helius a reçu les six délégations communes en `pre.003`, après que `pre.002` a volontairement limité son scope au socle protocolaire et aux guards.
|
||||
|
||||
### 7.7 Réalisation de `pre.003`
|
||||
|
||||
@@ -695,25 +699,27 @@ budget reconnect = fini, inchangé
|
||||
|
||||
### 7.12 Config V2
|
||||
|
||||
Évolution :
|
||||
Contrat matérialisé par `pre.004` :
|
||||
|
||||
```text
|
||||
profiles[].ws_endpoints[].kind:
|
||||
solana_standard
|
||||
helius_laserstream
|
||||
|
||||
helius_laserstream -> WsProtocolKind::HeliusLaserStream
|
||||
```
|
||||
|
||||
Les paramètres de `transactionSubscribe` restent runtime et n'appartiennent pas au profil endpoint Config.
|
||||
La fixture Config contient un endpoint Helius typé et l'exemple versionné montre la composition de l'URL mainnet. `config/std.transport.json` reste standard-only pour ne pas imposer de provider/credential dans la configuration par défaut. Les paramètres de `transactionSubscribe` restent runtime et n'appartiennent pas au profil endpoint Config.
|
||||
|
||||
### 7.13 Credentials
|
||||
|
||||
L'api-key reste uniquement dans l'URL résolue :
|
||||
|
||||
```text
|
||||
wss://mainnet.helius-rpc.com/?api-key=${KSP_SECRET_HELIUS_API_KEY}
|
||||
wss://mainnet.helius-rpc.com/?api-key=${KSP_SECRET_HELIUS_API_KEY:-replace-me}
|
||||
```
|
||||
|
||||
Le nom final du secret est matérialisé avec Config. Transport ne lit jamais `std::env` et reçoit un `WsEndpointUrl` redacted.
|
||||
`KSP_SECRET_HELIUS_API_KEY` est inventorié dans `.env.example` sous forme commentée/placeholder. Config résout la clé au sein de l'URL effective, marque la valeur comme `Secret`, conserve l'URL réelle uniquement pour le runtime légitime et redige la projection sûre ainsi que `Debug`. Transport ne lit jamais `std::env` et reçoit uniquement un `WsEndpointUrl`.
|
||||
|
||||
## 8. Threat model provider
|
||||
|
||||
@@ -884,12 +890,11 @@ validation finale fermée
|
||||
prompt 0.2.9 prêt
|
||||
```
|
||||
|
||||
## 13. Checkpoint `pre.003`
|
||||
## 13. Checkpoint `pre.004`
|
||||
|
||||
Le checkpoint précédent est fermé par preuve opérateur :
|
||||
Le checkpoint `pre.003` est fermé par preuve opérateur :
|
||||
|
||||
```text
|
||||
pre.002 + pre.002-fix.001
|
||||
cargo fmt --all OK
|
||||
python3 scripts/audit_rust_workspace_rules.py clean
|
||||
cargo check --workspace OK
|
||||
@@ -898,31 +903,34 @@ cargo test -p ksp-onchain-transport-lib OK
|
||||
cargo test --workspace OK
|
||||
```
|
||||
|
||||
`pre.003` prépare maintenant :
|
||||
Les preuves spécifiques `pre.003` sont acquises : fixture Helius 6/6, 38 tests public API, 26 release-completeness et 4 doctests `compile_fail`, tous verts.
|
||||
|
||||
`pre.004` prépare uniquement :
|
||||
|
||||
```text
|
||||
HeliusLaserStreamWsSession::account_subscribe
|
||||
HeliusLaserStreamWsSession::program_subscribe
|
||||
HeliusLaserStreamWsSession::logs_subscribe
|
||||
HeliusLaserStreamWsSession::signature_subscribe
|
||||
HeliusLaserStreamWsSession::slot_subscribe
|
||||
HeliusLaserStreamWsSession::root_subscribe
|
||||
|
||||
block / slotsUpdates / vote -> toujours absents de la façade Helius
|
||||
transactionSubscribe -> toujours absent
|
||||
moteur/actor -> inchangé et partagé
|
||||
new dependency -> aucune
|
||||
WsProtocolKind Config mapping helius_laserstream -> HeliusLaserStream
|
||||
JSON Schema V2 kind accepte solana_standard + helius_laserstream
|
||||
fixture Config endpoint Helius avec interpolation d'api-key
|
||||
example Config endpoint Helius mainnet explicite
|
||||
secret KSP_SECRET_HELIUS_API_KEY
|
||||
safe projection / Debug credential Helius redacted
|
||||
Config -> Transport endpoint typé HeliusLaserStream
|
||||
canonical std.transport.json inchangé, standard-only
|
||||
transactionSubscribe toujours absent
|
||||
heartbeat toujours absent
|
||||
new dependency aucune
|
||||
```
|
||||
|
||||
La validation locale disponible au moment de préparer l'overlay est l'audit Rust workspace, qui reste `clean`. Le checkpoint opérateur requis avant de déclarer `pre.003` `DONE` est :
|
||||
Le checkpoint opérateur requis avant de déclarer `pre.004` `DONE` est :
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
python3 scripts/audit_rust_workspace_rules.py
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
cargo test -p ksp-config-lib
|
||||
cargo test -p ksp-onchain-transport-lib
|
||||
cargo test --workspace
|
||||
```
|
||||
|
||||
Si ce checkpoint est vert, `pre.004` ouvre uniquement Config V2 `helius_laserstream`, schema/fixtures, mapping Config -> Transport et stratégie de secret/redaction.
|
||||
Si ce checkpoint est vert, `pre.005` peut ouvrir la requête typed `transactionSubscribe` / `transactionUnsubscribe`, ses filtres/options et validations déterministes.
|
||||
|
||||
Reference in New Issue
Block a user