v0.2.3-pre.001
This commit is contained in:
205
deltas/0.2.3/pre.001.md
Normal file
205
deltas/0.2.3/pre.001.md
Normal file
@@ -0,0 +1,205 @@
|
||||
<!-- file: deltas/0.2.3/pre.001.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.2.3-pre.001` — réaudit HTTP Transactions, sécurité et sizing
|
||||
|
||||
## Base requise
|
||||
|
||||
Release stable attendue :
|
||||
|
||||
```text
|
||||
v0.2.2
|
||||
```
|
||||
|
||||
L'archive KSP fournie porte `workspace.package.version = "0.2.2"`. Elle ne contient pas `.git`; le tag `v0.2.2` n'est donc pas revérifiable
|
||||
localement depuis le zip.
|
||||
|
||||
## Objectif
|
||||
|
||||
Exécuter la première tranche obligatoire de `0.2.3` sans implémentation fonctionnelle lourde : relire les contrats KSP, réauditer la surface
|
||||
HTTP Solana officielle actuelle, confirmer la matrice des 11 méthodes Transactions, vérifier les règles de sécurité Read/WriteSubmission/Simulation,
|
||||
cadrer les DTOs et formes wire, réévaluer les dépendances d'encodage et trancher le gate de sizing.
|
||||
|
||||
## Version Cargo
|
||||
|
||||
Conformément à `VER-ID-009`, la prerelease non-fix synchronise le signal technique :
|
||||
|
||||
```text
|
||||
0.2.2 -> 0.2.3-pre.1
|
||||
```
|
||||
|
||||
Aucune source Rust, dépendance Cargo ou configuration runtime n'est modifiée dans cette tranche.
|
||||
|
||||
## Résultats principaux
|
||||
|
||||
- index HTTP Solana courant réaudité : **52 méthodes courantes** ;
|
||||
- navigation Deprecated officielle : **14 méthodes historiques**, inchangées ;
|
||||
- les 11 méthodes affectées à `HttpRpcCoverageRelease::V0_2_3` restent exactement :
|
||||
`getFeeForMessage`, `getLatestBlockhash`, `getRecentPrioritizationFees`, `getSignaturesForAddress`, `getSignatureStatuses`, `getTransaction`,
|
||||
`getTransactionCount`, `isBlockhashValid`, `requestAirdrop`, `sendTransaction`, `simulateTransaction` ;
|
||||
- la partition KSP reste donc `0.2.1 = 4`, `0.2.2 = 22`, `0.2.3 = 11`, `0.2.4 = 15` sans avancement prématuré ;
|
||||
- la classification centrale reste correcte : **8 Read / RetrySafe**, **2 WriteSubmission / NeverAfterDispatch** (`requestAirdrop`, `sendTransaction`),
|
||||
**1 Simulation / RetrySafe** (`simulateTransaction`) ;
|
||||
- `sendTransaction.maxRetries` reste une option RPC de retry côté nœud et ne doit jamais être confondue avec la retry policy HTTP KSP ;
|
||||
- un résultat ambigu après dispatch d'une WriteSubmission (`timeout`, rupture après envoi, HTTP temporaire après dispatch ou équivalent) interdit toute
|
||||
resoumission automatique par KSP ;
|
||||
- `getFeeForMessage` transporte un message encodé en base64 et retourne un `RpcResponse` dont la valeur fee est nullable ;
|
||||
- `getLatestBlockhash` conserve `blockhash` + `lastValidBlockHeight` sous contexte ;
|
||||
- `getRecentPrioritizationFees` conserve un tableau optionnel d'adresses, borné à **128** par la documentation/runtime courant, et un résultat ordonné
|
||||
de couples `slot/prioritizationFee` ;
|
||||
- `getSignaturesForAddress` conserve `before/until/limit`, `minContextSlot`, l'ordre newest-to-oldest et une limite runtime **1..=1000** ;
|
||||
- la source Agave courante expose aussi `transactionIndex` comme champ optionnel de la structure de signature ; le wire KSP ne doit pas le perdre ;
|
||||
- `getSignatureStatuses` conserve une cardinalité maximale de **256**, `searchTransactionHistory`, l'ordre positionnel des résultats et les `null`
|
||||
documentés ; la source Agave courante n'interdit pas un tableau d'entrée vide ;
|
||||
- `getTransaction` conserve l'objet de config moderne (`commitment`, `encoding`, `maxSupportedTransactionVersion`) et la forme legacy du second paramètre
|
||||
`encoding` uniquement pour compatibilité, explicitement non recommandée ; son résultat reste nullable et doit préserver les formes transaction/meta/version
|
||||
sans imposer un modèle Program métier ;
|
||||
- `requestAirdrop` reste une soumission malgré son rôle de faucet : une signature retournée ou une issue réseau ambiguë n'autorise aucun resend aveugle ;
|
||||
- `sendTransaction` ne construit ni ne signe la transaction : Transport transmet une transaction déjà construite/signée et préserve les options RPC ;
|
||||
- `simulateTransaction` reste retry-safe, accepte `base58`/`base64` côté runtime courant, et `sigVerify=true` est incompatible avec
|
||||
`replaceRecentBlockhash=true` ;
|
||||
- le résultat courant de simulation comporte de nombreux champs optionnels (`logs`, `accounts`, unités consommées, return data, inner instructions,
|
||||
replacement blockhash, fee, balances, token balances, loaded addresses) qui doivent être préservés sans décodage Program.
|
||||
|
||||
## Gate de sizing
|
||||
|
||||
Question obligatoire :
|
||||
|
||||
```text
|
||||
Les 11 wrappers Transactions, leurs DTOs/wires, les règles write/simulation, les tests et la documentation peuvent-ils être clôturés proprement dans cette session ?
|
||||
```
|
||||
|
||||
Réponse :
|
||||
|
||||
```text
|
||||
OUI.
|
||||
```
|
||||
|
||||
Aucun split de release n'est nécessaire. Le volume est inférieur à `0.2.2`, mais trois fils restent volontairement isolés : `getTransaction`, les
|
||||
WriteSubmission/no-resend et `simulateTransaction`. Si une tranche réelle dépasse le budget KSP d'environ 15–20 minutes, une prerelease
|
||||
supplémentaire sera créée dans `0.2.3` sans déplacer silencieusement une méthode vers `0.2.4`.
|
||||
|
||||
## Décision dépendances et encodages
|
||||
|
||||
Aucune nouvelle dépendance n'est ajoutée à `pre.001` :
|
||||
|
||||
```text
|
||||
base64 NON
|
||||
bs58 NON
|
||||
wincode NON
|
||||
solana-client NON
|
||||
crate RPC/SDK Solana haut niveau NON
|
||||
```
|
||||
|
||||
Transport peut préserver les messages/transactions sérialisés sous forme de chaînes accompagnées d'un enum d'encodage typé. Les validations locales
|
||||
retenues sont celles qui n'exigent pas de désérialiser la transaction : cardinalités, limites fixes, variantes d'encodage/config autorisées et
|
||||
incompatibilités de paramètres.
|
||||
|
||||
Ajouter uniquement `base64`/`bs58` ne suffirait pas à reproduire correctement les validations runtime actuelles, qui comprennent aussi limites de taille,
|
||||
désérialisation de message/transaction, versioning et sanitization. Tant qu'aucun besoin KSP concret n'exige ce décodage local, ces contrôles restent la
|
||||
responsabilité du runtime RPC. Toute future dépendance d'encodage devra être justifiée par un invariant KSP précis et testable.
|
||||
|
||||
## Prévision de travail
|
||||
|
||||
```text
|
||||
pre.001 audit officiel + matrice + sécurité + DTOs/wire + dépendances + sizing
|
||||
pre.002 primitives/configs/results Transactions partagés + fixtures communes
|
||||
pre.003 reads contextuels : fee/message, latest blockhash, transaction count, blockhash validity
|
||||
pre.004 prioritization fees + signatures for address + signature statuses
|
||||
pre.005 getTransaction moderne + compatibilité legacy + transaction/meta/version wire
|
||||
pre.006 requestAirdrop + sendTransaction + preuves end-to-end no-resend
|
||||
pre.007 simulateTransaction + résultat riche + invariants de config
|
||||
pre.008 réaudit final + canaries + smoke opt-in pertinent + README/USAGE + validation + prompt 0.2.4
|
||||
```
|
||||
|
||||
Une prerelease supplémentaire reste autorisée si le budget réel d'une tranche l'exige.
|
||||
|
||||
## Fichiers ajoutés
|
||||
|
||||
```text
|
||||
docs/plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md
|
||||
deltas/0.2.3/pre.001.md
|
||||
```
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
ROADMAP.md
|
||||
docs/000-README.md
|
||||
docs/plans/000-README.md
|
||||
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
|
||||
```
|
||||
|
||||
`docs/000-README.md` synchronise aussi son arbre de validation avec le fichier `docs/validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md` déjà
|
||||
présent dans la release stable mais omis de cet index.
|
||||
|
||||
## Fichiers supprimés
|
||||
|
||||
Aucun.
|
||||
|
||||
## Fichiers volontairement inchangés
|
||||
|
||||
```text
|
||||
CHANGELOG.md
|
||||
docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md
|
||||
docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md
|
||||
docs/validation/003-V0_2_1_ONCHAIN_HTTP.md
|
||||
docs/validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md
|
||||
crates/ksp-onchain-transport-lib/README.md
|
||||
crates/ksp-onchain-transport-lib/USAGE.md
|
||||
crates/ksp-onchain-transport-lib/src/**
|
||||
crates/ksp-onchain-transport-lib/unit_tests/**
|
||||
crates/ksp-onchain-transport-lib/tests/**
|
||||
```
|
||||
|
||||
Les anciens deltas restent historiques et ne sont pas réécrits.
|
||||
|
||||
## Validations exécutées
|
||||
|
||||
- relecture des sources KSP obligatoires du prompt `0.2.3` ;
|
||||
- inspection de l'archive stable KSP fournie et de la surface Transport `0.2.2` ;
|
||||
- confirmation locale que le registry expose toujours `52 current / 14 historical` et partitionne les releases `4 / 22 / 11 / 15` ;
|
||||
- confirmation locale que les 11 descriptors `V0_2_3` se répartissent `8 Read/RetrySafe + 2 WriteSubmission/NeverAfterDispatch + 1 Simulation/RetrySafe` ;
|
||||
- inspection de `execute_standard_rpc`, du mapping de dispatch et de la retry policy centrale pour confirmer l'arrêt après dispatch ambigu d'une
|
||||
WriteSubmission ;
|
||||
- consultation de l'index HTTP Solana officiel courant, de `Solana RPC JSON Structures` et des 11 pages Transactions ;
|
||||
- consultation de la navigation Deprecated officielle courante ;
|
||||
- consultation des sources primaires Agave liées par la documentation HTTP et cross-audit du tag `v4.2.1` pour configs, cardinalités, unions wire,
|
||||
champs optionnels, simulation et validations runtime ;
|
||||
- confirmation du maintien de la compatibilité legacy `getTransaction` sans la présenter comme forme recommandée ;
|
||||
- contrôle de l'absence de nouvelle dépendance d'encodage/RPC dans `Cargo.toml` et dans le manifest Transport ;
|
||||
- contrôle que `pre.001` ne modifie aucune source/test Rust ni `CHANGELOG.md`.
|
||||
|
||||
## Validations non exécutées
|
||||
|
||||
Le sandbox courant ne fournit pas le binaire `cargo` (`command -v cargo` ne retourne aucun chemin). Les validations Cargo suivantes n'ont donc pas
|
||||
été exécutées ici et doivent être rejouées sur le checkout de développement avant commit :
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
cargo test -p ksp-onchain-transport-lib
|
||||
```
|
||||
|
||||
Aucun `cargo tree` n'est nécessaire dans cette tranche car aucune dépendance ni feature n'a changé. Les quatre vues `cargo tree` du prompt restent
|
||||
obligatoires à la clôture de `0.2.3` et lors de toute prerelease qui modifierait une dépendance/feature.
|
||||
|
||||
L'archive KSP fournie ne contient pas `.git`; le commit attendu après application et validations suit `VER-GIT-001` :
|
||||
|
||||
```text
|
||||
v0.2.3-pre.001
|
||||
```
|
||||
|
||||
## Questions ouvertes
|
||||
|
||||
Aucune question bloquante pour `pre.002`.
|
||||
|
||||
Les noms Rust définitifs des DTOs restent ajustables pendant l'implémentation, mais les invariants wire, cardinalités, compatibilités et frontières de
|
||||
sécurité fixés par le plan `010` ne doivent pas être relâchés pour simplifier artificiellement les wrappers.
|
||||
|
||||
## Suite
|
||||
|
||||
`0.2.3-pre.002` : introduire les primitives/configs/results Transactions partagés et les fixtures déterministes communes avant les premiers wrappers
|
||||
Transactions.
|
||||
Reference in New Issue
Block a user