Files
khadhroony-solana-project/deltas/0.2.8/pre.008.md
2026-08-23 17:19:44 +02:00

7.4 KiB

Delta 0.2.8-pre.008 — adversarial Helius provider + limites + diagnostics sûrs

1. Base et objet

Base appliquée :

0.2.8-pre.7.fix.4

Le checkpoint opérateur final de pre.007 est intégralement vert :

cargo fmt --all                                OK
python3 scripts/audit_rust_workspace_rules.py  clean
cargo check --workspace                        OK
cargo clippy --workspace --all-targets         OK
Transport unit                                 331/331
Transport public API                            40/40
Transport release completeness                  29/29
Transport doctests compile-fail                   4/4
cargo test --workspace                         OK

pre.008 durcit la surface Helius WebSocket contre des comportements provider adversariaux sans créer de nouveau runtime. La tranche réutilise l'actor physique, les limites frame/message, le reconnect, le registry et la backpressure existants.

2. Version technique

workspace.package.version = 0.2.8-pre.8
commit attendu            = v0.2.8-pre.008
Git tag                    = aucun tag prerelease

Le header root Cargo.toml passe en version 232.

3. Ré-audit Helius courant

La documentation Helius réauditée le 2026-08-23 confirme :

transactionSubscribe                         supporté
transactionUnsubscribe                       supporté
accountInclude/accountExclude/accountRequired 50 000 adresses max par liste
blockSubscribe                               non supporté Helius
slotsUpdatesSubscribe                        non supporté Helius
voteSubscribe                                non supporté Helius
endpoints                                    WSS unifiés mainnet/devnet

La tranche n'introduit donc aucune nouvelle famille provider.

4. Debug sûr pour les notifications Helius

Le prompt 0.2.8 interdit les payloads arbitraires/massifs dans les diagnostics génériques. Avant cette tranche, les types de notification Helius dérivaient Debug, ce qui pouvait rendre :

transaction JSON brut
signature complète
memo/error provider
fallback Unknown(serde_json::Value) brut

pre.008 remplace ces dérivations par des implémentations explicites :

HeliusFullTransactionNotification
  transaction       <omitted>
  signature         <omitted>
  slot              visible
  transaction_index visible

HeliusTransactionSignatureNotification
  signature           <omitted>
  slot/index           visibles
  err                  omitted/null/value seulement
  memo                 omitted/null/value seulement
  block_time           omitted/null/value seulement
  confirmation_status  omitted/null/value seulement

HeliusTransactionNotification::Unknown
  payload Value conservé fonctionnellement
  Debug = Unknown("<omitted>")

Aucun accessor fonctionnel n'est supprimé. La donnée reste accessible explicitement au consommateur qui la demande ; seul le chemin diagnostic implicite est redacted.

5. Capability guard inverse

La façade Helius avait déjà quatre doctests compile-fail :

Helius -X-> blockSubscribe
Helius -X-> slotsUpdatesSubscribe
Helius -X-> voteSubscribe
Helius -X-> into_inner

pre.008 ajoute le canari inverse :

SolanaStandardWsSession -X-> transactionSubscribe

La séparation standard/provider est donc prouvée dans les deux sens sans exposer le WsSession générique.

6. Provider RPC application error

Un serveur local adversarial retourne une erreur JSON-RPC transactionSubscribe avec :

code provider
message canary sensible
payload data arbitraire de plusieurs KiB

Le canari exige :

ERROR_CODE_RPC_APPLICATION_ERROR
context sûr = rpc_code + method
message/data provider non copiés dans KspError
api-key URL non rendue
filter signature non rendue
session physique reste Active
subscription_count revient à 0
rootSubscribe fonctionne ensuite normalement

Une erreur d'application provider ne doit donc pas être promue en panne de transport.

7. Notification method mismatch

Un remote ID enregistré comme HeliusTransaction reçoit volontairement un rootNotification.

Résultat attendu :

logical transaction subscription -> Failed / WS_PROTOCOL_ERROR
remote binding transaction         -> cleanup transactionUnsubscribe
session physique                   -> Active
subscription root saine            -> Active et notification reçue

Le mismatch de famille ne doit pas contaminer les autres logical subscriptions.

8. Payload entrant oversized

Un endpoint Helius local envoie une frame texte supérieure aux limites configurées :

max_message_size_bytes = 256
max_frame_size_bytes   = 128

Le canari prouve que la limite tungstenite/actor s'applique avant tout décodage JSON provider, déclenche le reconnect borné existant et laisse la connexion Helius de remplacement utilisable pour un rootSubscribe/unsubscribe normal.

Aucun nouveau compteur ou chemin de reconnect n'est ajouté.

9. Backpressure et lifecycle conservés

La preuve provider-specific de pre.006 reste autoritaire pour :

queue capacity = 1
transaction notification overflow
échec de la seule transaction subscription
cleanup transactionUnsubscribe
root subscription saine non affectée
session physique Active

pre.008 ne duplique pas ce scénario. Les canaris partagés hérités continuent aussi de couvrir unsubscribe pendant reconnect, decode failure isolé, pending bounds et shutdown pendant backoff.

10. Canaris ajoutés

Quatre unit tests Helius sont ajoutés :

notification Debug redaction Full/Signature/Unknown
provider RPC application error sûre + session réutilisable
notification method mismatch isolé + cleanup transactionUnsubscribe
oversized inbound provider payload + reconnect + session réutilisable

Un release-completeness canary supplémentaire vérifie les guards, les Debug explicites et la réutilisation des mécanismes de bornage de l'actor.

Un doctest compile-fail supplémentaire interdit transactionSubscribe sur SolanaStandardWsSession.

Comptages attendus :

Transport unit             335
Transport public API        40
release completeness        30
doctests compile-fail        5

11. Fichiers modifiés

Cargo.toml
crates/ksp-onchain-transport-lib/src/ws_helius_transactions.rs
crates/ksp-onchain-transport-lib/src/ws_protocol_session.rs
crates/ksp-onchain-transport-lib/unit_tests/ws_helius_transactions.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
deltas/0.2.8/pre.008.md

12. Hors scope

Restent hors de pre.008 :

compliance finale Helius + standard/HTTP        pre.009
smoke Helius live + cargo tree final             pre.010
fermeture docs/indexes + prompt 0.2.9            pre.011
LaserStream gRPC                                 futur backend séparé
Gatekeeper/preconf WebSocket                     hors scope 0.2.8

13. Gate opérateur

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 / 40 public API / 30 completeness / 5 doctests et workspace vert.