Files
khadhroony-solana-project/deltas/0.3.5/pre.003.md
2026-08-31 11:01:45 +02:00

194 lines
5.2 KiB
Markdown

<!-- file: deltas/0.3.5/pre.003.md -->
<!-- version: 1 -->
# Delta `0.3.5-pre.003` — `TransactionExecutionEvent`
## Base requise
```text
0.3.5-pre.2.fix.1
```
Le gate opérateur de cette base confirme les audits Rust, `cargo check --workspace`, Clippy, `cargo test -p ksp-interface-lib` et `cargo test -p ksp-program-api`. Le seul défaut restant est une double ligne vide dans `docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md`; conformément à la décision opérateur, cette correction documentaire est absorbée par le présent delta au lieu de créer un fix dédié.
## Version
Le delta modifie la surface Rust Interface. La version workspace devient :
```text
0.3.5-pre.3
```
## Mission
Fermer le gate dédié à `TransactionExecutionEvent` prévu par le plan corrigé de `0.3.5` : représentation de signature, convergence Solana/Yellowstone/Helius, anti-duplication Store et consumer concret doivent tous être démontrés avant création du type.
## Décision de gate
Le gate passe avec une projection strictement minimale :
```text
TransactionSignature([u8; 64])
TransactionExecutionOutcome {
Succeeded,
Failed,
}
TransactionExecutionEvent {
slot,
signature,
outcome,
}
```
La convergence retenue est :
```text
Solana logsSubscribe
context.slot + signature + err
Yellowstone TransactionStatus
slot + signature + err
Helius transactionSubscribe
slot + signature + résultat d'exécution seulement lorsque la forme/detail mode le rend déterminable
```
`err` n'est jamais copié dans Interface. Solana `err: null`, Yellowstone `err: None` et un Helius `err: null` explicitement disponible donnent `Succeeded`; une erreur explicite donne `Failed`.
Pour Helius, la projection est conservative : un `err` omis, une forme `none`, inconnue ou sans information d'erreur exploitable ne produit pas artificiellement un `TransactionExecutionEvent`.
## Signature
`TransactionSignature` possède exactement 64 octets déjà décodés.
Interface n'ajoute :
```text
aucun base58
aucun serde
aucun codec
aucune crate Solana/Anza supplémentaire
aucune capability Wallet de signature
```
Le `Debug` est redacted et ne rend jamais les bytes.
`ksp-store-api::RawTransactionSignature` reste Store-owned. Aucun alias/reexport/converter cross-domain n'est ajouté ; la future composition convertit explicitement les 64 octets si nécessaire.
## Ownership
Restent Transport-owned :
```text
Solana logs notification DTO
Yellowstone TransactionStatus DTO
Helius transactionSubscribe DTOs
commitment
subscription/filter metadata
transaction index
logs
memo
block time
confirmation status
provider timestamps
opaque transaction errors
```
Interface possède uniquement le fait passif commun.
## Consumer
Le futur worker RAW live peut utiliser `TransactionExecutionEvent` comme signal provider-neutral d'exécution observée et décider ensuite d'hydrater/persister un `RawTransaction` par sa propre composition/policy.
Le premier backfill historique `0.3.6` reste indépendant de cette API.
## Surface Rust
Ajouts crate-root :
```text
TransactionSignature
TransactionExecutionOutcome
TransactionExecutionEvent
```
`TransactionExecutionOutcome` est `#[non_exhaustive]`.
Les champs des structs restent privés et la surface ne possède ni runtime ni comportement réseau.
## Tests/canaris
Ajoutés :
```text
unit_tests/transaction_execution.rs
tests/transaction_execution_public_api.rs
```
Le canari `tests/release_completeness.rs` évolue pour figer :
```text
5 modules privés de production
11 reexports crate-root
transaction_execution comme seule nouvelle famille pre.003
absence de serde/tracing/Transport/Store dans la racine Interface
```
## Documentation
Le plan et la validation passent `TransactionExecutionEvent` de candidat actif à `ADMIS pre.003`.
`TransactionLogEvent` reste une idée différée distincte. `TransactionCommitmentEvent` reste non admis. Yellowstone `Entry` et les DTOs Helius restent Transport-owned même lorsqu'ils pourront contribuer à de futurs faits Interface réellement transversaux.
La double ligne vide signalée par le gate opérateur précédent est supprimée dans la validation.
## Fichiers
Modifiés :
```text
Cargo.toml
crates/ksp-interface-lib/src/lib.rs
crates/ksp-interface-lib/tests/release_completeness.rs
docs/plans/026-V0_3_5_INTERFACE_ACQUISITION_EVENTS_PLAN.md
docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md
```
Ajoutés :
```text
crates/ksp-interface-lib/src/transaction_execution.rs
crates/ksp-interface-lib/unit_tests/transaction_execution.rs
crates/ksp-interface-lib/tests/transaction_execution_public_api.rs
deltas/0.3.5/pre.003.md
```
Explicitement inchangés :
```text
crates/ksp-interface-lib/Cargo.toml
crates/ksp-onchain-transport-lib/**
crates/ksp-store-api/**
crates/ksp-store-lib/**
crates/ksp-store-postgres-lib/**
README.md
ROADMAP.md
CHANGELOG.md
```
## Gate opérateur
```text
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.5
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-interface-lib
cargo test -p ksp-program-api
```
Les gates Cargo ne sont pas déclarés réussis par l'environnement d'assemblage.