diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b718461b..d4e86a996 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,21 @@ # Changelog ## Current Develop Branch -- [#9612](https://github.com/MetaMask/metamask-extension/pull/9612): Update main-quote-summary designs/styles + +## 8.1.5 Wed Nov 18 2020 +- [#9871](https://github.com/MetaMask/metamask-extension/pull/9871): Show send text upon hover in main asset list +- [#9855](https://github.com/MetaMask/metamask-extension/pull/9855): Make edit icon and account name in account details modal focusable +- [#9853](https://github.com/MetaMask/metamask-extension/pull/9853): Provide alternative text for images where appropriate +- [#9869](https://github.com/MetaMask/metamask-extension/pull/9869): Remove CoinSwitch from the Deposit modal +- [#9883](https://github.com/MetaMask/metamask-extension/pull/9883): Move add contact button in fullscreen/expanded view of settings lower to expose the close button. +- [#9891](https://github.com/MetaMask/metamask-extension/pull/9891): Add token verification message to swaps build quote screen +- [#9896](https://github.com/MetaMask/metamask-extension/pull/9896): Show failed token balance updates +- [#9909](https://github.com/MetaMask/metamask-extension/pull/9909): Update asset page etherscan link to the address-filtered token page on Etherscan +- [#9910](https://github.com/MetaMask/metamask-extension/pull/9910): Revert "Show a 'send eth' button on home screen in full screen mode" +- [#9907](https://github.com/MetaMask/metamask-extension/pull/9907): Ensure "Known contract address" warning is shown on send screen even when changing asset +- [#9911](https://github.com/MetaMask/metamask-extension/pull/9911): Fix display of Ledger connection error +- [#9918](https://github.com/MetaMask/metamask-extension/pull/9918): Fix missing icon in asset page dropdown and in advanced gas modal button group + ## 8.1.4 Tue Nov 10 2020 - [#9687](https://github.com/MetaMask/metamask-extension/pull/9687): Allow speeding up of underpriced transactions diff --git a/app/_locales/am/messages.json b/app/_locales/am/messages.json index a62e23ddc..92ada3d3b 100644 --- a/app/_locales/am/messages.json +++ b/app/_locales/am/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask ካሊፎርኒያ ውስጥ ተዘጋጅቶ የተገነባ ነው።" }, - "buyCoinSwitch": { - "message": "በ CoinSwitch ላይ ይግዙ" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch ከ300 በላይ ክሪፕቶ ከረንሲዎችን በጥሩ ዋጋ ለመመንዘር ባለ አንድ ማቆሚያ መዳረሻ ነው።" - }, "buyWithWyre": { "message": "ETH በ Wyre ይግዙ" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "ከ Ropsten የሙከራ አውታረ መረብ ጋር በመገናኘት ላይ" }, - "continueToCoinSwitch": { - "message": "ወደ CoinSwitch ይቀጥሉ" - }, "continueToWyre": { "message": "ወደ Wyre ይቀጥሉ" }, diff --git a/app/_locales/ar/messages.json b/app/_locales/ar/messages.json index b868e8dd5..070e0ab64 100644 --- a/app/_locales/ar/messages.json +++ b/app/_locales/ar/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "تم تصميم وإنشاء MetaMask في ولاية كاليفورنيا." }, - "buyCoinSwitch": { - "message": "قم بالشراء على CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch هي الوجهة الوحيدة لتبادل أكثر من 300 عملة مشفرة بأفضل سعر." - }, "buyWithWyre": { "message": "قم بشراء عملة إيثير بواسطة Wyre" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "جارِ الاتصال بشبكة اختبار Ropsten " }, - "continueToCoinSwitch": { - "message": "المتابعة إلى CoinSwitch" - }, "continueToWyre": { "message": "الاستمرار إلى Wyre" }, diff --git a/app/_locales/bg/messages.json b/app/_locales/bg/messages.json index cc42761e2..30c39d8cf 100644 --- a/app/_locales/bg/messages.json +++ b/app/_locales/bg/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask е проектиран и създаден в Калифорния." }, - "buyCoinSwitch": { - "message": "Купете на CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch е дестинацията за еднократна размяна, с цел да обменя повече от 300 криптовалути с най-добър курс." - }, "buyWithWyre": { "message": "Купете ETH с Wyre" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Свързване с тестова мрежа Ropsten" }, - "continueToCoinSwitch": { - "message": "Продължете към CoinSwitch" - }, "continueToWyre": { "message": "Продължете към Wyre" }, diff --git a/app/_locales/bn/messages.json b/app/_locales/bn/messages.json index cfc2d49bd..3b07cc64f 100644 --- a/app/_locales/bn/messages.json +++ b/app/_locales/bn/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask ক্যালিফোর্নিয়াতে ডিজাইন করা এবং নির্মিত।" }, - "buyCoinSwitch": { - "message": "CoinSwitch এ ক্রয় করুন" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch হল 300রও বেশি ক্রিপ্টোকারেন্সি সর্বোত্তম হারে বিনময় করার সবথেকে ভালো স্থান।" - }, "buyWithWyre": { "message": "Wyre দিয়ে ETH ক্রয় করুন" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "রপস্টেন টেস্ট নেটওয়ার্কের সাথে সংযোগ করছে" }, - "continueToCoinSwitch": { - "message": "CoinSwitch এ অবিরত থাকুন" - }, "continueToWyre": { "message": "Wyre এ অবিরত রাখুন" }, diff --git a/app/_locales/ca/messages.json b/app/_locales/ca/messages.json index d1060d8bd..29b2bb7e3 100644 --- a/app/_locales/ca/messages.json +++ b/app/_locales/ca/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask ha estat dissenyat i desenvolupat a Califòrnia." }, - "buyCoinSwitch": { - "message": "Comprar a CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch és la destinació número 1 per a canviar més de 300 criptomonedes al millor preu." - }, "buyWithWyre": { "message": "Compra ETH amb Wyre" }, @@ -221,9 +215,6 @@ "connectingToRopsten": { "message": "Connectant a la xarxa de test Ropsten" }, - "continueToCoinSwitch": { - "message": "Continua a CoinSwitch" - }, "continueToWyre": { "message": "Continua a Wyre" }, diff --git a/app/_locales/cs/messages.json b/app/_locales/cs/messages.json index 41757f932..4dc29f2a3 100644 --- a/app/_locales/cs/messages.json +++ b/app/_locales/cs/messages.json @@ -49,12 +49,6 @@ "builtInCalifornia": { "message": "MetaMask je navržen a vytvořen v Kalifornii." }, - "buyCoinSwitch": { - "message": "Nákup na CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch je jediným místem, kde můžete vyměňovat více než 300 kryptocurrencí za nejlepší cenu." - }, "cancel": { "message": "Zrušit" }, @@ -79,9 +73,6 @@ "connectingToRopsten": { "message": "Připojuji se k Ropsten Test Network" }, - "continueToCoinSwitch": { - "message": "Přejít na CoinSwitch" - }, "contractDeployment": { "message": "Nasazení kontraktu" }, diff --git a/app/_locales/da/messages.json b/app/_locales/da/messages.json index 5e19e8d01..cb6109a44 100644 --- a/app/_locales/da/messages.json +++ b/app/_locales/da/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask er designet og bygget i Californien." }, - "buyCoinSwitch": { - "message": "Køb på CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch er den direkte destination for veksling af mere end 300 kryptovalutaer til den bedste sats." - }, "buyWithWyre": { "message": "Køb ETH med Wyre" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Forbinder til Ropsten-testnetværk" }, - "continueToCoinSwitch": { - "message": "Fortsæt til CoinSwitch" - }, "continueToWyre": { "message": "Fortsæt til Wyre" }, diff --git a/app/_locales/de/messages.json b/app/_locales/de/messages.json index f42343322..c656bd935 100644 --- a/app/_locales/de/messages.json +++ b/app/_locales/de/messages.json @@ -143,12 +143,6 @@ "builtInCalifornia": { "message": "MetaMask wurde in Kalifornien entwickelt und gebaut." }, - "buyCoinSwitch": { - "message": "Auf CoinSwitch kaufen" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch ist die One-Stop-Destination, um mehr als 300 Kryptowährungen zum besten Preis zu tauschen." - }, "buyWithWyre": { "message": "ETH mit Wyre kaufen" }, @@ -215,9 +209,6 @@ "connectingToRopsten": { "message": " Verbinde zum Ropsten Testnetzwerk" }, - "continueToCoinSwitch": { - "message": "Zu CoinSwitch fortfahren" - }, "continueToWyre": { "message": "Weiter zu Wyre" }, diff --git a/app/_locales/el/messages.json b/app/_locales/el/messages.json index 00d493f80..45d38521d 100644 --- a/app/_locales/el/messages.json +++ b/app/_locales/el/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "Το MetaMask έχει σχεδιαστεί και αναπτυχθεί στην Καλιφόρνια." }, - "buyCoinSwitch": { - "message": "Αγοράστε στο CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "Το CoinSwitch είναι ο προορισμός μιας στάσης για ανταλλαγή σε περισσότερα από 300 κρυπτονομίσματα στην καλύτερη ισοτιμία." - }, "buyWithWyre": { "message": "Αγοράστε ETH με το Wyre" }, @@ -221,9 +215,6 @@ "connectingToRopsten": { "message": "Σύνδεση με το Δίκτυο Δοκιμών Ropsten" }, - "continueToCoinSwitch": { - "message": "Συνέχεια με CoinSwitch" - }, "continueToWyre": { "message": "Συνεχίστε στο Wyre" }, diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 647552710..8a00369f4 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -43,6 +43,9 @@ "activityLog": { "message": "activity log" }, + "addAccount": { + "message": "Add an account" + }, "addAcquiredTokens": { "message": "Add the tokens you've acquired using MetaMask" }, @@ -221,12 +224,6 @@ "buy": { "message": "Buy" }, - "buyCoinSwitch": { - "message": "Buy on CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch is the one-stop destination to exchange more than 300 cryptocurrencies at the best rate." - }, "buyWithWyre": { "message": "Buy ETH with Wyre" }, @@ -361,9 +358,6 @@ "contactsSettingsDescription": { "message": "Add, edit, remove, and manage your contacts" }, - "continueToCoinSwitch": { - "message": "Continue to CoinSwitch" - }, "continueToWyre": { "message": "Continue to Wyre" }, @@ -635,6 +629,9 @@ "ethereumPublicAddress": { "message": "Ethereum Public Address" }, + "etherscan": { + "message": "Etherscan" + }, "etherscanView": { "message": "View account on Etherscan" }, @@ -1358,6 +1355,9 @@ "scanQrCode": { "message": "Scan QR Code" }, + "scrollDown": { + "message": "Scroll down" + }, "search": { "message": "Search" }, @@ -1841,6 +1841,9 @@ "swapUnknown": { "message": "Unknown" }, + "swapVerifyTokenExplanation": { + "message": "Multiple tokens can use the same name and symbol. Check Etherscan to verify this is the token you're looking for." + }, "swapViewToken": { "message": "View $1" }, @@ -2079,6 +2082,10 @@ "userName": { "message": "Username" }, + "verifyThisTokenOn": { + "message": "Verify this token on $1", + "description": "Points the user to etherscan as a place they can verify information about a token. $1 is replaced with the translation for \"etherscan\"" + }, "viewAccount": { "message": "View Account" }, diff --git a/app/_locales/es/messages.json b/app/_locales/es/messages.json index 8dd8cdd6f..542a8724f 100644 --- a/app/_locales/es/messages.json +++ b/app/_locales/es/messages.json @@ -127,12 +127,6 @@ "builtInCalifornia": { "message": "MetaMask fue diseñado y construido en California" }, - "buyCoinSwitch": { - "message": "Comprar en CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch es el destino de una sola parada para intercambiar más de 300 criptomonedas al mejor precio." - }, "cancel": { "message": "Cancelar" }, @@ -193,9 +187,6 @@ "connectingToRopsten": { "message": "Conectando a la red de test Ropsten" }, - "continueToCoinSwitch": { - "message": "Continuar a CoinSwitch" - }, "continueToWyre": { "message": "Continuar a Wyre" }, diff --git a/app/_locales/es_419/messages.json b/app/_locales/es_419/messages.json index f5cfccba2..46b86e032 100644 --- a/app/_locales/es_419/messages.json +++ b/app/_locales/es_419/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask se diseñó y creó en California." }, - "buyCoinSwitch": { - "message": "Comprar en CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch es un destino integral para intercambiar más de 300 tipos de criptomonedas con la mejor tasa." - }, "buyWithWyre": { "message": "Comprar ETH con Wyre" }, @@ -221,9 +215,6 @@ "connectingToRopsten": { "message": "Conexión con la red de prueba Ropsten" }, - "continueToCoinSwitch": { - "message": "Continuar a CoinSwitch" - }, "continueToWyre": { "message": "Continuar a Wyre" }, diff --git a/app/_locales/et/messages.json b/app/_locales/et/messages.json index 8a1c3ee52..93ae71db0 100644 --- a/app/_locales/et/messages.json +++ b/app/_locales/et/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask on projekteeritud ja loodud Californias." }, - "buyCoinSwitch": { - "message": "Osta CoinSwitchil" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch on ühe akna sihtpunkt enama kui 300 krüptoraha vahetamiseks parima hinnaga." - }, "buyWithWyre": { "message": "Ostke ETH-d Wyre'iga" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Ühendamine Ropsteni testvõrguga" }, - "continueToCoinSwitch": { - "message": "Avage ConSwitch" - }, "continueToWyre": { "message": "Ava Wyre" }, diff --git a/app/_locales/fa/messages.json b/app/_locales/fa/messages.json index f13059643..5713eed42 100644 --- a/app/_locales/fa/messages.json +++ b/app/_locales/fa/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask در کالیفورنیا طراحی و ساخته شده است." }, - "buyCoinSwitch": { - "message": "خرید بر اساس CoinSwitch " - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch یک مقصد یک-ایستگاه است تا بیش از 300 رمز ارز را در بهترین نرخ مبادله نماید." - }, "buyWithWyre": { "message": "ETH را توسط Wyre خریداری نمایید" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "در حال اتصال به شبکه آزمایشی Ropsten" }, - "continueToCoinSwitch": { - "message": "ادامه به CoinSwitch" - }, "continueToWyre": { "message": "ادامه به Wyre" }, diff --git a/app/_locales/fi/messages.json b/app/_locales/fi/messages.json index 53dd7496f..76eab95d3 100644 --- a/app/_locales/fi/messages.json +++ b/app/_locales/fi/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask on suunniteltu ja koottu Kaliforniassa." }, - "buyCoinSwitch": { - "message": "Osta CoinSwitchissa" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch on yhden pysähdyksen kohde yli 300 kryptovaluutan vaihtoon parhailla kursseilla." - }, "buyWithWyre": { "message": "Osta ETH:ta Wyrella" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Yhdistetään Ropstenin koeverkkoon" }, - "continueToCoinSwitch": { - "message": "Jatka CoinSwitchiin" - }, "continueToWyre": { "message": "Jatka Wyreen" }, diff --git a/app/_locales/fil/messages.json b/app/_locales/fil/messages.json index 6285949c6..150838e9c 100644 --- a/app/_locales/fil/messages.json +++ b/app/_locales/fil/messages.json @@ -131,12 +131,6 @@ "builtInCalifornia": { "message": "Ang MetaMask ay dinisenyo at binuo sa California." }, - "buyCoinSwitch": { - "message": "Bilhin sa CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "Ang CoinSwitch ay ang one-stop na destinasyon para magpapalit ng mahigit sa 300 cryptocurrency sa pinakamababang halaga." - }, "buyWithWyre": { "message": "Bumili ng ETH gamit ang Wyre" }, @@ -203,9 +197,6 @@ "connectingToRopsten": { "message": "Kumokonekta sa Ropsten Test Network" }, - "continueToCoinSwitch": { - "message": "Magpatuloy sa CoinSwitch" - }, "continueToWyre": { "message": "Magpatuloy sa Wyre" }, diff --git a/app/_locales/fr/messages.json b/app/_locales/fr/messages.json index 750591cfc..69f7ffb2c 100644 --- a/app/_locales/fr/messages.json +++ b/app/_locales/fr/messages.json @@ -140,12 +140,6 @@ "builtInCalifornia": { "message": "MetaMask est designé et developpé en Californie." }, - "buyCoinSwitch": { - "message": "Acheter sur CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch est la destination unique pour échanger plus de 300 crypto-devises au meilleur taux." - }, "buyWithWyre": { "message": "Acheter ETH avec Wyre" }, @@ -215,9 +209,6 @@ "connectingToRopsten": { "message": "Connexion au réseau de test Ropsten" }, - "continueToCoinSwitch": { - "message": "Continuer vers CoinSwitch" - }, "continueToWyre": { "message": "Continuer vers Wyre" }, diff --git a/app/_locales/he/messages.json b/app/_locales/he/messages.json index 6a0bc2cbd..b2642a218 100644 --- a/app/_locales/he/messages.json +++ b/app/_locales/he/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask תוכנן ונבנה בקליפורניה." }, - "buyCoinSwitch": { - "message": "רכישה ב-CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch הוא היעד עם כלל האפשרויות להחלפת יותר מ-300 מטבעות קריפטו בשער הטוב ביותר." - }, "buyWithWyre": { "message": "רכישת את'ר עם Wyre" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "מתחבר אל רשת בדיקה Ropsten " }, - "continueToCoinSwitch": { - "message": "המשך אל CoinSwitch" - }, "continueToWyre": { "message": "המשך ל-Wyre" }, diff --git a/app/_locales/hi/messages.json b/app/_locales/hi/messages.json index da83a04b7..f759ed46a 100644 --- a/app/_locales/hi/messages.json +++ b/app/_locales/hi/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "मेटामास्क का डिजाइन और निर्माण कैलिफोर्निया में किया गया है।" }, - "buyCoinSwitch": { - "message": "CoinSwitch पर खरीदें" - }, - "buyCoinSwitchExplainer": { - "message": "300 से अधिक क्रिप्टोकरेंसी को सबसे अच्छी दर पर एक्सचेंज करने के लिए CoinSwitch सर्वोत्तम स्थल है।" - }, "buyWithWyre": { "message": "Wyre से ETH खरीदें" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "रोपस्टेन टेस्ट नेटवर्क से कनेक्ट करना" }, - "continueToCoinSwitch": { - "message": "कॉइनस्विच पर जारी रखें " - }, "continueToWyre": { "message": "Wyre को जारी रखें" }, diff --git a/app/_locales/hn/messages.json b/app/_locales/hn/messages.json index 4bdac8559..fb588fb56 100644 --- a/app/_locales/hn/messages.json +++ b/app/_locales/hn/messages.json @@ -46,12 +46,6 @@ "builtInCalifornia": { "message": "मेटामास्क कैलिफ़ोर्निया में डिज़ाइन और बनाया गया है।" }, - "buyCoinSwitch": { - "message": "कॉइनस्विच पर खरीदें" - }, - "buyCoinSwitchExplainer": { - "message": "कॉइनस्विच 300 से अधिक क्रिप्टोक्रांसियों को सर्वोत्तम दर पर विनिमय करने का एक-स्टॉप गंतव्य है।" - }, "cancel": { "message": "रद्द करें" }, @@ -61,9 +55,6 @@ "confirmPassword": { "message": "पासवर्ड की पुष्टि करें" }, - "continueToCoinSwitch": { - "message": "कॉइनस्विच को ब्हेजना जारी रखें" - }, "contractDeployment": { "message": "अनुबंध परिनियोजन व तैनाती" }, diff --git a/app/_locales/hr/messages.json b/app/_locales/hr/messages.json index 1564bd012..eb4f9eae1 100644 --- a/app/_locales/hr/messages.json +++ b/app/_locales/hr/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask je osmišljen i izrađen u Kaliforniji." }, - "buyCoinSwitch": { - "message": "Kupujte na usluzi CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "Usluga CoinSwitch predstavlja mjesto stalne razmjene više od 300 kriptovaluta po najboljim tečajevima." - }, "buyWithWyre": { "message": "Kupi ETH Wyerom" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Povezivanje na testnu mrežu Ropsten" }, - "continueToCoinSwitch": { - "message": "Nastavi na uslugu CoinSwitch" - }, "continueToWyre": { "message": "Nastavi na uslugu Wyre" }, diff --git a/app/_locales/ht/messages.json b/app/_locales/ht/messages.json index 18901dcc8..1fdfa5843 100644 --- a/app/_locales/ht/messages.json +++ b/app/_locales/ht/messages.json @@ -76,12 +76,6 @@ "builtInCalifornia": { "message": "MetaMask fèt e bati nan California." }, - "buyCoinSwitch": { - "message": "Achte sou CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch se destinasyon nan yon sèl-Stop nan echanj plis pase 300 kriptoksèr nan pousantaj la pi byen." - }, "cancel": { "message": "Anile" }, @@ -121,9 +115,6 @@ "connectingToRopsten": { "message": "Konekte ak Ropsten Tès Rezo a" }, - "continueToCoinSwitch": { - "message": "Kontinye CoinSwitch" - }, "contractDeployment": { "message": "Kontra Deplwaman" }, diff --git a/app/_locales/hu/messages.json b/app/_locales/hu/messages.json index 9188af756..effc61461 100644 --- a/app/_locales/hu/messages.json +++ b/app/_locales/hu/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "A MetaMaskot Kaliforniában tervezték és hozták létre." }, - "buyCoinSwitch": { - "message": "Vegye meg a CoinSwitchen" - }, - "buyCoinSwitchExplainer": { - "message": "A CoinSwitch a legjobb hely több mint 300 cryptovaluta legjobb árfolyamon történő átváltására." - }, "buyWithWyre": { "message": "Vásároljon ETH-t a Wyre-rel" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Csatlakozás a Ropsten teszthálózathoz" }, - "continueToCoinSwitch": { - "message": "Tovább a CoinSwitch-re" - }, "continueToWyre": { "message": "Tovább a Wyre-re" }, diff --git a/app/_locales/id/messages.json b/app/_locales/id/messages.json index 9eff50642..fceea2c05 100644 --- a/app/_locales/id/messages.json +++ b/app/_locales/id/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask dirancang dan dibangun di California." }, - "buyCoinSwitch": { - "message": "Beli di CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch adalah destinasi serba-ada untuk pertukaran lebih dari 300 mata uang kripto dengan kurs terbaik." - }, "buyWithWyre": { "message": "Membeli ETH dengan Wyre" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Menghubungkan ke Jaringan Uji Coba Ropsten " }, - "continueToCoinSwitch": { - "message": "Lanjut ke CoinSwitch" - }, "continueToWyre": { "message": "Lanjutkan ke Wyre" }, diff --git a/app/_locales/it/messages.json b/app/_locales/it/messages.json index 98bd7c936..da1dcdc8b 100644 --- a/app/_locales/it/messages.json +++ b/app/_locales/it/messages.json @@ -208,12 +208,6 @@ "buy": { "message": "Compra" }, - "buyCoinSwitch": { - "message": "Compra su CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch è la destinazione one-stop per lo scambio di oltre 300 criptovalute alla migliore tariffa." - }, "buyWithWyre": { "message": "Compra ETH con Wyre" }, @@ -348,9 +342,6 @@ "contactsSettingsDescription": { "message": "Aggiungi, modifica, rimuovi e gestisci i tuoi contatti" }, - "continueToCoinSwitch": { - "message": "Continua su CoinSwitch" - }, "continueToWyre": { "message": "Continua su Wyre" }, diff --git a/app/_locales/ja/messages.json b/app/_locales/ja/messages.json index 737845b3b..e0360ced8 100644 --- a/app/_locales/ja/messages.json +++ b/app/_locales/ja/messages.json @@ -112,12 +112,6 @@ "blockiesIdenticon": { "message": "Blockies Identicon を使用" }, - "buyCoinSwitch": { - "message": "CoinSwitchのサイトで購入" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitchは、最高のレートで300以上の暗号化交換を行うワンストップの宛先です。" - }, "cancel": { "message": "キャンセル" }, @@ -130,9 +124,6 @@ "confirmPassword": { "message": "パスワードの確認" }, - "continueToCoinSwitch": { - "message": "CoinSwitchを開く" - }, "contractDeployment": { "message": "コントラクトのデプロイ" }, diff --git a/app/_locales/kn/messages.json b/app/_locales/kn/messages.json index d482f073e..baeeba4a0 100644 --- a/app/_locales/kn/messages.json +++ b/app/_locales/kn/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask ಅನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ ಮತ್ತು ಕ್ಯಾಲಿಫೋರ್ನಿಯಾದಲ್ಲಿ ನಿರ್ಮಿಸಲಾಗಿದೆ." }, - "buyCoinSwitch": { - "message": "ಕಾಯಿನ್‌ಸ್ವೀಚ್‌ನಲ್ಲಿ ಖರೀದಿಸಿ" - }, - "buyCoinSwitchExplainer": { - "message": "300 ಕ್ಕೂ ಹೆಚ್ಚು ಕ್ರಿಪ್ಟೋಕರೆನ್ಸಿಗಳನ್ನು ಉತ್ತಮ ದರದಲ್ಲಿ ವಿನಿಮಯ ಮಾಡಿಕೊಳ್ಳುವ ಒಂದು ತಾಣವೆಂದರೆ ಕಾಯಿನ್‌ಸ್ವಿಚ್ ಆಗಿದೆ." - }, "buyWithWyre": { "message": "Wyre ನೊಂದಿಗೆ ETH ಖರೀದಿಸಿ" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Ropsten ಪರೀಕ್ಷಾ ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ" }, - "continueToCoinSwitch": { - "message": "CoinSwitch ಗೆ ಮುಂದುವರಿಸಿ" - }, "continueToWyre": { "message": "Wyre ಗೆ ಮುಂದುವರಿಸಿ" }, diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json index ec4b28b2f..1b16838f1 100644 --- a/app/_locales/ko/messages.json +++ b/app/_locales/ko/messages.json @@ -143,12 +143,6 @@ "builtInCalifornia": { "message": "메타마스크는 캘리포니아에서 디자인되고 만들어졌습니다." }, - "buyCoinSwitch": { - "message": "코인 스위치 구입" - }, - "buyCoinSwitchExplainer": { - "message": "코인 스위치는 최상의 속도로 300 개 이상의 크립토 카드를 교환하는 원 스톱 목적지입니다." - }, "buyWithWyre": { "message": "Wyre로 ETH 구매" }, @@ -221,9 +215,6 @@ "connectingToRopsten": { "message": "Ropsten 테스트넷 접속 중" }, - "continueToCoinSwitch": { - "message": "코인 스위치 계속하기" - }, "continueToWyre": { "message": "Wyre로 계속 진행" }, diff --git a/app/_locales/lt/messages.json b/app/_locales/lt/messages.json index b8596bc82..37b05da6e 100644 --- a/app/_locales/lt/messages.json +++ b/app/_locales/lt/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "„MetaMask“ suprojektuota ir įdiegta Kalifornijoje." }, - "buyCoinSwitch": { - "message": "Pirkti „CoinSwitch“" - }, - "buyCoinSwitchExplainer": { - "message": "„CoinSwitch“ – tai lengvai pasiekiama vieta keisti per 300 kriptovaliutų geriausiu santykiu." - }, "buyWithWyre": { "message": "Pirkti ETH su „Wyre“" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Jungiamasi prie „Ropsten“ bandomojo tinklo" }, - "continueToCoinSwitch": { - "message": "Tęsti su „CoinSwitch“" - }, "continueToWyre": { "message": "Tęsti su „Wyre“" }, diff --git a/app/_locales/lv/messages.json b/app/_locales/lv/messages.json index f3362994c..1586d9f5b 100644 --- a/app/_locales/lv/messages.json +++ b/app/_locales/lv/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask ir izstrādāta un izveidota Kalifornijā." }, - "buyCoinSwitch": { - "message": "Pirkt CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch ir vienots galamērķis vairāk nekā 300 kriptovalūtu maiņai, izmantojot labāko kursu." - }, "buyWithWyre": { "message": "Pirkt ETH ar Wyre" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Pieslēdzas Ropsten testa tīklam" }, - "continueToCoinSwitch": { - "message": "Iet uz CoinSwitch" - }, "continueToWyre": { "message": "Pāriet uz Wyre" }, diff --git a/app/_locales/ms/messages.json b/app/_locales/ms/messages.json index 04eeb3342..d141c683b 100644 --- a/app/_locales/ms/messages.json +++ b/app/_locales/ms/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask direka dan dibina di California." }, - "buyCoinSwitch": { - "message": "Beli di CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch ialah tempat sehentian untuk menukar lebih daripada 300 mata wang kripto dengan kadar terbaik." - }, "buyWithWyre": { "message": "Beli ETH dengan Wyre" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Menyambungkan kepada Rangkaian Ujian Ropsten" }, - "continueToCoinSwitch": { - "message": "Teruskan ke CoinSwitch" - }, "continueToWyre": { "message": "Teruskan ke Wyre" }, diff --git a/app/_locales/nl/messages.json b/app/_locales/nl/messages.json index f6ef6b7dc..da3b96936 100644 --- a/app/_locales/nl/messages.json +++ b/app/_locales/nl/messages.json @@ -43,12 +43,6 @@ "builtInCalifornia": { "message": "MetaMask is ontworpen en gebouwd in Californië." }, - "buyCoinSwitch": { - "message": "Koop op CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch is de one-stop-bestemming om meer dan 300 cryptocurrencies tegen de beste prijs in te wisselen." - }, "cancel": { "message": "Annuleer" }, @@ -58,9 +52,6 @@ "confirmPassword": { "message": "bevestig wachtwoord" }, - "continueToCoinSwitch": { - "message": "Ga verder naar CoinSwitch" - }, "contractDeployment": { "message": "Contractimplementatie" }, diff --git a/app/_locales/no/messages.json b/app/_locales/no/messages.json index 18ef48537..80f116b75 100644 --- a/app/_locales/no/messages.json +++ b/app/_locales/no/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask ble bygget og designet i California." }, - "buyCoinSwitch": { - "message": "Kjøp på CoinSwitch " - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch er destinasjonen som utveksler mer enn 300 typer kryptovaluta med den beste kursen." - }, "buyWithWyre": { "message": "Kjøp ETH med Wyre" }, @@ -221,9 +215,6 @@ "connectingToRopsten": { "message": "Kobler til Ropsten testnettverk" }, - "continueToCoinSwitch": { - "message": "Fortsett med CoinSwitch " - }, "continueToWyre": { "message": "Fortsett til Wyre " }, diff --git a/app/_locales/ph/messages.json b/app/_locales/ph/messages.json index 6cb59f6a0..a87b87998 100644 --- a/app/_locales/ph/messages.json +++ b/app/_locales/ph/messages.json @@ -31,12 +31,6 @@ "balance": { "message": "Balanse:" }, - "buyCoinSwitch": { - "message": "Bumili sa CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "Ang CoinSwitch ay isang one-stop destination upang makipagpalitan ng higit sa 300 mga cryptocurrency sa pinakamahusay na rate." - }, "cancel": { "message": "Kanselahin" }, @@ -46,9 +40,6 @@ "confirmPassword": { "message": "Tiyakin ang Password" }, - "continueToCoinSwitch": { - "message": "Magpatuloy sa CoinSwitch" - }, "contractDeployment": { "message": "Pag-deploy ng Contract" }, diff --git a/app/_locales/pl/messages.json b/app/_locales/pl/messages.json index 4ad06b5df..7f3dc09a9 100644 --- a/app/_locales/pl/messages.json +++ b/app/_locales/pl/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask został zaprojektowany i stworzony w Kaliforni." }, - "buyCoinSwitch": { - "message": "Kup w CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch to miejsce, w którym możesz wymieniać ponad 300 kryptowalut po najlepszym kursie." - }, "buyWithWyre": { "message": "Kup ETH poprzez Wyre" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Łączenie z siecią testową Ropsten" }, - "continueToCoinSwitch": { - "message": "Przejdź do CoinSwitch" - }, "continueToWyre": { "message": "Przejdź do Wyre" }, diff --git a/app/_locales/pt/messages.json b/app/_locales/pt/messages.json index da8314cad..3e4aad05e 100644 --- a/app/_locales/pt/messages.json +++ b/app/_locales/pt/messages.json @@ -46,12 +46,6 @@ "builtInCalifornia": { "message": "MetaMask é desenhada e construída na California." }, - "buyCoinSwitch": { - "message": "Comprar no CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch é o destino único para trocar mais de 300 moedas criptográficas com a melhor taxa." - }, "cancel": { "message": "Cancelar" }, @@ -61,9 +55,6 @@ "confirmPassword": { "message": "Confirmar Palavra-passe" }, - "continueToCoinSwitch": { - "message": "Continuar para o CoinSwitch" - }, "contractDeployment": { "message": "Distribuição do Contrato" }, diff --git a/app/_locales/pt_BR/messages.json b/app/_locales/pt_BR/messages.json index 04debdecf..8973b3544 100644 --- a/app/_locales/pt_BR/messages.json +++ b/app/_locales/pt_BR/messages.json @@ -143,12 +143,6 @@ "builtInCalifornia": { "message": "O MetaMask foi projetado e desenvolvido na Califórnia." }, - "buyCoinSwitch": { - "message": "Compre no CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "O CoinSwitch é o destino único para trocar mais de 300 criptomoedas com a melhor taxa." - }, "buyWithWyre": { "message": "Comprar ETH com Wyre" }, @@ -218,9 +212,6 @@ "connectingToRopsten": { "message": "Conectando à Rede de Testes Ropsten" }, - "continueToCoinSwitch": { - "message": "Continuar para CoinSwitch" - }, "continueToWyre": { "message": "Continuar para Wyre" }, diff --git a/app/_locales/ro/messages.json b/app/_locales/ro/messages.json index 8f0997e65..890b5758b 100644 --- a/app/_locales/ro/messages.json +++ b/app/_locales/ro/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask este concepută și creată în California." }, - "buyCoinSwitch": { - "message": "Cumpărați pe CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch este destinația unică pentru a schimba peste 300 de cripto monede la cele mai bune cursuri." - }, "buyWithWyre": { "message": "Cumpărați ETH cu Wyre" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Se conectează la rețeaua de test Ropsten" }, - "continueToCoinSwitch": { - "message": "Continuare către CoinSwitch" - }, "continueToWyre": { "message": "Continuați la Wyre" }, diff --git a/app/_locales/ru/messages.json b/app/_locales/ru/messages.json index e2927be2a..c33af5cd1 100644 --- a/app/_locales/ru/messages.json +++ b/app/_locales/ru/messages.json @@ -145,12 +145,6 @@ "builtInCalifornia": { "message": "MetaMask спроектирован и разработан в Калифорнии." }, - "buyCoinSwitch": { - "message": "Купить на CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch - это однонаправленное место для обмена более 300 криптоконверсий по наилучшей цене." - }, "buyWithWyre": { "message": "Купить ETH на Wyre" }, @@ -223,9 +217,6 @@ "connectingToRopsten": { "message": "Соединение с тестовой сетью Ropsten" }, - "continueToCoinSwitch": { - "message": "Продолжить в CoinSwitch" - }, "continueToWyre": { "message": "Продолжить на Wyre" }, diff --git a/app/_locales/sk/messages.json b/app/_locales/sk/messages.json index 718e32616..08bd00cc6 100644 --- a/app/_locales/sk/messages.json +++ b/app/_locales/sk/messages.json @@ -140,12 +140,6 @@ "builtInCalifornia": { "message": "MetaMask je navržen a vytvořen v Kalifornii." }, - "buyCoinSwitch": { - "message": "Kúpiť na CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch je jedno miesto, kde si môžete vymieňať viac ako 300 kryptomien za najlepšiu cenu." - }, "buyWithWyre": { "message": "Kúpte ETH s Wyre" }, @@ -218,9 +212,6 @@ "connectingToRopsten": { "message": "Připojuji se k Ropsten Test Network" }, - "continueToCoinSwitch": { - "message": "Pokračovať na CoinSwitch" - }, "continueToWyre": { "message": "Pokračovať na Wyre" }, diff --git a/app/_locales/sl/messages.json b/app/_locales/sl/messages.json index cf1b3ad00..8c92173c0 100644 --- a/app/_locales/sl/messages.json +++ b/app/_locales/sl/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask je zasnovan in ustvarjen v Kaliforniji." }, - "buyCoinSwitch": { - "message": "Kupi na CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch je destinacija na enem mestu za izmenjavo več kot 300 kriptokotovitev po najboljši hitrosti." - }, "buyWithWyre": { "message": "Kupi ETH z Wyre" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Povezovanje na testno omrežje Ropsten" }, - "continueToCoinSwitch": { - "message": "Nadaljuj na CoinSwitch" - }, "continueToWyre": { "message": "Nadaljuj na Wyre" }, diff --git a/app/_locales/sr/messages.json b/app/_locales/sr/messages.json index 730f4b5e4..bb2276471 100644 --- a/app/_locales/sr/messages.json +++ b/app/_locales/sr/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask je dizajniran i izgrađen u Kaliforniji." }, - "buyCoinSwitch": { - "message": "Kupujte na CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch je odredište gde na jednom mestu možete razmeniti više od 300 kripto valuta po najboljem kursu." - }, "buyWithWyre": { "message": "Kupite ETH preko servisa Wyre" }, @@ -221,9 +215,6 @@ "connectingToRopsten": { "message": "Povezuje se na Ropsten Test mrežu" }, - "continueToCoinSwitch": { - "message": "Nastavi na CoinSwitch" - }, "continueToWyre": { "message": "Nastavite ka Wyre" }, diff --git a/app/_locales/sv/messages.json b/app/_locales/sv/messages.json index bb5e8e5a5..d902d2fe2 100644 --- a/app/_locales/sv/messages.json +++ b/app/_locales/sv/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask är skapat och utformat i Kalifornien." }, - "buyCoinSwitch": { - "message": "Köp på CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch är allt-i-ett-platsen för att växla mer än 300 kryptovalutor till bästa kurs." - }, "buyWithWyre": { "message": "Köp ETH med Wyre" }, @@ -218,9 +212,6 @@ "connectingToRopsten": { "message": "Ansluter till Ropsten Test Network" }, - "continueToCoinSwitch": { - "message": "Fortsätt till CoinSwitch" - }, "continueToWyre": { "message": "Fortsätt till Wyre" }, diff --git a/app/_locales/sw/messages.json b/app/_locales/sw/messages.json index 4244565b8..25911569a 100644 --- a/app/_locales/sw/messages.json +++ b/app/_locales/sw/messages.json @@ -143,12 +143,6 @@ "builtInCalifornia": { "message": "MetaMask imeundwa na kutengenezwa California." }, - "buyCoinSwitch": { - "message": "Nunua kwenye CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch ni kituo cha kubadilisha fedha za kidijitali zaidi ya 300 kwa bei nzuri kabisa." - }, "buyWithWyre": { "message": "Nunua ETH kwa kutumia Wyre" }, @@ -218,9 +212,6 @@ "connectingToRopsten": { "message": "Inaunganisha kwenye Mtandao wa Majaribio wa Ropsten" }, - "continueToCoinSwitch": { - "message": "Endelea kwenye CoinSwitch" - }, "continueToWyre": { "message": "Endelea kwenye Wyre" }, diff --git a/app/_locales/ta/messages.json b/app/_locales/ta/messages.json index f0ca60e9c..efb10b800 100644 --- a/app/_locales/ta/messages.json +++ b/app/_locales/ta/messages.json @@ -58,12 +58,6 @@ "builtInCalifornia": { "message": "மேடமஸ்க் வடிவமைக்கப்பட்டு கலிபோர்னியாவில் கட்டப்பட்டுள்ளது." }, - "buyCoinSwitch": { - "message": "நாணயம் ஸ்விட்சில் வாங்கவும்" - }, - "buyCoinSwitchExplainer": { - "message": "சிறந்த விகிதத்தில் 300 க்கும் அதிகமான cryptocurrencies ஐ பரிமாறிக்கொள்ள ஒரு நாணயமாற்று இலக்கு நாணயம் ஸ்விட்ச் ஆகும்." - }, "cancel": { "message": "ரத்து செய்" }, @@ -94,9 +88,6 @@ "connectingToRopsten": { "message": "ரொப்ஸ்டென் டெஸ்ட் நெட்வொர்க்குடன் இணைக்கிறது" }, - "continueToCoinSwitch": { - "message": "நாணயம் மாறாமல் தொடர்க" - }, "contractDeployment": { "message": "ஒப்பந்த வரிசைப்படுத்தல்" }, diff --git a/app/_locales/th/messages.json b/app/_locales/th/messages.json index f54947489..951958eff 100644 --- a/app/_locales/th/messages.json +++ b/app/_locales/th/messages.json @@ -52,12 +52,6 @@ "builtInCalifornia": { "message": "MetaMask ออกแบบและพัฒนาที่แคลิฟอร์เนีย" }, - "buyCoinSwitch": { - "message": "ซื้อด้วย CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch เป็นจุดหมายปลายทางแบบครบวงจรในการแลกเปลี่ยนสกุลเงินมากกว่า 300 ครั้งในอัตราที่ดีที่สุด" - }, "cancel": { "message": "ยกเลิก" }, @@ -88,9 +82,6 @@ "connectingToRopsten": { "message": "เชื่อมต่อกับเครือข่ายทดสอบ Ropsten" }, - "continueToCoinSwitch": { - "message": "ไปที่ CoinSwitch" - }, "continueToWyre": { "message": "ไปที่ Wyre" }, diff --git a/app/_locales/tr/messages.json b/app/_locales/tr/messages.json index 5868000c8..929aa00aa 100644 --- a/app/_locales/tr/messages.json +++ b/app/_locales/tr/messages.json @@ -49,12 +49,6 @@ "builtInCalifornia": { "message": "MetaMask California'da tasarlandı ve yaratıldı" }, - "buyCoinSwitch": { - "message": "CoinSwitch'de satın al" - }, - "buyCoinSwitchExplainer": { - "message": "Cairnswich, 300'den fazla kriptona en iyi oranda eşlik eden tek durak noktasıdır." - }, "cancel": { "message": "Vazgeç" }, @@ -79,9 +73,6 @@ "connectingToRopsten": { "message": "Ropsten Test Ağına bağlanıyor" }, - "continueToCoinSwitch": { - "message": "CoinSwitch'e devam et" - }, "contractDeployment": { "message": "Sözleşme kurulumu" }, diff --git a/app/_locales/uk/messages.json b/app/_locales/uk/messages.json index 958376615..53c845fe1 100644 --- a/app/_locales/uk/messages.json +++ b/app/_locales/uk/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask розроблено й створено в Каліфорнії." }, - "buyCoinSwitch": { - "message": "Купувати на CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch це точка призначення з однією зупинкою для обміну більш ніж 300 криптовалют за найкращими курсами. " - }, "buyWithWyre": { "message": "Купити ETH через Wyre" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "Під'єднуємось до Тестової мережі Ropsten" }, - "continueToCoinSwitch": { - "message": "Продовжити в CoinSwitch" - }, "continueToWyre": { "message": "Продовжити у Wyre" }, diff --git a/app/_locales/vi/messages.json b/app/_locales/vi/messages.json index cfdcf467e..ca18217ee 100644 --- a/app/_locales/vi/messages.json +++ b/app/_locales/vi/messages.json @@ -34,12 +34,6 @@ "balance": { "message": "Số dư:" }, - "buyCoinSwitch": { - "message": "Mua trên CoinSwitch" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch là điểm đến duy nhất để trao đổi hơn 300 tiền điện tử với tốc độ tốt nhất." - }, "cancel": { "message": "Hủy" }, @@ -49,9 +43,6 @@ "confirmPassword": { "message": "Xác nhận mật khẩu" }, - "continueToCoinSwitch": { - "message": "Tiếp tục đến CoinSwitch" - }, "contractDeployment": { "message": "Triển khai hợp đồng" }, diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json index 493c98310..6330781c6 100644 --- a/app/_locales/zh_CN/messages.json +++ b/app/_locales/zh_CN/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask在加利福尼亚设计和制造。" }, - "buyCoinSwitch": { - "message": "在CoinSwitch上购买" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch是以最优惠的价格交换超过300种加密货币的一站式目的地。" - }, "buyWithWyre": { "message": "使用 Wyre 购买 ETH" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "正在连接到Ropsten测试网络" }, - "continueToCoinSwitch": { - "message": "继续访问 CoinSwitch" - }, "continueToWyre": { "message": "继续前往 Wyre" }, diff --git a/app/_locales/zh_TW/messages.json b/app/_locales/zh_TW/messages.json index c2cad7c58..3f4ec252d 100644 --- a/app/_locales/zh_TW/messages.json +++ b/app/_locales/zh_TW/messages.json @@ -146,12 +146,6 @@ "builtInCalifornia": { "message": "MetaMask 是在加州設計製造" }, - "buyCoinSwitch": { - "message": "在CoinSwitch上购买" - }, - "buyCoinSwitchExplainer": { - "message": "CoinSwitch是以最优惠的价格交换超过300种加密货币的一站式目的地。" - }, "buyWithWyre": { "message": "用 Wyre 購買 ETH" }, @@ -224,9 +218,6 @@ "connectingToRopsten": { "message": "連線到 Ropsten 測試網路" }, - "continueToCoinSwitch": { - "message": "繼續前往 CoinSwitch" - }, "continueToWyre": { "message": "繼續至 Wyre" }, diff --git a/app/images/coinswitch_logo.png b/app/images/coinswitch_logo.png deleted file mode 100644 index d13d55c32..000000000 Binary files a/app/images/coinswitch_logo.png and /dev/null differ diff --git a/app/manifest/_base.json b/app/manifest/_base.json index a83ba5dff..c16bc2fbf 100644 --- a/app/manifest/_base.json +++ b/app/manifest/_base.json @@ -64,6 +64,6 @@ "notifications" ], "short_name": "__MSG_appName__", - "version": "8.1.4", + "version": "8.1.5", "web_accessible_resources": ["inpage.js", "phishing.html"] } diff --git a/app/notification.html b/app/notification.html index cb8448a37..3419acdca 100644 --- a/app/notification.html +++ b/app/notification.html @@ -29,8 +29,8 @@
- - + +
diff --git a/app/scripts/background.js b/app/scripts/background.js index 99242f871..c57710bd2 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -225,10 +225,7 @@ function setupController(initState, initLangCode) { const controller = new MetamaskController({ infuraProjectId: process.env.INFURA_PROJECT_ID, // User confirmation callbacks: - showUnconfirmedMessage: triggerUi, - showUnapprovedTx: triggerUi, - showPermissionRequest: triggerUi, - showUnlockRequest: triggerUi, + showUserConfirmation: triggerUi, openPopup, // initial state initState, diff --git a/app/scripts/controllers/preferences.js b/app/scripts/controllers/preferences.js index 5df65dfe5..5e376a797 100644 --- a/app/scripts/controllers/preferences.js +++ b/app/scripts/controllers/preferences.js @@ -5,6 +5,7 @@ import { isValidAddress, sha3, bufferToHex } from 'ethereumjs-util' import ethers from 'ethers' import log from 'loglevel' import { isPrefixedFormattedHexString } from '../lib/util' +import { LISTED_CONTRACT_ADDRESSES } from '../../../shared/constants/tokens' import { addInternalMethodPrefix } from './permissions' import { NETWORK_TYPE_TO_ID_MAP } from './network/enums' @@ -175,7 +176,13 @@ export default class PreferencesController { const suggested = this.getSuggestedTokens() const { rawAddress, symbol, decimals, image } = tokenOpts const address = normalizeAddress(rawAddress) - const newEntry = { address, symbol, decimals, image } + const newEntry = { + address, + symbol, + decimals, + image, + unlisted: !LISTED_CONTRACT_ADDRESSES.includes(address.toLowerCase()), + } suggested[address] = newEntry this.store.updateState({ suggestedTokens: suggested }) } diff --git a/app/scripts/lib/buy-eth-url.js b/app/scripts/lib/buy-eth-url.js index 674d031fa..9c2e1c522 100644 --- a/app/scripts/lib/buy-eth-url.js +++ b/app/scripts/lib/buy-eth-url.js @@ -18,8 +18,6 @@ export default function getBuyEthUrl({ network, address, service }) { switch (service) { case 'wyre': return `https://pay.sendwyre.com/purchase?dest=ethereum:${address}&destCurrency=ETH&accountId=AC-7AG3W4XH4N2&paymentMethod=debit-card` - case 'coinswitch': - return `https://metamask.coinswitch.co/?address=${address}&to=eth` case 'metamask-faucet': return 'https://faucet.metamask.io/' case 'rinkeby-faucet': diff --git a/app/scripts/lib/rpc-method-middleware/handlers/log-web3-usage.js b/app/scripts/lib/rpc-method-middleware/handlers/log-web3-usage.js index dbff526bb..290c52b94 100644 --- a/app/scripts/lib/rpc-method-middleware/handlers/log-web3-usage.js +++ b/app/scripts/lib/rpc-method-middleware/handlers/log-web3-usage.js @@ -44,7 +44,6 @@ function logWeb3UsageHandler(req, res, _next, end, { origin, sendMetrics }) { recordedWeb3Usage[origin][path] = true sendMetrics({ - matomo: true, event: `Website Used window.web3`, category: 'inpage_provider', properties: { action, web3Path: path }, diff --git a/app/scripts/lib/setupWeb3.js b/app/scripts/lib/setupWeb3.js index 922d29cf5..8f196a94e 100644 --- a/app/scripts/lib/setupWeb3.js +++ b/app/scripts/lib/setupWeb3.js @@ -71,15 +71,19 @@ export default function setupWeb3(log) { for (const [key, path] of applyTrapKeys) { web3[topKey][key] = new Proxy(web3[topKey][key], { apply: (...params) => { - window.ethereum.request({ - method: 'metamask_logInjectedWeb3Usage', - params: [ - { - action: 'apply', - path, - }, - ], - }) + try { + window.ethereum.request({ + method: 'metamask_logInjectedWeb3Usage', + params: [ + { + action: 'apply', + path, + }, + ], + }) + } catch (error) { + log.debug('Failed to log web3 usage.', error) + } // Call function normally return Reflect.apply(...params) @@ -93,15 +97,19 @@ export default function setupWeb3(log) { const name = stringifyKey(key) if (getTrapKeys.has(name)) { - window.ethereum.request({ - method: 'metamask_logInjectedWeb3Usage', - params: [ - { - action: 'get', - path: getTrapKeys.get(name), - }, - ], - }) + try { + window.ethereum.request({ + method: 'metamask_logInjectedWeb3Usage', + params: [ + { + action: 'get', + path: getTrapKeys.get(name), + }, + ], + }) + } catch (error) { + log.debug('Failed to log web3 usage.', error) + } } // return value normally @@ -109,47 +117,51 @@ export default function setupWeb3(log) { }, }) }) + + const topLevelFunctions = [ + 'isConnected', + 'setProvider', + 'reset', + 'sha3', + 'toHex', + 'toAscii', + 'fromAscii', + 'toDecimal', + 'fromDecimal', + 'fromWei', + 'toWei', + 'toBigNumber', + 'isAddress', + ] + + // apply-trap top-level functions + topLevelFunctions.forEach((key) => { + // This type check is probably redundant, but we've been burned before. + if (typeof web3[key] === 'function') { + web3[key] = new Proxy(web3[key], { + apply: (...params) => { + try { + window.ethereum.request({ + method: 'metamask_logInjectedWeb3Usage', + params: [ + { + action: 'apply', + path: `web3.${key}`, + }, + ], + }) + } catch (error) { + log.debug('Failed to log web3 usage.', error) + } + + // Call function normally + return Reflect.apply(...params) + }, + }) + } + }) } - const topLevelFunctions = [ - 'isConnected', - 'setProvider', - 'reset', - 'sha3', - 'toHex', - 'toAscii', - 'fromAscii', - 'toDecimal', - 'fromDecimal', - 'fromWei', - 'toWei', - 'toBigNumber', - 'isAddress', - ] - - // apply-trap top-level functions - topLevelFunctions.forEach((key) => { - // This type check is probably redundant, but we've been burned before. - if (typeof web3[key] === 'function') { - web3[key] = new Proxy(web3[key], { - apply: (...params) => { - window.ethereum.request({ - method: 'metamask_logInjectedWeb3Usage', - params: [ - { - action: 'apply', - path: `web3.${key}`, - }, - ], - }) - - // Call function normally - return Reflect.apply(...params) - }, - }) - } - }) - const web3Proxy = new Proxy(web3, { get: (...params) => { // get the time of use diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 41cb53d75..e6678054d 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -150,7 +150,7 @@ export default class MetamaskController extends EventEmitter { isUnlocked: this.isUnlocked.bind(this), initState: initState.AppStateController, onInactiveTimeout: () => this.setLocked(), - showUnlockRequest: opts.showUnlockRequest, + showUnlockRequest: opts.showUserConfirmation, preferencesStore: this.preferencesController.store, }) @@ -247,7 +247,7 @@ export default class MetamaskController extends EventEmitter { notifyDomain: this.notifyConnections.bind(this), notifyAllDomains: this.notifyAllConnections.bind(this), preferences: this.preferencesController.store, - showPermissionRequest: opts.showPermissionRequest, + showPermissionRequest: opts.showUserConfirmation, }, initState.PermissionsController, initState.PermissionsMetadata, @@ -302,7 +302,7 @@ export default class MetamaskController extends EventEmitter { getParticipateInMetrics: () => this.preferencesController.getParticipateInMetaMetrics(), }) - this.txController.on('newUnapprovedTx', () => opts.showUnapprovedTx()) + this.txController.on('newUnapprovedTx', () => opts.showUserConfirmation()) this.txController.on(`tx:status-update`, async (txId, status) => { if ( @@ -1376,7 +1376,7 @@ export default class MetamaskController extends EventEmitter { req, ) this.sendUpdate() - this.opts.showUnconfirmedMessage() + this.opts.showUserConfirmation() return promise } @@ -1439,7 +1439,7 @@ export default class MetamaskController extends EventEmitter { req, ) this.sendUpdate() - this.opts.showUnconfirmedMessage() + this.opts.showUserConfirmation() return promise } @@ -1498,7 +1498,7 @@ export default class MetamaskController extends EventEmitter { req, ) this.sendUpdate() - this.opts.showUnconfirmedMessage() + this.opts.showUserConfirmation() return promise } @@ -1590,7 +1590,7 @@ export default class MetamaskController extends EventEmitter { req, ) this.sendUpdate() - this.opts.showUnconfirmedMessage() + this.opts.showUserConfirmation() return promise } @@ -1655,7 +1655,7 @@ export default class MetamaskController extends EventEmitter { version, ) this.sendUpdate() - this.opts.showUnconfirmedMessage() + this.opts.showUserConfirmation() return promise } diff --git a/development/sentry-publish.js b/development/sentry-publish.js index 853d1391d..aad6e4ac4 100644 --- a/development/sentry-publish.js +++ b/development/sentry-publish.js @@ -5,12 +5,15 @@ const pify = require('pify') const exec = pify(childProcess.exec, { multiArgs: true }) const VERSION = require('../dist/chrome/manifest.json').version // eslint-disable-line import/no-unresolved -start().catch(console.error) +start().catch((error) => { + console.error(error) + process.exit(1) +}) async function start() { const authWorked = await checkIfAuthWorks() if (!authWorked) { - console.log(`Sentry auth failed...`) + throw new Error(`Sentry auth failed`) } // check if version exists or not const versionAlreadyExists = await checkIfVersionExists() diff --git a/package.json b/package.json index 3dd980075..3e73f2d8c 100644 --- a/package.json +++ b/package.json @@ -70,10 +70,10 @@ "@formatjs/intl-relativetimeformat": "^5.2.6", "@fortawesome/fontawesome-free": "^5.13.0", "@material-ui/core": "^4.11.0", - "@metamask/controllers": "^4.0.2", + "@metamask/controllers": "^4.2.0", "@metamask/eth-ledger-bridge-keyring": "^0.2.6", "@metamask/eth-token-tracker": "^3.0.1", - "@metamask/etherscan-link": "^1.2.0", + "@metamask/etherscan-link": "^1.3.0", "@metamask/inpage-provider": "^6.1.0", "@metamask/jazzicon": "^2.0.0", "@metamask/logo": "^2.5.0", diff --git a/shared/constants/tokens.js b/shared/constants/tokens.js new file mode 100644 index 000000000..a31c1ec18 --- /dev/null +++ b/shared/constants/tokens.js @@ -0,0 +1,10 @@ +import contractMap from 'eth-contract-metadata' + +/** + * A normalized list of addresses exported as part of the contractMap in + * eth-contract-metadata. Used primarily to validate if manually entered + * contract addresses do not match one of our listed tokens + */ +export const LISTED_CONTRACT_ADDRESSES = Object.keys( + contractMap, +).map((address) => address.toLowerCase()) diff --git a/test/unit/app/controllers/metamask-controller-test.js b/test/unit/app/controllers/metamask-controller-test.js index 2a7978293..09b8ffac7 100644 --- a/test/unit/app/controllers/metamask-controller-test.js +++ b/test/unit/app/controllers/metamask-controller-test.js @@ -97,8 +97,7 @@ describe('MetaMaskController', function () { .reply(200, '{"JPY":12415.9}') metamaskController = new MetaMaskController({ - showUnapprovedTx: noop, - showUnconfirmedMessage: noop, + showUserConfirmation: noop, encryptor: { encrypt(_, object) { this.object = object diff --git a/test/unit/ui/app/actions.spec.js b/test/unit/ui/app/actions.spec.js index 928bf2012..d487d825e 100644 --- a/test/unit/ui/app/actions.spec.js +++ b/test/unit/ui/app/actions.spec.js @@ -44,8 +44,7 @@ describe('Actions', function () { platform: { getVersion: () => 'foo' }, provider, keyringController: new KeyringController({}), - showUnapprovedTx: noop, - showUnconfirmedMessage: noop, + showUserConfirmation: noop, encryptor: { encrypt(_, object) { this.object = object diff --git a/ui/app/components/app/account-menu/account-menu.component.js b/ui/app/components/app/account-menu/account-menu.component.js index b6739f08f..00c889a94 100644 --- a/ui/app/components/app/account-menu/account-menu.component.js +++ b/ui/app/components/app/account-menu/account-menu.component.js @@ -278,22 +278,22 @@ export default class AccountMenu extends Component { } renderScrollButton() { - const { shouldShowScrollButton } = this.state + if (!this.state.shouldShowScrollButton) { + return null + } return ( - shouldShowScrollButton && ( -
- scroll down -
- ) +
+ {this.context.t('scrollDown')} +
) } @@ -357,6 +357,7 @@ export default class AccountMenu extends Component { {t('createAccount')} } text={t('createAccount')} @@ -377,6 +378,7 @@ export default class AccountMenu extends Component { {t('importAccount')} } text={t('importAccount')} @@ -401,6 +403,7 @@ export default class AccountMenu extends Component { {t('connectHardwareWallet')} } text={t('connectHardwareWallet')} @@ -411,7 +414,7 @@ export default class AccountMenu extends Component { toggleAccountMenu() history.push(ABOUT_US_ROUTE) }} - icon={} + icon={{t('infoHelp')}} text={t('infoHelp')} /> { const history = useHistory() - const selectedAddress = useSelector((state) => getSelectedAddress(state)) const selectedAccountBalance = useSelector( (state) => getCurrentAccountWithSendEtherInfo(state).balance, ) @@ -71,7 +69,6 @@ const AssetList = ({ onClickAsset }) => { onClick={() => onClickAsset(nativeCurrency)} data-testid="wallet-balance" primary={primaryCurrencyProperties.value} - tokenAddress={selectedAddress} tokenSymbol={primaryCurrencyProperties.suffix} secondary={showFiat ? secondaryCurrencyDisplay : undefined} /> diff --git a/ui/app/components/app/confirm-page-container/confirm-page-container-content/confirm-page-container-warning/confirm-page-container-warning.component.js b/ui/app/components/app/confirm-page-container/confirm-page-container-content/confirm-page-container-warning/confirm-page-container-warning.component.js index d235ad3b4..a79cabcd6 100644 --- a/ui/app/components/app/confirm-page-container/confirm-page-container-content/confirm-page-container-warning/confirm-page-container-warning.component.js +++ b/ui/app/components/app/confirm-page-container/confirm-page-container-content/confirm-page-container-warning/confirm-page-container-warning.component.js @@ -7,6 +7,7 @@ const ConfirmPageContainerWarning = (props) => {
{props.warning} diff --git a/ui/app/components/app/confirm-page-container/confirm-page-container-header/confirm-page-container-header.component.js b/ui/app/components/app/confirm-page-container/confirm-page-container-header/confirm-page-container-header.component.js index 92d94f937..72e741a6b 100644 --- a/ui/app/components/app/confirm-page-container/confirm-page-container-header/confirm-page-container-header.component.js +++ b/ui/app/components/app/confirm-page-container/confirm-page-container-header/confirm-page-container-header.component.js @@ -47,7 +47,7 @@ export default function ConfirmPageContainerHeader({ visibility: showEdit ? 'initial' : 'hidden', }} > - + onEdit()} diff --git a/ui/app/components/app/confirm-page-container/confirm-page-container-navigation/confirm-page-container-navigation.component.js b/ui/app/components/app/confirm-page-container/confirm-page-container-navigation/confirm-page-container-navigation.component.js index f8f4e3ae8..010262b52 100755 --- a/ui/app/components/app/confirm-page-container/confirm-page-container-navigation/confirm-page-container-navigation.component.js +++ b/ui/app/components/app/confirm-page-container/confirm-page-container-navigation/confirm-page-container-navigation.component.js @@ -33,14 +33,14 @@ const ConfirmPageContainerNavigation = (props) => { data-testid="first-page" onClick={() => onNextTx(firstTx)} > - +
onNextTx(prevTxId)} > - +
@@ -65,6 +65,7 @@ const ConfirmPageContainerNavigation = (props) => {
{
diff --git a/ui/app/components/app/gas-customization/gas-price-button-group/index.scss b/ui/app/components/app/gas-customization/gas-price-button-group/index.scss index 2a2b7926c..4db9a19fc 100644 --- a/ui/app/components/app/gas-customization/gas-price-button-group/index.scss +++ b/ui/app/components/app/gas-customization/gas-price-button-group/index.scss @@ -247,6 +247,7 @@ display: flex; color: $primary-blue; + font-weight: 900; } } } diff --git a/ui/app/components/app/modals/confirm-remove-account/confirm-remove-account.component.js b/ui/app/components/app/modals/confirm-remove-account/confirm-remove-account.component.js index 68ee03e03..49db8697c 100644 --- a/ui/app/components/app/modals/confirm-remove-account/confirm-remove-account.component.js +++ b/ui/app/components/app/modals/confirm-remove-account/confirm-remove-account.component.js @@ -54,7 +54,10 @@ export default class ConfirmRemoveAccount extends Component { rel="noopener noreferrer" title={this.context.t('etherscanView')} > - + {this.context.t('etherscanView')} diff --git a/ui/app/components/app/modals/deposit-ether-modal/deposit-ether-modal.component.js b/ui/app/components/app/modals/deposit-ether-modal/deposit-ether-modal.component.js index f2cc61bfc..a0043a539 100644 --- a/ui/app/components/app/modals/deposit-ether-modal/deposit-ether-modal.component.js +++ b/ui/app/components/app/modals/deposit-ether-modal/deposit-ether-modal.component.js @@ -12,7 +12,6 @@ export default class DepositEtherModal extends Component { static propTypes = { network: PropTypes.string.isRequired, toWyre: PropTypes.func.isRequired, - toCoinSwitch: PropTypes.func.isRequired, address: PropTypes.string.isRequired, toFaucet: PropTypes.func.isRequired, hideWarning: PropTypes.func.isRequired, @@ -87,7 +86,7 @@ export default class DepositEtherModal extends Component { } render() { - const { network, toWyre, toCoinSwitch, address, toFaucet } = this.props + const { network, toWyre, address, toFaucet } = this.props const isTestNetwork = ['3', '4', '5', '42'].find((n) => n === network) const networkName = getNetworkDisplayName(network) @@ -111,31 +110,6 @@ export default class DepositEtherModal extends Component {
- {this.renderRow({ - logo: ( - - ), - title: this.context.t('directDepositEther'), - text: this.context.t('directDepositEtherExplainer'), - buttonLabel: this.context.t('viewAccount'), - onButtonClick: () => this.goToAccountDetailsModal(), - })} - {this.renderRow({ - logo: , - title: this.context.t('testFaucet'), - text: this.faucetRowText(networkName), - buttonLabel: this.context.t('getEther'), - onButtonClick: () => toFaucet(network), - hide: !isTestNetwork, - })} {this.renderRow({ logo: (
), - title: this.context.t('buyCoinSwitch'), - text: this.context.t('buyCoinSwitchExplainer'), - buttonLabel: this.context.t('continueToCoinSwitch'), - onButtonClick: () => { - this.context.metricsEvent({ - eventOpts: { - category: 'Accounts', - action: 'Deposit Ether', - name: 'Click buy Ether via CoinSwitch', - }, - }) - toCoinSwitch(address) - }, - hide: isTestNetwork, + title: this.context.t('directDepositEther'), + text: this.context.t('directDepositEtherExplainer'), + buttonLabel: this.context.t('viewAccount'), + onButtonClick: () => this.goToAccountDetailsModal(), + })} + {this.renderRow({ + logo: , + title: this.context.t('testFaucet'), + text: this.faucetRowText(networkName), + buttonLabel: this.context.t('getEther'), + onButtonClick: () => toFaucet(network), + hide: !isTestNetwork, })}
diff --git a/ui/app/components/app/modals/deposit-ether-modal/deposit-ether-modal.container.js b/ui/app/components/app/modals/deposit-ether-modal/deposit-ether-modal.container.js index aac9cd8ae..abee66e48 100644 --- a/ui/app/components/app/modals/deposit-ether-modal/deposit-ether-modal.container.js +++ b/ui/app/components/app/modals/deposit-ether-modal/deposit-ether-modal.container.js @@ -19,9 +19,6 @@ function mapDispatchToProps(dispatch) { toWyre: (address) => { dispatch(buyEth({ service: 'wyre', address })) }, - toCoinSwitch: (address) => { - dispatch(buyEth({ service: 'coinswitch', address })) - }, hideModal: () => { dispatch(hideModal()) }, diff --git a/ui/app/components/app/modals/metametrics-opt-in-modal/metametrics-opt-in-modal.component.js b/ui/app/components/app/modals/metametrics-opt-in-modal/metametrics-opt-in-modal.component.js index df326978d..6fbdb54c3 100644 --- a/ui/app/components/app/modals/metametrics-opt-in-modal/metametrics-opt-in-modal.component.js +++ b/ui/app/components/app/modals/metametrics-opt-in-modal/metametrics-opt-in-modal.component.js @@ -24,7 +24,7 @@ export default class MetaMetricsOptInModal extends Component {
- +
Help Us Improve MetaMask diff --git a/ui/app/components/app/modals/qr-scanner/qr-scanner.component.js b/ui/app/components/app/modals/qr-scanner/qr-scanner.component.js index e74c1c94e..54556f630 100644 --- a/ui/app/components/app/modals/qr-scanner/qr-scanner.component.js +++ b/ui/app/components/app/modals/qr-scanner/qr-scanner.component.js @@ -210,7 +210,7 @@ export default class QrScanner extends Component { return ( <>
- +
{title ?
{title}
: null}
{msg}
diff --git a/ui/app/components/app/modals/transaction-confirmed/transaction-confirmed.component.js b/ui/app/components/app/modals/transaction-confirmed/transaction-confirmed.component.js index e34c4dc4d..aded7cb65 100644 --- a/ui/app/components/app/modals/transaction-confirmed/transaction-confirmed.component.js +++ b/ui/app/components/app/modals/transaction-confirmed/transaction-confirmed.component.js @@ -28,7 +28,7 @@ export default class TransactionConfirmed extends PureComponent { return (
- +
{`${t('confirmed')}!`}
diff --git a/ui/app/components/app/network.js b/ui/app/components/app/network.js index 387dbb536..194e65c65 100644 --- a/ui/app/components/app/network.js +++ b/ui/app/components/app/network.js @@ -173,7 +173,7 @@ export default class Network extends Component { ) : ( diff --git a/ui/app/components/app/token-cell/token-cell.js b/ui/app/components/app/token-cell/token-cell.js index 9a7673588..9c3a4bcff 100644 --- a/ui/app/components/app/token-cell/token-cell.js +++ b/ui/app/components/app/token-cell/token-cell.js @@ -10,7 +10,7 @@ import { useTokenFiatAmount } from '../../../hooks/useTokenFiatAmount' export default function TokenCell({ address, decimals, - outdatedBalance, + balanceError, symbol, string, image, @@ -21,13 +21,14 @@ export default function TokenCell({ const formattedFiat = useTokenFiatAmount(address, string, symbol) - const warning = outdatedBalance ? ( + const warning = balanceError ? ( {t('troubleTokenBalances')} event.stopPropagation()} style={{ color: '#F7861C' }} > {t('here')} @@ -38,7 +39,7 @@ export default function TokenCell({ return ( {tokensWithBalances.map((tokenData, index) => { tokenData.image = assetImages[tokenData.address] - return ( - - ) + return })}
) diff --git a/ui/app/components/app/transaction-activity-log/transaction-activity-log-icon/transaction-activity-log-icon.component.js b/ui/app/components/app/transaction-activity-log/transaction-activity-log-icon/transaction-activity-log-icon.component.js index 0ba312f8c..f00b493e1 100644 --- a/ui/app/components/app/transaction-activity-log/transaction-activity-log-icon/transaction-activity-log-icon.component.js +++ b/ui/app/components/app/transaction-activity-log/transaction-activity-log-icon/transaction-activity-log-icon.component.js @@ -40,7 +40,7 @@ export default class TransactionActivityLogIcon extends PureComponent { return (
- {imagePath && } + {imagePath && }
) } diff --git a/ui/app/components/app/transaction-list-item-details/transaction-list-item-details.component.js b/ui/app/components/app/transaction-list-item-details/transaction-list-item-details.component.js index debba6573..31c3adc3e 100644 --- a/ui/app/components/app/transaction-list-item-details/transaction-list-item-details.component.js +++ b/ui/app/components/app/transaction-list-item-details/transaction-list-item-details.component.js @@ -206,7 +206,7 @@ export default class TransactionListItemDetails extends PureComponent { onClick={this.handleEtherscanClick} disabled={!hash} > - + {showRetry && ( diff --git a/ui/app/components/app/user-preferenced-currency-display/user-preferenced-currency-display.component.js b/ui/app/components/app/user-preferenced-currency-display/user-preferenced-currency-display.component.js index c858b66b6..208b93197 100644 --- a/ui/app/components/app/user-preferenced-currency-display/user-preferenced-currency-display.component.js +++ b/ui/app/components/app/user-preferenced-currency-display/user-preferenced-currency-display.component.js @@ -23,7 +23,7 @@ export default function UserPreferencedCurrencyDisplay({ const prefixComponent = useMemo(() => { return ( currency === ETH && - showEthLogo && + showEthLogo && ) }, [currency, showEthLogo, ethLogoHeight]) diff --git a/ui/app/components/ui/circle-icon/circle-icon.component.js b/ui/app/components/ui/circle-icon/circle-icon.component.js index e019aa99e..179906673 100644 --- a/ui/app/components/ui/circle-icon/circle-icon.component.js +++ b/ui/app/components/ui/circle-icon/circle-icon.component.js @@ -40,6 +40,7 @@ export default class CircleIcon extends PureComponent { height: iconSize, width: iconSize, }} + alt="" />
) diff --git a/ui/app/components/ui/editable-label/editable-label.js b/ui/app/components/ui/editable-label/editable-label.js index e082082b1..12ce68a7b 100644 --- a/ui/app/components/ui/editable-label/editable-label.js +++ b/ui/app/components/ui/editable-label/editable-label.js @@ -45,13 +45,15 @@ class EditableLabel extends Component { className={classnames('large-input', 'editable-label__input', { 'editable-label__input--error': value === '', })} + autoFocus />, -
- this.handleSubmit()} - /> -
, + , ] } @@ -60,12 +62,13 @@ class EditableLabel extends Component {
{this.state.value}
, -
- this.setState({ isEditing: true })} - /> -
, + , ] } diff --git a/ui/app/components/ui/editable-label/index.scss b/ui/app/components/ui/editable-label/index.scss index fdb430c7d..23c5df4a2 100644 --- a/ui/app/components/ui/editable-label/index.scss +++ b/ui/app/components/ui/editable-label/index.scss @@ -23,10 +23,11 @@ } } - &__icon-wrapper { + &__icon-button { position: absolute; margin-left: 10px; left: 100%; + background: unset; } &__icon { diff --git a/ui/app/components/ui/error-message/error-message.component.js b/ui/app/components/ui/error-message/error-message.component.js index e4d39ee4f..fdb8b651f 100644 --- a/ui/app/components/ui/error-message/error-message.component.js +++ b/ui/app/components/ui/error-message/error-message.component.js @@ -7,7 +7,7 @@ const ErrorMessage = (props, context) => { return (
- +
{`ALERT: ${error}`}
) diff --git a/ui/app/components/ui/icon-with-fallback/icon-with-fallback.component.js b/ui/app/components/ui/icon-with-fallback/icon-with-fallback.component.js index 5b114d382..27e16d28e 100644 --- a/ui/app/components/ui/icon-with-fallback/icon-with-fallback.component.js +++ b/ui/app/components/ui/icon-with-fallback/icon-with-fallback.component.js @@ -30,6 +30,7 @@ export default class IconWithFallback extends PureComponent { src={icon} style={style} className={className} + alt="" /> ) : ( { return ( <> - + ) } diff --git a/ui/app/components/ui/identicon/identicon.component.js b/ui/app/components/ui/identicon/identicon.component.js index 167d937b8..840108f60 100644 --- a/ui/app/components/ui/identicon/identicon.component.js +++ b/ui/app/components/ui/identicon/identicon.component.js @@ -40,6 +40,7 @@ export default class Identicon extends PureComponent { className={classnames('identicon', className)} src={image} style={getStyles(diameter)} + alt="" /> ) } @@ -108,6 +109,7 @@ export default class Identicon extends PureComponent { className={classnames('identicon__eth-logo', className)} src="./images/eth_logo.svg" style={getStyles(diameter)} + alt="" /> ) } diff --git a/ui/app/components/ui/info-tooltip/info-tooltip.js b/ui/app/components/ui/info-tooltip/info-tooltip.js index 5215d0405..af2537f0c 100644 --- a/ui/app/components/ui/info-tooltip/info-tooltip.js +++ b/ui/app/components/ui/info-tooltip/info-tooltip.js @@ -32,7 +32,7 @@ export default function InfoTooltip({ html={contentText} theme={wide ? 'tippy-tooltip-wideInfo' : 'tippy-tooltip-info'} > - +
) diff --git a/ui/app/components/ui/metafox-logo/metafox-logo.component.js b/ui/app/components/ui/metafox-logo/metafox-logo.component.js index 6a9838543..faae1eb8e 100644 --- a/ui/app/components/ui/metafox-logo/metafox-logo.component.js +++ b/ui/app/components/ui/metafox-logo/metafox-logo.component.js @@ -24,12 +24,13 @@ export default class MetaFoxLogo extends PureComponent { })} >
) diff --git a/ui/app/components/ui/sender-to-recipient/sender-to-recipient.component.js b/ui/app/components/ui/sender-to-recipient/sender-to-recipient.component.js index 242ccb3fd..5c4ae7991 100644 --- a/ui/app/components/ui/sender-to-recipient/sender-to-recipient.component.js +++ b/ui/app/components/ui/sender-to-recipient/sender-to-recipient.component.js @@ -174,12 +174,12 @@ function Arrow({ variant }) { return variant === DEFAULT_VARIANT ? (
- +
) : (
- +
) } diff --git a/ui/app/contexts/metametrics.new.js b/ui/app/contexts/metametrics.new.js index dd8759458..f8596b796 100644 --- a/ui/app/contexts/metametrics.new.js +++ b/ui/app/contexts/metametrics.new.js @@ -127,7 +127,8 @@ export function MetaMetricsProvider({ children }) { location.pathname.startsWith('/initialize')) || participateInMetaMetrics ) { - // Events that happen during initialization before the user opts into MetaMetrics will be anonymous + // Events that happen during initialization before the user opts into + // MetaMetrics will be anonymous const idTrait = metaMetricsId ? 'userId' : 'anonymousId' const idValue = metaMetricsId ?? METAMETRICS_ANONYMOUS_ID const match = matchPath(location.pathname, { @@ -135,19 +136,15 @@ export function MetaMetricsProvider({ children }) { exact: true, strict: true, }) - // Start by checking for a missing match route. If this falls through to the else if, then we know we - // have a matched route for tracking. + // Start by checking for a missing match route. If this falls through to + // the else if, then we know we have a matched route for tracking. if (!match) { - // We have more specific pages for each type of transaction confirmation - // The user lands on /confirm-transaction first, then is redirected based on - // the contents of state. - if (location.pathname !== '/confirm-transaction') { - // Otherwise we are legitimately missing a matching route - captureMessage(`Segment page tracking found unmatched route`, { + captureMessage(`Segment page tracking found unmatched route`, { + extra: { previousMatch, currentPath: location.pathname, - }) - } + }, + }) } else if ( previousMatch.current !== match.path && !( @@ -156,9 +153,11 @@ export function MetaMetricsProvider({ children }) { previousMatch.current === undefined ) ) { - // When a notification window is open by a Dapp we do not want to track the initial home route load that can - // sometimes happen. To handle this we keep track of the previousMatch, and we skip the event track in the event - // that we are dealing with the initial load of the homepage + // When a notification window is open by a Dapp we do not want to track + // the initial home route load that can sometimes happen. To handle + // this we keep track of the previousMatch, and we skip the event track + // in the event that we are dealing with the initial load of the + // homepage const { path, params } = match const name = PATH_NAME_MAP[path] segment.page({ diff --git a/ui/app/helpers/constants/routes.js b/ui/app/helpers/constants/routes.js index efd09c151..d3b5904c5 100644 --- a/ui/app/helpers/constants/routes.js +++ b/ui/app/helpers/constants/routes.js @@ -99,6 +99,8 @@ const PATH_NAME_MAP = { [`${CONNECT_ROUTE}/:id${CONNECT_CONFIRM_PERMISSIONS_ROUTE}`]: 'Grant Connected Site Permissions Confirmation Page', [CONNECTED_ROUTE]: 'Sites Connected To This Account Page', [CONNECTED_ACCOUNTS_ROUTE]: 'Accounts Connected To This Site Page', + [`${CONFIRM_TRANSACTION_ROUTE}/:id`]: 'Confirmation Root Page', + [CONFIRM_TRANSACTION_ROUTE]: 'Confirmation Root Page', [`${CONFIRM_TRANSACTION_ROUTE}/:id${CONFIRM_TOKEN_METHOD_PATH}`]: 'Confirm Token Method Transaction Page', [`${CONFIRM_TRANSACTION_ROUTE}/:id${CONFIRM_SEND_ETHER_PATH}`]: 'Confirm Send Ether Transaction Page', [`${CONFIRM_TRANSACTION_ROUTE}/:id${CONFIRM_SEND_TOKEN_PATH}`]: 'Confirm Send Token Transaction Page', diff --git a/ui/app/hooks/useTokenTracker.js b/ui/app/hooks/useTokenTracker.js index 5e15af03d..f94b0544f 100644 --- a/ui/app/hooks/useTokenTracker.js +++ b/ui/app/hooks/useTokenTracker.js @@ -4,7 +4,7 @@ import { useSelector } from 'react-redux' import { getCurrentNetwork, getSelectedAddress } from '../selectors' import { useEqualityCheck } from './useEqualityCheck' -export function useTokenTracker(tokens) { +export function useTokenTracker(tokens, includeFailedTokens = false) { const network = useSelector(getCurrentNetwork) const userAddress = useSelector(getSelectedAddress) @@ -42,6 +42,7 @@ export function useTokenTracker(tokens) { userAddress: address, provider: global.ethereumProvider, tokens: tokenList, + includeFailedTokens, pollingInterval: 8000, }) @@ -49,7 +50,7 @@ export function useTokenTracker(tokens) { tokenTracker.current.on('error', showError) tokenTracker.current.updateBalances() }, - [updateBalances, showError, teardownTracker], + [updateBalances, includeFailedTokens, showError, teardownTracker], ) // Effect to remove the tracker when the component is removed from DOM diff --git a/ui/app/pages/add-token/token-list/token-list-placeholder/token-list-placeholder.component.js b/ui/app/pages/add-token/token-list/token-list-placeholder/token-list-placeholder.component.js index bc47745cc..1cefea294 100644 --- a/ui/app/pages/add-token/token-list/token-list-placeholder/token-list-placeholder.component.js +++ b/ui/app/pages/add-token/token-list/token-list-placeholder/token-list-placeholder.component.js @@ -10,7 +10,7 @@ export default class TokenListPlaceholder extends Component { render() { return (
- +
{this.context.t('addAcquiredTokens')}
diff --git a/ui/app/pages/add-token/token-search/token-search.component.js b/ui/app/pages/add-token/token-search/token-search.component.js index 904fdcefb..8ef9d20af 100644 --- a/ui/app/pages/add-token/token-search/token-search.component.js +++ b/ui/app/pages/add-token/token-search/token-search.component.js @@ -53,7 +53,7 @@ export default class TokenSearch extends Component { renderAdornment() { return ( - + ) } diff --git a/ui/app/pages/asset/asset.scss b/ui/app/pages/asset/asset.scss index e265e4943..f80cd66a4 100644 --- a/ui/app/pages/asset/asset.scss +++ b/ui/app/pages/asset/asset.scss @@ -42,5 +42,7 @@ &__icon { @include Paragraph; + + font-weight: 900; } } diff --git a/ui/app/pages/asset/components/token-asset.js b/ui/app/pages/asset/components/token-asset.js index 81198ee5d..00296a59e 100644 --- a/ui/app/pages/asset/components/token-asset.js +++ b/ui/app/pages/asset/components/token-asset.js @@ -2,7 +2,7 @@ import React from 'react' import PropTypes from 'prop-types' import { useDispatch, useSelector } from 'react-redux' import { useHistory } from 'react-router-dom' -import { createAccountLink } from '@metamask/etherscan-link' +import { createTokenTrackerLink } from '@metamask/etherscan-link' import TransactionList from '../../../components/app/transaction-list' import { TokenOverview } from '../../../components/app/wallet-overview' @@ -19,9 +19,9 @@ import TokenOptions from './token-options' export default function TokenAsset({ token }) { const dispatch = useDispatch() const network = useSelector(getCurrentNetworkId) - const selectedAccountName = useSelector( - (state) => getSelectedIdentity(state).name, - ) + const selectedIdentity = useSelector(getSelectedIdentity) + const selectedAccountName = selectedIdentity.name + const selectedAddress = selectedIdentity.address const history = useHistory() return ( @@ -36,7 +36,11 @@ export default function TokenAsset({ token }) { dispatch(showModal({ name: 'HIDE_TOKEN_CONFIRMATION', token })) } onViewEtherscan={() => { - const url = createAccountLink(token.address, network) + const url = createTokenTrackerLink( + token.address, + network, + selectedAddress, + ) global.platform.openTab({ url }) }} tokenSymbol={token.symbol} diff --git a/ui/app/pages/confirm-add-suggested-token/confirm-add-suggested-token.component.js b/ui/app/pages/confirm-add-suggested-token/confirm-add-suggested-token.component.js index 8243a10bb..2ef4e0ea3 100644 --- a/ui/app/pages/confirm-add-suggested-token/confirm-add-suggested-token.component.js +++ b/ui/app/pages/confirm-add-suggested-token/confirm-add-suggested-token.component.js @@ -9,6 +9,7 @@ import { ENVIRONMENT_TYPE_NOTIFICATION } from '../../../../app/scripts/lib/enums export default class ConfirmAddSuggestedToken extends Component { static contextTypes = { t: PropTypes.func, + trackEvent: PropTypes.func, } static propTypes = { @@ -139,6 +140,19 @@ export default class ConfirmAddSuggestedToken extends Component { onClick={() => { addToken(pendingToken) .then(() => removeSuggestedTokens()) + .then(() => { + this.context.trackEvent({ + event: 'Token Added', + category: 'Wallet', + sensitiveProperties: { + token_symbol: pendingToken.symbol, + token_contract_address: pendingToken.address, + token_decimal_precision: pendingToken.decimals, + unlisted: pendingToken.unlisted, + source: 'dapp', + }, + }) + }) .then(() => history.push(mostRecentOverviewPage)) }} > diff --git a/ui/app/pages/confirm-add-token/confirm-add-token.component.js b/ui/app/pages/confirm-add-token/confirm-add-token.component.js index 3a0b0b3d0..4334f377a 100644 --- a/ui/app/pages/confirm-add-token/confirm-add-token.component.js +++ b/ui/app/pages/confirm-add-token/confirm-add-token.component.js @@ -8,6 +8,7 @@ import TokenBalance from '../../components/ui/token-balance' export default class ConfirmAddToken extends Component { static contextTypes = { t: PropTypes.func, + trackEvent: PropTypes.func, } static propTypes = { @@ -103,10 +104,22 @@ export default class ConfirmAddToken extends Component { className="page-container__footer-button" onClick={() => { addTokens(pendingTokens).then(() => { + const pendingTokenValues = Object.values(pendingTokens) + pendingTokenValues.forEach((pendingToken) => { + this.context.trackEvent({ + event: 'Token Added', + category: 'Wallet', + sensitiveProperties: { + token_symbol: pendingToken.symbol, + token_contract_address: pendingToken.address, + token_decimal_precision: pendingToken.decimals, + unlisted: pendingToken.unlisted, + source: pendingToken.isCustom ? 'custom' : 'list', + }, + }) + }) clearPendingTokens() - const firstTokenAddress = Object.values( - pendingTokens, - )?.[0].address?.toLowerCase() + const firstTokenAddress = pendingTokenValues?.[0].address?.toLowerCase() if (firstTokenAddress) { history.push(`${ASSET_ROUTE}/${firstTokenAddress}`) } else { diff --git a/ui/app/pages/confirm-approve/confirm-approve-content/confirm-approve-content.component.js b/ui/app/pages/confirm-approve/confirm-approve-content/confirm-approve-content.component.js index 6cea504e0..5486776b7 100644 --- a/ui/app/pages/confirm-approve/confirm-approve-content/confirm-approve-content.component.js +++ b/ui/app/pages/confirm-approve/confirm-approve-content/confirm-approve-content.component.js @@ -236,7 +236,7 @@ export default class ConfirmApproveContent extends Component {
{this.renderApproveContentCard({ - symbol: , + symbol: , title: 'Permission', content: this.renderPermissionContent(), showEdit: true, diff --git a/ui/app/pages/confirm-decrypt-message/confirm-decrypt-message.component.js b/ui/app/pages/confirm-decrypt-message/confirm-decrypt-message.component.js index 9f036cb80..a9f68d388 100644 --- a/ui/app/pages/confirm-decrypt-message/confirm-decrypt-message.component.js +++ b/ui/app/pages/confirm-decrypt-message/confirm-decrypt-message.component.js @@ -195,6 +195,7 @@ export default class ConfirmDecryptMessage extends Component { ) : ( @@ -240,7 +241,7 @@ export default class ConfirmDecryptMessage extends Component { }) }} > - +
{t('decryptMetamask')}
diff --git a/ui/app/pages/confirm-encryption-public-key/confirm-encryption-public-key.component.js b/ui/app/pages/confirm-encryption-public-key/confirm-encryption-public-key.component.js index b4ecc5c10..08a3cbf95 100644 --- a/ui/app/pages/confirm-encryption-public-key/confirm-encryption-public-key.component.js +++ b/ui/app/pages/confirm-encryption-public-key/confirm-encryption-public-key.component.js @@ -170,6 +170,7 @@ export default class ConfirmEncryptionPublicKey extends Component { ) : ( diff --git a/ui/app/pages/confirm-token-transaction-base/confirm-token-transaction-base.component.js b/ui/app/pages/confirm-token-transaction-base/confirm-token-transaction-base.component.js index e60ec0ec2..e8bb69152 100644 --- a/ui/app/pages/confirm-token-transaction-base/confirm-token-transaction-base.component.js +++ b/ui/app/pages/confirm-token-transaction-base/confirm-token-transaction-base.component.js @@ -86,7 +86,7 @@ export default function ConfirmTokenTransactionBase({ primaryTotalTextOverride={
{`${tokensText} + `} - + {ethTransactionTotal}
} diff --git a/ui/app/pages/create-account/connect-hardware/index.js b/ui/app/pages/create-account/connect-hardware/index.js index 8e80d3775..a17806207 100644 --- a/ui/app/pages/create-account/connect-hardware/index.js +++ b/ui/app/pages/create-account/connect-hardware/index.js @@ -129,7 +129,7 @@ class ConnectHardwareForm extends Component { } }) .catch((e) => { - const errorMessage = e.message + const errorMessage = typeof e === 'string' ? e : e.message if (errorMessage === 'Window blocked') { this.setState({ browserSupported: false, error: null }) } else if (errorMessage.includes(U2F_ERROR)) { @@ -210,6 +210,7 @@ class ConnectHardwareForm extends Component { // eslint-disable-next-line react/jsx-key
) @@ -52,7 +52,7 @@ export default class SelectHardware extends Component { ) diff --git a/ui/app/pages/first-time-flow/create-password/unique-image/unique-image.component.js b/ui/app/pages/first-time-flow/create-password/unique-image/unique-image.component.js index a6579e60e..ad30c2066 100644 --- a/ui/app/pages/first-time-flow/create-password/unique-image/unique-image.component.js +++ b/ui/app/pages/first-time-flow/create-password/unique-image/unique-image.component.js @@ -19,7 +19,7 @@ export default class UniqueImageScreen extends PureComponent { return (
- +
{t('protectYourKeys')}
{t('protectYourKeysMessage1')} diff --git a/ui/app/pages/first-time-flow/metametrics-opt-in/metametrics-opt-in.component.js b/ui/app/pages/first-time-flow/metametrics-opt-in/metametrics-opt-in.component.js index 65ea159e1..b859457e8 100644 --- a/ui/app/pages/first-time-flow/metametrics-opt-in/metametrics-opt-in.component.js +++ b/ui/app/pages/first-time-flow/metametrics-opt-in/metametrics-opt-in.component.js @@ -32,7 +32,7 @@ export default class MetaMetricsOptIn extends Component {
- +
{t('metametricsHelpImproveMetaMask')} diff --git a/ui/app/pages/first-time-flow/select-action/select-action.component.js b/ui/app/pages/first-time-flow/select-action/select-action.component.js index 2d4a21589..993c0b16e 100644 --- a/ui/app/pages/first-time-flow/select-action/select-action.component.js +++ b/ui/app/pages/first-time-flow/select-action/select-action.component.js @@ -50,7 +50,7 @@ export default class SelectAction extends PureComponent {
- +
{t('noAlreadyHaveSeed')} @@ -70,7 +70,7 @@ export default class SelectAction extends PureComponent {
- +
{t('letsGoSetUp')} diff --git a/ui/app/pages/send/send.component.js b/ui/app/pages/send/send.component.js index b5865c4ba..727c213af 100644 --- a/ui/app/pages/send/send.component.js +++ b/ui/app/pages/send/send.component.js @@ -154,6 +154,7 @@ export default class SendTransactionScreen extends Component { if (sendTokenAddress && prevTokenAddress !== sendTokenAddress) { this.updateSendToken() + this.validate(sendTokenAddress) updateGas = true } diff --git a/ui/app/pages/send/tests/send-component.test.js b/ui/app/pages/send/tests/send-component.test.js index 42a3dc504..4c5cd04e3 100644 --- a/ui/app/pages/send/tests/send-component.test.js +++ b/ui/app/pages/send/tests/send-component.test.js @@ -138,7 +138,7 @@ describe('Send Component', function () { balance: '', }, }) - assert(utilsMethodStubs.doesAmountErrorRequireUpdate.calledOnce) + assert(utilsMethodStubs.doesAmountErrorRequireUpdate.calledTwice) assert.deepEqual( utilsMethodStubs.doesAmountErrorRequireUpdate.getCall(0).args[0], { diff --git a/ui/app/pages/settings/contact-list-tab/contact-list-tab.component.js b/ui/app/pages/settings/contact-list-tab/contact-list-tab.component.js index 81e5baf26..068dc3daf 100644 --- a/ui/app/pages/settings/contact-list-tab/contact-list-tab.component.js +++ b/ui/app/pages/settings/contact-list-tab/contact-list-tab.component.js @@ -49,6 +49,7 @@ export default class ContactListTab extends Component { renderAddButton() { const { history } = this.props + return (
) diff --git a/ui/app/pages/settings/contact-list-tab/index.scss b/ui/app/pages/settings/contact-list-tab/index.scss index f15b9c485..aef7c208c 100644 --- a/ui/app/pages/settings/contact-list-tab/index.scss +++ b/ui/app/pages/settings/contact-list-tab/index.scss @@ -221,7 +221,7 @@ .address-book-add-button { &__button { position: absolute; - top: 10px; + top: 80px; right: 16px; height: 56px; width: 56px; @@ -235,6 +235,10 @@ margin-right: 5px; cursor: pointer; box-shadow: 0 2px 16px rgba(0, 0, 0, 0.25); + + @media screen and (max-width: 576px) { + top: 10px; + } } } diff --git a/ui/app/pages/settings/info-tab/info-tab.component.js b/ui/app/pages/settings/info-tab/info-tab.component.js index 966c26799..0e8118910 100644 --- a/ui/app/pages/settings/info-tab/info-tab.component.js +++ b/ui/app/pages/settings/info-tab/info-tab.component.js @@ -96,7 +96,11 @@ export default class InfoTab extends PureComponent {
- +
diff --git a/ui/app/pages/swaps/build-quote/build-quote.js b/ui/app/pages/swaps/build-quote/build-quote.js index a1bcea61f..3aabcf82e 100644 --- a/ui/app/pages/swaps/build-quote/build-quote.js +++ b/ui/app/pages/swaps/build-quote/build-quote.js @@ -13,6 +13,7 @@ import DropdownInputPair from '../dropdown-input-pair' import DropdownSearchList from '../dropdown-search-list' import SlippageButtons from '../slippage-buttons' import { getTokens } from '../../../ducks/metamask/metamask' +import InfoTooltip from '../../../components/ui/info-tooltip' import { fetchQuotesAndSetQuoteState, @@ -366,6 +367,27 @@ export default function BuildQuote({ defaultToAll />
+ {selectedToToken?.address && + selectedToToken?.address !== ETH_SWAPS_TOKEN_OBJECT.address && ( +
+ {t('verifyThisTokenOn', [ + + {t('etherscan')} + , + ])} + +
+ )}
{ diff --git a/ui/app/pages/swaps/build-quote/index.scss b/ui/app/pages/swaps/build-quote/index.scss index eace3058c..acc1f7352 100644 --- a/ui/app/pages/swaps/build-quote/index.scss +++ b/ui/app/pages/swaps/build-quote/index.scss @@ -116,6 +116,27 @@ } } + &__token-message { + @include H7; + + width: 100%; + color: $Grey-500; + margin-top: 4px; + display: flex; + align-items: center; + } + + &__token-etherscan-link { + color: $Blue-500; + cursor: pointer; + margin-right: 4px; + } + + &__token-tooltip-container { + // Needed to override the style property added by the react-tippy library + display: flex !important; + } + /* Prevents the swaps "Swap to" field from overflowing */ .dropdown-input-pair__to .dropdown-search-list { width: 100%; diff --git a/ui/app/pages/swaps/index.js b/ui/app/pages/swaps/index.js index 02aff4a32..f41aef9d6 100644 --- a/ui/app/pages/swaps/index.js +++ b/ui/app/pages/swaps/index.js @@ -299,7 +299,7 @@ export default function Swap() { ethBalance={ethBalance} setMaxSlippage={setMaxSlippage} selectedAccountAddress={selectedAccountAddress} - maxSlippage={Number(maxSlippage)} + maxSlippage={maxSlippage} /> ) }} diff --git a/ui/app/pages/swaps/intro-popup/intro-popup.js b/ui/app/pages/swaps/intro-popup/intro-popup.js index a01375b1b..5d525b7ee 100644 --- a/ui/app/pages/swaps/intro-popup/intro-popup.js +++ b/ui/app/pages/swaps/intro-popup/intro-popup.js @@ -64,7 +64,7 @@ export default function IntroPopup({ onClose }) { {t('swapIntroLiquiditySourcesLabel')}
- +
{t('swapIntroLearnMoreHeader')} diff --git a/ui/app/pages/swaps/loading-swaps-quotes/aggregator-logo.js b/ui/app/pages/swaps/loading-swaps-quotes/aggregator-logo.js index f121f6f03..6b147c1c6 100644 --- a/ui/app/pages/swaps/loading-swaps-quotes/aggregator-logo.js +++ b/ui/app/pages/swaps/loading-swaps-quotes/aggregator-logo.js @@ -19,7 +19,7 @@ export default function AggregatorLogo({ icon, color }) { boxShadow: `0px 4px 20px ${hexToRGB(color, 0.25)}`, }} > - +
) diff --git a/ui/app/pages/swaps/searchable-item-list/list-item-search/list-item-search.component.js b/ui/app/pages/swaps/searchable-item-list/list-item-search/list-item-search.component.js index bf750f36f..d73e3a9b9 100644 --- a/ui/app/pages/swaps/searchable-item-list/list-item-search/list-item-search.component.js +++ b/ui/app/pages/swaps/searchable-item-list/list-item-search/list-item-search.component.js @@ -7,7 +7,7 @@ import { usePrevious } from '../../../../hooks/usePrevious' const renderAdornment = () => ( - + ) diff --git a/ui/app/pages/swaps/select-quote-popover/quote-details/quote-details.js b/ui/app/pages/swaps/select-quote-popover/quote-details/quote-details.js index 2fa822eab..96692f3a8 100644 --- a/ui/app/pages/swaps/select-quote-popover/quote-details/quote-details.js +++ b/ui/app/pages/swaps/select-quote-popover/quote-details/quote-details.js @@ -82,6 +82,7 @@ const QuoteDetails = ({ {t('swapMetaMaskFee')}
diff --git a/ui/app/pages/swaps/select-quote-popover/select-quote-popover-constants.js b/ui/app/pages/swaps/select-quote-popover/select-quote-popover-constants.js index 516a7ae84..8d25a5b93 100644 --- a/ui/app/pages/swaps/select-quote-popover/select-quote-popover-constants.js +++ b/ui/app/pages/swaps/select-quote-popover/select-quote-popover-constants.js @@ -10,7 +10,7 @@ export const QUOTE_DATA_ROWS_PROPTYPES_SHAPE = PropTypes.shape({ networkFees: PropTypes.string.isRequired, quoteSource: PropTypes.string.isRequired, rawNetworkFees: PropTypes.string.isRequired, - slippage: PropTypes.string.isRequired, + slippage: PropTypes.number.isRequired, sourceTokenDecimals: PropTypes.number.isRequired, sourceTokenSymbol: PropTypes.string.isRequired, sourceTokenValue: PropTypes.string.isRequired, diff --git a/ui/app/pages/swaps/slippage-buttons/slippage-buttons.js b/ui/app/pages/swaps/slippage-buttons/slippage-buttons.js index 20f706366..fe5daaa63 100644 --- a/ui/app/pages/swaps/slippage-buttons/slippage-buttons.js +++ b/ui/app/pages/swaps/slippage-buttons/slippage-buttons.js @@ -116,7 +116,7 @@ export default function SlippageButtons({ onSelect }) { { setCustomValue(event.target.value) - onSelect(event.target.value) + onSelect(Number(event.target.value)) }} type="number" step="0.1" diff --git a/ui/app/store/actions.js b/ui/app/store/actions.js index 15daa555c..f9d9de22d 100644 --- a/ui/app/store/actions.js +++ b/ui/app/store/actions.js @@ -23,6 +23,7 @@ import { } from '../selectors' import { switchedToUnconnectedAccount } from '../ducks/alerts/unconnected-account' import { getUnconnectedAccountAlertEnabledness } from '../ducks/metamask/metamask' +import { LISTED_CONTRACT_ADDRESSES } from '../../../shared/constants/tokens' import * as actionConstants from './actionConstants' let background = null @@ -2210,9 +2211,21 @@ export function setPendingTokens(pendingTokens) { const { address, symbol, decimals } = customToken const tokens = address && symbol && decimals - ? { ...selectedTokens, [address]: { ...customToken, isCustom: true } } + ? { + ...selectedTokens, + [address]: { + ...customToken, + isCustom: true, + }, + } : selectedTokens + Object.keys(tokens).forEach((tokenAddress) => { + tokens[tokenAddress].unlisted = !LISTED_CONTRACT_ADDRESSES.includes( + tokenAddress.toLowerCase(), + ) + }) + return { type: actionConstants.SET_PENDING_TOKENS, payload: tokens, diff --git a/yarn.lock b/yarn.lock index 8527d8ee9..1348d21e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1833,16 +1833,16 @@ web3 "^0.20.7" web3-provider-engine "^16.0.1" -"@metamask/controllers@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@metamask/controllers/-/controllers-4.0.2.tgz#ec7efa2bea7f323bb3dc458b8a29d1a284f2849e" - integrity sha512-SoEgVgRlguazOJF/pHCE+DFk+9Wb0z/cSsfyFrUSLUiQ0hZOx+fuuxf5bbNvnUNdXgMqai8WP11f9IBXPBad3w== +"@metamask/controllers@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@metamask/controllers/-/controllers-4.2.0.tgz#ee304fa26aa1d291e21e7969dffee0977b149cbf" + integrity sha512-NPpBFP6x2YPEdJhjP5jC9E/WHJ+FJNWH7wf8he5/dfeY0J9hlXgkRv6vrvYI3wo6YvcgPy3IF1EOA0rR4jNbeg== dependencies: await-semaphore "^0.1.3" eth-contract-metadata "^1.11.0" eth-ens-namehash "^2.0.8" eth-json-rpc-infura "^5.1.0" - eth-keyring-controller "^5.6.1" + eth-keyring-controller "^6.1.0" eth-method-registry "1.1.0" eth-phishing-detect "^1.1.13" eth-query "^2.1.2" @@ -1879,9 +1879,9 @@ hdkey "0.8.0" "@metamask/eth-token-tracker@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@metamask/eth-token-tracker/-/eth-token-tracker-3.0.1.tgz#36b89f39c2af2ac41aa600dcedd2341704d94484" - integrity sha512-vlSKnI27zMCbaDOAHG5apYXoZgO833GUOP6/gkkzuKNEE7QZZCMti/9U6DYfrE8QvgbWyt/RjZkF3cTXXjBhCA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/@metamask/eth-token-tracker/-/eth-token-tracker-3.1.0.tgz#1396c5d88401f3cd598b0c86d3a42951c8e78d73" + integrity sha512-SopDFnIu7lI8aloD9HGPEpqlcjZNzZ5BeXZqrNRSdSO+CGpuwmFoeyrCrgEmrlkKQvP8dQi6R6aYK/itFPhPrg== dependencies: deep-equal "^1.1.0" eth-block-tracker "^4.4.2" @@ -1891,10 +1891,10 @@ human-standard-token-abi "^1.0.2" safe-event-emitter "^1.0.1" -"@metamask/etherscan-link@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@metamask/etherscan-link/-/etherscan-link-1.2.0.tgz#677aa49774bd41a1f0fe783a9c04e13075ad73d2" - integrity sha512-zSrOowUdEmr2u3HrlrO/dn1Wc6REXvs0bV1m9/JJmzLw1fXpJQ6qn2sPeu/KtZF0Im9iPt4a01nGjFuhzot54w== +"@metamask/etherscan-link@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@metamask/etherscan-link/-/etherscan-link-1.3.0.tgz#ce5b9e0083f51386f8f462110b4094cf6243022c" + integrity sha512-2BLaSJLqOIq5CasneVqortc7sPMjgXDTdPv4dSjseF+RUtv/HPTSXZPhV2dFkGd/n+eCQoevPRVOFsVvuRnFeA== "@metamask/forwarder@^1.1.0": version "1.1.0"