9.5 KiB
Delta 0.3.13-pre.005 — Helius transactionSubscribe + hydration Common RAW
Base requise
livraison précédente : 0.3.13-pre.004-fix.001
Cargo base : 0.3.13-pre.4.fix.1
delta base : deltas/0.3.13/pre.004-fix.001.md
archive delta base : ksp-general-0.3.13-pre.004-fix.001.zip
Le gate opérateur reçu le 10 septembre 2026 sur cette base est vert pour toutes les commandes exécutées : cargo fmt, cargo fmt --check, audits Rust/Markdown, cargo check --workspace, Clippy strict et toutes les suites de ksp-worker-raw-transaction-ingest-lib (79 unit, 4 cross-layer, 11 dependency-boundary, 18 hardening, 12 public-api, 4 release-completeness, 0 doc-test). Cette exécution ne contenait pas le test Transport ni les commandes cargo tree; ils ne sont donc pas déclarés PASS pour ce gate précis.
Objectif
Ajouter la source Helius WebSocket prévue par la tranche sans dupliquer le chemin Common RAW :
Helius LaserStream transactionSubscribe
-> Full + Base64 + maxSupportedTransactionVersion=1 + showRewards=false
-> projection privée signature + slot + transactionIndex
-> coordinateur d'hydration source-neutral existant
-> HTTP getTransaction observed
-> Common RAW canonique
-> admission centrale Worker
-> Store
Le nested payload transaction Helius n'est pas utilisé comme RAW-direct. Il reste possédé par Transport et n'est jamais copié dans le signal Worker.
Version
livraison : 0.3.13-pre.005
workspace.package.version : 0.3.13-pre.5
archive : ksp-general-0.3.13-pre.005.zip
Cargo.toml passe de la version de fichier 547 à 548.
Source Helius Transaction
Nouvelle surface publique Worker :
RawTransactionIngestHeliusTransactionSource
RawTransactionIngestRuntimeResources::from_helius_transaction_source
RawTransactionIngestRuntimeResources::try_push_helius_transaction_source
Construction caller-composed :
WsEndpointSettings kind helius_laserstream
HeliusTransactionSubscribeFilter
SolanaCommitment Confirmed ou Finalized
HttpTransportPool
HttpRoleName d'hydration
La construction est sans I/O. Elle refuse un endpoint invalide ou non Helius LaserStream, Processed, un réseau/provenance non représentable et l'absence d'une route HTTP getTransaction compatible sur le même réseau.
Au runtime, la source réutilise exclusivement les façades Transport existantes :
HeliusLaserStreamWsSession::connect
HeliusLaserStreamWsSession::transaction_subscribe
HttpTransportPool::get_transaction_observed via le coordinateur commun
Aucun client WebSocket direct, SDK Helius, reqwest, tokio-tungstenite, backend Store ou accès Config n'est ajouté au Worker.
Requête Helius qualifiée
La requête Worker est fixée à :
commitment = Confirmed | Finalized
encoding = Base64
transactionDetails = Full
showRewards = false
maxSupportedTransactionVersion = 1
Une notification productive doit être HeliusTransactionNotification::Full. Une forme Signature, Unknown ou future malgré la requête Full devient source.helius_transaction_notification_unqualified; elle n'est jamais convertie en succès silencieux.
Projection et hydration
Le signal privé issu d'une notification Full conserve seulement :
network
signature
slot
transactionIndex
safe route identity
private filter fingerprint
commitment via hydration context
Le nested champ transaction de la notification Helius n'est pas lu par project_helius_transaction_signal et n'est pas copié dans Worker. La construction Common RAW reste donc unique : getTransaction observed en Base64 avec maxSupportedTransactionVersion = 1, puis canonicalisation/admission existantes.
Le coordinateur d'hydration reste borné et source-neutral :
in-flight hydration <= persistence_concurrency
pending source signals <= admission_queue_capacity
coalescence key = network + signature + commitment
Cette voie converge avec Yellowstone et Standard Logs au lieu d'introduire un second moteur HTTP.
Identité logique, redaction et secrets
Le source_key Helius est dérivé de :
domain KSP live-source v1
family = helius_transaction
network
safe provider identity
safe endpoint identity
commitment
private normalized Helius filter fingerprint
SHA-256 -> [u8; 32]
L'empreinte privée couvre vote, failed, signature exacte, listes accountInclude/accountExclude/accountRequired et tokenAccounts. Les listes de pubkeys sont triées avant hash afin que leur ordre ne crée pas artificiellement deux identités logiques. Le rôle/pool HTTP d'hydration reste exclu du source_key.
Les URLs et credentials restent encapsulés par les settings Transport privés utilisés pour ouvrir les connexions ; ils ne sont exposés ni par l'API publique ni par Debug. Les valeurs de signature/pubkeys du filtre et les octets de source_key ne sont pas rendus dans les diagnostics Worker.
Les profils Config Helius et KSP_SECRET_HELIUS_API_KEY existaient déjà avant cette tranche. Aucun changement Config, .env, entitlement, quota, prix ou tier provider n'est codé dans Worker.
Activation runtime
Le contrat reste volontairement mono-source avant pre.007 :
1 source Yellowstone : productif
1 source Standard Logs : productif
1 source Standard Block : productif
1 source Helius Transaction : productif
2..32 sources : composition validable
start 2..32 : runtime_resources.multi_source_activation_pending avant spawn
Aucune source configurée n'est silencieusement ignorée.
Preuves ajoutées
Unit tests Worker :
validation protocole/commitment/route HTTP Helius
requête fixe Full/Base64/maxV1/showRewards=false
source_key filter-sensitive, order-normalized et hydration-role-neutral
Debug redacted : signature/pubkeys/URL/API key/source-key absents
projection Full -> signature/slot/index uniquement
Helius reference -> un getTransaction observed -> Common RAW exact
provenance helius_ws_http + transaction_get_transaction
rejet transactionnel d'une identité Helius dupliquée
Canaris externes :
public_api : construction/from/push depuis crate root sans escape hatch des ressources internes
dependency_boundary : façades Transport Helius + un seul getTransaction commun
hardening : nested payload non copié, secrets/redaction et absence de tier provider
release_completeness : export et canaris pre.005 obligatoires
Documentation corrigée
La documentation Worker est mise à jour pour inclure la source Helius et la convergence d'hydration. Une mention héritée de README.md qui classait encore blockSubscribe et Helius parmi les sources hors périmètre est supprimée ; USAGE.md reste volontairement version-neutral.
Fichiers modifiés
Cargo.toml
crates/ksp-worker-raw-transaction-ingest-lib/README.md
crates/ksp-worker-raw-transaction-ingest-lib/USAGE.md
crates/ksp-worker-raw-transaction-ingest-lib/src/lib.rs
crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs
crates/ksp-worker-raw-transaction-ingest-lib/tests/dependency_boundary.rs
crates/ksp-worker-raw-transaction-ingest-lib/tests/hardening.rs
crates/ksp-worker-raw-transaction-ingest-lib/tests/public_api.rs
crates/ksp-worker-raw-transaction-ingest-lib/tests/release_completeness.rs
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs
docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md
docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md
Fichiers ajoutés
deltas/0.3.13/pre.005.md
Fichiers supprimés
aucun
Non-claims
pre.005 ne prétend pas :
supervision simultanée de plusieurs sources
HTTP live block polling
RAW-direct depuis le nested payload Helius
SDK Helius dans Worker
secret/API key lu directement par Worker
nouveau profil Config Helius
entitlement/tier/quota/prix provider codé
modification de ksp-onchain-transport-lib
nouvelle dépendance externe
Validation dans l'environnement d'assemblage
Le toolchain Rust/Cargo/Rustfmt n'est pas disponible dans l'environnement d'assemblage. Les commandes Cargo post-pre.005 restent donc NON EXÉCUTÉ LOCAL. Les audits statiques KSP, le scan des identifiants normatifs et le contrôle exhaustif du diff sont exécutés avant packaging.
Gate opérateur requis avant pre.006
cargo fmt --all
cargo fmt --all -- --check
python3 scripts/audit_rust_workspace_rules.py
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-onchain-transport-lib
cargo test -p ksp-worker-raw-transaction-ingest-lib
cargo tree -p ksp-worker-raw-transaction-ingest-lib --edges normal
cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
cargo tree --duplicates
pre.006 ne doit pas commencer si ce gate révèle une anomalie.
Résultats statiques finaux de l'assemblage
General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
KSP workspace Rust rule audit: clean
Markdown table audit: clean (340 tables, 837 files)
Normative rule definitions: 489
Unique normative IDs: 489
Duplicates: 0
Contrôle exhaustif avant packaging
12 fichiers existants modifiés
1 fichier ajouté
0 fichier supprimé
12/12 headers de fichiers existants incrémentés exactement de +1
Cargo.toml : version workspace uniquement hors header
aucune dépendance ajoutée/modifiée/supprimée