202 lines
6.0 KiB
Markdown
202 lines
6.0 KiB
Markdown
<!-- file: deltas/0.2.3/pre.002-fix.001.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta `0.2.3-pre.002-fix.001` — Clippy et helpers wire préparatoires
|
|
|
|
## Base requise
|
|
|
|
Ce correctif s'applique après :
|
|
|
|
```text
|
|
0.2.3-pre.002
|
|
workspace.package.version = "0.2.3-pre.2"
|
|
```
|
|
|
|
Le commit de livraison attendu pour la base est :
|
|
|
|
```text
|
|
v0.2.3-pre.002
|
|
```
|
|
|
|
## Motif du fix
|
|
|
|
Les validations opérateur du 2026-08-18 ont établi :
|
|
|
|
```text
|
|
cargo fmt --all OK
|
|
cargo check --workspace OK avec warnings dead_code
|
|
cargo clippy --workspace --all-targets ÉCHEC
|
|
cargo test -p ksp-onchain-transport-lib OK
|
|
```
|
|
|
|
Le test Transport a confirmé :
|
|
|
|
```text
|
|
145 unit tests OK
|
|
14 public API tests OK
|
|
8 release completeness OK
|
|
1 smoke Devnet ignored / opt-in
|
|
0 échec
|
|
```
|
|
|
|
Le défaut bloquant est `clippy::implicit-return` dans la sérialisation des adresses de `SolanaSimulationAccountsConfig` :
|
|
|
|
```text
|
|
.map(|address| address.to_string())
|
|
```
|
|
|
|
La policy Clippy du workspace exige un `return` explicite y compris dans cette closure.
|
|
|
|
La même validation a aussi révélé 28 warnings `dead_code` sur les helpers `pub(crate)` / privés préparés par `pre.002` pour les futurs wrappers Transactions. Ces helpers sont exercés par les tests unitaires de `pre.002`, mais n'ont volontairement encore aucun caller dans la bibliothèque non-test puisque les wrappers ne commencent qu'en `pre.003`.
|
|
|
|
Le fix traite les deux problèmes avant d'ouvrir `pre.003`.
|
|
|
|
## Version technique
|
|
|
|
Ce correctif modifie une source Rust de production et une source Rust de test. Conformément au signal technique KSP :
|
|
|
|
```text
|
|
0.2.3-pre.2 -> 0.2.3-pre.2.fix.1
|
|
```
|
|
|
|
Le header du `Cargo.toml` passe de `version: 121` à `version: 122`.
|
|
|
|
Le commit de livraison attendu est :
|
|
|
|
```text
|
|
v0.2.3-pre.002-fix.001
|
|
```
|
|
|
|
## Correction `clippy::implicit-return`
|
|
|
|
La conversion des adresses de simulation n'utilise plus une closure `map` dont la dernière expression constitue un retour implicite.
|
|
|
|
La construction devient volontairement explicite :
|
|
|
|
```rust
|
|
let mut addresses = std::vec::Vec::with_capacity(self.addresses.len());
|
|
for address in &self.addresses {
|
|
addresses.push(serde_json::Value::String(address.to_string()));
|
|
}
|
|
```
|
|
|
|
Le wire produit reste strictement identique : tableau JSON de pubkeys en chaînes, dans l'ordre fourni par le caller.
|
|
|
|
## Helpers préparatoires et `dead_code`
|
|
|
|
`pre.002` doit installer les contrats partagés et prouver les formes wire avant que les wrappers ne soient activés. Il ne doit cependant pas injecter dans la build normale une collection de fonctions privées sans caller pendant plusieurs prereleases.
|
|
|
|
Les helpers strictement internes suivants sont donc compilés uniquement sous `#[cfg(test)]` tant qu'un wrapper réel ne les consomme pas :
|
|
|
|
- parsing interne `SolanaTransactionBinaryEncoding::from_wire` ;
|
|
- `is_empty` / `to_json_value` des configs Transaction ;
|
|
- `decode_wire` des résultats partagés ;
|
|
- helpers privés de décodage Transaction ;
|
|
- DTOs `Wire*` privés utilisés par ces décodeurs.
|
|
|
|
Cette décision ne retire **aucun type public**, getter public, enum public ou contrat public installé par `pre.002`.
|
|
|
|
Elle n'ajoute pas non plus de `#[allow(dead_code)]` : le lint reste actif et continue donc de détecter une vraie régression de code inutilisé.
|
|
|
|
À partir de `pre.003`, chaque tranche rendra disponible hors `#[cfg(test)]` uniquement le sous-ensemble de helpers effectivement utilisé par les wrappers introduits dans cette tranche. Les helpers des méthodes plus tardives restent test-only jusqu'à leur intégration effective.
|
|
|
|
## Couverture complémentaire des configs
|
|
|
|
Les deux helpers `is_empty` qui restaient inutilisés même dans la build de tests sont désormais couverts explicitement :
|
|
|
|
```text
|
|
SolanaSignatureStatusesConfig::is_empty
|
|
SolanaRequestAirdropConfig::is_empty
|
|
```
|
|
|
|
Les tests vérifient les états non vides et `Default` vide, sans modifier les contrats ni les fixtures.
|
|
|
|
## Contrats inchangés
|
|
|
|
Le correctif ne change pas :
|
|
|
|
- les 19 types publics Transactions installés par `pre.002` ;
|
|
- leurs constructeurs/getters publics ;
|
|
- `SolanaWireField<T>` et la distinction `Omitted / Null / Value` ;
|
|
- les encodings Transaction ;
|
|
- les 7 fixtures JSON ;
|
|
- le plan `010` version 3 ;
|
|
- la partition des 11 méthodes `0.2.3` ;
|
|
- les classes de sécurité `8 Read / 2 WriteSubmission / 1 Simulation` ;
|
|
- les descriptors centraux ;
|
|
- la policy no-resend ;
|
|
- les dépendances ;
|
|
- la frontière Transport -> Config/Store/Program/tracing ;
|
|
- l'absence de wrapper Transaction typed-complete avant `pre.003`.
|
|
|
|
Aucun fichier historique `pre.002.md` n'est réécrit.
|
|
|
|
## Fichiers modifiés
|
|
|
|
```text
|
|
Cargo.toml
|
|
crates/ksp-onchain-transport-lib/src/rpc_transactions.rs
|
|
crates/ksp-onchain-transport-lib/unit_tests/rpc_transactions.rs
|
|
```
|
|
|
|
Headers Rust :
|
|
|
|
```text
|
|
rpc_transactions.rs version 1 -> 2
|
|
unit_tests/rpc_transactions.rs version 1 -> 2
|
|
```
|
|
|
|
## Fichier ajouté
|
|
|
|
```text
|
|
deltas/0.2.3/pre.002-fix.001.md
|
|
```
|
|
|
|
## Dépendances
|
|
|
|
Aucune dépendance ajoutée, supprimée ou modifiée.
|
|
|
|
La décision `pre.001` reste inchangée :
|
|
|
|
```text
|
|
base64 NON
|
|
bs58 NON
|
|
wincode NON
|
|
solana-client NON
|
|
crate RPC SDK NON
|
|
```
|
|
|
|
## Validations à rejouer
|
|
|
|
```bash
|
|
cargo fmt --all
|
|
cargo check --workspace
|
|
cargo clippy --workspace --all-targets
|
|
cargo test -p ksp-onchain-transport-lib
|
|
```
|
|
|
|
Résultat attendu :
|
|
|
|
```text
|
|
cargo check : aucun warning dead_code issu de rpc_transactions.rs
|
|
cargo clippy : 0 erreur et aucun warning dead_code/implicit-return issu de rpc_transactions.rs
|
|
Transport : 145 unit tests + 14 public API + 8 release completeness, 0 échec
|
|
smoke Devnet : toujours ignored sauf opt-in explicite
|
|
```
|
|
|
|
Aucune validation du fix lui-même n'est déclarée réussie sans exécution réelle sur le dépôt opérateur.
|
|
|
|
## Suite
|
|
|
|
Après validation et commit de `v0.2.3-pre.002-fix.001`, reprendre la tranche planifiée :
|
|
|
|
```text
|
|
0.2.3-pre.003
|
|
getFeeForMessage
|
|
getLatestBlockhash
|
|
getTransactionCount
|
|
isBlockhashValid
|
|
```
|
|
|
|
`pre.003` devra sortir de `#[cfg(test)]` uniquement les sérialiseurs/décodeurs réellement nécessaires à ces quatre wrappers.
|