feat(wallet): consolidate notes per address, keeping each address's funds in place
Users who keep funds apart under different labelled addresses can now shed notes (smaller wallet, faster scans/witness rebuilds) without the funds being merged into a single address. - Merge/Consolidate dialog: "Where should the funds go?" - Into one address (unchanged) or Keep in each address. The latter lists shielded addresses with 2+ spendable notes (label, note count, amount; too-small ones disabled) and merges each address's notes back into that address with z_mergetoaddress [addr] addr. Addresses with more notes than the batch size get several batches (the daemon locks a batch's notes before returning, so calls take disjoint notes); the dialog suggests a second run after those confirm. Per-address progress; ops keep running if the dialog is closed. The Consolidate (wallet-size) preset opens in this mode; Merge keeps "Into one". Shielded only: a transparent address can't take a merge's output. - services/note_consolidation: groupSpendableNotes, worthConsolidating, estimateBatches, consolidateInPlace (pure; driven by a merge-call function), with unit tests against a stand-in following dragonxd's rules. - fake_dragonxd: optional note wallet (FAKE_WALLET_NOTES, FAKE_MERGE_SECS) with z_mergetoaddress and its operations. - i18n: 17 new keys in all 8 languages; CJK subset rebuilt. - UI sweep: modal-consolidate target. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2519,6 +2519,23 @@ void I18n::loadBuiltinEnglish()
|
||||
strings_["merge_back"] = "Back";
|
||||
strings_["merge_progress"] = "Consolidating\xE2\x80\xA6 this can take a few minutes. You can close this window.";
|
||||
strings_["merge_no_spendable"] = "No spendable inputs to consolidate yet.";
|
||||
strings_["merge_where"] = "Where should the funds go?";
|
||||
strings_["merge_into_one"] = "Into one address";
|
||||
strings_["merge_keep_each"] = "Keep in each address";
|
||||
strings_["merge_keep_each_desc"] = "Each address's notes are merged back into that same address, so funds you keep apart under different labels stay apart. Shielded addresses only — transparent funds can only be shielded (Into one address).";
|
||||
strings_["merge_keep_each_none"] = "Every shielded address already holds a single note — nothing to consolidate.";
|
||||
strings_["merge_keep_each_row_fmt"] = "%s · %d notes · %s DRGX";
|
||||
strings_["merge_keep_each_too_small"] = "Too small to consolidate: the fee would use up these funds.";
|
||||
strings_["merge_keep_each_batches_fmt"] = "Addresses with more than %d notes are merged in several batches; run it again after they confirm to merge the rest.";
|
||||
strings_["merge_keep_each_confirm_fmt"] = "Consolidate %d notes in %d addresses? Each address keeps its own funds. Fees: about %s DRGX (one per batch).";
|
||||
strings_["merge_keep_each_select"] = "Tick at least one address to consolidate.";
|
||||
strings_["merge_keep_each_nothing_submitted"] = "Nothing was consolidated — the node refused every merge.";
|
||||
strings_["merge_keep_each_some_failed"] = "Some merges failed — see the list above.";
|
||||
strings_["merge_keep_each_status_not_started"] = "%s — not started: %s";
|
||||
strings_["merge_keep_each_status_failed"] = "%s — failed: %s";
|
||||
strings_["merge_keep_each_status_done"] = "%s — done: %d notes merged in %d batch(es)";
|
||||
strings_["merge_keep_each_status_running"] = "%s — merging %d notes (%d of %d batches done)…";
|
||||
strings_["merge_keep_each_run_again"] = "Addresses merged in several batches now hold one note per batch. Run this again after those confirm to merge them into one.";
|
||||
strings_["done"] = "Done";
|
||||
|
||||
// --- Transaction Details Dialog ---
|
||||
|
||||
Reference in New Issue
Block a user