feat(recovery): import keys from a legacy wallet backup file (z_importwallet)
Phase 3: for a wallet.dat the current daemon can't open, recover its keys from the OLD wallet's export file. Settings → "Import From Backup File…" opens a dialog that takes the path to a z_exportwallet / dumpwallet dump (or SilentDragon's "Export all private keys") and calls z_importwallet — the daemon reads every key and does ONE rescan, far faster and simpler than importing keys one at a time. On success it nudges the user to shield any mined coinbase from the Shield screen. - New App::importWalletFile(path, cb): runs z_importwallet on the long-call lane (no client timeout — the rescan can take a long time), then refreshAddresses + markWalletMutated. Full-node only. - Only the PATH touches GUI memory, never the keys themselves (the daemon reads the file) — less secret exposure than a pasted-key field. - New renderImportWalletFileDialog (typed path + Paste/Clear, progress, result) + a Settings card. Reuses the existing long-call + z_importwallet infra; the careful single-key import dialog is untouched. No send/sweep/encrypt call changed. Build + ctest green; the import/rescan itself is a daemon RPC, not pure-testable, and wasn't exercised end-to-end here. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1490,6 +1490,9 @@ void RenderSettingsPage(App* app) {
|
||||
last = cy + bh; cy += bh + bgp;
|
||||
if (cardBtn(cx, cy, cw, "##imp_vk", TR("settings_import_viewkey"), ICON_MD_VISIBILITY)) app->showImportViewingKeyDialog();
|
||||
if (ImGui::IsItemHovered()) material::Tooltip("%s", TR("tt_import_viewkey"));
|
||||
last = cy + bh; cy += bh + bgp;
|
||||
if (cardBtn(cx, cy, cw, "##imp_file", TR("settings_import_wallet_file"), ICON_MD_UPLOAD_FILE)) app->showImportWalletFileDialog();
|
||||
if (ImGui::IsItemHovered()) material::Tooltip("%s", TR("tt_import_wallet_file"));
|
||||
last = cy + bh;
|
||||
if (fullNode) {
|
||||
cy += bh + bgp;
|
||||
|
||||
Reference in New Issue
Block a user