Files
2026-08-24 14:10:57 +02:00

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.