116 lines
4.1 KiB
Markdown
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.
|