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:
@@ -1163,6 +1163,22 @@
|
||||
"merge_description": "Fusiona múltiples UTXOs en una sola dirección protegida. Esto puede ayudar a reducir el tamaño de la cartera y mejorar la privacidad.",
|
||||
"merge_fee_hint": "Comisión de red para esta transacción.",
|
||||
"merge_funds": "Fusionar Fondos",
|
||||
"merge_into_one": "A una sola dirección",
|
||||
"merge_keep_each": "Mantener en cada dirección",
|
||||
"merge_keep_each_batches_fmt": "Las direcciones con más de %d notas se fusionan en varios lotes; vuelve a ejecutarlo cuando se confirmen para fusionar el resto.",
|
||||
"merge_keep_each_confirm_fmt": "¿Consolidar %d notas en %d direcciones? Cada dirección conserva sus propios fondos. Comisiones: unos %s DRGX (una por lote).",
|
||||
"merge_keep_each_desc": "Las notas de cada dirección se fusionan de nuevo en esa misma dirección, así que los fondos que mantienes separados con distintas etiquetas siguen separados. Solo direcciones blindadas: los fondos transparentes solo pueden blindarse (A una sola dirección).",
|
||||
"merge_keep_each_none": "Cada dirección blindada ya tiene una sola nota: no hay nada que consolidar.",
|
||||
"merge_keep_each_nothing_submitted": "No se consolidó nada: el nodo rechazó todas las fusiones.",
|
||||
"merge_keep_each_row_fmt": "%s · %d notas · %s DRGX",
|
||||
"merge_keep_each_run_again": "Las direcciones fusionadas en varios lotes tienen ahora una nota por lote. Vuelve a ejecutarlo cuando se confirmen para fusionarlas en una.",
|
||||
"merge_keep_each_select": "Marca al menos una dirección para consolidar.",
|
||||
"merge_keep_each_some_failed": "Algunas fusiones fallaron; consulta la lista de arriba.",
|
||||
"merge_keep_each_status_done": "%s: listo: %d notas fusionadas en %d lote(s)",
|
||||
"merge_keep_each_status_failed": "%s: falló: %s",
|
||||
"merge_keep_each_status_not_started": "%s: no iniciado: %s",
|
||||
"merge_keep_each_status_running": "%s: fusionando %d notas (%d de %d lotes listos)…",
|
||||
"merge_keep_each_too_small": "Demasiado poco para consolidar: la comisión se llevaría estos fondos.",
|
||||
"merge_max_inputs": "Máximo de entradas por lote",
|
||||
"merge_no_spendable": "Aún no hay entradas disponibles para consolidar.",
|
||||
"merge_progress": "Consolidando… esto puede tardar varios minutos. Puedes cerrar esta ventana.",
|
||||
@@ -1175,6 +1191,7 @@
|
||||
"merge_src_transparent": "Transparentes",
|
||||
"merge_started": "Operación de fusión iniciada",
|
||||
"merge_title": "Fusionar a Dirección",
|
||||
"merge_where": "¿Adónde deben ir los fondos?",
|
||||
"mig_adopt": "Hacer que esta sea mi cartera",
|
||||
"mig_adopt_now": "Adoptar cartera con frase",
|
||||
"mig_adopting": "Instalando tu nueva cartera y reescaneando…",
|
||||
|
||||
Reference in New Issue
Block a user