feat(wallet): give new full-node wallets a BIP39 seed phrase + backup UI

New full-node wallets now get a real 24-word recovery phrase, and users can
reveal/back it up from Settings.

- Pass -usemnemonic=1 to dragonxd. The daemon reads it only inside
  GenerateNewSeed() when a wallet has no seed yet, so it is inert on existing
  wallets (safe to pass unconditionally) and makes every freshly-created
  wallet mnemonic-backed — its phrase is then exportable via z_exportmnemonic
  and portable to SDXLite/ObsidianDragonLite. (Existing/legacy wallets are
  unaffected and keep using the chat identity's z_exportkey fallback.)
- App::exportSeedPhrase() wraps z_exportmnemonic on the RPC worker with
  sodium_memzero wiping on every path; it flags the daemon's "not derived
  from a mnemonic" error as a legacy wallet rather than a failure.
- New "Back up seed phrase" modal (Settings -> Backup & Data, full-node
  gated): reveals the phrase in a numbered word grid, copy (45s clipboard
  auto-clear) + save-to-file (0600), wipes the secret on every close path
  incl. dismiss-mid-fetch. Shared ui/windows/seed_display.h grid helper.
- One-time nudge (settings flag seed_backup_reminded) toasts mnemonic-wallet
  users to back up their phrase; legacy wallets are not nagged.
- 15 new strings translated into all 8 languages (additive, 957->972 keys);
  CJK subset font rebuilt for the new glyphs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-07 10:49:03 -05:00
parent 036199a011
commit 403e145b30
18 changed files with 394 additions and 2 deletions

View File

@@ -641,6 +641,20 @@
"sb_warming_up": "Aufwärmen...",
"search_placeholder": "Suchen...",
"security": "SICHERHEIT",
"seed_backup_button": "Wiederherstellungsphrase",
"seed_backup_close": "Schließen",
"seed_backup_copy": "Kopieren",
"seed_backup_intro": "Diese Wörter sind die Master-Sicherung Ihrer Wallet. Wer sie besitzt, kontrolliert Ihre Gelder.",
"seed_backup_load_failed": "Die Wiederherstellungsphrase konnte nicht geladen werden.",
"seed_backup_loading": "Ihre Wiederherstellungsphrase wird geladen…",
"seed_backup_locked": "Entsperren Sie Ihre Wallet, um ihre Wiederherstellungsphrase anzuzeigen.",
"seed_backup_none": "Diese Wallet ist älter als Wiederherstellungsphrasen und hat daher keine 24-Wort-Phrase. Sichern Sie sie stattdessen mit „Sicherung...“ oder durch den Export Ihrer privaten Schlüssel.",
"seed_backup_reminder": "Ihre Wallet hat eine 24-Wort-Wiederherstellungsphrase. Sichern Sie sie jetzt unter Einstellungen → Node & Sicherheit.",
"seed_backup_save": "In Datei speichern…",
"seed_backup_save_failed": "Konnte nicht schreiben ",
"seed_backup_saved": "Gespeichert unter ",
"seed_backup_title": "Wiederherstellungsphrase sichern",
"seed_backup_warning": "Schreiben Sie sie der Reihe nach auf, bewahren Sie sie offline auf und teilen oder fotografieren Sie sie niemals. Wenn Sie sie verlieren, können Ihre Gelder nicht wiederhergestellt werden.",
"select_address": "Adresse auswählen...",
"select_receiving_address": "Empfangsadresse auswählen...",
"select_source_address": "Quelladresse auswählen...",
@@ -889,6 +903,7 @@
"tt_save_ztx": "Z-Adresse-Transaktionsverlauf lokal für schnelleres Laden speichern",
"tt_scan_themes": "Nach neuen Themes suchen.\\nTheme-Ordner ablegen in:\\n%s",
"tt_scanline": "CRT-Scanlinieneffekt in der Konsole",
"tt_seed_backup": "Die 24-Wort-Wiederherstellungsphrase Ihrer Wallet anzeigen und sichern",
"tt_set_pin": "Eine 4-8-stellige PIN für schnelles Entsperren festlegen",
"tt_shield_mining": "Transparente Mining-Belohnungen an eine geschirmte Adresse verschieben",
"tt_simple_bg": "Einen einfachen Verlauf für den Hintergrund verwenden\\nHotkey: Ctrl+Up",

View File

@@ -641,6 +641,20 @@
"sb_warming_up": "Calentando...",
"search_placeholder": "Buscar...",
"security": "SEGURIDAD",
"seed_backup_button": "Frase de recuperación",
"seed_backup_close": "Cerrar",
"seed_backup_copy": "Copiar",
"seed_backup_intro": "Estas palabras son el respaldo maestro de tu cartera. Cualquiera que las tenga controla tus fondos.",
"seed_backup_load_failed": "No se pudo cargar la frase de recuperación.",
"seed_backup_loading": "Cargando tu frase de recuperación…",
"seed_backup_locked": "Desbloquea tu cartera para revelar su frase de recuperación.",
"seed_backup_none": "Esta cartera es anterior a las frases de recuperación, por lo que no tiene una frase de 24 palabras. Respáldala con «Respaldo...» o exportando tus claves privadas en su lugar.",
"seed_backup_reminder": "Tu cartera tiene una frase de recuperación de 24 palabras. Respáldala ahora en Configuración → Nodo y Seguridad.",
"seed_backup_save": "Guardar en archivo…",
"seed_backup_save_failed": "No se pudo escribir ",
"seed_backup_saved": "Guardado en ",
"seed_backup_title": "Respaldar frase de recuperación",
"seed_backup_warning": "Anótalas en orden, guárdalas sin conexión y nunca las compartas ni las fotografíes. Si las pierdes, tus fondos no se podrán recuperar.",
"select_address": "Seleccionar dirección...",
"select_receiving_address": "Seleccionar dirección de recepción...",
"select_source_address": "Seleccionar dirección de origen...",
@@ -889,6 +903,7 @@
"tt_save_ztx": "Almacenar historial de transacciones de z-address localmente para carga más rápida",
"tt_scan_themes": "Buscar nuevos temas.\\nColoque carpetas de temas en:\\n%s",
"tt_scanline": "Efecto de líneas de escaneo CRT en la consola",
"tt_seed_backup": "Muestra y respalda la frase de recuperación de 24 palabras de tu cartera",
"tt_set_pin": "Establecer un PIN de 4-8 dígitos para desbloqueo rápido",
"tt_shield_mining": "Mover recompensas de minería transparentes a una dirección blindada",
"tt_simple_bg": "Usar un gradiente simple para el fondo\\nAtajo: Ctrl+Up",

View File

@@ -641,6 +641,20 @@
"sb_warming_up": "Démarrage...",
"search_placeholder": "Rechercher...",
"security": "SÉCURITÉ",
"seed_backup_button": "Phrase de récupération",
"seed_backup_close": "Fermer",
"seed_backup_copy": "Copier",
"seed_backup_intro": "Ces mots sont la sauvegarde principale de votre portefeuille. Quiconque les possède contrôle vos fonds.",
"seed_backup_load_failed": "Impossible de charger la phrase de récupération.",
"seed_backup_loading": "Chargement de votre phrase de récupération…",
"seed_backup_locked": "Déverrouillez votre portefeuille pour révéler sa phrase de récupération.",
"seed_backup_none": "Ce portefeuille est antérieur aux phrases de récupération, il n'a donc pas de phrase de 24 mots. Sauvegardez-le plutôt avec « Sauvegarde » ou en exportant vos clés privées.",
"seed_backup_reminder": "Votre portefeuille possède une phrase de récupération de 24 mots. Sauvegardez-la maintenant dans Paramètres → Nœud et sécurité.",
"seed_backup_save": "Enregistrer dans un fichier…",
"seed_backup_save_failed": "Impossible d'écrire ",
"seed_backup_saved": "Enregistré dans ",
"seed_backup_title": "Sauvegarder la phrase de récupération",
"seed_backup_warning": "Notez-les dans l'ordre, conservez-les hors ligne, et ne les partagez ni ne les photographiez jamais. Si vous les perdez, vos fonds ne pourront pas être récupérés.",
"select_address": "Sélectionner une adresse...",
"select_receiving_address": "Sélectionner une adresse de réception...",
"select_source_address": "Sélectionner une adresse source...",
@@ -889,6 +903,7 @@
"tt_save_ztx": "Stocker l'historique des transactions z-address localement pour un chargement plus rapide",
"tt_scan_themes": "Rechercher de nouveaux thèmes.\\nPlacez les dossiers de thèmes dans :\\n%s",
"tt_scanline": "Effet de lignes de balayage CRT dans la console",
"tt_seed_backup": "Afficher et sauvegarder la phrase de récupération de 24 mots de votre portefeuille",
"tt_set_pin": "Définir un PIN de 4-8 chiffres pour un déverrouillage rapide",
"tt_shield_mining": "Déplacer les récompenses de minage transparentes vers une adresse blindée",
"tt_simple_bg": "Utiliser un dégradé simple pour l'arrière-plan\\nRaccourci : Ctrl+Up",

View File

@@ -641,6 +641,20 @@
"sb_warming_up": "ウォームアップ中...",
"search_placeholder": "検索...",
"security": "セキュリティ",
"seed_backup_button": "シードフレーズ",
"seed_backup_close": "閉じる",
"seed_backup_copy": "コピー",
"seed_backup_intro": "これらの単語はウォレットのマスターバックアップです。これらを持つ人は誰でもあなたの資金を管理できます。",
"seed_backup_load_failed": "シードフレーズを読み込めませんでした。",
"seed_backup_loading": "シードフレーズを読み込み中...",
"seed_backup_locked": "シードフレーズを表示するにはウォレットのロックを解除してください。",
"seed_backup_none": "このウォレットはシードフレーズより前のものなので、24単語のフレーズはありません。代わりに「バックアップ...」で、または秘密鍵をエクスポートしてバックアップしてください。",
"seed_backup_reminder": "ウォレットには24単語の復元シードフレーズがあります。今すぐ 設定 → ノードとセキュリティ でバックアップしてください。",
"seed_backup_save": "ファイルに保存...",
"seed_backup_save_failed": "書き込めませんでした: ",
"seed_backup_saved": "保存先: ",
"seed_backup_title": "シードフレーズをバックアップ",
"seed_backup_warning": "順番どおりに書き写し、オフラインで保管してください。決して共有や撮影をしないでください。紛失すると資金を復元できません。",
"select_address": "アドレスを選択...",
"select_receiving_address": "受信アドレスを選択...",
"select_source_address": "送信元アドレスを選択...",
@@ -889,6 +903,7 @@
"tt_save_ztx": "z-address トランザクション履歴をローカルに保存して高速読み込み",
"tt_scan_themes": "新しいテーマをスキャン。\\nテーマフォルダーをここに配置\\n%s",
"tt_scanline": "コンソールでの CRT スキャンライン効果",
"tt_seed_backup": "ウォレットの24単語の復元シードフレーズを表示してバックアップします",
"tt_set_pin": "クイックアンロック用の 4-8 桁 PIN を設定",
"tt_shield_mining": "透明マイニング報酬をシールドアドレスに移動",
"tt_simple_bg": "背景にシンプルなグラデーションを使用\\nホットキーCtrl+Up",

View File

@@ -641,6 +641,20 @@
"sb_warming_up": "워밍업 중...",
"search_placeholder": "검색...",
"security": "보안",
"seed_backup_button": "시드 문구",
"seed_backup_close": "닫기",
"seed_backup_copy": "복사",
"seed_backup_intro": "이 단어들은 지갑의 마스터 백업입니다. 이 단어들을 가진 사람은 누구나 당신의 자금을 통제할 수 있습니다.",
"seed_backup_load_failed": "시드 문구를 불러올 수 없습니다.",
"seed_backup_loading": "시드 문구를 불러오는 중…",
"seed_backup_locked": "시드 문구를 표시하려면 지갑의 잠금을 해제하세요.",
"seed_backup_none": "이 지갑은 시드 문구 도입 이전에 만들어져 24단어 문구가 없습니다. 대신 \"백업...\"을 사용하거나 개인 키를 내보내 백업하세요.",
"seed_backup_reminder": "지갑에 24단어 복구 시드 문구가 있습니다. 지금 설정 → 노드 및 보안에서 백업하세요.",
"seed_backup_save": "파일로 저장…",
"seed_backup_save_failed": "쓸 수 없습니다: ",
"seed_backup_saved": "저장됨: ",
"seed_backup_title": "시드 문구 백업",
"seed_backup_warning": "순서대로 종이에 적어 오프라인으로 보관하고, 절대 공유하거나 사진으로 찍지 마세요. 이 단어들을 잃어버리면 자금을 복구할 수 없습니다.",
"select_address": "주소 선택...",
"select_receiving_address": "수신 주소 선택...",
"select_source_address": "보낼 주소 선택...",
@@ -889,6 +903,7 @@
"tt_save_ztx": "z-address 거래 기록을 로컬에 저장하여 빠른 로딩",
"tt_scan_themes": "새 테마 검색.\\n테마 폴더를 여기에 배치:\\n%s",
"tt_scanline": "콘솔에서 CRT 스캔라인 효과",
"tt_seed_backup": "지갑의 24단어 복구 시드 문구를 표시하고 백업합니다",
"tt_set_pin": "빠른 잠금 해제를 위한 4-8자리 PIN 설정",
"tt_shield_mining": "투명 채굴 보상을 차폐 주소로 이동",
"tt_simple_bg": "배경에 단순 그라데이션 사용\\n단축키: Ctrl+Up",

View File

@@ -641,6 +641,20 @@
"sb_warming_up": "Aquecendo...",
"search_placeholder": "Pesquisar...",
"security": "SEGURANÇA",
"seed_backup_button": "Frase de recuperação",
"seed_backup_close": "Fechar",
"seed_backup_copy": "Copiar",
"seed_backup_intro": "Estas palavras são o backup mestre da sua carteira. Qualquer pessoa que as tenha controla seus fundos.",
"seed_backup_load_failed": "Não foi possível carregar a frase de recuperação.",
"seed_backup_loading": "Carregando sua frase de recuperação…",
"seed_backup_locked": "Desbloqueie sua carteira para revelar sua frase de recuperação.",
"seed_backup_none": "Esta carteira é anterior às frases de recuperação, portanto não possui uma frase de 24 palavras. Faça o backup dela com \"Backup...\" ou exportando suas chaves privadas.",
"seed_backup_reminder": "Sua carteira tem uma frase de recuperação de 24 palavras. Faça o backup dela agora em Configurações → Nó e Segurança.",
"seed_backup_save": "Salvar em arquivo…",
"seed_backup_save_failed": "Não foi possível gravar ",
"seed_backup_saved": "Salvo em ",
"seed_backup_title": "Backup da frase de recuperação",
"seed_backup_warning": "Anote-as em ordem, guarde-as offline e nunca as compartilhe ou fotografe. Se você as perder, seus fundos não poderão ser recuperados.",
"select_address": "Selecionar endereço...",
"select_receiving_address": "Selecionar endereço de recebimento...",
"select_source_address": "Selecionar endereço de origem...",
@@ -889,6 +903,7 @@
"tt_save_ztx": "Armazenar histórico de transações z-address localmente para carregamento mais rápido",
"tt_scan_themes": "Procurar novos temas.\\nColoque pastas de temas em:\\n%s",
"tt_scanline": "Efeito de linhas de varredura CRT no console",
"tt_seed_backup": "Mostrar e fazer backup da frase de recuperação de 24 palavras da sua carteira",
"tt_set_pin": "Definir um PIN de 4-8 dígitos para desbloqueio rápido",
"tt_shield_mining": "Mover recompensas de mineração transparentes para um endereço blindado",
"tt_simple_bg": "Usar um gradiente simples para o fundo\\nAtalho: Ctrl+Up",

View File

@@ -641,6 +641,20 @@
"sb_warming_up": "Прогрев...",
"search_placeholder": "Поиск...",
"security": "БЕЗОПАСНОСТЬ",
"seed_backup_button": "Сид-фраза",
"seed_backup_close": "Закрыть",
"seed_backup_copy": "Копировать",
"seed_backup_intro": "Эти слова — главная резервная копия вашего кошелька. Любой, у кого они есть, управляет вашими средствами.",
"seed_backup_load_failed": "Не удалось загрузить сид-фразу.",
"seed_backup_loading": "Загрузка вашей сид-фразы…",
"seed_backup_locked": "Разблокируйте кошелёк, чтобы показать его сид-фразу.",
"seed_backup_none": "Этот кошелёк создан до появления сид-фраз, поэтому у него нет фразы из 24 слов. Создайте резервную копию с помощью «Резервная копия...» или вместо этого экспортируйте свои приватные ключи.",
"seed_backup_reminder": "У вашего кошелька есть сид-фраза восстановления из 24 слов. Создайте её резервную копию прямо сейчас в Настройки → Узел и безопасность.",
"seed_backup_save": "Сохранить в файл…",
"seed_backup_save_failed": "Не удалось записать ",
"seed_backup_saved": "Сохранено в ",
"seed_backup_title": "Резервная копия сид-фразы",
"seed_backup_warning": "Запишите их по порядку, храните офлайн и никогда не делитесь ими и не фотографируйте их. Если вы их потеряете, ваши средства не удастся восстановить.",
"select_address": "Выбрать адрес...",
"select_receiving_address": "Выбрать адрес получения...",
"select_source_address": "Выбрать адрес-источник...",
@@ -889,6 +903,7 @@
"tt_save_ztx": "Хранить историю транзакций z-адреса локально для более быстрой загрузки",
"tt_scan_themes": "Поиск новых тем.\\nРазместите папки тем в:\\n%s",
"tt_scanline": "Эффект развёртки ЭЛТ в консоли",
"tt_seed_backup": "Показать и создать резервную копию сид-фразы восстановления вашего кошелька из 24 слов",
"tt_set_pin": "Установить 4-8-значный PIN для быстрой разблокировки",
"tt_shield_mining": "Перевести прозрачные вознаграждения за майнинг на экранированный адрес",
"tt_simple_bg": "Использовать простой градиент для фона\\nГорячая клавиша: Ctrl+Up",

View File

@@ -641,6 +641,20 @@
"sb_warming_up": "正在预热...",
"search_placeholder": "搜索...",
"security": "安全",
"seed_backup_button": "助记词",
"seed_backup_close": "关闭",
"seed_backup_copy": "复制",
"seed_backup_intro": "这些词是您钱包的主备份。任何拥有它们的人都能控制您的资金。",
"seed_backup_load_failed": "无法加载助记词。",
"seed_backup_loading": "正在加载您的助记词…",
"seed_backup_locked": "解锁您的钱包以显示其助记词。",
"seed_backup_none": "此钱包早于助记词功能,因此没有 24 词助记词。请改用“备份钱包”或导出私钥来备份它。",
"seed_backup_reminder": "您的钱包有一个 24 词恢复助记词。请立即在“设置 → 节点与安全”中备份它。",
"seed_backup_save": "保存到文件…",
"seed_backup_save_failed": "无法写入 ",
"seed_backup_saved": "已保存到 ",
"seed_backup_title": "备份助记词",
"seed_backup_warning": "请按顺序将它们抄写下来,离线保存,切勿分享或拍照。一旦丢失,您的资金将无法恢复。",
"select_address": "选择地址...",
"select_receiving_address": "选择接收地址...",
"select_source_address": "选择来源地址...",
@@ -889,6 +903,7 @@
"tt_save_ztx": "将 z-address 交易历史存储在本地以加快加载速度",
"tt_scan_themes": "扫描新主题。\\n将主题文件夹放在\\n%s",
"tt_scanline": "控制台中的 CRT 扫描线效果",
"tt_seed_backup": "显示并备份您钱包的 24 词恢复助记词",
"tt_set_pin": "设置 4-8 位 PIN 以快速解锁",
"tt_shield_mining": "将透明挖矿奖励转移到屏蔽地址",
"tt_simple_bg": "使用简单渐变作为背景\\n快捷键Ctrl+Up",