aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorbrunobar79 <brunobar79@gmail.com>2018-10-21 13:59:53 +0800
committerbrunobar79 <brunobar79@gmail.com>2018-10-21 13:59:53 +0800
commit9c1b2108f69334884473eb95758e2d1c02c984d6 (patch)
tree93f5255399307a28cb9380dc23c275b406403929 /app
parent13820b6cc1801a420f39cdfecd7ccb5309dc597b (diff)
parentb0c649a4e3c68293e08e764bbf4d53939df88e2d (diff)
downloadtangerine-wallet-browser-9c1b2108f69334884473eb95758e2d1c02c984d6.tar
tangerine-wallet-browser-9c1b2108f69334884473eb95758e2d1c02c984d6.tar.gz
tangerine-wallet-browser-9c1b2108f69334884473eb95758e2d1c02c984d6.tar.bz2
tangerine-wallet-browser-9c1b2108f69334884473eb95758e2d1c02c984d6.tar.lz
tangerine-wallet-browser-9c1b2108f69334884473eb95758e2d1c02c984d6.tar.xz
tangerine-wallet-browser-9c1b2108f69334884473eb95758e2d1c02c984d6.tar.zst
tangerine-wallet-browser-9c1b2108f69334884473eb95758e2d1c02c984d6.zip
fix merge conflicts
Diffstat (limited to 'app')
-rw-r--r--app/_locales/en/messages.json21
-rw-r--r--app/_locales/index.json41
-rw-r--r--app/_locales/pl/messages.json1213
-rw-r--r--app/images/eth.svg14
-rw-r--r--app/manifest.json4
-rw-r--r--app/scripts/background.js3
-rw-r--r--app/scripts/controllers/preferences.js83
-rw-r--r--app/scripts/inpage.js2
-rw-r--r--app/scripts/lib/setupFetchDebugging.js34
-rw-r--r--app/scripts/metamask-controller.js13
10 files changed, 1373 insertions, 55 deletions
diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json
index 13b0da230..bf5854a31 100644
--- a/app/_locales/en/messages.json
+++ b/app/_locales/en/messages.json
@@ -140,6 +140,9 @@
"clickCopy": {
"message": "Click to Copy"
},
+ "clickToAdd": {
+ "message": "Click on $1 to add them to your account"
+ },
"close": {
"message": "Close"
},
@@ -361,6 +364,9 @@
"enterPasswordContinue": {
"message": "Enter password to continue"
},
+ "eth": {
+ "message": "ETH"
+ },
"etherscanView": {
"message": "View account on Etherscan"
},
@@ -380,7 +386,7 @@
"message": "Failed"
},
"fiat": {
- "message": "FIAT",
+ "message": "Fiat",
"description": "Exchange type"
},
"fileImportFail": {
@@ -638,6 +644,9 @@
"min": {
"message": "Minimum"
},
+ "missingYourTokens": {
+ "message": "Don't see your tokens?"
+ },
"myAccounts": {
"message": "My Accounts"
},
@@ -790,6 +799,12 @@
"prev": {
"message": "Prev"
},
+ "primaryCurrencySetting": {
+ "message": "Primary Currency"
+ },
+ "primaryCurrencySettingDescription": {
+ "message": "Select ETH to prioritize displaying values in ETH. Select Fiat to prioritize displaying values in your selected currency."
+ },
"privacyMsg": {
"message": "Privacy Policy"
},
@@ -798,7 +813,7 @@
"description": "select this type of file to use to import an account"
},
"privateKeyWarning": {
- "message": "Warning: Never disclose this key. Anyone with your private keys can take steal any assets held in your account."
+ "message": "Warning: Never disclose this key. Anyone with your private keys can steal any assets held in your account."
},
"privateNetwork": {
"message": "Private Network"
@@ -1189,7 +1204,7 @@
"message": "These 12 words are the only way to restore your MetaMask accounts.\nSave them somewhere safe and secret."
},
"typePassword": {
- "message": "Type Your Password"
+ "message": "Type your MetaMask password"
},
"uiWelcome": {
"message": "Welcome to the New UI (Beta)"
diff --git a/app/_locales/index.json b/app/_locales/index.json
index 0598aa9ec..234215e39 100644
--- a/app/_locales/index.json
+++ b/app/_locales/index.json
@@ -1,23 +1,24 @@
[
- { "code": "cs", "name": "Czech" },
- { "code": "de", "name": "German" },
+ { "code": "cs", "name": "Čeština" },
+ { "code": "de", "name": "Deutsche" },
{ "code": "en", "name": "English" },
- { "code": "es", "name": "Spanish" },
- { "code": "fr", "name": "French" },
- { "code": "ht", "name": "Haitian Creole" },
- { "code": "hn", "name": "Hindi" },
- { "code": "it", "name": "Italian" },
- { "code": "ja", "name": "Japanese" },
- { "code": "ko", "name": "Korean" },
- { "code": "nl", "name": "Dutch" },
- { "code": "ph", "name": "Tagalog" },
- { "code": "pt", "name": "Portuguese" },
- { "code": "ru", "name": "Russian" },
- { "code": "sl", "name": "Slovenian" },
- { "code": "th", "name": "Thai" },
- { "code": "tml", "name": "Tamil" },
- { "code": "tr", "name": "Turkish" },
- { "code": "vi", "name": "Vietnamese" },
- { "code": "zh_CN", "name": "Chinese (Simplified)" },
- { "code": "zh_TW", "name": "Chinese (Traditional)" }
+ { "code": "es", "name": "Español" },
+ { "code": "fr", "name": "Français" },
+ { "code": "ht", "name": "Kreyòl ayisyen" },
+ { "code": "hn", "name": "हिन्दी" },
+ { "code": "it", "name": "Italiano" },
+ { "code": "ja", "name": "日本語" },
+ { "code": "ko", "name": "한국어" },
+ { "code": "nl", "name": "Nederlands" },
+ { "code": "ph", "name": "Pilipino" },
+ { "code": "pl", "name": "Polskie" },
+ { "code": "pt", "name": "Português" },
+ { "code": "ru", "name": "Русский" },
+ { "code": "sl", "name": "Slovenščina" },
+ { "code": "th", "name": "ไทย" },
+ { "code": "tml", "name": "தமிழ்" },
+ { "code": "tr", "name": "Türkçe" },
+ { "code": "vi", "name": "Tiếng Việt" },
+ { "code": "zh_CN", "name": "中文(简体)" },
+ { "code": "zh_TW", "name": "中文(繁體)" }
]
diff --git a/app/_locales/pl/messages.json b/app/_locales/pl/messages.json
new file mode 100644
index 000000000..c6d797c34
--- /dev/null
+++ b/app/_locales/pl/messages.json
@@ -0,0 +1,1213 @@
+{
+ "accept": {
+ "message": "Akceptacja"
+ },
+ "accessingYourCamera": {
+ "message": "Uruchamianie kamery..."
+ },
+ "account": {
+ "message": "Konto"
+ },
+ "accountDetails": {
+ "message": "Szczegóły konta"
+ },
+ "accountName": {
+ "message": "Nazwa konta"
+ },
+ "accountSelectionRequired": {
+ "message": "Należy wybrać konto!"
+ },
+ "address": {
+ "message": "Adres"
+ },
+ "addCustomToken": {
+ "message": "Dodaj token"
+ },
+ "addToken": {
+ "message": "Dodaj token"
+ },
+ "addTokens": {
+ "message": "Dodaj tokeny"
+ },
+ "addSuggestedTokens": {
+ "message": "Dodaj sugerowane tokeny."
+ },
+ "addAcquiredTokens": {
+ "message": "Dodaj tokeny pozyskane przy pomocy MetaMask"
+ },
+ "amount": {
+ "message": "Ilość"
+ },
+ "amountPlusGas": {
+ "message": "Ilość + gaz"
+ },
+ "appDescription": {
+ "message": "Wtyczka przeglądarki do Ethereum",
+ "description": "Opis aplikacji"
+ },
+ "appName": {
+ "message": "MetaMask",
+ "description": "Nazwa aplikacji"
+ },
+ "approve": {
+ "message": "Zatwierdź"
+ },
+ "approved": {
+ "message": "Zatwierdzone"
+ },
+ "attemptingConnect": {
+ "message": "Próba połączenia z blockchainem."
+ },
+ "attributions": {
+ "message": "Atrybuty"
+ },
+ "available": {
+ "message": "Dostępne"
+ },
+ "back": {
+ "message": "Wstecz"
+ },
+ "balance": {
+ "message": "Ilość środków"
+ },
+ "balances": {
+ "message": "Ilość tokenów"
+ },
+ "balanceIsInsufficientGas": {
+ "message": "Niewystarczająca ilość środków na opłatę za gaz"
+ },
+ "beta": {
+ "message": "BETA"
+ },
+ "betweenMinAndMax": {
+ "message": "musi być większe lub równe $1 i mniejsze lub równe $2,",
+ "description": "pomoc przy wpisywaniu hex jako dane dziesiętne"
+ },
+ "blockiesIdenticon": {
+ "message": "Użyj Blockies Identicon"
+ },
+ "borrowDharma": {
+ "message": "Pożycz z Dharma (Beta)"
+ },
+ "browserNotSupported": {
+ "message": "Twoja przeglądarka nie jest obsługiwana..."
+ },
+ "builtInCalifornia": {
+ "message": "MetaMask został zaprojektowany i stworzony w Kaliforni."
+ },
+ "buy": {
+ "message": "Kup"
+ },
+ "buyCoinbase": {
+ "message": "Kup na Coinbase"
+ },
+ "buyCoinbaseExplainer": {
+ "message": "Coinbase to najpopularniejszy sposób na kupno i sprzedaż Bitcoin, Ethereum i Litecoin."
+ },
+ "bytes": {
+ "message": "Bajty"
+ },
+ "ok": {
+ "message": "Ok"
+ },
+ "cancel": {
+ "message": "Anuluj"
+ },
+ "classicInterface": {
+ "message": "Użyj klasycznego interfejsu"
+ },
+ "clickCopy": {
+ "message": "Kliknij żeby skopiować"
+ },
+ "close": {
+ "message": "Zamknij"
+ },
+ "chromeRequiredForHardwareWallets": {
+ "message": "Żeby połączyć się z portfelem sprzętowym, należy uruchomić MetaMask z przeglądarką Google Chrome."
+ },
+ "confirm": {
+ "message": "Potwierdź"
+ },
+ "confirmed": {
+ "message": "Potwierdzone"
+ },
+ "confirmContract": {
+ "message": "Zatwierdź kontrakt"
+ },
+ "confirmPassword": {
+ "message": "Potwierdź hasło"
+ },
+ "confirmTransaction": {
+ "message": "Potwierdź transakcję"
+ },
+ "connectHardwareWallet": {
+ "message": "Podłącz portfel sprzętowy"
+ },
+ "connect": {
+ "message": "Połącz"
+ },
+ "connecting": {
+ "message": "Łączenie..."
+ },
+ "connectToLedger": {
+ "message": "Połącz z Ledger"
+ },
+ "connectToTrezor": {
+ "message": "Połącz z Trezor"
+ },
+ "continue": {
+ "message": "Kontynuuj"
+ },
+ "continueToCoinbase": {
+ "message": "Przejdź do Coinbase"
+ },
+ "contractDeployment": {
+ "message": "Uruchomienie kontraktu"
+ },
+ "conversionProgress": {
+ "message": "Przeliczanie w toku"
+ },
+ "copiedButton": {
+ "message": "Skopiowane"
+ },
+ "copiedClipboard": {
+ "message": "Skopiowane do schowka"
+ },
+ "copiedExclamation": {
+ "message": "Skopiowane!"
+ },
+ "copiedSafe": {
+ "message": "Skopiowałem to w bezpieczne miejsce"
+ },
+ "copy": {
+ "message": "Skopiuj"
+ },
+ "copyContractAddress": {
+ "message": "Skopiuj adres kontaktowy"
+ },
+ "copyAddress": {
+ "message": "Skopiuj adres do schowka"
+ },
+ "copyToClipboard": {
+ "message": "Skopiuj do schowka"
+ },
+ "copyButton": {
+ "message": " Skopiuj "
+ },
+ "copyPrivateKey": {
+ "message": "To jest Twój prywatny klucz (kliknij żeby skopiować)"
+ },
+ "create": {
+ "message": "Utwórz"
+ },
+ "createAccount": {
+ "message": "Utwórz konto"
+ },
+ "createDen": {
+ "message": "Utwórz"
+ },
+ "crypto": {
+ "message": "Krypto",
+ "description": "Tym platformy wymiany (kryptowaluty)"
+ },
+ "currentConversion": {
+ "message": "Obecny kurs"
+ },
+ "currentNetwork": {
+ "message": "Bieżąca sieć"
+ },
+ "customGas": {
+ "message": "Ustaw gaz"
+ },
+ "customToken": {
+ "message": "Własny token"
+ },
+ "customize": {
+ "message": "Ustaw"
+ },
+ "customRPC": {
+ "message": "Własne RPC"
+ },
+ "decimalsMustZerotoTen": {
+ "message": "Liczb po przecinku musi być co najmniej 0 i nie więcej niż 36."
+ },
+ "decimal": {
+ "message": "Dokładność liczb po przecinku"
+ },
+ "defaultNetwork": {
+ "message": "Domyślna sieć dla Eteru to Main Net."
+ },
+ "denExplainer": {
+ "message": "Twój DEN to chroniony hasłem schowek w MetaMasku."
+ },
+ "deposit": {
+ "message": "Zdeponuj"
+ },
+ "depositBTC": {
+ "message": "Zdeponuj swoje BTC na poniższy adres:"
+ },
+ "depositCoin": {
+ "message": "Zdeponuj $1 na poniższy adres",
+ "description": "Pokazuje użytkownikowi jakie waluty wybrał do zdeponowania w ShapeShift"
+ },
+ "depositEth": {
+ "message": "Zdeponuj Eth"
+ },
+ "depositEther": {
+ "message": "Zdeponuj Eter"
+ },
+ "depositFiat": {
+ "message": "Zdeponuj w Fiat"
+ },
+ "depositFromAccount": {
+ "message": "Zdeponuj z innego konta"
+ },
+ "depositShapeShift": {
+ "message": "Zdeponuj przez ShapeShift"
+ },
+ "depositShapeShiftExplainer": {
+ "message": "Jeśli posiadasz inne kryptowaluty, możesz nimi handlować i deponować Eter bezpośrednio do swojego portfela MetaMask. Nie trzeba żadnego konta."
+ },
+ "details": {
+ "message": "Szczegóły"
+ },
+ "directDeposit": {
+ "message": "Bezpośredni depozyt"
+ },
+ "directDepositEther": {
+ "message": "Zdeponuj Eter bezpośrednio"
+ },
+ "directDepositEtherExplainer": {
+ "message": "Jeśli już masz Eter, najszybciej umieścisz go w swoim nowym portfelu przy pomocy bezpośredniego depozytu."
+ },
+ "done": {
+ "message": "Gotowe"
+ },
+ "downloadGoogleChrome": {
+ "message": "Ściągnij Google Chrome"
+ },
+ "downloadStateLogs": {
+ "message": "Załaduj logi stanów"
+ },
+ "dontHaveAHardwareWallet": {
+ "message": "Nie masz portfela sprzętowego?"
+ },
+ "dropped": {
+ "message": "Odrzucone"
+ },
+ "edit": {
+ "message": "Edytuj"
+ },
+ "editAccountName": {
+ "message": "Edytuj nazwę konta"
+ },
+ "editingTransaction": {
+ "message": "Dokonaj zmian w swojej transakcji"
+ },
+ "emailUs": {
+ "message": "Napisz do nas!"
+ },
+ "encryptNewDen": {
+ "message": "Zaszyfruj swój nowy DEN"
+ },
+ "ensNameNotFound": {
+ "message": "Nie znaleziono nazwy ENS"
+ },
+ "enterPassword": {
+ "message": "Wpisz hasło"
+ },
+ "enterPasswordConfirm": {
+ "message": "Wpisz hasło żeby potwierdzić"
+ },
+ "enterPasswordContinue": {
+ "message": "Podaj hasło żeby kontynuować"
+ },
+ "parameters": {
+ "message": "Parametry"
+ },
+ "passwordNotLongEnough": {
+ "message": "Hasło jest za krótkie"
+ },
+ "passwordsDontMatch": {
+ "message": "Hasła są niezgodne"
+ },
+ "etherscanView": {
+ "message": "Zobacz konto na Etherscan"
+ },
+ "exchangeRate": {
+ "message": "Kurs wymiany"
+ },
+ "exportPrivateKey": {
+ "message": "Eksportuj klucz prywatny"
+ },
+ "exportPrivateKeyWarning": {
+ "message": "Eksportujesz prywatne klucze na własne ryzyko."
+ },
+ "failed": {
+ "message": "Nie udało się"
+ },
+ "fiat": {
+ "message": "FIAT",
+ "description": "Rodzaj wymiany"
+ },
+ "fileImportFail": {
+ "message": "Importowanie pliku nie działa? Kliknij tutaj!",
+ "description": "Wspomaga użytkowników przy importowaniu ich konta z pliku JSON"
+ },
+ "followTwitter": {
+ "message": "Śledź nas na Twitterze"
+ },
+ "forgetDevice": {
+ "message": "Usuń to urządzenie."
+ },
+ "from": {
+ "message": "Z"
+ },
+ "fromToSame": {
+ "message": "Adresy Z i Do nie mogą być identyczne"
+ },
+ "fromShapeShift": {
+ "message": "Z ShapeShift"
+ },
+ "functionType": {
+ "message": "Typ funkcji"
+ },
+ "gas": {
+ "message": "Gaz",
+ "description": "Krótkie oznaczenie kosztu gazu"
+ },
+ "gasFee": {
+ "message": "Opłata za gaz"
+ },
+ "gasLimit": {
+ "message": "Limit gazu"
+ },
+ "gasLimitCalculation": {
+ "message": "Obliczamy sugerowany limit gazu na podstawie danych z transakcji w sieci."
+ },
+ "gasLimitRequired": {
+ "message": "Limit gazu jest wymagany"
+ },
+ "gasLimitTooLow": {
+ "message": "Limit gazu musi wynosić co najmniej 21000"
+ },
+ "generatingSeed": {
+ "message": "Generowanie seed..."
+ },
+ "gasPrice": {
+ "message": "Cena gazu (GWEI)"
+ },
+ "gasPriceCalculation": {
+ "message": "Obliczamy ceny gazu na podstawie danych z transakcji w sieci."
+ },
+ "gasPriceRequired": {
+ "message": "Wymagana cena gazu"
+ },
+ "generatingTransaction": {
+ "message": "Generowanie transakcji"
+ },
+ "getEther": {
+ "message": "Zdobądź Eter"
+ },
+ "getEtherFromFaucet": {
+ "message": "Zdobądź Eter ze źródła za $1",
+ "description": "Wyświetla nazwę sieci dla źródła Eteru"
+ },
+ "getHelp": {
+ "message": "Po pomoc."
+ },
+ "greaterThanMin": {
+ "message": "musi być większe lub równe $1.",
+ "description": "pomoc przy wpisywaniu hex jako dane dziesiętne"
+ },
+ "hardware": {
+ "message": "sprzęt"
+ },
+ "hardwareWalletConnected": {
+ "message": "Podłączono sprzętowy portfel"
+ },
+ "hardwareWallets": {
+ "message": "Podłącz sprzętowy portfel"
+ },
+ "hardwareWalletsMsg": {
+ "message": "Wybierz portfel sprzętowy, którego chcesz użyć z MetaMaskiem"
+ },
+ "havingTroubleConnecting": {
+ "message": "Problem z połączeniem?"
+ },
+ "here": {
+ "message": "tutaj",
+ "description": "jak w -kliknij tutaj- po więcej informacji (połączone z troubleTokenBalances)"
+ },
+ "hereList": {
+ "message": "Oto lista!!!"
+ },
+ "hexData": {
+ "message": "Dane Hex"
+ },
+ "hide": {
+ "message": "Schowaj"
+ },
+ "hideToken": {
+ "message": "Schowaj token"
+ },
+ "hideTokenPrompt": {
+ "message": "Schować token?"
+ },
+ "history": {
+ "message": "Historia"
+ },
+ "howToDeposit": {
+ "message": "Jak chcesz zdeponować Eter?"
+ },
+ "holdEther": {
+ "message": "Umożliwia przechowywanie eteru i tokenów oraz służy jako łącznik do zdecentralizowanych aplikacji."
+ },
+ "import": {
+ "message": "Importuj",
+ "description": "Przycisk do importowania konta z wybranego pliku."
+ },
+ "importAccount": {
+ "message": "Importuj konto"
+ },
+ "importAccountMsg": {
+ "message": " Importowane konta nie będą powiązane z Twoją pierwotną frazą seed MetaMask. Dowiedz się więcej o importowaniu kont "
+ },
+ "importAnAccount": {
+ "message": "Importuj konto"
+ },
+ "importDen": {
+ "message": "Importuj istniejące DEN"
+ },
+ "imported": {
+ "message": "Zaimportowane",
+ "description": "status pokazujący, że konto zostało w pełni załadowane na keyring"
+ },
+ "importUsingSeed": {
+ "message": "Importuj przy pomocy frazy seed konta"
+ },
+ "infoHelp": {
+ "message": "Info & pomoc"
+ },
+ "initialTransactionConfirmed": {
+ "message": "Twoja transakcja została potwierdzona w sieci. Kliknij OK żeby wrócić."
+ },
+ "insufficientFunds": {
+ "message": "Niewystarczające środki."
+ },
+ "insufficientTokens": {
+ "message": "Niewystarczająca liczba tokenów."
+ },
+ "invalidAddress": {
+ "message": "Nieprawidłowy adres"
+ },
+ "invalidAddressRecipient": {
+ "message": "Nieprawidłowy adres odbiorcy"
+ },
+ "invalidGasParams": {
+ "message": "Nieprawidłowe parametry gazu"
+ },
+ "invalidInput": {
+ "message": "Nieprawidłowe dane."
+ },
+ "invalidRequest": {
+ "message": "Nieprawidłowe zapytanie"
+ },
+ "invalidRPC": {
+ "message": "Nieprawidłowe RPC URI"
+ },
+ "invalidSeedPhrase": {
+ "message": "Nieprawidłowa fraza seed"
+ },
+ "jsonFail": {
+ "message": "Coś poszło nie tak. Upewnij się, że plik JSON jest prawidłowo sformatowany."
+ },
+ "jsonFile": {
+ "message": "Plik JSON",
+ "description": "formatuj do importowania konta"
+ },
+ "keepTrackTokens": {
+ "message": "Monitoruj stan tokenów kupionych przy pomocy konta MetaMask."
+ },
+ "kovan": {
+ "message": "Sieć testowa Kovan"
+ },
+ "knowledgeDataBase": {
+ "message": "Sprawdź naszą Bazę wiedzy."
+ },
+ "max": {
+ "message": "Maks."
+ },
+ "learnMore": {
+ "message": "Dowiedz się więcej"
+ },
+ "ledgerAccountRestriction": {
+ "message": "Musisz użyć swojego poprzedniego konta zanim dodasz kolejne."
+ },
+ "lessThanMax": {
+ "message": "musi być mniejsze lub równe $1.",
+ "description": "pomoc przy wpisywaniu hex jako dane dziesiętne"
+ },
+ "likeToAddTokens": {
+ "message": "Czy chcesz dodać te tokeny?"
+ },
+ "links": {
+ "message": "Łącza"
+ },
+ "limit": {
+ "message": "Limit"
+ },
+ "loading": {
+ "message": "Ładowanie..."
+ },
+ "loadingTokens": {
+ "message": "Ładowanie tokenów..."
+ },
+ "localhost": {
+ "message": "Serwer lokalny 8545"
+ },
+ "login": {
+ "message": "Zaloguj się"
+ },
+ "logout": {
+ "message": "Wyloguj się"
+ },
+ "loose": {
+ "message": "Porzuć"
+ },
+ "loweCaseWords": {
+ "message": "słowa seed mogą być pisane wyłącznie małymi literami"
+ },
+ "mainnet": {
+ "message": "Główna sieć Ethereum"
+ },
+ "menu": {
+ "message": "Menu"
+ },
+ "message": {
+ "message": "Wiadomość"
+ },
+ "metamaskDescription": {
+ "message": "MetaMask to bezpieczny portfel dla Ethereum."
+ },
+ "metamaskSeedWords": {
+ "message": "Słowa Seed MetaMask"
+ },
+ "min": {
+ "message": "Minimum"
+ },
+ "myAccounts": {
+ "message": "Moje konta"
+ },
+ "mustSelectOne": {
+ "message": "Należy wybrać co najmniej 1 token."
+ },
+ "needEtherInWallet": {
+ "message": "Żeby skorzystać ze zdecentraliowanych aplikacji (dApps) przy pomocy MetaMask, potrzebujesz Eteru w swoim portfelu."
+ },
+ "needImportFile": {
+ "message": "Musisz wybrać plik do zaimportowania.",
+ "description": "Użytkownik importuje konto i musi dodać plik, żeby kontynuować"
+ },
+ "needImportPassword": {
+ "message": "Musisz podać hasło dla wybranego pliku.",
+ "description": "Hasło i plik niezbędne do zaimportowania konta"
+ },
+ "negativeETH": {
+ "message": "Nie można wysłać ujemnych ilości ETH."
+ },
+ "networks": {
+ "message": "Sieci"
+ },
+ "nevermind": {
+ "message": "Nie ważne"
+ },
+ "newAccount": {
+ "message": "Nowe konto"
+ },
+ "newAccountNumberName": {
+ "message": "Konto $1",
+ "description": "Automatyczna nazwa kolejnego konta utworzonego w widoku Utwórz konto"
+ },
+ "newContract": {
+ "message": "Nowy kontrakt"
+ },
+ "newPassword": {
+ "message": "Nowe hasło (min. 8 znaków)"
+ },
+ "newRecipient": {
+ "message": "Nowy odbiorca"
+ },
+ "newRPC": {
+ "message": "Nowy RPC URL"
+ },
+ "next": {
+ "message": "Dalej"
+ },
+ "noAddressForName": {
+ "message": "Nie wybrano żadnego adresu dla tej nazwy."
+ },
+ "noDeposits": {
+ "message": "Brak otrzymanych depozytów"
+ },
+ "noConversionRateAvailable": {
+ "message": "Brak kursu waluty"
+ },
+ "noTransactionHistory": {
+ "message": "Brak historii transakcji."
+ },
+ "noTransactions": {
+ "message": "Nie ma transakcji"
+ },
+ "notFound": {
+ "message": "Nie znaleziono"
+ },
+ "notStarted": {
+ "message": "Nie rozpoczęto"
+ },
+ "noWebcamFoundTitle": {
+ "message": "Nie znaleziono kamery"
+ },
+ "noWebcamFound": {
+ "message": "Twoja kamera nie została znaleziona. Spróbuj ponownie."
+ },
+ "oldUI": {
+ "message": "Stary interfejs"
+ },
+ "oldUIMessage": {
+ "message": "Wróciłeś do starego interfejsu. Możesz włączyć nowy interfejs przez opcje w rozwijanym menu w prawym górnym rogu."
+ },
+ "openInTab": {
+ "message": "Otwórz w zakładce"
+ },
+ "or": {
+ "message": "lub",
+ "description": "wybór między tworzeniem i importowaniem nowego konta"
+ },
+ "origin": {
+ "message": "Pochodzenie"
+ },
+ "password": {
+ "message": "Hasło"
+ },
+ "passwordCorrect": {
+ "message": "Upewnij się, że Twoje hasło jest poprawne."
+ },
+ "passwordMismatch": {
+ "message": "hasła nie są takie same",
+ "description": "podczas tworzenia hasła, tekst w dwóch polach haseł nie był taki sam"
+ },
+ "passwordShort": {
+ "message": "hasło za krótkie",
+ "description": "podczas tworzenia hasła, hasło nie jest bezpieczne, ponieważ nie jest wystarczająco długie"
+ },
+ "pastePrivateKey": {
+ "message": "Tutaj wklej swój prywatny klucz:",
+ "description": "Do importowania konta z prywatnego klucza"
+ },
+ "pasteSeed": {
+ "message": "Tutaj wklej swoją frazę seed!"
+ },
+ "pending": {
+ "message": "oczekiwanie"
+ },
+ "personalAddressDetected": {
+ "message": "Wykryto osobisty adres. Wprowadź adres kontraktu tokenów."
+ },
+ "pleaseReviewTransaction": {
+ "message": "Proszę, sprawdź transakcję."
+ },
+ "popularTokens": {
+ "message": "Popularne tokeny"
+ },
+ "prev": {
+ "message": "Poprzednie"
+ },
+ "privacyMsg": {
+ "message": "Polityka prywatności"
+ },
+ "privateKey": {
+ "message": "Klucz prywatny",
+ "description": "wybierz ten typ pliku żeby importować konto"
+ },
+ "privateKeyWarning": {
+ "message": "Uwaga: Nie ujawniaj nikomu tego klucza. Ktokolwiek posiadający Twoje prywatne klucze może użyć środków znajdujących się na Twoim koncie."
+ },
+ "privateNetwork": {
+ "message": "Sieć prywatna"
+ },
+ "qrCode": {
+ "message": "Pokaż kod QR"
+ },
+ "queue": {
+ "message": "Kolejka"
+ },
+ "readdToken": {
+ "message": "Możesz później ponownie dodać ten token poprzez \"Dodaj token\" w opcjach menu swojego konta."
+ },
+ "readMore": {
+ "message": "Dowiedz się więcej tutaj."
+ },
+ "readMore2": {
+ "message": "Dowiedz się więcej."
+ },
+ "receive": {
+ "message": "Otrzymaj"
+ },
+ "recipientAddress": {
+ "message": "Adres odbiorcy"
+ },
+ "refundAddress": {
+ "message": "Twój adres na zwroty"
+ },
+ "rejected": {
+ "message": "Odrzucone"
+ },
+ "reset": {
+ "message": "Reset"
+ },
+ "resetAccount": {
+ "message": "Resetuj konto"
+ },
+ "resetAccountDescription": {
+ "message": "Zresetowanie konta wyczyści Twoją historię transakcji."
+ },
+ "restoreFromSeed": {
+ "message": "Przywrócić konto?"
+ },
+ "restoreVault": {
+ "message": "Przywróć schowek"
+ },
+ "restoreAccountWithSeed": {
+ "message": "Przywróć konto frazą seed"
+ },
+ "required": {
+ "message": "Wymagane"
+ },
+ "retryWithMoreGas": {
+ "message": "Spróbuj ponownie z większą ceną gazu"
+ },
+ "walletSeed": {
+ "message": "Seed portfela"
+ },
+ "restore": {
+ "message": "Przywróć"
+ },
+ "revealSeedWords": {
+ "message": "Pokaż słowa seed"
+ },
+ "revealSeedWordsTitle": {
+ "message": "Fraza seed"
+ },
+ "revealSeedWordsDescription": {
+ "message": "Jeśli kiedyś zmienisz przeglądarkę lub komputer, będziesz potrzebować tej frazy seed, żeby dostać się do swoich kont. Zapisz ją w bezpiecznym miejscu."
+ },
+ "revealSeedWordsWarningTitle": {
+ "message": "NIE pokazuj tej frazy nikomu!"
+ },
+ "revealSeedWordsWarning": {
+ "message": "Te słowa mogą być użyte żeby ukraść Twoje konta."
+ },
+ "revert": {
+ "message": "Wycofaj"
+ },
+ "remove": {
+ "message": "usuń"
+ },
+ "removeAccount": {
+ "message": "Usuń konto"
+ },
+ "removeAccountDescription": {
+ "message": "To konto będzie usunięte z Twojego portfela. Zanim przejdziesz dalej, upewnij się, że masz frazę seed i klucz prywatny do tego importowanego konta. Możesz później importować lub utworzyć nowe konta z rozwijanego menu kont. "
+ },
+ "readyToConnect": {
+ "message": "Gotowy na połączenie?"
+ },
+ "rinkeby": {
+ "message": "Sieć testowa Rinkeby"
+ },
+ "ropsten": {
+ "message": "Sieć testowa Ropsten"
+ },
+ "rpc": {
+ "message": "Indywidualne RPC"
+ },
+ "currentRpc": {
+ "message": "Obecne RPC"
+ },
+ "connectingToMainnet": {
+ "message": "Łączenie z główną siecią Ethereum"
+ },
+ "connectingToRopsten": {
+ "message": "Łączenie z siecią testową Ropsten"
+ },
+ "connectingToKovan": {
+ "message": "Łączenie z siecią testową Kovan"
+ },
+ "connectingToRinkeby": {
+ "message": "Łączenie z siecią testową Rinkeby"
+ },
+ "connectingToUnknown": {
+ "message": "Łączenie z nieznaną siecią"
+ },
+ "sampleAccountName": {
+ "message": "Np. Moje nowe konto",
+ "description": "Umożliwia użytkownikom zrozumieć ideę dodawania własnej nazwy to ich konta"
+ },
+ "save": {
+ "message": "Zapisz"
+ },
+ "speedUpTitle": {
+ "message": "Przyspiesz transakcję"
+ },
+ "speedUpSubtitle": {
+ "message": "Zwiększ cenę gazu żeby nadpisać i przyspieszyć transakcję"
+ },
+ "saveAsCsvFile": {
+ "message": "Zapisz jako plik CSV"
+ },
+ "saveAsFile": {
+ "message": "Zapisz jako",
+ "description": "Proces eksportu konta"
+ },
+ "saveSeedAsFile": {
+ "message": "Zapisz słowa seed jako plik"
+ },
+ "search": {
+ "message": "Szukaj"
+ },
+ "searchResults": {
+ "message": "Wyniki wyszukiwania"
+ },
+ "secretPhrase": {
+ "message": "Żeby otworzyć schowek, wpisz tutaj swoją frazę dwunastu słów."
+ },
+ "showHexData": {
+ "message": "Pokaż dane hex"
+ },
+ "showHexDataDescription": {
+ "message": "Wybierz to żeby pokazać pole danych hex na ekranie wysyłania"
+ },
+ "newPassword8Chars": {
+ "message": "Nowe hasło (min. 8 znaków)"
+ },
+ "seedPhraseReq": {
+ "message": "Frazy seed mają 12 słów"
+ },
+ "select": {
+ "message": "Wybierz"
+ },
+ "selectCurrency": {
+ "message": "Wybierz walutę"
+ },
+ "selectService": {
+ "message": "Wybierz usługę"
+ },
+ "selectType": {
+ "message": "Wybierz rodzaj"
+ },
+ "send": {
+ "message": "Wyślij"
+ },
+ "sendETH": {
+ "message": "Wyślij ETH"
+ },
+ "sendTokens": {
+ "message": "Wyślij tokeny"
+ },
+ "sentEther": {
+ "message": "wyślij eter"
+ },
+ "sentTokens": {
+ "message": "wysłane tokeny"
+ },
+ "separateEachWord": {
+ "message": "Oddziel słowa pojedynczą spacją"
+ },
+ "onlySendToEtherAddress": {
+ "message": "Na adres Ethereum wysyłaj tylko ETH."
+ },
+ "onlySendTokensToAccountAddress": {
+ "message": "Wyślij tylko $1 na adres konta Ethereum.",
+ "description": "wyświetla symbol tokena"
+ },
+ "orderOneHere": {
+ "message": "Zamów Trezor lub Ledger i trzymaj swoje środki w portfelu sprzętowym."
+ },
+ "outgoing": {
+ "message": "Wychodzące"
+ },
+ "searchTokens": {
+ "message": "Szukaj tokenów"
+ },
+ "selectAnAddress": {
+ "message": "Wybierz adres"
+ },
+ "selectAnAccount": {
+ "message": "Wybierz konto"
+ },
+ "selectAnAccountHelp": {
+ "message": "Wybierz konto do przeglądania w MetaMask"
+ },
+ "selectHdPath": {
+ "message": "Wybierz ścieżkę HD"
+ },
+ "selectPathHelp": {
+ "message": "Jeśli nie widzisz poniżej swoich kont Ledger, spróbuj przełączyć się na \"Legacy (MEW / MyCrypto)\""
+ },
+ "sendTokensAnywhere": {
+ "message": "Wyślij tokeny do kogoś z adresem Ethereum"
+ },
+ "settings": {
+ "message": "Ustawienia"
+ },
+ "step1HardwareWallet": {
+ "message": "1. Podłącz portfel sprzętowy"
+ },
+ "step1HardwareWalletMsg": {
+ "message": "Połącz swój portfel sprzętowy z komputerem."
+ },
+ "step2HardwareWallet": {
+ "message": "2. Wybierz konto"
+ },
+ "step2HardwareWalletMsg": {
+ "message": "Wybierz konto, które chcesz przeglądać. Możesz wybrać tylko jedno konto w danym momencie."
+ },
+ "step3HardwareWallet": {
+ "message": "3. Zacznij używać dystrybuowanych aplikacji (dApps) i wiele więcej!"
+ },
+ "step3HardwareWalletMsg": {
+ "message": "Używaj swojego konta sprzętowego tak, jak używasz jakiegokolwiek konta z Ethereum. Loguj się do dystrybuowanych aplikacji (dApps), wysyłaj Eth, kupuj i przechowaj tokeny ERC20 i niewymienne tokeny, jak np. CryptoKitties."
+ },
+ "info": {
+ "message": "Info"
+ },
+ "scanInstructions": {
+ "message": "Umieść kod QR na wprost kamery"
+ },
+ "scanQrCode": {
+ "message": "Skanuj kod QR"
+ },
+ "shapeshiftBuy": {
+ "message": "Kup w ShapeShift"
+ },
+ "showPrivateKeys": {
+ "message": "Pokaż prywatne klucze"
+ },
+ "showQRCode": {
+ "message": "Pokaż kod QR"
+ },
+ "sign": {
+ "message": "Podpisz"
+ },
+ "signatureRequest": {
+ "message": "Prośba o podpis"
+ },
+ "signed": {
+ "message": "Podpisane"
+ },
+ "signMessage": {
+ "message": "Podpisz wiadomość"
+ },
+ "signNotice": {
+ "message": "Podpisanie tej wiadomości może mieć \nniebezpieczne skutki uboczne. Podpisuj wiadomości \ntylko ze stron, którym chcesz udostępnić swoje konto.\nTa niebezpieczna metoda będzie usunięta w przyszłych wersjach. "
+ },
+ "sigRequest": {
+ "message": "Prośba o podpis"
+ },
+ "sigRequested": {
+ "message": "Podpis wymagany"
+ },
+ "spaceBetween": {
+ "message": "między słowami może być tylko pojedyncza spacja"
+ },
+ "status": {
+ "message": "Status"
+ },
+ "stateLogs": {
+ "message": "Logi stanów"
+ },
+ "stateLogsDescription": {
+ "message": "Logi stanów zawierają Twoje publiczne adresy kont i wykonanych transakcji."
+ },
+ "stateLogError": {
+ "message": "Błąd podczas pobierania logów stanów."
+ },
+ "submit": {
+ "message": "Wyślij"
+ },
+ "submitted": {
+ "message": "Wysłane"
+ },
+ "supportCenter": {
+ "message": "Odwiedź nasze Centrum Pomocy"
+ },
+ "symbolBetweenZeroTen": {
+ "message": "Symbol musi mieć od 0 do 10 znaków."
+ },
+ "takesTooLong": {
+ "message": "Trwa zbyt długo?"
+ },
+ "terms": {
+ "message": "Regulamin"
+ },
+ "testFaucet": {
+ "message": "Źródło testowego ETH"
+ },
+ "to": {
+ "message": "Do"
+ },
+ "toETHviaShapeShift": {
+ "message": "$1 na ETH przez ShapeShift",
+ "description": "system uzupełni typ depozytu na początku wiadomości"
+ },
+ "token": {
+ "message": "Token"
+ },
+ "tokenAddress": {
+ "message": "Adres tokena"
+ },
+ "tokenAlreadyAdded": {
+ "message": "Token jest już dodany."
+ },
+ "tokenBalance": {
+ "message": "Liczba Twoich tokenów:"
+ },
+ "tokenSelection": {
+ "message": "Szukaj tokenów lub wybierz z naszej listy popularnych tokenów."
+ },
+ "tokenSymbol": {
+ "message": "Symbol tokena"
+ },
+ "tokenWarning1": {
+ "message": "Monitoruj stan tokenów kupionych przy pomocy konta MetaMask. Jeśli masz tokeny kupione przy pomocy innych kont, nie pojawią się tutaj."
+ },
+ "total": {
+ "message": "Suma"
+ },
+ "transactions": {
+ "message": "transakcje"
+ },
+ "transactionError": {
+ "message": "Błąd transakcji. Wyjątek w kodzie kontraktu."
+ },
+ "transactionMemo": {
+ "message": "Memo transakcji (opcjonalnie)"
+ },
+ "transactionNumber": {
+ "message": "Numer transakcji"
+ },
+ "transfer": {
+ "message": "Przelew"
+ },
+ "transfers": {
+ "message": "Przelewy"
+ },
+ "trezorHardwareWallet": {
+ "message": "Sprzętowy portfel TREZOR"
+ },
+ "troubleTokenBalances": {
+ "message": "Wystąpił problem z załadowaniem informacji o Twoich tokenach. Można je zobaczyć ",
+ "description": "Z linkiem (tutaj) do informacji o stanie tokenów"
+ },
+ "tryAgain": {
+ "message": "Spróbuj ponownie"
+ },
+ "twelveWords": {
+ "message": "Tych 12 słów to jedyny sposób, żeby odzyskać konta w MetaMasku. Zapisz je w bezpiecznym miejscu."
+ },
+ "typePassword": {
+ "message": "Wpisz hasło"
+ },
+ "uiWelcome": {
+ "message": "Witamy w nowym interfejsie (Beta)"
+ },
+ "uiWelcomeMessage": {
+ "message": "Używasz teraz nowego interfejsu MetaMask."
+ },
+ "unapproved": {
+ "message": "Niezatwierdzone"
+ },
+ "unavailable": {
+ "message": "Niedostępne"
+ },
+ "unknown": {
+ "message": "Nieznane"
+ },
+ "unknownFunction": {
+ "message": "Nieznana funkcja"
+ },
+ "unknownNetwork": {
+ "message": "Nieznana sieć prywatna"
+ },
+ "unknownNetworkId": {
+ "message": "Nieznane sieciowe ID"
+ },
+ "unknownQrCode": {
+ "message": "Błąd: nie mogliśmy odczytać tego kodu QR"
+ },
+ "unknownCameraErrorTitle": {
+ "message": "Ups! Coś poszło nie tak..."
+ },
+ "unknownCameraError": {
+ "message": "Podczas łączenia się z kamerą wystąpił błąd. Spróbuj ponownie..."
+ },
+ "unlock": {
+ "message": "Odblokuj"
+ },
+ "unlockMessage": {
+ "message": "Zdecentralizowana sieć oczekuje"
+ },
+ "uriErrorMsg": {
+ "message": "URI wymaga prawidłowego prefiksu HTTP/HTTPS."
+ },
+ "usaOnly": {
+ "message": "Tylko USA",
+ "description": "Ta platforma wymiany jest dostępna tylko dla osób mieszkających w USA"
+ },
+ "usedByClients": {
+ "message": "Używany przez różnych klientów"
+ },
+ "useOldUI": {
+ "message": "Przełącz na stary interfejs"
+ },
+ "validFileImport": {
+ "message": "Należy wybrać prawidłowy plik do zaimportowania."
+ },
+ "vaultCreated": {
+ "message": "Schowek utworzony"
+ },
+ "viewAccount": {
+ "message": "Zobacz konto"
+ },
+ "viewOnEtherscan": {
+ "message": "Zobacz na Etherscan"
+ },
+ "visitWebSite": {
+ "message": "Odwiedź naszą stronę"
+ },
+ "warning": {
+ "message": "Uwaga"
+ },
+ "welcomeBack": {
+ "message": "Witaj z powrotem!"
+ },
+ "welcomeBeta": {
+ "message": "Witaj w MetaMask Beta"
+ },
+ "whatsThis": {
+ "message": "Co to jest?"
+ },
+ "youNeedToAllowCameraAccess": {
+ "message": "Żeby użyć tej opcji należy podłączyć kamerę"
+ },
+ "yourSigRequested": {
+ "message": "Twój podpis jest wymagany"
+ },
+ "youSign": {
+ "message": "Podpisujesz"
+ },
+ "yourPrivateSeedPhrase": {
+ "message": "Twoja prywatna fraza seed"
+ }
+} \ No newline at end of file
diff --git a/app/images/eth.svg b/app/images/eth.svg
new file mode 100644
index 000000000..6375b790f
--- /dev/null
+++ b/app/images/eth.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 40 40" style="enable-background:new 0 0 40 40;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#38393A;}
+</style>
+<title>deposit-eth</title>
+<desc>Created with Sketch.</desc>
+<g id="deposit-eth" transform="translate(0.000000, 14.000000)">
+ <path id="Shape" class="st0" d="M19.9,16L7.5,8.7L19.9,26L32.3,8.7L19.9,16L19.9,16z M20.1-14L7.7,6.4l12.4,7.3l12.4-7.2L20.1-14z"
+ />
+</g>
+</svg>
diff --git a/app/manifest.json b/app/manifest.json
index 3a281f4d0..be1b08c07 100644
--- a/app/manifest.json
+++ b/app/manifest.json
@@ -1,7 +1,7 @@
{
"name": "__MSG_appName__",
"short_name": "__MSG_appName__",
- "version": "4.14.0",
+ "version": "4.16.0",
"manifest_version": 2,
"author": "https://metamask.io",
"description": "__MSG_appDescription__",
@@ -85,4 +85,4 @@
"*"
]
}
-}
+} \ No newline at end of file
diff --git a/app/scripts/background.js b/app/scripts/background.js
index b91021c6e..d20ffe6e3 100644
--- a/app/scripts/background.js
+++ b/app/scripts/background.js
@@ -2,6 +2,9 @@
* @file The entry point for the web extension singleton process.
*/
+// this needs to run before anything else
+require('./lib/setupFetchDebugging')()
+
const urlUtil = require('url')
const endOfStream = require('end-of-stream')
const pump = require('pump')
diff --git a/app/scripts/controllers/preferences.js b/app/scripts/controllers/preferences.js
index fd6a4866d..20b13398c 100644
--- a/app/scripts/controllers/preferences.js
+++ b/app/scripts/controllers/preferences.js
@@ -38,6 +38,9 @@ class PreferencesController {
lostIdentities: {},
seedWords: null,
forgottenPassword: false,
+ preferences: {
+ useETHAsPrimaryCurrency: true,
+ },
}, opts.initState)
this.diagnostics = opts.diagnostics
@@ -101,7 +104,7 @@ class PreferencesController {
* @param {Function} - end
*/
async requestWatchAsset (req, res, next, end) {
- if (req.method === 'metamask_watchAsset') {
+ if (req.method === 'metamask_watchAsset' || req.method === 'wallet_watchAsset') {
const { type, options } = req.params
switch (type) {
case 'ERC20':
@@ -372,22 +375,6 @@ class PreferencesController {
}
/**
- * Gets an updated rpc list from this.addToFrequentRpcList() and sets the `frequentRpcList` to this update list.
- *
- * @param {string} _url The the new rpc url to add to the updated list
- * @param {bool} remove Remove selected url
- * @returns {Promise<void>} Promise resolves with undefined
- *
- */
- updateFrequentRpcList (_url, remove = false) {
- return this.addToFrequentRpcList(_url, remove)
- .then((rpcList) => {
- this.store.updateState({ frequentRpcList: rpcList })
- return Promise.resolve()
- })
- }
-
- /**
* Setter for the `currentAccountTab` property
*
* @param {string} currentAccountTab Specifies the new tab to be marked as current
@@ -402,24 +389,39 @@ class PreferencesController {
}
/**
- * Returns an updated rpcList based on the passed url and the current list.
- * The returned list will have a max length of 3. If the _url currently exists it the list, it will be moved to the
- * end of the list. The current list is modified and returned as a promise.
+ * Adds custom RPC url to state.
*
- * @param {string} _url The rpc url to add to the frequentRpcList.
- * @param {bool} remove Remove selected url
- * @returns {Promise<array>} The updated frequentRpcList.
+ * @param {string} url The RPC url to add to frequentRpcList.
+ * @returns {Promise<array>} Promise resolving to updated frequentRpcList.
*
*/
- addToFrequentRpcList (_url, remove = false) {
+ addToFrequentRpcList (url) {
const rpcList = this.getFrequentRpcList()
- const index = rpcList.findIndex((element) => { return element === _url })
+ const index = rpcList.findIndex((element) => { return element === url })
if (index !== -1) {
rpcList.splice(index, 1)
}
- if (!remove && _url !== 'http://localhost:8545') {
- rpcList.push(_url)
+ if (url !== 'http://localhost:8545') {
+ rpcList.push(url)
}
+ this.store.updateState({ frequentRpcList: rpcList })
+ return Promise.resolve(rpcList)
+ }
+
+ /**
+ * Removes custom RPC url from state.
+ *
+ * @param {string} url The RPC url to remove from frequentRpcList.
+ * @returns {Promise<array>} Promise resolving to updated frequentRpcList.
+ *
+ */
+ removeFromFrequentRpcList (url) {
+ const rpcList = this.getFrequentRpcList()
+ const index = rpcList.findIndex((element) => { return element === url })
+ if (index !== -1) {
+ rpcList.splice(index, 1)
+ }
+ this.store.updateState({ frequentRpcList: rpcList })
return Promise.resolve(rpcList)
}
@@ -463,6 +465,33 @@ class PreferencesController {
getFeatureFlags () {
return this.store.getState().featureFlags
}
+
+ /**
+ * Updates the `preferences` property, which is an object. These are user-controlled features
+ * found in the settings page.
+ * @param {string} preference The preference to enable or disable.
+ * @param {boolean} value Indicates whether or not the preference should be enabled or disabled.
+ * @returns {Promise<object>} Promises a new object; the updated preferences object.
+ */
+ setPreference (preference, value) {
+ const currentPreferences = this.getPreferences()
+ const updatedPreferences = {
+ ...currentPreferences,
+ [preference]: value,
+ }
+
+ this.store.updateState({ preferences: updatedPreferences })
+ return Promise.resolve(updatedPreferences)
+ }
+
+ /**
+ * A getter for the `preferences` property
+ * @returns {object} A key-boolean map of user-selected preferences.
+ */
+ getPreferences () {
+ return this.store.getState().preferences
+ }
+
//
// PRIVATE METHODS
//
diff --git a/app/scripts/inpage.js b/app/scripts/inpage.js
index 431702d63..b885a7e05 100644
--- a/app/scripts/inpage.js
+++ b/app/scripts/inpage.js
@@ -27,6 +27,8 @@ var metamaskStream = new LocalMessageDuplexStream({
// compose the inpage provider
var inpageProvider = new MetamaskInpageProvider(metamaskStream)
+// set a high max listener count to avoid unnecesary warnings
+inpageProvider.setMaxListeners(100)
// Augment the provider with its enable method
inpageProvider.enable = function (options = {}) {
diff --git a/app/scripts/lib/setupFetchDebugging.js b/app/scripts/lib/setupFetchDebugging.js
new file mode 100644
index 000000000..dd87b65a6
--- /dev/null
+++ b/app/scripts/lib/setupFetchDebugging.js
@@ -0,0 +1,34 @@
+module.exports = setupFetchDebugging
+
+//
+// This is a utility to help resolve cases where `window.fetch` throws a
+// `TypeError: Failed to Fetch` without any stack or context for the request
+// https://github.com/getsentry/sentry-javascript/pull/1293
+//
+
+function setupFetchDebugging() {
+ if (!global.fetch) return
+ const originalFetch = global.fetch
+
+ global.fetch = wrappedFetch
+
+ async function wrappedFetch(...args) {
+ const initialStack = getCurrentStack()
+ try {
+ return await originalFetch.call(window, ...args)
+ } catch (err) {
+ console.warn('FetchDebugger - fetch encountered an Error', err)
+ console.warn('FetchDebugger - overriding stack to point of original call')
+ err.stack = initialStack
+ throw err
+ }
+ }
+}
+
+function getCurrentStack() {
+ try {
+ throw new Error('Fake error for generating stack trace')
+ } catch (err) {
+ return err.stack
+ }
+}
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index 493877345..7913662d4 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -129,6 +129,7 @@ module.exports = class MetamaskController extends EventEmitter {
provider: this.provider,
blockTracker: this.blockTracker,
})
+
// start and stop polling for balances based on activeControllerConnections
this.on('controllerConnectionChanged', (activeControllerConnections) => {
if (activeControllerConnections > 0) {
@@ -137,7 +138,12 @@ module.exports = class MetamaskController extends EventEmitter {
this.accountTracker.stop()
}
})
-
+
+ // ensure accountTracker updates balances after network change
+ this.networkController.on('networkDidChange', () => {
+ this.accountTracker._updateAccounts()
+ })
+
// key mgmt
const additionalKeyrings = [TrezorKeyring, LedgerBridgeKeyring]
this.keyringController = new KeyringController({
@@ -387,6 +393,7 @@ module.exports = class MetamaskController extends EventEmitter {
setCurrentAccountTab: nodeify(preferencesController.setCurrentAccountTab, preferencesController),
setAccountLabel: nodeify(preferencesController.setAccountLabel, preferencesController),
setFeatureFlag: nodeify(preferencesController.setFeatureFlag, preferencesController),
+ setPreference: nodeify(preferencesController.setPreference, preferencesController),
// BlacklistController
whitelistPhishingDomain: this.whitelistPhishingDomain.bind(this),
@@ -1451,7 +1458,7 @@ module.exports = class MetamaskController extends EventEmitter {
*/
async setCustomRpc (rpcTarget) {
this.networkController.setRpcTarget(rpcTarget)
- await this.preferencesController.updateFrequentRpcList(rpcTarget)
+ await this.preferencesController.addToFrequentRpcList(rpcTarget)
return rpcTarget
}
@@ -1460,7 +1467,7 @@ module.exports = class MetamaskController extends EventEmitter {
* @param {string} rpcTarget - A RPC URL to delete.
*/
async delCustomRpc (rpcTarget) {
- await this.preferencesController.updateFrequentRpcList(rpcTarget, true)
+ await this.preferencesController.removeFromFrequentRpcList(rpcTarget)
}
/**