Merge remote-tracking branch 'origin/develop' into sync-master

* origin/develop:
  Updating references to MetaMask support (#10563)
  Remove dead code related to the selectedFromToken variable in swaps/index.js (#10570)
  make lavamoat optional for dev mode (#10538)
  Adding a warning when sending a token to its own contract address (#10546)
  handle undefined network (#10560)
  cache balances by chain id (#10545)
  Fix/handle safe low undefined (#10561)
  Remove unused `hasHexData` prop (#10529)
  Resolving pull-ws to v3.3.2 (#10543)
  Sync `master` with `develop` (#10540)
feature/default_network_editable
Mark Stacey 4 years ago
commit 6c72b55b11
  1. 12
      app/_locales/am/messages.json
  2. 12
      app/_locales/ar/messages.json
  3. 12
      app/_locales/bg/messages.json
  4. 12
      app/_locales/bn/messages.json
  5. 12
      app/_locales/ca/messages.json
  6. 12
      app/_locales/da/messages.json
  7. 12
      app/_locales/de/messages.json
  8. 12
      app/_locales/el/messages.json
  9. 23
      app/_locales/en/messages.json
  10. 20
      app/_locales/es/messages.json
  11. 20
      app/_locales/es_419/messages.json
  12. 12
      app/_locales/et/messages.json
  13. 12
      app/_locales/fa/messages.json
  14. 12
      app/_locales/fi/messages.json
  15. 12
      app/_locales/fil/messages.json
  16. 12
      app/_locales/fr/messages.json
  17. 12
      app/_locales/he/messages.json
  18. 20
      app/_locales/hi/messages.json
  19. 12
      app/_locales/hr/messages.json
  20. 12
      app/_locales/hu/messages.json
  21. 20
      app/_locales/id/messages.json
  22. 20
      app/_locales/it/messages.json
  23. 20
      app/_locales/ja/messages.json
  24. 12
      app/_locales/kn/messages.json
  25. 20
      app/_locales/ko/messages.json
  26. 12
      app/_locales/lt/messages.json
  27. 12
      app/_locales/lv/messages.json
  28. 12
      app/_locales/ms/messages.json
  29. 12
      app/_locales/no/messages.json
  30. 12
      app/_locales/pl/messages.json
  31. 12
      app/_locales/pt_BR/messages.json
  32. 12
      app/_locales/ro/messages.json
  33. 20
      app/_locales/ru/messages.json
  34. 12
      app/_locales/sk/messages.json
  35. 12
      app/_locales/sl/messages.json
  36. 12
      app/_locales/sr/messages.json
  37. 12
      app/_locales/sv/messages.json
  38. 12
      app/_locales/sw/messages.json
  39. 20
      app/_locales/tl/messages.json
  40. 12
      app/_locales/uk/messages.json
  41. 20
      app/_locales/vi/messages.json
  42. 20
      app/_locales/zh_CN/messages.json
  43. 12
      app/_locales/zh_TW/messages.json
  44. 22
      app/scripts/controllers/cached-balances.js
  45. 2
      app/scripts/metamask-controller.js
  46. 6
      package.json
  47. 17
      test/unit/app/controllers/cached-balances-test.js
  48. 9
      ui/app/components/app/alerts/unconnected-account-alert/tests/unconnected-account-alert.test.js
  49. 7
      ui/app/helpers/utils/util.js
  50. 32
      ui/app/helpers/utils/util.test.js
  51. 17
      ui/app/pages/error/error.component.js
  52. 4
      ui/app/pages/error/index.scss
  53. 1
      ui/app/pages/first-time-flow/create-password/unique-image/index.js
  54. 49
      ui/app/pages/first-time-flow/create-password/unique-image/unique-image.component.js
  55. 12
      ui/app/pages/first-time-flow/create-password/unique-image/unique-image.container.js
  56. 14
      ui/app/pages/first-time-flow/end-of-flow/end-of-flow.component.js
  57. 4
      ui/app/pages/first-time-flow/index.scss
  58. 12
      ui/app/pages/send/send-content/add-recipient/add-recipient.js
  59. 19
      ui/app/pages/send/send-content/add-recipient/tests/add-recipient-utils.test.js
  60. 15
      ui/app/pages/send/send-content/send-content.component.js
  61. 35
      ui/app/pages/send/send.component.js
  62. 2
      ui/app/pages/send/send.constants.js
  63. 2
      ui/app/pages/send/send.container.js
  64. 22
      ui/app/pages/swaps/index.js
  65. 11
      ui/app/selectors/selectors.js
  66. 4
      ui/app/selectors/tests/permissions.test.js
  67. 10
      yarn.lock

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "የዘር ሐረግዎን በድጋሚ መጠባበቂያ ለመያዝ ከፈለጉ፣ በቅንብሮች -> ግላዊነት ውስጥ ሊያገኙት ይችላሉ።"
},
"endOfFlowMessage7": {
"message": "ጥያቄዎች ካሉዎት ወይም የሆነ አጠራጣሪ ነገር ካዩ፣ እባክዎ ለ support@metamask.io ኢሜይል ይላኩ።"
},
"endOfFlowMessage8": {
"message": "MetaMask የዘር ሐረግዎን መልሶ ማግኘት አልቻለም። ተጨማሪ መረጃ ያግኙ።"
},
@ -772,15 +769,6 @@
"privateNetwork": {
"message": "የግል አውታረ መረብ"
},
"protectYourKeys": {
"message": "ቁልፎችዎን ይጠብቁ!"
},
"protectYourKeysMessage1": {
"message": "ስለ ዘር ሐረግዎ ይጠንቀቁ - ራሳቸውን ከ MetaMask ጋር ለማመሳሰል የሚሞከሩ ድረ ገጾች እናሉ ሰምተናል። MetaMask በጭራሽ የዘር ሐረግዎን አይጠይቅዎትም!"
},
"protectYourKeysMessage2": {
"message": "የሐረግዎን ደህንነት ይጠብቁ። ይም የሆነ አጠራጣሪ ነገር ካዩ ወይም ስለ አንድ ድረ ገጽ እርግጠኛ ካልሆኑ፣ እባክዎ ለ support@metamask.io ኢሜይል ይላኩ"
},
"queue": {
"message": "ወረፋ"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "إذا كنت بحاجة إلى عمل نسخة احتياطية من عبارة الأمان الخاصة بك مرة أخرى، يمكنك العثور عليها في الإعدادات -> الأمان."
},
"endOfFlowMessage7": {
"message": "إذا كانت لديك أسئلة أو ترى شيئاً ما مريباً، فأرسل بريداً إلكترونياً إلى support@metamask.io."
},
"endOfFlowMessage8": {
"message": "لا يمكن لـ MetaMask استعادة جملتك البذرية. تعلم المزيد."
},
@ -768,15 +765,6 @@
"privateNetwork": {
"message": "شبكة خاصة"
},
"protectYourKeys": {
"message": "احمِ مفاتيحك!"
},
"protectYourKeysMessage1": {
"message": "كن حذراً بشأن عبارة الأمان الخاصة بك - فهناك بلاغات عن مواقع ويب تحاول تقليد MetaMask. لن تسأل MetaMask عن عبارة الأمان الخاصة بك أبداً!"
},
"protectYourKeysMessage2": {
"message": "أبقِ عبارة الأمان الخاصة بك بأمان. إذا رأيت شيئاً مريباً، أو كنت غير متأكد من موقع ويب ما، أرسل بريداً إلكترونياً إلى support@metamask.io"
},
"queue": {
"message": "اللائحة"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "Ако отново трябва да архивирате основната си фраза, можете да я намерите в Настройки -> Защита."
},
"endOfFlowMessage7": {
"message": "Ако имате въпроси или забележите нещо съмнително, изпратете имейл на support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask не може да възстанови ключовата Ви фраза. Научете повече."
},
@ -771,15 +768,6 @@
"privateNetwork": {
"message": "Частна мрежа"
},
"protectYourKeys": {
"message": "Защитете ключовете си!"
},
"protectYourKeysMessage1": {
"message": "Внимавайте с вашата фраза - има съобщения за уебсайтове, които се опитват да имитират MetaMask. MetaMask никога няма да поиска вашата фраза-зародиш!"
},
"protectYourKeysMessage2": {
"message": "Пазете фразата си. Ако забележите нещо съмнително или не сте сигурни за даден уебсайт, изпратете имейл на support@metamask.io"
},
"queue": {
"message": "Опашка"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "আপন আপনর সড আবর বকআপ করত হল, আপনিিিস -> নিপতয় পন।"
},
"endOfFlowMessage7": {
"message": "আপনর কখনও করশন থকল সনহজনক কিখল, support@metamask.io ঠিয় ইমল করন।"
},
"endOfFlowMessage8": {
"message": "MetaMask আপনর সডফজ পনরর করতরব। আরও জন।"
},
@ -775,15 +772,6 @@
"privateNetwork": {
"message": "বযকিগত নটওয়ক"
},
"protectYourKeys": {
"message": "আপনর কিরকিত করন!"
},
"protectYourKeysMessage1": {
"message": "আপনর সড ফজ বিষয়বধন থন — এমন ওয়বসইটগির রিট পওয়ি MetaMask ক অনকরণ করর চ কর। MetaMask কখনও আপনর সড ফজ জি করব।"
},
"protectYourKeysMessage2": {
"message": "আপনর ফজটিিপদন।সনহজনক কিখল, ব একটি ওয়বসইট সমপরিিত ন হল, support@metamask.io এ ইমল করন"
},
"queue": {
"message": "অপষমণ"
},

@ -347,9 +347,6 @@
"endOfFlowMessage6": {
"message": "Si necessites fer una còpia de seguretat de la teva frase de recuperació una altra vegada, la pots trobar a Configuració-> Seguretat."
},
"endOfFlowMessage7": {
"message": "Si mai tens preguntes o veus alguna cosa sospitosa, envia un correu a support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask no pot recuperar la teva seedphrase. Descobreix per què."
},
@ -756,15 +753,6 @@
"privateNetwork": {
"message": "Xarxa privada"
},
"protectYourKeys": {
"message": "Protegeix les Teves Claus!"
},
"protectYourKeysMessage1": {
"message": "Vigila amb la teva frase de recuperació —s'han documentat casos de llocs web que intenten imitar MetaMask. MetaMask mai no et demanarà la frase de recuperació!"
},
"protectYourKeysMessage2": {
"message": "Mantingues segura la teva frase. Si veus alguna cosa sospitosa, o no estàs segur d'un lloc web, envia un correu a support@metamask.io"
},
"queue": {
"message": "Cua"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "Hvis du får brug for at lave en backup af din seedfrase igen, kan du finde det under Indstillinger -> Sikkerhed."
},
"endOfFlowMessage7": {
"message": "Hvis du har spørgsmål eller bemærker noget mistænkeligt, send en mail til support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask kan ikke gendanne din seed-sætning. Få mere at vide."
},
@ -756,15 +753,6 @@
"privateNetwork": {
"message": "Privat netværk"
},
"protectYourKeys": {
"message": "Beskyt dine nøgler!"
},
"protectYourKeysMessage1": {
"message": "Vær forsigtig med din backupsætning - der har været rapporter om websteder, der forsøger at efterligne MetaMask. MetaMask vil aldrig bede om din backupsætning!"
},
"protectYourKeysMessage2": {
"message": "Opbevar din frase et sikkert sted. Hvis du ser noget mistænkeligt, eller du er usikker på hjemmesiden, skriv en email til support@metamask.io"
},
"queue": {
"message": "Kø"
},

@ -338,9 +338,6 @@
"endOfFlowMessage6": {
"message": "Wenn Sie Ihre mnemonische Phrase erneut sicherstellen müssen, finden Sie sie unter Einstellungen -> Sicherheit."
},
"endOfFlowMessage7": {
"message": "Wenn Sie Fragen haben sollten oder etwas Suspektes bemerken, schreiben Sie eine E-Mail an support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask kann Ihren Seedschlüssel nicht wiederherstellen. Erfahren Sie mehr."
},
@ -744,15 +741,6 @@
"privateNetwork": {
"message": "Privates Netzwerk"
},
"protectYourKeys": {
"message": "Schützen Sie Ihre Schlüssel!"
},
"protectYourKeysMessage1": {
"message": "Seien Sie mit Ihrer mnemonischen Phrase vorsichtig - es gab Berichte über Websites, die MetaMask zu imitieren versuchen. MetaMask fragt nie nach Ihrer mnemonischen Phrase!"
},
"protectYourKeysMessage2": {
"message": "Bewahren Sie Ihren Schlüssel sicher auf. Wenn etwas faul zu sein scheint oder Sie Zweifel wegen einer Website haben, schicken Sie eine E-Mail an support@metamask.io"
},
"queue": {
"message": "Warteschlange"
},

@ -347,9 +347,6 @@
"endOfFlowMessage6": {
"message": "Αν χρειάζεται να δημιουργήσετε ξανά αντίγραφο της φράσης επαναφοράς σας, μπορείτε να την βρείτε στη Ρυθμίσεις -> Ασφάλεια."
},
"endOfFlowMessage7": {
"message": "Εάν έχετε οποιαδήποτε ερώτηση ή αντιληφθείτε κάτι ύποπτο στείλτε μας email στο support@metamask.io."
},
"endOfFlowMessage8": {
"message": "Το MetaMask δεν μπορεί να ανακτήσει τη φράση φύτρου σας. Μάθετε περισσότερα."
},
@ -772,15 +769,6 @@
"privateNetwork": {
"message": "Ιδιωτικό Δίκτυο"
},
"protectYourKeys": {
"message": "Προστατεύστε τα Κλειδιά Σας!"
},
"protectYourKeysMessage1": {
"message": "Να προσέχετε με τη φάση σπόρου. Υπάρχουν αναφορές για ιστότοπους που προσπαθούν να προσποιηθούν ότι είναι το MetaTask. Το MetaTask δεν θα σας ρωτήσει ποτέ για τη φάση σπόρου!"
},
"protectYourKeysMessage2": {
"message": "Κρατήστε τη φράση σας ασφαλή. Αν δείτε κάτι ύποπτο ή δεν είστε βέβαιοι για έναν ιστότοπο, στείλτε ένα email στο support@metamask.io"
},
"queue": {
"message": "Ουρά"
},

@ -405,6 +405,9 @@
"continueToWyre": {
"message": "Continue to Wyre"
},
"contractAddressError": {
"message": "You are sending tokens to the token's contract address. This may result in the loss of these tokens."
},
"contractDeployment": {
"message": "Contract Deployment"
},
@ -607,7 +610,8 @@
"message": "If you need to back up your seed phrase again, you can find it in Settings -> Security."
},
"endOfFlowMessage7": {
"message": "If you ever have questions or see something fishy, email support@metamask.io."
"message": "If you ever have questions or see something fishy, contact our support $1.",
"description": "$1 is a clickable link with text defined by the 'here' key. The link will open to a form where users can file support tickets."
},
"endOfFlowMessage8": {
"message": "MetaMask cannot recover your seedphrase."
@ -654,12 +658,12 @@
"description": "Displayed error name for debugging purposes. $1 is the error name"
},
"errorPageMessage": {
"message": "Try again by reloading the page, or contact support at support@metamask.io",
"description": "Message displayed on generic error page in the fullscreen or notification UI"
"message": "Try again by reloading the page, or contact support $1.",
"description": "Message displayed on generic error page in the fullscreen or notification UI, $1 is a clickable link with text defined by the 'here' key. The link will open to a form where users can file support tickets."
},
"errorPagePopupMessage": {
"message": "Try again by closing and reopening the popup, or contact support at support@metamask.io",
"description": "Message displayed on generic error page in the popup UI"
"message": "Try again by closing and reopening the popup, or contact support $1.",
"description": "Message displayed on generic error page in the popup UI, $1 is a clickable link with text defined by the 'here' key. The link will open to a form where users can file support tickets."
},
"errorPageTitle": {
"message": "MetaMask encountered an error",
@ -1289,15 +1293,6 @@
"proposedApprovalLimit": {
"message": "Proposed Approval Limit"
},
"protectYourKeys": {
"message": "Protect Your Keys!"
},
"protectYourKeysMessage1": {
"message": "Be careful with your seed phrase — there have been reports of websites that attempt to imitate MetaMask. MetaMask will never ask for your seed phrase!"
},
"protectYourKeysMessage2": {
"message": "Keep your phrase safe. If you see something fishy, or you’re uncertain about a website, email support@metamask.io"
},
"provide": {
"message": "Provide"
},

@ -562,9 +562,6 @@
"endOfFlowMessage6": {
"message": "Si necesita hacer una copia de seguridad de su frase semilla nuevamente, puede encontrarla en Configuración -> Seguridad."
},
"endOfFlowMessage7": {
"message": "Si alguna vez tiene preguntas o ve algo sospechoso, envíe un correo electrónico a support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask no puede recuperar tu frase semilla. Saber más."
},
@ -609,14 +606,6 @@
"message": "Código: $1",
"description": "Displayed error name for debugging purposes. $1 is the error name"
},
"errorPageMessage": {
"message": "Vuelva a intentarlo recargando la página o póngase en contacto con el soporte en support@metamask.io",
"description": "Message displayed on generic error page in the fullscreen or notification UI"
},
"errorPagePopupMessage": {
"message": "Vuelva a intentarlo cerrando y volviendo a abrir la ventana emergente, o comuníquese con el soporte en support@metamask.io",
"description": "Message displayed on generic error page in the popup UI"
},
"errorPageTitle": {
"message": "MetaMask encontró un error",
"description": "Title of generic error page"
@ -1222,15 +1211,6 @@
"proposedApprovalLimit": {
"message": "Límite de aprobación propuesto"
},
"protectYourKeys": {
"message": "¡Proteja sus llaves!"
},
"protectYourKeysMessage1": {
"message": "Tenga cuidado con su frase semilla — ha habido informes de sitios web que intentan imitar MetaMask. ¡MetaMask nunca le pedirá su frase semilla!"
},
"protectYourKeysMessage2": {
"message": "Mantenga su frase a salvo. Si ve algo sospechoso o no está seguro acerca de un sitio web, envíe un correo electrónico a support@metamask.io"
},
"provide": {
"message": "Proveer"
},

@ -562,9 +562,6 @@
"endOfFlowMessage6": {
"message": "Si necesitas otro respaldo de tu frase semilla, puedes encontrarla en Configuración -> Seguridad."
},
"endOfFlowMessage7": {
"message": "Si tienes preguntas o ves algo sospechoso, envía un correo electrónico a support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask no puede recuperar tu frase semilla. Obtén más información."
},
@ -609,14 +606,6 @@
"message": "Código: $1",
"description": "Displayed error name for debugging purposes. $1 is the error name"
},
"errorPageMessage": {
"message": "Vuelva a intentarlo recargando la página o póngase en contacto con el soporte en support@metamask.io",
"description": "Message displayed on generic error page in the fullscreen or notification UI"
},
"errorPagePopupMessage": {
"message": "Vuelva a intentarlo cerrando y volviendo a abrir la ventana emergente, o comuníquese con el soporte en support@metamask.io",
"description": "Message displayed on generic error page in the popup UI"
},
"errorPageTitle": {
"message": "MetaMask encontró un error",
"description": "Title of generic error page"
@ -1222,15 +1211,6 @@
"proposedApprovalLimit": {
"message": "Límite de aprobación propuesto"
},
"protectYourKeys": {
"message": "¡Protege tus claves!"
},
"protectYourKeysMessage1": {
"message": "Ten cuidado con tu frase semilla — hay informes sobre sitios web que intentan hacerse pasar por MetaMask. ¡MetaMask no te pedirá nunca tu frase semilla!"
},
"protectYourKeysMessage2": {
"message": "Mantén tu frase segura. Si notas algo raro o si no está seguro sobre si usar algún sitio web en específico, envíanos un correo electrónico a support@metamask.io"
},
"provide": {
"message": "Proveer"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "Kui peate oma seemnefraasi uuesti varundama, leiate selle valikust Settings (Seaded) -> Security (Turvalisus)."
},
"endOfFlowMessage7": {
"message": "Kui teil on küsimusi või näete midagi kahtlast, kirjutage meile support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask ei saa teie seemnefraasi taastada. Lisateave."
},
@ -765,15 +762,6 @@
"privateNetwork": {
"message": "Privaatvõrk"
},
"protectYourKeys": {
"message": "Kaitske oma võtmeid!"
},
"protectYourKeysMessage1": {
"message": "Kaitske oma seemnefraasi. Meid on teavitatud veebilehtedest, mis püüavad MetaMaski jäljendada. MetaMask ei küsi teilt kunagi teie seemnefraasi!"
},
"protectYourKeysMessage2": {
"message": "Kaitske oma seemnefraasi. Kui näete midagi kahtlast või pole veebilehe ehtsuses kindel, saatke e-kiri aadressile support@metamask.io"
},
"queue": {
"message": "Järjekord"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "در صورتیکه شما نیاز به گرفتن دوباره پشتیبان عبارت بازیاب داشته باشید، میتوانید آنرا در Settings -> Security دریافت نمایید."
},
"endOfFlowMessage7": {
"message": "در صورتیکه پرسشی داشته یا چیزی مشکوک را میبینید، به support@metamask.io ایمیل کنید."
},
"endOfFlowMessage8": {
"message": "MetaMask نمیتواند عبارت بازیاب تان را دوباره دریافت نماید.\nبیشتر بدانید."
},
@ -775,15 +772,6 @@
"privateNetwork": {
"message": "شبکه شخصی"
},
"protectYourKeys": {
"message": "کلید های خود را حفظ کنید!"
},
"protectYourKeysMessage1": {
"message": "مراقب عبارت بازیاب تان باشید - گفته هایی وجود دارد که وبسایت ها تلاش میکنند تا از MetaMask نسخه برداری کنند. MetaMask هرگز از شما عبارت بازیاب را نمیپرسد!"
},
"protectYourKeysMessage2": {
"message": "عبارت تان را مصؤن نگهدارید. در صورت مشاهده چیز مشکوک، یا در صورتیکه در مورد یک وبسایت مطمئن نیستید، به support@metamask.io ایمیل کنید"
},
"queue": {
"message": "صف"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "Jos tarvitse uuden varmuuskopion juurilauseestasi, niin se löytyy osiosta Asetukset -> Turvallisuus."
},
"endOfFlowMessage7": {
"message": "Jos sinulla on joskus jotakin kysyttävää tai jos näet jotakin epäilyttävää, lähetä sähköpostia osoitteeseen support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask ei pysty palauttamaan salaustekstiäsi. Lue lisää."
},
@ -772,15 +769,6 @@
"privateNetwork": {
"message": "Yksityinen verkko"
},
"protectYourKeys": {
"message": "Suojele avaimiasi!"
},
"protectYourKeysMessage1": {
"message": "Ole varovainen salausavaimesi kanssa – joidenkin verkkosivustojen kerrotaan yrittäneen matkia MetaMaskia. MetaMask ei koskaan kysy salausavaintasi!"
},
"protectYourKeysMessage2": {
"message": "Pidä lauseesi tallessa. Jos näet jotain epäilyttävää tai et ole varma jostain sivustosta, lähetä sähköpostia osoitteeseen support@metamask.io"
},
"queue": {
"message": "Jono"
},

@ -326,9 +326,6 @@
"endOfFlowMessage6": {
"message": "Kung kailangan mong i-back up ulit ang iyong seed phrase, makikita mo ito sa Mga Setting -> Seguridad."
},
"endOfFlowMessage7": {
"message": "Kung may mga tanong ka o nakakita ka ng kahina-hinalang bagay, i-email ang support@metamask.io."
},
"endOfFlowMessage8": {
"message": "Hindi ma-recover ng MetaMask ang iyong seedphrase. Alamin pa."
},
@ -699,15 +696,6 @@
"privateNetwork": {
"message": "Pribadong Network"
},
"protectYourKeys": {
"message": "Protektahan Ang Iyong Mga Key!"
},
"protectYourKeysMessage1": {
"message": "Mag-ingat sa iyong seed phrase — may mga ulat na may mga website na nagpapanggap bilang MetaMask. Hindi kailanman hihilingin ng MetaMask ang iyong seed phrase!"
},
"protectYourKeysMessage2": {
"message": "Panatilihing ligtas ang iyong parirala. Kung may makikita kang kahina-hinala, o hindi ka sigurado tungkol sa isang website, mag-email sa support@metamask.io"
},
"queue": {
"message": "I-queue"
},

@ -341,9 +341,6 @@
"endOfFlowMessage6": {
"message": "Si vous avez besoin de sauvegarder à nouveau votre phrase de départ, vous pouvez la trouver dans Paramètres -> Sécurité."
},
"endOfFlowMessage7": {
"message": "Si vous avez des questions ou remarquez quelque chose de suspect, envoyez un e-mail à : support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask ne peut pas récupérer votre phrase de départ. Renseignez-vous davantage."
},
@ -757,15 +754,6 @@
"privateNetwork": {
"message": "Réseau privé"
},
"protectYourKeys": {
"message": "Protégez vos clés !"
},
"protectYourKeysMessage1": {
"message": "Soyez prudent avec votre phrase mnémotechnique — on nous a signalé des sites web qui tentaient d'imiter MetaMask. MetaMask ne vous demandera jamais votre phrase mnémotechnique !"
},
"protectYourKeysMessage2": {
"message": "Ne dévoilez pas votre phrase. Si vous remarquez quelque chose de suspect ou que vous avez un doute à propos d'un site web, envoyez un e-mail à : support@metamask.io"
},
"queue": {
"message": "File d'attente"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "אם עליך לגבות את צירוף הגרעין שלך שוב, תוכל/י למצוא זאת בהגדרות -> אבטחה."
},
"endOfFlowMessage7": {
"message": "אם יש לך שאלות או שנתקלת במשהו חשוד, שלח/י מייל ל- support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask לא הצליח לשחזר את ה-seedphrase שלך. למד/י עוד."
},
@ -772,15 +769,6 @@
"privateNetwork": {
"message": "רשת פרטית"
},
"protectYourKeys": {
"message": "הגנ/י על המפתחות שלך!"
},
"protectYourKeysMessage1": {
"message": "יש לנקוט זהירות בנוגע לצירוף הגרעין שלך - היו דיווחים על אתרים שמנסים להתחזות ל-MetaMask .MetaMask לעולם לא תבקש את צירוף הגרעין שלך!"
},
"protectYourKeysMessage2": {
"message": "יש לשמור את ה-seedphrase שלך במקום בטוח. אם את/ה רואה משהו חשוד, או שאינך בטוח/ה בנוע לאתר, שלח/י אימייל לכתובת support@metamask.io"
},
"queue": {
"message": "תור"
},

@ -553,9 +553,6 @@
"endOfFlowMessage6": {
"message": "यदि आपक अपनड फिर सकअप ल आवशयकत, त आप इसिस -> सरक सकत।"
},
"endOfFlowMessage7": {
"message": "यदि आपक कभछ पछनछ गडबड लग, त support@metamask.io पर ईमल कर।"
},
"endOfFlowMessage8": {
"message": "MetaMask आपकडफनरत नह कर सकत।"
},
@ -600,14 +597,6 @@
"message": "कड: $1",
"description": "Displayed error name for debugging purposes. $1 is the error name"
},
"errorPageMessage": {
"message": "पठ कड करकरयस कर support@metamask.io पर सहयतपरक कर",
"description": "Message displayed on generic error page in the fullscreen or notification UI"
},
"errorPagePopupMessage": {
"message": "पपअप कद करक और फिर सलनिश कर support@metamask.io पर सहयतपरक कर",
"description": "Message displayed on generic error page in the popup UI"
},
"errorPageTitle": {
"message": "MetaMask मई तिई",
"description": "Title of generic error page"
@ -1213,15 +1202,6 @@
"proposedApprovalLimit": {
"message": "परसित अनदन स"
},
"protectYourKeys": {
"message": "अपनिरकित रख!"
},
"protectYourKeysMessage1": {
"message": "अपनडफकर सवधन रह — ऐसबसइटि आई ह, ज MetaMask क नकल करनरयस करत। MetaMask कभ आपकड फ नह!"
},
"protectYourKeysMessage2": {
"message": "अपनश करकित रख। यदि आपकछ गडबड लग आप किबसइट क अनिित ह, त support@metamask.io पर ईमल कर"
},
"provide": {
"message": "परदन कर"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "Ako trebate ponovno sigurnosno kopirati svoju početnu rečenicu, možete je pronaći unutar stavke Postavke --> Sigurnost."
},
"endOfFlowMessage7": {
"message": "Ako imate bilo kakvo pitanje ili vidite nešto što vam se čini sumnjivim, pošaljite nam elektroničku poruku na support@metamask.io."
},
"endOfFlowMessage8": {
"message": "Osoblje MetaMask ne može obnoviti vašu početnu rečenicu. Saznajte više."
},
@ -768,15 +765,6 @@
"privateNetwork": {
"message": "Privatna mreža"
},
"protectYourKeys": {
"message": "Zaštitite svoje ključeve!"
},
"protectYourKeysMessage1": {
"message": "Pazite na svoju početnu rečenicu jer smo zaprimili prijave o postojanju mrežnih mjesta koja oponašaju mrežno mjesto usluge MetaMask. Na mrežnom se mjestu MetaMask nikada ne traži vaša početna rečenica!"
},
"protectYourKeysMessage2": {
"message": "Zaštite svoju rečenicu. Ako vam se nešto čini sumnjivim ili nemate povjerenja u mrežno mjesto, pošaljite nam elektroničku poruku na support@metamask.io"
},
"queue": {
"message": "Red čekanja"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "Ha ismét biztonsági másolatot kell készítenie a seed mondatról, megtalálja azt a Beállítások -> Biztonság menüben."
},
"endOfFlowMessage7": {
"message": "Ha bármilyen kérdése van, vagy valami gyanús dolgot tapasztal, írjon a support@metamask.io címre."
},
"endOfFlowMessage8": {
"message": "A MetaMask nem tudta helyreállítani a seed mondatot. Tudjon meg többet."
},
@ -768,15 +765,6 @@
"privateNetwork": {
"message": "Magánhálózat"
},
"protectYourKeys": {
"message": "Védje kulcsait!"
},
"protectYourKeysMessage1": {
"message": "Vigyázzod a gyarapítási fázissal - olyan oldalakat jelentettek, amelyek a MetaMask-ot utánozzák. A MetaMask soha nem kéri el a gyarapítási fázisát."
},
"protectYourKeysMessage2": {
"message": "Őrizze biztonságos helyen a mondatot. Ha bármilyen gyanús dolgot tapasztal, vagy bizonytalan egy weboldalt illetően, írjon a support@metamask.io címre."
},
"queue": {
"message": "Nyomtatólista"
},

@ -553,9 +553,6 @@
"endOfFlowMessage6": {
"message": "Jika Anda perlu mencadangkan frasa pemulihan lagi, Anda dapat menemukannya di Pengaturan -> Keamanan."
},
"endOfFlowMessage7": {
"message": "Jika Anda memiliki pertanyaan atau melihat sesuatu yang mencurigakan hubungi lewat email ke support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask tidak dapat memulihkan frasa pemulihan Anda."
},
@ -600,14 +597,6 @@
"message": "Kode: $1",
"description": "Displayed error name for debugging purposes. $1 is the error name"
},
"errorPageMessage": {
"message": "Coba lagi dengan memuat kembali halaman, atau hubungi dukungan di support@metamask.io",
"description": "Message displayed on generic error page in the fullscreen or notification UI"
},
"errorPagePopupMessage": {
"message": "Coba lagi dengan menutup dan membuka kembali popup, atau hubungi dukungan di support@metamask.io",
"description": "Message displayed on generic error page in the popup UI"
},
"errorPageTitle": {
"message": "MetaMask menemukan kesalahan",
"description": "Title of generic error page"
@ -1213,15 +1202,6 @@
"proposedApprovalLimit": {
"message": "Batas Persetujuan yang Diajukan"
},
"protectYourKeys": {
"message": "Lindungi Kunci Anda!"
},
"protectYourKeysMessage1": {
"message": "Berhati-hatilah dengan frasa pemulihan Anda — ada laporan dari beberapa situs web yang mencoba membuat MetaMask imitasi. MetaMask tidak pernah meminta frasa pemulihan Anda!"
},
"protectYourKeysMessage2": {
"message": "Jaga frasa Anda tetap aman. Jika Anda melihat sesuatu yang mencurigakan, atau tidak yakin dengan satu situs web, hubungi lewat email di support@metamask.io"
},
"provide": {
"message": "Berikan"
},

@ -537,9 +537,6 @@
"endOfFlowMessage6": {
"message": "Se vorrai fare nuovamente un backup della frase, la puoi trovare in Impostazioni -> Sicurezza & Privacy."
},
"endOfFlowMessage7": {
"message": "Se hai delle domande o vedi delle attività sospette, manda una mail a support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask non può recuperare la tua frase seed. Impara di più."
},
@ -580,14 +577,6 @@
"message": "Codice: $1",
"description": "Displayed error name for debugging purposes. $1 is the error name"
},
"errorPageMessage": {
"message": "Prova di nuovo ricaricando la pagina, o contatta il supporto a support@metamask.io (inglese)",
"description": "Message displayed on generic error page in the fullscreen or notification UI"
},
"errorPagePopupMessage": {
"message": "Prova a chiudere e riaprire il popup, o contatta il supporto a support@metamask.io (inglese)",
"description": "Message displayed on generic error page in the popup UI"
},
"errorPageTitle": {
"message": "MetaMask ha riscontrato un errore",
"description": "Title of generic error page"
@ -1107,15 +1096,6 @@
"proposedApprovalLimit": {
"message": "Limite di Approvazione Proposto"
},
"protectYourKeys": {
"message": "Proteggi le tue chiavi!"
},
"protectYourKeysMessage1": {
"message": "Stai attento con la tua frase seed - ci sono stati report di siti web che hanno tentato di imitare MetaMask. MetaMask non ti chiederà mai la tua frase seed!"
},
"protectYourKeysMessage2": {
"message": "Tieni la tua frase al sicuro. Se vedi qualcosa di sospetto, o non sei sicuro di un sito web, manda una mail a support@metamask.io"
},
"provide": {
"message": "Fornisci"
},

@ -562,9 +562,6 @@
"endOfFlowMessage6": {
"message": "シードフレーズを再度バックアップする場合は、[設定] -> [セキュリティとプライバシー] で見つけることができます。"
},
"endOfFlowMessage7": {
"message": "問題や不審な点がある場合は、support@metamask.io 宛に電子メールをお送りください。"
},
"endOfFlowMessage8": {
"message": "MetaMaskはシードフレーズを復元できません。"
},
@ -609,14 +606,6 @@
"message": "エラー名:$1",
"description": "Displayed error name for debugging purposes. $1 is the error name"
},
"errorPageMessage": {
"message": "ページをリロードして再試行するか、サポート(support@metamask.io)までお問い合わせください",
"description": "Message displayed on generic error page in the fullscreen or notification UI"
},
"errorPagePopupMessage": {
"message": "ポップアップを閉じてから再び開いてもう一度実行するか、サポート(support@metamask.io)までお問い合わせください",
"description": "Message displayed on generic error page in the popup UI"
},
"errorPageTitle": {
"message": "MetaMaskにエラーが発生しました",
"description": "Title of generic error page"
@ -1225,15 +1214,6 @@
"proposedApprovalLimit": {
"message": "承認限度額の提案"
},
"protectYourKeys": {
"message": "キーを保護してください!"
},
"protectYourKeysMessage1": {
"message": "シードフレーズは厳重に取り扱ってください。MetaMaskの偽物がWebサイトで報告されています。MetaMaskがシードフレーズを要求することは絶対にありえません!"
},
"protectYourKeysMessage2": {
"message": "シードフレーズを厳重に保管してください。不審な点がやWebサイトについて不明確な場合は、support@metamask.io まで電子メールでお問い合わせください"
},
"provide": {
"message": "提供する"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "ನಿಮ ಸಿದ ಮತ ಮತಕಪಡಬದರ, ನ ಅದನಿಗಳ -> ಭದರತಯಲಿಣಬಹ."
},
"endOfFlowMessage7": {
"message": "ನದರರಶಗಳನಿದರ ಅಥವವಗಲದರದಲಮಯವಿದರ support@metamask.io ಗ ಇಮಿ."
},
"endOfFlowMessage8": {
"message": "MetaMask ಗಿಮ ಸ ಮರಳಿಪಡಯಲಯವಿಲ. ಇನನಷಿಿಿಿ."
},
@ -775,15 +772,6 @@
"privateNetwork": {
"message": "ಖಸಗಿವರ"
},
"protectYourKeys": {
"message": "ನಿಮ ಕಗಳನ ರಕಿಿ!"
},
"protectYourKeysMessage1": {
"message": "ನಿಮ ಸಿಗರಕರಿಿ — MetaMask ಅನ ಅನಕರಿಸಲರಯತಿಿವ ವಗಳ ವರದಿಗಳಿ. MetaMask ನಿಮ ಸ ಅನಿಿಲ!"
},
"protectYourKeysMessage2": {
"message": "ನಿಮ ಫ ಅನರಕಿತವಿಿಿ. ಏನದರ ಅನಪದವಿದನ ಅಥವಿಿಮಗ ಅನಿಿತತಿದರ, support@metamask.io ಗ ಇಮಿ"
},
"queue": {
"message": "ಸರತಿ"
},

@ -553,9 +553,6 @@
"endOfFlowMessage6": {
"message": "시드 구문을 다시 백업해야 한다면 설정 -> 보안에서 시드 구문을 찾을 수 있습니다."
},
"endOfFlowMessage7": {
"message": "질문이 있거나 피싱으로 의심되는 행위를 목격했다면 support@metamask.io로 이메일을 보내세요."
},
"endOfFlowMessage8": {
"message": "MetaMask에서는 시드 구문을 복구할 수 없습니다."
},
@ -600,14 +597,6 @@
"message": "코드: $1",
"description": "Displayed error name for debugging purposes. $1 is the error name"
},
"errorPageMessage": {
"message": "페이지를 새로고침하여 다시 시도하거나 support@metamask.io에 요청하여 도움을 받으세요.",
"description": "Message displayed on generic error page in the fullscreen or notification UI"
},
"errorPagePopupMessage": {
"message": "팝업을 닫은 후 다시 열어 다시 시도하거나 support@metamask.io에 요청하여 도움을 받으세요.",
"description": "Message displayed on generic error page in the popup UI"
},
"errorPageTitle": {
"message": "MetaMask에서 오류 발생",
"description": "Title of generic error page"
@ -1213,15 +1202,6 @@
"proposedApprovalLimit": {
"message": "제안된 승인 한도"
},
"protectYourKeys": {
"message": "키를 보호하세요!"
},
"protectYourKeysMessage1": {
"message": "시드 구문을 조심하세요. MetaMask를 흉내 내는 웹사이트가 보고되고 있습니다. MetaMask에서는 시드 구문을 절대로 물어보지 않습니다!"
},
"protectYourKeysMessage2": {
"message": "시드 구문을 안전하게 보관하세요. 피싱으로 의심되는 행위를 목격했거나 웹사이트가 수상하다면 support@metamask.io로 이메일을 보내세요."
},
"provide": {
"message": "제공"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "Jeigu reikia dar kartą padaryti jūsų atkūrimo frazės kopiją, ją galite rasti pasirinkę Nuostatos -> Sauga."
},
"endOfFlowMessage7": {
"message": "Jeigu turite klausimų arba pastebite ką nors įtartino, rašykite el. paštu support@metamask.io."
},
"endOfFlowMessage8": {
"message": "„MetaMask“ negali atkurti jūsų atkūrimo frazės. Sužinokite daugiau."
},
@ -775,15 +772,6 @@
"privateNetwork": {
"message": "Privatus tinklas"
},
"protectYourKeys": {
"message": "Apsaugokite savo raktus!"
},
"protectYourKeysMessage1": {
"message": "Saugokite savo atkūrimo frazę – gavome pranešimų apie interneto svetaines, kuriomis bandoma imituoti „MetaMask“. „MetaMask“ niekada neprašys jūsų pateikti savo atkūrimo frazę!"
},
"protectYourKeysMessage2": {
"message": "Saugokite savo frazę. Jei pastebėjote kažką įtartino arba nesate tikri dėl svetainės, rašykite mums adresu support@metamask.io"
},
"queue": {
"message": "Eilė"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "Ja nepieciešams atkārtoti dublēt atkopšanas frāzi, varat to atrast, dodoties uz Iestatījumi -> Drošība."
},
"endOfFlowMessage7": {
"message": "Ja jums rodas kādi jautājumi vai pamanāt ko aizdomīgu, rakstiet uz support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask nevar atjaunot jūsu atkopšanas frāzi. Uzzināt vairāk."
},
@ -771,15 +768,6 @@
"privateNetwork": {
"message": "Privātais tīkls"
},
"protectYourKeys": {
"message": "Sargājiet savas atslēgas!"
},
"protectYourKeysMessage1": {
"message": "Rīkojieties uzmanīgi ar sēklas frāzi — saņemti ziņojumi par tīmekļa vietnēm, kas mēģina imitēt MetaMask. MetaMask nekad nelūgs norādīt sēklas frāzi."
},
"protectYourKeysMessage2": {
"message": "Glabājiet frāzi drošībā. Ja kaut kas šķiet aizdomīgs vai neesat pārliecināti par tīmekļa vietni, rakstiet e-pastu uz support@metamask.io"
},
"queue": {
"message": "Rinda"
},

@ -344,9 +344,6 @@
"endOfFlowMessage6": {
"message": "Jika anda perlu membuat sandaran ungkapan benih anda sekali lagi, anda boleh lakukannya melalui Tetapan -> Keselamatan."
},
"endOfFlowMessage7": {
"message": "JIka anda mempunyai soalan atau melihat sesuatu yang mencurigakan, hantarkan e-mel ke support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask tidak dapat memulihkan ungkapan benih anda. Ketahui lebih lanjut."
},
@ -752,15 +749,6 @@
"privateNetwork": {
"message": "Rangkaian Persendirian"
},
"protectYourKeys": {
"message": "Lindungi Kunci Anda!"
},
"protectYourKeysMessage1": {
"message": "Berhati-hati dengan ungkapan benih anda — terdapat laporan ada tapak web yang cuba meniru MetaMask. MetaMask tidak sekali-kali akan meminta ungkapan benih anda!"
},
"protectYourKeysMessage2": {
"message": "Pastikan ungkapan anda selamat. Jika anda melihterlihat at sesuatu yang mencurigakan, atau anda tidak pasti mengenai tapak web tertentu, e-mel kepada support@metamask.io"
},
"queue": {
"message": "Baris Gilir"
},

@ -347,9 +347,6 @@
"endOfFlowMessage6": {
"message": "Hvis du trenger å sikkerhetskopiere seed-frasen din igjen kan du finne den i Innstillinger -> Sikkerhet."
},
"endOfFlowMessage7": {
"message": "Hvis du noen gang har spørsmål eller ser noe mistenksomt, send e-post til support@metamask.io"
},
"endOfFlowMessage8": {
"message": "MetaMask klarer ikke å gjenopprette den mnemoniske gjenopprettingsfrasen din. Finn ut mer. "
},
@ -762,15 +759,6 @@
"privateNetwork": {
"message": "Privat nettverk "
},
"protectYourKeys": {
"message": "Beskytt nøklene dine! "
},
"protectYourKeysMessage1": {
"message": "Vær forsiktig med den mnemoniske gjenopprettingsfrasen din - det rapporteres om nettsteder som prøver å etterligne MetaMask. MetaMask vil aldri be om den mnemoniske gjenopprettingsfrasen din!"
},
"protectYourKeysMessage2": {
"message": "Oppbevar setningen din trygt. Hvis du ser noe mistenksomt, eller du er usikker på et nettsted, kan du sende en e-post til support@metamask.io"
},
"queue": {
"message": "Kø"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "Jeśli zajdzie konieczność ponownego wykonania kopii zapasowej frazy seed, znajdziesz ją w Ustawieniach -> Zabezpieczenia."
},
"endOfFlowMessage7": {
"message": "Jeśli masz jakieś pytania lub zauważysz coś podejrzanego, wyślij e-mail na adres support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask nie może odzyskać Twojej frazy seed. Dowiedz się więcej."
},
@ -769,15 +766,6 @@
"privateNetwork": {
"message": "Sieć prywatna"
},
"protectYourKeys": {
"message": "Chroń swoje klucze!"
},
"protectYourKeysMessage1": {
"message": "Traktuj swoją frazę seed z ostrożnością – zgłaszano nam przypadki stron internetowych, które podają się za MetaMask. MetaMask nigdy nie poprosi Cię o podanie frazy seed!"
},
"protectYourKeysMessage2": {
"message": "Przechowuj frazę z zachowaniem zasad bezpieczeństwa. Jeśli zauważysz coś podejrzanego lub nie masz pewności co do strony internetowej, wyślij e-mail na adres support@metamask.io"
},
"queue": {
"message": "Kolejka"
},

@ -344,9 +344,6 @@
"endOfFlowMessage6": {
"message": "Se precisar fazer backup de sua frase-semente de novo, acesse Configurações -> Segurança."
},
"endOfFlowMessage7": {
"message": "Caso você tenha alguma dúvida ou veja algo suspeito, envie um e-mail para support@metamask.io."
},
"endOfFlowMessage8": {
"message": "O MetaMask não pode recuperar sua frase semente. Saiba mais."
},
@ -763,15 +760,6 @@
"privateNetwork": {
"message": "Rede Particular"
},
"protectYourKeys": {
"message": "Proteja as suas chaves!"
},
"protectYourKeysMessage1": {
"message": "Tome cuidado com sua frase semente — houve relatos de sites que tentam imitar o MetaMask. O MetaMask nunca pedirá sua frase semente!"
},
"protectYourKeysMessage2": {
"message": "Mantenha a sua frase segura. Se você vir algo esquisito ou está inseguro quanto a um site, envie um e-mail para support@metamask.io"
},
"queue": {
"message": "Fila"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "Dacă trebuie să vă salvați din nou fraza seed, puteți să o găsiți în Setări -> Securitate."
},
"endOfFlowMessage7": {
"message": "Dacă aveți întrebări sau vedeți ceva suspect, trimiteți un e-mail la support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask nu vă poate recupera expresia sursă. Aflați mai multe."
},
@ -762,15 +759,6 @@
"privateNetwork": {
"message": "Rețea privată"
},
"protectYourKeys": {
"message": "Protejați-vă cheile!"
},
"protectYourKeysMessage1": {
"message": "Aveți grijă cu expresia dvs. sursă – au existat raportări despre site-uri web care încearcă să imite MetaMask. MetaMask nu vă va cere niciodată expresia sursă!"
},
"protectYourKeysMessage2": {
"message": "Aveți grijă de fraza dvs. Dacă vedeți ceva care este în neregulă sau aveți dubii cu privire la un site, trimiteți un mesaj la support@metamask.io"
},
"queue": {
"message": "Coadă"
},

@ -553,9 +553,6 @@
"endOfFlowMessage6": {
"message": "Если вам нужно снова создать резервную копию исходной фразы, вы можете найти ее в Настройки -> Безопасность."
},
"endOfFlowMessage7": {
"message": "Если у вас возникнут вопросы или вы увидите что-то подозрительное, напишите на support@metamask.io."
},
"endOfFlowMessage8": {
"message": "Просто помните, что MetaMask не может восстановить исходную фразу."
},
@ -600,14 +597,6 @@
"message": "Код: $1",
"description": "Displayed error name for debugging purposes. $1 is the error name"
},
"errorPageMessage": {
"message": "Повторите попытку, перезагрузив страницу, или обратитесь в службу поддержки по адресу support@metamask.io",
"description": "Message displayed on generic error page in the fullscreen or notification UI"
},
"errorPagePopupMessage": {
"message": "Повторите попытку, закрыв и вновь открыв всплывающее окно, или обратитесь в службу поддержки по адресу support@metamask.io",
"description": "Message displayed on generic error page in the popup UI"
},
"errorPageTitle": {
"message": "MetaMask обнаружил ошибку",
"description": "Title of generic error page"
@ -1213,15 +1202,6 @@
"proposedApprovalLimit": {
"message": "Предлагаемый предел утверждения"
},
"protectYourKeys": {
"message": "Защитите свои ключи!"
},
"protectYourKeysMessage1": {
"message": "Будьте осторожны с исходной фразой — были сообщения о веб-сайтах, которые пытались имитировать MetaMask. MetaMask никогда не запросит вашу исходную фразу!"
},
"protectYourKeysMessage2": {
"message": "Храните свою исходную фразу в безопасности. Если вы увидите что-то подозрительное или вы не уверены в сайте, напишите на support@metamask.io"
},
"provide": {
"message": "Предоставить"
},

@ -344,9 +344,6 @@
"endOfFlowMessage6": {
"message": "Ak potrebujete backup frázu znova zálohovať, nájdete ju v časti Nastavenia -> Zabezpečenie."
},
"endOfFlowMessage7": {
"message": "Ak budete mať nejaké otázky alebo niečo zaujímavé, pošlite email na support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask nemôže obnoviť vašu seed frázu. Zistiť viac."
},
@ -744,15 +741,6 @@
"privateNetwork": {
"message": "Soukromá síť"
},
"protectYourKeys": {
"message": "Chráňte si svoje kľúče!"
},
"protectYourKeysMessage1": {
"message": "Pri seed fráze buďte opatrní – vyskytli sa správy o webových stránkach, ktoré sa snažia napodobniť MetaMask. MetaMask nikdy nebude žiadať vašu seed frázu!"
},
"protectYourKeysMessage2": {
"message": "Držte svoju frázu v bezpečí. Ak zbadáte niečo podozrivé alebo si nie ste istí webom, pošlite email na adresu support@metamask.io"
},
"queue": {
"message": "Poradie"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "Če morate ponovno varnostno kopirati vaše geslo seed phrase, ga najdete v Nastavitve -> Varnost."
},
"endOfFlowMessage7": {
"message": "Če imate kakršna koli vprašanja ali opazite kaj sumljivega, nam pišite na support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask ne more obnoviti vašega gesla seed phrase. Več informacij."
},
@ -760,15 +757,6 @@
"privateNetwork": {
"message": "Zasebno omrežje"
},
"protectYourKeys": {
"message": "Varujte svoje ključe!"
},
"protectYourKeysMessage1": {
"message": "Bodite previdni in svoj seed phrase skrbno varujte - obstajajo poročila o spletnih mestih, ki poskušajo posnemati MetaMask. MetaMask nikoli ne bo zahteval vašega gesla seed phrase!"
},
"protectYourKeysMessage2": {
"message": "Hranite svoj seed phrase. Če opazite sumljivo delovanje ali niste prepričani ali je določeno spletno mesto varno, nam pišite na support@metamask.io"
},
"queue": {
"message": "Čakalna vrsta"
},

@ -347,9 +347,6 @@
"endOfFlowMessage6": {
"message": "Ako treba ponovo da izradite rezervnu kopiju svoje početne fraze, možete je pronaći u Postavke -> Bezbednost."
},
"endOfFlowMessage7": {
"message": "Ako imate bilo kakvih pitanja ili primetite nešto sumnjivo, pošaljite e-poruku na support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask ne može da oporavi vašu početnu frazu. Saznajte više."
},
@ -766,15 +763,6 @@
"privateNetwork": {
"message": "Privatna mreža"
},
"protectYourKeys": {
"message": "Zaštitite svoje ključeve!"
},
"protectYourKeysMessage1": {
"message": "Budite pažljivi sa vašom seed frazom - bilo je izveštaja o veb lokacijama koje pokušavaju da imitiraju MetaMask. MetaMask nikada neće tražiti vašu seed frazu!"
},
"protectYourKeysMessage2": {
"message": "Čuvajte svoju frazu. Ako primetite nešto sumnjivo, ili niste sigurni u vezi veb lokacije, pošaljite e-poruku na upport@metamask.io"
},
"queue": {
"message": "Ред"
},

@ -344,9 +344,6 @@
"endOfFlowMessage6": {
"message": "Om du behöver säkerhetskopiera din nyckelfras igen, kan du hitta den i Inställningar -> Säkerhet"
},
"endOfFlowMessage7": {
"message": "Om du har frågor eller ser något misstänksamt, skicka ett e-postmeddelande till support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask kan inte återställa din seedphrase. Läs mer."
},
@ -759,15 +756,6 @@
"privateNetwork": {
"message": "Privat nätverk"
},
"protectYourKeys": {
"message": "Skydda dina nycklar!"
},
"protectYourKeysMessage1": {
"message": "Var försiktig med din seedfras — det har rapporterats om hemsidor som försöker imitera MetaMask. MetaMask kommer aldrig fråga efter din seedfras!"
},
"protectYourKeysMessage2": {
"message": "Håll din fras i säkert förvar. Om du ser något misstänksamt eller om du är osäker på en hemsida, skicka ett e-postmeddelande till support@metamask.io."
},
"queue": {
"message": "Utskriftskö"
},

@ -344,9 +344,6 @@
"endOfFlowMessage6": {
"message": "Ikiwa unataka kuhifadhi tena kwa njia mbadla kirai chako kianzio, unaweza kukipata kwenye Mipangilio -> Usalama."
},
"endOfFlowMessage7": {
"message": "Ikiwa una maswali au umeona kitu ambacho ni cha ulaghai, tuma barua pepe support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask haiwezi kurejesha kirai chako kianzio. Pata maelezo ziadi."
},
@ -753,15 +750,6 @@
"privateNetwork": {
"message": "Mtandao Binafsi"
},
"protectYourKeys": {
"message": "Linda Funguo Zako!"
},
"protectYourKeysMessage1": {
"message": "Kuwa mwangalifu na kirai kianzio chako - kumekuwa na taarifa za tovuti ambazo zinajaribu kuiga MetaMask. MetaMask kamwe haitakuomba kirai kianzio chako!"
},
"protectYourKeysMessage2": {
"message": "Weka salama kirai kianzio chako. Ikiwa unaona kitu cha kilaghai, au huna uhakika na tovuti fulani, tuma barua pepe kwenda support@metamask.io"
},
"queue": {
"message": "Foleni"
},

@ -553,9 +553,6 @@
"endOfFlowMessage6": {
"message": "Kung kailangan mong i-back up ulit ang iyong seed phrase, makikita mo ito sa Mga Setting -> Seguridad."
},
"endOfFlowMessage7": {
"message": "Sakaling mayroon kang mga tanong o may nakita kang kahina-hinalang bagay, mag-email sa support@metamask.io."
},
"endOfFlowMessage8": {
"message": "Hindi mababawi ng MetaMask ang iyong seedphrase."
},
@ -600,14 +597,6 @@
"message": "Code: $1",
"description": "Displayed error name for debugging purposes. $1 is the error name"
},
"errorPageMessage": {
"message": "Subukan ulit sa pamamagitan ng pag-reload ng page, o makipag-ugnayan sa suporta sa support@metamask.io",
"description": "Message displayed on generic error page in the fullscreen or notification UI"
},
"errorPagePopupMessage": {
"message": "Subukan ulit sa pamamagitan ng pagsara at muling pagbukas ng popup, o makipag-ugnayan sa suporta sa support@metamask.io",
"description": "Message displayed on generic error page in the popup UI"
},
"errorPageTitle": {
"message": "Nagkaroon ng error sa MetaMask",
"description": "Title of generic error page"
@ -1213,15 +1202,6 @@
"proposedApprovalLimit": {
"message": "Iminumungkahing Limitasyon sa Pag-apruba"
},
"protectYourKeys": {
"message": "Protektahan ang Iyong Mga Key!"
},
"protectYourKeysMessage1": {
"message": "Ingatan ang iyong seed phrase — may mga naiulat na website na sinusubukang gayahin ang MetaMask. Hindi kailanman hihingin ng MetaMask ang iyong seed phrase!"
},
"protectYourKeysMessage2": {
"message": "Ingatan ang iyong phrase. Kung may makikita kang kahina-hinalang bagay, o hindi ka sigurado sa isang website, mag-email sa support@metamask.io"
},
"provide": {
"message": "Ibigay"
},

@ -350,9 +350,6 @@
"endOfFlowMessage6": {
"message": "Якщо вам потрібно знову зробити резервну копію вашої початкової фрази, ви можете знайти її у Налаштування -> Безпека."
},
"endOfFlowMessage7": {
"message": "Якщо у вас коли-небудь виникатимуть питання або ви побачите щось фішингове, пишіть на support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask не вдалося відновити вашу мнемонічну фразу. Докладніше."
},
@ -775,15 +772,6 @@
"privateNetwork": {
"message": "Приватна мережа"
},
"protectYourKeys": {
"message": "Захистіть свої ключі!"
},
"protectYourKeysMessage1": {
"message": "Будьте обережними з вашою початковою фразою - надходила інформація про сайти, які намагались імітувати MetaMask. MetaMask ніколи не запитує вашої початкової фрази!"
},
"protectYourKeysMessage2": {
"message": "Тримайте свою фразу у безпеці. Якщо ви бачите щось фішингове або ви не впевнені щодо сайту, напишіть нам на support@metamask.io"
},
"queue": {
"message": "Черга"
},

@ -553,9 +553,6 @@
"endOfFlowMessage6": {
"message": "Nếu cần sao lưu lại cụm mật khẩu gốc của mình, bạn có thể tìm thấy cụm mật khẩu này trong phần Cài đặt -> Bảo mật."
},
"endOfFlowMessage7": {
"message": "Nếu bạn có câu hỏi hoặc nhận thấy điều gì đó đáng ngờ, hãy gửi email đến support@metamask.io."
},
"endOfFlowMessage8": {
"message": "MetaMask không thể khôi phục cụm mật khẩu gốc của bạn."
},
@ -600,14 +597,6 @@
"message": "Mã: $1",
"description": "Displayed error name for debugging purposes. $1 is the error name"
},
"errorPageMessage": {
"message": "Hãy thử lại bằng cách tải lại trang hoặc liên hệ với bộ phận hỗ trợ theo địa chỉ support@metamask.io",
"description": "Message displayed on generic error page in the fullscreen or notification UI"
},
"errorPagePopupMessage": {
"message": "Hãy thử lại bằng cách đóng và mở lại cửa sổ bật lên hoặc liên hệ với bộ phận hỗ trợ theo địa chỉ support@metamask.io",
"description": "Message displayed on generic error page in the popup UI"
},
"errorPageTitle": {
"message": "MetaMask đã gặp lỗi",
"description": "Title of generic error page"
@ -1213,15 +1202,6 @@
"proposedApprovalLimit": {
"message": "Giới hạn phê duyệt đề xuất"
},
"protectYourKeys": {
"message": "Bảo vệ khóa của bạn!"
},
"protectYourKeysMessage1": {
"message": "Hãy cẩn với cụm mật khẩu gốc của bạn, đã có báo cáo về các trang web cố tình giả mạo MetaMask. MetaMask sẽ không bao giờ hỏi cụm mật khẩu gốc của bạn!"
},
"protectYourKeysMessage2": {
"message": "Hãy lưu giữ cụm mật khẩu của bạn an toàn. Nếu bạn nhận thấy điều gì đó đáng ngờ hoặc không chắc chắn về một trang web, hãy gửi email đến support@metamask.io"
},
"provide": {
"message": "Cung cấp"
},

@ -562,9 +562,6 @@
"endOfFlowMessage6": {
"message": "如果您需要再次备份账户助记词,请通过设置 -> 安全选项完成该操作。"
},
"endOfFlowMessage7": {
"message": "如果您仍存有疑问或发现任何可疑的地方,请发送电子邮件至 support@metamask.io 进行咨询。"
},
"endOfFlowMessage8": {
"message": "MetaMask 无法恢复您的账户助记词。"
},
@ -609,14 +606,6 @@
"message": "代码:$1",
"description": "Displayed error name for debugging purposes. $1 is the error name"
},
"errorPageMessage": {
"message": "请重新加载页面重试,或通过 support@metamask.io 联系支持。",
"description": "Message displayed on generic error page in the fullscreen or notification UI"
},
"errorPagePopupMessage": {
"message": "请关闭并重新打开弹窗再试一次,或通过 support@metamask.io 联系支持。",
"description": "Message displayed on generic error page in the popup UI"
},
"errorPageTitle": {
"message": "MetaMask 遇到了一个错误",
"description": "Title of generic error page"
@ -1225,15 +1214,6 @@
"proposedApprovalLimit": {
"message": "拟议的审批上限"
},
"protectYourKeys": {
"message": "妥善保管您的密钥!"
},
"protectYourKeysMessage1": {
"message": "请注意个人账户助记词的安全。报告显示有多个网站企图伪造 MetaMask。MetaMask 绝不会要求您提供个人账户助记词!"
},
"protectYourKeysMessage2": {
"message": "请妥善保管您的账户助记词。如果您发现任何可疑的地方,或无法确认网络安全性,请发送电子邮件至 support@metamask.io 进行咨询"
},
"provide": {
"message": "提供"
},

@ -359,9 +359,6 @@
"endOfFlowMessage6": {
"message": "如你需要再次備份助記詞,可至設定 -> 安全。"
},
"endOfFlowMessage7": {
"message": "如你有任何問題或察覺有異,請寄信給 support@metamask.io"
},
"endOfFlowMessage8": {
"message": "MetaMask 無法還原你的助記詞。暸解更多"
},
@ -772,15 +769,6 @@
"privateNetwork": {
"message": "私有網路"
},
"protectYourKeys": {
"message": "保護你的鑰匙!"
},
"protectYourKeysMessage1": {
"message": "小心保管你的註記詞—我們接到報告有網站嘗試模仿 MetaMask。MetaMask 永遠不會詢問你的助記詞!"
},
"protectYourKeysMessage2": {
"message": "安全存放你的助記詞。如你察覺有異,或你對某網站起疑,請寄信給 support@metamask.io"
},
"queue": {
"message": "佇列"
},

@ -3,7 +3,7 @@ import { ObservableStore } from '@metamask/obs-store';
/**
* @typedef {Object} CachedBalancesOptions
* @property {Object} accountTracker An {@code AccountTracker} reference
* @property {Function} getNetwork A function to get the current network
* @property {Function} getCurrentChainId A function to get the current chain id
* @property {Object} initState The initial controller state
*/
@ -18,10 +18,10 @@ export default class CachedBalancesController {
* @param {CachedBalancesOptions} [opts] - Controller configuration parameters
*/
constructor(opts = {}) {
const { accountTracker, getNetwork } = opts;
const { accountTracker, getCurrentChainId } = opts;
this.accountTracker = accountTracker;
this.getNetwork = getNetwork;
this.getCurrentChainId = getCurrentChainId;
const initState = { cachedBalances: {}, ...opts.initState };
this.store = new ObservableStore(initState);
@ -30,37 +30,37 @@ export default class CachedBalancesController {
}
/**
* Updates the cachedBalances property for the current network. Cached balances will be updated to those in the passed accounts
* Updates the cachedBalances property for the current chain. Cached balances will be updated to those in the passed accounts
* if balances in the passed accounts are truthy.
*
* @param {Object} obj - The the recently updated accounts object for the current network
* @param {Object} obj - The the recently updated accounts object for the current chain
* @returns {Promise<void>}
*/
async updateCachedBalances({ accounts }) {
const network = await this.getNetwork();
const chainId = this.getCurrentChainId();
const balancesToCache = await this._generateBalancesToCache(
accounts,
network,
chainId,
);
this.store.updateState({
cachedBalances: balancesToCache,
});
}
_generateBalancesToCache(newAccounts, currentNetwork) {
_generateBalancesToCache(newAccounts, chainId) {
const { cachedBalances } = this.store.getState();
const currentNetworkBalancesToCache = { ...cachedBalances[currentNetwork] };
const currentChainBalancesToCache = { ...cachedBalances[chainId] };
Object.keys(newAccounts).forEach((accountID) => {
const account = newAccounts[accountID];
if (account.balance) {
currentNetworkBalancesToCache[accountID] = account.balance;
currentChainBalancesToCache[accountID] = account.balance;
}
});
const balancesToCache = {
...cachedBalances,
[currentNetwork]: currentNetworkBalancesToCache,
[chainId]: currentChainBalancesToCache,
};
return balancesToCache;

@ -218,7 +218,7 @@ export default class MetamaskController extends EventEmitter {
this.cachedBalancesController = new CachedBalancesController({
accountTracker: this.accountTracker,
getNetwork: this.networkController.getNetworkState.bind(
getCurrentChainId: this.networkController.getCurrentChainId.bind(
this.networkController,
),
initState: initState.CachedBalancesController,

@ -5,7 +5,8 @@
"scripts": {
"setup": "yarn install && yarn patch-package && yarn allow-scripts",
"setup-ci": "yarn install --frozen-lockfile --har && yarn patch-package && yarn allow-scripts",
"start": "yarn build dev",
"start": "node development/build/index.js dev",
"start:lavamoat": "yarn build dev",
"dist": "yarn build prod",
"build": "lavamoat development/build/index.js",
"start:test": "yarn build testDev",
@ -70,7 +71,8 @@
"3box/ipfs/ipld-zcash/zcash-bitcore-lib/elliptic": "^6.5.3",
"3box/**/libp2p-crypto/node-forge": "^0.10.0",
"3box/**/libp2p-keychain/node-forge": "^0.10.0",
"analytics-node/axios": "^0.21.1"
"analytics-node/axios": "^0.21.1",
"pull-ws": "^3.3.2"
},
"dependencies": {
"3box": "^1.10.2",

@ -1,12 +1,13 @@
import assert from 'assert';
import sinon from 'sinon';
import CachedBalancesController from '../../../../app/scripts/controllers/cached-balances';
import { KOVAN_CHAIN_ID } from '../../../../shared/constants/network';
describe('CachedBalancesController', function () {
describe('updateCachedBalances', function () {
it('should update the cached balances', async function () {
const controller = new CachedBalancesController({
getNetwork: () => Promise.resolve(17),
getCurrentChainId: () => KOVAN_CHAIN_ID,
accountTracker: {
store: {
subscribe: () => undefined,
@ -26,7 +27,7 @@ describe('CachedBalancesController', function () {
assert.equal(controller._generateBalancesToCache.callCount, 1);
assert.deepEqual(controller._generateBalancesToCache.args[0], [
'mockAccounts',
17,
KOVAN_CHAIN_ID,
]);
assert.equal(
controller.store.getState().cachedBalances,
@ -45,7 +46,7 @@ describe('CachedBalancesController', function () {
},
initState: {
cachedBalances: {
17: {
[KOVAN_CHAIN_ID]: {
a: '0x1',
b: '0x2',
c: '0x3',
@ -65,11 +66,11 @@ describe('CachedBalancesController', function () {
b: { balance: null },
c: { balance: '0x5' },
},
17,
KOVAN_CHAIN_ID,
);
assert.deepEqual(result, {
17: {
[KOVAN_CHAIN_ID]: {
a: '0x4',
b: '0x2',
c: '0x5',
@ -91,7 +92,7 @@ describe('CachedBalancesController', function () {
},
initState: {
cachedBalances: {
17: {
[KOVAN_CHAIN_ID]: {
a: '0x1',
b: '0x2',
c: '0x3',
@ -110,7 +111,7 @@ describe('CachedBalancesController', function () {
);
assert.deepEqual(result, {
17: {
[KOVAN_CHAIN_ID]: {
a: '0x1',
b: '0x2',
c: '0x3',
@ -127,7 +128,7 @@ describe('CachedBalancesController', function () {
it('should subscribe to the account tracker with the updateCachedBalances method', async function () {
const subscribeSpy = sinon.spy();
const controller = new CachedBalancesController({
getNetwork: () => Promise.resolve(17),
getCurrentChainId: () => KOVAN_CHAIN_ID,
accountTracker: {
store: {
subscribe: subscribeSpy,

@ -11,10 +11,9 @@ import { renderWithProvider } from '../../../../../../../test/lib/render-helpers
import * as actions from '../../../../../store/actions';
import UnconnectedAccountAlert from '..';
import { KOVAN_CHAIN_ID } from '../../../../../../../shared/constants/network';
describe('Unconnected Account Alert', function () {
const network = '123';
const selectedAddress = '0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b';
const identities = {
@ -40,7 +39,7 @@ describe('Unconnected Account Alert', function () {
};
const cachedBalances = {
123: {
[KOVAN_CHAIN_ID]: {
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': '0x0',
'0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b': '0x0',
},
@ -58,12 +57,14 @@ describe('Unconnected Account Alert', function () {
const mockState = {
metamask: {
network,
selectedAddress,
identities,
accounts,
cachedBalances,
keyrings,
provider: {
chainId: KOVAN_CHAIN_ID,
},
permissionsHistory: {
'https://test.dapp': {
eth_accounts: {

@ -108,6 +108,13 @@ export function isValidDomainName(address) {
return match !== null;
}
export function isOriginContractAddress(to, sendTokenAddress) {
if (!to || !sendTokenAddress) {
return false;
}
return to.toLowerCase() === sendTokenAddress.toLowerCase();
}
export function isAllOneCase(address) {
if (!address) {
return true;

@ -152,6 +152,38 @@ describe('util', function () {
});
});
describe('isOriginContractAddress', function () {
it('should return true when the send address is the same as the selected tokens contract address', function () {
assert.equal(
util.isOriginContractAddress(
'0x8d6b81208414189a58339873ab429b6c47ab92d3',
'0x8d6b81208414189a58339873ab429b6c47ab92d3',
),
true,
);
});
it('should return true when the send address is the same as the selected tokens contract address, capitalized input', function () {
assert.equal(
util.isOriginContractAddress(
'0x8d6b81208414189a58339873ab429b6c47ab92d3',
'0X8D6B81208414189A58339873AB429B6C47AB92D3',
),
true,
);
});
it('should return false when the recipient address differs', function () {
assert.equal(
util.isOriginContractAddress(
'0x8d6b81208414189a58339873ab429b6c47ab92d3',
'0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B',
),
false,
);
});
});
describe('#numericBalance', function () {
it('should return a BN 0 if given nothing', function () {
const result = util.numericBalance();

@ -34,13 +34,24 @@ class ErrorPage extends PureComponent {
const { t } = this.context;
const isPopup = getEnvironmentType() === ENVIRONMENT_TYPE_POPUP;
const supportLink = (
<a
target="_blank"
key="metamaskSupportLink"
rel="noopener noreferrer"
href="https://metamask.zendesk.com/hc/en-us/requests/new"
>
<span className="error-page__link-text">{this.context.t('here')}</span>
</a>
);
const message = isPopup
? t('errorPagePopupMessage', [supportLink])
: t('errorPageMessage', [supportLink]);
return (
<section className="error-page">
<h1 className="error-page__header">{t('errorPageTitle')}</h1>
<h2 className="error-page__subheader">
{isPopup ? t('errorPagePopupMessage') : t('errorPageMessage')}
</h2>
<h2 className="error-page__subheader">{message}</h2>
<section className="error-page__details">
<details>
<summary>{t('errorDetails')}</summary>

@ -38,4 +38,8 @@
overflow-x: auto;
background-color: #eee;
}
&__link-text {
color: #037dd6;
}
}

@ -1 +0,0 @@
export { default } from './unique-image.container';

@ -1,49 +0,0 @@
import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import Button from '../../../../components/ui/button';
import { INITIALIZE_END_OF_FLOW_ROUTE } from '../../../../helpers/constants/routes';
export default class UniqueImageScreen extends PureComponent {
static contextTypes = {
t: PropTypes.func,
metricsEvent: PropTypes.func,
};
static propTypes = {
history: PropTypes.object,
};
render() {
const { t } = this.context;
const { history } = this.props;
return (
<div>
<img src="/images/sleuth.svg" height="42" width="42" alt="" />
<div className="first-time-flow__header">{t('protectYourKeys')}</div>
<div className="first-time-flow__text-block">
{t('protectYourKeysMessage1')}
</div>
<div className="first-time-flow__text-block">
{t('protectYourKeysMessage2')}
</div>
<Button
type="primary"
className="first-time-flow__button"
onClick={() => {
this.context.metricsEvent({
eventOpts: {
category: 'Onboarding',
action: 'Agree to Phishing Warning',
name: 'Agree to Phishing Warning',
},
});
history.push(INITIALIZE_END_OF_FLOW_ROUTE);
}}
>
{t('next')}
</Button>
</div>
);
}
}

@ -1,12 +0,0 @@
import { connect } from 'react-redux';
import UniqueImage from './unique-image.component';
const mapStateToProps = ({ metamask }) => {
const { selectedAddress } = metamask;
return {
address: selectedAddress,
};
};
export default connect(mapStateToProps)(UniqueImage);

@ -89,7 +89,19 @@ export default class EndOfFlowScreen extends PureComponent {
{`${t('endOfFlowMessage6')}`}
</div>
<div className="end-of-flow__text-3">
{`${t('endOfFlowMessage7')}`}
{' '}
{t('endOfFlowMessage7', [
<a
target="_blank"
key="metamaskSupportLink"
rel="noopener noreferrer"
href="https://metamask.zendesk.com/hc/en-us/requests/new"
>
<span className="first-time-flow__link-text">
{this.context.t('here')}
</span>
</a>,
])}
</div>
<div className="first-time-flow__text-block end-of-flow__text-4">
{`*${t('endOfFlowMessage8')}`}&nbsp;

@ -90,10 +90,6 @@
margin: 36px 0;
}
&__unique-image {
margin-bottom: 20px;
}
&__text-block {
margin-bottom: 24px;
color: black;

@ -7,6 +7,7 @@ import {
KNOWN_RECIPIENT_ADDRESS_ERROR,
INVALID_RECIPIENT_ADDRESS_NOT_ETH_NETWORK_ERROR,
CONFUSING_ENS_ERROR,
CONTRACT_ADDRESS_ERROR,
} from '../../send.constants';
import {
@ -14,18 +15,19 @@ import {
isEthNetwork,
checkExistingAddresses,
isValidDomainName,
isOriginContractAddress,
} from '../../../../helpers/utils/util';
export function getToErrorObject(to, hasHexData = false, network) {
export function getToErrorObject(to, sendTokenAddress, network) {
let toError = null;
if (!to) {
if (!hasHexData) {
toError = REQUIRED_ERROR;
}
} else if (!isValidAddress(to) && !toError) {
toError = REQUIRED_ERROR;
} else if (!isValidAddress(to)) {
toError = isEthNetwork(network)
? INVALID_RECIPIENT_ADDRESS_ERROR
: INVALID_RECIPIENT_ADDRESS_NOT_ETH_NETWORK_ERROR;
} else if (isOriginContractAddress(to, sendTokenAddress)) {
toError = CONTRACT_ADDRESS_ERROR;
}
return { to: toError };

@ -7,6 +7,7 @@ import {
INVALID_RECIPIENT_ADDRESS_ERROR,
KNOWN_RECIPIENT_ADDRESS_ERROR,
CONFUSING_ENS_ERROR,
CONTRACT_ADDRESS_ERROR,
} from '../../../send.constants';
const stubs = {
@ -30,12 +31,6 @@ describe('add-recipient utils', function () {
});
});
it('should return null if "to" is falsy and hexData is truthy', function () {
assert.deepStrictEqual(getToErrorObject(null, true), {
to: null,
});
});
it('should return an invalid recipient error if "to" is truthy but invalid', function () {
assert.deepStrictEqual(getToErrorObject('mockInvalidTo'), {
to: INVALID_RECIPIENT_ADDRESS_ERROR,
@ -47,6 +42,18 @@ describe('add-recipient utils', function () {
to: null,
});
});
it('should return a contract address error if the recipient is the same as the tokens contract address', function () {
assert.deepStrictEqual(getToErrorObject('0xabc123', '0xabc123'), {
to: CONTRACT_ADDRESS_ERROR,
});
});
it('should return null if the recipient address is not the token contract address', function () {
assert.deepStrictEqual(getToErrorObject('0xabc123', '0xabc456'), {
to: null,
});
});
});
describe('getToWarningObject()', function () {

@ -19,15 +19,17 @@ export default class SendContent extends Component {
contact: PropTypes.object,
isOwnedAccount: PropTypes.bool,
warning: PropTypes.string,
error: PropTypes.string,
};
updateGas = (updateData) => this.props.updateGas(updateData);
render() {
const { warning } = this.props;
const { warning, error } = this.props;
return (
<PageContainerContent>
<div className="send-v2__form">
{error && this.renderError()}
{warning && this.renderWarning()}
{this.maybeRenderAddContact()}
<SendAssetRow />
@ -74,4 +76,15 @@ export default class SendContent extends Component {
</Dialog>
);
}
renderError() {
const { t } = this.context;
const { error } = this.props;
return (
<Dialog type="error" className="send__error-dialog">
{t(error)}
</Dialog>
);
}
}

@ -17,7 +17,11 @@ import AddRecipient from './send-content/add-recipient';
import SendContent from './send-content';
import SendFooter from './send-footer';
import EnsInput from './send-content/add-recipient/ens-input';
import { INVALID_RECIPIENT_ADDRESS_ERROR } from './send.constants';
import {
INVALID_RECIPIENT_ADDRESS_ERROR,
KNOWN_RECIPIENT_ADDRESS_ERROR,
CONTRACT_ADDRESS_ERROR,
} from './send.constants';
export default class SendTransactionScreen extends Component {
static propTypes = {
@ -31,7 +35,6 @@ export default class SendTransactionScreen extends Component {
gasLimit: PropTypes.string,
gasPrice: PropTypes.string,
gasTotal: PropTypes.string,
hasHexData: PropTypes.bool,
history: PropTypes.object,
network: PropTypes.string,
primaryCurrency: PropTypes.string,
@ -54,6 +57,7 @@ export default class SendTransactionScreen extends Component {
scanQrCode: PropTypes.func.isRequired,
qrCodeDetected: PropTypes.func.isRequired,
qrCodeData: PropTypes.object,
sendTokenAddress: PropTypes.string,
};
static contextTypes = {
@ -94,6 +98,7 @@ export default class SendTransactionScreen extends Component {
qrCodeData,
qrCodeDetected,
} = this.props;
const { toError, toWarning } = this.state;
let updateGas = false;
const {
@ -188,6 +193,25 @@ export default class SendTransactionScreen extends Component {
this.updateGas();
}
}
// If selecting ETH after selecting a token, clear token related messages.
if (prevSendToken && !sendToken) {
let error = toError;
let warning = toWarning;
if (toError === CONTRACT_ADDRESS_ERROR) {
error = null;
}
if (toWarning === KNOWN_RECIPIENT_ADDRESS_ERROR) {
warning = null;
}
this.setState({
toError: error,
toWarning: warning,
});
}
}
componentDidMount() {
@ -234,7 +258,7 @@ export default class SendTransactionScreen extends Component {
}
validate(query) {
const { hasHexData, tokens, sendToken, network } = this.props;
const { tokens, sendToken, network, sendTokenAddress } = this.props;
const { internalSearch } = this.state;
@ -243,7 +267,7 @@ export default class SendTransactionScreen extends Component {
return;
}
const toErrorObject = getToErrorObject(query, hasHexData, network);
const toErrorObject = getToErrorObject(query, sendTokenAddress, network);
const toWarningObject = getToWarningObject(query, tokens, sendToken);
this.setState({
@ -359,7 +383,7 @@ export default class SendTransactionScreen extends Component {
renderSendContent() {
const { history, showHexData } = this.props;
const { toWarning } = this.state;
const { toWarning, toError } = this.state;
return [
<SendContent
@ -369,6 +393,7 @@ export default class SendTransactionScreen extends Component {
}
showHexData={showHexData}
warning={toWarning}
error={toError}
/>,
<SendFooter key="send-footer" history={history} />,
];

@ -35,6 +35,7 @@ const INVALID_RECIPIENT_ADDRESS_NOT_ETH_NETWORK_ERROR =
'invalidAddressRecipientNotEthNetwork';
const REQUIRED_ERROR = 'required';
const KNOWN_RECIPIENT_ADDRESS_ERROR = 'knownAddressRecipient';
const CONTRACT_ADDRESS_ERROR = 'contractAddressError';
const CONFUSING_ENS_ERROR = 'confusingEnsDomain';
const SIMPLE_GAS_COST = '0x5208'; // Hex for 21000, cost of a simple send.
@ -45,6 +46,7 @@ export {
INSUFFICIENT_TOKENS_ERROR,
INVALID_RECIPIENT_ADDRESS_ERROR,
KNOWN_RECIPIENT_ADDRESS_ERROR,
CONTRACT_ADDRESS_ERROR,
INVALID_RECIPIENT_ADDRESS_NOT_ETH_NETWORK_ERROR,
MIN_GAS_LIMIT_DEC,
MIN_GAS_LIMIT_HEX,

@ -22,6 +22,7 @@ import {
getQrCodeData,
getSelectedAddress,
getAddressBook,
getSendTokenAddress,
} from '../../selectors';
import {
@ -65,6 +66,7 @@ function mapStateToProps(state) {
tokens: getTokens(state),
tokenBalance: getTokenBalance(state),
tokenContract: getSendTokenContract(state),
sendTokenAddress: getSendTokenAddress(state),
};
}

@ -15,7 +15,6 @@ import {
getCurrentChainId,
} from '../../selectors/selectors';
import {
getFromToken,
getQuotes,
clearSwapsState,
getTradeTxId,
@ -44,7 +43,6 @@ import {
import {
ERROR_FETCHING_QUOTES,
QUOTES_NOT_AVAILABLE_ERROR,
ETH_SWAPS_TOKEN_OBJECT,
SWAP_FAILED_ERROR,
OFFLINE_FOR_MAINTENANCE,
} from '../../helpers/constants/swaps';
@ -62,7 +60,6 @@ import {
getRpcPrefsForCurrentProvider,
} from '../../selectors';
import { useNewMetricEvent } from '../../hooks/useMetricEvent';
import { getValueFromWeiHex } from '../../helpers/utils/conversions.util';
import FeatureToggledRoute from '../../helpers/higher-order-components/feature-toggled-route';
import { TRANSACTION_STATUSES } from '../../../../shared/constants/transaction';
@ -88,8 +85,7 @@ export default function Swap() {
const isLoadingQuotesRoute = pathname === LOADING_QUOTES_ROUTE;
const fetchParams = useSelector(getFetchParams);
const { sourceTokenInfo = {}, destinationTokenInfo = {} } =
fetchParams?.metaData || {};
const { destinationTokenInfo = {} } = fetchParams?.metaData || {};
const [inputValue, setInputValue] = useState(fetchParams?.value || '');
const [maxSlippage, setMaxSlippage] = useState(fetchParams?.slippage || 2);
@ -111,20 +107,7 @@ export default function Swap() {
balance: ethBalance,
address: selectedAccountAddress,
} = selectedAccount;
const fetchParamsFromToken =
sourceTokenInfo?.symbol === 'ETH'
? {
...ETH_SWAPS_TOKEN_OBJECT,
string: getValueFromWeiHex({
value: ethBalance,
numberOfDecimals: 4,
toDenomination: 'ETH',
}),
balance: ethBalance,
}
: sourceTokenInfo;
const selectedFromToken =
useSelector(getFromToken) || fetchParamsFromToken || {};
const { destinationTokenAddedForSwap } = fetchParams || {};
const approveTxData =
@ -299,7 +282,6 @@ export default function Swap() {
return (
<BuildQuote
inputValue={inputValue}
selectedFromToken={selectedFromToken}
onInputChange={onInputChange}
ethBalance={ethBalance}
setMaxSlippage={setMaxSlippage}

@ -127,9 +127,16 @@ export function getMetaMaskAccountsRaw(state) {
}
export function getMetaMaskCachedBalances(state) {
const chainId = getCurrentChainId(state);
// Fallback to fetching cached balances from network id
// this can eventually be removed
const network = getCurrentNetworkId(state);
return state.metamask.cachedBalances[network];
return (
state.metamask.cachedBalances[chainId] ??
state.metamask.cachedBalances[network]
);
}
/**
@ -155,7 +162,7 @@ export function isBalanceCached(state) {
}
export function getSelectedAccountCachedBalance(state) {
const cachedBalances = state.metamask.cachedBalances[state.metamask.network];
const cachedBalances = getMetaMaskCachedBalances(state);
const selectedAddress = getSelectedAddress(state);
return cachedBalances && cachedBalances[selectedAddress];

@ -1,4 +1,5 @@
import assert from 'assert';
import { KOVAN_CHAIN_ID } from '../../../../shared/constants/network';
import {
getConnectedDomainsForSelectedAddress,
getOrderedConnectedAccountsForActiveTab,
@ -163,6 +164,9 @@ describe('selectors', function () {
url: 'https://remix.ethereum.org/',
},
metamask: {
provider: {
chainId: KOVAN_CHAIN_ID,
},
accounts: {
0x7250739de134d33ec7ab1ee592711e15098c9d2d: {
address: '0x7250739de134d33ec7ab1ee592711e15098c9d2d',

@ -14344,7 +14344,7 @@ iso-stream-http@~0.1.2:
inherits "^2.0.1"
readable-stream "^3.1.1"
iso-url@^0.4.4, iso-url@~0.4.4, iso-url@~0.4.6:
iso-url@~0.4.4, iso-url@~0.4.6:
version "0.4.6"
resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-0.4.6.tgz#45005c4af4984cad4f8753da411b41b74cf0a8a6"
integrity sha512-YQO7+aIe6l1aSJUKOx+Vrv08DlhZeLFIVfehG2L29KLSEb9RszqPXilxJRVpp57px36BddKR5ZsebacO5qG0tg==
@ -20087,11 +20087,11 @@ pull-window@^2.1.4:
dependencies:
looper "^2.0.0"
pull-ws@hugomrdias/pull-ws#fix/bundle-size:
version "3.3.1"
resolved "https://codeload.github.com/hugomrdias/pull-ws/tar.gz/8e2ce0bb3b1cd6804828316e937fff8e0bef6225"
pull-ws@^3.3.2, pull-ws@hugomrdias/pull-ws#fix/bundle-size:
version "3.3.2"
resolved "https://registry.yarnpkg.com/pull-ws/-/pull-ws-3.3.2.tgz#abac497a4800e74ab9a6d749c81a44d12d4e77b3"
integrity sha512-Bn4bcJsSzJGOQl4RBulDhG1FkcbDHSCXteI8Jg5k4X6X5TxVzZzKilWJ1WV2v4OnRXl2eYbtHFGsPl8Cr1xJzw==
dependencies:
iso-url "^0.4.4"
relative-url "^1.0.2"
safe-buffer "^5.1.1"
ws "^1.1.0"

Loading…
Cancel
Save