5.6 KiB
Delta 0.2.9-pre.007 — Yellowstone Transactions + transaction_status
1. Base et gate précédent
Base exacte :
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 :
0.2.9-pre.7
Commit attendu après gate vert :
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 :
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 :
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 :
SubscribeUpdateTransaction
SubscribeUpdateTransactionStatus
et projettent sans raw reexport upstream les structures utiles :
Transaction / Message / MessageHeader
CompiledInstruction / MessageAddressTableLookup
TransactionConfig V1
TransactionStatusMeta / TransactionError
InnerInstructions / InnerInstruction
TokenBalance / UiTokenAmount
ReturnData / Reward
Le Message.config optionnel actuel est conservé avec :
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 :
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 :
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 :
Transport unit ~367
Transport public API 46
Transport release completeness 40
Transport doctests 4
8. Gate opérateur requis
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.