v0.3.13-pre.004
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md -->
|
||||
<!-- version: 3 -->
|
||||
<!-- version: 4 -->
|
||||
|
||||
# Plan v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source RawTransaction
|
||||
|
||||
@@ -512,6 +512,29 @@ Retry/reconnect/resubscribe : Transport WS.
|
||||
|
||||
Preuve : parité bytes/hash entre notification blockSubscribe et `getBlock`/fixture Common RAW pour Legacy/V0 puis V1 ; canari `block:null` ; unsupported validator explicite.
|
||||
|
||||
### 14.1 Décisions matérialisées en pre.004
|
||||
|
||||
`RawTransactionIngestStandardBlockSource` est caller-composed à partir d'un `WsEndpointSettings` `solana_standard`, d'un `SolanaBlockSubscribeFilter` et d'un commitment explicite `Confirmed` ou `Finalized`. Elle réutilise exclusivement `SolanaStandardWsSession` et son `block_subscribe`; aucun acteur WebSocket Worker parallèle n'est ajouté.
|
||||
|
||||
La requête runtime est figée à :
|
||||
|
||||
```text
|
||||
encoding = Base64
|
||||
transactionDetails = Full
|
||||
maxSupportedTransactionVersion = 1
|
||||
showRewards = false
|
||||
```
|
||||
|
||||
La tranche qualifie RAW-direct exactement `Legacy`, `V0` et `V1`. La preuve V1 est locale et déterministe : une fixture wire V1 est sérialisée avec les types publics de `ksp-raw-transaction-lib`, injectée dans le projecteur de bloc, puis comparée au Common RAW canonique attendu. Une version omise/nulle ou `>1` reste non qualifiée et produit une faute sûre. Aucun fallback HTTP `getBlock` ou `getTransaction` n'est inventé dans cette source.
|
||||
|
||||
Le matériau direct conserve la signature embarquée, le slot de notification, le `blockTime`, le `meta`, la version explicitement qualifiée et l'index de transaction dans le bloc. `block: null`, une erreur distante, un mismatch `context.slot`, un champ transactions omis/nul ou un encodage non Base64 échouent avant toute progression de frontier.
|
||||
|
||||
Pour un bloc de plusieurs transactions, le Worker ne projette le slot settled qu'après l'admission réussie de toutes ses transactions. La voie RAW-direct n'utilise pas le compteur `hydration_pending`; un stop ou une faute au milieu du bloc laisse la frontier en deçà du slot.
|
||||
|
||||
L'identité logique inclut la famille `standard_block`, le réseau, les identités provider/endpoint sûres, le commitment et une empreinte privée du filtre. La valeur brute d'un filtre `MentionsAccountOrProgram(pubkey)` ne sort pas dans `Debug` ou la provenance.
|
||||
|
||||
La barrière de `pre.002` reste active : une seule source Yellowstone, Standard Logs ou Standard Block peut être exécutée. Une collection `2..32` reste rejetée avant spawn jusqu'au supervisor `pre.007`.
|
||||
|
||||
## 15. Contrat source Helius transactionSubscribe
|
||||
|
||||
Entrée caller-composed :
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<!-- file: docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md -->
|
||||
<!-- version: 3 -->
|
||||
<!-- version: 4 -->
|
||||
|
||||
# Validation v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source
|
||||
|
||||
## 1. Rôle
|
||||
|
||||
Ce document enregistre les preuves réellement exécutées et les non-claims de `0.3.13`. `pre.001` ferme l'audit/planification, `pre.002` matérialise la composition runtime multi-source et `pre.003` ajoute la source productive Standard Solana `logsSubscribe` + hydration HTTP observée, sans activer encore la supervision simultanée.
|
||||
Ce document enregistre les preuves réellement exécutées et les non-claims de `0.3.13`. `pre.001` ferme l'audit/planification, `pre.002` matérialise la composition runtime multi-source, `pre.003` ajoute Standard Solana `logsSubscribe` + hydration HTTP observée et `pre.004` ajoute Standard Solana `blockSubscribe` RAW-direct qualifié Legacy/V0/V1, sans activer encore la supervision simultanée.
|
||||
|
||||
## 2. Archive stable contrôlée
|
||||
|
||||
@@ -811,3 +811,157 @@ cargo tree --duplicates
|
||||
```
|
||||
|
||||
`pre.004` ne doit pas commencer si une anomalie de format, règle, compilation, API, dépendance ou test apparaît.
|
||||
|
||||
## 35. Gate opérateur pre.003-fix.003 reçu avant pre.004
|
||||
|
||||
Le gate fourni par l'opérateur sur `0.3.13-pre.3.fix.3` est vert pour toutes les commandes exécutées :
|
||||
|
||||
```text
|
||||
cargo fmt --all : PASS
|
||||
cargo fmt --all -- --check : PASS, silencieux
|
||||
General Rust rule audit : clean
|
||||
Rust export completeness audit : 0 candidate
|
||||
KSP workspace Rust rule audit : clean
|
||||
Markdown table audit : clean (340 tables, 834 files)
|
||||
cargo check --workspace : PASS
|
||||
clippy workspace/all-targets/all-features -D warnings : PASS
|
||||
ksp-worker-raw-transaction-ingest-lib unit tests : 75 pass
|
||||
cross_layer_completeness : 4 pass
|
||||
dependency_boundary : 10 pass
|
||||
hardening : 17 pass
|
||||
public_api : 11 pass
|
||||
release_completeness : 4 pass
|
||||
worker doc-tests : 0
|
||||
```
|
||||
|
||||
Cette exécution ne contenait pas `cargo test -p ksp-onchain-transport-lib` ni les commandes `cargo tree`; aucune nouvelle affirmation n'est ajoutée pour ces commandes. Le gate Worker demandé après `pre.003-fix.003` est satisfait.
|
||||
|
||||
## 36. Implémentation pre.004 — Standard Block RAW-direct
|
||||
|
||||
`pre.004` ajoute `RawTransactionIngestStandardBlockSource` à l'agrégat runtime existant. La construction reste sans I/O et exige :
|
||||
|
||||
```text
|
||||
WsEndpointSettings kind solana_standard
|
||||
SolanaBlockSubscribeFilter
|
||||
SolanaCommitment Confirmed ou Finalized
|
||||
```
|
||||
|
||||
Au runtime, la source réutilise `SolanaStandardWsSession::connect` et `block_subscribe` avec :
|
||||
|
||||
```text
|
||||
encoding = Base64
|
||||
transactionDetails = Full
|
||||
maxSupportedTransactionVersion = 1
|
||||
showRewards = false
|
||||
```
|
||||
|
||||
Aucun `HttpTransportPool`, aucun `getBlock` HTTP et aucun second acteur WebSocket ne sont ajoutés à cette source.
|
||||
|
||||
## 37. Qualification RAW-direct et sûreté block:null
|
||||
|
||||
La projection accepte uniquement des versions explicitement qualifiées :
|
||||
|
||||
```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 Common RAW direct est construit à partir du wire Base64 de chaque transaction avec signature embarquée, slot, `blockTime`, `meta`, version et index de transaction. La fixture V1 locale sérialise un vrai `RawSolanaTransactionMessage::V1` par les types publics de `ksp-raw-transaction-lib` avant projection ; la tranche ne déduit donc pas V1 d'une simple étiquette.
|
||||
|
||||
Les gardes suivantes sont fail-closed avant progression de frontier :
|
||||
|
||||
```text
|
||||
context.slot != notification.slot
|
||||
notification.err != null
|
||||
block == null
|
||||
transactions omitted/null
|
||||
transaction non Base64
|
||||
version omise/null/>1
|
||||
signature embarquée invalide
|
||||
index usize non représentable en u32
|
||||
```
|
||||
|
||||
`block: null` n'est jamais traité comme bloc vide ou slot settled. Pour un bloc non vide, le slot n'est enregistré settled qu'après l'admission réussie de toutes ses transactions. La voie directe ne détourne pas `hydration_pending`; un arrêt ou une faute au milieu du bloc ne produit aucune progression transitoire.
|
||||
|
||||
## 38. Identité, redaction et composition pre.004
|
||||
|
||||
La clé logique Standard Block est dérivée de :
|
||||
|
||||
```text
|
||||
domain KSP live source key
|
||||
family = standard_block
|
||||
network
|
||||
safe provider identity
|
||||
safe endpoint identity
|
||||
commitment
|
||||
private block-filter fingerprint
|
||||
SHA-256 -> [u8; 32]
|
||||
```
|
||||
|
||||
`Debug` n'expose que des identités sûres, le type de filtre et les longueurs d'empreinte/clé. Un pubkey de `MentionsAccountOrProgram` n'est pas recopié. L'agrégat public gagne `from_standard_block_source` et `try_push_standard_block_source` avec les mêmes bornes `1..32`, invariant réseau unique et rejet transactionnel des doublons.
|
||||
|
||||
Une seule source reste productivement activable. Une collection `2..32` demeure `runtime_resources.multi_source_activation_pending` avant spawn jusqu'à `pre.007`.
|
||||
|
||||
## 39. Preuves déterministes ajoutées pre.004
|
||||
|
||||
Worker unit tests ajoutés couvrent :
|
||||
|
||||
```text
|
||||
validation protocol/commitment Standard Block
|
||||
source_key stable, filter-sensitive et redacted
|
||||
qualification exacte Legacy/V0/V1
|
||||
rejet version omise/null/>1
|
||||
fixture V1 wire -> matériau Common RAW direct exact
|
||||
rejet duplicate Standard Block identity
|
||||
```
|
||||
|
||||
Canaris externes ajoutés/étendus :
|
||||
|
||||
```text
|
||||
public_api : construction et composition Standard Block depuis crate root
|
||||
dependency_boundary : façade Transport uniquement, sans getBlock HTTP/direct network crate
|
||||
hardening : block:null/version/encoding/redaction explicites
|
||||
release_completeness : export et canaris pre.004 obligatoires
|
||||
```
|
||||
|
||||
## 40. Validations locales post-modification pre.004
|
||||
|
||||
Le toolchain Cargo/Rustfmt reste indisponible dans l'environnement d'assemblage. Les commandes Cargo post-`pre.004` sont donc `NON EXÉCUTÉ LOCAL`; seuls les audits statiques effectivement lancés sont déclarés PASS dans le delta de livraison.
|
||||
|
||||
## 41. Non-claims pre.004
|
||||
|
||||
`pre.004` ne prétend pas :
|
||||
|
||||
```text
|
||||
avoir ajouté Helius transactionSubscribe productif
|
||||
avoir ajouté HTTP live polling
|
||||
avoir activé plusieurs sources simultanément
|
||||
avoir implémenté le fanout d'observations Store multi-source
|
||||
avoir ajouté un fallback HTTP getBlock/getTransaction à Standard Block
|
||||
avoir étendu le RAW-direct à une version >1 ou ambiguë
|
||||
avoir transformé block:null en progression
|
||||
avoir ajouté une dépendance réseau directe au Worker
|
||||
avoir exécuté Cargo localement après modification
|
||||
```
|
||||
|
||||
## 42. Gate opérateur requis avant pre.005
|
||||
|
||||
Après application du delta :
|
||||
|
||||
```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 une anomalie de format, règle, compilation, API, dépendance ou test apparaît.
|
||||
|
||||
Reference in New Issue
Block a user