4.1 KiB
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
.kspwalletdestination ; - 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-libreste 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 ;
AppStatepour 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
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.