268 lines
8.7 KiB
Markdown
268 lines
8.7 KiB
Markdown
<!-- file: deltas/0.3.13/pre.004.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta 0.3.13-pre.004 — Standard Solana blockSubscribe RAW-direct qualifié
|
|
|
|
## Base requise
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
RawTransactionIngestStandardBlockSource
|
|
RawTransactionIngestRuntimeResources::from_standard_block_source
|
|
RawTransactionIngestRuntimeResources::try_push_standard_block_source
|
|
```
|
|
|
|
Construction caller-composed :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
SolanaStandardWsSession::connect
|
|
SolanaStandardWsSession::block_subscribe
|
|
```
|
|
|
|
Configuration exacte :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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` :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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
|
|
|
|
```text
|
|
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
|
|
|
|
```text
|
|
deltas/0.3.13/pre.004.md
|
|
```
|
|
|
|
## Fichiers supprimés
|
|
|
|
```text
|
|
aucun
|
|
```
|
|
|
|
## Non-claims
|
|
|
|
`pre.004` ne prétend pas :
|
|
|
|
```text
|
|
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
|
|
|
|
```bash
|
|
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
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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
|
|
```
|