2.9 KiB
Delta 0.2.6-pre.012 — export OWNER Solana CLI JSON / Base58
Objet
Exposer dans Wallet Desk l'export explicite OWNER de la keypair Solana vers un fichier externe, en réutilisant WalletOwner::export_transfer_file et le plugin Dialog déjà installé, sans jamais projeter le secret ou le chemin complet vers le frontend.
Changements
workspace.package.versionpasse à0.2.6-pre.12;- extraction de
WalletTransferFormatDtodanswallet_transfer.rs, contrat partagé import/export sans changement des codes wire ; - ajout de
wallet_export.rs:WalletExportRequestDtocontient uniquement le format ;WalletExportResultDtocontient uniquementwallet_id, format et basename de destination ;- nom de fichier proposé déterministe
*-solana-keypair.{json|txt};
- ajout de
export_wallet_transfer:- OWNER-only ;
- vérification OWNER avant ouverture du picker ;
blocking_save_fileexécuté uniquement dans la commande Tauri async ;- chemin sélectionné conservé uniquement côté Rust ;
- délégation à
WalletOwner::export_transfer_file; - no-clobber hérité de
ksp-wallet-lib; - session OWNER restaurée après succès ou erreur non conflictuelle ;
- UI Security :
- choix Solana CLI JSON / Base58 ;
- modal Bootstrap explicite avant export d'une keypair non chiffrée ;
- save picker natif ouvert depuis Rust ;
- statut final limité au basename ;
- aucun export texte/clipboard ;
- domaine de log dédié
wallet.export; - le
shell_phaseest réaligné surpre.012-owner-transfer-export; - badge/footer Wallet Desk réalignés sur
pre.012; - canaries contract/security et unit tests ajoutés ;
ROADMAP.md,CHANGELOG.mdetdocs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.mdrestent inchangés.
Sécurité
Le frontend ne fournit jamais de chemin de destination et ne reçoit jamais la keypair, son encodage ou un chemin complet. Seul le format traverse l'IPC en entrée. Le save picker et export_transfer_file restent côté Rust. Le contenu exporté n'est jamais loggé, et le nom de destination n'est pas persisté dans les logs.
L'export produit volontairement un fichier secret non chiffré compatible Solana. La confirmation Bootstrap avertit explicitement l'opérateur de le traiter comme une clé privée.
Validation opérateur
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-pre012 \
cargo tauri dev -c crates/ksp-app-wallet-desk/tauri.conf.json
Runtime : ouvrir OWNER -> exporter JSON -> réimporter dans un nouveau .kspwallet et vérifier la même Pubkey ; exporter Base58 -> même round-trip ; vérifier Cancel sans fichier ; tenter une destination existante et vérifier no-clobber ; confirmer qu'une session VIEW n'active jamais l'export.