8.1 KiB
Delta 0.2.8-pre.001 — audit/sizing Helius LaserStream WebSocket
1. Base requise et vérifiée
Archive autoritaire fournie :
khadhroony-solana-project-v0.2.7-full-from-gitea.zip
État vérifié :
workspace.package.version = 0.2.7
deltas/0.2.7/rel.001.md présent
prompts/013-V0_2_8_START_PROMPT.md présent
metadata .git absente de l'archive
Cette livraison ouvre :
workspace.package.version = 0.2.8-pre.1
commit attendu = v0.2.8-pre.001
aucun tag prerelease
2. Objet
pre.001 est strictement le gate audit + brainstorming + sizing de 0.2.8 — Helius LaserStream WebSocket.
Il ne modifie :
aucun fichier Rust
aucun schema/config runtime
aucune dependency
aucun README/USAGE Transport
aucun secret/environment runtime
Il crée le plan durable, ouvre la matrice de validation, synchronise les index et recalcule la prévision souple.
3. Baseline acquise
Preuve opérateur jointe avant ouverture :
cargo fmt --all OK
python3 scripts/audit_rust_workspace_rules.py OK / clean
cargo check --workspace OK
cargo clippy --workspace --all-targets OK
cargo test --workspace OK
Le sandbox de préparation a aussi exécuté :
python3 scripts/audit_rust_workspace_rules.py OK
mais ne contient pas cargo; il ne déclare donc aucun gate Cargo local réussi.
Les graphes requis n'étaient pas présents dans le log opérateur et restent à exécuter avant commit :
cargo tree -p ksp-onchain-transport-lib
cargo tree -p ksp-onchain-transport-lib --duplicates
4. Résultat de l'audit Helius du 2026-08-23
Terminologie/endpoints :
produit courant = LaserStream WebSocket
Enhanced WebSockets = ancien nom intégré au produit courant
mainnet = wss://mainnet.helius-rpc.com/?api-key=...
devnet = wss://devnet.helius-rpc.com/?api-key=...
api-key = Secret query credential
LaserStream gRPC / Gatekeeper beta = hors scope
Surface retenue :
Helius supporte les paires standard :
account, logs, program, root, signature, slot
Helius ne supporte pas d'après l'index exhaustif :
block, slotsUpdates, vote
Helius extension :
transactionSubscribe
transactionUnsubscribe
notification = transactionNotification
La documentation Helius diverge sur slotsUpdates; l'index exhaustif LaserStream WebSocket Methods le classe explicitement parmi les méthodes unstable non supportées, tandis que websocket/llms.txt le place aussi dans une section « stable ». Le gate retient non supporté et exige un rejet KSP avant I/O pour HeliusLaserStream.
transactionSubscribe expose actuellement :
vote
failed
signature
accountInclude <= 50_000
accountExclude <= 50_000
accountRequired <= 50_000
tokenAccounts = none | balanceChanged | all
commitment
encoding = base58 | base64 | jsonParsed
transactionDetails = full | signatures | accounts | none
showRewards
maxSupportedTransactionVersion
maxSupportedTransactionVersion est requis par la référence lorsque transactionDetails vaut accounts ou full.
notifyOn est toujours visible dans les références account/program mais est désormais deprecated et no-op depuis Agave 4.2. Il ne sera pas ajouté à KSP.
La documentation continue de parler d'« enhanced/filtered accountSubscribe » sans publier, dans les références courantes auditées, un wire provider supplémentaire assez exact pour une API typed. Cette capacité est reportée explicitement au lieu d'être inventée.
5. Décisions du gate
WsProtocolKind cible = HeliusLaserStream
wire/config string = helius_laserstream
provider metadata = helius
session actor = WsSession existant, aucun second client
new subscription kind = HeliusTransaction
provider capability = validation déterministe avant I/O
Helius standard support = Account Logs Program Root Signature Slot
Helius standard reject = Block SlotsUpdates Vote
notifyOn = non exposé
tokenAccounts = enum provider typed
heartbeat = actor Helius-only, cible 60 s
Config = ajout kind V2, même ws_endpoints[]
credential = URL résolue par Config derrière WsEndpointUrl
new dependency = aucune
WebSocket historical replay= aucune promesse
6. Threat model retenu
Points couverts par le plan :
api-key dans query URL et erreurs handshake
heartbeat concurrent avec reconnect/close
late messages après transactionUnsubscribe
remote ids transitoires
provider capability mismatch
provider RPC errors sans session death automatique
transaction payload volumineux
3 listes de filtres jusqu'à 50k chacune
queue/frame/message bounds
unknown provider fields/modes de notification
continuity gaps après reconnect
7. Forecast recalibré
Le forecast initial pre.001 -> pre.011 est resserré car notifyOn n'est pas une capacité utile et aucun wire account/program provider additionnel précis n'est actuellement publiable.
Forecast courant :
pre.001 audit/sizing/matrice
pre.002 protocol descriptor + subscription kind + capability/redaction
pre.003 Config V2 helius_laserstream + secret strategy
pre.004 transactionSubscribe/unsubscribe request/filter/options
pre.005 transactionNotification + reconnect/resubscribe/unsubscribe races
pre.006 heartbeat/idle lifecycle
pre.007 adversarial provider/security/backpressure
pre.008 compliance + WS 18/18 + HTTP 52/14 + Config canaries
pre.009 live smoke opt-in si sûr + README/USAGE + cargo graphs
pre.010 workspace final + docs/matrix + prompt 0.2.9
rel.001 stable
Chaque tranche vise ~15–20 minutes. Le forecast peut être scindé/étendu si une ambiguïté normative ou une difficulté de lifecycle le justifie. pre.010 n'est pas une deadline.
8. Fichiers ajoutés
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.001.md
9. Fichiers modifiés
Cargo.toml
docs/000-README.md
docs/plans/000-README.md
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
docs/validation/000-README.md
10. Fichiers volontairement inchangés
ROADMAP.md
CHANGELOG.md
.env.example
config/**
crates/**
docs/architecture/**
crates/ksp-onchain-transport-lib/README.md
crates/ksp-onchain-transport-lib/USAGE.md
ROADMAP.md possède déjà l'entrée globale 0.2.8. Les documents/runtime Config/Transport ne changent pas avant le gate positif.
11. Validations réellement exécutées dans le sandbox de préparation
Avant modification :
inspection archive/version/rel/prompt OK
lecture règles/architecture/plans/validation/code OK
réaudit officiel Helius actuel OK
inspection versions publiques dépendances OK
python3 scripts/audit_rust_workspace_rules.py OK
Après génération de l'overlay, l'audit Python a été réexécuté :
General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
KSP workspace Rust rule audit: clean
12. Validations impossibles dans le sandbox
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test --workspace
cargo tree -p ksp-onchain-transport-lib
cargo tree -p ksp-onchain-transport-lib --duplicates
Cause : binaire cargo absent.
13. Validation opérateur requise avant commit
Appliquer l'overlay puis exécuter :
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
cargo check --workspace
cargo clippy --workspace --all-targets
cargo tree -p ksp-onchain-transport-lib
cargo tree -p ksp-onchain-transport-lib --duplicates
cargo test --workspace a déjà été fourni vert sur la base v0.2.7; pre.001 ne change aucun code/runtime, mais il peut être rejoué si l'opérateur souhaite un checkpoint complet de la nouvelle version Cargo.
Le gate pre.001 ne devient entièrement positif qu'après revue des deux graphes Cargo. Aucun pre.002 runtime ne doit commencer avant cela.