v0.2.3-pre.002

This commit is contained in:
2026-08-18 11:13:04 +02:00
parent d06284fca2
commit 1ccf11bcc1
15 changed files with 2130 additions and 12 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md -->
<!-- version: 2 -->
<!-- version: 3 -->
# Plan `0.2.3` — HTTP Transactions
@@ -314,13 +314,18 @@ Cette API legacy doit être nommée/annotée de manière à ne pas sembler être
Le résultat confirmé garde un top-level typé :
```text
slot u64
blockTime Option<i64>
transaction EncodedTransaction
meta Option<transaction-meta wire>
version legacy | number
slot u64
blockTime Option<i64>
transaction EncodedTransaction
meta absent | null | transaction-meta wire
version absent | null | legacy | number
transactionIndex absent | null | u32
```
Le recoupement d'implémentation `pre.002` avec `transaction-status-client-types` Agave `v4.2.1` a confirmé que
`EncodedConfirmedTransactionWithStatusMeta` expose également `transactionIndex: Option<u32>` au top-level de `getTransaction`. Cette extension
optionnelle est donc préservée comme celle de `getSignaturesForAddress`, sans être rendue obligatoire pour les providers plus anciens.
`EncodedTransaction` doit préserver les différentes formes réellement sérialisées :
```text
@@ -335,6 +340,10 @@ sont riches, évolutives ou dépendantes de `jsonParsed` peuvent rester lossless
Le meta doit au minimum respecter la distinction **absent/null/présent** imposée par le wire et ne jamais inventer des listes ou zéros lorsque le
provider omet une donnée optionnelle.
`pre.002` matérialise cette distinction avec une primitive générique `SolanaWireField<T>` limitée au wire Transport : `Omitted`, `Null`, `Value(T)`.
Elle est utilisée pour les champs Transaction/Simulation où l'omission et `null` doivent rester distinguables ; elle ne transforme pas ce mécanisme
en modèle métier et ne remplace pas `Option<T>` lorsque les deux états ont le même sens contractuel.
### `getRecentPrioritizationFees`
Le paramètre optionnel est un tableau d'adresses. La documentation actuelle fixe un maximum de **128** et précise que, lorsqu'il est fourni, les
@@ -634,3 +643,18 @@ Aucune commande n'est déclarée réussie sans exécution réelle ou preuve opé
- découpage `pre.002``pre.008` défini.
La tranche suivante peut commencer par les primitives wire communes sans réouvrir le scope de release.
## Résultat de `pre.002`
`pre.002` installe les primitives/configurations/résultats partagés sans déclarer un wrapper Transaction comme terminé :
- encodings Transaction séparés entre entrées binaires `base58/base64` et surface `getTransaction` incluant les formes JSON/legacy ;
- configs modernes de `getTransaction`, pagination signatures, statuses, airdrop, send et simulation ;
- DTOs `latestBlockhash`, prioritization fee, signature info/status, transaction encodée/versionnée et résultat de simulation ;
- primitive `SolanaWireField<T>` pour préserver explicitement `omitted/null/value` ;
- `transactionIndex` préservé sur `getSignaturesForAddress` et sur le top-level `getTransaction` courant ;
- transaction/meta/return data/inner instructions/token balances riches conservés losslessly aux frontières prévues sans décodage Program ;
- fixtures communes déterministes pour les variantes legacy/binary/JSON, version/meta/index et simulation riche ;
- aucune nouvelle dépendance Cargo et aucun wrapper `0.2.3` activé prématurément.
La tranche suivante reste `pre.003` : `getFeeForMessage`, `getLatestBlockhash`, `getTransactionCount` et `isBlockhashValid`.