Files
khadhroony-solana-project/deltas/0.2.3/pre.002-fix.001.md

6.0 KiB

Delta 0.2.3-pre.002-fix.001 — Clippy et helpers wire préparatoires

Base requise

Ce correctif s'applique après :

0.2.3-pre.002
workspace.package.version = "0.2.3-pre.2"

Le commit de livraison attendu pour la base est :

v0.2.3-pre.002

Motif du fix

Les validations opérateur du 2026-08-18 ont établi :

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é :

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 :

.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 :

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 :

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 :

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 :

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

Cargo.toml
crates/ksp-onchain-transport-lib/src/rpc_transactions.rs
crates/ksp-onchain-transport-lib/unit_tests/rpc_transactions.rs

Headers Rust :

rpc_transactions.rs             version 1 -> 2
unit_tests/rpc_transactions.rs  version 1 -> 2

Fichier ajouté

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 :

base64         NON
bs58           NON
wincode        NON
solana-client  NON
crate RPC SDK  NON

Validations à rejouer

cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-onchain-transport-lib

Résultat attendu :

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 :

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.