Files
khadhroony-solana-project/deltas/0.2.6/pre.012.md
2026-08-21 16:22:16 +02:00

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.version passe à 0.2.6-pre.12 ;
  • extraction de WalletTransferFormatDto dans wallet_transfer.rs, contrat partagé import/export sans changement des codes wire ;
  • ajout de wallet_export.rs :
    • WalletExportRequestDto contient uniquement le format ;
    • WalletExportResultDto contient uniquement wallet_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_file exé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_phase est réaligné sur pre.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.md et docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md restent 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.