Files
khadhroony-solana-project/deltas/0.3.13/pre.004.md
2026-09-10 14:25:30 +02:00

8.7 KiB

Delta 0.3.13-pre.004 — Standard Solana blockSubscribe RAW-direct qualifié

Base requise

delivery précédente : 0.3.13-pre.003-fix.003
Cargo base : 0.3.13-pre.3.fix.3
delta base : deltas/0.3.13/pre.003-fix.003.md
archive delta base : ksp-general-0.3.13-pre.003-fix.003.zip

Le gate opérateur reçu 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 (75 unit, 4 cross-layer, 10 dependency-boundary, 17 hardening, 11 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 deuxième source Solana Standard WebSocket de 0.3.13 sans dupliquer Transport :

Solana standard WS blockSubscribe
    -> Full + Base64 + maxSupportedTransactionVersion=1 + showRewards=false
    -> qualification explicite Legacy / V0 / V1
    -> Common RAW direct par transaction
    -> admission centrale Worker
    -> Store

La source ne possède pas de fallback HTTP. Tout bloc ou transaction non qualifiable échoue explicitement et sûrement.

Version

livraison : 0.3.13-pre.004
workspace.package.version : 0.3.13-pre.4
archive : ksp-general-0.3.13-pre.004.zip

Cargo.toml passe également de la version de fichier 545 à 546.

Source Standard Block

Nouvelle surface publique Worker :

RawTransactionIngestStandardBlockSource
RawTransactionIngestRuntimeResources::from_standard_block_source
RawTransactionIngestRuntimeResources::try_push_standard_block_source

Construction caller-composed :

WsEndpointSettings kind solana_standard
SolanaBlockSubscribeFilter
SolanaCommitment Confirmed ou Finalized

La construction est sans I/O. Elle valide le protocole, le commitment, le réseau et la représentation sûre provider/endpoint avant spawn.

Au runtime, la source réutilise exclusivement :

SolanaStandardWsSession::connect
SolanaStandardWsSession::block_subscribe

Configuration exacte :

encoding = Base64
transactionDetails = Full
maxSupportedTransactionVersion = 1
showRewards = false

Aucun client WebSocket direct, getBlock, getTransaction, reqwest, tokio-tungstenite, tonic ou SDK provider n'est ajouté au Worker.

Qualification RAW-direct

La version est fail-closed :

Legacy -> RawTransactionVersion::Legacy
0      -> RawTransactionVersion::Number(0)
1      -> RawTransactionVersion::Number(1)
>1     -> source.standard_block_transaction_version_unsupported
omise/null -> source.standard_block_transaction_version_unqualified

Le matériau direct conserve :

signature embarquée dans le wire Base64
slot
blockTime
meta
version qualifiée
transactionIndex dans le bloc

Les fixtures locales construisent et sérialisent des wires Legacy, V0 et V1 avec les types publics de ksp-raw-transaction-lib, puis vérifient le Common RAW canonique obtenu. La preuve V1 ne repose donc pas uniquement sur une étiquette version=1.

La parité historique blockSubscribe / getBlock Legacy reste déjà matérialisée dans ksp-job-backfill-lib/tests/ws_raw_parity.rs; pre.004 rejoue localement les matérialisations Legacy/V0 et ajoute la qualification V1.

block:null et formes ambiguës

Les cas suivants sont des fautes sûres avant progression de frontier :

context.slot différent du slot de notification
notification err non null
block null
transactions omitted/null
transaction non Base64
version omise/null/>1
signature embarquée invalide
transaction index non représentable en u32

block: null n'est jamais assimilé à un bloc vide ou à un slot traité. Le décodage Transport qui distingue block:null et err est conservé tel quel.

Pour un bloc non vide, le slot n'est enregistré settled qu'après l'admission réussie de toutes ses transactions. La voie RAW-direct n'incrémente pas hydration_pending; le processing frontier ne peut donc pas avancer transitoirement au milieu du traitement d'un même bloc et un stop/faute partiel ne devient jamais une progression.

Identité logique et redaction

Le source_key Standard Block est dérivé de :

domain KSP live-source v1
family = standard_block
network
safe provider identity
safe endpoint identity
commitment
private block-filter fingerprint

Les filtres All et MentionsAccountOrProgram(pubkey) sont distingués par empreinte privée. Le pubkey brut n'est pas recopié dans Debug, snapshot ou provenance textuelle.

Le bound global 1..32, l'invariant réseau unique et le rejet transactionnel des doublons de pre.002 s'appliquent à cette nouvelle famille.

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
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 Standard Block
source_key stable et filter-sensitive
redaction filtre/url/source-key
qualification exacte Legacy/V0/V1
rejet version omise/null/>1
wires Legacy/V0/V1 -> Common RAW direct avec signature/version/index exacts
rejet duplicate Standard Block identity

Canaris externes :

public_api : construction/composition depuis crate root
dependency_boundary : façade Transport seulement, sans fallback HTTP/direct network crate
hardening : block:null, erreurs, version, encoding et redaction explicites
release_completeness : export et canaris pre.004 obligatoires

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.004.md

Fichiers supprimés

aucun

Non-claims

pre.004 ne prétend pas :

Helius transactionSubscribe productif
HTTP live block polling
supervision simultanée de plusieurs sources
fanout Store d'observations multi-source
fallback HTTP getBlock/getTransaction pour Standard Block
RAW-direct pour version >1 ou version ambiguë
block:null considéré comme progression
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.004 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 et leurs résultats finaux sont consignés ci-dessous avant livraison.

Gate opérateur requis avant pre.005

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.005 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, 835 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 versionnés incrémentés exactement de +1
Cargo.toml hors header : uniquement workspace.package.version 0.3.13-pre.3.fix.3 -> 0.3.13-pre.4
aucune dépendance ajoutée, supprimée ou modifiée