166 lines
5.6 KiB
Markdown
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.
|