Files
khadhroony-solana-project/deltas/0.2.9/pre.007.md
2026-08-24 14:10:57 +02:00

166 lines
5.6 KiB
Markdown

<!-- file: deltas/0.2.9/pre.007.md -->
<!-- version: 1 -->
# 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.