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