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 && (
-
-
-
- )
+
+
+
)
}
@@ -357,6 +357,7 @@ export default class AccountMenu extends Component {
}
text={t('createAccount')}
@@ -377,6 +378,7 @@ export default class AccountMenu extends Component {
}
text={t('importAccount')}
@@ -401,6 +403,7 @@ export default class AccountMenu extends Component {
}
text={t('connectHardwareWallet')}
@@ -411,7 +414,7 @@ export default class AccountMenu extends Component {
toggleAccountMenu()
history.push(ABOUT_US_ROUTE)
}}
- icon={ }
+ icon={ }
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) => {
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')}
>
-
+
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()}
- />
-
,
+
this.handleSubmit()}
+ >
+
+ ,
]
}
@@ -60,12 +62,13 @@ class EditableLabel extends Component {
{this.state.value}
,
-
- this.setState({ isEditing: true })}
- />
-
,
+
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 && (
+
+ )}
{
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"