# Delta `0.2.9-pre.008` — Yellowstone Blocks + block_meta + entry ## 1. Base et signal technique Base : `0.2.9-pre.007`, fermée sur gate opérateur intégralement vert. ```text workspace.package.version = 0.2.9-pre.8 ``` ## 2. Scope La tranche complète uniquement la dernière famille de filtres/updates standard avant l’ouverture bidi : Blocks, `block_meta` et `entry`. | Surface | Matérialisation | |----------------------------|-----------------| | filtre Blocks | complet | | `blocks_meta` | marker inchangé | | `entry` | marker inchangé | | `SubscribeUpdateBlock` | DTO + decode | | `SubscribeUpdateBlockMeta` | DTO + decode | | `SubscribeUpdateEntry` | DTO + decode | | stream bidi / lifecycle | OUT | | reconnect / replay | OUT | | PublicNode / Config V3 | OUT | | `SubscribeDeshred` | OUT `0.2.9` | ## 3. Filtre Blocks `YellowstoneSubscribeBlockFilter` matérialise exactement le wire courant : `account_include[]`, `include_transactions?`, `include_accounts?`, `include_entries?` et `cuckoo_account_include?`. Les account selectors utilisent `ksp_core_lib::Pubkey`, restent ordonnés et bornés ; `Debug` ne rend aucune adresse. ## 4. Updates Blocks `YellowstoneBlockUpdate` conserve la metadata de bloc, rewards, temps/hauteur optionnels, parent, compteurs et payloads optionnels. Les transactions réutilisent `YellowstoneTransactionInfo`, les comptes réutilisent `YellowstoneAccountInfo`, et les entries utilisent `YellowstoneEntryInfo`. `YellowstoneBlockMetaUpdate` conserve la variante metadata-only. `YellowstoneEntryUpdate` enveloppe la même `YellowstoneEntryInfo` réutilisée dans les blocs. `starting_transaction_index` reste explicite, y compris sa valeur legacy `0`. Les compteurs serveur sont indépendants des tailles de vecteurs : aucune égalité artificielle n’est imposée quand les flags `include_*` demandent l’omission d’un payload. ## 5. Validation et sécurité Les blockhash textuels sont bornés, trim-exacts et Base58-décodés vers exactement 32 octets ; les hash d’entrée sont exactement 32 octets. Les collections Block/Rewards sont bornées. `Debug` ne copie aucun blockhash, parent blockhash, reward pubkey, account selector, données account, transaction, instruction ou entry hash. Les conversions protobuf et décodeurs restent sous `#[cfg(test)]` jusqu’à l’ouverture du stream runtime en `pre.009`. ## 6. Tests/canaries ajoutés ```text block filter exact wire + redaction block update complet avec Transaction/Account/Entry réutilisés server counts distincts des payload-vector lengths block-meta optional states entry starting_transaction_index + malformed hash public API canary pre.008 release completeness canary pre.008 ``` ## 7. Gate opérateur ```bash cargo fmt --all python3 scripts/audit_rust_workspace_rules.py cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-onchain-transport-lib cargo test -p ksp-core-lib --test workspace_dependencies cargo test --workspace ``` Aucune dépendance ni feature Cargo n’est modifiée ; aucun `cargo tree` supplémentaire n’est requis.