feat(merge): run per-address consolidation as a paced background job
"Keep in each address" posted one task that called z_mergetoaddress for every batch of every address back to back; each call is a whole-wallet scan under cs_main, and the daemon runs the ops one at a time anyway. It is now an App-owned services::ConsolidationRun: - one RPC at a time; the next merge only after the previous batch left the queue and a gap as long as the last call took (2-120 s); - pauses while the node syncs, the wallet is locked, a send of ours is in progress, or another wallet scan is running; - failures classified: nothing that may have queued is ever resent; a breaker stops after 3 dead addresses or 3 failed ops in a row; - each merge is charged to the scan budget; one re-read and one forced balance at the end; - it keeps running when the dialog closes: a status-bar chip, a run view with progress, the wait reason and a Stop button. The "Into one" merge can no longer be confirmed twice while its call is in flight. fake_dragonxd gains FAKE_SCAN_SECS, FAKE_MERGE_SERIAL and FAKE_MERGE_FAIL. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1183,6 +1183,22 @@
|
||||
"merge_max_inputs": "Макс. входов за партию",
|
||||
"merge_no_spendable": "Пока нет доступных для расходования входов для объединения.",
|
||||
"merge_progress": "Объединение… это может занять несколько минут. Вы можете закрыть это окно.",
|
||||
"merge_run_aborted_toast": "Соединение с узлом было сброшено, поэтому объединение остановлено. Запустите его снова, чтобы продолжить.",
|
||||
"merge_run_busy": "Идёт объединение. Дождитесь его завершения или сначала остановите его.",
|
||||
"merge_run_chip_fmt": "Объединение %d/%d",
|
||||
"merge_run_err_timeout": "Узел не ответил вовремя; партия, возможно, всё ещё в очереди.",
|
||||
"merge_run_halted_fmt": "Объединение остановлено после повторных сбоев: %s",
|
||||
"merge_run_migration_pending": "Завершите или отмените перенос сид-фразы перед объединением.",
|
||||
"merge_run_progress_fmt": "Объединение… партия %d из примерно %d, объединено заметок: %d. Это окно можно закрыть — операция продолжится в фоне.",
|
||||
"merge_run_start_failed": "Не удалось начать объединение — узел не подключён.",
|
||||
"merge_run_status_not_run": "%s — не объединено (%d заметок)",
|
||||
"merge_run_status_waiting": "%s — ожидание (%d заметок)",
|
||||
"merge_run_stop": "Остановить",
|
||||
"merge_run_stopped_toast": "Объединение остановлено. Запустите его снова, чтобы объединить остальное.",
|
||||
"merge_run_stopping": "Остановка после уже отправленных партий…",
|
||||
"merge_run_wait_batch": "Партии отправляются с паузами, чтобы узел оставался отзывчивым…",
|
||||
"merge_run_wait_send": "Приостановлено до завершения вашей ожидающей транзакции.",
|
||||
"merge_run_wait_sync": "Приостановлено: узел ещё синхронизируется.",
|
||||
"merge_scope_failed_fmt": "Не удалось прочитать ваши входы: %s",
|
||||
"merge_scope_fmt": "%d прозрачных + %d защищённых входов · ~%s DRGX доступно",
|
||||
"merge_scope_loading": "Проверка ваших входов…",
|
||||
|
||||
Reference in New Issue
Block a user