diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index b21d1a28d..7ead2716f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,28 +1,23 @@ --- - name: 🐞 Bug report -about: Create a report to help us improve -title: "[Bug] the title of bug report" +about: Create a new report +title: "[Bug] the summary of your report" labels: bug assignees: '' --- -#### Summary - - +#### Describe the bug + -**Device** +**Device(s) affected** - [ ] Amigo - [ ] M5stickV +- [ ] Cube - [ ] Dock - [ ] Bit - [ ] Yahboom -**Version** -- [ ] Official release (selfcustody/krux): -- [ ] Beta release (odudex/krux_binaries): - -#### Describe the bug - - +**Version affected** +- [ ] Official release (selfcustody/krux): vXX.YY.Z +- [ ] Beta release (odudex/krux_binaries): vXX.YY.Z-betaWW diff --git a/.github/ISSUE_TEMPLATE/enhancement.md b/.github/ISSUE_TEMPLATE/enhancement.md index 337701782..1d7efbc50 100644 --- a/.github/ISSUE_TEMPLATE/enhancement.md +++ b/.github/ISSUE_TEMPLATE/enhancement.md @@ -1,10 +1,10 @@ --- name: 🔥 Enhancement -about: New feature or request -title: "[Enhancement] the title of new feature or enhancement" +about: New feature request +title: "[Enhancement] summarize the new feature or enhancement" labels: enhancement assignees: '' --- -#### Describe the new feature or enhancement +#### Describe your request diff --git a/.github/ISSUE_TEMPLATE/help_wanted.md b/.github/ISSUE_TEMPLATE/help_wanted.md index ad5726baa..fe6e3f61a 100644 --- a/.github/ISSUE_TEMPLATE/help_wanted.md +++ b/.github/ISSUE_TEMPLATE/help_wanted.md @@ -1,10 +1,10 @@ --- -name: 🥺 Help wanted -about: Help needed to use a feature, perform or understand a procedure -title: "[Help] the title of help wanted report" -labels: help wanted +name: 🥺 Other +about: Anything not related to a bug or feature +title: "[Other] summarize what is" +labels: other assignees: '' --- -#### Describe the problem you need help +#### Describe what it is diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index c533dfbf3..a4ffb8010 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,12 +1,8 @@ - +### What is this PR for? -### Description - - - -### What is the purpose of this pull request? +### What is the purpose of this pull request? - [ ] Bug fix -- [ ] New Feature -- [ ] Documentation update +- [ ] New feature +- [ ] Docs update - [ ] Other diff --git a/i18n/translations/de-DE.json b/i18n/translations/de-DE.json index 6356567e5..0d8b292a1 100644 --- a/i18n/translations/de-DE.json +++ b/i18n/translations/de-DE.json @@ -142,7 +142,6 @@ "Load Mnemonic": "Mnemonic laden", "Load Wallet": "Wallet laden", "Load a trusted wallet descriptor to view addresses?": "Einen vertrauenswürdigen Wallet-Deskriptor laden, um Adressen anzuzeigen?", - "Load child?": "Untermnemonik laden?", "Load from SD card": "Von SD-Karte laden", "Load from SD card?": "Von SD-Karte laden?", "Load from camera": "Von der Kamera laden", diff --git a/i18n/translations/es-MX.json b/i18n/translations/es-MX.json index 80a8eefd7..cee8bed60 100644 --- a/i18n/translations/es-MX.json +++ b/i18n/translations/es-MX.json @@ -142,7 +142,6 @@ "Load Mnemonic": "Importar Mnemónico", "Load Wallet": "Cargar Cartera", "Load a trusted wallet descriptor to view addresses?": "¿Cargar un descriptor de monedero de confianza para ver las direcciones?", - "Load child?": "¿Cargar derivado?", "Load from SD card": "Cargar desde tarjeta SD", "Load from SD card?": "¿Cargar desde la tarjeta SD?", "Load from camera": "Cargar desde la cámara", diff --git a/i18n/translations/fr-FR.json b/i18n/translations/fr-FR.json index c581d4a89..1e9d8da08 100644 --- a/i18n/translations/fr-FR.json +++ b/i18n/translations/fr-FR.json @@ -16,14 +16,14 @@ "Account": "Compte", "Account #0 would be assumed": "Le compte n °0 serait supposé", "Account Index": "Index du compte", - "Add or change wallet passphrase?": "Ajoutez ou modifiez la phrase secrète?", + "Add or change wallet passphrase?": "Ajoutez ou modifiez la phrase secrète ?", "Additional entropy from camera required for AES-CBC mode": "Entropie supplémentaire de la caméra requise pour le mode AES-CBC", "Address": "Adresse", "Align camera and Tiny Seed properly.": "Alignez correctement la caméra et Tiny Seed.", "Anti-glare disabled": "Anti-éblouissement désactivé", "Anti-glare enabled": "Anti-éblouissement activé", "Appearance": "Apparence", - "Are you sure?": "Es-tu sûr?", + "Are you sure?": "Es-tu sûr ?", "BGR Colors": "Couleurs BGR", "Back": "Retour", "Back to Menu": "Retour au menu", @@ -40,21 +40,21 @@ "Capture cancelled": "Capture annulée", "Change": "Changement", "Change Addresses": "Adresses de Changement", - "Change theme and reboot?": "Changer de thème et redémarrer?", - "Changes persisted to Flash!": "Les modifications ont été enregistrées dans le Flash !", - "Changes persisted to SD card!": "Modifications enregistrées sur la carte SD!", + "Change theme and reboot?": "Changer de thème et redémarrer ?", + "Changes persisted to Flash!": "Les modifications ont été enregistrées dans le Flash !", + "Changes persisted to SD card!": "Modifications enregistrées sur la carte SD !", "Changes will last until shutdown.": "Les modifications dureront jusqu'à l'arrêt.", "Check SD Card": "Vérifiez la carte SD", - "Check that address belongs to this wallet?": "Vérifiez que l'adresse appartient à cette portefeuille?", + "Check that address belongs to this wallet?": "Vérifiez que l'adresse appartient à cette portefeuille ?", "Checked %d change addresses with no matches.": "Adresses %d de monnaie revenues sans correspondance.", "Checked %d receive addresses with no matches.": "Adresses %d de reception revenues sans correspondance.", "Checking change address from %d to %d for match..": "Vérification de l'adresse monnaie de %d à %d pour correspondance..", "Checking for SD card..": "Vérification de la carte SD..", "Checking receive address from %d to %d for match..": "Vérification de l'adresse de reception de %d à %d pour correspondance..", "Child Index": "Indice enfant", - "Continue?": "Continuer?", + "Continue?": "Continuer ?", "Create QR Code": "Créer du code QR", - "Create QR code from text?": "Créer du code QR à partir du texte?", + "Create QR code from text?": "Créer du code QR à partir du texte ?", "Created:": "Créé:", "Custom QR Code": "Code QR personnalisé", "Customize": "Personnaliser", @@ -62,7 +62,7 @@ "Cut Depth": "Profondeur de coupe", "Cut Method": "Méthode de coupe", "Decimal": "Décimal", - "Decrypt?": "Décrypter?", + "Decrypt?": "Décrypter ?", "Default Wallet": "Portefeuille par défaut", "Depth Per Pass": "Profondeur par passage", "Descriptor Addresses": "Adresses des descripteurs", @@ -84,7 +84,7 @@ "Enter each word of your BIP-39 mnemonic.": "Entrez chaque mot de votre mnémonique BIP-39.", "Error:": "Erreur:", "Esc": "Esc", - "Explore files?": "Explorer des fichiers?", + "Explore files?": "Explorer des fichiers ?", "Exporting to SD card..": "Exportation vers la carte SD..", "Extended Public Key": "Clé publique", "Factory Settings": "Paramètres d'usine", @@ -100,7 +100,7 @@ "Fee:": "Frais:", "Feed Rate": "Taux d'alimentation", "Filename": "Nom de fichier", - "Filename %s exists on SD card, overwrite?": "Le nom de fichier %s existe sur la carte SD, écraser ?", + "Filename %s exists on SD card, overwrite?": "Le nom de fichier %s existe sur la carte SD, écraser ?", "Fingerprint unset in PSBT": "Empreinte digitale manquante dans PSBT", "Firmware exceeds max size: %d": "Le micrologiciel dépasse la taille maximale: %d", "Flipped X Coordinates": "Coordonnées X inversées", @@ -109,7 +109,7 @@ "From Storage": "Du stockage", "Fully erase your SD card in another device to ensure data is unrecoverable": "Effacez complètement votre carte SD dans un autre appareil pour assurer que les données soient irrécupérables", "Generate Mnemonic": "Générer une mnémonique", - "Generate a BIP85 child mnemonic?": "Générer un mnémonique dérivé BIP-85 ?", + "Generate a BIP85 child mnemonic?": "Générer un mnémonique dérivé BIP-85 ?", "Give this mnemonic a custom ID? Otherwise current fingerprint will be used": "Donnez à ce mnémonique un identifiant personnalisé?Sinon l'empreinte actuelle sera utilisée", "Go": "Go", "Good entropy": "Bonne entropie", @@ -117,11 +117,11 @@ "Hex Public Key": "Clé public hexadécimal", "Hexadecimal": "Hexadécimal", "Hide Mnemonics": "Masquer les mnémoniques", - "High fees!": "Frais élevés!", + "High fees!": "Frais élevés !", "ID already exists": "Id existe déjà", "Inputs (%d):": "Entrées (%d):", - "Install?": "Installer?", - "Insufficient Entropy!": "Entropie insuffisante !", + "Install?": "Installer ?", + "Insufficient Entropy!": "Entropie insuffisante !", "Insufficient entropy": "Entropie insuffisante", "Invalid address": "Adresse invalide", "Invalid bootloader": "Chargeur de démarrage invalide", @@ -141,13 +141,12 @@ "Line:": "Ligne:", "Load Mnemonic": "Charger mnémonique", "Load Wallet": "Charger le portefeuille", - "Load a trusted wallet descriptor to view addresses?": "Charger un descripteur de portefeuille de confiance pour afficher les adresses ?", - "Load child?": "Charger le mnémonique dérivé ?", + "Load a trusted wallet descriptor to view addresses?": "Charger un descripteur de portefeuille de confiance pour afficher les adresses ?", "Load from SD card": "Charger depuis la carte SD", - "Load from SD card?": "Charger depuis la carte SD ?", + "Load from SD card?": "Charger depuis la carte SD ?", "Load from camera": "Charger depuis une caméra", - "Load one?": "En charger qu'un?", - "Load?": "Charger?", + "Load one?": "En charger qu'un ?", + "Load?": "Charger ?", "Loading Camera..": "Caméra de Chargement..", "Loading change addresses..": "Chargement des adresses de monnaie..", "Loading printer..": "Chargement de l'imprimante..", @@ -172,7 +171,7 @@ "New firmware detected.": "Nouveau micrologiciel détecté.", "No": "Non", "No Passphrase": "Pas de phrase secrète", - "Not enough rolls!": "Pas assez de jets !", + "Not enough rolls!": "Pas assez de jets !", "Numbers": "Nombres", "Octal": "Octale", "Other Formats": "Autres formats", @@ -183,36 +182,36 @@ "Part Size": "Taille de la pièce", "Passphrase": "Phrase secréte", "Path mismatch": "Inadéquation du chemin", - "Pattern detected!": "Structure détecté !", - "Permanently remove all stored encrypted mnemonics and settings from flash?": "Supprimer définitivement tous les mnémoniques et paramètres chiffrés stockés dans le flash ?", + "Pattern detected!": "Structure détecté !", + "Permanently remove all stored encrypted mnemonics and settings from flash?": "Supprimer définitivement tous les mnémoniques et paramètres chiffrés stockés dans le flash ?", "Persist": "Persister", "Pixels deviation index:": "Indice de déviation des pixels:", "Plaintext QR": "QR en Texte Brut", "Please load a wallet output descriptor": "Veuillez charger un descripteur de sortie de portefeuille", "Plunge Rate": "Taux de plongée", "Poor entropy": "Mauvaise entropie", - "Poor entropy detected!": "Faible entropie détectée!", + "Poor entropy detected!": "Faible entropie détectée !", "Print Test QR": "Test d'impression QR", - "Print Tiny Seed?": "Imprimer Tiny Seed?", + "Print Tiny Seed?": "Imprimer Tiny Seed ?", "Print to QR": "Imprimer en QR", "Print to QR?": "Imprimer en QR?", - "Print?": "Imprimer?", + "Print?": "Imprimer ?", "Printer": "Imprimante", - "Printer Driver not set!": "Le conducteur d'imprimante n'est pas défini!", + "Printer Driver not set!": "Le conducteur d'imprimante n'est pas défini !", "Printing": "Impression", - "Proceed anyway?": "Procéder quand même ?", - "Proceed?": "Procéder?", + "Proceed anyway?": "Procéder quand même ?", + "Proceed?": "Procéder ?", "Processing ...": "Traitement ...", "QR Code": "QR Code", "RX Pin": "RX Fiche", "Receive": "Recevoir", "Receive Addresses": "Adresses de Réception", "Region:": "Région:", - "Remove %s?": "Supprimer %s?", + "Remove %s?": "Supprimer %s ?", "Remove Mnemonic": "Supprimer mnémonique", "Remove firmware files from SD Card?": "Supprimer les fichiers micrologiciel de la carte SD?", "Res. - Format": "Rés. - Format", - "Restore factory settings and reboot?": "Restaurer les paramètres d'usine et redémarrer ?", + "Restore factory settings and reboot?": "Restaurer les paramètres d'usine et redémarrer ?", "Return to QR Viewer": "Retour au visualiseur QR", "Review scanned data, edit if necessary": "Examinez les données numérisées, modifiez-les si nécessaire", "Right": "À droite", @@ -226,7 +225,7 @@ "SHA256 of snapshot:": "SHA256 de snapshot:", "Save QR Image to SD Card": "Enregistrer l'image QR sur la carte SD", "Save to SD card": "Enregistrer sur la carte SD", - "Save to SD card?": "Enregistrer sur la carte SD ?", + "Save to SD card?": "Enregistrer sur la carte SD ?", "Saved to SD card": "Enregistré sur la carte SD", "Saving ...": "Enregistrement en cours...", "Scale": "L'échelle", @@ -244,10 +243,10 @@ "Shutdown": "Fermer", "Shutdown Time": "Delai d'Arrêt", "Shutting down..": "Éteindre..", - "Sign": "Signature", + "Sign": "Signer", "Sign to QR code": "Signer avec le code QR", "Sign to SD card": "Signer sur la carte SD", - "Sign?": "Signature?", + "Sign?": "Signer ?", "Signature": "Signature", "Signed Message": "Message signé", "Signed PSBT": "PSBT signé", @@ -270,7 +269,7 @@ "Tools": "Outils", "Touch Threshold": "Seuil Tactile", "Touchscreen": "Écran Tactile", - "Try more?": "Réessayer?", + "Try more?": "Réessayer ?", "Type BIP39 Passphrase": "Entrez la phrase secrète BIP-39", "Type Key": "Clé de type", "Unexpected error saving to Flash.": "Erreur inattendue lors de l'enregistrement dans le Flash.", @@ -294,7 +293,7 @@ "Wallet": "Portefeuille", "Wallet Descriptor": "Descripteur de Portefeuille", "Wallet output descriptor": "Descripteur de sortie du portefeuille", - "Wallet output descriptor loaded!": "Descripteur de sortie du portefeuille chargé!", + "Wallet output descriptor loaded!": "Descripteur de sortie du portefeuille chargé !", "Wallet output descriptor not found.": "Descripteur de sortie du portefeuille introuvable.", "Warning:": "Avertissement:", "Wipe Device": "Effacer l'appareil", @@ -305,8 +304,8 @@ "Yes": "Oui", "Your changes will be kept on device flash storage.": "Vos modifications seront stockées sur le stockage flash de l'appareil.", "Your changes will be kept on the SD card.": "Vos modifications seront stockées sur la carte SD.", - "is a valid change address!": "est une adresse de monnaie valide!", - "is a valid receive address!": "est une adresse de reception valide!", + "is a valid change address!": "est une adresse de monnaie valide !", + "is a valid receive address!": "est une adresse de reception valide !", "was NOT FOUND in the first %d change addresses": "INTROUVABLE dans les premières %d adresses de monnaie", "was NOT FOUND in the first %d receive addresses": "INTROUVABLE dans les premières %d adresses de reception" } \ No newline at end of file diff --git a/i18n/translations/nl-NL.json b/i18n/translations/nl-NL.json index d99680da3..a4cd2426a 100644 --- a/i18n/translations/nl-NL.json +++ b/i18n/translations/nl-NL.json @@ -142,7 +142,6 @@ "Load Mnemonic": "Geheugensteun laden", "Load Wallet": "Portemonnee laden", "Load a trusted wallet descriptor to view addresses?": "Een vertrouwde portemonnee descriptor laden om adressen te bekijken?", - "Load child?": "Afgeleide geheugensteun laden?", "Load from SD card": "Laden vanaf SD kaart", "Load from SD card?": "Laden vanaf SD kaart?", "Load from camera": "Laden van camera", diff --git a/i18n/translations/pl-PL.json b/i18n/translations/pl-PL.json index 19ac85f2b..914897d12 100644 --- a/i18n/translations/pl-PL.json +++ b/i18n/translations/pl-PL.json @@ -142,7 +142,6 @@ "Load Mnemonic": "Ładuj mnemoniczne", "Load Wallet": "Załaduj portfel", "Load a trusted wallet descriptor to view addresses?": "Załadować deskryptor zaufanego portfela, aby wyświetlić adresy?", - "Load child?": "Załadować podrzędną mnemonikę?", "Load from SD card": "Załaduj z karty SD", "Load from SD card?": "Załaduj z karty SD?", "Load from camera": "Załaduj z kamery", diff --git a/i18n/translations/pt-BR.json b/i18n/translations/pt-BR.json index ea5fdec47..71d26e104 100644 --- a/i18n/translations/pt-BR.json +++ b/i18n/translations/pt-BR.json @@ -142,7 +142,6 @@ "Load Mnemonic": "Carregar Mnemônico", "Load Wallet": "Carregar Carteira", "Load a trusted wallet descriptor to view addresses?": "Carregar um descritor de carteira confiável para visualizar endereços?", - "Load child?": "Carregar derivado?", "Load from SD card": "Carregar do cartão SD", "Load from SD card?": "Carregar do cartão SD?", "Load from camera": "Carregar da câmera", diff --git a/i18n/translations/ru-RU.json b/i18n/translations/ru-RU.json index 8397b6c38..90e4b900d 100644 --- a/i18n/translations/ru-RU.json +++ b/i18n/translations/ru-RU.json @@ -142,7 +142,6 @@ "Load Mnemonic": "Загрузить Мнемонику", "Load Wallet": "Загрузить кошелек", "Load a trusted wallet descriptor to view addresses?": "Загрузить дескриптор доверенного кошелька для просмотра адресов?", - "Load child?": "Загрузить дочерний элемент?", "Load from SD card": "Загрузка с SD-карты", "Load from SD card?": "Загрузить с SD карты?", "Load from camera": "Из камеры", diff --git a/i18n/translations/tr-TR.json b/i18n/translations/tr-TR.json index 3d3568d39..0a7e6d8e7 100644 --- a/i18n/translations/tr-TR.json +++ b/i18n/translations/tr-TR.json @@ -142,7 +142,6 @@ "Load Mnemonic": "Mnemonic Yükle", "Load Wallet": "Cüzdan Yükle", "Load a trusted wallet descriptor to view addresses?": "Adresleri görüntülemek için güvenilir bir cüzdan tanımlayıcısı yüklensin mi?", - "Load child?": "Türev yüklensin mi?", "Load from SD card": "SD karttan yükle", "Load from SD card?": "SD karttan yüklensin mi?", "Load from camera": "Kameradan yükle", diff --git a/i18n/translations/vi-VN.json b/i18n/translations/vi-VN.json index 876a035e8..4918eb6cc 100644 --- a/i18n/translations/vi-VN.json +++ b/i18n/translations/vi-VN.json @@ -142,7 +142,6 @@ "Load Mnemonic": "Tải mã mnemonic", "Load Wallet": "Nạp Ví", "Load a trusted wallet descriptor to view addresses?": "Tải mô tả ví đáng tin cậy để xem địa chỉ?", - "Load child?": "Nạp Mnemonic phụ?", "Load from SD card": "Tải từ thẻ SD", "Load from SD card?": "Tải từ thẻ SD?", "Load from camera": "Tải từ máy ảnh", diff --git a/src/krux/display.py b/src/krux/display.py index 4d7520d56..3c8d60ea0 100644 --- a/src/krux/display.py +++ b/src/krux/display.py @@ -51,19 +51,21 @@ SMALLEST_WIDTH = 135 SMALLEST_HEIGHT = 240 +THIN_SPACE = " " + # Splash will use horizontally-centered text plots. Uses Thin spaces to help with alignment SPLASH = [ - "██   ", - "██   ", - "██   ", - "██████   ", - "██   ", - " ██  ██", - "██ ██", - "████ ", - "██ ██", - " ██  ██", - "  ██   ██", + "██" + THIN_SPACE * 3, + "██" + THIN_SPACE * 3, + "██" + THIN_SPACE * 3, + "██████" + THIN_SPACE * 3, + "██" + THIN_SPACE * 3, + THIN_SPACE + "██" + THIN_SPACE * 2 + "██", + "██" + THIN_SPACE + "██", + "████" + THIN_SPACE, + "██" + THIN_SPACE + "██", + THIN_SPACE + "██" + THIN_SPACE * 2 + "██", + THIN_SPACE * 2 + "██" + THIN_SPACE * 3 + "██", ] diff --git a/src/krux/key.py b/src/krux/key.py index 2a396e931..05865048a 100644 --- a/src/krux/key.py +++ b/src/krux/key.py @@ -81,6 +81,9 @@ MULTISIG_SCRIPT_PURPOSE = 48 +FINGERPRINT_SYMBOL = "⊚" +DERIVATION_PATH_SYMBOL = "↳" + class Key: """Represents a BIP-39 mnemonic-based private key""" @@ -136,15 +139,11 @@ def account_pubkey_str(self, version=None): def fingerprint_hex_str(self, pretty=False): """Returns the master key fingerprint in hex format""" - formatted_txt = "⊚ %s" if pretty else "%s" - return formatted_txt % hexlify(self.fingerprint).decode("utf-8") + return Key.format_fingerprint(self.fingerprint, pretty) def derivation_str(self, pretty=False): - """Returns the derivation path for the Hierarchical Deterministic Wallet to - be displayed as string - """ - formatted_txt = "↳ %s" if pretty else "%s" - return (formatted_txt % self.derivation).replace("h", HARDENED_STR_REPLACE) + """Returns the derivation path for the HD Wallet as string""" + return Key.format_derivation(self.derivation, pretty) def sign(self, message_hash): """Signs a message with the extended master private key""" @@ -192,13 +191,13 @@ def get_default_derivation(multisig, network, account=0, script_type=P2WPKH): @staticmethod def format_derivation(derivation, pretty=False): """Helper method to display the derivation path formatted""" - formatted_txt = "↳ %s" if pretty else "%s" + formatted_txt = DERIVATION_PATH_SYMBOL + " %s" if pretty else "%s" return (formatted_txt % derivation).replace("h", HARDENED_STR_REPLACE) @staticmethod def format_fingerprint(fingerprint, pretty=False): """Helper method to display the fingerprint formatted""" - formatted_txt = "⊚ %s" if pretty else "%s" + formatted_txt = FINGERPRINT_SYMBOL + " %s" if pretty else "%s" return formatted_txt % hexlify(fingerprint).decode("utf-8") @staticmethod diff --git a/src/krux/pages/__init__.py b/src/krux/pages/__init__.py index e87f4b4e9..e2aa16999 100644 --- a/src/krux/pages/__init__.py +++ b/src/krux/pages/__init__.py @@ -575,11 +575,15 @@ def __init__( menu, offset=None, disable_statusbar=False, - back_label=t("Back"), + back_label="Back", back_status=lambda: MENU_EXIT, ): self.ctx = ctx - self.menu = menu + [("< " + back_label, back_status)] if back_label else menu + self.menu = menu + if back_label: + back_label = t("Back") if back_label == "Back" else back_label + self.menu += [("< " + back_label, back_status)] + self.disable_statusbar = disable_statusbar if offset is None: # Default offset for status bar diff --git a/src/krux/pages/encryption_ui.py b/src/krux/pages/encryption_ui.py index 1ac570627..3da7ed2a9 100644 --- a/src/krux/pages/encryption_ui.py +++ b/src/krux/pages/encryption_ui.py @@ -116,10 +116,12 @@ def encrypt_menu(self): def _get_user_inputs(self): """Ask user for the key, mnemonic_id and i_vector""" + error_txt = t("Mnemonic was not encrypted") + key_capture = EncryptionKey(self.ctx) key = key_capture.encryption_key() if key is None: - self.flash_text(t("Mnemonic was not encrypted")) + self.flash_text(error_txt) return None version = Settings().encryption.version @@ -130,14 +132,14 @@ def _get_user_inputs(self): t("Additional entropy from camera required for AES-CBC mode") ) if not self.prompt(t("Proceed?"), BOTTOM_PROMPT_LINE): - self.flash_text(t("Mnemonic was not encrypted")) + self.flash_text(error_txt) return None from .capture_entropy import CameraEntropy camera_entropy = CameraEntropy(self.ctx) entropy = camera_entropy.capture(show_entropy_details=False) if entropy is None: - self.flash_text(t("Mnemonic was not encrypted")) + self.flash_text(error_txt) return None i_vector = entropy[:AES_BLOCK_SIZE] diff --git a/src/krux/pages/home_pages/addresses.py b/src/krux/pages/home_pages/addresses.py index 7f166603a..0e9382cae 100644 --- a/src/krux/pages/home_pages/addresses.py +++ b/src/krux/pages/home_pages/addresses.py @@ -21,7 +21,7 @@ # THE SOFTWARE. import gc -from ...display import BOTTOM_PROMPT_LINE +from ...display import BOTTOM_PROMPT_LINE, THIN_SPACE from ...krux_settings import t from ...qr import FORMAT_NONE from .. import ( @@ -83,7 +83,7 @@ def list_address_type(self, addr_type=0): address_index, limit=max_addresses, branch_index=addr_type ) for addr in addresses: - pos_str = str(address_index) + ". " # . + thin space + pos_str = str(address_index) + "." + THIN_SPACE qr_title = pos_str + addr items.append( ( diff --git a/src/krux/pages/home_pages/bip85.py b/src/krux/pages/home_pages/bip85.py index 01aa44bcf..88fb50916 100644 --- a/src/krux/pages/home_pages/bip85.py +++ b/src/krux/pages/home_pages/bip85.py @@ -80,7 +80,7 @@ def export(self): ) else: self.ctx.display.draw_centered_text(key.fingerprint_hex_str(True)) - if self.prompt(t("Load child?"), BOTTOM_PROMPT_LINE): + if self.prompt(t("Load?"), BOTTOM_PROMPT_LINE): from ...wallet import Wallet self.ctx.wallet = Wallet(key) diff --git a/src/krux/pages/home_pages/wallet_descriptor.py b/src/krux/pages/home_pages/wallet_descriptor.py index 39fe6774c..941709e8a 100644 --- a/src/krux/pages/home_pages/wallet_descriptor.py +++ b/src/krux/pages/home_pages/wallet_descriptor.py @@ -31,6 +31,7 @@ from ...qr import FORMAT_NONE from ...sd_card import DESCRIPTOR_FILE_EXTENSION, JSON_FILE_EXTENSION from ...themes import theme +from ...key import FINGERPRINT_SYMBOL class WalletDescriptor(Page): @@ -153,7 +154,10 @@ def display_wallet(self, wallet, is_loading=False): for i, key in enumerate(wallet.descriptor.keys): label = str(i + 1) + ". " if wallet.is_multisig() else "" fingerprints.append( - label + "⊚ " + binascii.hexlify(key.fingerprint).decode() + label + + FINGERPRINT_SYMBOL + + " " + + binascii.hexlify(key.fingerprint).decode() ) about.extend(fingerprints) if not wallet.is_multisig(): diff --git a/src/krux/pages/qr_view.py b/src/krux/pages/qr_view.py index 53725da89..2673cc02d 100644 --- a/src/krux/pages/qr_view.py +++ b/src/krux/pages/qr_view.py @@ -26,7 +26,7 @@ from ..themes import theme, WHITE, BLACK from ..krux_settings import t from ..qr import get_size -from ..display import DEFAULT_PADDING, FONT_HEIGHT, SMALLEST_WIDTH +from ..display import DEFAULT_PADDING, FONT_HEIGHT, SMALLEST_WIDTH, THIN_SPACE from ..input import ( BUTTON_ENTER, BUTTON_PAGE, @@ -381,9 +381,8 @@ def save_bmp_image(self, file_name, resolution): def save_qr_image_menu(self): """Options to save QR codes as images on SD card""" - suggested_file_name = self.title.replace(" ", "_") - # Replaces thin spaces too - suggested_file_name = suggested_file_name.replace(" ", "_") + # Replaces spaces and thin spaces + suggested_file_name = self.title.replace(" ", "_").replace(THIN_SPACE, "_") if len(suggested_file_name) > 10: # Crop file name suggested_file_name = suggested_file_name[:10] @@ -424,7 +423,7 @@ def print_qr(self): from .utils import Utils utils = Utils(self.ctx) - title = self.title.replace(" ", " ") # Replaces thin spaces + title = self.title.replace(THIN_SPACE, " ") # Replaces thin spaces utils.print_standard_qr(self.code, title=title, is_qr=True) # return MENU_EXIT # Uncomment to exit QR Viewer after printing diff --git a/src/krux/psbt.py b/src/krux/psbt.py index 485023fb5..fff82c01e 100644 --- a/src/krux/psbt.py +++ b/src/krux/psbt.py @@ -29,6 +29,7 @@ from .qr import FORMAT_PMOFN, FORMAT_BBQR from .key import Key, P2PKH, P2SH, P2SH_P2WPKH, P2SH_P2WSH, P2WPKH, P2WSH, P2TR from .sats_vb import SatsVB +from .display import THIN_SPACE # PSBT Output Types: CHANGE = 0 @@ -36,6 +37,7 @@ SPEND = 2 # We always uses thin spaces after the ₿ in this file +BTC_SYMBOL = "₿" class Counter(dict): @@ -282,7 +284,7 @@ def outputs(self): inp_amount += inp.non_witness_utxo.vout[inp.vout].value resume_inputs_str = ( (t("Inputs (%d):") % len(self.psbt.inputs)) - + (" ₿ %s" % format_btc(inp_amount)) + + (" " + BTC_SYMBOL + THIN_SPACE + "%s" % format_btc(inp_amount)) + "\n\n" ) @@ -338,7 +340,7 @@ def outputs(self): if len(spend_list) > 0: resume_spend_str = ( (t("Spend (%d):") % len(spend_list)) - + (" ₿ %s" % format_btc(spend_amount)) + + (" " + BTC_SYMBOL + THIN_SPACE + "%s" % format_btc(spend_amount)) + "\n\n" ) @@ -348,7 +350,12 @@ def outputs(self): t("Self-transfer or Change (%d):") % (len(self_transfer_list) + len(change_list)) ) - + (" ₿ %s" % format_btc(self_amount + change_amount)) + + ( + " " + + BTC_SYMBOL + + THIN_SPACE + + "%s" % format_btc(self_amount + change_amount) + ) + "\n\n" ) @@ -369,7 +376,7 @@ def outputs(self): resume_fee_str = ( t("Fee:") - + (" ₿ %s" % format_btc(fee)) + + (" " + BTC_SYMBOL + THIN_SPACE + "%s" % format_btc(fee)) + " (" + replace_decimal_separator("%.1f" % fee_percent) + "%)" @@ -390,21 +397,21 @@ def outputs(self): for i, out in enumerate(spend_list): messages.append( ((t("%d. Spend:") + " \n\n%s\n\n") % (i + 1, out[0])) - + ("₿ %s" % format_btc(out[1])) + + (BTC_SYMBOL + THIN_SPACE + "%s" % format_btc(out[1])) ) # sequence of self_transfer for i, out in enumerate(self_transfer_list): messages.append( ((t("%d. Self-transfer:") + " \n\n%s\n\n") % (i + 1, out[0])) - + ("₿ %s" % format_btc(out[1])) + + (BTC_SYMBOL + THIN_SPACE + "%s" % format_btc(out[1])) ) # sequence of change for i, out in enumerate(change_list): messages.append( ((t("%d. Change:") + " \n\n%s\n\n") % (i + 1, out[0])) - + ("₿ %s" % format_btc(out[1])) + + (BTC_SYMBOL + THIN_SPACE + "%s" % format_btc(out[1])) ) return messages, fee_percent diff --git a/src/krux/translations.py b/src/krux/translations.py index 5aa57a278..2642fa0c1 100644 --- a/src/krux/translations.py +++ b/src/krux/translations.py @@ -165,7 +165,6 @@ 2820726296: "Mnemonic laden", 2369474953: "Wallet laden", 2256441194: "Einen vertrauenswürdigen Wallet-Deskriptor laden, um Adressen anzuzeigen?", - 3490393896: "Untermnemonik laden?", 237136240: "Von SD-Karte laden", 879727077: "Von SD-Karte laden?", 1936877965: "Von der Kamera laden", @@ -477,7 +476,6 @@ 2820726296: "Importar Mnemónico", 2369474953: "Cargar Cartera", 2256441194: "¿Cargar un descriptor de monedero de confianza para ver las direcciones?", - 3490393896: "¿Cargar derivado?", 237136240: "Cargar desde tarjeta SD", 879727077: "¿Cargar desde la tarjeta SD?", 1936877965: "Cargar desde la cámara", @@ -663,14 +661,14 @@ 2995482424: "Compte", 2415648848: "Le compte n °0 serait supposé", 1043817877: "Index du compte", - 3439746594: "Ajoutez ou modifiez la phrase secrète?", + 3439746594: "Ajoutez ou modifiez la phrase secrète\u2009?", 2143824150: "Entropie supplémentaire de la caméra requise pour le mode AES-CBC", 3270727197: "Adresse", 283202181: "Alignez correctement la caméra et Tiny Seed.", 88746165: "Anti-éblouissement désactivé", 1521033296: "Anti-éblouissement activé", 3857613120: "Apparence", - 1056821534: "Es-tu sûr?", + 1056821534: "Es-tu sûr\u2009?", 1868069640: "Couleurs BGR", 3455872521: "Retour", 4151330982: "Retour au menu", @@ -687,21 +685,21 @@ 3138204438: "Capture annulée", 1207696150: "Changement", 3126552510: "Adresses de Changement", - 1583186953: "Changer de thème et redémarrer?", - 282444275: "Les modifications ont été enregistrées dans le Flash !", - 2697733395: "Modifications enregistrées sur la carte SD!", + 1583186953: "Changer de thème et redémarrer\u2009?", + 282444275: "Les modifications ont été enregistrées dans le Flash\u2009!", + 2697733395: "Modifications enregistrées sur la carte SD\u2009!", 388908871: "Les modifications dureront jusqu'à l'arrêt.", 3442025874: "Vérifiez la carte SD", - 3119547911: "Vérifiez que l'adresse appartient à cette portefeuille?", + 3119547911: "Vérifiez que l'adresse appartient à cette portefeuille\u2009?", 2856261511: "Adresses %d de monnaie revenues sans correspondance.", 2788541416: "Adresses %d de reception revenues sans correspondance.", 3377973275: "Vérification de l'adresse monnaie de %d à %d pour correspondance..", 2470115694: "Vérification de la carte SD..", 3547944367: "Vérification de l'adresse de reception de %d à %d pour correspondance..", 1851578965: "Indice enfant", - 4041895036: "Continuer?", + 4041895036: "Continuer\u2009?", 4094072796: "Créer du code QR", - 167798282: "Créer du code QR à partir du texte?", + 167798282: "Créer du code QR à partir du texte\u2009?", 678449760: "Créé:", 3513215254: "Code QR personnalisé", 3585411775: "Personnaliser", @@ -709,7 +707,7 @@ 124617190: "Profondeur de coupe", 597912140: "Méthode de coupe", 2504034831: "Décimal", - 2751113454: "Décrypter?", + 2751113454: "Décrypter\u2009?", 1272005728: "Portefeuille par défaut", 4102535566: "Profondeur par passage", 1712856005: "Adresses des descripteurs", @@ -731,7 +729,7 @@ 2780625730: "Entrez chaque mot de votre mnémonique BIP-39.", 889040671: "Erreur:", 1505332462: "Esc", - 3838465623: "Explorer des fichiers?", + 3838465623: "Explorer des fichiers\u2009?", 4170881190: "Exportation vers la carte SD..", 1711312434: "Clé publique", 3981762528: "Paramètres d'usine", @@ -747,7 +745,7 @@ 262248294: "Frais:", 104500973: "Taux d'alimentation", 3313339187: "Nom de fichier", - 1982637349: "Le nom de fichier %s existe sur la carte SD, écraser ?", + 1982637349: "Le nom de fichier %s existe sur la carte SD, écraser\u2009?", 4006602858: "Empreinte digitale manquante dans PSBT", 2542772894: "Le micrologiciel dépasse la taille maximale: %d", 3748840176: "Coordonnées X inversées", @@ -756,7 +754,7 @@ 1893243331: "Du stockage", 1871146425: "Effacez complètement votre carte SD dans un autre appareil pour assurer que les données soient irrécupérables", 3549015533: "Générer une mnémonique", - 3524220994: "Générer un mnémonique dérivé BIP-85 ?", + 3524220994: "Générer un mnémonique dérivé BIP-85\u2009?", 299338213: "Donnez à ce mnémonique un identifiant personnalisé?Sinon l'empreinte actuelle sera utilisée", 602716148: "Go", 1198393582: "Bonne entropie", @@ -764,11 +762,11 @@ 3580020863: "Clé public hexadécimal", 2691246967: "Hexadécimal", 3903754133: "Masquer les mnémoniques", - 3876651191: "Frais élevés!", + 3876651191: "Frais élevés\u2009!", 2880010062: "Id existe déjà", 3242179508: "Entrées (%d):", - 3034883011: "Installer?", - 3755547839: "Entropie insuffisante !", + 3034883011: "Installer\u2009?", + 3755547839: "Entropie insuffisante\u2009!", 2032416055: "Entropie insuffisante", 2585599782: "Adresse invalide", 2874529150: "Chargeur de démarrage invalide", @@ -788,13 +786,12 @@ 2176866982: "Ligne:", 2820726296: "Charger mnémonique", 2369474953: "Charger le portefeuille", - 2256441194: "Charger un descripteur de portefeuille de confiance pour afficher les adresses ?", - 3490393896: "Charger le mnémonique dérivé ?", + 2256441194: "Charger un descripteur de portefeuille de confiance pour afficher les adresses\u2009?", 237136240: "Charger depuis la carte SD", - 879727077: "Charger depuis la carte SD ?", + 879727077: "Charger depuis la carte SD\u2009?", 1936877965: "Charger depuis une caméra", - 669106195: "En charger qu'un?", - 3330705289: "Charger?", + 669106195: "En charger qu'un\u2009?", + 3330705289: "Charger\u2009?", 2596531078: "Caméra de Chargement..", 2488179069: "Chargement des adresses de monnaie..", 336702608: "Chargement de l'imprimante..", @@ -819,7 +816,7 @@ 3634967631: "Nouveau micrologiciel détecté.", 4063104189: "Non", 2325721074: "Pas de phrase secrète", - 4092516657: "Pas assez de jets !", + 4092516657: "Pas assez de jets\u2009!", 3089363813: "Nombres", 1577637745: "Octale", 391304453: "Autres formats", @@ -830,36 +827,36 @@ 3559456868: "Taille de la pièce", 4249903283: "Phrase secréte", 3745269737: "Inadéquation du chemin", - 500286397: "Structure détecté !", - 3040011773: "Supprimer définitivement tous les mnémoniques et paramètres chiffrés stockés dans le flash ?", + 500286397: "Structure détecté\u2009!", + 3040011773: "Supprimer définitivement tous les mnémoniques et paramètres chiffrés stockés dans le flash\u2009?", 140802882: "Persister", 2578106186: "Indice de déviation des pixels:", 1703779997: "QR en Texte Brut", 3561756278: "Veuillez charger un descripteur de sortie de portefeuille", 784609464: "Taux de plongée", 3761518438: "Mauvaise entropie", - 3639136476: "Faible entropie détectée!", + 3639136476: "Faible entropie détectée\u2009!", 3037062877: "Test d'impression QR", - 2362732578: "Imprimer Tiny Seed?", + 2362732578: "Imprimer Tiny Seed\u2009?", 3123770978: "Imprimer en QR", 3345150514: "Imprimer en QR?", - 3339507095: "Imprimer?", + 3339507095: "Imprimer\u2009?", 1123106929: "Imprimante", - 3903571079: "Le conducteur d'imprimante n'est pas défini!", + 3903571079: "Le conducteur d'imprimante n'est pas défini\u2009!", 3388542885: "Impression", - 3593149291: "Procéder quand même ?", - 2580599003: "Procéder?", + 3593149291: "Procéder quand même\u2009?", + 2580599003: "Procéder\u2009?", 556126964: "Traitement ...", 1848310591: "QR Code", 710709610: "RX Fiche", 2697857197: "Recevoir", 1746677167: "Adresses de Réception", 1658501467: "Région:", - 3739634002: "Supprimer %s?", + 3739634002: "Supprimer %s\u2009?", 1476462492: "Supprimer mnémonique", 1557093280: "Supprimer les fichiers micrologiciel de la carte SD?", 2817311427: "Rés. - Format", - 2365886561: "Restaurer les paramètres d'usine et redémarrer ?", + 2365886561: "Restaurer les paramètres d'usine et redémarrer\u2009?", 3091105710: "Retour au visualiseur QR", 1662254634: "Examinez les données numérisées, modifiez-les si nécessaire", 1963678224: "À droite", @@ -873,7 +870,7 @@ 817419367: "SHA256 de snapshot:", 699906428: "Enregistrer l'image QR sur la carte SD", 2163347007: "Enregistrer sur la carte SD", - 3531742595: "Enregistrer sur la carte SD ?", + 3531742595: "Enregistrer sur la carte SD\u2009?", 2940025484: "Enregistré sur la carte SD", 3531363515: "Enregistrement en cours...", 763824768: "L'échelle", @@ -891,10 +888,10 @@ 1825881236: "Fermer", 3656120779: "Delai d'Arrêt", 2120776272: "Éteindre..", - 1061961408: "Signature", + 1061961408: "Signer", 2293863356: "Signer avec le code QR", 2879966040: "Signer sur la carte SD", - 4282338366: "Signature?", + 4282338366: "Signer\u2009?", 746161122: "Signature", 1988416729: "Message signé", 3672006076: "PSBT signé", @@ -917,7 +914,7 @@ 725348723: "Outils", 3684696112: "Seuil Tactile", 2978718564: "Écran Tactile", - 2732611775: "Réessayer?", + 2732611775: "Réessayer\u2009?", 401829098: "Entrez la phrase secrète BIP-39", 2061556020: "Clé de type", 760733724: "Erreur inattendue lors de l'enregistrement dans le Flash.", @@ -941,7 +938,7 @@ 2076481321: "Portefeuille", 2297028319: "Descripteur de Portefeuille", 4232654916: "Descripteur de sortie du portefeuille", - 2587172867: "Descripteur de sortie du portefeuille chargé!", + 2587172867: "Descripteur de sortie du portefeuille chargé\u2009!", 2499782468: "Descripteur de sortie du portefeuille introuvable.", 2671738224: "Avertissement:", 262410364: "Effacer l'appareil", @@ -952,8 +949,8 @@ 1303016265: "Oui", 771968845: "Vos modifications seront stockées sur le stockage flash de l'appareil.", 2569054451: "Vos modifications seront stockées sur la carte SD.", - 2652750163: "est une adresse de monnaie valide!", - 58621376: "est une adresse de reception valide!", + 2652750163: "est une adresse de monnaie valide\u2009!", + 58621376: "est une adresse de reception valide\u2009!", 2265949116: "INTROUVABLE dans les premières %d adresses de monnaie", 1266915636: "INTROUVABLE dans les premières %d adresses de reception", }, @@ -1101,7 +1098,6 @@ 2820726296: "Geheugensteun laden", 2369474953: "Portemonnee laden", 2256441194: "Een vertrouwde portemonnee descriptor laden om adressen te bekijken?", - 3490393896: "Afgeleide geheugensteun laden?", 237136240: "Laden vanaf SD kaart", 879727077: "Laden vanaf SD kaart?", 1936877965: "Laden van camera", @@ -1413,7 +1409,6 @@ 2820726296: "Ładuj mnemoniczne", 2369474953: "Załaduj portfel", 2256441194: "Załadować deskryptor zaufanego portfela, aby wyświetlić adresy?", - 3490393896: "Załadować podrzędną mnemonikę?", 237136240: "Załaduj z karty SD", 879727077: "Załaduj z karty SD?", 1936877965: "Załaduj z kamery", @@ -1725,7 +1720,6 @@ 2820726296: "Carregar Mnemônico", 2369474953: "Carregar Carteira", 2256441194: "Carregar um descritor de carteira confiável para visualizar endereços?", - 3490393896: "Carregar derivado?", 237136240: "Carregar do cartão SD", 879727077: "Carregar do cartão SD?", 1936877965: "Carregar da câmera", @@ -2037,7 +2031,6 @@ 2820726296: "Загрузить Мнемонику", 2369474953: "Загрузить кошелек", 2256441194: "Загрузить дескриптор доверенного кошелька для просмотра адресов?", - 3490393896: "Загрузить дочерний элемент?", 237136240: "Загрузка с SD-карты", 879727077: "Загрузить с SD карты?", 1936877965: "Из камеры", @@ -2349,7 +2342,6 @@ 2820726296: "Mnemonic Yükle", 2369474953: "Cüzdan Yükle", 2256441194: "Adresleri görüntülemek için güvenilir bir cüzdan tanımlayıcısı yüklensin mi?", - 3490393896: "Türev yüklensin mi?", 237136240: "SD karttan yükle", 879727077: "SD karttan yüklensin mi?", 1936877965: "Kameradan yükle", @@ -2661,7 +2653,6 @@ 2820726296: "Tải mã mnemonic", 2369474953: "Nạp Ví", 2256441194: "Tải mô tả ví đáng tin cậy để xem địa chỉ?", - 3490393896: "Nạp Mnemonic phụ?", 237136240: "Tải từ thẻ SD", 879727077: "Tải từ thẻ SD?", 1936877965: "Tải từ máy ảnh",