# Delta `0.2.9-pre.007` — Yellowstone Transactions + `transaction_status` ## 1. Base et gate précédent Base exacte : ```text 0.2.9-pre.006 ``` Le gate opérateur `pre.006` est fermé : fmt/audit/check/Clippy/workspace PASS, Transport 364 unit + 45 public API + 39 release-completeness + 4 doctests, dependency canary Core 3/3 PASS. Version technique de cette tranche : ```text 0.2.9-pre.7 ``` Commit attendu après gate vert : ```text v0.2.9-pre.007 ``` Aucun tag Git stable n'est créé pour cette prerelease. ## 2. Objet de la tranche `pre.007` complète exclusivement les deux familles Yellowstone standard `transactions` et `transactions_status` du `SubscribeRequest`/`SubscribeUpdate` courant. Elle n'ouvre toujours pas le stream bidi runtime. Le proto publié `yellowstone-grpc-proto 12.6.0` a été réaudité avant implémentation. Le même `SubscribeRequestFilterTransactions` est utilisé par les deux maps et expose : ```text vote? failed? signature? account_include[] account_exclude[] account_required[] cuckoo_account_include? token_accounts? = ALL | BALANCE_CHANGED ``` ## 3. Contrat request KSP La tranche matérialise `YellowstoneSubscribeTransactionFilter` et les types associés : ```text YellowstoneTransactionSignatureSelector YellowstoneTokenAccountExpansion YellowstoneCuckooFilter réutilisé ``` La signature textuelle est : - non vide ; - bornée à 128 octets ; - strictement Base58 ; - décodée par KSP pour vérifier une largeur exacte de 64 octets ; - absente des diagnostics et du `Debug`. Les listes include/exclude/required conservent l'ordre d'insertion et réutilisent le bound déterministe des sélecteurs Accounts. Le Cuckoo transaction réutilise le contrat standard KSP déjà introduit en `pre.005`. ## 4. Updates et `solana-storage.proto` Les nouveaux DTOs KSP couvrent les variantes : ```text SubscribeUpdateTransaction SubscribeUpdateTransactionStatus ``` et projettent sans raw reexport upstream les structures utiles : ```text Transaction / Message / MessageHeader CompiledInstruction / MessageAddressTableLookup TransactionConfig V1 TransactionStatusMeta / TransactionError InnerInstructions / InnerInstruction TokenBalance / UiTokenAmount ReturnData / Reward ``` Le `Message.config` optionnel actuel est conservé avec : ```text priority_fee? compute_unit_limit? loaded_accounts_data_size_limit? heap_size? ``` `TransactionStatusMeta` conserve séparément les marqueurs legacy `inner_instructions_none`, `log_messages_none` et `return_data_none`, ainsi que les payloads correspondants. Les champs optionnels `compute_units_consumed` et `cost_units`, les loaded addresses, rewards et token balances sont également préservés. `TransactionError.err` reste un payload opaque borné ; KSP n'introduit aucun décodage JSON ou Program arbitraire. ## 5. Validation et sûreté Les décodeurs test-only vérifient notamment : | Élément | Politique `pre.007` | |------------------------------------------------------|----------------------------------------------------------------------------| | signatures wire | exactement 64 octets | | hash / account keys / loaded addresses / program ids | exactement 32 octets | | vecteurs transaction/meta | bornes KSP avant projection | | instruction / return-data payloads | bornés | | logs et textes provider | count/length bornés | | error bytes | opaques et bornés | | `Debug` | pas de signature, pubkey, log, instruction data ou error bytes arbitraires | Les conversions protobuf request et les décodeurs update restent `#[cfg(test)]` jusqu'à `pre.009`, premier consommateur runtime prévu lors de l'ouverture du stream bidi. ## 6. Frontières préservées Toujours hors `pre.007` : ```text Blocks + block_meta + entry pre.008 bidi/backpressure/Ping-Pong/shutdown pre.009 reconnect/replay/gaps/duplicates pre.010 Config V3 + PublicNode profiles pre.011 PublicNode live/compliance pre.012 SubscribeDeshred OUT 0.2.9 standard ``` Aucun provider N3 n'est ajouté. Aucune dépendance ni feature Cargo n'est modifiée. ## 7. Preuves ajoutées Tests Transport ajoutés : ```text transaction filter exact wire + redaction + Base58 width transaction update storage fixture + TransactionConfig V1 + meta transaction_status update + error + malformed signature public API root contract release-completeness exact scope ``` Compte cible après compilation : ```text Transport unit ~367 Transport public API 46 Transport release completeness 40 Transport doctests 4 ``` ## 8. Gate opérateur requis ```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 ``` Aucun `cargo tree` supplémentaire n'est requis : aucune dépendance ou feature ne change dans cette tranche.