v0.2.9-pre.008
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md -->
|
||||
<!-- version: 15 -->
|
||||
<!-- version: 16 -->
|
||||
|
||||
# Plan `0.2.9` — moteur Yellowstone gRPC + standard Solana + PublicNode
|
||||
|
||||
> **Statut : `0.2.9-pre.006` est fermée sur gate opérateur intégralement vert : fmt/audit/check/Clippy/workspace PASS, Transport 364 unit + 45 public API + 39 completeness + 4 doctests. `0.2.9-pre.007` est candidate et matérialise uniquement Transactions + `transaction_status` du `Subscribe` standard : filtres complets, signature Base58 décodée exactement sur 64 octets, Cuckoo/token-account expansion, DTOs transaction/meta complets et Transaction V1 `TransactionConfig`. Blocks restent `pre.008`; aucun stream bidi n’est encore ouvert.**
|
||||
> **Statut : `0.2.9-pre.007` est fermée sur gate opérateur intégralement vert : fmt/audit/check/Clippy/workspace PASS, Transport 367 unit + 46 public API + 40 completeness + 4 doctests. `0.2.9-pre.008` est candidate et complète uniquement Blocks + `block_meta` + `entry` du `Subscribe` standard : filtre Blocks courant complet, rewards/time/height, réutilisation des DTOs Transaction/Account, compteurs serveur indépendants des payloads optionnels et `starting_transaction_index`. Aucun stream bidi n’est encore ouvert ; lifecycle reste `pre.009`.**
|
||||
|
||||
## 1. Objet, base et état d'ouverture
|
||||
|
||||
@@ -928,10 +928,10 @@ pre.005 DONE — standard Solana : Accounts + Slots filters/updates
|
||||
pre.006 DONE — structure Transport : namespace privé HTTP explicite
|
||||
budget : 15–20 min ; gate opérateur final PASS 364/45/39/4 + workspace
|
||||
|
||||
pre.007 CANDIDATE — standard Solana : Transactions + transaction_status
|
||||
pre.007 DONE — standard Solana : Transactions + transaction_status
|
||||
budget : 15–20 min ; preuve : include/exclude/required/Cuckoo/token expansion + tx/meta + TransactionConfig V1
|
||||
|
||||
pre.008 standard Solana : Blocks + block_meta + entry
|
||||
pre.008 CANDIDATE — standard Solana : Blocks + block_meta + entry
|
||||
budget : 15–20 min ; preuve : counts/arrays/optional/oneof/payload bounds
|
||||
|
||||
pre.009 moteur partagé : bidi mutation + Ping/Pong + half-close + backpressure + shutdown
|
||||
@@ -1273,3 +1273,65 @@ Les marqueurs `inner_instructions_none`, `log_messages_none` et `return_data_non
|
||||
OUT de `pre.007` : Blocks/block_meta/entry, stream bidi/Ping-Pong, reconnect/replay, Config V3, PublicNode et `SubscribeDeshred`.
|
||||
|
||||
**Gate candidat :** audit statique clean ; compilation/Clippy/tests opérateur requis avant fermeture.
|
||||
|
||||
|
||||
## 23. Gate final `pre.007` — Transactions + `transaction_status`
|
||||
|
||||
Preuve opérateur du `2026-08-24` :
|
||||
|
||||
| Gate | Résultat final |
|
||||
|------------------------------------------|----------------|
|
||||
| `cargo fmt --all` | PASS |
|
||||
| audit Rust workspace | PASS / clean |
|
||||
| `cargo check --workspace` | PASS |
|
||||
| `cargo clippy --workspace --all-targets` | PASS |
|
||||
| Transport unit | 367/367 PASS |
|
||||
| Transport `public_api` | 46/46 PASS |
|
||||
| Transport `release_completeness` | 40/40 PASS |
|
||||
| Transport doctests | 4/4 PASS |
|
||||
| Core dependency canary | 3/3 PASS |
|
||||
| `cargo test --workspace` | PASS |
|
||||
|
||||
Le gate confirme la projection Transactions complète, incluant `TransactionConfig` V1 et les marqueurs legacy de `TransactionStatusMeta`, sans régression HTTP/WS et sans avancer Blocks ou bidi.
|
||||
|
||||
**Verdict : `pre.007` fermée.**
|
||||
|
||||
## 24. `pre.008` — Blocks + `block_meta` + `entry` candidate
|
||||
|
||||
Le proto `yellowstone-grpc-proto 12.6.0` est réaudité avant implémentation. `SubscribeRequestFilterBlocks` contient exactement `account_include[]`, `include_transactions?`, `include_accounts?`, `include_entries?` et `cuckoo_account_include?`. `blocks_meta` et `entry` conservent leurs filtres marqueurs vides.
|
||||
|
||||
La candidate matérialise :
|
||||
|
||||
```text
|
||||
request filter Blocks
|
||||
account_include[] ordonné et borné
|
||||
include_transactions?
|
||||
include_accounts?
|
||||
include_entries?
|
||||
cuckoo_account_include?
|
||||
|
||||
SubscribeUpdateBlock
|
||||
slot / blockhash / parent_slot / parent_blockhash
|
||||
rewards? + num_partitions?
|
||||
block_time? / block_height?
|
||||
executed_transaction_count
|
||||
transactions[] -> YellowstoneTransactionInfo réutilisé
|
||||
updated_account_count
|
||||
accounts[] -> YellowstoneAccountInfo réutilisé
|
||||
entries_count
|
||||
entries[] -> YellowstoneEntryInfo
|
||||
|
||||
SubscribeUpdateBlockMeta
|
||||
même metadata sans payloads transaction/account/entry
|
||||
|
||||
SubscribeUpdateEntry
|
||||
slot / index / num_hashes / hash[32]
|
||||
executed_transaction_count
|
||||
starting_transaction_index
|
||||
```
|
||||
|
||||
Les compteurs serveur ne sont volontairement pas comparés aux longueurs des vecteurs : les options `include_transactions`, `include_accounts` et `include_entries` permettent au serveur de rapporter les totaux tout en omettant les payloads correspondants. Les `blockhash`/`parent_blockhash` sont validés comme Base58 représentant 32 octets, et les hash d’entrée restent des 32 octets exacts. `Debug` n’expose aucun hash, account selector, reward pubkey ou payload imbriqué.
|
||||
|
||||
Les conversions request protobuf et décodeurs Block/BlockMeta/Entry restent `#[cfg(test)]` jusqu’à l’ouverture du stream runtime en `pre.009`. Aucun `SubscribeDeshred`, provider PublicNode, Config V3, Ping/Pong lifecycle ou reconnect n’entre dans cette tranche.
|
||||
|
||||
**Gate candidat :** audit statique clean ; compilation/Clippy/tests opérateur requis avant fermeture.
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md -->
|
||||
<!-- version: 16 -->
|
||||
<!-- version: 17 -->
|
||||
|
||||
# Validation `0.2.9` — moteur Yellowstone + standard Solana + PublicNode
|
||||
|
||||
> **Statut : `pre.006` est fermée sur gate opérateur intégralement vert : fmt/audit/check/Clippy/workspace PASS, Transport 364 unit + 45 public API + 39 completeness + 4 doctests. `0.2.9-pre.007` est candidate Transactions + `transaction_status` : filtre current complet, signature Base58 -> 64 octets, Cuckoo/token expansion, updates transaction/status et projection typée complète du `solana-storage.proto` courant incluant Transaction V1 `TransactionConfig`. Blocks restent `pre.008`; bidi reste `pre.009`.**
|
||||
> **Statut : `pre.007` est fermée sur gate opérateur intégralement vert : fmt/audit/check/Clippy/workspace PASS, Transport 367 unit + 46 public API + 40 completeness + 4 doctests. `0.2.9-pre.008` est candidate Blocks + `block_meta` + `entry` : filtre Blocks courant complet, metadata/rewards/time/height, payloads Transaction/Account réutilisés, Entry complète et compteurs serveur conservés indépendamment des payloads optionnels. Bidi reste `pre.009`.**
|
||||
|
||||
## 1. Autorités du gate
|
||||
|
||||
@@ -55,17 +55,17 @@ crate proto : 12.6.0
|
||||
|
||||
## 3. Matrice service `Geyser`
|
||||
|
||||
| RPC | Forme | Classification | Scope | Preuve cible | État |
|
||||
|-----------------------|-------|------------------------------------------------------|-------|-----------------------|------------------------------------------------------|
|
||||
| `Subscribe` | bidi | standard | IN | fixture locale + live | PARTIAL pre.005 Accounts/Slots / stream TODO pre.009 |
|
||||
| `SubscribeDeshred` | bidi | Triton extension/pré-exécution malgré présence proto | OUT | canari d'absence/API | OUT |
|
||||
| `SubscribeReplayInfo` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `Ping` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetLatestBlockhash` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetBlockHeight` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetSlot` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `IsBlockhashValid` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetVersion` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| RPC | Forme | Classification | Scope | Preuve cible | État |
|
||||
|-----------------------|-------|------------------------------------------------------|-------|-----------------------|-------------------------------------------------------|
|
||||
| `Subscribe` | bidi | standard | IN | fixture locale + live | PARTIAL pre.008 filters/updates / stream TODO pre.009 |
|
||||
| `SubscribeDeshred` | bidi | Triton extension/pré-exécution malgré présence proto | OUT | canari d'absence/API | OUT |
|
||||
| `SubscribeReplayInfo` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `Ping` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetLatestBlockhash` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetBlockHeight` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetSlot` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `IsBlockhashValid` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetVersion` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
|
||||
## 4. `SubscribeRequest` — coverage normative
|
||||
|
||||
@@ -409,8 +409,8 @@ pre.003 DONE TLS/metadata + fixture + 7 unary standard 15
|
||||
pre.004 DONE standard: Subscribe common/from_slot/bounds 15–20 min ; gate final fix.001 PASS
|
||||
pre.005 DONE standard: accounts + slots 15–20 min ; gate final fix.001 PASS
|
||||
pre.006 DONE structure: namespace privé HTTP `http_*` 15–20 min ; gate PASS
|
||||
pre.007 CANDIDATE standard: transactions + transaction_status 15–20 min
|
||||
pre.008 TODO standard: blocks + block_meta + entry 15–20 min
|
||||
pre.007 DONE standard: transactions + transaction_status 15–20 min ; gate PASS
|
||||
pre.008 CANDIDATE standard: blocks + block_meta + entry 15–20 min
|
||||
pre.009 TODO moteur: bidi/backpressure/half-close/shutdown 15–20 min
|
||||
pre.010 TODO moteur: reconnect/replay/gap/duplicate 15–20 min
|
||||
pre.011 TODO Config V3 + protocol/provider + profils PublicNode 15–20 min
|
||||
@@ -813,3 +813,53 @@ Le renommage est limité aux cinq modules dont l'ownership HTTP est sans ambigu
|
||||
Le proto 12.6.0 ajoute à la représentation de transaction le `Message.config` optionnel pour Transaction V1 / SIMD-0385 ; la candidate le conserve explicitement. Les marqueurs legacy `inner_instructions_none`, `log_messages_none` et `return_data_none` ne sont pas fusionnés avec leurs collections/messages.
|
||||
|
||||
**Verdict `pre.007` : candidate source prête ; fermeture après gate Cargo opérateur.**
|
||||
|
||||
|
||||
## 24. Gate final `pre.007`
|
||||
|
||||
| Gate | Résultat final |
|
||||
|------------------------------------------|----------------|
|
||||
| `cargo fmt --all` | PASS |
|
||||
| audit Rust workspace | PASS / clean |
|
||||
| `cargo check --workspace` | PASS |
|
||||
| `cargo clippy --workspace --all-targets` | PASS |
|
||||
| Transport unit | 367/367 PASS |
|
||||
| Transport `public_api` | 46/46 PASS |
|
||||
| Transport `release_completeness` | 40/40 PASS |
|
||||
| Transport doctests | 4/4 PASS |
|
||||
| Core dependency canary | 3/3 PASS |
|
||||
| `cargo test --workspace` | PASS |
|
||||
|
||||
**Verdict : `pre.007` fermée.**
|
||||
|
||||
## 25. Gate `pre.008` — Blocks + `block_meta` + `entry` candidate
|
||||
|
||||
| Surface / invariant | État candidate |
|
||||
|-------------------------------------------------------|----------------|
|
||||
| workspace version | `0.2.9-pre.8` |
|
||||
| Blocks `account_include[]` | SOURCE+TEST |
|
||||
| `include_transactions?` / `include_accounts?` | SOURCE+TEST |
|
||||
| `include_entries?` | SOURCE+TEST |
|
||||
| Cuckoo block account include | SOURCE+TEST |
|
||||
| `SubscribeUpdateBlock` | SOURCE+TEST |
|
||||
| rewards + `num_partitions?` | SOURCE+TEST |
|
||||
| block time / block height optionnels | SOURCE+TEST |
|
||||
| transactions réutilisent `YellowstoneTransactionInfo` | SOURCE+TEST |
|
||||
| accounts réutilisent `YellowstoneAccountInfo` | SOURCE+TEST |
|
||||
| compteurs serveur indépendants des payload vectors | SOURCE+TEST |
|
||||
| `SubscribeUpdateBlockMeta` | SOURCE+TEST |
|
||||
| `SubscribeUpdateEntry` + `starting_transaction_index` | SOURCE+TEST |
|
||||
| blockhash/parent blockhash Base58 -> 32 octets | SOURCE+TEST |
|
||||
| entry hash exactement 32 octets | SOURCE+TEST |
|
||||
| Debug sans hashes/sélecteurs/payloads imbriqués | SOURCE+TEST |
|
||||
| stream bidi / Ping-Pong / lifecycle | OUT pre.008 |
|
||||
| reconnect / replay | OUT pre.008 |
|
||||
| PublicNode / Config V3 | OUT pre.008 |
|
||||
| audit Rust workspace local | PASS / clean |
|
||||
| fmt/check/Clippy/tests | opérateur TODO |
|
||||
|
||||
Les `executed_transaction_count`, `updated_account_count` et `entries_count` sont conservés tels que fournis par le serveur ; ils ne sont pas forcés à égaler les tailles de `transactions[]`, `accounts[]` ou `entries[]`, car les trois flags `include_*` peuvent omettre ces payloads. Les messages imbriqués Transaction et Account réutilisent strictement les DTOs déjà introduits ; aucune seconde projection n’est créée.
|
||||
|
||||
Les helpers wire/decode restent test-only jusqu’au premier consommateur runtime en `pre.009`.
|
||||
|
||||
**Verdict `pre.008` : candidate source prête ; fermeture après gate Cargo opérateur.**
|
||||
|
||||
Reference in New Issue
Block a user