Files
2026-08-23 12:36:54 +02:00

8.1 KiB
Raw Permalink Blame History

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 ~1520 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.