1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Merge pull request #11855 from MetaMask/Version-v10.0.2

Version v10.0.2 RC
This commit is contained in:
ryanml 2021-08-18 08:33:59 -07:00 committed by GitHub
commit 0e7aec27c7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
64 changed files with 173 additions and 204 deletions

View File

@ -6,6 +6,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
## [10.0.2]
### Added
- [#11818](https://github.com/MetaMask/metamask-extension/pull/11818): Add gas recommendation options to cancel and speed up popovers
### Changed
- [#11853](https://github.com/MetaMask/metamask-extension/pull/11853): Allow editing custom gas while estimate is loading
- [#11862](https://github.com/MetaMask/metamask-extension/pull/11862): Increase saliency of mobile sync warning text
- [#11872](https://github.com/MetaMask/metamask-extension/pull/11872): Default gas limit in edit gas popover to 0 when estimates are unavailable
- [#11873](https://github.com/MetaMask/metamask-extension/pull/11873): Update copy on tooltip shown when dapp suggests gas fees
### Fixed
- [#11852](https://github.com/MetaMask/metamask-extension/pull/11852): Improve flashing behavior for loading gas estimates (Confirmation Screen)
- [#11874](https://github.com/MetaMask/metamask-extension/pull/11874): Fixes Trezor pairing integration
## [10.0.1] ## [10.0.1]
### Fixed ### Fixed
- [#11813](https://github.com/MetaMask/metamask-extension/pull/11813): Fix error reporting version configuration - [#11813](https://github.com/MetaMask/metamask-extension/pull/11813): Fix error reporting version configuration
@ -2399,7 +2413,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Uncategorized ### Uncategorized
- Added the ability to restore accounts from seed words. - Added the ability to restore accounts from seed words.
[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.0.1...HEAD [Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.0.2...HEAD
[10.0.2]: https://github.com/MetaMask/metamask-extension/compare/v10.0.1...v10.0.2
[10.0.1]: https://github.com/MetaMask/metamask-extension/compare/v10.0.0...v10.0.1 [10.0.1]: https://github.com/MetaMask/metamask-extension/compare/v10.0.0...v10.0.1
[10.0.0]: https://github.com/MetaMask/metamask-extension/compare/v9.8.4...v10.0.0 [10.0.0]: https://github.com/MetaMask/metamask-extension/compare/v9.8.4...v10.0.0
[9.8.4]: https://github.com/MetaMask/metamask-extension/compare/v9.8.3...v9.8.4 [9.8.4]: https://github.com/MetaMask/metamask-extension/compare/v9.8.3...v9.8.4

View File

@ -582,9 +582,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "የ MetaMask ስሪት" "message": "የ MetaMask ስሪት"
}, },
"mobileSyncText": {
"message": "እርስዎ መሆንዎትን ለማረጋገጥ እባከዎ የይለፍ ቃልዎን ያስገቡ!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "ቢያንስ 1 ተለዋጭ ስም መምረጥ አለብዎ።" "message": "ቢያንስ 1 ተለዋጭ ስም መምረጥ አለብዎ።"
}, },

View File

@ -578,9 +578,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "إصدار MetaMask " "message": "إصدار MetaMask "
}, },
"mobileSyncText": {
"message": "يرجى إدخال كلمة مرورك لتأكيد هويتك!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "يجب تحديد عملة رمزية واحدة على الأقل." "message": "يجب تحديد عملة رمزية واحدة على الأقل."
}, },

View File

@ -581,9 +581,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "Версия на MetaMask" "message": "Версия на MetaMask"
}, },
"mobileSyncText": {
"message": "Моля, въведете вашата парола, за да потвърдите, че сте вие!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Трябва да изберете поне 1 жетон." "message": "Трябва да изберете поне 1 жетон."
}, },

View File

@ -585,9 +585,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "MetaMask সংস্করণ" "message": "MetaMask সংস্করণ"
}, },
"mobileSyncText": {
"message": "এটি যে আপনি তা নিশ্চিত করতে অনুগ্রহ করে আপনার পাসওয়ার্ড লিখুন!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "অবশ্যই অন্তত 1টি টোকেন নির্বাচন করতে হবে।" "message": "অবশ্যই অন্তত 1টি টোকেন নির্বাচন করতে হবে।"
}, },

View File

@ -569,9 +569,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "Versió MetaMask" "message": "Versió MetaMask"
}, },
"mobileSyncText": {
"message": "Si us plau, introdueix la teva contrasenya per confirmar que ets tu!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Has de seleccionar " "message": "Has de seleccionar "
}, },

View File

@ -569,9 +569,6 @@
"metamaskDescription": { "metamaskDescription": {
"message": "Som forbinder dig til Ethereum og de decentraliserede internet." "message": "Som forbinder dig til Ethereum og de decentraliserede internet."
}, },
"mobileSyncText": {
"message": "Indtast din adgangskode for at bekræfte, at det er dig!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Skal vælge mindst 1 token." "message": "Skal vælge mindst 1 token."
}, },

View File

@ -564,9 +564,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "MetaMask-Version" "message": "MetaMask-Version"
}, },
"mobileSyncText": {
"message": "Bitte geben Sie Ihr Passwort ein, um Ihre Identität zu verifizieren!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Du musst mindestens 1 Token auswählen." "message": "Du musst mindestens 1 Token auswählen."
}, },

View File

@ -582,9 +582,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "Έκδοση MetaMask " "message": "Έκδοση MetaMask "
}, },
"mobileSyncText": {
"message": "Παρακαλούμε δώστε τον κωδικό πρόσβασής σας για να επιβεβαιώσετε ότι είστε εσείς!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Πρέπει να επιλέξετε 1 τουλάχιστον διακριτικό." "message": "Πρέπει να επιλέξετε 1 τουλάχιστον διακριτικό."
}, },

View File

@ -1298,8 +1298,8 @@
"message": "verify the network details", "message": "verify the network details",
"description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key." "description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key."
}, },
"mobileSyncText": { "mobileSyncWarning": {
"message": "Please enter your password to confirm it's you!" "message": "⚠️ Proceeding will display a secret QR code that allows access to your accounts. Do not share it with anyone. Support staff will never ask your for it."
}, },
"mustSelectOne": { "mustSelectOne": {
"message": "Must select at least 1 token." "message": "Must select at least 1 token."
@ -2515,7 +2515,7 @@
"description": "$1 represents a dapp origin" "description": "$1 represents a dapp origin"
}, },
"transactionDetailDappGasTooltip": { "transactionDetailDappGasTooltip": {
"message": "This gas fee suggestion is using legacy gas estimation which may be inaccurate." "message": "Edit to use MetaMask's recommended gas fee based on the latest block."
}, },
"transactionDetailGasHeading": { "transactionDetailGasHeading": {
"message": "Estimated gas fee" "message": "Estimated gas fee"

View File

@ -1127,9 +1127,6 @@
"message": "verifique los detalles de la red", "message": "verifique los detalles de la red",
"description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key." "description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key."
}, },
"mobileSyncText": {
"message": "Escriba su contraseña para confirmar que es usted."
},
"mustSelectOne": { "mustSelectOne": {
"message": "Debe seleccionar al menos 1 token." "message": "Debe seleccionar al menos 1 token."
}, },

View File

@ -1127,9 +1127,6 @@
"message": "verifique los detalles de la red", "message": "verifique los detalles de la red",
"description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key." "description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key."
}, },
"mobileSyncText": {
"message": "Escriba su contraseña para confirmar que es usted."
},
"mustSelectOne": { "mustSelectOne": {
"message": "Debe seleccionar al menos 1 token." "message": "Debe seleccionar al menos 1 token."
}, },

View File

@ -575,9 +575,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "MetaMaski versioon" "message": "MetaMaski versioon"
}, },
"mobileSyncText": {
"message": "Sisestage parool, et saaksime teid tuvastada!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Peate valima vähemalt 1 loa." "message": "Peate valima vähemalt 1 loa."
}, },

View File

@ -585,9 +585,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "نسخه MetaMask" "message": "نسخه MetaMask"
}, },
"mobileSyncText": {
"message": "لطفًا رمز عبور را وارد نمایید تا تأیید شود که خود شما هستید!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "باید حداقل 1 رمزیاب را انتخاب کنید." "message": "باید حداقل 1 رمزیاب را انتخاب کنید."
}, },

View File

@ -585,9 +585,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "MetaMask-versio" "message": "MetaMask-versio"
}, },
"mobileSyncText": {
"message": "Vahvista henkilöllisyytesi antamalla salasanasi!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Valittava vähintään 1 poletti." "message": "Valittava vähintään 1 poletti."
}, },

View File

@ -523,9 +523,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "Bersyon ng MetaMask" "message": "Bersyon ng MetaMask"
}, },
"mobileSyncText": {
"message": "Pakilagay ang iyong password para kumpirmahing ikaw ito!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Dapat pumili ng kahit 1 token." "message": "Dapat pumili ng kahit 1 token."
}, },

View File

@ -570,9 +570,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "Version de MetaMask" "message": "Version de MetaMask"
}, },
"mobileSyncText": {
"message": "Veuillez entrer votre mot de passe pour confirmer que c'est bien vous !"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Vous devez selectionner au moins 1 jeton." "message": "Vous devez selectionner au moins 1 jeton."
}, },

View File

@ -582,9 +582,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "גרסת MetaMask" "message": "גרסת MetaMask"
}, },
"mobileSyncText": {
"message": "נא להזין את הססמה שלך כדי לאשר שזה/זו אכן את/ה!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "חובה לבחור לפחות אסימון אחד." "message": "חובה לבחור לפחות אסימון אחד."
}, },

View File

@ -1127,9 +1127,6 @@
"message": "नेटवर्क विवरण सत्यापित करें", "message": "नेटवर्क विवरण सत्यापित करें",
"description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key." "description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key."
}, },
"mobileSyncText": {
"message": "कृपया यह पुष्टि करने के लिए अपना पासवर्ड दर्ज करें कि यह आप ही हैं!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "कम से कम 1 टोकन का चयन करना चाहिए।" "message": "कम से कम 1 टोकन का चयन करना चाहिए।"
}, },

View File

@ -578,9 +578,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "Inačica usluge MetaMask" "message": "Inačica usluge MetaMask"
}, },
"mobileSyncText": {
"message": "Upišite svoju lozinku kako biste potvrdili da ste to vi!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Mora se odabrati barem jedan token." "message": "Mora se odabrati barem jedan token."
}, },

View File

@ -578,9 +578,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "MetaMask verzió" "message": "MetaMask verzió"
}, },
"mobileSyncText": {
"message": "Kérünk írd be jelszavad, hogy igazold kiléted!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Legalább 1 tokent ki kell választania." "message": "Legalább 1 tokent ki kell választania."
}, },

View File

@ -1127,9 +1127,6 @@
"message": "verifikasi detail jaringan", "message": "verifikasi detail jaringan",
"description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key." "description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key."
}, },
"mobileSyncText": {
"message": "Masukkan kata sandi Anda untuk memastikan ini adalah Anda!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Harus memilih sekurangnya 1 token." "message": "Harus memilih sekurangnya 1 token."
}, },

View File

@ -966,9 +966,6 @@
"metametricsOptInDescription": { "metametricsOptInDescription": {
"message": "MetaMask vorrebbe raccogliere dati di utilizzo per capire meglio come gli utenti interagiscono con l'estensione. Questi dati verranno usati continuamente per migliorare l'usabilità e l'esperienza utente dei nostri prodotti e dell'ecosistema Ethereum." "message": "MetaMask vorrebbe raccogliere dati di utilizzo per capire meglio come gli utenti interagiscono con l'estensione. Questi dati verranno usati continuamente per migliorare l'usabilità e l'esperienza utente dei nostri prodotti e dell'ecosistema Ethereum."
}, },
"mobileSyncText": {
"message": "Per favore inserisci la password per confermare che sei te!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Devi selezionare almeno un token." "message": "Devi selezionare almeno un token."
}, },

View File

@ -1127,9 +1127,6 @@
"message": "ネットワークの詳細を確認します", "message": "ネットワークの詳細を確認します",
"description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key." "description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key."
}, },
"mobileSyncText": {
"message": "本人であることを確認するためにパスワードを入力してください!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "トークンを 1 つ以上選択する必要があります。" "message": "トークンを 1 つ以上選択する必要があります。"
}, },

View File

@ -585,9 +585,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "MetaMask ಆವೃತ್ತಿ" "message": "MetaMask ಆವೃತ್ತಿ"
}, },
"mobileSyncText": {
"message": "ಇದು ನೀವೇ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಲು ದಯವಿಟ್ಟು ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ನಮೂದಿಸಿ!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "ಕನಿಷ್ಟ 1 ಟೋಕನ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಬೇಕು." "message": "ಕನಿಷ್ಟ 1 ಟೋಕನ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಬೇಕು."
}, },

View File

@ -1127,9 +1127,6 @@
"message": "네트워크 세부 정보 검증", "message": "네트워크 세부 정보 검증",
"description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key." "description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key."
}, },
"mobileSyncText": {
"message": "암호를 입력하여 본인임을 인증하세요."
},
"mustSelectOne": { "mustSelectOne": {
"message": "토큰을 1개 이상 선택해야 합니다." "message": "토큰을 1개 이상 선택해야 합니다."
}, },

View File

@ -585,9 +585,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "„MetaMask“ versija" "message": "„MetaMask“ versija"
}, },
"mobileSyncText": {
"message": "Įveskite savo slaptažodį, kad patvirtintumėte, jog tai tikrai jūs!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Turite pasirinkti bent 1 žetoną." "message": "Turite pasirinkti bent 1 žetoną."
}, },

View File

@ -581,9 +581,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "MetaMask versija" "message": "MetaMask versija"
}, },
"mobileSyncText": {
"message": "Lūdzu, ievadiet paroli, lai apstiprinātu, ka tas esat jūs."
},
"mustSelectOne": { "mustSelectOne": {
"message": "Jāatlasa vismaz 1 marķieris." "message": "Jāatlasa vismaz 1 marķieris."
}, },

View File

@ -565,9 +565,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "Versi MetaMask" "message": "Versi MetaMask"
}, },
"mobileSyncText": {
"message": "Sila masukkan kata laluan anda untuk mengesahkan ini memang anda!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Mesti memilih sekurang-kurangnya 1 token." "message": "Mesti memilih sekurang-kurangnya 1 token."
}, },

View File

@ -572,9 +572,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "MetaMask-versjon " "message": "MetaMask-versjon "
}, },
"mobileSyncText": {
"message": "Vennligst skriv inn passordet ditt for å bekrefte at det er deg!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Må velge minst 1 token. " "message": "Må velge minst 1 token. "
}, },

View File

@ -1127,9 +1127,6 @@
"message": "i-verify ang mga detalye ng network", "message": "i-verify ang mga detalye ng network",
"description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key." "description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key."
}, },
"mobileSyncText": {
"message": "Pakilagay ang iyong password para makumpirmang ikaw nga ito!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Dapat pumili ng kahit 1 token lang." "message": "Dapat pumili ng kahit 1 token lang."
}, },

View File

@ -582,9 +582,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "Wersja MetaMask" "message": "Wersja MetaMask"
}, },
"mobileSyncText": {
"message": "Wpisz hasło, aby potwierdzić, że to Ty!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Należy wybrać co najmniej 1 token." "message": "Należy wybrać co najmniej 1 token."
}, },

View File

@ -1127,9 +1127,6 @@
"message": "Verifique os detalhes da rede", "message": "Verifique os detalhes da rede",
"description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key." "description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key."
}, },
"mobileSyncText": {
"message": "Informe sua senha para confirmar que é você mesmo!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Selecione pelo menos 1 token." "message": "Selecione pelo menos 1 token."
}, },

View File

@ -572,9 +572,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "Versiune MetaMask" "message": "Versiune MetaMask"
}, },
"mobileSyncText": {
"message": "Vă rugăm introduceți parola pentru a vă confirma identitatea!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Trebuie să selectați cel puțin 1 simbol." "message": "Trebuie să selectați cel puțin 1 simbol."
}, },

View File

@ -1127,9 +1127,6 @@
"message": "проверить сведения о сети", "message": "проверить сведения о сети",
"description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key." "description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key."
}, },
"mobileSyncText": {
"message": "Введите свой пароль, чтобы подтвердить ваш личность!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Необходимо выбрать хотя бы 1 токен." "message": "Необходимо выбрать хотя бы 1 токен."
}, },

View File

@ -557,9 +557,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "Verzia MetaMask" "message": "Verzia MetaMask"
}, },
"mobileSyncText": {
"message": "Zadajte svoje heslo a potvrďte, že ste to vy!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Musíte zvolit aspoň 1 token." "message": "Musíte zvolit aspoň 1 token."
}, },

View File

@ -573,9 +573,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "Različica" "message": "Različica"
}, },
"mobileSyncText": {
"message": "Vnesite geslo in potrdite, da ste to vi."
},
"mustSelectOne": { "mustSelectOne": {
"message": "Izbran mora biti vsaj 1 žeton." "message": "Izbran mora biti vsaj 1 žeton."
}, },

View File

@ -576,9 +576,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "MetaMask verzija" "message": "MetaMask verzija"
}, },
"mobileSyncText": {
"message": "Molimo vas unesite šifru kako biste potvrdili da ste to vi!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Morate izabrati najmanje 1 token." "message": "Morate izabrati najmanje 1 token."
}, },

View File

@ -569,9 +569,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "MetaMask-version" "message": "MetaMask-version"
}, },
"mobileSyncText": {
"message": "Var vänlig ange ditt lösenord för att bekräfta att det är du!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Minst 1 token måste väljas." "message": "Minst 1 token måste väljas."
}, },

View File

@ -563,9 +563,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "Toleo la MetaMask" "message": "Toleo la MetaMask"
}, },
"mobileSyncText": {
"message": "Tafadhali ingiza nenosiri lako ili kuthibitisha kuwa ni wewe!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Lazima uchague angalau kianzio 1." "message": "Lazima uchague angalau kianzio 1."
}, },

View File

@ -960,9 +960,6 @@
"metametricsOptInDescription": { "metametricsOptInDescription": {
"message": "Gustong kunin ng MetaMask ang data ng paggamit para mas maunawaan kung paano ginagamit ng mga user namin ang extension. Gagamitin ang data na ito para patuloy na mapahusay ang kakayahang magamit at karanasan ng user sa paggamit ng produkto namin at Ethereum ecosystem." "message": "Gustong kunin ng MetaMask ang data ng paggamit para mas maunawaan kung paano ginagamit ng mga user namin ang extension. Gagamitin ang data na ito para patuloy na mapahusay ang kakayahang magamit at karanasan ng user sa paggamit ng produkto namin at Ethereum ecosystem."
}, },
"mobileSyncText": {
"message": "Pakilagay ang iyong password para makumpirmang ikaw nga ito!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Dapat pumili ng kahit 1 token lang." "message": "Dapat pumili ng kahit 1 token lang."
}, },

View File

@ -585,9 +585,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "Версія MetaMask" "message": "Версія MetaMask"
}, },
"mobileSyncText": {
"message": "Введіть пароль, щоб підтвердити свою особу!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Слід вибрати хоча б 1 токен." "message": "Слід вибрати хоча б 1 токен."
}, },

View File

@ -1127,9 +1127,6 @@
"message": "xác minh thông tin về mạng", "message": "xác minh thông tin về mạng",
"description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key." "description": "Serves as link text for the 'mismatchedChain' key. This text will be embedded inside the translation for that key."
}, },
"mobileSyncText": {
"message": "Vui lòng nhập mật khẩu để xác nhận đây là bạn!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "Phải chọn ít nhất 1 token." "message": "Phải chọn ít nhất 1 token."
}, },

View File

@ -963,9 +963,6 @@
"metametricsOptInDescription": { "metametricsOptInDescription": {
"message": "MetaMask 希望收集使用数据,以更好地了解我们的用户如何与扩展进行互动。这些数据将被用于持续改进我们产品和 Ethereum 生态系统的可用性和用户体验。" "message": "MetaMask 希望收集使用数据,以更好地了解我们的用户如何与扩展进行互动。这些数据将被用于持续改进我们产品和 Ethereum 生态系统的可用性和用户体验。"
}, },
"mobileSyncText": {
"message": "请输入密码确认个人身份!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "至少选择 1 种代币。" "message": "至少选择 1 种代币。"
}, },

View File

@ -591,9 +591,6 @@
"metamaskVersion": { "metamaskVersion": {
"message": "MetaMask 版本" "message": "MetaMask 版本"
}, },
"mobileSyncText": {
"message": "請輸入密碼確認身份!"
},
"mustSelectOne": { "mustSelectOne": {
"message": "必須選擇至少 1 代幣" "message": "必須選擇至少 1 代幣"
}, },

View File

@ -74,13 +74,21 @@ function createScriptTasks({ browserPlatforms, livereload }) {
return { dev, test, testDev, prod }; return { dev, test, testDev, prod };
function createTasksForBuildJsExtension({ taskPrefix, devMode, testing }) { function createTasksForBuildJsExtension({ taskPrefix, devMode, testing }) {
const standardEntryPoints = ['background', 'ui', 'phishing-detect']; const standardEntryPoints = [
'background',
'ui',
'phishing-detect',
'content-script',
];
const standardSubtask = createTask( const standardSubtask = createTask(
`${taskPrefix}:standardEntryPoints`, `${taskPrefix}:standardEntryPoints`,
createFactoredBuild({ createFactoredBuild({
entryFiles: standardEntryPoints.map( entryFiles: standardEntryPoints.map((label) => {
(label) => `./app/scripts/${label}.js`, if (label === 'content-script') {
), return './app/vendor/trezor/content-script.js';
}
return `./app/scripts/${label}.js`;
}),
devMode, devMode,
testing, testing,
browserPlatforms, browserPlatforms,
@ -277,6 +285,15 @@ function createFactoredBuild({
renderHtmlFile('background', groupSet, commonSet, browserPlatforms); renderHtmlFile('background', groupSet, commonSet, browserPlatforms);
break; break;
} }
case 'content-script': {
renderHtmlFile(
'trezor-usb-permissions',
groupSet,
commonSet,
browserPlatforms,
);
break;
}
default: { default: {
throw new Error(`buildsys - unknown groupLabel "${groupLabel}"`); throw new Error(`buildsys - unknown groupLabel "${groupLabel}"`);
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "metamask-crx", "name": "metamask-crx",
"version": "10.0.1", "version": "10.0.2",
"private": true, "private": true,
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -38,3 +38,23 @@ export function isLegacyTransaction(transaction) {
isHexString(transaction.txParams.gasPrice)) isHexString(transaction.txParams.gasPrice))
); );
} }
/**
* Determine if a transactions gas fees in txParams match those in its dappSuggestedGasFees property
* @param {import("../constants/transaction").TransactionMeta} transaction -
* the transaction to check
* @returns {boolean} true if both the txParams and dappSuggestedGasFees are objects with truthy gas fee properties,
* and those properties are strictly equal
*/
export function txParamsAreDappSuggested(transaction) {
const { gasPrice, maxPriorityFeePerGas, maxFeePerGas } =
transaction?.txParams || {};
return (
(gasPrice && gasPrice === transaction?.dappSuggestedGasFees?.gasPrice) ||
(maxPriorityFeePerGas &&
maxFeePerGas &&
transaction?.dappSuggestedGasFees?.maxPriorityFeePerGas ===
maxPriorityFeePerGas &&
transaction?.dappSuggestedGasFees?.maxFeePerGas === maxFeePerGas)
);
}

View File

@ -8,7 +8,6 @@ import { GAS_ESTIMATE_TYPES } from '../../../../shared/constants/gas';
import { getGasFormErrorText } from '../../../helpers/constants/gas'; import { getGasFormErrorText } from '../../../helpers/constants/gas';
import { checkNetworkAndAccountSupports1559 } from '../../../selectors'; import { checkNetworkAndAccountSupports1559 } from '../../../selectors';
import { getIsGasEstimatesLoading } from '../../../ducks/metamask/metamask'; import { getIsGasEstimatesLoading } from '../../../ducks/metamask/metamask';
import { getGasLoadingAnimationIsShowing } from '../../../ducks/app/app';
export default function AdvancedGasControls({ export default function AdvancedGasControls({
gasEstimateType, gasEstimateType,
@ -31,11 +30,6 @@ export default function AdvancedGasControls({
checkNetworkAndAccountSupports1559, checkNetworkAndAccountSupports1559,
); );
const isGasEstimatesLoading = useSelector(getIsGasEstimatesLoading); const isGasEstimatesLoading = useSelector(getIsGasEstimatesLoading);
const isGasLoadingAnimationIsShowing = useSelector(
getGasLoadingAnimationIsShowing,
);
const disableFormFields =
isGasEstimatesLoading || isGasLoadingAnimationIsShowing;
const showFeeMarketFields = const showFeeMarketFields =
networkAndAccountSupport1559 && networkAndAccountSupport1559 &&
@ -80,7 +74,6 @@ export default function AdvancedGasControls({
? getGasFormErrorText(gasErrors.maxPriorityFee, t) ? getGasFormErrorText(gasErrors.maxPriorityFee, t)
: null : null
} }
disabled={disableFormFields}
/> />
<FormField <FormField
titleText={t('maxFee')} titleText={t('maxFee')}
@ -98,7 +91,6 @@ export default function AdvancedGasControls({
? getGasFormErrorText(gasErrors.maxFee, t) ? getGasFormErrorText(gasErrors.maxFee, t)
: null : null
} }
disabled={disableFormFields}
/> />
</> </>
) : ( ) : (
@ -118,7 +110,6 @@ export default function AdvancedGasControls({
? getGasFormErrorText(gasErrors.gasPrice, t) ? getGasFormErrorText(gasErrors.gasPrice, t)
: null : null
} }
disabled={disableFormFields}
/> />
</> </>
)} )}

View File

@ -88,4 +88,8 @@
.page-container__footer { .page-container__footer {
margin-top: auto; margin-top: auto;
} }
&__currency-container {
position: relative;
}
} }

View File

@ -67,6 +67,7 @@ export default function EditGasDisplay({
balanceError, balanceError,
estimatesUnavailableWarning, estimatesUnavailableWarning,
hasGasErrors, hasGasErrors,
txParamsHaveBeenCustomized,
}) { }) {
const t = useContext(I18nContext); const t = useContext(I18nContext);
const isMainnet = useSelector(getIsMainnet); const isMainnet = useSelector(getIsMainnet);
@ -96,12 +97,13 @@ export default function EditGasDisplay({
dappSuggestedAndTxParamGasFeesAreTheSame, dappSuggestedAndTxParamGasFeesAreTheSame,
); );
const showTopError = balanceError || estimatesUnavailableWarning; const showTopError =
(balanceError || estimatesUnavailableWarning) &&
(!isGasEstimatesLoading || txParamsHaveBeenCustomized);
const radioButtonsEnabled = const radioButtonsEnabled =
networkAndAccountSupport1559 && networkAndAccountSupport1559 &&
gasEstimateType === GAS_ESTIMATE_TYPES.FEE_MARKET && gasEstimateType === GAS_ESTIMATE_TYPES.FEE_MARKET &&
!requireDappAcknowledgement && !requireDappAcknowledgement;
![EDIT_GAS_MODES.SPEED_UP, EDIT_GAS_MODES.CANCEL].includes(mode);
let errorKey; let errorKey;
if (balanceError) { if (balanceError) {
@ -121,7 +123,7 @@ export default function EditGasDisplay({
/> />
</div> </div>
)} )}
{showTopError && !isGasEstimatesLoading && ( {showTopError && (
<div className="edit-gas-display__warning"> <div className="edit-gas-display__warning">
<ErrorMessage errorKey={errorKey} /> <ErrorMessage errorKey={errorKey} />
</div> </div>
@ -249,6 +251,7 @@ export default function EditGasDisplay({
{!requireDappAcknowledgement && {!requireDappAcknowledgement &&
(showAdvancedForm || (showAdvancedForm ||
hasGasErrors || hasGasErrors ||
estimatesUnavailableWarning ||
showAdvancedInlineGasIfPossible) && ( showAdvancedInlineGasIfPossible) && (
<AdvancedGasControls <AdvancedGasControls
gasEstimateType={gasEstimateType} gasEstimateType={gasEstimateType}
@ -316,4 +319,5 @@ EditGasDisplay.propTypes = {
balanceError: PropTypes.bool, balanceError: PropTypes.bool,
estimatesUnavailableWarning: PropTypes.bool, estimatesUnavailableWarning: PropTypes.bool,
hasGasErrors: PropTypes.bool, hasGasErrors: PropTypes.bool,
txParamsHaveBeenCustomized: PropTypes.bool,
}; };

View File

@ -64,5 +64,7 @@
&__warning { &__warning {
margin-bottom: 24px; margin-bottom: 24px;
position: relative;
margin-top: 4px;
} }
} }

View File

@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { useGasFeeInputs } from '../../../hooks/useGasFeeInputs'; import { useGasFeeInputs } from '../../../hooks/useGasFeeInputs';
import { getGasLoadingAnimationIsShowing } from '../../../ducks/app/app'; import { getGasLoadingAnimationIsShowing } from '../../../ducks/app/app';
import { txParamsAreDappSuggested } from '../../../../shared/modules/transaction.utils';
import { EDIT_GAS_MODES, GAS_LIMITS } from '../../../../shared/constants/gas'; import { EDIT_GAS_MODES, GAS_LIMITS } from '../../../../shared/constants/gas';
import { import {
@ -93,6 +93,9 @@ export default function EditGasPopover({
estimatedBaseFee, estimatedBaseFee,
} = useGasFeeInputs(defaultEstimateToUse, transaction, minimumGasLimit, mode); } = useGasFeeInputs(defaultEstimateToUse, transaction, minimumGasLimit, mode);
const txParamsHaveBeenCustomized =
estimateToUse === 'custom' || txParamsAreDappSuggested(transaction);
/** /**
* Temporary placeholder, this should be managed by the parent component but * Temporary placeholder, this should be managed by the parent component but
* we will be extracting this component from the hard to maintain modal/ * we will be extracting this component from the hard to maintain modal/
@ -129,11 +132,17 @@ export default function EditGasPopover({
gasPrice: decGWEIToHexWEI(gasPrice), gasPrice: decGWEIToHexWEI(gasPrice),
}; };
const cleanTransactionParams = { ...transaction.txParams };
if (networkAndAccountSupport1559) {
delete cleanTransactionParams.gasPrice;
}
const updatedTxMeta = { const updatedTxMeta = {
...transaction, ...transaction,
userFeeLevel: estimateToUse || 'custom', userFeeLevel: estimateToUse || 'custom',
txParams: { txParams: {
...transaction.txParams, ...cleanTransactionParams,
...newGasSettings, ...newGasSettings,
}, },
}; };
@ -210,9 +219,9 @@ export default function EditGasPopover({
onClick={onSubmit} onClick={onSubmit}
disabled={ disabled={
hasGasErrors || hasGasErrors ||
isGasEstimatesLoading ||
balanceError || balanceError ||
gasLoadingAnimationIsShowing ((isGasEstimatesLoading || gasLoadingAnimationIsShowing) &&
!txParamsHaveBeenCustomized)
} }
> >
{footerButtonText} {footerButtonText}
@ -262,6 +271,7 @@ export default function EditGasPopover({
balanceError={balanceError} balanceError={balanceError}
estimatesUnavailableWarning={estimatesUnavailableWarning} estimatesUnavailableWarning={estimatesUnavailableWarning}
hasGasErrors={hasGasErrors} hasGasErrors={hasGasErrors}
txParamsHaveBeenCustomized={txParamsHaveBeenCustomized}
{...editGasDisplayProps} {...editGasDisplayProps}
/> />
</> </>

View File

@ -1,33 +1,18 @@
import React, { useContext } from 'react'; import React, { useContext } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useSelector } from 'react-redux';
import { getIsGasEstimatesLoading } from '../../../ducks/metamask/metamask';
import { getGasLoadingAnimationIsShowing } from '../../../ducks/app/app';
import { I18nContext } from '../../../contexts/i18n'; import { I18nContext } from '../../../contexts/i18n';
import TransactionDetailItem from '../transaction-detail-item/transaction-detail-item.component'; import TransactionDetailItem from '../transaction-detail-item/transaction-detail-item.component';
import LoadingHeartBeat from '../../ui/loading-heartbeat';
export default function TransactionDetail({ rows = [], onEdit }) { export default function TransactionDetail({ rows = [], onEdit }) {
const t = useContext(I18nContext); const t = useContext(I18nContext);
const isGasEstimatesLoading = useSelector(getIsGasEstimatesLoading);
const gasLoadingAnimationIsShowing = useSelector(
getGasLoadingAnimationIsShowing,
);
return ( return (
<div className="transaction-detail"> <div className="transaction-detail">
{process.env.IN_TEST === 'true' ? null : <LoadingHeartBeat />}
{onEdit && ( {onEdit && (
<div className="transaction-detail-edit"> <div className="transaction-detail-edit">
<button <button onClick={onEdit}>{t('edit')}</button>
onClick={onEdit}
disabled={isGasEstimatesLoading || gasLoadingAnimationIsShowing}
>
{t('edit')}
</button>
</div> </div>
)} )}
<div className="transaction-detail-rows">{rows}</div> <div className="transaction-detail-rows">{rows}</div>

View File

@ -19,9 +19,7 @@
} }
@keyframes heartbeat { @keyframes heartbeat {
0% { opacity: 0; } 0% { opacity: 0.2; }
25% { opacity: 1; } 50% { opacity: 1; }
50% { opacity: 0.5; } 100% { opacity: 0.2; }
75% { opacity: 1; }
100% { opacity: 0; }
} }

View File

@ -16,6 +16,9 @@ import { toChecksumHexAddress } from '../../../shared/modules/hexstring-utils';
// formatData :: ( date: <Unix Timestamp> ) -> String // formatData :: ( date: <Unix Timestamp> ) -> String
export function formatDate(date, format = "M/d/y 'at' T") { export function formatDate(date, format = "M/d/y 'at' T") {
if (!date) {
return '';
}
return DateTime.fromMillis(date).toFormat(format); return DateTime.fromMillis(date).toFormat(format);
} }
@ -24,6 +27,9 @@ export function formatDateWithYearContext(
formatThisYear = 'MMM d', formatThisYear = 'MMM d',
fallback = 'MMM d, y', fallback = 'MMM d, y',
) { ) {
if (!date) {
return '';
}
const dateTime = DateTime.fromMillis(date); const dateTime = DateTime.fromMillis(date);
const now = DateTime.local(); const now = DateTime.local();
return dateTime.toFormat( return dateTime.toFormat(

View File

@ -229,7 +229,7 @@ export function useGasFeeInputs(
initialGasPrice && initialFeeParamsAreCustom ? initialGasPrice : null, initialGasPrice && initialFeeParamsAreCustom ? initialGasPrice : null,
); );
const [gasLimit, setGasLimit] = useState( const [gasLimit, setGasLimit] = useState(
Number(hexToDecimal(transaction?.txParams?.gas ?? minimumGasLimit)), Number(hexToDecimal(transaction?.txParams?.gas ?? '0x0')),
); );
const userPrefersAdvancedGas = useSelector(getAdvancedInlineGasShown); const userPrefersAdvancedGas = useSelector(getAdvancedInlineGasShown);
@ -456,7 +456,10 @@ export function useGasFeeInputs(
if (networkAndAccountSupports1559) { if (networkAndAccountSupports1559) {
estimatesUnavailableWarning = true; estimatesUnavailableWarning = true;
} }
if (bnLessThanEqualTo(gasPriceToUse, 0)) { if (
(!networkAndAccountSupports1559 || transaction?.txParams?.gasPrice) &&
bnLessThanEqualTo(gasPriceToUse, 0)
) {
gasErrors.gasPrice = GAS_FORM_ERRORS.GAS_PRICE_TOO_LOW; gasErrors.gasPrice = GAS_FORM_ERRORS.GAS_PRICE_TOO_LOW;
} }
break; break;

View File

@ -323,7 +323,12 @@ describe('useGasFeeInputs', () => {
}); });
it('should return true', () => { it('should return true', () => {
const { result } = renderHook(() => useGasFeeInputs()); const { result } = renderHook(() =>
useGasFeeInputs(null, {
userFeeLevel: 'medium',
txParams: { gas: '0x5208' },
}),
);
expect(result.current.balanceError).toBe(true); expect(result.current.balanceError).toBe(true);
}); });
}); });

View File

@ -40,9 +40,15 @@ export function useShouldAnimateGasEstimations() {
showLoadingAnimation === true showLoadingAnimation === true
) { ) {
dispatch(toggleGasLoadingAnimation(true)); dispatch(toggleGasLoadingAnimation(true));
}
}, [dispatch, isGasLoadingAnimationActive, showLoadingAnimation]);
useEffect(() => {
if (
isGasLoadingAnimationActive === true &&
showLoadingAnimation === false
) {
setTimeout(() => { setTimeout(() => {
console.log('Killing the toggleGasLoadingAnimation to false');
dispatch(toggleGasLoadingAnimation(false)); dispatch(toggleGasLoadingAnimation(false));
}, 2000); }, 2000);
} }

View File

@ -80,7 +80,7 @@ export function useTransactionDisplayData(transactionGroup) {
const primaryValue = primaryTransaction.txParams?.value; const primaryValue = primaryTransaction.txParams?.value;
let prefix = '-'; let prefix = '-';
const date = formatDateWithYearContext(initialTransaction.time || 0); const date = formatDateWithYearContext(initialTransaction.time);
let subtitle; let subtitle;
let subtitleContainsOrigin = false; let subtitleContainsOrigin = false;
let recipientAddress = to; let recipientAddress = to;

View File

@ -33,6 +33,7 @@ import { toBuffer } from '../../../shared/modules/buffer-utils';
import TransactionDetail from '../../components/app/transaction-detail/transaction-detail.component'; import TransactionDetail from '../../components/app/transaction-detail/transaction-detail.component';
import TransactionDetailItem from '../../components/app/transaction-detail-item/transaction-detail-item.component'; import TransactionDetailItem from '../../components/app/transaction-detail-item/transaction-detail-item.component';
import InfoTooltip from '../../components/ui/info-tooltip/info-tooltip'; import InfoTooltip from '../../components/ui/info-tooltip/info-tooltip';
import LoadingHeartBeat from '../../components/ui/loading-heartbeat';
import GasTiming from '../../components/app/gas-timing/gas-timing.component'; import GasTiming from '../../components/app/gas-timing/gas-timing.component';
import { COLORS } from '../../helpers/constants/design-system'; import { COLORS } from '../../helpers/constants/design-system';
@ -43,6 +44,9 @@ import {
removePollingTokenFromAppState, removePollingTokenFromAppState,
} from '../../store/actions'; } from '../../store/actions';
const renderHeartBeatIfNotInTest = () =>
process.env.IN_TEST === 'true' ? null : <LoadingHeartBeat />;
export default class ConfirmTransactionBase extends Component { export default class ConfirmTransactionBase extends Component {
static contextTypes = { static contextTypes = {
t: PropTypes.func, t: PropTypes.func,
@ -112,6 +116,7 @@ export default class ConfirmTransactionBase extends Component {
maxFeePerGas: PropTypes.string, maxFeePerGas: PropTypes.string,
maxPriorityFeePerGas: PropTypes.string, maxPriorityFeePerGas: PropTypes.string,
baseFeePerGas: PropTypes.string, baseFeePerGas: PropTypes.string,
gasFeeIsCustom: PropTypes.bool,
}; };
state = { state = {
@ -196,6 +201,7 @@ export default class ConfirmTransactionBase extends Component {
txData: { simulationFails, txParams: { value: amount } = {} } = {}, txData: { simulationFails, txParams: { value: amount } = {} } = {},
customGas, customGas,
noGasPrice, noGasPrice,
gasFeeIsCustom,
} = this.props; } = this.props;
const insufficientBalance = const insufficientBalance =
@ -230,7 +236,7 @@ export default class ConfirmTransactionBase extends Component {
}; };
} }
if (noGasPrice) { if (noGasPrice && !gasFeeIsCustom) {
return { return {
valid: false, valid: false,
errorKey: GAS_PRICE_FETCH_FAILURE_ERROR_KEY, errorKey: GAS_PRICE_FETCH_FAILURE_ERROR_KEY,
@ -437,29 +443,41 @@ export default class ConfirmTransactionBase extends Component {
txData.dappSuggestedGasFees ? COLORS.SECONDARY1 : COLORS.BLACK txData.dappSuggestedGasFees ? COLORS.SECONDARY1 : COLORS.BLACK
} }
detailText={ detailText={
<UserPreferencedCurrencyDisplay <div className="confirm-page-container-content__currency-container">
type={SECONDARY} {renderHeartBeatIfNotInTest()}
value={hexMinimumTransactionFee} <UserPreferencedCurrencyDisplay
hideLabel={Boolean(useNativeCurrencyAsPrimaryCurrency)} type={SECONDARY}
/> value={hexMinimumTransactionFee}
hideLabel={Boolean(useNativeCurrencyAsPrimaryCurrency)}
/>
</div>
} }
detailTotal={ detailTotal={
<UserPreferencedCurrencyDisplay <div className="confirm-page-container-content__currency-container">
type={PRIMARY} {renderHeartBeatIfNotInTest()}
value={hexMinimumTransactionFee} <UserPreferencedCurrencyDisplay
hideLabel={!useNativeCurrencyAsPrimaryCurrency} type={PRIMARY}
/> value={hexMinimumTransactionFee}
hideLabel={!useNativeCurrencyAsPrimaryCurrency}
/>
</div>
} }
subText={t('editGasSubTextFee', [ subText={t('editGasSubTextFee', [
<b key="editGasSubTextFeeLabel"> <b key="editGasSubTextFeeLabel">
{t('editGasSubTextFeeLabel')} {t('editGasSubTextFeeLabel')}
</b>, </b>,
<UserPreferencedCurrencyDisplay <div
key="editGasSubTextFeeAmount" key="editGasSubTextFeeValue"
type={PRIMARY} className="confirm-page-container-content__currency-container"
value={hexMaximumTransactionFee} >
hideLabel={!useNativeCurrencyAsPrimaryCurrency} {renderHeartBeatIfNotInTest()}
/>, <UserPreferencedCurrencyDisplay
key="editGasSubTextFeeAmount"
type={PRIMARY}
value={hexMaximumTransactionFee}
hideLabel={!useNativeCurrencyAsPrimaryCurrency}
/>
</div>,
])} ])}
subTitle={ subTitle={
<GasTiming <GasTiming
@ -829,6 +847,7 @@ export default class ConfirmTransactionBase extends Component {
showAccountInHeader, showAccountInHeader,
txData, txData,
gasIsLoading, gasIsLoading,
gasFeeIsCustom,
} = this.props; } = this.props;
const { const {
submitting, submitting,
@ -895,7 +914,7 @@ export default class ConfirmTransactionBase extends Component {
lastTx={lastTx} lastTx={lastTx}
ofText={ofText} ofText={ofText}
requestsWaitingText={requestsWaitingText} requestsWaitingText={requestsWaitingText}
disabled={!valid || submitting || gasIsLoading} disabled={!valid || submitting || (gasIsLoading && !gasFeeIsCustom)}
onEdit={() => this.handleEdit()} onEdit={() => this.handleEdit()}
onCancelAll={() => this.handleCancelAll()} onCancelAll={() => this.handleCancelAll()}
onCancel={() => this.handleCancel()} onCancel={() => this.handleCancel()}

View File

@ -31,7 +31,10 @@ import {
getPreferences, getPreferences,
} from '../../selectors'; } from '../../selectors';
import { getMostRecentOverviewPage } from '../../ducks/history/history'; import { getMostRecentOverviewPage } from '../../ducks/history/history';
import { transactionMatchesNetwork } from '../../../shared/modules/transaction.utils'; import {
transactionMatchesNetwork,
txParamsAreDappSuggested,
} from '../../../shared/modules/transaction.utils';
import { toChecksumHexAddress } from '../../../shared/modules/hexstring-utils'; import { toChecksumHexAddress } from '../../../shared/modules/hexstring-utils';
import { import {
updateTransactionGasFees, updateTransactionGasFees,
@ -155,6 +158,9 @@ const mapStateToProps = (state, ownProps) => {
const isEthGasPrice = getIsEthGasPriceFetched(state); const isEthGasPrice = getIsEthGasPriceFetched(state);
const noGasPrice = !supportsEIP1599 && getNoGasPriceFetched(state); const noGasPrice = !supportsEIP1599 && getNoGasPriceFetched(state);
const { useNativeCurrencyAsPrimaryCurrency } = getPreferences(state); const { useNativeCurrencyAsPrimaryCurrency } = getPreferences(state);
const gasFeeIsCustom =
fullTxData.userFeeLevel === 'custom' ||
txParamsAreDappSuggested(fullTxData);
return { return {
balance, balance,
@ -201,6 +207,7 @@ const mapStateToProps = (state, ownProps) => {
maxFeePerGas: gasEstimationObject.maxFeePerGas, maxFeePerGas: gasEstimationObject.maxFeePerGas,
maxPriorityFeePerGas: gasEstimationObject.maxPriorityFeePerGas, maxPriorityFeePerGas: gasEstimationObject.maxPriorityFeePerGas,
baseFeePerGas: gasEstimationObject.baseFeePerGas, baseFeePerGas: gasEstimationObject.baseFeePerGas,
gasFeeIsCustom,
}; };
}; };

View File

@ -317,7 +317,7 @@ export default class MobileSyncPage extends Component {
return screen === PASSWORD_PROMPT_SCREEN ? ( return screen === PASSWORD_PROMPT_SCREEN ? (
<div> <div>
{this.renderWarning(this.context.t('mobileSyncText'))} {this.renderWarning(this.context.t('mobileSyncWarning'))}
<div className="reveal-seed__content"> <div className="reveal-seed__content">
{this.renderPasswordPromptContent()} {this.renderPasswordPromptContent()}
</div> </div>
@ -404,7 +404,10 @@ export default class MobileSyncPage extends Component {
const { password } = this.state; const { password } = this.state;
return ( return (
<div className="new-account-import-form__buttons" style={{ padding: 30 }}> <div
className="new-account-import-form__buttons"
style={{ padding: 30, marginTop: 0 }}
>
<Button <Button
type="default" type="default"
large large

View File

@ -52,7 +52,10 @@ import {
isSwapsDefaultTokenAddress, isSwapsDefaultTokenAddress,
isSwapsDefaultTokenSymbol, isSwapsDefaultTokenSymbol,
} from '../../../../shared/modules/swaps.utils'; } from '../../../../shared/modules/swaps.utils';
import { SWAPS_CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP } from '../../../../shared/constants/swaps'; import {
SWAPS_CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP,
SWAPS_CHAINID_DEFAULT_TOKEN_MAP,
} from '../../../../shared/constants/swaps';
import { resetSwapsPostFetchState, removeToken } from '../../../store/actions'; import { resetSwapsPostFetchState, removeToken } from '../../../store/actions';
import { fetchTokenPrice, fetchTokenBalance } from '../swaps.util'; import { fetchTokenPrice, fetchTokenBalance } from '../swaps.util';
@ -370,7 +373,7 @@ export default function BuildQuote({
const swapYourTokenBalance = t('swapYourTokenBalance', [ const swapYourTokenBalance = t('swapYourTokenBalance', [
fromTokenString || '0', fromTokenString || '0',
fromTokenSymbol, fromTokenSymbol || SWAPS_CHAINID_DEFAULT_TOKEN_MAP[chainId]?.symbol || '',
]); ]);
return ( return (