mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-22 01:47:00 +01:00
fix(privateKey): Restore hold-to-reveal button for private key export (#20109)
* fix(privateKey): Restore hold-to-reveal button for private key export * lint and unit test fixes * adding e2e tests to reveal private key * fixing lint issues * fixed: Private key is able to be presented without tapping and holding the "Hold to reveal" CTA * Incorrect password test and support hold to reveal * improving unit tests --------- Co-authored-by: Plasma Corral <32695229+plasmacorral@users.noreply.github.com> Co-authored-by: Gustavo Antunes <17601467+gantunesr@users.noreply.github.com>
This commit is contained in:
parent
d6a0a32714
commit
d76b458235
15
app/_locales/am/messages.json
generated
15
app/_locales/am/messages.json
generated
@ -169,9 +169,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "አድራሻን ወደ ቅንጥብ ሰሌዳ ቅዳ"
|
"message": "አድራሻን ወደ ቅንጥብ ሰሌዳ ቅዳ"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "የግል ቁልፍዎ ይህ ነው (ለመቅዳት ጠቅ ያድርጉ)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "ወደ ቅንጥብ ሰሌዳ ገልብጥ"
|
"message": "ወደ ቅንጥብ ሰሌዳ ገልብጥ"
|
||||||
},
|
},
|
||||||
@ -232,9 +229,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "በ ENS የስም ምዝገባ ላይ የተፈጠረ ስህተት"
|
"message": "በ ENS የስም ምዝገባ ላይ የተፈጠረ ስህተት"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "የይለፍ ቃል ያስገቡ"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "ለመቀጠል የይለፍ ቃል ያስገቡ"
|
"message": "ለመቀጠል የይለፍ ቃል ያስገቡ"
|
||||||
},
|
},
|
||||||
@ -247,9 +241,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "እይታን ዘርጋ"
|
"message": "እይታን ዘርጋ"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "የግል ቁልፍን ላክ"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "አልተሳካም"
|
"message": "አልተሳካም"
|
||||||
},
|
},
|
||||||
@ -648,9 +639,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "በመላኪያ ማያ ላይ የ hex ውሂብ መስክን ለማሳየት ይህን ይምረጡ"
|
"message": "በመላኪያ ማያ ላይ የ hex ውሂብ መስክን ለማሳየት ይህን ይምረጡ"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "የግል ቁልፎችን አሳይ"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "የፊርማ ጥያቄ"
|
"message": "የፊርማ ጥያቄ"
|
||||||
},
|
},
|
||||||
@ -771,9 +759,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "እንደገና ሞክር"
|
"message": "እንደገና ሞክር"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "የ MetaMask የይለፍ ቃልዎን ይጻፉ"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "ያልተፈቀደ"
|
"message": "ያልተፈቀደ"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/ar/messages.json
generated
15
app/_locales/ar/messages.json
generated
@ -179,9 +179,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "نسخ العنوان إلى الحافظة"
|
"message": "نسخ العنوان إلى الحافظة"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "هذا هو مفتاحك الخاص (انقر للنسخ)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "نسخ إلى الحافظة"
|
"message": "نسخ إلى الحافظة"
|
||||||
},
|
},
|
||||||
@ -245,9 +242,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "خطأ في تسجيل اسم ENS"
|
"message": "خطأ في تسجيل اسم ENS"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "أدخل كلمة مرور"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "أدخل كلمة المرور للمتابعة"
|
"message": "أدخل كلمة المرور للمتابعة"
|
||||||
},
|
},
|
||||||
@ -260,9 +254,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "توسيع العرض"
|
"message": "توسيع العرض"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "تصدير المفتاح الخاص"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "فشل"
|
"message": "فشل"
|
||||||
},
|
},
|
||||||
@ -660,9 +651,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "حدد هذا لإظهار حقل بيانات سداسي عشرية على شاشة الإرسال"
|
"message": "حدد هذا لإظهار حقل بيانات سداسي عشرية على شاشة الإرسال"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "عرض المفاتيح الخاصة"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "طلب التوقيع"
|
"message": "طلب التوقيع"
|
||||||
},
|
},
|
||||||
@ -783,9 +771,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "إعادة المحاولة"
|
"message": "إعادة المحاولة"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "أدخل كلمة مرور MetaMask الخاصة بك"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "تم الرفض"
|
"message": "تم الرفض"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/bg/messages.json
generated
15
app/_locales/bg/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Копирайте адреса в клипборда"
|
"message": "Копирайте адреса в клипборда"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Това е Вашият личен ключ (кликнете, за да го копирате)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Копиране в буферната памет"
|
"message": "Копиране в буферната памет"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Грешка при регистрацията на име на ENS"
|
"message": "Грешка при регистрацията на име на ENS"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Въведете парола"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Въведете парола, за да продължите"
|
"message": "Въведете парола, за да продължите"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Разгъване на изглед"
|
"message": "Разгъване на изглед"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Експортиране на частен ключ"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Неуспешно"
|
"message": "Неуспешно"
|
||||||
},
|
},
|
||||||
@ -659,9 +650,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Изберете това, за да се покаже полето с шестнадесетични данни на екрана за изпращане"
|
"message": "Изберете това, за да се покаже полето с шестнадесетични данни на екрана за изпращане"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Показване на частни ключове"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Заявка за подпис"
|
"message": "Заявка за подпис"
|
||||||
},
|
},
|
||||||
@ -782,9 +770,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Нов опит"
|
"message": "Нов опит"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Въведете паролата си за MetaMask"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Неодобрено"
|
"message": "Неодобрено"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/bn/messages.json
generated
15
app/_locales/bn/messages.json
generated
@ -172,9 +172,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "ক্লিপবোর্ডে ঠিকানা কপি করুন"
|
"message": "ক্লিপবোর্ডে ঠিকানা কপি করুন"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "এটি হল আপনার গোপন কী (কপি করতে ক্লিক করুন)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "ক্লিপবোর্ডে কপি করুন"
|
"message": "ক্লিপবোর্ডে কপি করুন"
|
||||||
},
|
},
|
||||||
@ -238,9 +235,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "ENS নাম নিবন্ধীকরণে ত্রুটি হয়েছে"
|
"message": "ENS নাম নিবন্ধীকরণে ত্রুটি হয়েছে"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "পাসওয়ার্ড লিখুন"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "অবিরত রাখতে পাসওয়ার্ড লিখুন"
|
"message": "অবিরত রাখতে পাসওয়ার্ড লিখুন"
|
||||||
},
|
},
|
||||||
@ -253,9 +247,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "ভিউ সম্প্রসারিত করুন"
|
"message": "ভিউ সম্প্রসারিত করুন"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "ব্যক্তিগত কী রপ্তানি করুন"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "ব্যর্থ হয়েছে"
|
"message": "ব্যর্থ হয়েছে"
|
||||||
},
|
},
|
||||||
@ -657,9 +648,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "পাঠাবার স্ক্রিনে হেক্স ডেটা ফিল্ডটি দেখাবার জন্য এটি নির্বাচন করুন"
|
"message": "পাঠাবার স্ক্রিনে হেক্স ডেটা ফিল্ডটি দেখাবার জন্য এটি নির্বাচন করুন"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "গোপনীয় কীগুলি দেখান"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "স্বাক্ষরের অনুরোধ"
|
"message": "স্বাক্ষরের অনুরোধ"
|
||||||
},
|
},
|
||||||
@ -780,9 +768,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "আবার করুন"
|
"message": "আবার করুন"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "আপনার MetaMask পাসওয়ার্ড টাইপ করুন"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "অননুমোদিত"
|
"message": "অননুমোদিত"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/ca/messages.json
generated
15
app/_locales/ca/messages.json
generated
@ -172,9 +172,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Copiar adreça al porta-retalls"
|
"message": "Copiar adreça al porta-retalls"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Aquesta és la teva clau privada (fes clic per a copiar)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Copia al porta-retalls"
|
"message": "Copia al porta-retalls"
|
||||||
},
|
},
|
||||||
@ -238,9 +235,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Error al registre de nom ENS"
|
"message": "Error al registre de nom ENS"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Introdueix contrasenya"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Introdueix la contrasenya per continuar"
|
"message": "Introdueix la contrasenya per continuar"
|
||||||
},
|
},
|
||||||
@ -253,9 +247,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Eixamplar Vista"
|
"message": "Eixamplar Vista"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Exportar Clau Privada."
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Fallit"
|
"message": "Fallit"
|
||||||
},
|
},
|
||||||
@ -644,9 +635,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Selecciona això per a mostrar el camp de dades Hex a la pantalla d'enviament"
|
"message": "Selecciona això per a mostrar el camp de dades Hex a la pantalla d'enviament"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Mostrar Claus Privades"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Sol·licitud de Signatura"
|
"message": "Sol·licitud de Signatura"
|
||||||
},
|
},
|
||||||
@ -761,9 +749,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Torna-ho a provar"
|
"message": "Torna-ho a provar"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Tecleja la teva contrasenya de MetaMask"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Pendent d'aprovació"
|
"message": "Pendent d'aprovació"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/cs/messages.json
generated
15
app/_locales/cs/messages.json
generated
@ -72,9 +72,6 @@
|
|||||||
"copiedExclamation": {
|
"copiedExclamation": {
|
||||||
"message": "Zkopírováno!"
|
"message": "Zkopírováno!"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Toto je váš privátní klíč (kliknutím zkopírujte)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopírovat do schránky"
|
"message": "Kopírovat do schránky"
|
||||||
},
|
},
|
||||||
@ -105,15 +102,9 @@
|
|||||||
"edit": {
|
"edit": {
|
||||||
"message": "Upravit"
|
"message": "Upravit"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Zadejte heslo"
|
|
||||||
},
|
|
||||||
"etherscanView": {
|
"etherscanView": {
|
||||||
"message": "Prohlédněte si účet na Etherscan"
|
"message": "Prohlédněte si účet na Etherscan"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Exportovat privátní klíč"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Neúspěšné"
|
"message": "Neúspěšné"
|
||||||
},
|
},
|
||||||
@ -304,9 +295,6 @@
|
|||||||
"settings": {
|
"settings": {
|
||||||
"message": "Nastavení"
|
"message": "Nastavení"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Zobrazit privátní klíče"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Požadavek podpisu"
|
"message": "Požadavek podpisu"
|
||||||
},
|
},
|
||||||
@ -355,9 +343,6 @@
|
|||||||
"transactionError": {
|
"transactionError": {
|
||||||
"message": "Chyba transakce. Vyhozena výjimka v kódu kontraktu."
|
"message": "Chyba transakce. Vyhozena výjimka v kódu kontraktu."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Zadejte své heslo"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Neschváleno"
|
"message": "Neschváleno"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/da/messages.json
generated
15
app/_locales/da/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Kopier adresse til udklipsholder"
|
"message": "Kopier adresse til udklipsholder"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Dette er din private nøgle (klik for at kopiere)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopiér til udklipsholderen"
|
"message": "Kopiér til udklipsholderen"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Fejl i ENS-navneregistrering"
|
"message": "Fejl i ENS-navneregistrering"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Indtast kodeord"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Indtast adgangskode for at fortsætte"
|
"message": "Indtast adgangskode for at fortsætte"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Udvis Visning"
|
"message": "Udvis Visning"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Eksporter privat nøgle"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Mislykkedes"
|
"message": "Mislykkedes"
|
||||||
},
|
},
|
||||||
@ -641,9 +632,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Vælg dette for at vise hex-datafeltet på send-skærmen"
|
"message": "Vælg dette for at vise hex-datafeltet på send-skærmen"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Vis private nøgler"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Signaturforespørgsel"
|
"message": "Signaturforespørgsel"
|
||||||
},
|
},
|
||||||
@ -755,9 +743,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Prøv igen"
|
"message": "Prøv igen"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Skriv din MetaMask-adgangskode"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Ikke godkendt"
|
"message": "Ikke godkendt"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/de/messages.json
generated
15
app/_locales/de/messages.json
generated
@ -898,9 +898,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Adresse in die Zwischenablage kopieren"
|
"message": "Adresse in die Zwischenablage kopieren"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Das ist Ihr Private Key (klicken um zu kopieren)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "Roh-Transaktionsdaten kopieren"
|
"message": "Roh-Transaktionsdaten kopieren"
|
||||||
},
|
},
|
||||||
@ -1482,9 +1479,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "Optionales Passwort eingeben"
|
"message": "Optionales Passwort eingeben"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Passwort eingeben"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Zum Fortfahren Passwort eingeben"
|
"message": "Zum Fortfahren Passwort eingeben"
|
||||||
},
|
},
|
||||||
@ -1561,9 +1555,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "MetaMask Snaps erforschen"
|
"message": "MetaMask Snaps erforschen"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Private Key exportieren"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "Erweitern Sie das Wallet-Erlebnis."
|
"message": "Erweitern Sie das Wallet-Erlebnis."
|
||||||
},
|
},
|
||||||
@ -3868,9 +3859,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "Privaten Key anzeigen"
|
"message": "Privaten Key anzeigen"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Private Keys anzeigen"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "Test-Netzwerke anzeigen"
|
"message": "Test-Netzwerke anzeigen"
|
||||||
},
|
},
|
||||||
@ -5130,9 +5118,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "Transaktionseinsichten für diesen Vertrag zu diesem Zeitpunkt nicht unterstützt."
|
"message": "Transaktionseinsichten für diesen Vertrag zu diesem Zeitpunkt nicht unterstützt."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Passwort eingeben"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "Geben Sie Ihre geheime Wiederherstellungsphrase ein"
|
"message": "Geben Sie Ihre geheime Wiederherstellungsphrase ein"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/el/messages.json
generated
15
app/_locales/el/messages.json
generated
@ -898,9 +898,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Αντιγράψτε τη διεύθυνση στο πρόχειρο"
|
"message": "Αντιγράψτε τη διεύθυνση στο πρόχειρο"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Αυτό είναι το ιδιωτικό σας κλειδί (κάντε κλικ για αντιγραφή)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "Αντιγραφή ακατέργαστων δεδομένων συναλλαγών"
|
"message": "Αντιγραφή ακατέργαστων δεδομένων συναλλαγών"
|
||||||
},
|
},
|
||||||
@ -1482,9 +1479,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "Πληκτρολογήστε προαιρετικό κωδικό πρόσβασης"
|
"message": "Πληκτρολογήστε προαιρετικό κωδικό πρόσβασης"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Εισάγετε τον κωδικό πρόσβασης"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Πληκτρολογήστε τον κωδικό πρόσβασης για να συνεχίσετε"
|
"message": "Πληκτρολογήστε τον κωδικό πρόσβασης για να συνεχίσετε"
|
||||||
},
|
},
|
||||||
@ -1561,9 +1555,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "Εξερευνήστε το MetaMask Snaps"
|
"message": "Εξερευνήστε το MetaMask Snaps"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Εξαγωγή Ιδιωτικού Κλειδιού"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "Επεκτείνετε την εμπειρία του πορτοφολιού."
|
"message": "Επεκτείνετε την εμπειρία του πορτοφολιού."
|
||||||
},
|
},
|
||||||
@ -3868,9 +3859,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "Εμφάνιση ιδιωτικού κλειδιού"
|
"message": "Εμφάνιση ιδιωτικού κλειδιού"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Εμφάνιση Ιδιωτικών Κλειδιών"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "Εμφάνιση δοκιμαστικών δικτύων"
|
"message": "Εμφάνιση δοκιμαστικών δικτύων"
|
||||||
},
|
},
|
||||||
@ -5130,9 +5118,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "Οι αναλύσεις συναλλαγών εις βάθος δεν υποστηρίζονται για αυτό το συμβόλαιο αυτή τη στιγμή."
|
"message": "Οι αναλύσεις συναλλαγών εις βάθος δεν υποστηρίζονται για αυτό το συμβόλαιο αυτή τη στιγμή."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Πληκτρολογήστε τον κωδικό πρόσβασής σας MetaMask"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "Πληκτρολογήστε τη Μυστική σας Φράση Ανάκτησης"
|
"message": "Πληκτρολογήστε τη Μυστική σας Φράση Ανάκτησης"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/en/messages.json
generated
15
app/_locales/en/messages.json
generated
@ -901,9 +901,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Copy address to clipboard"
|
"message": "Copy address to clipboard"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "This is your private key (click to copy)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "Copy raw transaction data"
|
"message": "Copy raw transaction data"
|
||||||
},
|
},
|
||||||
@ -1485,9 +1482,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "Enter optional password"
|
"message": "Enter optional password"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Enter password"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Enter password to continue"
|
"message": "Enter password to continue"
|
||||||
},
|
},
|
||||||
@ -1564,9 +1558,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "Explore MetaMask Snaps"
|
"message": "Explore MetaMask Snaps"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Export private key"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "Extend the wallet experience."
|
"message": "Extend the wallet experience."
|
||||||
},
|
},
|
||||||
@ -3871,9 +3862,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "Show private key"
|
"message": "Show private key"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Show Private Keys"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "Show test networks"
|
"message": "Show test networks"
|
||||||
},
|
},
|
||||||
@ -5133,9 +5121,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "Transaction insights not supported for this contract at this time."
|
"message": "Transaction insights not supported for this contract at this time."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Type your MetaMask password"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "Type your Secret Recovery Phrase"
|
"message": "Type your Secret Recovery Phrase"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/es/messages.json
generated
15
app/_locales/es/messages.json
generated
@ -898,9 +898,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Copiar dirección al Portapapeles"
|
"message": "Copiar dirección al Portapapeles"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Esta es su clave privada (haga clic para copiarla)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "Copiar los datos de las transacciones en bruto"
|
"message": "Copiar los datos de las transacciones en bruto"
|
||||||
},
|
},
|
||||||
@ -1482,9 +1479,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "Ingrese la contraseña opcional"
|
"message": "Ingrese la contraseña opcional"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Escribir contraseña"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Escribir contraseña para continuar"
|
"message": "Escribir contraseña para continuar"
|
||||||
},
|
},
|
||||||
@ -1561,9 +1555,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "Explore complementos de MetaMask"
|
"message": "Explore complementos de MetaMask"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Exportar clave privada"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "Amplíe la experiencia de uso de la cartera."
|
"message": "Amplíe la experiencia de uso de la cartera."
|
||||||
},
|
},
|
||||||
@ -3868,9 +3859,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "Mostrar clave privada"
|
"message": "Mostrar clave privada"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Mostrar claves privadas"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "Mostrar redes de prueba"
|
"message": "Mostrar redes de prueba"
|
||||||
},
|
},
|
||||||
@ -5130,9 +5118,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "En este momento no se admiten informaciones sobre las transacciones para este contrato."
|
"message": "En este momento no se admiten informaciones sobre las transacciones para este contrato."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Escriba su contraseña de MetaMask"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "Escriba la frase secreta de respaldo"
|
"message": "Escriba la frase secreta de respaldo"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/es_419/messages.json
generated
15
app/_locales/es_419/messages.json
generated
@ -475,9 +475,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Copiar dirección al Portapapeles"
|
"message": "Copiar dirección al Portapapeles"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Esta es su clave privada (haga clic para copiarla)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "Copiar los datos de las transacciones en bruto"
|
"message": "Copiar los datos de las transacciones en bruto"
|
||||||
},
|
},
|
||||||
@ -767,9 +764,6 @@
|
|||||||
"enterMaxSpendLimit": {
|
"enterMaxSpendLimit": {
|
||||||
"message": "Escribir límite máximo de gastos"
|
"message": "Escribir límite máximo de gastos"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Escribir contraseña"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Escribir contraseña para continuar"
|
"message": "Escribir contraseña para continuar"
|
||||||
},
|
},
|
||||||
@ -826,9 +820,6 @@
|
|||||||
"experimental": {
|
"experimental": {
|
||||||
"message": "Experimental"
|
"message": "Experimental"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Exportar clave privada"
|
|
||||||
},
|
|
||||||
"externalExtension": {
|
"externalExtension": {
|
||||||
"message": "Extensión externa"
|
"message": "Extensión externa"
|
||||||
},
|
},
|
||||||
@ -2012,9 +2003,6 @@
|
|||||||
"showPermissions": {
|
"showPermissions": {
|
||||||
"message": "Mostrar permisos"
|
"message": "Mostrar permisos"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Mostrar claves privadas"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "Mostrar redes de prueba"
|
"message": "Mostrar redes de prueba"
|
||||||
},
|
},
|
||||||
@ -2629,9 +2617,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "En este momento no se admiten informaciones sobre las transacciones para este contrato."
|
"message": "En este momento no se admiten informaciones sobre las transacciones para este contrato."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Escriba su contraseña de MetaMask"
|
|
||||||
},
|
|
||||||
"u2f": {
|
"u2f": {
|
||||||
"message": "U2F",
|
"message": "U2F",
|
||||||
"description": "A name on an API for the browser to interact with devices that support the U2F protocol. On some browsers we use it to connect MetaMask to Ledger devices."
|
"description": "A name on an API for the browser to interact with devices that support the U2F protocol. On some browsers we use it to connect MetaMask to Ledger devices."
|
||||||
|
15
app/_locales/et/messages.json
generated
15
app/_locales/et/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Kopeeri aadress lõikelauale"
|
"message": "Kopeeri aadress lõikelauale"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "See on teie privaatne võti (klõpsake kopeerimiseks)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopeeri lõikelauale"
|
"message": "Kopeeri lõikelauale"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Tõrge ENS-i nime registreerimisel"
|
"message": "Tõrge ENS-i nime registreerimisel"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Sisestage parool"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Jätkamiseks sisestage parool"
|
"message": "Jätkamiseks sisestage parool"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Laienda vaadet"
|
"message": "Laienda vaadet"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Ekspordi privaatvõti"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Nurjus"
|
"message": "Nurjus"
|
||||||
},
|
},
|
||||||
@ -653,9 +644,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Valige see, et kuvada saatmisekraanil hex-andmete väli"
|
"message": "Valige see, et kuvada saatmisekraanil hex-andmete väli"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Kuva privaatvõtmed"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Allkirja taotlus"
|
"message": "Allkirja taotlus"
|
||||||
},
|
},
|
||||||
@ -776,9 +764,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Proovi uuesti"
|
"message": "Proovi uuesti"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Sisestage oma MetaMaski parool"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Kinnitamata"
|
"message": "Kinnitamata"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/fa/messages.json
generated
15
app/_locales/fa/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "کاپی آدرس به کلیپ بورد"
|
"message": "کاپی آدرس به کلیپ بورد"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "این کلید خصوصی شما است (برای کاپی نمودن کلیک کنید)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "کپی در بریدهدان"
|
"message": "کپی در بریدهدان"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "خطا در ثبت نام ENS"
|
"message": "خطا در ثبت نام ENS"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "رمز عبور را وارد کنید"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "برای ادامه رمز عبور را وارد کنید"
|
"message": "برای ادامه رمز عبور را وارد کنید"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "توسعه ساحه دید"
|
"message": "توسعه ساحه دید"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "صدور کلید شخصی"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "ناموفق شد"
|
"message": "ناموفق شد"
|
||||||
},
|
},
|
||||||
@ -663,9 +654,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "برای نمایش بخش اطلاعات hex در صفحه ارسال این را انتخاب نمایید"
|
"message": "برای نمایش بخش اطلاعات hex در صفحه ارسال این را انتخاب نمایید"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "نمایش کلید های شخصی"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "درخواست امضاء"
|
"message": "درخواست امضاء"
|
||||||
},
|
},
|
||||||
@ -786,9 +774,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "امتحان مجدد"
|
"message": "امتحان مجدد"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "رمز عبور MetaMask تان را تایپ نمایید"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "تصدیق ناشده"
|
"message": "تصدیق ناشده"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/fi/messages.json
generated
15
app/_locales/fi/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Kopioi osoite leikepöydälle"
|
"message": "Kopioi osoite leikepöydälle"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Tämä on yksityinen avaimesi (kopioi napsauttamalla)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopioi leikepöydälle"
|
"message": "Kopioi leikepöydälle"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Virhe ENS-nimen rekisteröinnissä"
|
"message": "Virhe ENS-nimen rekisteröinnissä"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Kirjoita salasana"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Syötä salasana voidaksesi jatkaa"
|
"message": "Syötä salasana voidaksesi jatkaa"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Laajenna näkymää"
|
"message": "Laajenna näkymää"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Vie yksityinen avain"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Epäonnistui"
|
"message": "Epäonnistui"
|
||||||
},
|
},
|
||||||
@ -660,9 +651,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Näytä hex-tietokenttä lähetysnäytössä valitsemalla tämän"
|
"message": "Näytä hex-tietokenttä lähetysnäytössä valitsemalla tämän"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Näytä yksityiset avaimet"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Allekirjoitus pyydetään"
|
"message": "Allekirjoitus pyydetään"
|
||||||
},
|
},
|
||||||
@ -783,9 +771,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Yritä uudelleen"
|
"message": "Yritä uudelleen"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Kirjoita MetaMask-salasanasi"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Ei hyväksytty"
|
"message": "Ei hyväksytty"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/fil/messages.json
generated
15
app/_locales/fil/messages.json
generated
@ -154,9 +154,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Kopyahin ang address sa clipboard"
|
"message": "Kopyahin ang address sa clipboard"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Ito ang iyong pribadong private key (i-click para kopyahin)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopyahin sa clipboard"
|
"message": "Kopyahin sa clipboard"
|
||||||
},
|
},
|
||||||
@ -217,9 +214,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "May error sa pagrerehistro ng ENS name"
|
"message": "May error sa pagrerehistro ng ENS name"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Ilagay ang password"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Ilagay ang password para magpatuloy"
|
"message": "Ilagay ang password para magpatuloy"
|
||||||
},
|
},
|
||||||
@ -229,9 +223,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "I-expand ang View"
|
"message": "I-expand ang View"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "I-export ang Private Key"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Nabigo"
|
"message": "Nabigo"
|
||||||
},
|
},
|
||||||
@ -587,9 +578,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Piliin ito para ipakita ang hex data field sa screen ng pagpapadala"
|
"message": "Piliin ito para ipakita ang hex data field sa screen ng pagpapadala"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Ipakita ang mga Private Key"
|
|
||||||
},
|
|
||||||
"sign": {
|
"sign": {
|
||||||
"message": "I-sign"
|
"message": "I-sign"
|
||||||
},
|
},
|
||||||
@ -698,9 +686,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Subukang muli"
|
"message": "Subukang muli"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "I-type ang iyong password sa MetaMask"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Hindi inaprubahan"
|
"message": "Hindi inaprubahan"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/fr/messages.json
generated
15
app/_locales/fr/messages.json
generated
@ -898,9 +898,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Copier l’addresse dans le presse-papier"
|
"message": "Copier l’addresse dans le presse-papier"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Ceci est votre clé privée (cliquez pour copier)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "Copier les données brutes de la transaction"
|
"message": "Copier les données brutes de la transaction"
|
||||||
},
|
},
|
||||||
@ -1482,9 +1479,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "Entrez le mot de passe facultatif"
|
"message": "Entrez le mot de passe facultatif"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Entrez votre mot de passe"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Entrez votre mot de passe pour continuer"
|
"message": "Entrez votre mot de passe pour continuer"
|
||||||
},
|
},
|
||||||
@ -1561,9 +1555,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "Explorer les Snaps MetaMask"
|
"message": "Explorer les Snaps MetaMask"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Exporter la clé privée"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "Prolongez l’expérience avec ce portefeuille."
|
"message": "Prolongez l’expérience avec ce portefeuille."
|
||||||
},
|
},
|
||||||
@ -3868,9 +3859,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "Afficher la clé privée"
|
"message": "Afficher la clé privée"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Afficher les clés privées"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "Afficher les réseaux de test"
|
"message": "Afficher les réseaux de test"
|
||||||
},
|
},
|
||||||
@ -5130,9 +5118,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "Les aperçus de transaction ne sont pas pris en charge pour ce contrat à l’heure actuelle."
|
"message": "Les aperçus de transaction ne sont pas pris en charge pour ce contrat à l’heure actuelle."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Entrez votre mot de passe"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "Saisissez votre phrase secrète de récupération"
|
"message": "Saisissez votre phrase secrète de récupération"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/he/messages.json
generated
15
app/_locales/he/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "העתק כתובת ללוח"
|
"message": "העתק כתובת ללוח"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "זה המפתח הפרטי שלך (נא להקיש כדי להעתיק)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "העתק ללוח"
|
"message": "העתק ללוח"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "שגיאה ברישום שם ENS"
|
"message": "שגיאה ברישום שם ENS"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "יש להזין ססמה"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "יש להזין ססמה כדי להמשיך"
|
"message": "יש להזין ססמה כדי להמשיך"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "הרחב תצוגה"
|
"message": "הרחב תצוגה"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "יצא/י מפתח פרטי"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "נכשל"
|
"message": "נכשל"
|
||||||
},
|
},
|
||||||
@ -660,9 +651,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "בחר/י בזה כדי להציג את שדה הנתונים ההקסדצימאלים על מסך השליחה"
|
"message": "בחר/י בזה כדי להציג את שדה הנתונים ההקסדצימאלים על מסך השליחה"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "הצג מפתחות פרטיים"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "בקשת חתימה"
|
"message": "בקשת חתימה"
|
||||||
},
|
},
|
||||||
@ -783,9 +771,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "ניסיון חוזר"
|
"message": "ניסיון חוזר"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "נא להקליד את סיסמת MetaMask שלך"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "לא אושר"
|
"message": "לא אושר"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/hi/messages.json
generated
15
app/_locales/hi/messages.json
generated
@ -898,9 +898,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "क्लिपबोर्ड पर पता कॉपी करें"
|
"message": "क्लिपबोर्ड पर पता कॉपी करें"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "यह आपकी निजी कुंजी है (कॉपी करने के लिए क्लिक करें)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "लेन-देन का अपरिष्कृत डेटा कॉपी करें"
|
"message": "लेन-देन का अपरिष्कृत डेटा कॉपी करें"
|
||||||
},
|
},
|
||||||
@ -1482,9 +1479,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "वैकल्पिक पासवर्ड डालें"
|
"message": "वैकल्पिक पासवर्ड डालें"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "पासवर्ड दर्ज करें"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "जारी रखने के लिए पासवर्ड दर्ज करें"
|
"message": "जारी रखने के लिए पासवर्ड दर्ज करें"
|
||||||
},
|
},
|
||||||
@ -1561,9 +1555,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "MetaMask स्नैप्स का अन्वेषण करें"
|
"message": "MetaMask स्नैप्स का अन्वेषण करें"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "निजी कुंजी निर्यात करें"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "वॉलेट अनुभव का विस्तार करें।"
|
"message": "वॉलेट अनुभव का विस्तार करें।"
|
||||||
},
|
},
|
||||||
@ -3868,9 +3859,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "निजी कुंजी दिखाएं"
|
"message": "निजी कुंजी दिखाएं"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "निजी कुंजियां दिखाएं"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "परीक्षण नेटवर्क दिखाएं"
|
"message": "परीक्षण नेटवर्क दिखाएं"
|
||||||
},
|
},
|
||||||
@ -5130,9 +5118,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "इस समय इस अनुबंध के लिए लेन-देन की जानकारी समर्थित नहीं है।"
|
"message": "इस समय इस अनुबंध के लिए लेन-देन की जानकारी समर्थित नहीं है।"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "अपना MetaMask पासवर्ड टाइप करें"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "अपना गुप्त रिकवरी वाक्यांश लिखें"
|
"message": "अपना गुप्त रिकवरी वाक्यांश लिखें"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/hn/messages.json
generated
15
app/_locales/hn/messages.json
generated
@ -60,9 +60,6 @@
|
|||||||
"copiedExclamation": {
|
"copiedExclamation": {
|
||||||
"message": "कॉपी कर दिया गया!"
|
"message": "कॉपी कर दिया गया!"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "यह आपकी निजी कुंजी है (कॉपी करने के लिए क्लिक करें)।"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "क्लिपबोर्ड पर कॉपी करें"
|
"message": "क्लिपबोर्ड पर कॉपी करें"
|
||||||
},
|
},
|
||||||
@ -87,15 +84,9 @@
|
|||||||
"edit": {
|
"edit": {
|
||||||
"message": "संपादित करें"
|
"message": "संपादित करें"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "पासवर्ड दर्ज करें"
|
|
||||||
},
|
|
||||||
"etherscanView": {
|
"etherscanView": {
|
||||||
"message": "ईथरस्कैन पर खाता देखें"
|
"message": "ईथरस्कैन पर खाता देखें"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "निजी कुंजी निर्यात करें"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "विफल"
|
"message": "विफल"
|
||||||
},
|
},
|
||||||
@ -281,9 +272,6 @@
|
|||||||
"settings": {
|
"settings": {
|
||||||
"message": "सेटिंग्स"
|
"message": "सेटिंग्स"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "निजी कुंजी दिखाएँ"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "हस्ताक्षर अनुरोध"
|
"message": "हस्ताक्षर अनुरोध"
|
||||||
},
|
},
|
||||||
@ -317,9 +305,6 @@
|
|||||||
"total": {
|
"total": {
|
||||||
"message": "कुल"
|
"message": "कुल"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "अपना पासवर्ड टाइप करें"
|
|
||||||
},
|
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"message": "अज्ञात नेटवर्क"
|
"message": "अज्ञात नेटवर्क"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/hr/messages.json
generated
15
app/_locales/hr/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Kopiraj adresu u međuspremnik"
|
"message": "Kopiraj adresu u međuspremnik"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Ovo je vaš privatni ključ (kliknite za kopiranje)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopiraj u međuspremnik"
|
"message": "Kopiraj u međuspremnik"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Greška u registraciji naziva ENS"
|
"message": "Greška u registraciji naziva ENS"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Upiši lozinku"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Upišite lozinku za nastavak"
|
"message": "Upišite lozinku za nastavak"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Proširi prikaz"
|
"message": "Proširi prikaz"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Izvezi privatni ključ"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Neuspješno"
|
"message": "Neuspješno"
|
||||||
},
|
},
|
||||||
@ -656,9 +647,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Odaberite ovu stavku za prikaz polja namijenjenog za podatke hex na zaslonu za slanje"
|
"message": "Odaberite ovu stavku za prikaz polja namijenjenog za podatke hex na zaslonu za slanje"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Prikaži privatne ključe"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Zahtjev za potpisom"
|
"message": "Zahtjev za potpisom"
|
||||||
},
|
},
|
||||||
@ -776,9 +764,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Pokušaj ponovo"
|
"message": "Pokušaj ponovo"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Upišite svoju lozinku MetaMask."
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Neodobreno"
|
"message": "Neodobreno"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/ht/messages.json
generated
15
app/_locales/ht/messages.json
generated
@ -108,9 +108,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Kopi adrès clipboard"
|
"message": "Kopi adrès clipboard"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Sa a se kle prive ou (klike pou ou kopye)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopi clipboard"
|
"message": "Kopi clipboard"
|
||||||
},
|
},
|
||||||
@ -147,9 +144,6 @@
|
|||||||
"edit": {
|
"edit": {
|
||||||
"message": "Korije"
|
"message": "Korije"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Mete modpas"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Mete modpas pou kontinye"
|
"message": "Mete modpas pou kontinye"
|
||||||
},
|
},
|
||||||
@ -159,9 +153,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Elaji Wè"
|
"message": "Elaji Wè"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Voye Kòd Prive"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Tonbe"
|
"message": "Tonbe"
|
||||||
},
|
},
|
||||||
@ -482,9 +473,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Pran sa pouw ka montre chan entèfas hex data a"
|
"message": "Pran sa pouw ka montre chan entèfas hex data a"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Montre Kle Prive"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Demann Siyati"
|
"message": "Demann Siyati"
|
||||||
},
|
},
|
||||||
@ -554,9 +542,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Eseye anko"
|
"message": "Eseye anko"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Tape modpas ou"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Pa apwouve"
|
"message": "Pa apwouve"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/hu/messages.json
generated
15
app/_locales/hu/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Másolja a címet a vágólapra"
|
"message": "Másolja a címet a vágólapra"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Ez a saját titkos kulcsod (kattints rá a másoláshoz)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Másolás a vágólapra"
|
"message": "Másolás a vágólapra"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Hiba történt az ENS név regisztrációjakor"
|
"message": "Hiba történt az ENS név regisztrációjakor"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Adja meg a jelszót"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "A folytatáshoz adja meg a jelszót"
|
"message": "A folytatáshoz adja meg a jelszót"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Nézet nagyítása"
|
"message": "Nézet nagyítása"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Privát kulcs exportálása"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Sikertelen"
|
"message": "Sikertelen"
|
||||||
},
|
},
|
||||||
@ -656,9 +647,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Válassza ezt, ha a hex adatmezőt a küldő képernyőn szeretné megnézni"
|
"message": "Válassza ezt, ha a hex adatmezőt a küldő képernyőn szeretné megnézni"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Mutassa a privát kulcsokat"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Aláírás kérése"
|
"message": "Aláírás kérése"
|
||||||
},
|
},
|
||||||
@ -776,9 +764,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Újra"
|
"message": "Újra"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Írd be MetaMask jelszavadat"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Jóvá nem hagyott"
|
"message": "Jóvá nem hagyott"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/id/messages.json
generated
15
app/_locales/id/messages.json
generated
@ -898,9 +898,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Salin alamat ke papan klip"
|
"message": "Salin alamat ke papan klip"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Ini adalah kunci privat Anda (klik untuk menyalin)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "Salin data transaksi mentah"
|
"message": "Salin data transaksi mentah"
|
||||||
},
|
},
|
||||||
@ -1482,9 +1479,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "Masukkan kata sandi opsional"
|
"message": "Masukkan kata sandi opsional"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Masukkan kata sandi"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Masukkan kata sandi untuk melanjutkan"
|
"message": "Masukkan kata sandi untuk melanjutkan"
|
||||||
},
|
},
|
||||||
@ -1561,9 +1555,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "Jelajahi MetaMask Snaps"
|
"message": "Jelajahi MetaMask Snaps"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Ekspor kunci privat"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "Perluas pengalaman dompet."
|
"message": "Perluas pengalaman dompet."
|
||||||
},
|
},
|
||||||
@ -3868,9 +3859,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "Tampilkan kunci pribadi"
|
"message": "Tampilkan kunci pribadi"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Tampilkan Kunci Privat"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "Tampilkan jaringan pengujian"
|
"message": "Tampilkan jaringan pengujian"
|
||||||
},
|
},
|
||||||
@ -5130,9 +5118,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "Pemahaman transaksi tidak didukung untuk kontrak ini saat ini."
|
"message": "Pemahaman transaksi tidak didukung untuk kontrak ini saat ini."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Ketikkan kata sandi MetaMask Anda"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "Ketik Frasa Pemulihan Rahasia"
|
"message": "Ketik Frasa Pemulihan Rahasia"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/it/messages.json
generated
15
app/_locales/it/messages.json
generated
@ -579,9 +579,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Copia l'indirizzo"
|
"message": "Copia l'indirizzo"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Questa è la tua chiave privata (clicca per copiare)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "Copia i dati grezzi della transazione"
|
"message": "Copia i dati grezzi della transazione"
|
||||||
},
|
},
|
||||||
@ -840,9 +837,6 @@
|
|||||||
"enterMaxSpendLimit": {
|
"enterMaxSpendLimit": {
|
||||||
"message": "Inserisici Limite Spesa"
|
"message": "Inserisici Limite Spesa"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Inserisci password"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Inserisci la tua password per continuare"
|
"message": "Inserisci la tua password per continuare"
|
||||||
},
|
},
|
||||||
@ -875,9 +869,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Espandi Vista"
|
"message": "Espandi Vista"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Esporta Chiave Privata"
|
|
||||||
},
|
|
||||||
"externalExtension": {
|
"externalExtension": {
|
||||||
"message": "Estensione Esterna"
|
"message": "Estensione Esterna"
|
||||||
},
|
},
|
||||||
@ -1439,9 +1430,6 @@
|
|||||||
"showPermissions": {
|
"showPermissions": {
|
||||||
"message": "Mostra permessi"
|
"message": "Mostra permessi"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Mostra Chiave Privata"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Firma Richiesta"
|
"message": "Firma Richiesta"
|
||||||
},
|
},
|
||||||
@ -1794,9 +1782,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Prova di nuovo"
|
"message": "Prova di nuovo"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Inserisci Password"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Non approvata"
|
"message": "Non approvata"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/ja/messages.json
generated
15
app/_locales/ja/messages.json
generated
@ -898,9 +898,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "アドレスをクリップボードにコピー"
|
"message": "アドレスをクリップボードにコピー"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "これは秘密鍵です (クリックしてコピー)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "未処理のトランザクションデータをコピー"
|
"message": "未処理のトランザクションデータをコピー"
|
||||||
},
|
},
|
||||||
@ -1482,9 +1479,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "オプションのパスワードを入力してください"
|
"message": "オプションのパスワードを入力してください"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "パスワードを入力してください"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "続行するには、パスワードを入力してください"
|
"message": "続行するには、パスワードを入力してください"
|
||||||
},
|
},
|
||||||
@ -1561,9 +1555,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "MetaMask スナップを閲覧"
|
"message": "MetaMask スナップを閲覧"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "秘密鍵のエクスポート"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "ウォレットのエクスペリエンスを拡張します。"
|
"message": "ウォレットのエクスペリエンスを拡張します。"
|
||||||
},
|
},
|
||||||
@ -3868,9 +3859,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "秘密鍵を表示"
|
"message": "秘密鍵を表示"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "秘密鍵を表示"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "テストネットワークを表示"
|
"message": "テストネットワークを表示"
|
||||||
},
|
},
|
||||||
@ -5130,9 +5118,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "現時点ではこのコントラクトでトランザクションインサイトはサポートされていません。"
|
"message": "現時点ではこのコントラクトでトランザクションインサイトはサポートされていません。"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "MetaMaskパスワードを入力してください"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "秘密のリカバリーフレーズを入力してください"
|
"message": "秘密のリカバリーフレーズを入力してください"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/kn/messages.json
generated
15
app/_locales/kn/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "ವಿಳಾಸವನ್ನು ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಿ"
|
"message": "ವಿಳಾಸವನ್ನು ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಿ"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "ಇದು ನಿಮ್ಮ ಖಾಸಗಿ ಕೀ ಆಗಿದೆ (ನಕಲಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಿ"
|
"message": "ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಿ"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "ENS ಹೆಸರಿನ ನೋಂದಣಿಯಲ್ಲಿ ದೋಷ"
|
"message": "ENS ಹೆಸರಿನ ನೋಂದಣಿಯಲ್ಲಿ ದೋಷ"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ನಮೂದಿಸಿ"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "ಮುಂದುವರೆಯಲು ಪಾಸ್ವರ್ಡ್ ನಮೂದಿಸಿ"
|
"message": "ಮುಂದುವರೆಯಲು ಪಾಸ್ವರ್ಡ್ ನಮೂದಿಸಿ"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "ವಿಸ್ತರಿಸಿದ ವೀಕ್ಷಣೆ"
|
"message": "ವಿಸ್ತರಿಸಿದ ವೀಕ್ಷಣೆ"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "ಖಾಸಗಿ ಕೀಲಿಯನ್ನು ರಫ್ತು ಮಾಡಿ"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "ವಿಫಲವಾಗಿದೆ"
|
"message": "ವಿಫಲವಾಗಿದೆ"
|
||||||
},
|
},
|
||||||
@ -663,9 +654,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "ಕಳುಹಿಸುವ ಪರದೆಯಲ್ಲಿ ಹೆಕ್ಸ್ ಡೇಟಾ ಕ್ಷೇತ್ರವನ್ನು ತೋರಿಸಲು ಇದನ್ನು ಆಯ್ಕೆಮಾಡಿ"
|
"message": "ಕಳುಹಿಸುವ ಪರದೆಯಲ್ಲಿ ಹೆಕ್ಸ್ ಡೇಟಾ ಕ್ಷೇತ್ರವನ್ನು ತೋರಿಸಲು ಇದನ್ನು ಆಯ್ಕೆಮಾಡಿ"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "ಖಾಸಗಿ ಕೀಗಳನ್ನು ತೋರಿಸಿ"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "ಸಹಿಯ ವಿನಂತಿ"
|
"message": "ಸಹಿಯ ವಿನಂತಿ"
|
||||||
},
|
},
|
||||||
@ -786,9 +774,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"
|
"message": "ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "ನಿಮ್ಮ MetaMask ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಟೈಪ್ ಮಾಡಿ"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "ಅನುಮೋದಿಸದಿರುವುದು"
|
"message": "ಅನುಮೋದಿಸದಿರುವುದು"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/ko/messages.json
generated
15
app/_locales/ko/messages.json
generated
@ -898,9 +898,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "주소를 클립보드에 복사"
|
"message": "주소를 클립보드에 복사"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "이는 귀하의 비공개 키입니다(클릭하여 복사)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "원시 거래 데이터 복사"
|
"message": "원시 거래 데이터 복사"
|
||||||
},
|
},
|
||||||
@ -1482,9 +1479,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "선택적 비밀번호를 입력하세요"
|
"message": "선택적 비밀번호를 입력하세요"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "비밀번호 입력"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "계속하려면 비밀번호를 입력하세요"
|
"message": "계속하려면 비밀번호를 입력하세요"
|
||||||
},
|
},
|
||||||
@ -1561,9 +1555,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "MetaMask 스냅 탐색"
|
"message": "MetaMask 스냅 탐색"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "비공개 키 내보내기"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "지갑 경험 확장"
|
"message": "지갑 경험 확장"
|
||||||
},
|
},
|
||||||
@ -3868,9 +3859,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "개인 키 표시"
|
"message": "개인 키 표시"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "비공개 키 표시"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "테스트 네트워크 보기"
|
"message": "테스트 네트워크 보기"
|
||||||
},
|
},
|
||||||
@ -5130,9 +5118,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "현재 이 계약에 대해 거래 인사이트가 지원되지 않습니다."
|
"message": "현재 이 계약에 대해 거래 인사이트가 지원되지 않습니다."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "MetaMask 비밀번호를 입력하세요"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "비밀 복구 구문을 입력하세요"
|
"message": "비밀 복구 구문을 입력하세요"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/lt/messages.json
generated
15
app/_locales/lt/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Kopijuoti adresą į iškarpinę"
|
"message": "Kopijuoti adresą į iškarpinę"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Tai yra jūsų asmeninis raktas (spustelėkite, kad nukopijuotumėte)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopijuoti į iškarpinę"
|
"message": "Kopijuoti į iškarpinę"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "ENS pavadinimo registracijos klaida"
|
"message": "ENS pavadinimo registracijos klaida"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Įveskite slaptažodį"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Norėdami tęsti, įveskite slaptažodį"
|
"message": "Norėdami tęsti, įveskite slaptažodį"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Išskleisti rodinį"
|
"message": "Išskleisti rodinį"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Eksportuoti asmeninį raktą"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Nepavyko"
|
"message": "Nepavyko"
|
||||||
},
|
},
|
||||||
@ -663,9 +654,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Pasirinkite tai, kad siuntimo ekrane būtų rodomas šešioliktainių duomenų laukas"
|
"message": "Pasirinkite tai, kad siuntimo ekrane būtų rodomas šešioliktainių duomenų laukas"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Rodyti asmeninius raktus"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Parašo užklausa"
|
"message": "Parašo užklausa"
|
||||||
},
|
},
|
||||||
@ -786,9 +774,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Bandyti dar kartą"
|
"message": "Bandyti dar kartą"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Įveskite savo „MetaMask“ slaptažodį"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Nepatvirtinta"
|
"message": "Nepatvirtinta"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/lv/messages.json
generated
15
app/_locales/lv/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Iekopēt adresi starpliktuvē"
|
"message": "Iekopēt adresi starpliktuvē"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Šī ir jūsu privātā atslēga (noklikšķiniet, lai nokopētu)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopēt starpliktuvē"
|
"message": "Kopēt starpliktuvē"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Kļūda ENS vārda reģistrācijā"
|
"message": "Kļūda ENS vārda reģistrācijā"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Ievadiet paroli"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Ievadiet paroli, lai turpinātu"
|
"message": "Ievadiet paroli, lai turpinātu"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Izvērst skatījumu"
|
"message": "Izvērst skatījumu"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Eksportēt privāto atslēgu"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Neizdevās"
|
"message": "Neizdevās"
|
||||||
},
|
},
|
||||||
@ -659,9 +650,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Atlasiet šo, lai atvērtu hex datus sūtīšanas ekrānā"
|
"message": "Atlasiet šo, lai atvērtu hex datus sūtīšanas ekrānā"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Rādīt privātās atslēgas"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Paraksta pieprasījums"
|
"message": "Paraksta pieprasījums"
|
||||||
},
|
},
|
||||||
@ -782,9 +770,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Mēģināt vēlreiz"
|
"message": "Mēģināt vēlreiz"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Ievadiet savu MetaMask paroli"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Nav apstiprināts"
|
"message": "Nav apstiprināts"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/ms/messages.json
generated
15
app/_locales/ms/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Salin alamat kepada papan klip"
|
"message": "Salin alamat kepada papan klip"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Ini kunci persendirian anda (klik untuk menyalin)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Salin ke papan keratan"
|
"message": "Salin ke papan keratan"
|
||||||
},
|
},
|
||||||
@ -238,9 +235,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Ralat dalam pendaftaran nama ENS"
|
"message": "Ralat dalam pendaftaran nama ENS"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Masukkan kata laluan"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Masukkan kata laluan untuk teruskan"
|
"message": "Masukkan kata laluan untuk teruskan"
|
||||||
},
|
},
|
||||||
@ -253,9 +247,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Kembangkan Paparan"
|
"message": "Kembangkan Paparan"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Eksport Kekunci Persendirian"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Gagal"
|
"message": "Gagal"
|
||||||
},
|
},
|
||||||
@ -643,9 +634,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Pilih ini untuk menunjukkan medan data hex pada skrin hantar"
|
"message": "Pilih ini untuk menunjukkan medan data hex pada skrin hantar"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Tunjukkan Kunci Persendirian"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Permintaan Tandatangan"
|
"message": "Permintaan Tandatangan"
|
||||||
},
|
},
|
||||||
@ -763,9 +751,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Cuba lagi"
|
"message": "Cuba lagi"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Taip kata laluan MetaMask anda"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Belum Diluluskan"
|
"message": "Belum Diluluskan"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/nl/messages.json
generated
15
app/_locales/nl/messages.json
generated
@ -60,9 +60,6 @@
|
|||||||
"copiedExclamation": {
|
"copiedExclamation": {
|
||||||
"message": "Gekopieerd!"
|
"message": "Gekopieerd!"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Dit is uw privésleutel (klik om te kopiëren)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopieer naar klembord"
|
"message": "Kopieer naar klembord"
|
||||||
},
|
},
|
||||||
@ -84,15 +81,9 @@
|
|||||||
"edit": {
|
"edit": {
|
||||||
"message": "Bewerk"
|
"message": "Bewerk"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Voer wachtwoord in"
|
|
||||||
},
|
|
||||||
"etherscanView": {
|
"etherscanView": {
|
||||||
"message": "Bekijk account op Etherscan"
|
"message": "Bekijk account op Etherscan"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Exporteer privésleutel"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "mislukt"
|
"message": "mislukt"
|
||||||
},
|
},
|
||||||
@ -271,9 +262,6 @@
|
|||||||
"settings": {
|
"settings": {
|
||||||
"message": "instellingen"
|
"message": "instellingen"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Privésleutels weergeven"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Ondertekeningsverzoek"
|
"message": "Ondertekeningsverzoek"
|
||||||
},
|
},
|
||||||
@ -307,9 +295,6 @@
|
|||||||
"total": {
|
"total": {
|
||||||
"message": "Totaal"
|
"message": "Totaal"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Typ uw wachtwoord"
|
|
||||||
},
|
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"message": "Onbekend"
|
"message": "Onbekend"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/no/messages.json
generated
15
app/_locales/no/messages.json
generated
@ -172,9 +172,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Kopier adresse til utklippstavlen "
|
"message": "Kopier adresse til utklippstavlen "
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Dette er din private nøkkel (klikk for å kopiere)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopiér til utklippstavlen"
|
"message": "Kopiér til utklippstavlen"
|
||||||
},
|
},
|
||||||
@ -238,9 +235,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Feil i ENS-navneregistrering"
|
"message": "Feil i ENS-navneregistrering"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Skriv inn passord "
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Skriv inn passord for å fortsette"
|
"message": "Skriv inn passord for å fortsette"
|
||||||
},
|
},
|
||||||
@ -253,9 +247,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Utvid visning"
|
"message": "Utvid visning"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Eksporter privat nøkkel"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Mislyktes"
|
"message": "Mislyktes"
|
||||||
},
|
},
|
||||||
@ -644,9 +635,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Velg dette for å vise hex-datafeltet på sendskjermen"
|
"message": "Velg dette for å vise hex-datafeltet på sendskjermen"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Vis private nøkler"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Signaturforespørsel "
|
"message": "Signaturforespørsel "
|
||||||
},
|
},
|
||||||
@ -761,9 +749,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Prøv igjen"
|
"message": "Prøv igjen"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Skriv inn MetaMask-passordet"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Ikke godkjent "
|
"message": "Ikke godkjent "
|
||||||
},
|
},
|
||||||
|
15
app/_locales/ph/messages.json
generated
15
app/_locales/ph/messages.json
generated
@ -338,9 +338,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Kopyahin ang address sa clipboard"
|
"message": "Kopyahin ang address sa clipboard"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Ito ang iyong pribadong key (i-click para kopyahin)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopyahin sa clipboard"
|
"message": "Kopyahin sa clipboard"
|
||||||
},
|
},
|
||||||
@ -489,9 +486,6 @@
|
|||||||
"enterMaxSpendLimit": {
|
"enterMaxSpendLimit": {
|
||||||
"message": "Ilagay ang Max na Limitasyon sa Paggastos"
|
"message": "Ilagay ang Max na Limitasyon sa Paggastos"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Ilagay ang password"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Ilagay ang password para magpatuloy"
|
"message": "Ilagay ang password para magpatuloy"
|
||||||
},
|
},
|
||||||
@ -542,9 +536,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "I-expand ang view"
|
"message": "I-expand ang view"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "I-export ang Pribadong Key"
|
|
||||||
},
|
|
||||||
"externalExtension": {
|
"externalExtension": {
|
||||||
"message": "External Extension"
|
"message": "External Extension"
|
||||||
},
|
},
|
||||||
@ -1309,9 +1300,6 @@
|
|||||||
"showPermissions": {
|
"showPermissions": {
|
||||||
"message": "Ipakita ang mga pahintulot"
|
"message": "Ipakita ang mga pahintulot"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Ipakita ang Mga Private Key"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Request ng Signature"
|
"message": "Request ng Signature"
|
||||||
},
|
},
|
||||||
@ -1764,9 +1752,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Subukan ulit"
|
"message": "Subukan ulit"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Uri ng password ng iyong MetaMask"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Hindi inaprubahan"
|
"message": "Hindi inaprubahan"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/pl/messages.json
generated
15
app/_locales/pl/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Skopiuj adres do schowka"
|
"message": "Skopiuj adres do schowka"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "To jest Twój prywatny klucz (kliknij żeby skopiować)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Skopiuj do schowka"
|
"message": "Skopiuj do schowka"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Błąd w rejestracji nazwy ENS"
|
"message": "Błąd w rejestracji nazwy ENS"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Wpisz hasło"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Podaj hasło żeby kontynuować"
|
"message": "Podaj hasło żeby kontynuować"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Rozwiń widok"
|
"message": "Rozwiń widok"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Eksportuj klucz prywatny"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Nie udało się"
|
"message": "Nie udało się"
|
||||||
},
|
},
|
||||||
@ -657,9 +648,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Wybierz to żeby pokazać pole danych hex na ekranie wysyłania"
|
"message": "Wybierz to żeby pokazać pole danych hex na ekranie wysyłania"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Pokaż prywatne klucze"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Prośba o podpis"
|
"message": "Prośba o podpis"
|
||||||
},
|
},
|
||||||
@ -774,9 +762,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Spróbuj ponownie"
|
"message": "Spróbuj ponownie"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Wpisz hasło"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Niezatwierdzone"
|
"message": "Niezatwierdzone"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/pt/messages.json
generated
15
app/_locales/pt/messages.json
generated
@ -898,9 +898,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Copiar endereço para a área de transferência"
|
"message": "Copiar endereço para a área de transferência"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Esta é a sua chave privada (carregue para copiar)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "Copiar dados brutos da transação"
|
"message": "Copiar dados brutos da transação"
|
||||||
},
|
},
|
||||||
@ -1482,9 +1479,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "Insira a senha opcional"
|
"message": "Insira a senha opcional"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Introduza palavra-passe"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Insira a senha para continuar"
|
"message": "Insira a senha para continuar"
|
||||||
},
|
},
|
||||||
@ -1561,9 +1555,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "Explorar os snaps da MetaMask"
|
"message": "Explorar os snaps da MetaMask"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Exportar chave privada"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "Amplie a experiência da carteira."
|
"message": "Amplie a experiência da carteira."
|
||||||
},
|
},
|
||||||
@ -3868,9 +3859,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "Exibir chave privada"
|
"message": "Exibir chave privada"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Mostrar Chaves Privadas"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "Mostrar redes de teste"
|
"message": "Mostrar redes de teste"
|
||||||
},
|
},
|
||||||
@ -5130,9 +5118,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "As informações sobre transações não são suportadas para esse contrato, por ora."
|
"message": "As informações sobre transações não são suportadas para esse contrato, por ora."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Digite a sua Palavra-passe"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "Digite sua Frase de Recuperação Secreta"
|
"message": "Digite sua Frase de Recuperação Secreta"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/pt_BR/messages.json
generated
15
app/_locales/pt_BR/messages.json
generated
@ -475,9 +475,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Copiar endereço para a área de transferência"
|
"message": "Copiar endereço para a área de transferência"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Essa é a sua chave privada (clique para copiar)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "Copiar dados brutos da transação"
|
"message": "Copiar dados brutos da transação"
|
||||||
},
|
},
|
||||||
@ -767,9 +764,6 @@
|
|||||||
"enterMaxSpendLimit": {
|
"enterMaxSpendLimit": {
|
||||||
"message": "Digite um limite máximo de gastos"
|
"message": "Digite um limite máximo de gastos"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Digite a senha"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Digite a senha para continuar"
|
"message": "Digite a senha para continuar"
|
||||||
},
|
},
|
||||||
@ -826,9 +820,6 @@
|
|||||||
"experimental": {
|
"experimental": {
|
||||||
"message": "Experimental"
|
"message": "Experimental"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Exportar chave privada"
|
|
||||||
},
|
|
||||||
"externalExtension": {
|
"externalExtension": {
|
||||||
"message": "Extensão externa"
|
"message": "Extensão externa"
|
||||||
},
|
},
|
||||||
@ -2016,9 +2007,6 @@
|
|||||||
"showPermissions": {
|
"showPermissions": {
|
||||||
"message": "Mostrar permissões"
|
"message": "Mostrar permissões"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Mostrar chaves privadas"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "Mostrar redes de teste"
|
"message": "Mostrar redes de teste"
|
||||||
},
|
},
|
||||||
@ -2633,9 +2621,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "As informações sobre transações não são suportadas para esse contrato, por ora."
|
"message": "As informações sobre transações não são suportadas para esse contrato, por ora."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Digite sua senha da MetaMask"
|
|
||||||
},
|
|
||||||
"u2f": {
|
"u2f": {
|
||||||
"message": "U2F",
|
"message": "U2F",
|
||||||
"description": "A name on an API for the browser to interact with devices that support the U2F protocol. On some browsers we use it to connect MetaMask to Ledger devices."
|
"description": "A name on an API for the browser to interact with devices that support the U2F protocol. On some browsers we use it to connect MetaMask to Ledger devices."
|
||||||
|
15
app/_locales/ro/messages.json
generated
15
app/_locales/ro/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Copiere adresă în clipboard"
|
"message": "Copiere adresă în clipboard"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Aceasta este cheia dumneavoastră privată (clic pentru a copia)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Copiați în clipboard"
|
"message": "Copiați în clipboard"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Eroare la înregistrarea numelui ENS"
|
"message": "Eroare la înregistrarea numelui ENS"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Introduceți parola"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Introduceți parola pentru a continua"
|
"message": "Introduceți parola pentru a continua"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Extindeți vizualizarea"
|
"message": "Extindeți vizualizarea"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Exportați cheia privată"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Eșuat"
|
"message": "Eșuat"
|
||||||
},
|
},
|
||||||
@ -650,9 +641,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Selectați această opțiune pentru a arăta câmpul de date hexazecimale în ecranul de trimitere."
|
"message": "Selectați această opțiune pentru a arăta câmpul de date hexazecimale în ecranul de trimitere."
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Afișați cheile private"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Solicitare de semnătură"
|
"message": "Solicitare de semnătură"
|
||||||
},
|
},
|
||||||
@ -767,9 +755,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Încearcă din nou"
|
"message": "Încearcă din nou"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Scrieți parola dvs. pentru MetaMask"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Neaprobat"
|
"message": "Neaprobat"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/ru/messages.json
generated
15
app/_locales/ru/messages.json
generated
@ -898,9 +898,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Скопировать адрес в буфер обмена"
|
"message": "Скопировать адрес в буфер обмена"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Это ваш закрытый ключ (нажмите, чтобы скопировать)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "Копировать необработанные данные транзакции"
|
"message": "Копировать необработанные данные транзакции"
|
||||||
},
|
},
|
||||||
@ -1482,9 +1479,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "Введите необязательный пароль"
|
"message": "Введите необязательный пароль"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Введите пароль"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Введите пароль, чтобы продолжить"
|
"message": "Введите пароль, чтобы продолжить"
|
||||||
},
|
},
|
||||||
@ -1561,9 +1555,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "Обзор привязок MetaMask"
|
"message": "Обзор привязок MetaMask"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Экспорт закрытого ключа"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "Расширьте возможности кошелька."
|
"message": "Расширьте возможности кошелька."
|
||||||
},
|
},
|
||||||
@ -3868,9 +3859,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "Показать закрытый ключ"
|
"message": "Показать закрытый ключ"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Показать закрытые ключи"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "Показать тестовые сети"
|
"message": "Показать тестовые сети"
|
||||||
},
|
},
|
||||||
@ -5130,9 +5118,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "Для этого контракта сейчас не поддерживается аналитика транзакций."
|
"message": "Для этого контракта сейчас не поддерживается аналитика транзакций."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Введите свой пароль MetaMask"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "Введите секретную фразу для восстановления"
|
"message": "Введите секретную фразу для восстановления"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/sk/messages.json
generated
15
app/_locales/sk/messages.json
generated
@ -169,9 +169,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Kopírovať adresu do schránky"
|
"message": "Kopírovať adresu do schránky"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Toto je váš privátní klíč (kliknutím zkopírujte)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopírovat do schránky"
|
"message": "Kopírovat do schránky"
|
||||||
},
|
},
|
||||||
@ -235,9 +232,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Chyba pri registrácii názvu ENS"
|
"message": "Chyba pri registrácii názvu ENS"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Zadejte heslo"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Pokračujte zadaním hesla"
|
"message": "Pokračujte zadaním hesla"
|
||||||
},
|
},
|
||||||
@ -250,9 +244,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Rozbaliť zobrazenie"
|
"message": "Rozbaliť zobrazenie"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Exportovat privátní klíč"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Neúspěšné"
|
"message": "Neúspěšné"
|
||||||
},
|
},
|
||||||
@ -635,9 +626,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Vyberte toto, ak chcete, aby sa na obrazovke odosielania zobrazilo hex dátové pole"
|
"message": "Vyberte toto, ak chcete, aby sa na obrazovke odosielania zobrazilo hex dátové pole"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Zobrazit privátní klíče"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Požadavek podpisu"
|
"message": "Požadavek podpisu"
|
||||||
},
|
},
|
||||||
@ -752,9 +740,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Skúsiť znova"
|
"message": "Skúsiť znova"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Zadejte své heslo"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Neschváleno"
|
"message": "Neschváleno"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/sl/messages.json
generated
15
app/_locales/sl/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Kopiraj naslov v odložišče"
|
"message": "Kopiraj naslov v odložišče"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "To je vaš zesebni ključ (kliknite za kopiranje)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopiraj v odložišče"
|
"message": "Kopiraj v odložišče"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Napaka pri registraciji imena ENS"
|
"message": "Napaka pri registraciji imena ENS"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Vnesite geslo"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Za nadaljevanje vnesite geslo"
|
"message": "Za nadaljevanje vnesite geslo"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Razširi pogled"
|
"message": "Razširi pogled"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Izvozi zasebni ključ"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Ni uspelo"
|
"message": "Ni uspelo"
|
||||||
},
|
},
|
||||||
@ -651,9 +642,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Izberite za prikaz hex podatkov na zaslonu za pošiljanje"
|
"message": "Izberite za prikaz hex podatkov na zaslonu za pošiljanje"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Pokaži zasebni ključ"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Zahteva za podpis"
|
"message": "Zahteva za podpis"
|
||||||
},
|
},
|
||||||
@ -774,9 +762,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Poskusi znova"
|
"message": "Poskusi znova"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Vnesite vaše MetaMask geslo"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Neodobreno"
|
"message": "Neodobreno"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/sr/messages.json
generated
15
app/_locales/sr/messages.json
generated
@ -172,9 +172,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Kopirajte adresu u ostavu"
|
"message": "Kopirajte adresu u ostavu"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Ovo je vaš privatni ključ (kliknite kako biste ga kopirali)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Копирај у меморију"
|
"message": "Копирај у меморију"
|
||||||
},
|
},
|
||||||
@ -238,9 +235,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Greška u registraciji ENS imena."
|
"message": "Greška u registraciji ENS imena."
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Unesite lozinku"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Unesite lozinku kako biste nastavili"
|
"message": "Unesite lozinku kako biste nastavili"
|
||||||
},
|
},
|
||||||
@ -253,9 +247,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Proširite prikaz"
|
"message": "Proširite prikaz"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Izvezite privatni ključ"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Neuspešno"
|
"message": "Neuspešno"
|
||||||
},
|
},
|
||||||
@ -654,9 +645,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Izaberite ovo da bi se pokazalo polje sa hex podacima na „Pošalji” ekranu "
|
"message": "Izaberite ovo da bi se pokazalo polje sa hex podacima na „Pošalji” ekranu "
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Prikažite privatne ključeve"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Zahtev za potpisom"
|
"message": "Zahtev za potpisom"
|
||||||
},
|
},
|
||||||
@ -774,9 +762,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Пробај поново"
|
"message": "Пробај поново"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Ukucajte svoju MetaMask šifru"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Neodobren"
|
"message": "Neodobren"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/sv/messages.json
generated
15
app/_locales/sv/messages.json
generated
@ -169,9 +169,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Kopiera adress till urklipp"
|
"message": "Kopiera adress till urklipp"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Det här är din privata nyckel (klicka för att kopiera)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Kopiera till Urklipp"
|
"message": "Kopiera till Urklipp"
|
||||||
},
|
},
|
||||||
@ -235,9 +232,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Fel i ENS-namnregistrering"
|
"message": "Fel i ENS-namnregistrering"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Ange lösenord"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Ange lösenord för att fortsätta"
|
"message": "Ange lösenord för att fortsätta"
|
||||||
},
|
},
|
||||||
@ -250,9 +244,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Expandera vy"
|
"message": "Expandera vy"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Exportera privat nyckel"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Misslyckades"
|
"message": "Misslyckades"
|
||||||
},
|
},
|
||||||
@ -647,9 +638,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Välj detta för att visa hex-datafältet på sändarskärmen"
|
"message": "Välj detta för att visa hex-datafältet på sändarskärmen"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Visa privata nycklar"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Signaturförfrågan"
|
"message": "Signaturförfrågan"
|
||||||
},
|
},
|
||||||
@ -761,9 +749,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Försök igen"
|
"message": "Försök igen"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Ange ditt MetaMask-lösenord"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Inte godkänd"
|
"message": "Inte godkänd"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/sw/messages.json
generated
15
app/_locales/sw/messages.json
generated
@ -169,9 +169,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Nakili anwani kwenye ubao wa kunakilia"
|
"message": "Nakili anwani kwenye ubao wa kunakilia"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Huu ni ufunguo wako wa kibinafsi (bofya ili unakili)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Nakili kwenye ubao wa kunakili"
|
"message": "Nakili kwenye ubao wa kunakili"
|
||||||
},
|
},
|
||||||
@ -235,9 +232,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Hitilafu imetokea kwenye usajili wa jina la ENS"
|
"message": "Hitilafu imetokea kwenye usajili wa jina la ENS"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Ingiza nenosiri"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Ingiza nenosiri ili uendelee"
|
"message": "Ingiza nenosiri ili uendelee"
|
||||||
},
|
},
|
||||||
@ -250,9 +244,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Panua Mwonekano"
|
"message": "Panua Mwonekano"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Panua Mwonekano"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Imeshindwa"
|
"message": "Imeshindwa"
|
||||||
},
|
},
|
||||||
@ -641,9 +632,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Chagua hii ili uonyeshe sehemu ya data ya hex kwenye skrini ya tuma"
|
"message": "Chagua hii ili uonyeshe sehemu ya data ya hex kwenye skrini ya tuma"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Onyesha Fungo Binafsi"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Ombi la Saini"
|
"message": "Ombi la Saini"
|
||||||
},
|
},
|
||||||
@ -764,9 +752,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Jaribu tena"
|
"message": "Jaribu tena"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Andika nenosiri lako la MetaMask"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Haijaidhinishwa"
|
"message": "Haijaidhinishwa"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/ta/messages.json
generated
15
app/_locales/ta/messages.json
generated
@ -87,9 +87,6 @@
|
|||||||
"copiedExclamation": {
|
"copiedExclamation": {
|
||||||
"message": "நகலெடுக்கப்பட்டன!"
|
"message": "நகலெடுக்கப்பட்டன!"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "இது உங்கள் தனிப்பட்ட விசை (நகலெடுக்க கிளிக் செய்யவும்)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "கிளிப்போர்டுக்கு நகலெடு"
|
"message": "கிளிப்போர்டுக்கு நகலெடு"
|
||||||
},
|
},
|
||||||
@ -126,15 +123,9 @@
|
|||||||
"edit": {
|
"edit": {
|
||||||
"message": "திருத்து"
|
"message": "திருத்து"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "கடவுச்சொல்லை உள்ளிடவும்"
|
|
||||||
},
|
|
||||||
"etherscanView": {
|
"etherscanView": {
|
||||||
"message": "Etherscan கணக்கைப் பார்க்கவும்"
|
"message": "Etherscan கணக்கைப் பார்க்கவும்"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "தனியார் விசை ஐ ஏற்றுமதி செய்க"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "தோல்வி"
|
"message": "தோல்வி"
|
||||||
},
|
},
|
||||||
@ -374,9 +365,6 @@
|
|||||||
"settings": {
|
"settings": {
|
||||||
"message": "அமைப்புகள்"
|
"message": "அமைப்புகள்"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "தனிப்பட்ட விசைகளைக் காண்பி"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "கையொப்பம் கோரிக்கை"
|
"message": "கையொப்பம் கோரிக்கை"
|
||||||
},
|
},
|
||||||
@ -425,9 +413,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "மீண்டும் முயல்க"
|
"message": "மீண்டும் முயல்க"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "உங்கள் கடவுச்சொல்லை தட்டச்சு செய்யவும்"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "அங்கீகரிக்கப்படாத"
|
"message": "அங்கீகரிக்கப்படாத"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/th/messages.json
generated
15
app/_locales/th/messages.json
generated
@ -78,9 +78,6 @@
|
|||||||
"copiedExclamation": {
|
"copiedExclamation": {
|
||||||
"message": "คัดลอกแล้ว!"
|
"message": "คัดลอกแล้ว!"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "นี่คือคีย์ส่วนตัวของคุณ(กดเพื่อคัดลอก)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "คัดลอกไปคลิปบอร์ด"
|
"message": "คัดลอกไปคลิปบอร์ด"
|
||||||
},
|
},
|
||||||
@ -117,18 +114,12 @@
|
|||||||
"editContact": {
|
"editContact": {
|
||||||
"message": "แก้ไขผู้ติดต่อ"
|
"message": "แก้ไขผู้ติดต่อ"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "ใส่รหัสผ่าน"
|
|
||||||
},
|
|
||||||
"etherscanView": {
|
"etherscanView": {
|
||||||
"message": "ดูบัญชีบน Etherscan"
|
"message": "ดูบัญชีบน Etherscan"
|
||||||
},
|
},
|
||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "ขยายมุมมอง"
|
"message": "ขยายมุมมอง"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "ส่งออกคีย์ส่วนตัว"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "ล้มเหลว"
|
"message": "ล้มเหลว"
|
||||||
},
|
},
|
||||||
@ -338,9 +329,6 @@
|
|||||||
"settings": {
|
"settings": {
|
||||||
"message": "การตั้งค่า"
|
"message": "การตั้งค่า"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "แสดงคีย์ส่วนตัว"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "ขอลายเซ็น"
|
"message": "ขอลายเซ็น"
|
||||||
},
|
},
|
||||||
@ -392,9 +380,6 @@
|
|||||||
"transactionDropped": {
|
"transactionDropped": {
|
||||||
"message": "ธุรกรรมถูกยกเลิกเมื่อ $2"
|
"message": "ธุรกรรมถูกยกเลิกเมื่อ $2"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "พิมพ์รหัสผ่านของคุณ"
|
|
||||||
},
|
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"message": "ไม่รู้จัก"
|
"message": "ไม่รู้จัก"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/tl/messages.json
generated
15
app/_locales/tl/messages.json
generated
@ -898,9 +898,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Kopyahin ang address sa clipboard"
|
"message": "Kopyahin ang address sa clipboard"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Ito ang iyong pribadong key (i-click para kopyahin)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "Kopyahin ang raw na data ng transaksyon"
|
"message": "Kopyahin ang raw na data ng transaksyon"
|
||||||
},
|
},
|
||||||
@ -1482,9 +1479,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "Ilagay ang opsyonal na password"
|
"message": "Ilagay ang opsyonal na password"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Ilagay ang password"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Ilagay ang password para magpatuloy"
|
"message": "Ilagay ang password para magpatuloy"
|
||||||
},
|
},
|
||||||
@ -1561,9 +1555,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "Galugarin ang MetaMask Snaps"
|
"message": "Galugarin ang MetaMask Snaps"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "I-export ang Pribadong Key"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "Palawakin ang karanasan sa wallet."
|
"message": "Palawakin ang karanasan sa wallet."
|
||||||
},
|
},
|
||||||
@ -3868,9 +3859,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "Ipakita ang private key"
|
"message": "Ipakita ang private key"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Ipakita ang Mga Pribadong Key"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "Ipakita ang mga test networks"
|
"message": "Ipakita ang mga test networks"
|
||||||
},
|
},
|
||||||
@ -5130,9 +5118,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "Hindi magagamit ang mga pag-alam sa transaksyon para sa contract na ito sa oras na ito."
|
"message": "Hindi magagamit ang mga pag-alam sa transaksyon para sa contract na ito sa oras na ito."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Uri ng password ng iyong MetaMask"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "I-type ang iyong Secret Recovery Phrase"
|
"message": "I-type ang iyong Secret Recovery Phrase"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/tr/messages.json
generated
15
app/_locales/tr/messages.json
generated
@ -898,9 +898,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Adresi panoya kopyala"
|
"message": "Adresi panoya kopyala"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Bu sizin özel anahtarınız (kopyalamak için tıklayın)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "Ham işlem verisini kopyala"
|
"message": "Ham işlem verisini kopyala"
|
||||||
},
|
},
|
||||||
@ -1482,9 +1479,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "İsteğe bağlı parolayı girin"
|
"message": "İsteğe bağlı parolayı girin"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Parolanızı girin"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Devam etmek için parola girin"
|
"message": "Devam etmek için parola girin"
|
||||||
},
|
},
|
||||||
@ -1561,9 +1555,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "MetaMask Snap'lerini keşfedin"
|
"message": "MetaMask Snap'lerini keşfedin"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Özel anahtarı dışa aktar"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "Cüzdan deneyimini genişletin."
|
"message": "Cüzdan deneyimini genişletin."
|
||||||
},
|
},
|
||||||
@ -3868,9 +3859,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "Özel anahtarı göster"
|
"message": "Özel anahtarı göster"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Özel Anahtarları Göster"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "Test ağlarını göster"
|
"message": "Test ağlarını göster"
|
||||||
},
|
},
|
||||||
@ -5130,9 +5118,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "Şu anda işlem içgörüleri bu sözleşme için desteklenmiyor."
|
"message": "Şu anda işlem içgörüleri bu sözleşme için desteklenmiyor."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "MetaMask parolanızı girin"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "Gizli Kurtarma İfadenizi girin"
|
"message": "Gizli Kurtarma İfadenizi girin"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/uk/messages.json
generated
15
app/_locales/uk/messages.json
generated
@ -175,9 +175,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Копіювати адресу в буфер обміну"
|
"message": "Копіювати адресу в буфер обміну"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Це ваш закритий ключ (натисніть, щоб скопіювати)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Копіювати в буфер"
|
"message": "Копіювати в буфер"
|
||||||
},
|
},
|
||||||
@ -241,9 +238,6 @@
|
|||||||
"ensRegistrationError": {
|
"ensRegistrationError": {
|
||||||
"message": "Помилка у реєстрації ENS ім'я"
|
"message": "Помилка у реєстрації ENS ім'я"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Введіть пароль"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Введіть пароль, щоб продовжити"
|
"message": "Введіть пароль, щоб продовжити"
|
||||||
},
|
},
|
||||||
@ -256,9 +250,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "Розгорнути подання"
|
"message": "Розгорнути подання"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Експортувати приватний ключ"
|
|
||||||
},
|
|
||||||
"failed": {
|
"failed": {
|
||||||
"message": "Помилка"
|
"message": "Помилка"
|
||||||
},
|
},
|
||||||
@ -663,9 +654,6 @@
|
|||||||
"showHexDataDescription": {
|
"showHexDataDescription": {
|
||||||
"message": "Оберіть це, щоб показати поле для шістнадцятирикових даних на екрані надсилання"
|
"message": "Оберіть це, щоб показати поле для шістнадцятирикових даних на екрані надсилання"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Показати приватні ключі"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "Запит підпису"
|
"message": "Запит підпису"
|
||||||
},
|
},
|
||||||
@ -786,9 +774,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "Повторити"
|
"message": "Повторити"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Введіть ваш пароль MetaMask"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "Не затверджено"
|
"message": "Не затверджено"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/vi/messages.json
generated
15
app/_locales/vi/messages.json
generated
@ -898,9 +898,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Sao chép địa chỉ vào bộ nhớ đệm"
|
"message": "Sao chép địa chỉ vào bộ nhớ đệm"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "Đây là khóa riêng tư của bạn (hãy nhấn vào để sao chép)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "Sao chép dữ liệu giao dịch thô"
|
"message": "Sao chép dữ liệu giao dịch thô"
|
||||||
},
|
},
|
||||||
@ -1482,9 +1479,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "Nhập mật khẩu tùy chọn"
|
"message": "Nhập mật khẩu tùy chọn"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "Nhập mật khẩu"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "Nhập mật khẩu để tiếp tục"
|
"message": "Nhập mật khẩu để tiếp tục"
|
||||||
},
|
},
|
||||||
@ -1561,9 +1555,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "Khám phá MetaMask Snap"
|
"message": "Khám phá MetaMask Snap"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "Xuất khóa riêng tư"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "Mở rộng trải nghiệm sử dụng ví."
|
"message": "Mở rộng trải nghiệm sử dụng ví."
|
||||||
},
|
},
|
||||||
@ -3868,9 +3859,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "Hiển thị khóa riêng tư"
|
"message": "Hiển thị khóa riêng tư"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "Hiện khóa riêng tư"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "Hiển thị các mạng thử nghiệm"
|
"message": "Hiển thị các mạng thử nghiệm"
|
||||||
},
|
},
|
||||||
@ -5130,9 +5118,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "Thông tin chi tiết về giao dịch không được hỗ trợ cho hợp đồng này tại thời điểm này."
|
"message": "Thông tin chi tiết về giao dịch không được hỗ trợ cho hợp đồng này tại thời điểm này."
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "Nhập mật khẩu MetaMask của bạn"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "Nhập Cụm từ khôi phục bí mật của bạn"
|
"message": "Nhập Cụm từ khôi phục bí mật của bạn"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/zh_CN/messages.json
generated
15
app/_locales/zh_CN/messages.json
generated
@ -898,9 +898,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "复制地址到剪贴板"
|
"message": "复制地址到剪贴板"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "这是您的私钥(点击以复制)"
|
|
||||||
},
|
|
||||||
"copyRawTransactionData": {
|
"copyRawTransactionData": {
|
||||||
"message": "复制原始交易数据"
|
"message": "复制原始交易数据"
|
||||||
},
|
},
|
||||||
@ -1482,9 +1479,6 @@
|
|||||||
"enterOptionalPassword": {
|
"enterOptionalPassword": {
|
||||||
"message": "输入可选密码"
|
"message": "输入可选密码"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "输入密码"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "输入密码继续"
|
"message": "输入密码继续"
|
||||||
},
|
},
|
||||||
@ -1561,9 +1555,6 @@
|
|||||||
"exploreMetaMaskSnaps": {
|
"exploreMetaMaskSnaps": {
|
||||||
"message": "探索MetaMask Snap"
|
"message": "探索MetaMask Snap"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "导出私钥"
|
|
||||||
},
|
|
||||||
"extendWalletWithSnaps": {
|
"extendWalletWithSnaps": {
|
||||||
"message": "扩展钱包体验。"
|
"message": "扩展钱包体验。"
|
||||||
},
|
},
|
||||||
@ -3868,9 +3859,6 @@
|
|||||||
"showPrivateKey": {
|
"showPrivateKey": {
|
||||||
"message": "显示私钥"
|
"message": "显示私钥"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "显示私钥"
|
|
||||||
},
|
|
||||||
"showTestnetNetworks": {
|
"showTestnetNetworks": {
|
||||||
"message": "显示测试网络"
|
"message": "显示测试网络"
|
||||||
},
|
},
|
||||||
@ -5130,9 +5118,6 @@
|
|||||||
"txInsightsNotSupported": {
|
"txInsightsNotSupported": {
|
||||||
"message": "此合约目前不支持交易见解。"
|
"message": "此合约目前不支持交易见解。"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "输入您的 MetaMask 密码"
|
|
||||||
},
|
|
||||||
"typeYourSRP": {
|
"typeYourSRP": {
|
||||||
"message": "输入助记词"
|
"message": "输入助记词"
|
||||||
},
|
},
|
||||||
|
15
app/_locales/zh_TW/messages.json
generated
15
app/_locales/zh_TW/messages.json
generated
@ -334,9 +334,6 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "複製到剪貼簿"
|
"message": "複製到剪貼簿"
|
||||||
},
|
},
|
||||||
"copyPrivateKey": {
|
|
||||||
"message": "這是您的私鑰(點擊複製)"
|
|
||||||
},
|
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "複製到剪貼簿"
|
"message": "複製到剪貼簿"
|
||||||
},
|
},
|
||||||
@ -497,9 +494,6 @@
|
|||||||
"enterMaxSpendLimit": {
|
"enterMaxSpendLimit": {
|
||||||
"message": "輸入最大花費限制"
|
"message": "輸入最大花費限制"
|
||||||
},
|
},
|
||||||
"enterPassword": {
|
|
||||||
"message": "請輸入密碼"
|
|
||||||
},
|
|
||||||
"enterPasswordContinue": {
|
"enterPasswordContinue": {
|
||||||
"message": "請輸入密碼"
|
"message": "請輸入密碼"
|
||||||
},
|
},
|
||||||
@ -547,9 +541,6 @@
|
|||||||
"expandView": {
|
"expandView": {
|
||||||
"message": "展開畫面"
|
"message": "展開畫面"
|
||||||
},
|
},
|
||||||
"exportPrivateKey": {
|
|
||||||
"message": "匯出私鑰"
|
|
||||||
},
|
|
||||||
"externalExtension": {
|
"externalExtension": {
|
||||||
"message": "外部擴充功能"
|
"message": "外部擴充功能"
|
||||||
},
|
},
|
||||||
@ -1231,9 +1222,6 @@
|
|||||||
"showPermissions": {
|
"showPermissions": {
|
||||||
"message": "顯示權限"
|
"message": "顯示權限"
|
||||||
},
|
},
|
||||||
"showPrivateKeys": {
|
|
||||||
"message": "顯示私鑰"
|
|
||||||
},
|
|
||||||
"sigRequest": {
|
"sigRequest": {
|
||||||
"message": "請求簽署"
|
"message": "請求簽署"
|
||||||
},
|
},
|
||||||
@ -1440,9 +1428,6 @@
|
|||||||
"tryAgain": {
|
"tryAgain": {
|
||||||
"message": "再試一次"
|
"message": "再試一次"
|
||||||
},
|
},
|
||||||
"typePassword": {
|
|
||||||
"message": "請輸入密碼"
|
|
||||||
},
|
|
||||||
"unapproved": {
|
"unapproved": {
|
||||||
"message": "未批准"
|
"message": "未批准"
|
||||||
},
|
},
|
||||||
|
@ -562,13 +562,6 @@
|
|||||||
"ui/components/app/modal/modal-content/modal-content.component.test.js",
|
"ui/components/app/modal/modal-content/modal-content.component.test.js",
|
||||||
"ui/components/app/modal/modal.component.js",
|
"ui/components/app/modal/modal.component.js",
|
||||||
"ui/components/app/modal/modal.component.test.js",
|
"ui/components/app/modal/modal.component.test.js",
|
||||||
"ui/components/app/modals/account-details-modal/account-details-modal.component.js",
|
|
||||||
"ui/components/app/modals/account-details-modal/account-details-modal.container.js",
|
|
||||||
"ui/components/app/modals/account-details-modal/account-details-modal.test.js",
|
|
||||||
"ui/components/app/modals/account-details-modal/index.js",
|
|
||||||
"ui/components/app/modals/account-modal-container/account-modal-container.component.js",
|
|
||||||
"ui/components/app/modals/account-modal-container/account-modal-container.container.js",
|
|
||||||
"ui/components/app/modals/account-modal-container/index.js",
|
|
||||||
"ui/components/app/modals/cancel-transaction/cancel-transaction-gas-fee/cancel-transaction-gas-fee.component.js",
|
"ui/components/app/modals/cancel-transaction/cancel-transaction-gas-fee/cancel-transaction-gas-fee.component.js",
|
||||||
"ui/components/app/modals/cancel-transaction/cancel-transaction-gas-fee/cancel-transaction-gas-fee.component.test.js",
|
"ui/components/app/modals/cancel-transaction/cancel-transaction-gas-fee/cancel-transaction-gas-fee.component.test.js",
|
||||||
"ui/components/app/modals/cancel-transaction/cancel-transaction-gas-fee/index.js",
|
"ui/components/app/modals/cancel-transaction/cancel-transaction-gas-fee/index.js",
|
||||||
@ -595,10 +588,6 @@
|
|||||||
"ui/components/app/modals/edit-approval-permission/edit-approval-permission.component.js",
|
"ui/components/app/modals/edit-approval-permission/edit-approval-permission.component.js",
|
||||||
"ui/components/app/modals/edit-approval-permission/edit-approval-permission.container.js",
|
"ui/components/app/modals/edit-approval-permission/edit-approval-permission.container.js",
|
||||||
"ui/components/app/modals/edit-approval-permission/index.js",
|
"ui/components/app/modals/edit-approval-permission/index.js",
|
||||||
"ui/components/app/modals/export-private-key-modal/export-private-key-modal.component.js",
|
|
||||||
"ui/components/app/modals/export-private-key-modal/export-private-key-modal.container.js",
|
|
||||||
"ui/components/app/modals/export-private-key-modal/export-private-key-modal.stories.js",
|
|
||||||
"ui/components/app/modals/export-private-key-modal/index.js",
|
|
||||||
"ui/components/app/modals/fade-modal.js",
|
"ui/components/app/modals/fade-modal.js",
|
||||||
"ui/components/app/modals/hide-token-confirmation-modal/hide-token-confirmation-modal.js",
|
"ui/components/app/modals/hide-token-confirmation-modal/hide-token-confirmation-modal.js",
|
||||||
"ui/components/app/modals/hide-token-confirmation-modal/hide-token-confirmation.stories.js",
|
"ui/components/app/modals/hide-token-confirmation-modal/hide-token-confirmation.stories.js",
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
const { strict: assert } = require('assert');
|
const { strict: assert } = require('assert');
|
||||||
const { convertToHexValue, withFixtures } = require('../helpers');
|
const { convertToHexValue, withFixtures, unlockWallet } = require('../helpers');
|
||||||
const FixtureBuilder = require('../fixture-builder');
|
const FixtureBuilder = require('../fixture-builder');
|
||||||
|
const { tEn } = require('../../lib/i18n-helpers');
|
||||||
|
|
||||||
describe('Show account details', function () {
|
describe('Show account details', function () {
|
||||||
const ganacheOptions = {
|
const ganacheOptions = {
|
||||||
@ -14,6 +15,7 @@ describe('Show account details', function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const PASSWORD = 'correct horse battery staple';
|
const PASSWORD = 'correct horse battery staple';
|
||||||
|
const wrongPassword = 'test test test test';
|
||||||
|
|
||||||
async function revealPrivateKey(driver, useAccountMenu = true) {
|
async function revealPrivateKey(driver, useAccountMenu = true) {
|
||||||
if (useAccountMenu) {
|
if (useAccountMenu) {
|
||||||
@ -27,12 +29,19 @@ describe('Show account details', function () {
|
|||||||
await driver.clickElement('[data-testid="account-options-menu-button"]');
|
await driver.clickElement('[data-testid="account-options-menu-button"]');
|
||||||
await driver.clickElement('[data-testid="account-list-menu-details"]');
|
await driver.clickElement('[data-testid="account-list-menu-details"]');
|
||||||
}
|
}
|
||||||
|
await driver.clickElement({ css: 'button', text: tEn('showPrivateKey') });
|
||||||
await driver.clickElement({ css: 'button', text: 'Show private key' });
|
|
||||||
|
|
||||||
await driver.fill('#account-details-authenticate', PASSWORD);
|
await driver.fill('#account-details-authenticate', PASSWORD);
|
||||||
await driver.press('#account-details-authenticate', driver.Key.ENTER);
|
await driver.press('#account-details-authenticate', driver.Key.ENTER);
|
||||||
|
|
||||||
|
await driver.holdMouseDownOnElement(
|
||||||
|
{
|
||||||
|
text: tEn('holdToRevealPrivateKey'),
|
||||||
|
tag: 'span',
|
||||||
|
},
|
||||||
|
2000,
|
||||||
|
);
|
||||||
|
|
||||||
const keyContainer = await driver.findElement(
|
const keyContainer = await driver.findElement(
|
||||||
'[data-testid="account-details-key"]',
|
'[data-testid="account-details-key"]',
|
||||||
);
|
);
|
||||||
@ -49,8 +58,7 @@ describe('Show account details', function () {
|
|||||||
},
|
},
|
||||||
async ({ driver }) => {
|
async ({ driver }) => {
|
||||||
await driver.navigate();
|
await driver.navigate();
|
||||||
await driver.fill('#password', PASSWORD);
|
await unlockWallet(driver);
|
||||||
await driver.press('#password', driver.Key.ENTER);
|
|
||||||
|
|
||||||
await driver.clickElement('[data-testid="account-menu-icon"]');
|
await driver.clickElement('[data-testid="account-menu-icon"]');
|
||||||
await driver.clickElement(
|
await driver.clickElement(
|
||||||
@ -73,8 +81,7 @@ describe('Show account details', function () {
|
|||||||
},
|
},
|
||||||
async ({ driver }) => {
|
async ({ driver }) => {
|
||||||
await driver.navigate();
|
await driver.navigate();
|
||||||
await driver.fill('#password', PASSWORD);
|
await unlockWallet(driver);
|
||||||
await driver.press('#password', driver.Key.ENTER);
|
|
||||||
|
|
||||||
const key = await revealPrivateKey(driver);
|
const key = await revealPrivateKey(driver);
|
||||||
assert.equal(
|
assert.equal(
|
||||||
@ -94,8 +101,7 @@ describe('Show account details', function () {
|
|||||||
},
|
},
|
||||||
async ({ driver }) => {
|
async ({ driver }) => {
|
||||||
await driver.navigate();
|
await driver.navigate();
|
||||||
await driver.fill('#password', PASSWORD);
|
await unlockWallet(driver);
|
||||||
await driver.press('#password', driver.Key.ENTER);
|
|
||||||
|
|
||||||
// Create and focus on different account
|
// Create and focus on different account
|
||||||
await driver.clickElement('[data-testid="account-menu-icon"]');
|
await driver.clickElement('[data-testid="account-menu-icon"]');
|
||||||
@ -103,7 +109,7 @@ describe('Show account details', function () {
|
|||||||
'[data-testid="multichain-account-menu-popover-add-account"]',
|
'[data-testid="multichain-account-menu-popover-add-account"]',
|
||||||
);
|
);
|
||||||
await driver.fill('[placeholder="Account 2"]', '2nd account');
|
await driver.fill('[placeholder="Account 2"]', '2nd account');
|
||||||
await driver.clickElement({ text: 'Create', tag: 'button' });
|
await driver.clickElement({ text: tEn('create'), tag: 'button' });
|
||||||
|
|
||||||
const key = await revealPrivateKey(driver);
|
const key = await revealPrivateKey(driver);
|
||||||
assert.equal(
|
assert.equal(
|
||||||
@ -123,8 +129,7 @@ describe('Show account details', function () {
|
|||||||
},
|
},
|
||||||
async ({ driver }) => {
|
async ({ driver }) => {
|
||||||
await driver.navigate();
|
await driver.navigate();
|
||||||
await driver.fill('#password', PASSWORD);
|
await unlockWallet(driver);
|
||||||
await driver.press('#password', driver.Key.ENTER);
|
|
||||||
|
|
||||||
const key = await revealPrivateKey(driver, false);
|
const key = await revealPrivateKey(driver, false);
|
||||||
assert.equal(
|
assert.equal(
|
||||||
@ -144,8 +149,7 @@ describe('Show account details', function () {
|
|||||||
},
|
},
|
||||||
async ({ driver }) => {
|
async ({ driver }) => {
|
||||||
await driver.navigate();
|
await driver.navigate();
|
||||||
await driver.fill('#password', PASSWORD);
|
await unlockWallet(driver);
|
||||||
await driver.press('#password', driver.Key.ENTER);
|
|
||||||
|
|
||||||
// Create and focus on different account
|
// Create and focus on different account
|
||||||
await driver.clickElement('[data-testid="account-menu-icon"]');
|
await driver.clickElement('[data-testid="account-menu-icon"]');
|
||||||
@ -153,7 +157,7 @@ describe('Show account details', function () {
|
|||||||
'[data-testid="multichain-account-menu-popover-add-account"]',
|
'[data-testid="multichain-account-menu-popover-add-account"]',
|
||||||
);
|
);
|
||||||
await driver.fill('[placeholder="Account 2"]', '2nd account');
|
await driver.fill('[placeholder="Account 2"]', '2nd account');
|
||||||
await driver.clickElement({ text: 'Create', tag: 'button' });
|
await driver.clickElement({ text: tEn('create'), tag: 'button' });
|
||||||
|
|
||||||
const key = await revealPrivateKey(driver, false);
|
const key = await revealPrivateKey(driver, false);
|
||||||
assert.equal(
|
assert.equal(
|
||||||
@ -163,4 +167,40 @@ describe('Show account details', function () {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should not reveal private key when password is incorrect', async function () {
|
||||||
|
await withFixtures(
|
||||||
|
{
|
||||||
|
fixtures: new FixtureBuilder().build(),
|
||||||
|
title: this.test.title,
|
||||||
|
failOnConsoleError: false,
|
||||||
|
},
|
||||||
|
async ({ driver }) => {
|
||||||
|
await driver.navigate();
|
||||||
|
await unlockWallet(driver);
|
||||||
|
|
||||||
|
// Attempt to reveal private key from account menu
|
||||||
|
await driver.clickElement('[data-testid="account-menu-icon"]');
|
||||||
|
await driver.clickElement(
|
||||||
|
'[data-testid="account-list-item-menu-button"]',
|
||||||
|
);
|
||||||
|
await driver.clickElement('[data-testid="account-list-menu-details"]');
|
||||||
|
await driver.clickElement({
|
||||||
|
css: 'button',
|
||||||
|
text: tEn('showPrivateKey'),
|
||||||
|
});
|
||||||
|
|
||||||
|
// Enter incorrect password
|
||||||
|
await driver.fill('#account-details-authenticate', wrongPassword);
|
||||||
|
await driver.press('#account-details-authenticate', driver.Key.ENTER);
|
||||||
|
|
||||||
|
// Display error when password is incorrect
|
||||||
|
const passwordErrorIsDisplayed = await driver.isElementPresent({
|
||||||
|
css: '.mm-help-text',
|
||||||
|
text: 'Incorrect Password.',
|
||||||
|
});
|
||||||
|
assert.equal(passwordErrorIsDisplayed, true);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,161 +0,0 @@
|
|||||||
import React, { Component } from 'react';
|
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
import { getAccountLink } from '@metamask/etherscan-link';
|
|
||||||
|
|
||||||
import AccountModalContainer from '../account-modal-container';
|
|
||||||
import QrView from '../../../ui/qr-code';
|
|
||||||
import EditableLabel from '../../../ui/editable-label';
|
|
||||||
import Button from '../../../ui/button';
|
|
||||||
import {
|
|
||||||
getURLHostName,
|
|
||||||
isAbleToExportAccount,
|
|
||||||
} from '../../../../helpers/utils/util';
|
|
||||||
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
||||||
import CustodyLabels from '../../../institutional/custody-labels/custody-labels';
|
|
||||||
import { toChecksumHexAddress } from '../../../../../shared/modules/hexstring-utils';
|
|
||||||
///: END:ONLY_INCLUDE_IN
|
|
||||||
import {
|
|
||||||
MetaMetricsEventCategory,
|
|
||||||
MetaMetricsEventLinkType,
|
|
||||||
MetaMetricsEventKeyType,
|
|
||||||
MetaMetricsEventName,
|
|
||||||
} from '../../../../../shared/constants/metametrics';
|
|
||||||
import { NETWORKS_ROUTE } from '../../../../helpers/constants/routes';
|
|
||||||
|
|
||||||
export default class AccountDetailsModal extends Component {
|
|
||||||
static propTypes = {
|
|
||||||
selectedIdentity: PropTypes.object,
|
|
||||||
chainId: PropTypes.string,
|
|
||||||
showExportPrivateKeyModal: PropTypes.func,
|
|
||||||
setAccountLabel: PropTypes.func,
|
|
||||||
keyrings: PropTypes.array,
|
|
||||||
rpcPrefs: PropTypes.object,
|
|
||||||
accounts: PropTypes.array,
|
|
||||||
history: PropTypes.object,
|
|
||||||
hideModal: PropTypes.func,
|
|
||||||
blockExplorerLinkText: PropTypes.object,
|
|
||||||
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
||||||
accountType: PropTypes.string,
|
|
||||||
custodyAccountDetails: PropTypes.object,
|
|
||||||
///: END:ONLY_INCLUDE_IN
|
|
||||||
};
|
|
||||||
|
|
||||||
static contextTypes = {
|
|
||||||
t: PropTypes.func,
|
|
||||||
trackEvent: PropTypes.func,
|
|
||||||
};
|
|
||||||
|
|
||||||
render() {
|
|
||||||
const {
|
|
||||||
selectedIdentity,
|
|
||||||
chainId,
|
|
||||||
showExportPrivateKeyModal,
|
|
||||||
setAccountLabel,
|
|
||||||
keyrings,
|
|
||||||
rpcPrefs,
|
|
||||||
history,
|
|
||||||
hideModal,
|
|
||||||
blockExplorerLinkText,
|
|
||||||
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
||||||
accountType,
|
|
||||||
custodyAccountDetails,
|
|
||||||
///: END:ONLY_INCLUDE_IN
|
|
||||||
} = this.props;
|
|
||||||
const { name, address } = selectedIdentity;
|
|
||||||
|
|
||||||
const keyring = keyrings.find((kr) => {
|
|
||||||
return kr.accounts.includes(address);
|
|
||||||
});
|
|
||||||
|
|
||||||
let exportPrivateKeyFeatureEnabled = isAbleToExportAccount(keyring?.type);
|
|
||||||
|
|
||||||
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
||||||
if (keyring?.type?.search('Custody') !== -1) {
|
|
||||||
exportPrivateKeyFeatureEnabled = false;
|
|
||||||
}
|
|
||||||
const showCustodyLabels = accountType === 'custody';
|
|
||||||
const custodyLabels = custodyAccountDetails
|
|
||||||
? custodyAccountDetails[toChecksumHexAddress(selectedIdentity.address)]
|
|
||||||
?.labels
|
|
||||||
: {};
|
|
||||||
///: END:ONLY_INCLUDE_IN
|
|
||||||
|
|
||||||
const routeToAddBlockExplorerUrl = () => {
|
|
||||||
hideModal();
|
|
||||||
history.push(`${NETWORKS_ROUTE}#blockExplorerUrl`);
|
|
||||||
};
|
|
||||||
|
|
||||||
const openBlockExplorer = () => {
|
|
||||||
const accountLink = getAccountLink(address, chainId, rpcPrefs);
|
|
||||||
this.context.trackEvent({
|
|
||||||
category: MetaMetricsEventCategory.Navigation,
|
|
||||||
event: MetaMetricsEventName.ExternalLinkClicked,
|
|
||||||
properties: {
|
|
||||||
link_type: MetaMetricsEventLinkType.AccountTracker,
|
|
||||||
location: 'Account Details Modal',
|
|
||||||
url_domain: getURLHostName(accountLink),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
global.platform.openTab({
|
|
||||||
url: accountLink,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<AccountModalContainer className="account-details-modal">
|
|
||||||
<EditableLabel
|
|
||||||
className="account-details-modal__name"
|
|
||||||
defaultValue={name}
|
|
||||||
onSubmit={(label) => setAccountLabel(address, label)}
|
|
||||||
accounts={this.props.accounts}
|
|
||||||
/>
|
|
||||||
{
|
|
||||||
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
||||||
showCustodyLabels && <CustodyLabels labels={custodyLabels} />
|
|
||||||
///: END:ONLY_INCLUDE_IN
|
|
||||||
}
|
|
||||||
<QrView
|
|
||||||
Qr={{
|
|
||||||
data: address,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<div className="account-details-modal__divider" />
|
|
||||||
|
|
||||||
<Button
|
|
||||||
type="secondary"
|
|
||||||
className="account-details-modal__button"
|
|
||||||
onClick={
|
|
||||||
blockExplorerLinkText.firstPart === 'addBlockExplorer'
|
|
||||||
? routeToAddBlockExplorerUrl
|
|
||||||
: openBlockExplorer
|
|
||||||
}
|
|
||||||
>
|
|
||||||
{this.context.t(blockExplorerLinkText.firstPart, [
|
|
||||||
blockExplorerLinkText.secondPart,
|
|
||||||
])}
|
|
||||||
</Button>
|
|
||||||
|
|
||||||
{exportPrivateKeyFeatureEnabled && (
|
|
||||||
<Button
|
|
||||||
type="secondary"
|
|
||||||
className="account-details-modal__button"
|
|
||||||
onClick={() => {
|
|
||||||
this.context.trackEvent({
|
|
||||||
category: MetaMetricsEventCategory.Accounts,
|
|
||||||
event: MetaMetricsEventName.KeyExportSelected,
|
|
||||||
properties: {
|
|
||||||
key_type: MetaMetricsEventKeyType.Pkey,
|
|
||||||
location: 'Account Details Modal',
|
|
||||||
},
|
|
||||||
});
|
|
||||||
showExportPrivateKeyModal();
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{this.context.t('exportPrivateKey')}
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
</AccountModalContainer>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,54 +0,0 @@
|
|||||||
import { connect } from 'react-redux';
|
|
||||||
import { compose } from 'redux';
|
|
||||||
import { withRouter } from 'react-router-dom';
|
|
||||||
import {
|
|
||||||
showModal,
|
|
||||||
setAccountLabel,
|
|
||||||
hideModal,
|
|
||||||
} from '../../../../store/actions';
|
|
||||||
import {
|
|
||||||
getSelectedIdentity,
|
|
||||||
getRpcPrefsForCurrentProvider,
|
|
||||||
getCurrentChainId,
|
|
||||||
getMetaMaskAccountsOrdered,
|
|
||||||
getBlockExplorerLinkText,
|
|
||||||
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
||||||
getAccountType,
|
|
||||||
///: END:ONLY_INCLUDE_IN
|
|
||||||
} from '../../../../selectors';
|
|
||||||
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
||||||
import { getCustodyAccountDetails } from '../../../../selectors/institutional/selectors';
|
|
||||||
///: END:ONLY_INCLUDE_IN
|
|
||||||
import AccountDetailsModal from './account-details-modal.component';
|
|
||||||
|
|
||||||
const mapStateToProps = (state) => {
|
|
||||||
return {
|
|
||||||
chainId: getCurrentChainId(state),
|
|
||||||
selectedIdentity: getSelectedIdentity(state),
|
|
||||||
keyrings: state.metamask.keyrings,
|
|
||||||
rpcPrefs: getRpcPrefsForCurrentProvider(state),
|
|
||||||
accounts: getMetaMaskAccountsOrdered(state),
|
|
||||||
blockExplorerLinkText: getBlockExplorerLinkText(state, true),
|
|
||||||
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
||||||
accountType: getAccountType(state),
|
|
||||||
custodyAccountDetails: getCustodyAccountDetails(state),
|
|
||||||
///: END:ONLY_INCLUDE_IN
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => {
|
|
||||||
return {
|
|
||||||
showExportPrivateKeyModal: () =>
|
|
||||||
dispatch(showModal({ name: 'EXPORT_PRIVATE_KEY' })),
|
|
||||||
setAccountLabel: (address, label) =>
|
|
||||||
dispatch(setAccountLabel(address, label)),
|
|
||||||
hideModal: () => {
|
|
||||||
dispatch(hideModal());
|
|
||||||
},
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export default compose(
|
|
||||||
withRouter,
|
|
||||||
connect(mapStateToProps, mapDispatchToProps),
|
|
||||||
)(AccountDetailsModal);
|
|
@ -1,241 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import configureMockState from 'redux-mock-store';
|
|
||||||
import { fireEvent } from '@testing-library/react';
|
|
||||||
import thunk from 'redux-thunk';
|
|
||||||
import { NetworkType } from '@metamask/controller-utils';
|
|
||||||
import { NetworkStatus } from '@metamask/network-controller';
|
|
||||||
import { renderWithProvider } from '../../../../../test/lib/render-helpers';
|
|
||||||
import mockState from '../../../../../test/data/mock-state.json';
|
|
||||||
import {
|
|
||||||
etherscanViewOn,
|
|
||||||
exportPrivateKey,
|
|
||||||
} from '../../../../../app/_locales/en/messages.json';
|
|
||||||
import AccountDetailsModal from '.';
|
|
||||||
|
|
||||||
const mockShowModal = jest.fn();
|
|
||||||
|
|
||||||
jest.mock('../../../../store/actions.ts', () => {
|
|
||||||
return {
|
|
||||||
showModal: () => mockShowModal,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Account Details Modal', () => {
|
|
||||||
const mockStore = configureMockState([thunk])(mockState);
|
|
||||||
|
|
||||||
global.platform = { openTab: jest.fn() };
|
|
||||||
|
|
||||||
it('should set account label when changing default account label', () => {
|
|
||||||
const { queryByTestId, getByPlaceholderText } = renderWithProvider(
|
|
||||||
<AccountDetailsModal />,
|
|
||||||
mockStore,
|
|
||||||
);
|
|
||||||
|
|
||||||
const editButton = queryByTestId('editable-label-button');
|
|
||||||
|
|
||||||
expect(queryByTestId('editable-input')).not.toBeInTheDocument();
|
|
||||||
fireEvent.click(editButton);
|
|
||||||
expect(queryByTestId('editable-input')).toBeInTheDocument();
|
|
||||||
|
|
||||||
const editableInput = getByPlaceholderText('Account name');
|
|
||||||
const newAccountLabel = 'New Label';
|
|
||||||
|
|
||||||
fireEvent.change(editableInput, {
|
|
||||||
target: { value: newAccountLabel },
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(editableInput).toHaveAttribute('value', newAccountLabel);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('opens new tab when view block explorer is clicked', () => {
|
|
||||||
const { queryByText } = renderWithProvider(
|
|
||||||
<AccountDetailsModal />,
|
|
||||||
mockStore,
|
|
||||||
);
|
|
||||||
|
|
||||||
const viewOnEtherscan = queryByText(etherscanViewOn.message);
|
|
||||||
|
|
||||||
fireEvent.click(viewOnEtherscan);
|
|
||||||
|
|
||||||
expect(global.platform.openTab).toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('shows export private key modal when clicked', () => {
|
|
||||||
const { queryByText } = renderWithProvider(
|
|
||||||
<AccountDetailsModal />,
|
|
||||||
mockStore,
|
|
||||||
);
|
|
||||||
|
|
||||||
const exportPrivButton = queryByText(exportPrivateKey.message);
|
|
||||||
|
|
||||||
fireEvent.click(exportPrivButton);
|
|
||||||
|
|
||||||
expect(mockShowModal).toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('sets blockexplorerview text when block explorer url in rpcPrefs exists', () => {
|
|
||||||
const blockExplorerUrl = 'https://block.explorer';
|
|
||||||
|
|
||||||
const customProviderMockState = {
|
|
||||||
...mockState,
|
|
||||||
metamask: {
|
|
||||||
...mockState.metamask,
|
|
||||||
networkConfigurations: {
|
|
||||||
networkConfigurationId: {
|
|
||||||
chainId: '0x99',
|
|
||||||
rpcPrefs: {
|
|
||||||
blockExplorerUrl,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
providerConfig: {
|
|
||||||
chainId: '0x99',
|
|
||||||
ticker: 'ETH',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const customProviderMockStore = configureMockState([thunk])(
|
|
||||||
customProviderMockState,
|
|
||||||
);
|
|
||||||
|
|
||||||
const { queryByText } = renderWithProvider(
|
|
||||||
<AccountDetailsModal />,
|
|
||||||
customProviderMockStore,
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(queryByText(/block.explorer/u)).toBeInTheDocument();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('does not display export private key if the keyring is snaps', () => {
|
|
||||||
const mockStateWithSnapKeyring = {
|
|
||||||
appState: {
|
|
||||||
networkDropdownOpen: false,
|
|
||||||
gasIsLoading: false,
|
|
||||||
isLoading: false,
|
|
||||||
modal: {
|
|
||||||
open: false,
|
|
||||||
modalState: {
|
|
||||||
name: null,
|
|
||||||
props: {},
|
|
||||||
},
|
|
||||||
previousModalState: {
|
|
||||||
name: null,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
warning: null,
|
|
||||||
customTokenAmount: '10',
|
|
||||||
},
|
|
||||||
history: {
|
|
||||||
mostRecentOverviewPage: '/mostRecentOverviewPage',
|
|
||||||
},
|
|
||||||
metamask: {
|
|
||||||
providerConfig: {
|
|
||||||
type: 'rpc',
|
|
||||||
chainId: '0x5',
|
|
||||||
ticker: 'ETH',
|
|
||||||
id: 'testNetworkConfigurationId',
|
|
||||||
},
|
|
||||||
keyrings: [
|
|
||||||
{
|
|
||||||
type: 'Snap Keyring',
|
|
||||||
accounts: [
|
|
||||||
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
|
|
||||||
'0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'Ledger Hardware',
|
|
||||||
accounts: ['0xc42edfcc21ed14dda456aa0756c153f7985d8813'],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'Simple Key Pair',
|
|
||||||
accounts: ['0xeb9e64b93097bc15f01f13eae97015c57ab64823'],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
identities: {
|
|
||||||
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': {
|
|
||||||
address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
|
|
||||||
name: 'Test Account',
|
|
||||||
},
|
|
||||||
'0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b': {
|
|
||||||
address: '0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b',
|
|
||||||
name: 'Test Account 2',
|
|
||||||
},
|
|
||||||
'0xc42edfcc21ed14dda456aa0756c153f7985d8813': {
|
|
||||||
address: '0xc42edfcc21ed14dda456aa0756c153f7985d8813',
|
|
||||||
name: 'Test Ledger 1',
|
|
||||||
},
|
|
||||||
'0xeb9e64b93097bc15f01f13eae97015c57ab64823': {
|
|
||||||
name: 'Test Account 3',
|
|
||||||
address: '0xeb9e64b93097bc15f01f13eae97015c57ab64823',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
networksMetadata: {
|
|
||||||
selectedNetworkClientId: NetworkType.mainnet,
|
|
||||||
[NetworkType.mainnet]: {
|
|
||||||
EIPS: {
|
|
||||||
1559: false,
|
|
||||||
},
|
|
||||||
status: NetworkStatus.Available,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
frequentRpcListDetail: [],
|
|
||||||
subjectMetadata: {
|
|
||||||
'npm:@metamask/test-snap-bip44': {
|
|
||||||
name: '@metamask/test-snap-bip44',
|
|
||||||
version: '1.2.3',
|
|
||||||
subjectType: 'snap',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
notifications: {
|
|
||||||
test: {
|
|
||||||
id: 'test',
|
|
||||||
origin: 'local:http://localhost:8086/',
|
|
||||||
createdDate: 1652967897732,
|
|
||||||
readDate: null,
|
|
||||||
message: 'Hello, http://localhost:8086!',
|
|
||||||
},
|
|
||||||
test2: {
|
|
||||||
id: 'test2',
|
|
||||||
origin: 'local:http://localhost:8086/',
|
|
||||||
createdDate: 1652967897732,
|
|
||||||
readDate: 1652967897732,
|
|
||||||
message: 'Hello, http://localhost:8086!',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
cachedBalances: {},
|
|
||||||
selectedAddress: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
|
|
||||||
accounts: {
|
|
||||||
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': {
|
|
||||||
balance: '0x346ba7725f412cbfdb',
|
|
||||||
address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
|
|
||||||
},
|
|
||||||
'0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b': {
|
|
||||||
address: '0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b',
|
|
||||||
balance: '0x0',
|
|
||||||
},
|
|
||||||
'0xc42edfcc21ed14dda456aa0756c153f7985d8813': {
|
|
||||||
address: '0xc42edfcc21ed14dda456aa0756c153f7985d8813',
|
|
||||||
balance: '0x0',
|
|
||||||
},
|
|
||||||
'0xeb9e64b93097bc15f01f13eae97015c57ab64823': {
|
|
||||||
address: '0xeb9e64b93097bc15f01f13eae97015c57ab64823',
|
|
||||||
balance: '0x0',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
const mockStoreWithSnapKeyring = configureMockState([thunk])(
|
|
||||||
mockStateWithSnapKeyring,
|
|
||||||
);
|
|
||||||
const { queryByText } = renderWithProvider(
|
|
||||||
<AccountDetailsModal />,
|
|
||||||
mockStoreWithSnapKeyring,
|
|
||||||
);
|
|
||||||
|
|
||||||
const exportPrivateKeyButton = queryByText(exportPrivateKey.message);
|
|
||||||
|
|
||||||
expect(exportPrivateKeyButton).not.toBeInTheDocument();
|
|
||||||
});
|
|
||||||
});
|
|
@ -1 +0,0 @@
|
|||||||
export { default } from './account-details-modal.container';
|
|
@ -1,30 +0,0 @@
|
|||||||
.account-details-modal {
|
|
||||||
&__name {
|
|
||||||
@include H4;
|
|
||||||
|
|
||||||
margin-top: 9px;
|
|
||||||
}
|
|
||||||
|
|
||||||
& &__button {
|
|
||||||
margin-top: 17px;
|
|
||||||
padding: 10px 22px;
|
|
||||||
width: 284px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&__divider {
|
|
||||||
width: 100%;
|
|
||||||
height: 1px;
|
|
||||||
margin: 16px 0 8px 0;
|
|
||||||
background-color: var(--color-border-muted);
|
|
||||||
}
|
|
||||||
|
|
||||||
& .qr-header {
|
|
||||||
@include H4;
|
|
||||||
|
|
||||||
margin-top: 9px;
|
|
||||||
}
|
|
||||||
|
|
||||||
& .qr-wrapper {
|
|
||||||
margin-top: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,57 +0,0 @@
|
|||||||
import PropTypes from 'prop-types';
|
|
||||||
import React from 'react';
|
|
||||||
import classnames from 'classnames';
|
|
||||||
import Identicon from '../../../ui/identicon';
|
|
||||||
|
|
||||||
export default function AccountModalContainer(props, context) {
|
|
||||||
const {
|
|
||||||
className,
|
|
||||||
selectedIdentity,
|
|
||||||
showBackButton,
|
|
||||||
backButtonAction,
|
|
||||||
hideModal,
|
|
||||||
children,
|
|
||||||
} = props;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
className={classnames(className, 'account-modal')}
|
|
||||||
style={{ borderRadius: '4px' }}
|
|
||||||
>
|
|
||||||
<div className="account-modal__container">
|
|
||||||
<div>
|
|
||||||
<Identicon address={selectedIdentity.address} diameter={64} />
|
|
||||||
</div>
|
|
||||||
{showBackButton && (
|
|
||||||
<div className="account-modal__back" onClick={backButtonAction}>
|
|
||||||
<i className="fa fa-angle-left fa-lg" />
|
|
||||||
<span className="account-modal__back-text">
|
|
||||||
{context.t('back')}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
<button className="account-modal__close" onClick={hideModal} />
|
|
||||||
{children}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
AccountModalContainer.contextTypes = {
|
|
||||||
t: PropTypes.func,
|
|
||||||
};
|
|
||||||
|
|
||||||
AccountModalContainer.defaultProps = {
|
|
||||||
showBackButton: false,
|
|
||||||
children: null,
|
|
||||||
backButtonAction: undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
AccountModalContainer.propTypes = {
|
|
||||||
className: PropTypes.string,
|
|
||||||
selectedIdentity: PropTypes.object.isRequired,
|
|
||||||
showBackButton: PropTypes.bool,
|
|
||||||
backButtonAction: PropTypes.func,
|
|
||||||
hideModal: PropTypes.func.isRequired,
|
|
||||||
children: PropTypes.node,
|
|
||||||
};
|
|
@ -1,23 +0,0 @@
|
|||||||
import { connect } from 'react-redux';
|
|
||||||
import { hideModal } from '../../../../store/actions';
|
|
||||||
import { getSelectedIdentity } from '../../../../selectors';
|
|
||||||
import AccountModalContainer from './account-modal-container.component';
|
|
||||||
|
|
||||||
function mapStateToProps(state, ownProps) {
|
|
||||||
return {
|
|
||||||
selectedIdentity: ownProps.selectedIdentity || getSelectedIdentity(state),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function mapDispatchToProps(dispatch) {
|
|
||||||
return {
|
|
||||||
hideModal: () => {
|
|
||||||
dispatch(hideModal());
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export default connect(
|
|
||||||
mapStateToProps,
|
|
||||||
mapDispatchToProps,
|
|
||||||
)(AccountModalContainer);
|
|
@ -1 +0,0 @@
|
|||||||
export { default } from './account-modal-container.container';
|
|
@ -1,53 +0,0 @@
|
|||||||
// Account Modal Container
|
|
||||||
.account-modal {
|
|
||||||
&__container {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: flex-start;
|
|
||||||
align-items: center;
|
|
||||||
position: relative;
|
|
||||||
padding: 5px 0 31px 0;
|
|
||||||
border: 1px solid var(--color-border-default);
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&__back {
|
|
||||||
color: var(--color-icon-default);
|
|
||||||
position: absolute;
|
|
||||||
top: 13px;
|
|
||||||
left: 17px;
|
|
||||||
cursor: pointer;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
&__back-text {
|
|
||||||
@include H6;
|
|
||||||
|
|
||||||
padding-left: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&__close {
|
|
||||||
@include H1;
|
|
||||||
|
|
||||||
background-color: transparent;
|
|
||||||
color: var(--color-text-default);
|
|
||||||
position: absolute;
|
|
||||||
cursor: pointer;
|
|
||||||
top: -10px;
|
|
||||||
right: 12px;
|
|
||||||
|
|
||||||
&::after {
|
|
||||||
content: '\00D7';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
& .identicon {
|
|
||||||
position: relative;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
margin: 0 auto;
|
|
||||||
top: -32px;
|
|
||||||
margin-bottom: -32px;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,139 +0,0 @@
|
|||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`Export PrivateKey Modal should match snapshot 1`] = `
|
|
||||||
<div>
|
|
||||||
<div
|
|
||||||
class="export-private-key-modal account-modal"
|
|
||||||
style="border-radius: 4px;"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="account-modal__container"
|
|
||||||
>
|
|
||||||
<div>
|
|
||||||
<div
|
|
||||||
class=""
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="identicon"
|
|
||||||
style="height: 64px; width: 64px; border-radius: 32px;"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
style="border-radius: 50px; overflow: hidden; padding: 0px; margin: 0px; width: 64px; height: 64px; display: inline-block; background: rgb(250, 58, 0);"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
height="64"
|
|
||||||
width="64"
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
>
|
|
||||||
<rect
|
|
||||||
fill="#18CDF2"
|
|
||||||
height="64"
|
|
||||||
transform="translate(-2.09678700758788 -6.608568138920997) rotate(328.9 32 32)"
|
|
||||||
width="64"
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
/>
|
|
||||||
<rect
|
|
||||||
fill="#035E56"
|
|
||||||
height="64"
|
|
||||||
transform="translate(-36.59692341766409 21.1849237434972) rotate(176.2 32 32)"
|
|
||||||
width="64"
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
/>
|
|
||||||
<rect
|
|
||||||
fill="#F26602"
|
|
||||||
height="64"
|
|
||||||
transform="translate(33.335684036447844 -28.410279445994163) rotate(468.9 32 32)"
|
|
||||||
width="64"
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<button
|
|
||||||
class="account-modal__close"
|
|
||||||
/>
|
|
||||||
<span
|
|
||||||
class="mm-box mm-text mm-text--body-lg-medium mm-text--font-weight-normal mm-box--margin-top-2 mm-box--color-text-default"
|
|
||||||
>
|
|
||||||
Test Account
|
|
||||||
</span>
|
|
||||||
<div
|
|
||||||
class="box ellip-address-wrapper box--margin-top-2 box--padding-1 box--sm:padding-2 box--md:padding-1 box--lg:padding-2 box--flex-direction-row box--border-style-solid box--border-color-border-default box--border-width-1"
|
|
||||||
>
|
|
||||||
0x0DCD5D886577d5081B0c52e242Ef29E70Be3E7bc
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="box export-private-key-modal__divider box--margin-5 box--md:margin-3 box--flex-direction-row box--width-full"
|
|
||||||
/>
|
|
||||||
<p
|
|
||||||
class="mm-box mm-text mm-text--body-lg-medium mm-text--font-weight-normal mm-box--margin-4 mm-box--sm:margin-0 mm-box--md:margin-4 mm-box--lg:margin-0 mm-box--color-text-default"
|
|
||||||
>
|
|
||||||
Show Private Keys
|
|
||||||
</p>
|
|
||||||
<div
|
|
||||||
class="box box--padding-right-5 box--padding-left-5 box--display-flex box--flex-direction-column box--align-items-flex-start box--width-full"
|
|
||||||
>
|
|
||||||
<label
|
|
||||||
class="mm-box mm-text mm-label mm-text--body-sm mm-text--font-weight-medium mm-box--margin-bottom-2 mm-box--display-inline-flex mm-box--align-items-center mm-box--color-text-default"
|
|
||||||
>
|
|
||||||
Type your MetaMask password
|
|
||||||
</label>
|
|
||||||
<div
|
|
||||||
class="box mm-text-field mm-text-field--size-md mm-text-field--truncate export-private-key-modal__password-input box--display-inline-flex box--flex-direction-row box--align-items-center box--width-full box--background-color-background-default box--rounded-sm box--border-width-1 box--border-style-solid"
|
|
||||||
data-testid="password-input"
|
|
||||||
>
|
|
||||||
<input
|
|
||||||
autocomplete="off"
|
|
||||||
class="mm-box mm-text mm-input mm-input--disable-state-styles mm-text-field__input mm-text--body-md mm-box--margin-0 mm-box--padding-0 mm-box--padding-right-4 mm-box--padding-left-4 mm-box--color-text-default mm-box--background-color-transparent mm-box--border-style-none"
|
|
||||||
focused="false"
|
|
||||||
placeholder="Enter password"
|
|
||||||
type="password"
|
|
||||||
value=""
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<p
|
|
||||||
class="mm-box mm-text mm-text--body-sm mm-box--color-error-default"
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
class="mm-box mm-banner-base mm-banner-alert mm-banner-alert--severity-danger mm-box--margin-top-4 mm-box--margin-right-5 mm-box--margin-left-5 mm-box--padding-1 mm-box--sm:padding-3 mm-box--md:padding-0 mm-box--lg:padding-3 mm-box--padding-left-2 mm-box--display-flex mm-box--gap-2 mm-box--background-color-error-muted mm-box--rounded-sm"
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
class="mm-box mm-icon mm-icon--size-lg mm-box--display-inline-block mm-box--color-error-default"
|
|
||||||
style="mask-image: url('./images/icons/danger.svg');"
|
|
||||||
/>
|
|
||||||
<div>
|
|
||||||
<p
|
|
||||||
class="mm-box mm-text mm-text--body-md mm-box--color-text-default"
|
|
||||||
>
|
|
||||||
Warning: Never disclose this key. Anyone with your private keys can steal any assets held in your account.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="box box--margin-top-3 box--padding-5 box--md:padding-5 box--display-flex box--flex-direction-row box--justify-content-space-between box--width-full"
|
|
||||||
>
|
|
||||||
<button
|
|
||||||
class="mm-box mm-text mm-button-base mm-button-base--size-lg mm-button-primary mm-text--body-md-medium mm-box--margin-right-4 mm-box--padding-0 mm-box--padding-right-4 mm-box--padding-left-4 mm-box--display-inline-flex mm-box--justify-content-center mm-box--align-items-center mm-box--width-1/2 mm-box--color-primary-inverse mm-box--background-color-primary-default mm-box--rounded-pill"
|
|
||||||
type="secondary"
|
|
||||||
>
|
|
||||||
Cancel
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
class="mm-box mm-text mm-button-base mm-button-base--size-lg mm-button-base--disabled mm-button-primary mm-button-primary--disabled mm-text--body-md-medium mm-box--padding-0 mm-box--padding-right-4 mm-box--padding-left-4 mm-box--display-inline-flex mm-box--justify-content-center mm-box--align-items-center mm-box--width-1/2 mm-box--color-primary-inverse mm-box--background-color-primary-default mm-box--rounded-pill"
|
|
||||||
disabled=""
|
|
||||||
type="primary"
|
|
||||||
>
|
|
||||||
Confirm
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
`;
|
|
@ -1,247 +0,0 @@
|
|||||||
import log from 'loglevel';
|
|
||||||
import React, { useContext, useEffect, useState } from 'react';
|
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
import withModalProps from '../../../../helpers/higher-order-components/with-modal-props';
|
|
||||||
import Box from '../../../ui/box';
|
|
||||||
import {
|
|
||||||
BUTTON_SIZES,
|
|
||||||
BUTTON_VARIANT,
|
|
||||||
BannerAlert,
|
|
||||||
Button,
|
|
||||||
Text,
|
|
||||||
} from '../../../component-library';
|
|
||||||
|
|
||||||
import AccountModalContainer from '../account-modal-container';
|
|
||||||
import { toChecksumHexAddress } from '../../../../../shared/modules/hexstring-utils';
|
|
||||||
import {
|
|
||||||
MetaMetricsEventCategory,
|
|
||||||
MetaMetricsEventKeyType,
|
|
||||||
MetaMetricsEventName,
|
|
||||||
} from '../../../../../shared/constants/metametrics';
|
|
||||||
import HoldToRevealModal from '../hold-to-reveal-modal/hold-to-reveal-modal';
|
|
||||||
import { MetaMetricsContext } from '../../../../contexts/metametrics';
|
|
||||||
import { useI18nContext } from '../../../../hooks/useI18nContext';
|
|
||||||
import {
|
|
||||||
BLOCK_SIZES,
|
|
||||||
BorderColor,
|
|
||||||
BorderStyle,
|
|
||||||
Color,
|
|
||||||
DISPLAY,
|
|
||||||
FLEX_DIRECTION,
|
|
||||||
FONT_WEIGHT,
|
|
||||||
JustifyContent,
|
|
||||||
TextVariant,
|
|
||||||
} from '../../../../helpers/constants/design-system';
|
|
||||||
import PrivateKeyDisplay from './private-key';
|
|
||||||
import PasswordInput from './password-input';
|
|
||||||
|
|
||||||
const ExportPrivateKeyModal = ({
|
|
||||||
clearAccountDetails,
|
|
||||||
hideWarning,
|
|
||||||
exportAccount,
|
|
||||||
selectedIdentity,
|
|
||||||
showAccountDetailModal,
|
|
||||||
hideModal,
|
|
||||||
warning = null,
|
|
||||||
previousModalState,
|
|
||||||
}) => {
|
|
||||||
const [password, setPassword] = useState('');
|
|
||||||
const [privateKey, setPrivateKey] = useState(null);
|
|
||||||
const [showWarning, setShowWarning] = useState(true);
|
|
||||||
const [showHoldToReveal, setShowHoldToReveal] = useState(false);
|
|
||||||
const trackEvent = useContext(MetaMetricsContext);
|
|
||||||
const t = useI18nContext();
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
return () => {
|
|
||||||
clearAccountDetails();
|
|
||||||
hideWarning();
|
|
||||||
};
|
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const exportAccountAndGetPrivateKey = async (passwordInput, address) => {
|
|
||||||
try {
|
|
||||||
const privateKeyRetrieved = await exportAccount(passwordInput, address);
|
|
||||||
trackEvent(
|
|
||||||
{
|
|
||||||
category: MetaMetricsEventCategory.Keys,
|
|
||||||
event: MetaMetricsEventName.KeyExportRevealed,
|
|
||||||
properties: {
|
|
||||||
key_type: MetaMetricsEventKeyType.Pkey,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{},
|
|
||||||
);
|
|
||||||
setPrivateKey(privateKeyRetrieved);
|
|
||||||
setShowWarning(false);
|
|
||||||
setShowHoldToReveal(true);
|
|
||||||
} catch (e) {
|
|
||||||
trackEvent(
|
|
||||||
{
|
|
||||||
category: MetaMetricsEventCategory.Keys,
|
|
||||||
event: MetaMetricsEventName.KeyExportFailed,
|
|
||||||
properties: {
|
|
||||||
key_type: MetaMetricsEventKeyType.Pkey,
|
|
||||||
reason: 'incorrect_password',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{},
|
|
||||||
);
|
|
||||||
|
|
||||||
log.error(e);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const { name, address } = selectedIdentity;
|
|
||||||
|
|
||||||
if (showHoldToReveal) {
|
|
||||||
return (
|
|
||||||
<AccountModalContainer
|
|
||||||
className="export-private-key-modal"
|
|
||||||
selectedIdentity={selectedIdentity}
|
|
||||||
showBackButton={previousModalState === 'ACCOUNT_DETAILS'}
|
|
||||||
backButtonAction={() => showAccountDetailModal()}
|
|
||||||
>
|
|
||||||
<HoldToRevealModal
|
|
||||||
onLongPressed={() => setShowHoldToReveal(false)}
|
|
||||||
willHide={false}
|
|
||||||
holdToRevealType="PrivateKey"
|
|
||||||
/>
|
|
||||||
</AccountModalContainer>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<AccountModalContainer
|
|
||||||
className="export-private-key-modal"
|
|
||||||
selectedIdentity={selectedIdentity}
|
|
||||||
showBackButton={previousModalState === 'ACCOUNT_DETAILS'}
|
|
||||||
backButtonAction={() => showAccountDetailModal()}
|
|
||||||
>
|
|
||||||
<Text
|
|
||||||
as="span"
|
|
||||||
marginTop={2}
|
|
||||||
variant={TextVariant.bodyLgMedium}
|
|
||||||
fontWeight={FONT_WEIGHT.NORMAL}
|
|
||||||
>
|
|
||||||
{name}
|
|
||||||
</Text>
|
|
||||||
<Box
|
|
||||||
className="ellip-address-wrapper"
|
|
||||||
borderStyle={BorderStyle.solid}
|
|
||||||
borderColor={BorderColor.borderDefault}
|
|
||||||
borderWidth={1}
|
|
||||||
marginTop={2}
|
|
||||||
padding={[1, 2, 1, 2]}
|
|
||||||
>
|
|
||||||
{toChecksumHexAddress(address)}
|
|
||||||
</Box>
|
|
||||||
<Box
|
|
||||||
className="export-private-key-modal__divider"
|
|
||||||
width={BLOCK_SIZES.FULL}
|
|
||||||
margin={[5, 0, 3, 0]}
|
|
||||||
/>
|
|
||||||
<Text
|
|
||||||
variant={TextVariant.bodyLgMedium}
|
|
||||||
margin={[4, 0, 4, 0]}
|
|
||||||
fontWeight={FONT_WEIGHT.NORMAL}
|
|
||||||
>
|
|
||||||
{t('showPrivateKeys')}
|
|
||||||
</Text>
|
|
||||||
{privateKey ? (
|
|
||||||
<PrivateKeyDisplay privateKey={privateKey} />
|
|
||||||
) : (
|
|
||||||
<PasswordInput setPassword={setPassword} />
|
|
||||||
)}
|
|
||||||
{showWarning && (
|
|
||||||
<Text color={Color.errorDefault} variant={TextVariant.bodySm}>
|
|
||||||
{warning}
|
|
||||||
</Text>
|
|
||||||
)}
|
|
||||||
<BannerAlert
|
|
||||||
padding={[1, 3, 0, 3]}
|
|
||||||
marginLeft={5}
|
|
||||||
marginRight={5}
|
|
||||||
marginTop={4}
|
|
||||||
severity="danger"
|
|
||||||
>
|
|
||||||
{t('privateKeyWarning')}
|
|
||||||
</BannerAlert>
|
|
||||||
<Box
|
|
||||||
display={DISPLAY.FLEX}
|
|
||||||
flexDirection={FLEX_DIRECTION.ROW}
|
|
||||||
width={BLOCK_SIZES.FULL}
|
|
||||||
justifyContent={JustifyContent.spaceBetween}
|
|
||||||
marginTop={3}
|
|
||||||
padding={[5, 0, 5, 0]}
|
|
||||||
>
|
|
||||||
{!privateKey && (
|
|
||||||
<Button
|
|
||||||
type={BUTTON_VARIANT.SECONDARY}
|
|
||||||
size={BUTTON_SIZES.LG}
|
|
||||||
width={BLOCK_SIZES.HALF}
|
|
||||||
marginRight={4}
|
|
||||||
onClick={() => {
|
|
||||||
trackEvent({
|
|
||||||
category: MetaMetricsEventCategory.Keys,
|
|
||||||
event: MetaMetricsEventName.KeyExportCanceled,
|
|
||||||
properties: {
|
|
||||||
key_type: MetaMetricsEventKeyType.Pkey,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
hideModal();
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{t('cancel')}
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
{privateKey ? (
|
|
||||||
<Button
|
|
||||||
type={BUTTON_VARIANT.PRIMARY}
|
|
||||||
size={BUTTON_SIZES.LG}
|
|
||||||
width={BLOCK_SIZES.FULL}
|
|
||||||
onClick={() => {
|
|
||||||
hideModal();
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{t('done')}
|
|
||||||
</Button>
|
|
||||||
) : (
|
|
||||||
<Button
|
|
||||||
type={BUTTON_VARIANT.PRIMARY}
|
|
||||||
size={BUTTON_SIZES.LG}
|
|
||||||
width={BLOCK_SIZES.HALF}
|
|
||||||
onClick={() => {
|
|
||||||
trackEvent({
|
|
||||||
category: MetaMetricsEventCategory.Keys,
|
|
||||||
event: MetaMetricsEventName.KeyExportRequested,
|
|
||||||
properties: {
|
|
||||||
key_type: MetaMetricsEventKeyType.Pkey,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
exportAccountAndGetPrivateKey(password, address);
|
|
||||||
}}
|
|
||||||
disabled={!password}
|
|
||||||
>
|
|
||||||
{t('confirm')}
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
</Box>
|
|
||||||
</AccountModalContainer>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
ExportPrivateKeyModal.propTypes = {
|
|
||||||
exportAccount: PropTypes.func.isRequired,
|
|
||||||
selectedIdentity: PropTypes.object.isRequired,
|
|
||||||
warning: PropTypes.node,
|
|
||||||
showAccountDetailModal: PropTypes.func.isRequired,
|
|
||||||
hideModal: PropTypes.func.isRequired,
|
|
||||||
hideWarning: PropTypes.func.isRequired,
|
|
||||||
clearAccountDetails: PropTypes.func.isRequired,
|
|
||||||
previousModalState: PropTypes.string,
|
|
||||||
};
|
|
||||||
|
|
||||||
export default withModalProps(ExportPrivateKeyModal);
|
|
@ -1,130 +0,0 @@
|
|||||||
import { fireEvent, waitFor } from '@testing-library/react';
|
|
||||||
import configureMockStore from 'redux-mock-store';
|
|
||||||
import React from 'react';
|
|
||||||
import thunk from 'redux-thunk';
|
|
||||||
import { renderWithProvider } from '../../../../../test/lib/render-helpers';
|
|
||||||
import ExportPrivateKeyModal from '.';
|
|
||||||
|
|
||||||
const mockAddress = '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc';
|
|
||||||
const mockPrivateKey = 'mock private key';
|
|
||||||
const mockExportAccount = jest.fn().mockResolvedValue(mockPrivateKey);
|
|
||||||
const mockClearAccountDetail = jest.fn();
|
|
||||||
const mockHideWarning = jest.fn();
|
|
||||||
|
|
||||||
jest.mock('../../../../store/actions', () => ({
|
|
||||||
exportAccount: () => mockExportAccount,
|
|
||||||
clearAccountDetails: () => mockClearAccountDetail,
|
|
||||||
hideWarning: () => mockHideWarning,
|
|
||||||
}));
|
|
||||||
|
|
||||||
describe('Export Private Key Modal', () => {
|
|
||||||
const state = {
|
|
||||||
metamask: {
|
|
||||||
selectedAddress: mockAddress,
|
|
||||||
identities: {
|
|
||||||
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': {
|
|
||||||
address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
|
|
||||||
name: 'Test Account',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
providerConfig: {
|
|
||||||
type: 'rpc',
|
|
||||||
chainId: '0x5',
|
|
||||||
ticker: 'ETH',
|
|
||||||
id: 'testNetworkConfigurationId',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
appState: {
|
|
||||||
warning: null,
|
|
||||||
previousModalState: {
|
|
||||||
name: null,
|
|
||||||
},
|
|
||||||
isLoading: false,
|
|
||||||
accountDetail: {
|
|
||||||
privateKey: null,
|
|
||||||
},
|
|
||||||
modal: {
|
|
||||||
modalState: {},
|
|
||||||
previousModalState: {
|
|
||||||
name: null,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
const mockStore = configureMockStore([thunk])(state);
|
|
||||||
|
|
||||||
it('renders export private key modal', () => {
|
|
||||||
const { queryByText } = renderWithProvider(
|
|
||||||
<ExportPrivateKeyModal />,
|
|
||||||
mockStore,
|
|
||||||
);
|
|
||||||
|
|
||||||
const title = queryByText('Show Private Keys');
|
|
||||||
expect(title).toBeInTheDocument();
|
|
||||||
|
|
||||||
const warning = queryByText(
|
|
||||||
'Warning: Never disclose this key. Anyone with your private keys can steal any assets held in your account.',
|
|
||||||
);
|
|
||||||
expect(warning).toBeInTheDocument();
|
|
||||||
expect(queryByText(mockPrivateKey)).not.toBeInTheDocument();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('renders hold to reveal after entering password', async () => {
|
|
||||||
const { queryByText, getByPlaceholderText } = renderWithProvider(
|
|
||||||
<ExportPrivateKeyModal />,
|
|
||||||
mockStore,
|
|
||||||
);
|
|
||||||
|
|
||||||
const nextButton = queryByText('Confirm');
|
|
||||||
expect(nextButton).toBeInTheDocument();
|
|
||||||
|
|
||||||
const input = getByPlaceholderText('Enter password');
|
|
||||||
|
|
||||||
fireEvent.change(input, {
|
|
||||||
target: { value: 'password' },
|
|
||||||
});
|
|
||||||
|
|
||||||
fireEvent.click(nextButton);
|
|
||||||
|
|
||||||
await waitFor(() => {
|
|
||||||
expect(mockExportAccount).toHaveBeenCalled();
|
|
||||||
expect(queryByText('Keep your private key safe')).toBeInTheDocument();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('provides password after passing hold to reveal', async () => {
|
|
||||||
const { queryByText, getByLabelText, getByText, getByPlaceholderText } =
|
|
||||||
renderWithProvider(<ExportPrivateKeyModal />, mockStore);
|
|
||||||
|
|
||||||
const nextButton = queryByText('Confirm');
|
|
||||||
expect(nextButton).toBeInTheDocument();
|
|
||||||
|
|
||||||
const input = getByPlaceholderText('Enter password');
|
|
||||||
fireEvent.change(input, {
|
|
||||||
target: { value: 'password' },
|
|
||||||
});
|
|
||||||
|
|
||||||
fireEvent.click(nextButton);
|
|
||||||
|
|
||||||
await waitFor(() => {
|
|
||||||
expect(mockExportAccount).toHaveBeenCalled();
|
|
||||||
expect(queryByText('Keep your private key safe')).toBeInTheDocument();
|
|
||||||
});
|
|
||||||
|
|
||||||
const holdButton = getByText('Hold to reveal Private Key');
|
|
||||||
expect(holdButton).toBeInTheDocument();
|
|
||||||
|
|
||||||
fireEvent.pointerDown(holdButton);
|
|
||||||
|
|
||||||
const circle = getByLabelText('hold to reveal circle locked');
|
|
||||||
fireEvent.transitionEnd(circle);
|
|
||||||
const circleUnlocked = getByLabelText('hold to reveal circle unlocked');
|
|
||||||
fireEvent.animationEnd(circleUnlocked);
|
|
||||||
|
|
||||||
await waitFor(() => {
|
|
||||||
expect(queryByText('Show Private Keys')).toBeInTheDocument();
|
|
||||||
expect(queryByText('Done')).toBeInTheDocument();
|
|
||||||
expect(queryByText(mockPrivateKey)).toBeInTheDocument();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,48 +0,0 @@
|
|||||||
import { connect } from 'react-redux';
|
|
||||||
import {
|
|
||||||
exportAccount,
|
|
||||||
hideWarning,
|
|
||||||
showModal,
|
|
||||||
hideModal,
|
|
||||||
clearAccountDetails,
|
|
||||||
} from '../../../../store/actions';
|
|
||||||
import { getSelectedIdentity } from '../../../../selectors';
|
|
||||||
import ExportPrivateKeyModal from './export-private-key-modal.component';
|
|
||||||
|
|
||||||
function mapStateToPropsFactory() {
|
|
||||||
let selectedIdentity = null;
|
|
||||||
return function mapStateToProps(state) {
|
|
||||||
// We should **not** change the identity displayed here even if it changes from underneath us.
|
|
||||||
// If we do, we will be showing the user one private key and a **different** address and name.
|
|
||||||
// Note that the selected identity **will** change from underneath us when we unlock the keyring
|
|
||||||
// which is the expected behavior that we are side-stepping.
|
|
||||||
selectedIdentity = selectedIdentity || getSelectedIdentity(state);
|
|
||||||
return {
|
|
||||||
warning: state.appState.warning,
|
|
||||||
privateKey: state.appState.accountDetail.privateKey,
|
|
||||||
selectedIdentity,
|
|
||||||
previousModalState: state.appState.modal.previousModalState.name,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function mapDispatchToProps(dispatch) {
|
|
||||||
return {
|
|
||||||
exportAccount: (password, address) => {
|
|
||||||
return dispatch(exportAccount(password, address)).then((res) => {
|
|
||||||
dispatch(hideWarning());
|
|
||||||
return res;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
showAccountDetailModal: () =>
|
|
||||||
dispatch(showModal({ name: 'ACCOUNT_DETAILS' })),
|
|
||||||
hideModal: () => dispatch(hideModal()),
|
|
||||||
hideWarning: () => dispatch(hideWarning()),
|
|
||||||
clearAccountDetails: () => dispatch(clearAccountDetails()),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export default connect(
|
|
||||||
mapStateToPropsFactory,
|
|
||||||
mapDispatchToProps,
|
|
||||||
)(ExportPrivateKeyModal);
|
|
@ -1,32 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import { Provider } from 'react-redux';
|
|
||||||
import testData from '../../../../../.storybook/test-data';
|
|
||||||
import configureStore from '../../../../store/store';
|
|
||||||
import ExportPrivateKeyModal from './export-private-key-modal.component';
|
|
||||||
|
|
||||||
// Using Test Data For Redux
|
|
||||||
const store = configureStore(testData);
|
|
||||||
|
|
||||||
export default {
|
|
||||||
title: 'Components/App/Modals/ExportPrivateKeyModal',
|
|
||||||
decorators: [(story) => <Provider store={store}>{story()}</Provider>],
|
|
||||||
argsTypes: {
|
|
||||||
exportAccount: { action: 'exportAccount' },
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
export const DefaultStory = () => {
|
|
||||||
return (
|
|
||||||
<ExportPrivateKeyModal
|
|
||||||
// mock actions
|
|
||||||
exportAccount={() => {
|
|
||||||
return 'mockPrivateKey';
|
|
||||||
}}
|
|
||||||
selectedIdentity={
|
|
||||||
testData.metamask.identities[testData.metamask.selectedAddress]
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
DefaultStory.storyName = 'Default';
|
|
@ -1,82 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import { fireEvent } from '@testing-library/react';
|
|
||||||
import configureMockStore from 'redux-mock-store';
|
|
||||||
import thunk from 'redux-thunk';
|
|
||||||
import { renderWithProvider } from '../../../../../test/lib/render-helpers';
|
|
||||||
import mockState from '../../../../../test/data/mock-state.json';
|
|
||||||
import * as actions from '../../../../store/actions';
|
|
||||||
import ExportPrivateKeyModal from '.';
|
|
||||||
|
|
||||||
jest.mock('../../../../store/actions.ts', () => ({
|
|
||||||
...jest.requireActual('../../../../store/actions.ts'),
|
|
||||||
exportAccount: jest.fn().mockReturnValue(jest.fn().mockResolvedValueOnce()),
|
|
||||||
hideWarning: () => jest.fn(),
|
|
||||||
showModal: () => jest.fn(),
|
|
||||||
hideModal: () => jest.fn(),
|
|
||||||
clearAccountDetails: () => jest.fn(),
|
|
||||||
}));
|
|
||||||
|
|
||||||
describe('Export PrivateKey Modal', () => {
|
|
||||||
const password = 'a-password';
|
|
||||||
|
|
||||||
const privKeyModalState = {
|
|
||||||
...mockState,
|
|
||||||
appState: {
|
|
||||||
...mockState.appState,
|
|
||||||
accountDetail: {
|
|
||||||
privateKey: '0xPrivKey',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
const mockStore = configureMockStore([thunk])(privKeyModalState);
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.clearAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should match snapshot', () => {
|
|
||||||
const { container } = renderWithProvider(
|
|
||||||
<ExportPrivateKeyModal />,
|
|
||||||
mockStore,
|
|
||||||
);
|
|
||||||
expect(container).toMatchSnapshot();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should disable confirm button by default', () => {
|
|
||||||
const { queryByText } = renderWithProvider(
|
|
||||||
<ExportPrivateKeyModal />,
|
|
||||||
mockStore,
|
|
||||||
);
|
|
||||||
|
|
||||||
const confirmButton = queryByText('Confirm');
|
|
||||||
|
|
||||||
expect(confirmButton).toBeDisabled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should call export account with password and selected address', () => {
|
|
||||||
const { queryByTestId, queryByText } = renderWithProvider(
|
|
||||||
<ExportPrivateKeyModal />,
|
|
||||||
mockStore,
|
|
||||||
);
|
|
||||||
|
|
||||||
const passwordInput =
|
|
||||||
queryByTestId('password-input').querySelector('input');
|
|
||||||
|
|
||||||
const passwordInputEvent = {
|
|
||||||
target: {
|
|
||||||
value: password,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
fireEvent.change(passwordInput, passwordInputEvent);
|
|
||||||
|
|
||||||
const confirmButton = queryByText('Confirm');
|
|
||||||
|
|
||||||
fireEvent.click(confirmButton);
|
|
||||||
|
|
||||||
expect(actions.exportAccount).toHaveBeenCalledWith(
|
|
||||||
password,
|
|
||||||
mockState.metamask.selectedAddress,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1 +0,0 @@
|
|||||||
export { default } from './export-private-key-modal.container';
|
|
@ -1,27 +0,0 @@
|
|||||||
.export-private-key-modal {
|
|
||||||
&__divider {
|
|
||||||
width: 100%;
|
|
||||||
height: 1px;
|
|
||||||
margin: 19px 0 8px 0;
|
|
||||||
background-color: var(--color-border-default);
|
|
||||||
}
|
|
||||||
|
|
||||||
&__password::-webkit-input-placeholder {
|
|
||||||
color: var(--color-text-muted);
|
|
||||||
}
|
|
||||||
|
|
||||||
&__private-key-display {
|
|
||||||
height: 80px;
|
|
||||||
width: 291px;
|
|
||||||
overflow: hidden;
|
|
||||||
overflow-wrap: break-word;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ellip-address-wrapper {
|
|
||||||
max-width: 286px;
|
|
||||||
direction: ltr;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
import {
|
|
||||||
BLOCK_SIZES,
|
|
||||||
FLEX_DIRECTION,
|
|
||||||
DISPLAY,
|
|
||||||
AlignItems,
|
|
||||||
Color,
|
|
||||||
TextVariant,
|
|
||||||
} from '../../../../helpers/constants/design-system';
|
|
||||||
import Box from '../../../ui/box';
|
|
||||||
import { useI18nContext } from '../../../../hooks/useI18nContext';
|
|
||||||
import { Label, TEXT_FIELD_TYPES, TextField } from '../../../component-library';
|
|
||||||
|
|
||||||
const PasswordInput = ({ setPassword }) => {
|
|
||||||
const t = useI18nContext();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Box
|
|
||||||
width={BLOCK_SIZES.FULL}
|
|
||||||
flexDirection={FLEX_DIRECTION.COLUMN}
|
|
||||||
display={DISPLAY.FLEX}
|
|
||||||
alignItems={AlignItems.flexStart}
|
|
||||||
paddingLeft={5}
|
|
||||||
paddingRight={5}
|
|
||||||
>
|
|
||||||
<Label
|
|
||||||
color={Color.textDefault}
|
|
||||||
marginBottom={2}
|
|
||||||
variant={TextVariant.bodySm}
|
|
||||||
>
|
|
||||||
{t('typePassword')}
|
|
||||||
</Label>
|
|
||||||
<TextField
|
|
||||||
width={BLOCK_SIZES.FULL}
|
|
||||||
placeholder={t('enterPassword')}
|
|
||||||
type={TEXT_FIELD_TYPES.PASSWORD}
|
|
||||||
className="export-private-key-modal__password-input"
|
|
||||||
onChange={(event) => setPassword(event.target.value)}
|
|
||||||
data-testid="password-input"
|
|
||||||
/>
|
|
||||||
</Box>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
PasswordInput.propTypes = {
|
|
||||||
setPassword: PropTypes.func.isRequired,
|
|
||||||
};
|
|
||||||
|
|
||||||
export default PasswordInput;
|
|
@ -1,81 +0,0 @@
|
|||||||
import copyToClipboard from 'copy-to-clipboard';
|
|
||||||
import { stripHexPrefix } from 'ethereumjs-util';
|
|
||||||
import React, { useContext } from 'react';
|
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
import Box from '../../../ui/box';
|
|
||||||
import { useI18nContext } from '../../../../hooks/useI18nContext';
|
|
||||||
import {
|
|
||||||
MetaMetricsEventCategory,
|
|
||||||
MetaMetricsEventName,
|
|
||||||
MetaMetricsEventKeyType,
|
|
||||||
} from '../../../../../shared/constants/metametrics';
|
|
||||||
import { MetaMetricsContext } from '../../../../contexts/metametrics';
|
|
||||||
import {
|
|
||||||
BLOCK_SIZES,
|
|
||||||
BorderStyle,
|
|
||||||
BorderColor,
|
|
||||||
BorderRadius,
|
|
||||||
AlignItems,
|
|
||||||
DISPLAY,
|
|
||||||
Color,
|
|
||||||
FLEX_DIRECTION,
|
|
||||||
TextVariant,
|
|
||||||
} from '../../../../helpers/constants/design-system';
|
|
||||||
import { Label } from '../../../component-library';
|
|
||||||
|
|
||||||
const PrivateKeyDisplay = ({ privateKey }) => {
|
|
||||||
const trackEvent = useContext(MetaMetricsContext);
|
|
||||||
const t = useI18nContext();
|
|
||||||
const plainKey = stripHexPrefix(privateKey);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Box
|
|
||||||
width={BLOCK_SIZES.FULL}
|
|
||||||
flexDirection={FLEX_DIRECTION.COLUMN}
|
|
||||||
display={DISPLAY.FLEX}
|
|
||||||
alignItems={AlignItems.flexStart}
|
|
||||||
paddingLeft={4}
|
|
||||||
paddingRight={4}
|
|
||||||
>
|
|
||||||
<Label
|
|
||||||
color={Color.textDefault}
|
|
||||||
marginBottom={2}
|
|
||||||
variant={TextVariant.bodySm}
|
|
||||||
>
|
|
||||||
{t('copyPrivateKey')}
|
|
||||||
</Label>
|
|
||||||
<Box
|
|
||||||
className="export-private-key-modal__private-key-display"
|
|
||||||
width={BLOCK_SIZES.FULL}
|
|
||||||
borderStyle={BorderStyle.solid}
|
|
||||||
borderColor={BorderColor.borderDefault}
|
|
||||||
borderRadius={BorderRadius.XS}
|
|
||||||
borderWidth={1}
|
|
||||||
padding={[2, 3, 2]}
|
|
||||||
color={Color.errorDefault}
|
|
||||||
onClick={() => {
|
|
||||||
copyToClipboard(plainKey);
|
|
||||||
trackEvent(
|
|
||||||
{
|
|
||||||
category: MetaMetricsEventCategory.Keys,
|
|
||||||
event: MetaMetricsEventName.KeyExportCopied,
|
|
||||||
properties: {
|
|
||||||
key_type: MetaMetricsEventKeyType.Pkey,
|
|
||||||
copy_method: 'clipboard',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{},
|
|
||||||
);
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{plainKey}
|
|
||||||
</Box>
|
|
||||||
</Box>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
PrivateKeyDisplay.propTypes = {
|
|
||||||
privateKey: PropTypes.string.isRequired,
|
|
||||||
};
|
|
||||||
|
|
||||||
export default PrivateKeyDisplay;
|
|
@ -1,204 +0,0 @@
|
|||||||
import PropTypes from 'prop-types';
|
|
||||||
import React, { useContext } from 'react';
|
|
||||||
import withModalProps from '../../../../helpers/higher-order-components/with-modal-props';
|
|
||||||
import Box from '../../../ui/box';
|
|
||||||
import {
|
|
||||||
Button,
|
|
||||||
BUTTON_SIZES,
|
|
||||||
BUTTON_VARIANT,
|
|
||||||
ButtonIcon,
|
|
||||||
IconName,
|
|
||||||
Text,
|
|
||||||
} from '../../../component-library';
|
|
||||||
import {
|
|
||||||
AlignItems,
|
|
||||||
Display,
|
|
||||||
FlexDirection,
|
|
||||||
JustifyContent,
|
|
||||||
Size,
|
|
||||||
TextVariant,
|
|
||||||
} from '../../../../helpers/constants/design-system';
|
|
||||||
import HoldToRevealButton from '../../hold-to-reveal-button';
|
|
||||||
import { useI18nContext } from '../../../../hooks/useI18nContext';
|
|
||||||
import ZENDESK_URLS from '../../../../helpers/constants/zendesk-url';
|
|
||||||
import { MetaMetricsContext } from '../../../../contexts/metametrics';
|
|
||||||
import {
|
|
||||||
MetaMetricsEventCategory,
|
|
||||||
MetaMetricsEventKeyType,
|
|
||||||
MetaMetricsEventName,
|
|
||||||
} from '../../../../../shared/constants/metametrics';
|
|
||||||
|
|
||||||
const HoldToRevealModal = ({
|
|
||||||
onLongPressed,
|
|
||||||
hideModal,
|
|
||||||
willHide = true,
|
|
||||||
holdToRevealType = 'SRP',
|
|
||||||
}) => {
|
|
||||||
const t = useI18nContext();
|
|
||||||
const holdToRevealTitle =
|
|
||||||
holdToRevealType === 'SRP'
|
|
||||||
? 'holdToRevealSRPTitle'
|
|
||||||
: 'holdToRevealPrivateKeyTitle';
|
|
||||||
|
|
||||||
const holdToRevealButton =
|
|
||||||
holdToRevealType === 'SRP' ? 'holdToRevealSRP' : 'holdToRevealPrivateKey';
|
|
||||||
const trackEvent = useContext(MetaMetricsContext);
|
|
||||||
|
|
||||||
const unlock = () => {
|
|
||||||
onLongPressed();
|
|
||||||
if (willHide) {
|
|
||||||
hideModal();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleCancel = () => {
|
|
||||||
hideModal();
|
|
||||||
};
|
|
||||||
|
|
||||||
const renderHoldToRevealPrivateKeyContent = () => {
|
|
||||||
return (
|
|
||||||
<Box
|
|
||||||
display={Display.Flex}
|
|
||||||
flexDirection={FlexDirection.Column}
|
|
||||||
gap={4}
|
|
||||||
marginBottom={6}
|
|
||||||
>
|
|
||||||
<Text variant={TextVariant.bodyMd}>
|
|
||||||
{t('holdToRevealContentPrivateKey1', [
|
|
||||||
<Text
|
|
||||||
key="hold-to-reveal-2"
|
|
||||||
variant={TextVariant.bodyMdBold}
|
|
||||||
as="span"
|
|
||||||
>
|
|
||||||
{t('holdToRevealContentPrivateKey2')}
|
|
||||||
</Text>,
|
|
||||||
])}
|
|
||||||
</Text>
|
|
||||||
<Text variant={TextVariant.bodyMdBold}>
|
|
||||||
{t('holdToRevealContent3', [
|
|
||||||
<Text
|
|
||||||
key="hold-to-reveal-4"
|
|
||||||
variant={TextVariant.bodyMd}
|
|
||||||
as="span"
|
|
||||||
display={Display.Inline}
|
|
||||||
>
|
|
||||||
{t('holdToRevealContent4')}
|
|
||||||
</Text>,
|
|
||||||
<Button
|
|
||||||
key="hold-to-reveal-5"
|
|
||||||
variant={BUTTON_VARIANT.LINK}
|
|
||||||
size={BUTTON_SIZES.INHERIT}
|
|
||||||
href={ZENDESK_URLS.NON_CUSTODIAL_WALLET}
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
>
|
|
||||||
{t('holdToRevealContent5')}
|
|
||||||
</Button>,
|
|
||||||
])}
|
|
||||||
</Text>
|
|
||||||
</Box>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const renderHoldToRevealSRPContent = () => {
|
|
||||||
return (
|
|
||||||
<Box
|
|
||||||
display={Display.Flex}
|
|
||||||
flexDirection={FlexDirection.Column}
|
|
||||||
gap={4}
|
|
||||||
marginBottom={6}
|
|
||||||
>
|
|
||||||
<Text variant={TextVariant.bodyMd}>
|
|
||||||
{t('holdToRevealContent1', [
|
|
||||||
<Text
|
|
||||||
key="hold-to-reveal-2"
|
|
||||||
variant={TextVariant.bodyMdBold}
|
|
||||||
as="span"
|
|
||||||
>
|
|
||||||
{t('holdToRevealContent2')}
|
|
||||||
</Text>,
|
|
||||||
])}
|
|
||||||
</Text>
|
|
||||||
<Text variant={TextVariant.bodyMdBold}>
|
|
||||||
{t('holdToRevealContent3', [
|
|
||||||
<Text
|
|
||||||
key="hold-to-reveal-4"
|
|
||||||
variant={TextVariant.bodyMd}
|
|
||||||
as="span"
|
|
||||||
display={Display.Inline}
|
|
||||||
>
|
|
||||||
{t('holdToRevealContent4')}
|
|
||||||
</Text>,
|
|
||||||
<Button
|
|
||||||
key="hold-to-reveal-5"
|
|
||||||
variant={BUTTON_VARIANT.LINK}
|
|
||||||
size={Size.auto}
|
|
||||||
href={ZENDESK_URLS.NON_CUSTODIAL_WALLET}
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
>
|
|
||||||
{t('holdToRevealContent5')}
|
|
||||||
</Button>,
|
|
||||||
])}
|
|
||||||
</Text>
|
|
||||||
</Box>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Box
|
|
||||||
className="hold-to-reveal-modal"
|
|
||||||
display={Display.Flex}
|
|
||||||
flexDirection={FlexDirection.Column}
|
|
||||||
justifyContent={JustifyContent.flexStart}
|
|
||||||
padding={6}
|
|
||||||
>
|
|
||||||
<Box
|
|
||||||
display={Display.Flex}
|
|
||||||
flexDirection={FlexDirection.Row}
|
|
||||||
alignItems={AlignItems.center}
|
|
||||||
justifyContent={JustifyContent.spaceBetween}
|
|
||||||
marginBottom={6}
|
|
||||||
>
|
|
||||||
<Text variant={TextVariant.headingSm}>{t(holdToRevealTitle)}</Text>
|
|
||||||
{willHide && (
|
|
||||||
<ButtonIcon
|
|
||||||
className="hold-to-reveal-modal__close"
|
|
||||||
iconName={IconName.Close}
|
|
||||||
size={Size.SM}
|
|
||||||
onClick={() => {
|
|
||||||
trackEvent({
|
|
||||||
category: MetaMetricsEventCategory.Keys,
|
|
||||||
event: MetaMetricsEventName.SrpHoldToRevealCloseClicked,
|
|
||||||
properties: {
|
|
||||||
key_type: MetaMetricsEventKeyType.Srp,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
handleCancel();
|
|
||||||
}}
|
|
||||||
ariaLabel={t('close')}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</Box>
|
|
||||||
{holdToRevealType === 'SRP'
|
|
||||||
? renderHoldToRevealSRPContent()
|
|
||||||
: renderHoldToRevealPrivateKeyContent()}
|
|
||||||
<HoldToRevealButton
|
|
||||||
buttonText={t(holdToRevealButton)}
|
|
||||||
onLongPressed={unlock}
|
|
||||||
marginLeft="auto"
|
|
||||||
marginRight="auto"
|
|
||||||
/>
|
|
||||||
</Box>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
HoldToRevealModal.propTypes = {
|
|
||||||
// The function to be executed after the hold to reveal long press has been completed
|
|
||||||
onLongPressed: PropTypes.func.isRequired,
|
|
||||||
hideModal: PropTypes.func,
|
|
||||||
willHide: PropTypes.bool,
|
|
||||||
holdToRevealType: PropTypes.oneOf(['SRP', 'PrivateKey']).isRequired,
|
|
||||||
};
|
|
||||||
|
|
||||||
export default withModalProps(HoldToRevealModal);
|
|
@ -1,13 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import HoldToRevealModal from './hold-to-reveal-modal';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
title: 'Components/App/Modals/HoldToRevealModal',
|
|
||||||
component: HoldToRevealModal,
|
|
||||||
};
|
|
||||||
|
|
||||||
const Template = (args) => <HoldToRevealModal {...args} />;
|
|
||||||
|
|
||||||
export const DefaultStory = Template.bind({});
|
|
||||||
|
|
||||||
DefaultStory.storyName = 'Default';
|
|
@ -0,0 +1,35 @@
|
|||||||
|
import { useArgs } from '@storybook/client-api';
|
||||||
|
import { Meta, StoryFn } from '@storybook/react';
|
||||||
|
import React from 'react';
|
||||||
|
import { Button } from '../../../component-library';
|
||||||
|
import HoldToRevealModal from './hold-to-reveal-modal';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
title: 'Components/App/HoldToRevealModal',
|
||||||
|
component: HoldToRevealModal,
|
||||||
|
argTypes: {
|
||||||
|
isShowingModal: {
|
||||||
|
control: 'boolean',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} as Meta<typeof HoldToRevealModal>;
|
||||||
|
|
||||||
|
export const DefaultStory: StoryFn<typeof HoldToRevealModal> = () => {
|
||||||
|
const [{ isShowingModal }, updateArgs] = useArgs();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Button onClick={() => updateArgs({ isShowingModal: true })}>
|
||||||
|
Open modal
|
||||||
|
</Button>
|
||||||
|
{isShowingModal && (
|
||||||
|
<HoldToRevealModal
|
||||||
|
isOpen={isShowingModal}
|
||||||
|
onClose={() => updateArgs({ isShowingModal: false })}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
DefaultStory.storyName = 'Default';
|
@ -1,9 +1,7 @@
|
|||||||
|
import { fireEvent, waitFor } from '@testing-library/react';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import configureMockState from 'redux-mock-store';
|
import configureMockState from 'redux-mock-store';
|
||||||
import { fireEvent, waitFor } from '@testing-library/react';
|
|
||||||
import thunk from 'redux-thunk';
|
import thunk from 'redux-thunk';
|
||||||
import { renderWithProvider } from '../../../../../test/lib/render-helpers';
|
|
||||||
import mockState from '../../../../../test/data/mock-state.json';
|
|
||||||
import {
|
import {
|
||||||
holdToRevealContent1,
|
holdToRevealContent1,
|
||||||
holdToRevealContent2,
|
holdToRevealContent2,
|
||||||
@ -12,32 +10,37 @@ import {
|
|||||||
holdToRevealContent5,
|
holdToRevealContent5,
|
||||||
holdToRevealSRPTitle,
|
holdToRevealSRPTitle,
|
||||||
} from '../../../../../app/_locales/en/messages.json';
|
} from '../../../../../app/_locales/en/messages.json';
|
||||||
import {
|
import mockState from '../../../../../test/data/mock-state.json';
|
||||||
MetaMetricsEventCategory,
|
import { renderWithProvider } from '../../../../../test/lib/render-helpers';
|
||||||
MetaMetricsEventKeyType,
|
|
||||||
MetaMetricsEventName,
|
|
||||||
} from '../../../../../shared/constants/metametrics';
|
|
||||||
import { MetaMetricsContext } from '../../../../contexts/metametrics';
|
import { MetaMetricsContext } from '../../../../contexts/metametrics';
|
||||||
import HoldToRevealModal from '.';
|
import HoldToRevealModal from '.';
|
||||||
|
|
||||||
describe('Hold to Reveal Modal', () => {
|
describe('Hold to Reveal Modal', () => {
|
||||||
const mockStore = configureMockState([thunk])(mockState);
|
const mockStore = configureMockState([thunk])(mockState);
|
||||||
|
const onCloseStub = jest.fn();
|
||||||
const onLongPressStub = jest.fn();
|
const onLongPressStub = jest.fn();
|
||||||
const hideModalStub = jest.fn();
|
const mockTrackEvent = jest.fn();
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
jest.resetAllMocks();
|
jest.resetAllMocks();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render the srp warning text and button', () => {
|
function render(holdToRevealType = 'SRP') {
|
||||||
const { getByText } = renderWithProvider(
|
return renderWithProvider(
|
||||||
<HoldToRevealModal
|
<MetaMetricsContext.Provider value={mockTrackEvent}>
|
||||||
onLongPressed={onLongPressStub}
|
<HoldToRevealModal
|
||||||
hideModal={hideModalStub}
|
isOpen
|
||||||
holdToRevealType="SRP"
|
onClose={onCloseStub}
|
||||||
/>,
|
onLongPressed={onLongPressStub}
|
||||||
|
holdToRevealType={holdToRevealType}
|
||||||
|
/>
|
||||||
|
</MetaMetricsContext.Provider>,
|
||||||
mockStore,
|
mockStore,
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
it('should render the srp warning text and button', () => {
|
||||||
|
const { getByText } = render();
|
||||||
|
|
||||||
const holdButton = getByText('Hold to reveal SRP');
|
const holdButton = getByText('Hold to reveal SRP');
|
||||||
expect(holdButton).toBeInTheDocument();
|
expect(holdButton).toBeInTheDocument();
|
||||||
@ -73,13 +76,7 @@ describe('Hold to Reveal Modal', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should should execute onLongPressed after long press', async () => {
|
it('should should execute onLongPressed after long press', async () => {
|
||||||
const { getByText, queryByLabelText } = renderWithProvider(
|
const { getByText, queryByLabelText } = render();
|
||||||
<HoldToRevealModal
|
|
||||||
onLongPressed={onLongPressStub}
|
|
||||||
hideModal={hideModalStub}
|
|
||||||
/>,
|
|
||||||
mockStore,
|
|
||||||
);
|
|
||||||
|
|
||||||
const holdButton = getByText('Hold to reveal SRP');
|
const holdButton = getByText('Hold to reveal SRP');
|
||||||
const circleLocked = queryByLabelText('hold to reveal circle locked');
|
const circleLocked = queryByLabelText('hold to reveal circle locked');
|
||||||
@ -99,13 +96,7 @@ describe('Hold to Reveal Modal', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should remain open if long pressed was not complete', async () => {
|
it('should remain open if long pressed was not complete', async () => {
|
||||||
const { getByText, queryByLabelText } = renderWithProvider(
|
const { getByText, queryByLabelText } = render();
|
||||||
<HoldToRevealModal
|
|
||||||
onLongPressed={onLongPressStub}
|
|
||||||
hideModal={hideModalStub}
|
|
||||||
/>,
|
|
||||||
mockStore,
|
|
||||||
);
|
|
||||||
|
|
||||||
const holdButton = getByText('Hold to reveal SRP');
|
const holdButton = getByText('Hold to reveal SRP');
|
||||||
|
|
||||||
@ -118,64 +109,14 @@ describe('Hold to Reveal Modal', () => {
|
|||||||
expect(circleLocked).toBeInTheDocument();
|
expect(circleLocked).toBeInTheDocument();
|
||||||
expect(circleUnlocked).not.toBeInTheDocument();
|
expect(circleUnlocked).not.toBeInTheDocument();
|
||||||
expect(onLongPressStub).not.toHaveBeenCalled();
|
expect(onLongPressStub).not.toHaveBeenCalled();
|
||||||
expect(hideModalStub).not.toHaveBeenCalled();
|
expect(onCloseStub).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should fire event when closing', async () => {
|
it('should render in Private Key mode', async () => {
|
||||||
const mockTrackEvent = jest.fn();
|
const { getByText } = render('PrivateKey');
|
||||||
|
|
||||||
const { queryByLabelText } = renderWithProvider(
|
const holdButton = getByText('Hold to reveal Private Key');
|
||||||
<MetaMetricsContext.Provider value={mockTrackEvent}>
|
expect(holdButton).toBeInTheDocument();
|
||||||
<HoldToRevealModal
|
|
||||||
onLongPressed={onLongPressStub}
|
|
||||||
hideModal={hideModalStub}
|
|
||||||
/>
|
|
||||||
,
|
|
||||||
</MetaMetricsContext.Provider>,
|
|
||||||
mockStore,
|
|
||||||
);
|
|
||||||
|
|
||||||
const closeButton = queryByLabelText('Close');
|
|
||||||
|
|
||||||
fireEvent.click(closeButton);
|
|
||||||
|
|
||||||
await waitFor(() => {
|
|
||||||
expect(mockTrackEvent).toHaveBeenCalledWith({
|
|
||||||
category: MetaMetricsEventCategory.Keys,
|
|
||||||
event: MetaMetricsEventName.SrpHoldToRevealCloseClicked,
|
|
||||||
properties: {
|
|
||||||
key_type: MetaMetricsEventKeyType.Srp,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not hide modal after completing long press if set to false', async () => {
|
|
||||||
const { getByText, queryByLabelText } = renderWithProvider(
|
|
||||||
<HoldToRevealModal
|
|
||||||
onLongPressed={onLongPressStub}
|
|
||||||
hideModal={hideModalStub}
|
|
||||||
willHide={false}
|
|
||||||
/>,
|
|
||||||
mockStore,
|
|
||||||
);
|
|
||||||
|
|
||||||
const holdButton = getByText('Hold to reveal SRP');
|
|
||||||
const circleLocked = queryByLabelText('hold to reveal circle locked');
|
|
||||||
|
|
||||||
fireEvent.pointerDown(holdButton);
|
|
||||||
fireEvent.transitionEnd(circleLocked);
|
|
||||||
|
|
||||||
const circleUnlocked = queryByLabelText('hold to reveal circle unlocked');
|
|
||||||
fireEvent.animationEnd(circleUnlocked);
|
|
||||||
|
|
||||||
await waitFor(() => {
|
|
||||||
expect(holdButton.firstChild).toHaveClass(
|
|
||||||
'hold-to-reveal-button__icon-container',
|
|
||||||
);
|
|
||||||
expect(onLongPressStub).toHaveBeenCalled();
|
|
||||||
expect(hideModalStub).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -0,0 +1,120 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import {
|
||||||
|
Display,
|
||||||
|
FlexDirection,
|
||||||
|
TextVariant,
|
||||||
|
} from '../../../../helpers/constants/design-system';
|
||||||
|
import ZENDESK_URLS from '../../../../helpers/constants/zendesk-url';
|
||||||
|
import { useI18nContext } from '../../../../hooks/useI18nContext';
|
||||||
|
import {
|
||||||
|
BUTTON_SIZES,
|
||||||
|
BUTTON_VARIANT,
|
||||||
|
Box,
|
||||||
|
Button,
|
||||||
|
Modal,
|
||||||
|
ModalContent,
|
||||||
|
ModalHeader,
|
||||||
|
ModalOverlay,
|
||||||
|
Text,
|
||||||
|
} from '../../../component-library';
|
||||||
|
import HoldToRevealButton from '../../hold-to-reveal-button';
|
||||||
|
|
||||||
|
type HoldToRevealModalProps = {
|
||||||
|
isOpen: boolean;
|
||||||
|
onClose: () => void;
|
||||||
|
onLongPressed: () => void;
|
||||||
|
holdToRevealType: 'SRP' | 'PrivateKey';
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function HoldToRevealModal({
|
||||||
|
isOpen,
|
||||||
|
onClose,
|
||||||
|
onLongPressed,
|
||||||
|
holdToRevealType,
|
||||||
|
}: HoldToRevealModalProps) {
|
||||||
|
const t = useI18nContext();
|
||||||
|
const holdToRevealTitle =
|
||||||
|
holdToRevealType === 'SRP'
|
||||||
|
? 'holdToRevealSRPTitle'
|
||||||
|
: 'holdToRevealPrivateKeyTitle';
|
||||||
|
|
||||||
|
const holdToRevealButton =
|
||||||
|
holdToRevealType === 'SRP' ? 'holdToRevealSRP' : 'holdToRevealPrivateKey';
|
||||||
|
|
||||||
|
const holdToRevealContent =
|
||||||
|
holdToRevealType === 'SRP'
|
||||||
|
? 'holdToRevealContent'
|
||||||
|
: 'holdToRevealContentPrivateKey';
|
||||||
|
|
||||||
|
// If this is done inline, verify-locales will output `Forbidden use of template strings in 't' function`
|
||||||
|
const holdToRevealContent1 = `${holdToRevealContent}1`;
|
||||||
|
const holdToRevealContent2 = `${holdToRevealContent}2`;
|
||||||
|
|
||||||
|
// This is here to stop yarn verify-locales from removing these strings
|
||||||
|
t('holdToRevealContentPrivateKey1');
|
||||||
|
t('holdToRevealContentPrivateKey2');
|
||||||
|
t('holdToRevealContent1');
|
||||||
|
t('holdToRevealContent2');
|
||||||
|
|
||||||
|
const MainContent = () => {
|
||||||
|
return (
|
||||||
|
<Box
|
||||||
|
display={Display.Flex}
|
||||||
|
flexDirection={FlexDirection.Column}
|
||||||
|
gap={4}
|
||||||
|
marginTop={6}
|
||||||
|
marginBottom={6}
|
||||||
|
>
|
||||||
|
<Text variant={TextVariant.bodyMd}>
|
||||||
|
{t(holdToRevealContent1, [
|
||||||
|
<Text
|
||||||
|
key="hold-to-reveal-2"
|
||||||
|
variant={TextVariant.bodyMdBold}
|
||||||
|
as="span"
|
||||||
|
>
|
||||||
|
{t(holdToRevealContent2)}
|
||||||
|
</Text>,
|
||||||
|
])}
|
||||||
|
</Text>
|
||||||
|
<Text variant={TextVariant.bodyMdBold}>
|
||||||
|
{t('holdToRevealContent3', [
|
||||||
|
<Text
|
||||||
|
key="hold-to-reveal-4"
|
||||||
|
variant={TextVariant.bodyMd}
|
||||||
|
as="span"
|
||||||
|
display={Display.Inline}
|
||||||
|
>
|
||||||
|
{t('holdToRevealContent4')}
|
||||||
|
</Text>,
|
||||||
|
<Button
|
||||||
|
key="hold-to-reveal-5"
|
||||||
|
variant={BUTTON_VARIANT.LINK}
|
||||||
|
size={BUTTON_SIZES.INHERIT}
|
||||||
|
href={ZENDESK_URLS.NON_CUSTODIAL_WALLET}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
{t('holdToRevealContent5')}
|
||||||
|
</Button>,
|
||||||
|
])}
|
||||||
|
</Text>
|
||||||
|
</Box>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Modal isOpen={isOpen} onClose={onClose}>
|
||||||
|
<ModalOverlay />
|
||||||
|
<ModalContent>
|
||||||
|
<ModalHeader onClose={onClose}>{t(holdToRevealTitle)}</ModalHeader>
|
||||||
|
<Box display={Display.Flex} flexDirection={FlexDirection.Column}>
|
||||||
|
<MainContent />
|
||||||
|
<HoldToRevealButton
|
||||||
|
buttonText={t(holdToRevealButton)}
|
||||||
|
onLongPressed={onLongPressed}
|
||||||
|
/>
|
||||||
|
</Box>
|
||||||
|
</ModalContent>
|
||||||
|
</Modal>
|
||||||
|
);
|
||||||
|
}
|
@ -1,8 +0,0 @@
|
|||||||
.hold-to-reveal-modal {
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
&__close {
|
|
||||||
position: absolute;
|
|
||||||
right: 16px;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,9 +1,6 @@
|
|||||||
@import 'account-details-modal/index';
|
|
||||||
@import 'account-modal-container/index';
|
|
||||||
@import 'cancel-transaction/index';
|
@import 'cancel-transaction/index';
|
||||||
@import 'confirm-remove-account/index';
|
@import 'confirm-remove-account/index';
|
||||||
@import 'edit-approval-permission/index';
|
@import 'edit-approval-permission/index';
|
||||||
@import 'export-private-key-modal/index';
|
|
||||||
@import 'hide-token-confirmation-modal/index';
|
@import 'hide-token-confirmation-modal/index';
|
||||||
@import 'new-account-modal/index';
|
@import 'new-account-modal/index';
|
||||||
@import 'qr-scanner/index';
|
@import 'qr-scanner/index';
|
||||||
@ -11,7 +8,6 @@
|
|||||||
@import 'customize-nonce/index';
|
@import 'customize-nonce/index';
|
||||||
@import 'convert-token-to-nft-modal/index';
|
@import 'convert-token-to-nft-modal/index';
|
||||||
@import 'contract-details-modal/index';
|
@import 'contract-details-modal/index';
|
||||||
@import 'hold-to-reveal-modal/index';
|
|
||||||
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
||||||
@import '../../institutional/confirm-remove-jwt-modal/index';
|
@import '../../institutional/confirm-remove-jwt-modal/index';
|
||||||
@import '../../institutional/custody-confirm-link-modal/index';
|
@import '../../institutional/custody-confirm-link-modal/index';
|
||||||
|
@ -18,14 +18,11 @@ import CustodyConfirmLink from '../../institutional/custody-confirm-link-modal';
|
|||||||
import InteractiveReplacementTokenModal from '../../institutional/interactive-replacement-token-modal';
|
import InteractiveReplacementTokenModal from '../../institutional/interactive-replacement-token-modal';
|
||||||
import TransactionFailed from '../../institutional/transaction-failed-modal';
|
import TransactionFailed from '../../institutional/transaction-failed-modal';
|
||||||
///: END:ONLY_INCLUDE_IN
|
///: END:ONLY_INCLUDE_IN
|
||||||
import AccountDetailsModal from './account-details-modal';
|
|
||||||
import ExportPrivateKeyModal from './export-private-key-modal';
|
|
||||||
import HideTokenConfirmationModal from './hide-token-confirmation-modal';
|
import HideTokenConfirmationModal from './hide-token-confirmation-modal';
|
||||||
import QRScanner from './qr-scanner';
|
import QRScanner from './qr-scanner';
|
||||||
|
|
||||||
import ConfirmRemoveAccount from './confirm-remove-account';
|
import ConfirmRemoveAccount from './confirm-remove-account';
|
||||||
import ConfirmResetAccount from './confirm-reset-account';
|
import ConfirmResetAccount from './confirm-reset-account';
|
||||||
import HoldToRevealModal from './hold-to-reveal-modal';
|
|
||||||
import TransactionConfirmed from './transaction-confirmed';
|
import TransactionConfirmed from './transaction-confirmed';
|
||||||
|
|
||||||
import ConfirmDeleteNetwork from './confirm-delete-network';
|
import ConfirmDeleteNetwork from './confirm-delete-network';
|
||||||
@ -145,29 +142,6 @@ const MODALS = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
ACCOUNT_DETAILS: {
|
|
||||||
contents: <AccountDetailsModal />,
|
|
||||||
...accountModalStyle,
|
|
||||||
},
|
|
||||||
|
|
||||||
EXPORT_PRIVATE_KEY: {
|
|
||||||
contents: <ExportPrivateKeyModal />,
|
|
||||||
...accountModalStyle,
|
|
||||||
},
|
|
||||||
|
|
||||||
HOLD_TO_REVEAL_SRP: {
|
|
||||||
contents: <HoldToRevealModal />,
|
|
||||||
mobileModalStyle: {
|
|
||||||
...modalContainerMobileStyle,
|
|
||||||
},
|
|
||||||
laptopModalStyle: {
|
|
||||||
...modalContainerLaptopStyle,
|
|
||||||
},
|
|
||||||
contentStyle: {
|
|
||||||
borderRadius: '8px',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
HIDE_TOKEN_CONFIRMATION: {
|
HIDE_TOKEN_CONFIRMATION: {
|
||||||
contents: <HideTokenConfirmationModal />,
|
contents: <HideTokenConfirmationModal />,
|
||||||
mobileModalStyle: {
|
mobileModalStyle: {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
import PropTypes from 'prop-types';
|
||||||
import React, { useCallback, useState } from 'react';
|
import React, { useCallback, useState } from 'react';
|
||||||
import { useDispatch, useSelector } from 'react-redux';
|
import { useDispatch, useSelector } from 'react-redux';
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
import {
|
import {
|
||||||
Display,
|
Display,
|
||||||
FontWeight,
|
FontWeight,
|
||||||
@ -9,16 +9,21 @@ import {
|
|||||||
} from '../../../helpers/constants/design-system';
|
} from '../../../helpers/constants/design-system';
|
||||||
import {
|
import {
|
||||||
BannerAlert,
|
BannerAlert,
|
||||||
|
Box,
|
||||||
ButtonPrimary,
|
ButtonPrimary,
|
||||||
ButtonSecondary,
|
ButtonSecondary,
|
||||||
FormTextField,
|
FormTextField,
|
||||||
Box,
|
|
||||||
} from '../../component-library';
|
} from '../../component-library';
|
||||||
|
|
||||||
import { useI18nContext } from '../../../hooks/useI18nContext';
|
import { useI18nContext } from '../../../hooks/useI18nContext';
|
||||||
import { exportAccount, hideWarning } from '../../../store/actions';
|
import { exportAccount, hideWarning } from '../../../store/actions';
|
||||||
|
|
||||||
export const AccountDetailsAuthenticate = ({ address, onCancel }) => {
|
export const AccountDetailsAuthenticate = ({
|
||||||
|
address,
|
||||||
|
onCancel,
|
||||||
|
setPrivateKey,
|
||||||
|
setShowHoldToReveal,
|
||||||
|
}) => {
|
||||||
const t = useI18nContext();
|
const t = useI18nContext();
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
@ -28,11 +33,13 @@ export const AccountDetailsAuthenticate = ({ address, onCancel }) => {
|
|||||||
const warning = useSelector((state) => state.appState.warning);
|
const warning = useSelector((state) => state.appState.warning);
|
||||||
|
|
||||||
const onSubmit = useCallback(() => {
|
const onSubmit = useCallback(() => {
|
||||||
dispatch(exportAccount(password, address)).then((res) => {
|
dispatch(
|
||||||
|
exportAccount(password, address, setPrivateKey, setShowHoldToReveal),
|
||||||
|
).then((res) => {
|
||||||
dispatch(hideWarning());
|
dispatch(hideWarning());
|
||||||
return res;
|
return res;
|
||||||
});
|
});
|
||||||
}, [dispatch, password, address]);
|
}, [dispatch, password, address, setPrivateKey, setShowHoldToReveal]);
|
||||||
|
|
||||||
const handleKeyPress = useCallback(
|
const handleKeyPress = useCallback(
|
||||||
(e) => {
|
(e) => {
|
||||||
@ -80,4 +87,6 @@ export const AccountDetailsAuthenticate = ({ address, onCancel }) => {
|
|||||||
AccountDetailsAuthenticate.propTypes = {
|
AccountDetailsAuthenticate.propTypes = {
|
||||||
address: PropTypes.string.isRequired,
|
address: PropTypes.string.isRequired,
|
||||||
onCancel: PropTypes.func.isRequired,
|
onCancel: PropTypes.func.isRequired,
|
||||||
|
setPrivateKey: PropTypes.func.isRequired,
|
||||||
|
setShowHoldToReveal: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
@ -1,48 +1,54 @@
|
|||||||
import React, { useCallback, useState } from 'react';
|
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
import React, { useCallback, useContext, useState } from 'react';
|
||||||
import { useDispatch, useSelector } from 'react-redux';
|
import { useDispatch, useSelector } from 'react-redux';
|
||||||
import {
|
import {
|
||||||
setAccountDetailsAddress,
|
MetaMetricsEventCategory,
|
||||||
|
MetaMetricsEventKeyType,
|
||||||
|
MetaMetricsEventName,
|
||||||
|
} from '../../../../shared/constants/metametrics';
|
||||||
|
import { MetaMetricsContext } from '../../../contexts/metametrics';
|
||||||
|
import {
|
||||||
|
AlignItems,
|
||||||
|
Display,
|
||||||
|
FlexDirection,
|
||||||
|
TextVariant,
|
||||||
|
} from '../../../helpers/constants/design-system';
|
||||||
|
import { useI18nContext } from '../../../hooks/useI18nContext';
|
||||||
|
import { getMetaMaskAccountsOrdered } from '../../../selectors';
|
||||||
|
import {
|
||||||
clearAccountDetails,
|
clearAccountDetails,
|
||||||
hideWarning,
|
hideWarning,
|
||||||
|
setAccountDetailsAddress,
|
||||||
} from '../../../store/actions';
|
} from '../../../store/actions';
|
||||||
|
import HoldToRevealModal from '../../app/modals/hold-to-reveal-modal/hold-to-reveal-modal';
|
||||||
import {
|
import {
|
||||||
AvatarAccount,
|
AvatarAccount,
|
||||||
AvatarAccountSize,
|
AvatarAccountSize,
|
||||||
AvatarAccountVariant,
|
AvatarAccountVariant,
|
||||||
|
Box,
|
||||||
Modal,
|
Modal,
|
||||||
ModalContent,
|
ModalContent,
|
||||||
ModalHeader,
|
ModalHeader,
|
||||||
ModalOverlay,
|
ModalOverlay,
|
||||||
Box,
|
|
||||||
Text,
|
Text,
|
||||||
} from '../../component-library';
|
} from '../../component-library';
|
||||||
import { getMetaMaskAccountsOrdered } from '../../../selectors';
|
|
||||||
import { useI18nContext } from '../../../hooks/useI18nContext';
|
|
||||||
import {
|
|
||||||
AlignItems,
|
|
||||||
TextVariant,
|
|
||||||
Display,
|
|
||||||
FlexDirection,
|
|
||||||
} from '../../../helpers/constants/design-system';
|
|
||||||
import { AddressCopyButton } from '../address-copy-button';
|
import { AddressCopyButton } from '../address-copy-button';
|
||||||
import { AccountDetailsDisplay } from './account-details-display';
|
|
||||||
import { AccountDetailsAuthenticate } from './account-details-authenticate';
|
import { AccountDetailsAuthenticate } from './account-details-authenticate';
|
||||||
|
import { AccountDetailsDisplay } from './account-details-display';
|
||||||
import { AccountDetailsKey } from './account-details-key';
|
import { AccountDetailsKey } from './account-details-key';
|
||||||
|
|
||||||
export const AccountDetails = ({ address }) => {
|
export const AccountDetails = ({ address }) => {
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const t = useI18nContext();
|
const t = useI18nContext();
|
||||||
|
const trackEvent = useContext(MetaMetricsContext);
|
||||||
const useBlockie = useSelector((state) => state.metamask.useBlockie);
|
const useBlockie = useSelector((state) => state.metamask.useBlockie);
|
||||||
const accounts = useSelector(getMetaMaskAccountsOrdered);
|
const accounts = useSelector(getMetaMaskAccountsOrdered);
|
||||||
const { name } = accounts.find((account) => account.address === address);
|
const { name } = accounts.find((account) => account.address === address);
|
||||||
|
const [showHoldToReveal, setShowHoldToReveal] = useState(false);
|
||||||
const [attemptingExport, setAttemptingExport] = useState(false);
|
const [attemptingExport, setAttemptingExport] = useState(false);
|
||||||
|
|
||||||
// This is only populated when the user properly authenticates
|
// This is only populated when the user properly authenticates
|
||||||
const privateKey = useSelector(
|
const [privateKey, setPrivateKey] = useState('');
|
||||||
(state) => state.appState.accountDetail.privateKey,
|
|
||||||
);
|
|
||||||
|
|
||||||
const onClose = useCallback(() => {
|
const onClose = useCallback(() => {
|
||||||
dispatch(setAccountDetailsAddress(''));
|
dispatch(setAccountDetailsAddress(''));
|
||||||
@ -64,63 +70,87 @@ export const AccountDetails = ({ address }) => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal isOpen onClose={onClose}>
|
<>
|
||||||
<ModalOverlay />
|
{/* This is the Modal that says "Show private key" on top and has a few states */}
|
||||||
<ModalContent>
|
<Modal isOpen={!showHoldToReveal} onClose={onClose}>
|
||||||
<ModalHeader
|
<ModalOverlay />
|
||||||
onClose={onClose}
|
<ModalContent>
|
||||||
onBack={
|
<ModalHeader
|
||||||
attemptingExport
|
onClose={onClose}
|
||||||
? () => {
|
onBack={
|
||||||
dispatch(hideWarning());
|
attemptingExport &&
|
||||||
setAttemptingExport(false);
|
(() => {
|
||||||
}
|
dispatch(hideWarning());
|
||||||
: null
|
setAttemptingExport(false);
|
||||||
}
|
})
|
||||||
>
|
}
|
||||||
{attemptingExport ? t('showPrivateKey') : avatar}
|
>
|
||||||
</ModalHeader>
|
{attemptingExport ? t('showPrivateKey') : avatar}
|
||||||
{attemptingExport ? (
|
</ModalHeader>
|
||||||
<>
|
{attemptingExport ? (
|
||||||
<Box
|
<>
|
||||||
display={Display.Flex}
|
<Box
|
||||||
alignItems={AlignItems.center}
|
display={Display.Flex}
|
||||||
flexDirection={FlexDirection.Column}
|
alignItems={AlignItems.center}
|
||||||
>
|
flexDirection={FlexDirection.Column}
|
||||||
{avatar}
|
|
||||||
<Text
|
|
||||||
marginTop={2}
|
|
||||||
marginBottom={2}
|
|
||||||
variant={TextVariant.bodyLgMedium}
|
|
||||||
style={{ wordBreak: 'break-word' }}
|
|
||||||
>
|
>
|
||||||
{name}
|
{avatar}
|
||||||
</Text>
|
<Text
|
||||||
<AddressCopyButton address={address} shorten />
|
marginTop={2}
|
||||||
</Box>
|
marginBottom={2}
|
||||||
{privateKey ? (
|
variant={TextVariant.bodyLgMedium}
|
||||||
<AccountDetailsKey
|
style={{ wordBreak: 'break-word' }}
|
||||||
accountName={name}
|
>
|
||||||
onClose={onClose}
|
{name}
|
||||||
privateKey={privateKey}
|
</Text>
|
||||||
/>
|
<AddressCopyButton address={address} shorten />
|
||||||
) : (
|
</Box>
|
||||||
<AccountDetailsAuthenticate
|
{privateKey ? (
|
||||||
address={address}
|
<AccountDetailsKey
|
||||||
onCancel={onClose}
|
accountName={name}
|
||||||
/>
|
onClose={onClose}
|
||||||
)}
|
privateKey={privateKey}
|
||||||
</>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<AccountDetailsDisplay
|
<AccountDetailsAuthenticate
|
||||||
accounts={accounts}
|
address={address}
|
||||||
accountName={name}
|
onCancel={onClose}
|
||||||
address={address}
|
setPrivateKey={setPrivateKey}
|
||||||
onExportClick={() => setAttemptingExport(true)}
|
setShowHoldToReveal={setShowHoldToReveal}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</ModalContent>
|
</>
|
||||||
</Modal>
|
) : (
|
||||||
|
<AccountDetailsDisplay
|
||||||
|
accounts={accounts}
|
||||||
|
accountName={name}
|
||||||
|
address={address}
|
||||||
|
onExportClick={() => setAttemptingExport(true)}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</ModalContent>
|
||||||
|
</Modal>
|
||||||
|
|
||||||
|
{/* This is the Modal that says "Hold to reveal private key" */}
|
||||||
|
<HoldToRevealModal
|
||||||
|
isOpen={showHoldToReveal}
|
||||||
|
onClose={() => {
|
||||||
|
trackEvent({
|
||||||
|
category: MetaMetricsEventCategory.Keys,
|
||||||
|
event: MetaMetricsEventName.KeyExportCanceled,
|
||||||
|
properties: {
|
||||||
|
key_type: MetaMetricsEventKeyType.Pkey,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
setPrivateKey('');
|
||||||
|
setShowHoldToReveal(false);
|
||||||
|
}}
|
||||||
|
onLongPressed={() => {
|
||||||
|
setShowHoldToReveal(false);
|
||||||
|
}}
|
||||||
|
holdToRevealType="PrivateKey"
|
||||||
|
/>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,31 +1,35 @@
|
|||||||
import React from 'react';
|
|
||||||
import { screen, fireEvent } from '@testing-library/react';
|
|
||||||
import userEvent from '@testing-library/user-event';
|
|
||||||
import { toChecksumHexAddress } from '@metamask/controller-utils';
|
import { toChecksumHexAddress } from '@metamask/controller-utils';
|
||||||
import { renderWithProvider } from '../../../../test/jest';
|
import { fireEvent, screen } from '@testing-library/react';
|
||||||
import configureStore from '../../../store/store';
|
import userEvent from '@testing-library/user-event';
|
||||||
import mockState from '../../../../test/data/mock-state.json';
|
import React from 'react';
|
||||||
import { showPrivateKey } from '../../../../app/_locales/en/messages.json';
|
import { showPrivateKey } from '../../../../app/_locales/en/messages.json';
|
||||||
|
import mockState from '../../../../test/data/mock-state.json';
|
||||||
|
import { renderWithProvider } from '../../../../test/jest';
|
||||||
|
import { shortenAddress } from '../../../helpers/utils/util';
|
||||||
import {
|
import {
|
||||||
setAccountDetailsAddress,
|
clearAccountDetails,
|
||||||
exportAccount,
|
exportAccount,
|
||||||
hideWarning,
|
hideWarning,
|
||||||
|
setAccountDetailsAddress,
|
||||||
} from '../../../store/actions';
|
} from '../../../store/actions';
|
||||||
import { shortenAddress } from '../../../helpers/utils/util';
|
import configureStore from '../../../store/store';
|
||||||
|
import { AccountDetailsKey } from './account-details-key';
|
||||||
import { AccountDetails } from '.';
|
import { AccountDetails } from '.';
|
||||||
|
|
||||||
jest.mock('../../../store/actions.ts');
|
jest.mock('../../../store/actions.ts');
|
||||||
|
|
||||||
describe('AccountDetails', () => {
|
describe('AccountDetails', () => {
|
||||||
const address = '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc';
|
const address = '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc';
|
||||||
const mockSetAccountDetailsAddress = jest.fn();
|
const mockClearAccountDetails = jest.fn();
|
||||||
const mockExportAccount = jest.fn().mockResolvedValue(true);
|
const mockExportAccount = jest.fn().mockResolvedValue(true);
|
||||||
const mockHideWarning = jest.fn();
|
const mockHideWarning = jest.fn();
|
||||||
|
const mockSetAccountDetailsAddress = jest.fn();
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
setAccountDetailsAddress.mockReturnValue(mockSetAccountDetailsAddress);
|
clearAccountDetails.mockReturnValue(mockClearAccountDetails);
|
||||||
exportAccount.mockReturnValue(mockExportAccount);
|
exportAccount.mockReturnValue(mockExportAccount);
|
||||||
hideWarning.mockReturnValue(mockHideWarning);
|
hideWarning.mockReturnValue(mockHideWarning);
|
||||||
|
setAccountDetailsAddress.mockReturnValue(mockSetAccountDetailsAddress);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => jest.clearAllMocks());
|
afterEach(() => jest.clearAllMocks());
|
||||||
@ -79,23 +83,33 @@ describe('AccountDetails', () => {
|
|||||||
await userEvent.keyboard(password);
|
await userEvent.keyboard(password);
|
||||||
fireEvent.click(queryByText('Confirm'));
|
fireEvent.click(queryByText('Confirm'));
|
||||||
|
|
||||||
expect(exportAccount).toHaveBeenCalledWith(password, address);
|
expect(exportAccount).toHaveBeenCalledWith(
|
||||||
|
password,
|
||||||
|
address,
|
||||||
|
expect.any(Function),
|
||||||
|
expect.any(Function),
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('displays the private key when exposed in state', () => {
|
it('displays the private key when sent in props', () => {
|
||||||
const samplePrivateKey = '8675309';
|
const samplePrivateKey = '8675309';
|
||||||
const { queryByText } = render(
|
|
||||||
{},
|
const { queryByText } = renderWithProvider(
|
||||||
{ appState: { accountDetail: { privateKey: samplePrivateKey } } },
|
<AccountDetailsKey
|
||||||
|
accountName="Account 1"
|
||||||
|
onClose={jest.fn()}
|
||||||
|
privateKey={samplePrivateKey}
|
||||||
|
/>,
|
||||||
);
|
);
|
||||||
|
|
||||||
const exportPrivateKeyButton = queryByText(showPrivateKey.message);
|
|
||||||
fireEvent.click(exportPrivateKeyButton);
|
|
||||||
|
|
||||||
expect(
|
|
||||||
queryByText(shortenAddress(toChecksumHexAddress(address))),
|
|
||||||
).toBeInTheDocument();
|
|
||||||
|
|
||||||
expect(queryByText(samplePrivateKey)).toBeInTheDocument();
|
expect(queryByText(samplePrivateKey)).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should call AccountDetails.onClose()', () => {
|
||||||
|
render();
|
||||||
|
|
||||||
|
fireEvent.click(screen.getByLabelText('Close'));
|
||||||
|
|
||||||
|
expect(screen.queryByText('Account 1')).toBeNull();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,48 +1,48 @@
|
|||||||
import React, { useContext, useEffect, useState } from 'react';
|
|
||||||
import { useSelector, useDispatch } from 'react-redux';
|
|
||||||
import { useHistory } from 'react-router-dom';
|
|
||||||
import qrCode from 'qrcode-generator';
|
import qrCode from 'qrcode-generator';
|
||||||
import { requestRevealSeedWords, showModal } from '../../store/actions';
|
import React, { useContext, useEffect, useState } from 'react';
|
||||||
import ExportTextContainer from '../../components/ui/export-text-container';
|
import { useDispatch, useSelector } from 'react-redux';
|
||||||
import { getMostRecentOverviewPage } from '../../ducks/history/history';
|
import { useHistory } from 'react-router-dom';
|
||||||
import {
|
import {
|
||||||
MetaMetricsEventCategory,
|
MetaMetricsEventCategory,
|
||||||
MetaMetricsEventKeyType,
|
MetaMetricsEventKeyType,
|
||||||
MetaMetricsEventName,
|
MetaMetricsEventName,
|
||||||
} from '../../../shared/constants/metametrics';
|
} from '../../../shared/constants/metametrics';
|
||||||
|
import HoldToRevealModal from '../../components/app/modals/hold-to-reveal-modal/hold-to-reveal-modal';
|
||||||
import {
|
import {
|
||||||
TextVariant,
|
BUTTON_SIZES,
|
||||||
SEVERITIES,
|
BUTTON_VARIANT,
|
||||||
Size,
|
|
||||||
BLOCK_SIZES,
|
|
||||||
JustifyContent,
|
|
||||||
AlignItems,
|
|
||||||
DISPLAY,
|
|
||||||
} from '../../helpers/constants/design-system';
|
|
||||||
|
|
||||||
import Box from '../../components/ui/box';
|
|
||||||
import {
|
|
||||||
Label,
|
|
||||||
BannerAlert,
|
BannerAlert,
|
||||||
Button,
|
Button,
|
||||||
TextField,
|
|
||||||
HelpText,
|
HelpText,
|
||||||
HelpTextSeverity,
|
HelpTextSeverity,
|
||||||
BUTTON_VARIANT,
|
Label,
|
||||||
TEXT_FIELD_SIZES,
|
TEXT_FIELD_SIZES,
|
||||||
TEXT_FIELD_TYPES,
|
TEXT_FIELD_TYPES,
|
||||||
BUTTON_SIZES,
|
|
||||||
Text,
|
Text,
|
||||||
|
TextField,
|
||||||
} from '../../components/component-library';
|
} from '../../components/component-library';
|
||||||
import { useI18nContext } from '../../hooks/useI18nContext';
|
import Box from '../../components/ui/box';
|
||||||
|
import ExportTextContainer from '../../components/ui/export-text-container';
|
||||||
|
import { Tab, Tabs } from '../../components/ui/tabs';
|
||||||
import { MetaMetricsContext } from '../../contexts/metametrics';
|
import { MetaMetricsContext } from '../../contexts/metametrics';
|
||||||
|
import { getMostRecentOverviewPage } from '../../ducks/history/history';
|
||||||
|
import {
|
||||||
|
AlignItems,
|
||||||
|
BlockSize,
|
||||||
|
Display,
|
||||||
|
JustifyContent,
|
||||||
|
Severity,
|
||||||
|
Size,
|
||||||
|
TextVariant,
|
||||||
|
} from '../../helpers/constants/design-system';
|
||||||
import ZENDESK_URLS from '../../helpers/constants/zendesk-url';
|
import ZENDESK_URLS from '../../helpers/constants/zendesk-url';
|
||||||
import { Tabs, Tab } from '../../components/ui/tabs';
|
import { useI18nContext } from '../../hooks/useI18nContext';
|
||||||
|
import { requestRevealSeedWords } from '../../store/actions';
|
||||||
|
|
||||||
const PASSWORD_PROMPT_SCREEN = 'PASSWORD_PROMPT_SCREEN';
|
const PASSWORD_PROMPT_SCREEN = 'PASSWORD_PROMPT_SCREEN';
|
||||||
const REVEAL_SEED_SCREEN = 'REVEAL_SEED_SCREEN';
|
const REVEAL_SEED_SCREEN = 'REVEAL_SEED_SCREEN';
|
||||||
|
|
||||||
const RevealSeedPage = () => {
|
export default function RevealSeedPage() {
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const t = useI18nContext();
|
const t = useI18nContext();
|
||||||
@ -54,6 +54,7 @@ const RevealSeedPage = () => {
|
|||||||
const [completedLongPress, setCompletedLongPress] = useState(false);
|
const [completedLongPress, setCompletedLongPress] = useState(false);
|
||||||
const [error, setError] = useState(null);
|
const [error, setError] = useState(null);
|
||||||
const mostRecentOverviewPage = useSelector(getMostRecentOverviewPage);
|
const mostRecentOverviewPage = useSelector(getMostRecentOverviewPage);
|
||||||
|
const [isShowingHoldModal, setIsShowingHoldModal] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const passwordBox = document.getElementById('password-box');
|
const passwordBox = document.getElementById('password-box');
|
||||||
@ -85,16 +86,7 @@ const RevealSeedPage = () => {
|
|||||||
});
|
});
|
||||||
setSeedWords(revealedSeedWords);
|
setSeedWords(revealedSeedWords);
|
||||||
|
|
||||||
dispatch(
|
setIsShowingHoldModal(true);
|
||||||
showModal({
|
|
||||||
name: 'HOLD_TO_REVEAL_SRP',
|
|
||||||
onLongPressed: () => {
|
|
||||||
setCompletedLongPress(true);
|
|
||||||
setScreen(REVEAL_SEED_SCREEN);
|
|
||||||
},
|
|
||||||
holdToRevealType: 'SRP',
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
trackEvent({
|
trackEvent({
|
||||||
@ -111,7 +103,7 @@ const RevealSeedPage = () => {
|
|||||||
|
|
||||||
const renderWarning = () => {
|
const renderWarning = () => {
|
||||||
return (
|
return (
|
||||||
<BannerAlert severity={SEVERITIES.DANGER}>
|
<BannerAlert severity={Severity.Danger}>
|
||||||
<Text variant={TextVariant.bodyMd}>
|
<Text variant={TextVariant.bodyMd}>
|
||||||
{t('revealSeedWordsWarning', [
|
{t('revealSeedWordsWarning', [
|
||||||
<Text
|
<Text
|
||||||
@ -142,7 +134,7 @@ const RevealSeedPage = () => {
|
|||||||
value={password}
|
value={password}
|
||||||
onChange={(event) => setPassword(event.target.value)}
|
onChange={(event) => setPassword(event.target.value)}
|
||||||
error={error}
|
error={error}
|
||||||
width={BLOCK_SIZES.FULL}
|
width={BlockSize.Full}
|
||||||
/>
|
/>
|
||||||
{error && (
|
{error && (
|
||||||
<HelpText severity={HelpTextSeverity.Danger}>{error}</HelpText>
|
<HelpText severity={HelpTextSeverity.Danger}>{error}</HelpText>
|
||||||
@ -221,7 +213,7 @@ const RevealSeedPage = () => {
|
|||||||
tabKey="qr-srp"
|
tabKey="qr-srp"
|
||||||
>
|
>
|
||||||
<Box
|
<Box
|
||||||
display={DISPLAY.FLEX}
|
display={Display.Flex}
|
||||||
justifyContent={JustifyContent.center}
|
justifyContent={JustifyContent.center}
|
||||||
alignItems={AlignItems.center}
|
alignItems={AlignItems.center}
|
||||||
paddingTop={4}
|
paddingTop={4}
|
||||||
@ -241,9 +233,9 @@ const RevealSeedPage = () => {
|
|||||||
|
|
||||||
const renderPasswordPromptFooter = () => {
|
const renderPasswordPromptFooter = () => {
|
||||||
return (
|
return (
|
||||||
<Box display={DISPLAY.FLEX} marginTop="auto" gap={4}>
|
<Box display={Display.Flex} marginTop="auto" gap={4}>
|
||||||
<Button
|
<Button
|
||||||
width={BLOCK_SIZES.FULL}
|
width={BlockSize.Full}
|
||||||
size={Size.LG}
|
size={Size.LG}
|
||||||
variant={BUTTON_VARIANT.SECONDARY}
|
variant={BUTTON_VARIANT.SECONDARY}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
@ -267,7 +259,7 @@ const RevealSeedPage = () => {
|
|||||||
{t('cancel')}
|
{t('cancel')}
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
width={BLOCK_SIZES.FULL}
|
width={BlockSize.Full}
|
||||||
size={Size.LG}
|
size={Size.LG}
|
||||||
onClick={(event) => {
|
onClick={(event) => {
|
||||||
trackEvent({
|
trackEvent({
|
||||||
@ -299,7 +291,7 @@ const RevealSeedPage = () => {
|
|||||||
<Box marginTop="auto">
|
<Box marginTop="auto">
|
||||||
<Button
|
<Button
|
||||||
variant={BUTTON_VARIANT.SECONDARY}
|
variant={BUTTON_VARIANT.SECONDARY}
|
||||||
width={BLOCK_SIZES.FULL}
|
width={BlockSize.Full}
|
||||||
size={Size.LG}
|
size={Size.LG}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
trackEvent({
|
trackEvent({
|
||||||
@ -380,8 +372,25 @@ const RevealSeedPage = () => {
|
|||||||
{renderWarning()}
|
{renderWarning()}
|
||||||
{renderContent()}
|
{renderContent()}
|
||||||
{renderFooter()}
|
{renderFooter()}
|
||||||
|
<HoldToRevealModal
|
||||||
|
isOpen={isShowingHoldModal}
|
||||||
|
onClose={() => {
|
||||||
|
trackEvent({
|
||||||
|
category: MetaMetricsEventCategory.Keys,
|
||||||
|
event: MetaMetricsEventName.SrpHoldToRevealCloseClicked,
|
||||||
|
properties: {
|
||||||
|
key_type: MetaMetricsEventKeyType.Srp,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
setIsShowingHoldModal(false);
|
||||||
|
}}
|
||||||
|
onLongPressed={() => {
|
||||||
|
setCompletedLongPress(true);
|
||||||
|
setIsShowingHoldModal(false);
|
||||||
|
setScreen(REVEAL_SEED_SCREEN);
|
||||||
|
}}
|
||||||
|
holdToRevealType="SRP"
|
||||||
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
};
|
}
|
||||||
|
|
||||||
export default RevealSeedPage;
|
|
||||||
|
@ -1402,15 +1402,17 @@ describe('Actions', () => {
|
|||||||
const expectedActions = [
|
const expectedActions = [
|
||||||
{ type: 'SHOW_LOADING_INDICATION', payload: undefined },
|
{ type: 'SHOW_LOADING_INDICATION', payload: undefined },
|
||||||
{ type: 'HIDE_LOADING_INDICATION' },
|
{ type: 'HIDE_LOADING_INDICATION' },
|
||||||
{
|
|
||||||
type: 'SHOW_PRIVATE_KEY',
|
|
||||||
payload: testPrivKey,
|
|
||||||
},
|
|
||||||
];
|
];
|
||||||
|
|
||||||
await store.dispatch(
|
await store.dispatch(
|
||||||
actions.exportAccount('a-test-password', '0xAddress'),
|
actions.exportAccount(
|
||||||
|
'a-test-password',
|
||||||
|
'0xAddress',
|
||||||
|
jest.fn(),
|
||||||
|
jest.fn(),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(verifyPasswordStub.callCount).toStrictEqual(1);
|
expect(verifyPasswordStub.callCount).toStrictEqual(1);
|
||||||
expect(exportAccountStub.callCount).toStrictEqual(1);
|
expect(exportAccountStub.callCount).toStrictEqual(1);
|
||||||
expect(store.getActions()).toStrictEqual(expectedActions);
|
expect(store.getActions()).toStrictEqual(expectedActions);
|
||||||
|
@ -2564,6 +2564,8 @@ export function hideWarning() {
|
|||||||
export function exportAccount(
|
export function exportAccount(
|
||||||
password: string,
|
password: string,
|
||||||
address: string,
|
address: string,
|
||||||
|
setPrivateKey: (key: string) => void,
|
||||||
|
setShowHoldToReveal: (show: boolean) => void,
|
||||||
): ThunkAction<void, MetaMaskReduxState, unknown, AnyAction> {
|
): ThunkAction<void, MetaMaskReduxState, unknown, AnyAction> {
|
||||||
return function (dispatch) {
|
return function (dispatch) {
|
||||||
dispatch(showLoadingIndication());
|
dispatch(showLoadingIndication());
|
||||||
@ -2592,7 +2594,8 @@ export function exportAccount(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
dispatch(showPrivateKey(result as string));
|
setPrivateKey(result as string);
|
||||||
|
setShowHoldToReveal(true);
|
||||||
resolve(result as string);
|
resolve(result as string);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user