Files
khadhroony-solana-project/deltas/0.2.6/pre.008.md
2026-08-21 11:36:28 +02:00

116 lines
4.1 KiB
Markdown

<!-- file: deltas/0.2.6/pre.008.md -->
<!-- version: 1 -->
# Delta `0.2.6-pre.008` — import natif Solana CLI JSON / Base58
## Base et version
- Base : `0.2.6-pre.007-fix.002`.
- Version Cargo : `0.2.6-pre.8`.
- Commit attendu : `v0.2.6-pre.008`.
- Aucun tag prerelease.
## Objet
Cette tranche matérialise l'import d'un keypair Solana externe vers un nouveau Wallet natif `.kspwallet` sans donner au frontend la propriété d'un chemin filesystem ni du contenu secret importé.
Les formats pris en charge sont les deux formats de transfert déjà possédés par `ksp-wallet-lib` :
- Solana CLI keypair JSON ;
- keypair Solana Base58 canonique.
## Picker natif backend-only
`tauri-plugin-dialog` est ajouté comme dépendance Rust workspace et initialisé par Wallet Desk. Le frontend ne dépend pas de `@tauri-apps/plugin-dialog` et aucune permission guest Dialog/FS n'est ajoutée.
Le frontend transmet uniquement le format attendu à `inspect_import_source`. Rust ouvre le picker natif, convertit la sélection en chemin local et ne renvoie jamais ce chemin par IPC.
Une annulation du picker est une sortie normale sans source staged.
## Staging borné et secret
`wallet_import.rs` lit uniquement un fichier régulier non-symlink et applique avant parsing les bornes publiques de `ksp-wallet-lib` :
- `KSPWALLET_TRANSFER_MAX_SOLANA_CLI_JSON_BYTES` ;
- `KSPWALLET_TRANSFER_MAX_BASE58_BYTES`.
Les octets sont conservés dans `Zeroizing<Vec<u8>>` côté Rust. La validation utilise `ksp-wallet-lib::inspect_wallet_transfer` et la projection frontend ne contient que :
- format ;
- Pubkey dérivée ;
- basename de la source.
Le parent du chemin, les octets du keypair et tout secret restent hors IPC/logs.
## Import vers `.kspwallet`
`import_wallet` consomme atomiquement la source staged et appelle `ksp-wallet-lib::import_wallet_transfer_v1` en mémoire. Le fichier destination :
- est dérivé uniquement de la racine Wallet effective possédée par Config et du filename root-scoped validé ;
- hérite des garanties no-clobber de Wallet ;
- reçoit un nouveau password OWNER et, optionnellement, un nouveau password VIEW ;
- peut recevoir alias et note initiale protégés ;
- conserve la même identité Solana que la source validée.
Après succès, le `WalletOwner` importé est conservé uniquement dans `AppState` et la session devient OWNER ouverte. La source staged est consommée et zéroïsée à sa destruction.
## Frontend
La vue `Create / Import` ajoute :
- sélection du format de transfert ;
- bouton d'ouverture du picker natif ;
- aperçu sûr basename / format / Pubkey ;
- filename `.kspwallet` destination ;
- alias optionnel ;
- password OWNER ;
- VIEW optionnel + password VIEW ;
- note initiale optionnelle ;
- action d'import.
Changer le format purge la projection et la source staged Rust. Après import ou erreur, les inputs sensibles et la projection de source sont purgés ; une nouvelle sélection native est nécessaire après un échec d'import.
## Sécurité / frontières
- aucun chemin source dans les DTO frontend ;
- aucun contenu keypair dans les DTO ou logs ;
- aucun accès filesystem guest ;
- aucun dialogue navigateur natif ;
- aucune dépendance npm Dialog ;
- le frontend ne choisit jamais la destination absolue ;
- `ksp-wallet-lib` reste propriétaire du décodage/import et de la publication no-clobber.
## Fichiers principaux
Ajouts :
- `crates/ksp-app-wallet-desk/src/wallet_import.rs` ;
- `crates/ksp-app-wallet-desk/unit_tests/wallet_import.rs` ;
- `deltas/0.2.6/pre.008.md`.
Modifications principales :
- dépendances/version workspace et Wallet Desk ;
- `AppState` pour staging/import ;
- commandes/plugins Tauri ;
- shell Create / Import et bindings frontend ;
- canaris desktop contract/security ;
- plan `0.2.6`, séquence fonctionnelle et roadmap.
## Validation opérateur attendue
```bash
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-app-wallet-desk
cargo test --workspace
KSP_WALLETS_DIRECTORY=var/wallet-desk-pre008 \
cargo tauri dev -c crates/ksp-app-wallet-desk/tauri.conf.json
```
Ne pas exécuter `cargo tauri build` dans cette tranche.