aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorkumavis <kumavis@users.noreply.github.com>2018-04-03 01:47:24 +0800
committerGitHub <noreply@github.com>2018-04-03 01:47:24 +0800
commit6d5f1392a529c5c809d416aaebc6e3424ee55ae1 (patch)
tree7feb008f31933a579a4a9bdeb42e22c99d78597a /app
parent812a06ffcd9cea39453e8a59563bf1d12e17c065 (diff)
parent69a867b4a420acd4b4354aab2cc4051736a778cb (diff)
downloadtangerine-wallet-browser-6d5f1392a529c5c809d416aaebc6e3424ee55ae1.tar
tangerine-wallet-browser-6d5f1392a529c5c809d416aaebc6e3424ee55ae1.tar.gz
tangerine-wallet-browser-6d5f1392a529c5c809d416aaebc6e3424ee55ae1.tar.bz2
tangerine-wallet-browser-6d5f1392a529c5c809d416aaebc6e3424ee55ae1.tar.lz
tangerine-wallet-browser-6d5f1392a529c5c809d416aaebc6e3424ee55ae1.tar.xz
tangerine-wallet-browser-6d5f1392a529c5c809d416aaebc6e3424ee55ae1.tar.zst
tangerine-wallet-browser-6d5f1392a529c5c809d416aaebc6e3424ee55ae1.zip
Merge branch 'master' into i18n-helper
Diffstat (limited to 'app')
-rw-r--r--app/_locales/de/messages.json63
-rw-r--r--app/_locales/nl/messages.json16
-rw-r--r--app/_locales/ru/messages.json421
-rw-r--r--app/home.html4
-rw-r--r--app/manifest.json10
-rw-r--r--app/notification.html2
-rw-r--r--app/popup.html4
-rw-r--r--app/scripts/contentscript.js6
-rw-r--r--app/scripts/controllers/currency.js2
-rw-r--r--app/scripts/controllers/transactions.js14
-rw-r--r--app/scripts/lib/nonce-tracker.js5
-rw-r--r--app/scripts/lib/setupRaven.js14
-rw-r--r--app/scripts/lib/tx-state-manager.js16
-rw-r--r--app/scripts/metamask-controller.js7
-rw-r--r--app/scripts/ui.js (renamed from app/scripts/popup.js)0
15 files changed, 349 insertions, 235 deletions
diff --git a/app/_locales/de/messages.json b/app/_locales/de/messages.json
index 822991512..1d2619672 100644
--- a/app/_locales/de/messages.json
+++ b/app/_locales/de/messages.json
@@ -14,9 +14,15 @@
"address": {
"message": "Adresse"
},
+ "addCustomToken": {
+ "message": "Eigenen Token hinzufügen"
+ },
"addToken": {
"message": "Token hinzufügen"
},
+ "addTokens": {
+ "message": "Token hinzufügen"
+ },
"amount": {
"message": "Betrag"
},
@@ -31,9 +37,15 @@
"message": "MetaMask",
"description": "Der Name der Erweiterung"
},
+ "approved": {
+ "message": "Genehmigt"
+ },
"attemptingConnect": {
"message": "Versuch mit der Blockchain zu verbinden."
},
+ "attributions": {
+ "message": "Was wir verwenden"
+ },
"available": {
"message": "Verfügbar"
},
@@ -43,6 +55,9 @@
"balance": {
"message": "Guthaben:"
},
+ "balances": {
+ "message": "Deine Guthaben"
+ },
"balanceIsInsufficientGas": {
"message": "Guthaben unzureichend für den aktuellen gesamten Gasbetrag"
},
@@ -69,7 +84,7 @@
"message": "Auf Coinbase kaufen"
},
"buyCoinbaseExplainer": {
- "message": "Coinbase ist die weltweit bekannteste Möglichkeit bitcoin, ethereum und litecoin zu kaufen und verkaufen."
+ "message": "Coinbase ist die weltweit bekannteste Art und Weise um bitcoin, ethereum und litecoin zu kaufen und verkaufen."
},
"ok": {
"message": "Ok"
@@ -105,7 +120,7 @@
"message": "Zu Coinbase fortfahren"
},
"contractDeployment": {
- "message": "Smart Contract ausführen"
+ "message": "Smart Contract Ausführung"
},
"conversionProgress": {
"message": "Umtausch in Arbeit"
@@ -148,7 +163,7 @@
"description": "Börsentyp (Kryptowährungen)"
},
"currentConversion": {
- "message": "Aktueller Umtausch"
+ "message": "Aktuelle Tauschwährung"
},
"currentNetwork": {
"message": "Aktuelles Netzwerk"
@@ -185,7 +200,7 @@
"description": "Teilt dem Benutzer mit welchen Token er beim Einzahlen mit Shapeshift ausgewählt hat"
},
"depositEth": {
- "message": "Eth einzahlen"
+ "message": "Eth kaufen"
},
"depositEther": {
"message": "Ether einzahlen"
@@ -274,7 +289,7 @@
"message": "Folge uns auf Twitter"
},
"from": {
- "message": "von"
+ "message": "Von"
},
"fromToSame": {
"message": "Ziel- und Ursprungsadresse dürfen nicht identisch sein"
@@ -347,14 +362,14 @@
"message": "Es erlaubt dir ether & Token zu halten und dient dir als Verbindung zu dezentralisierten Applikationen."
},
"import": {
- "message": "Import",
+ "message": "Importieren",
"description": "Button um den Account aus einer ausgewählten Datei zu importieren"
},
"importAccount": {
"message": "Account importieren"
},
"importAccountMsg": {
- "message":" Importierte Accounts werden nicht mit der Seed Wörterfolge deines ursprünglichen MetaMask Accounts verknüpft. Erfahre mehr über importierte Accounts."
+ "message":" Importierte Accounts werden nicht mit der Seed-Wörterfolge deines ursprünglichen MetaMask Accounts verknüpft. Erfahre mehr über importierte Accounts."
},
"importAnAccount": {
"message": "Einen Account importieren"
@@ -369,7 +384,7 @@
"infoHelp": {
"message": "Info & Hilfe"
},
- "insufficientFunds": {
+ "insufficientFunds": {
"message": "Nicht genügend Guthaben."
},
"insufficientTokens": {
@@ -441,10 +456,10 @@
"message": "Frei"
},
"loweCaseWords": {
- "message": "Die Wörter der Seed Wörterfolgen sind alle kleingeschrieben"
+ "message": "Die Wörter der Seed-Wörterfolgen sind alle kleingeschrieben"
},
"mainnet": {
- "message": "Ethereum Hauptnetzwerk (Main Net)"
+ "message": "Ethereum Main Net"
},
"message": {
"message": "Nachricht"
@@ -541,7 +556,7 @@
"description": "Für den Import eine Accounts mit Hilfe eines Private Keys"
},
"pasteSeed": {
- "message": "Füge deine Seed Wörterfolge hier ein!"
+ "message": "Füge deine Seed-Wörterfolge hier ein!"
},
"personalAddressDetected": {
"message": "Personalisierte Adresse identifiziert. Bitte füge die Token Contract Adresse ein."
@@ -557,7 +572,7 @@
"description": "Wähle diesen Dateityp um damit einen Account zu importieren"
},
"privateKeyWarning": {
- "message": "Warnung: Niemals jemanden deinen Private Key mitteilen. Jeder der im Besitz deines Private Keys ist, kann jegliches Guthaben deines Accounts stehlen."
+ "message": "Warnung: Niemals jemanden deinen Private Key mitteilen. Jeder der im Besitz deines Private Keys ist, kann jegliches Guthaben deines Accounts stehlen."
},
"privateNetwork": {
"message": "Privates Netzwerk"
@@ -566,7 +581,7 @@
"message": "QR Code anzeigen"
},
"readdToken": {
- "message": "Du kannst diesen Token zukünftig wieder hinzufügen indem du in den Menüpunkt \"Token hinzufügen\" in den Einstellungen deines Accounts gehst."
+ "message": "Du kannst diesen Token immer erneut hinzufügen, indem du in den Menüpunkt \"Token hinzufügen\" in den Einstellungen deines Accounts gehst."
},
"readMore": {
"message": "Hier mehr erfahren."
@@ -590,7 +605,7 @@
"message": "Account zurücksetzten"
},
"restoreFromSeed": {
- "message": "Mit Hilfe der Seed Wörterfolge wiederherstellen."
+ "message": "Mit Hilfe der Seed-Wörterfolge wiederherstellen."
},
"restoreVault": {
"message": "Vault wiederherstellen"
@@ -605,13 +620,13 @@
"message": "Wallet Seed"
},
"revealSeedWords": {
- "message": "Seed Wörterfolge anzeigen"
+ "message": "Seed-Wörterfolge anzeigen"
},
"revealSeedWordsWarning": {
- "message": "Bitte niemals deine Seed Wörterfolge an einem öffentlichen Ort kenntlich machen. Mit diesen Wörtern können alle deine Accounts gestohlen werden."
+ "message": "Bitte niemals deine Seed-Wörterfolge an einem öffentlichen Ort kenntlich machen. Mit diesen Wörtern können alle deine Accounts gestohlen werden."
},
"revert": {
- "message": "Zurück gehen"
+ "message": "Rückgängig machen"
},
"rinkeby": {
"message": "Rinkeby Testnetzwerk"
@@ -623,7 +638,7 @@
"message": "Aktueller RPC"
},
"connectingToMainnet": {
- "message": "Verbinde zum Ethereum Hauptnetzwerk (Main Net)"
+ "message": "Verbinde zum Ethereum Main Net"
},
"connectingToRopsten": {
"message": " Verbinde zum Ropsten Testnetzwerk"
@@ -649,7 +664,7 @@
"description": "Prozess des Exportieren eines Accounts"
},
"saveSeedAsFile": {
- "message": "Seed Wörterfolge als Datei speichern"
+ "message": "Seed-Wörterfolge als Datei speichern"
},
"search": {
"message": "Suche"
@@ -661,7 +676,7 @@
"message": "Neues Passwort (min. 8 Zeichen)"
},
"seedPhraseReq": {
- "message": "Seed Wörterfolgen bestehen aus 12 Wörtern"
+ "message": "Seed-Wörterfolgen bestehen aus 12 Wörtern"
},
"select": {
"message": "Auswählen"
@@ -685,7 +700,7 @@
"message": "Token senden"
},
"onlySendToEtherAddress": {
- "message": "ETH nur zu einer Ethereum Adresse senden."
+ "message": "ETH unbedingt nur zu einer Ethereum Adresse senden."
},
"sendTokensAnywhere": {
"message": "Token zu einer beliebigen Person mit einem Ethereumaccount senden"
@@ -742,7 +757,7 @@
"message": "Einreichen"
},
"submitted": {
- "message": "Eingereicht"
+ "message": "Abgeschickt"
},
"supportCenter": {
"message": "Gehe zu unserem Support Center"
@@ -782,7 +797,7 @@
"message": "Tokensymbol"
},
"tokenWarning1": {
- "message": "Behalte die Token die du mit deinem MetaMask Account gekauft hast im Auge. Wenn du Token mit einem anderen Account gekauft hast, werden diese hier nicht angezeigt."
+ "message": "Behalte die Token die du mit deinem MetaMask Account gekauft hast im Blick. Wenn du Token mit einem anderen Account gekauft hast, werden diese hier nicht angezeigt."
},
"total": {
"message": "Gesamt"
@@ -853,7 +868,7 @@
"message": " Account einsehen"
},
"visitWebSite": {
- "message": "Gehe zu unsere Webseite"
+ "message": "Gehe zu unserer Webseite"
},
"warning": {
"message": "Warnung"
diff --git a/app/_locales/nl/messages.json b/app/_locales/nl/messages.json
index c2f955123..38289f602 100644
--- a/app/_locales/nl/messages.json
+++ b/app/_locales/nl/messages.json
@@ -299,7 +299,7 @@
"message": "De gaslimiet moet minstens 21000 zijn"
},
"generatingSeed": {
- "message": "Zaad produceren ..."
+ "message": "Back-up woorden produceren ..."
},
"gasPrice": {
"message": "Gasprijs (GWEI)"
@@ -432,7 +432,7 @@
"message": "Los"
},
"loweCaseWords": {
- "message": "zaadwoorden hebben alleen kleine letters"
+ "message": "back-up woorden hebben alleen kleine letters"
},
"mainnet": {
"message": "belangrijkste ethereum-netwerk"
@@ -532,7 +532,7 @@
"description": "Voor het importeren van een account vanaf een privésleutel"
},
"pasteSeed": {
- "message": "Plak je zaadzin hier!"
+ "message": "Plak je back-up woorden hier!"
},
"personalAddressDetected": {
"message": "Persoonlijk adres gedetecteerd. Voer het tokencontractadres in."
@@ -581,7 +581,7 @@
"message": "Account opnieuw instellen"
},
"restoreFromSeed": {
- "message": "Herstel van zaaduitdrukking"
+ "message": "Herstel vanuit back-up woorden"
},
"required": {
"message": "Verplicht"
@@ -590,10 +590,10 @@
"message": "Probeer hier opnieuw met een hogere gasprijs"
},
"revealSeedWords": {
- "message": "Onthul zaadwoorden"
+ "message": "Onthul back-up woorden"
},
"revealSeedWordsWarning": {
- "message": "Herstel je zaadwoorden niet op een openbare plaats! Deze woorden kunnen worden gebruikt om al uw accounts te stelen."
+ "message": "Zorg dat je back-up woorden niet op een openbare plaats bekijkt! Deze woorden kunnen worden gebruikt om al uw accounts opnieuw te genereren (en dus uw account te stelen)."
},
"revert": {
"message": "terugkeren"
@@ -616,7 +616,7 @@
"description": "Account export proces"
},
"saveSeedAsFile": {
- "message": "Bewaar zaadwoorden als bestand"
+ "message": "Bewaar back-up woorden als bestand"
},
"search": {
"message": "Zoeken"
@@ -625,7 +625,7 @@
"message": "Voer hier je geheime twaalfwoordfrase in om je kluis te herstellen."
},
"seedPhraseReq": {
- "message": "zaadzinnen zijn 12 woorden lang"
+ "message": "Back-up woorden zijn 12 woorden lang"
},
"select": {
"message": "kiezen"
diff --git a/app/_locales/ru/messages.json b/app/_locales/ru/messages.json
index 01debddc2..cd43416ad 100644
--- a/app/_locales/ru/messages.json
+++ b/app/_locales/ru/messages.json
@@ -3,13 +3,13 @@
"message": "Принять"
},
"account": {
- "message": "Аккаунт"
+ "message": "Счет"
},
"accountDetails": {
- "message": "Детали Аккаунта"
+ "message": "Детали счета"
},
"accountName": {
- "message": "Имя Пользователя"
+ "message": "Название счета"
},
"address": {
"message": "Адрес"
@@ -21,13 +21,13 @@
"message": "Добавить токен"
},
"addTokens": {
- "message": "Добавить Токены"
+ "message": "Добавить токены"
},
"amount": {
- "message": "Количество"
+ "message": "Сумма"
},
"amountPlusGas": {
- "message": "Количество + газ"
+ "message": "Сумма + газ"
},
"appDescription": {
"message": "Расширение браузера для Ethereum",
@@ -37,11 +37,14 @@
"message": "MetaMask",
"description": "The name of the application"
},
+ "approved": {
+ "message": "Одобрена"
+ },
"attemptingConnect": {
"message": "Попытка подключиться к блокчейн сети."
},
"attributions": {
- "message": "Опознания"
+ "message": "Атрибуция"
},
"available": {
"message": "Доступный"
@@ -53,13 +56,13 @@
"message": "Баланс:"
},
"balances": {
- "message": "Ваши балансы"
+ "message": "Ваш баланс"
},
"balanceIsInsufficientGas": {
"message": "Недостаточный баланс для текущего объема газа"
},
"beta": {
- "message": "БЕТА"
+ "message": "BETA"
},
"betweenMinAndMax": {
"message": "должно быть больше или равно $1 и меньше или равно $2.",
@@ -69,10 +72,10 @@
"message": "Использовать Blockies Identicon"
},
"borrowDharma": {
- "message": "Заимствовать с Dharma (бета)"
+ "message": "Взять в долг на Dharma (Beta)"
},
"builtInCalifornia": {
- "message": "MetaMask спроектирован и построен в Калифорнии."
+ "message": "MetaMask спроектирован и разработан в Калифорнии."
},
"buy": {
"message": "Купить"
@@ -81,7 +84,10 @@
"message": "Купить на Coinbase"
},
"buyCoinbaseExplainer": {
- "message": "Coinbase - самый популярный в мире способ купить и продать биткойн, ethereum и litecoin."
+ "message": "Биржа Coinbase – это наиболее популярный способ купить или продать bitcoin, ethereum и litecoin."
+ },
+ "ok": {
+ "message": "ОК"
},
"cancel": {
"message": "Отмена"
@@ -95,14 +101,17 @@
"confirm": {
"message": "Подтвердить"
},
+ "confirmed": {
+ "message": "Подтверждена"
+ },
"confirmContract": {
- "message": "Подтвердить Контракт"
+ "message": "Подтвердить контракт"
},
"confirmPassword": {
- "message": "Подтвердите Пароль"
+ "message": "Подтвердите пароль"
},
"confirmTransaction": {
- "message": "Подтвердить Транзакцию"
+ "message": "Подтвердить транзакцию"
},
"continue": {
"message": "Продолжить"
@@ -114,7 +123,7 @@
"message": "Развертывание контракта"
},
"conversionProgress": {
- "message": "Выполняется конверсия"
+ "message": "Выполняется конвертация"
},
"copiedButton": {
"message": "Скопировано"
@@ -126,7 +135,7 @@
"message": "Скопировано!"
},
"copiedSafe": {
- "message": "Я скопировал его где-то в безопасности"
+ "message": "Я скопировал это в безопасное место"
},
"copy": {
"message": "Скопировать"
@@ -138,29 +147,32 @@
"message": " Скопировать "
},
"copyPrivateKey": {
- "message": "Это ваш личный ключ (нажмите, чтобы скопировать)"
+ "message": "Это ваш закрытый ключ (нажмите, чтобы скопировать)"
},
"create": {
"message": "Создать"
},
"createAccount": {
- "message": "Регистрация"
+ "message": "Создать счет"
},
"createDen": {
"message": "Создать"
},
"crypto": {
- "message": "Крипто",
+ "message": "Криптовалюта",
"description": "Exchange type (cryptocurrencies)"
},
"currentConversion": {
- "message": "Текущая конверсия"
+ "message": "Текущая конвертация"
},
"currentNetwork": {
"message": "Текущая сеть"
},
"customGas": {
- "message": "Настроить Газ"
+ "message": "Настроить газ"
+ },
+ "customToken": {
+ "message": "Пользовательский токен"
},
"customize": {
"message": "Настроить"
@@ -169,112 +181,114 @@
"message": "Пользовательский RPC"
},
"decimalsMustZerotoTen": {
- "message": "Десятичные числа должны быть не менее 0, и не более 36."
+ "message": "Количество десятичных разрядов должно быть минимум 0 и максимум 36."
},
"decimal": {
- "message": "Десятичные значения точности"
+ "message": "Количество десятичных разрядов"
},
"defaultNetwork": {
- "message": "Сеть по умолчанию для транзакций Ether - это Main Net."
+ "message": "Основная сеть Ethereum – это сеть по умолчанию для Ether транзакций."
},
"denExplainer": {
- "message": "Ваш DEN - это ваше зашифрованное паролем хранилище в MetaMask."
+ "message": "DEN – это зашифрованное паролем хранилище внутри MetaMask."
},
"deposit": {
- "message": "Депозит"
+ "message": "Пополнить"
},
"depositBTC": {
- "message": "Депозит BTC по адресу:"
+ "message": "Отправьте ваш BTC на адрес ниже:"
},
"depositCoin": {
- "message": "Депозит $1 по указанному ниже адресу",
+ "message": "Отправьте ваш $1 на адрес ниже",
"description": "Tells the user what coin they have selected to deposit with shapeshift"
},
"depositEth": {
- "message": "Депозит Eth"
+ "message": "Пополнить Eth"
},
"depositEther": {
- "message": "Депозит Эфир"
+ "message": "Пополнить Ether"
},
"depositFiat": {
- "message": "Депозит с деньгами"
+ "message": "Пополнить деньгами"
},
"depositFromAccount": {
- "message": "Депозит с другого счета"
+ "message": "Пополнить с другого счета"
},
"depositShapeShift": {
- "message": "Депозит с ShapeShift"
+ "message": "Пополнить через ShapeShift"
},
"depositShapeShiftExplainer": {
- "message": "Если у вас есть другие крипторесурсы, вы можете торговать и вносить Эфир непосредственно в кошелек MetaMask. Нет необходимости в аккаунте."
+ "message": "Если у вас есть другие криптовалюты, вы можете торговать и пополнять Ether напрямую в ваш MetaMask кошелек. Нет необходимости в счете."
},
"details": {
"message": "Детали"
},
"directDeposit": {
- "message": "Прямой Депозит"
+ "message": "Прямое пополнение"
},
"directDepositEther": {
- "message": "Прямой Депозит Эфира"
+ "message": "Прямое пополнение Ether"
},
"directDepositEtherExplainer": {
- "message": "Если у вас уже есть Эфир, самый быстрый способ получить Эфир в вашем новом кошельке это прямым депозитом."
+ "message": "Если у вас уже есть Ether, то самый быстрый способ получить Ether в ваш новый кошелек – это прямое пополнение."
},
"done": {
"message": "Готово"
},
"downloadStateLogs": {
- "message": "Загрузить логи статус"
+ "message": "Скачать журнал состояния"
+ "dropped": {
+ "message": "Отброшена"
},
"edit": {
"message": "Редактировать"
},
"editAccountName": {
- "message": "Изменить Имя Аккаунта"
+ "message": "Редактировать название счета"
},
"emailUs": {
"message": "Свяжитесь с нами по электронной почте!"
},
"encryptNewDen": {
- "message": "Шифруйте новый DEN"
+ "message": "Зашифровать ваш новый DEN"
},
"enterPassword": {
"message": "Введите пароль"
},
"enterPasswordConfirm": {
- "message": "Введите свой пароль для подтверждения"
+ "message": "Введите ваш пароль для подтверждения"
},
"etherscanView": {
- "message": "Просмотреть аккаунт на Etherscan"
+ "message": "Просмотреть счет на Etherscan"
},
"exchangeRate": {
- "message": "Обменный Курс"
+ "message": "Обменный курс"
},
"exportPrivateKey": {
- "message": "Экспорт закрытого ключа"
+ "message": "Экспортировать закрытый ключ"
},
"exportPrivateKeyWarning": {
- "message": "Экспорт секретных ключей на свой страх и риск."
+ "message": "Вы экспортируете закрытые ключи на свой страх и риск."
},
"failed": {
- "message": "Не смогли"
+ "message": "Неудачна"
},
"fiat": {
- "message": "Бумажные деньги",
+ "message": "Валюта",
"description": "Exchange type"
},
"fileImportFail": {
- "message": "Ошибка импорта файлов? Кликните сюда!",
+ "message": "Не работает импорт файла? Нажмите тут!",
"description": "Helps user import their account from a JSON file"
},
"followTwitter": {
- "message": "Следуйте за нами на Twitter"
+ "message": "Читайте нас в Twitter"
},
"from": {
- "message": "Из"
+ "message": "Отправитель"
},
"fromToSame": {
- "message": "От и до адреса не могут быть одинаковым"
+ "message": "Адрес отправителя и получателя не могут быть одинаковыми"
},
"fromShapeShift": {
"message": "Из ShapeShift"
@@ -284,37 +298,37 @@
"description": "Short indication of gas cost"
},
"gasFee": {
- "message": "Плата за Газ"
+ "message": "Комиссия за газ"
},
"gasLimit": {
- "message": "Газовый Предел"
+ "message": "Лимит газа"
},
"gasLimitCalculation": {
- "message": "Мы рассчитываем предполагаемый предел газа на основе коэффициентов успешности сети."
+ "message": "Мы расчитываем предлагаемый лимит газа на основании успешных ставок в сети."
},
"gasLimitRequired": {
- "message": "Требуется ограничение на Газ"
+ "message": "Установите лимит газа"
},
"gasLimitTooLow": {
- "message": "Предел газа должен быть не менее 21000"
+ "message": "Лимит газа должен быть как минимум 21000"
},
"generatingSeed": {
- "message": "Создание Семян ..."
+ "message": "Генерируем фразу..."
},
"gasPrice": {
- "message": "Цена на Газ (GWEI)"
+ "message": "Цена за газ (GWEI)"
},
"gasPriceCalculation": {
- "message": "Мы вычисляем предлагаемые цены на газ на основе коэффициентов успеха сети."
+ "message": "Мы расчитываем предлагаемые цены за газ на основании успешных ставок в сети."
},
"gasPriceRequired": {
- "message": "Требуется цена на Газ"
+ "message": "Установите стоимость газа"
},
"getEther": {
- "message": "Получить Эфир"
+ "message": "Получить Ether"
},
"getEtherFromFaucet": {
- "message": "Получите Эфир из крана $1",
+ "message": "Получить Ether из крана для $1",
"description": "Displays network name for Ether faucet"
},
"greaterThanMin": {
@@ -322,14 +336,14 @@
"description": "helper for inputting hex as decimal input"
},
"here": {
- "message": "здесь",
+ "message": "тут",
"description": "as in -click here- for more information (goes with troubleTokenBalances)"
},
"hereList": {
- "message": "Вот список !!!!"
+ "message": "Вот список!!!!"
},
"hide": {
- "message": "Спрятать"
+ "message": "Скрыть"
},
"hideToken": {
"message": "Скрыть токен"
@@ -338,33 +352,33 @@
"message": "Скрыть токен?"
},
"howToDeposit": {
- "message": "Как бы вы хотели поместить Эфир?"
+ "message": "Как бы вы хотели пополнить Ether?"
},
"holdEther": {
- "message": "Это позволяет вам использовать эфир и токены и служит мостом для децентрализованных приложений."
+ "message": "Позволяет вам хранить ether и токены и служит в качестве моста в децентрализированные приложения."
},
"import": {
"message": "Импортировать",
"description": "Button to import an account from a selected file"
},
"importAccount": {
- "message": "Импорт Аккаунта"
+ "message": "Импортировать счет"
},
"importAccountMsg": {
- "message": " Импортированные аккаунты не будут связаны с вашей первоначально созданным аккаунтом MetaMask. Подробнее о импортированных аккаунтах "
+ "message":" Импортированные счета не будут ассоциированы с вашей ключевой фразой, созданной MetaMask. Узнать больше про импорт счетов "
},
"importAnAccount": {
"message": "Импортировать аккаунт"
},
"importDen": {
- "message": "Импорт существующих DEN"
+ "message": "Импортировать существующий DEN"
},
"imported": {
"message": "Импортирован",
"description": "status showing that an account has been fully loaded into the keyring"
},
"infoHelp": {
- "message": "Информация и Помощь"
+ "message": "Информация и помощь"
},
"insufficientFunds": {
"message": "Недостаточно средств."
@@ -373,35 +387,44 @@
"message": "Недостаточно токенов."
},
"invalidAddress": {
- "message": "Недействительный адрес"
+ "message": "Неверный адрес"
},
"invalidAddressRecipient": {
- "message": "Недопустимый адрес получателя."
+ "message": "Неверный адрес получателя"
},
"invalidGasParams": {
- "message": "Недопустимые параметры Газа"
+ "message": "Неверные параметры газа"
},
"invalidInput": {
- "message": "Неправильный ввод."
+ "message": "Неверный ввод."
},
"invalidRequest": {
- "message": "Неверный Запрос"
+ "message": "Неверный запрос"
},
"invalidRPC": {
- "message": "Недопустимый URI RPC"
+ "message": "Неверный RPC URI"
},
"jsonFail": {
- "message": "Что-то пошло не так. Убедитесь, что ваш файл JSON правильно отформатирован."
+ "message": "Что-то пошло не так. Убедитесь, что ваш JSON файл правильно отформатирован."
},
"jsonFile": {
- "message": "Файл JSON",
+ "message": "JSON файл",
"description": "format for importing an account"
},
+ "keepTrackTokens": {
+ "message": "Следите за купленными вами токенами с помощью аккаунта MetaMask."
+ },
"kovan": {
- "message": "Kovan тестовая сеть"
+ "message": "Тестовая сеть Kovan"
},
"knowledgeDataBase": {
- "message": "Посетите нашу базу знаний"
+ "message": "Посмотрите нашу Базу Знаний"
+ },
+ "max": {
+ "message": "Максимум"
+ },
+ "learnMore": {
+ "message": "Узнать больше."
},
"lessThanMax": {
"message": "должно быть меньше или равно $1.",
@@ -410,29 +433,32 @@
"likeToAddTokens": {
"message": "Вы хотите добавить эти токены?"
},
+ "links": {
+ "message": "Ссылки"
+ },
"limit": {
- "message": "Предел"
+ "message": "Лимит"
},
"loading": {
"message": "Загрузка..."
},
"loadingTokens": {
- "message": "Загрузка токенов ..."
+ "message": "Загрузка токенов..."
},
"localhost": {
- "message": "Локальный адрес 8545"
+ "message": "Localhost 8545"
},
"login": {
- "message": "Авторизоваться"
+ "message": "Вход"
},
"logout": {
- "message": "Выйти"
+ "message": "Выход"
},
"loose": {
- "message": "Рыхлый"
+ "message": "Несвязанный"
},
"loweCaseWords": {
- "message": "семенные слова имеют только символы нижнего регистра"
+ "message": "ключевая фраза может содержать только символы нижнего регистра"
},
"mainnet": {
"message": "Основная сеть Ethereum"
@@ -441,19 +467,19 @@
"message": "Сообщение"
},
"metamaskDescription": {
- "message": "MetaMask - это безопасное хранилище для Ethereum."
+ "message": "MetaMask – безопасный кошелек для Ethereum."
},
"min": {
"message": "Минимум"
},
"myAccounts": {
- "message": "Мои Аккаунты"
+ "message": "Мои счета"
},
"mustSelectOne": {
- "message": "Необходимо выбрать не менее 1 токена."
+ "message": "Необходимо выбрать как минимум 1 токен."
},
"needEtherInWallet": {
- "message": "Чтобы взаимодействовать с децентрализованными приложениями с помощью MetaMask, вам понадобится Эфир в вашем кошельке."
+ "message": "Для взаимодействия с децентрализованными приложениями с помощью MetaMask нужен Ether в вашем кошельке."
},
"needImportFile": {
"message": "Вы должны выбрать файл для импорта.",
@@ -464,60 +490,60 @@
"description": "Password and file needed to import an account"
},
"negativeETH": {
- "message": "Невозможно отправить отрицательные количества ETH."
+ "message": "Невозможно отправить отрицательную сумму ETH."
},
"networks": {
"message": "Сети"
},
"newAccount": {
- "message": "Новый Аккаунт"
+ "message": "Новый счет"
},
"newAccountNumberName": {
- "message": "Аккаунт $1",
+ "message": "Счет $1",
"description": "Default name of next account to be created on create account screen"
},
"newContract": {
- "message": "Новый Контракт"
+ "message": "Новый контракт"
},
"newPassword": {
"message": "Новый пароль (мин. 8 символов)"
},
"newRecipient": {
- "message": "Новый Получатель"
+ "message": "Новый получатель"
},
"newRPC": {
- "message": "Новый URL-адрес RPC"
+ "message": "Новый RPC URL"
},
"next": {
"message": "Далее"
},
"noAddressForName": {
- "message": "Для этого имени не задан адрес."
+ "message": "Дла этого названия не установлен адрес."
},
"noDeposits": {
- "message": "Не было получено никаких депозитов"
+ "message": "Пополнения не получены"
},
"noTransactionHistory": {
"message": "Нет истории транзакций."
},
"noTransactions": {
- "message": "Нет Транзакций"
+ "message": "Нет транзакций"
},
"notStarted": {
- "message": "Не Начался"
+ "message": "Не запущен"
},
"oldUI": {
- "message": "Старый Интерфейс"
+ "message": "Старая версия интерфейса"
},
"oldUIMessage": {
- "message": "Вы вернулись к старому интерфейсу. Вы можете вернуться к новому с помощью опции в раскрывающемся меню в правом верхнем углу."
+ "message": "Вы вернулись к старой версии интерфейса пользователя. Вы можете переключиться на новую с помощью опции выпадающего меню в правом верхнем углу."
},
"or": {
"message": "или",
"description": "choice between creating or importing a new account"
},
"passwordCorrect": {
- "message": "Убедитесь, что ваш пароль правильный."
+ "message": "Убедитесь, что ваш пароль верный."
},
"passwordMismatch": {
"message": "пароли не совпадают",
@@ -528,27 +554,30 @@
"description": "in password creation process, the password is not long enough to be secure"
},
"pastePrivateKey": {
- "message": "Вставьте свою личную строку:",
+ "message": "Вставьте ваш закрытый ключ тут:",
"description": "For importing an account from a private key"
},
"pasteSeed": {
- "message": "Вставьте здесь свою семенную фразу!"
+ "message": "Вставьте вашу ключевую фразу!"
},
"personalAddressDetected": {
- "message": "Персональный адрес обнаружен. Введите адрес контракта токена."
+ "message": "Обнаружен персональный адрес. Введите адрес контракта токена."
},
"pleaseReviewTransaction": {
"message": "Проверьте транзакцию."
},
+ "popularTokens": {
+ "message": "Популярные токены"
+ },
"privacyMsg": {
- "message": "Политика Конфиденциальности"
+ "message": "Политика конфиденциальности"
},
"privateKey": {
"message": "Закрытый ключ",
"description": "select this type of file to use to import an account"
},
"privateKeyWarning": {
- "message": "Предупреждение: никогда не раскрывайте этот ключ. Любой, у кого есть ваши личные ключи, может украсть любые активы, хранящиеся в вашем аккаунте."
+ "message": "Предупреждение: Никогда не раскрывайте этот ключ. Любой, у кого есть ваши закрытые ключи, может украсть любые активы, хранящиеся на счету."
},
"privateNetwork": {
"message": "Частная сеть"
@@ -557,126 +586,165 @@
"message": "Показать QR-код"
},
"readdToken": {
- "message": "Вы можете добавить этот токен в будущем, перейдя в “Добавить токен” в меню параметров вашего аккаунта."
+ "message": "Вы можете в будущем добавить обратно этот токен, выбрав пункт меню “Добавить токен”."
},
"readMore": {
- "message": "Подробнее читайте здесь."
+ "message": "Узнать больше тут."
},
"readMore2": {
- "message": "Прочитайте больше."
+ "message": "Узнать больше."
},
"receive": {
"message": "Получить"
},
"recipientAddress": {
- "message": "Адрес Получателя"
+ "message": "Адрес получателя"
},
"refundAddress": {
- "message": "Ваш Адрес Возврата"
+ "message": "Ваш адрес для возврата средств"
},
"rejected": {
- "message": "Отклонено"
+ "message": "Отклонена"
},
"resetAccount": {
"message": "Сбросить аккаунт"
},
"restoreFromSeed": {
- "message": "Восстановить от семенной фразы"
+ "message": "Восстановить из ключевой фразы"
+ },
+ "restoreVault": {
+ "message": "Восстановить кошелек"
},
"required": {
- "message": "Необходимо"
+ "message": "Обязательное поле"
},
"retryWithMoreGas": {
- "message": "Повторите попытку с более высокой ценой на газ здесь"
+ "message": "Повторите попытку с большей ценой за газRetry with a higher gas price here"
+ },
+ "walletSeed": {
+ "message": "Ключевая фраза кошелька"
},
"revealSeedWords": {
- "message": "Раскрыть семенные слова"
+ "message": "Показать ключевую фразу"
},
"revealSeedWordsWarning": {
- "message": "Не восстанавливайте семенные слова в общественном месте! Эти слова могут использоваться для кражи всех ваших аккаунтах."
+ "message": "Не восстанавливайте ключевую фразу в общественном месте! Она может быть использована для кражи всех ваших счетов."
},
"revert": {
- "message": "Откат"
+ "message": "Восстановить"
},
"rinkeby": {
- "message": "Rinkeby тестовая сеть"
+ "message": "Тестовая сеть Rinkeby"
},
"ropsten": {
- "message": "Ropsten тестовая сеть"
+ "message": "Тестовая сеть Ropsten"
+ },
+ "currentRpc": {
+ "message": "Current RPC"
+ },
+ "connectingToMainnet": {
+ "message": "Соединение с основной сетью Ethereum"
+ },
+ "connectingToRopsten": {
+ "message": "Соединение с тестовой сетью Ropsten"
+ },
+ "connectingToKovan": {
+ "message": "Соединение с тестовой сетью Kovan"
+ },
+ "connectingToRinkeby": {
+ "message": "Соединение с тестовой сетью Rinkeby"
+ },
+ "connectingToUnknown": {
+ "message": "Соединение с неизвестной сетью"
},
"sampleAccountName": {
- "message": "Например, Мой новый аккаунт",
+ "message": "Например, Мой новый счет",
"description": "Help user understand concept of adding a human-readable name to their account"
},
"save": {
"message": "Сохранить"
},
"saveAsFile": {
- "message": "Сохранить как Файл",
+ "message": "Сохранить в виде файла",
"description": "Account export process"
},
"saveSeedAsFile": {
- "message": "Сохранить Семенные Слова Как Файл"
+ "message": "Сохранить ключевую фразу в виде файла"
},
"search": {
"message": "Поиск"
},
"secretPhrase": {
- "message": "Введите свою секретную двенадцатисловную фразу здесь, чтобы восстановить хранилище."
+ "message": "Введите вашу ключевую фразу из 12 слов, чтобы восстановить кошелек."
+ },
+ "newPassword8Chars": {
+ "message": "Новый пароль (мин. 8 символов)"
},
"seedPhraseReq": {
- "message": "семенные фразы длиной 12 слов"
+ "message": "ключевые фразы имеют длину 12 слов"
},
"select": {
"message": "Выбрать"
},
"selectCurrency": {
- "message": "Выберите Валюту"
+ "message": "Выберите валюту"
},
"selectService": {
- "message": "Выберите Сервис"
+ "message": "Выберите сервис"
},
"selectType": {
- "message": "Выберите Тип"
+ "message": "Выберите тип"
},
"send": {
- "message": "Послать"
+ "message": "Отправить"
},
"sendETH": {
"message": "Отправить ETH"
},
"sendTokens": {
- "message": "Отправить Токены"
+ "message": "Отправить токены"
+ },
+ "onlySendToEtherAddress": {
+ "message": "Отправляйте ETH только на Ethereum адреса."
+ },
+ "searchTokens": {
+ "message": "Поиск токенов"
},
"sendTokensAnywhere": {
- "message": "Отправить Токены кому-либо с аккаунтом Ethereum"
+ "message": "Отправить токены любому, у кого есть счет Ethereum"
},
"settings": {
"message": "Настройки"
},
+ "info": {
+ "message": "Информация"
+ },
"shapeshiftBuy": {
- "message": "Купить с помощью Shapeshift"
+ "message": "Купить через Shapeshift"
},
"showPrivateKeys": {
- "message": "Показать приватные ключи"
+ "message": "Показать закрытые ключи"
},
"showQRCode": {
"message": "Показать QR-код"
},
"sign": {
- "message": "Знак"
+ "message": "Подпись"
+ },
+ "signed": {
+ "message": "Подписана"
},
"signMessage": {
- "message": "Нодписать сообщение"
+ "message": "Подписать сообщение"
},
"signNotice": {
- "message": "Подписание этого сообщения может иметь \nопасные побочные эффекты. Только подписывайте сообщения \nс сайтов, которым вы полностью доверяете своим аккаунтом. Этот опасный метод будет удален в будущей версии."
+ "message": "Подпись этого сообщения может иметь \nопасные побочные эффекты. Подписывайте только сообщения \nс сайтов, которым вы полностью доверяете свой аккаунт. Этот опасный метод будет удален в будущей версии."
},
"sigRequest": {
- "message": "Запрос на подпись"
+ "message": "Запрос подписи"
},
"sigRequested": {
- "message": "Подпись Запрошена"
+ "message": "Подпись запрошена"
},
"spaceBetween": {
"message": "между словами может быть только пробел"
@@ -685,53 +753,59 @@
"message": "Статус"
},
"stateLogs": {
- "message": "Логи Статуса"
+ "message": "Журнал состояния"
},
"stateLogsDescription": {
- "message": "Логи статуса содержат ваши общедоступные адреса и отправленные транзакции."
+ "message": "Журнал состояния содержит ваши публичные адреса счетов и совершенные транзакции."
+ },
+ "stateLogError": {
+ "message": "Ошибка при получении журнала состояния."
},
"submit": {
"message": "Отправить"
},
+ "submitted": {
+ "message": "Отправлена"
+ },
"supportCenter": {
- "message": "Посетите наш Центр поддержки"
+ "message": "Перейти в наш Центр поддержки"
},
"symbolBetweenZeroTen": {
"message": "Символ должен быть от 0 до 10 символов."
},
"takesTooLong": {
- "message": "Занимает слишком долго?"
+ "message": "Слишком долго?"
},
"terms": {
- "message": "Условия Эксплуатации"
+ "message": "Условия пользования"
},
"testFaucet": {
- "message": "Тестовый Кран"
+ "message": "Тестовый кран"
},
"to": {
- "message": "К"
+ "message": "Получатель: "
},
"toETHviaShapeShift": {
"message": "$1 в ETH через ShapeShift",
"description": "system will fill in deposit type in start of message"
},
"tokenAddress": {
- "message": "Адрес Токена"
+ "message": "Адрес токена"
},
"tokenAlreadyAdded": {
- "message": "Токен уже добавлен."
+ "message": "Токен уже был добавлен."
},
"tokenBalance": {
- "message": "Баланс Вашых Tокенов:"
+ "message": "Баланс ваших токенов:"
},
"tokenSelection": {
- "message": "Поиск токенов или выбор из нашего списка популярных токенов."
+ "message": "Поищите токен или выберите из нашего списка популярных токенов."
},
"tokenSymbol": {
- "message": "Символ Токена"
+ "message": "Символ токена"
},
"tokenWarning1": {
- "message": "Следите за токенами, которые вы купили с помощью аккаунта MetaMask. Если вы купили токены, используя другой аккаунт, эти токены здесь не появятся."
+ "message": "Отслеживаются токены, купленные на счет в MetaMask. Если вы купили токены, используя другой счет, такие токены не будут тут отображены."
},
"total": {
"message": "Всего"
@@ -740,35 +814,38 @@
"message": "транзакции"
},
"transactionMemo": {
- "message": "Транзакционная записка (необязательно)"
+ "message": "Транзакционные данные (необязательный)"
},
"transactionNumber": {
- "message": "Номер Транзакции"
+ "message": "Номер транзакции"
},
"transfers": {
"message": "Переводы"
},
"troubleTokenBalances": {
- "message": "У нас были проблемы с загрузкой ваших токенов. Вы можете просмотреть их ",
+ "message": "Возникли проблемы при загрузке балансов токенов. Вы можете посмотреть их ",
"description": "Followed by a link (here) to view token balances"
},
"twelveWords": {
- "message": "Эти 12 слов - единственный способ восстановить ваши учетные записи MetaMask.\nСохраните их где-нибудь в безопасности и в тайне."
+ "message": "Эти 12 слов являются единственной возможностью восстановить ваши счета в MetaMask.\nСохраните из в надежном секретном месте."
},
"typePassword": {
- "message": "Введите Пароль"
+ "message": "Введите пароль"
},
"uiWelcome": {
- "message": "Добро пожаловать в новый интерфейс (бета-версия)"
+ "message": "Новый интерфейс (Beta)"
},
"uiWelcomeMessage": {
- "message": "Теперь вы используете новый интерфейс Metamask. Осмотритесь, попробуйте новые функции, такие как отправку токенов, и сообщите нам, есть ли у вас какие-либо проблемы."
+ "message": "Теперь вы используете новый интерфейс пользователя MetaMask. Осмотритесь, попробуйте новые функции, например, отправить токены и, если возникнут проблемы, сообщите нам."
+ },
+ "unapproved": {
+ "message": "Не одобрена"
},
"unavailable": {
- "message": "Недоступен"
+ "message": "Недоступный"
},
"unknown": {
- "message": "Неизвестный"
+ "message": "Неизвестно"
},
"unknownNetwork": {
"message": "Неизвестная частная сеть"
@@ -777,7 +854,7 @@
"message": "Неизвестный идентификатор сети"
},
"uriErrorMsg": {
- "message": "Для URI требуется соответствующий префикс HTTP / HTTPS."
+ "message": "Для URI требуется соответствующий префикс HTTP/HTTPS."
},
"usaOnly": {
"message": "Только США",
@@ -787,19 +864,19 @@
"message": "Используется различными клиентами"
},
"useOldUI": {
- "message": "Использовать старый интерфейс"
+ "message": "Использовать старый интерфейс пользователя"
},
"validFileImport": {
- "message": "Вы должны выбрать действительный файл для импорта."
+ "message": "Вам нужно выбрать правильный файл для импорта."
},
"vaultCreated": {
- "message": "Создано хранилище"
+ "message": "Кошелек был создан"
},
"viewAccount": {
- "message": "Посмотреть аккаунт"
+ "message": "Посмотреть счет"
},
"visitWebSite": {
- "message": "Посетите наш сайт"
+ "message": "Перейти на наш сайт"
},
"warning": {
"message": "Предупреждение"
@@ -811,7 +888,7 @@
"message": "Что это?"
},
"yourSigRequested": {
- "message": "Ваша подпись запрашивается"
+ "message": "Запрашивается ваша подпись"
},
"youSign": {
"message": "Вы подписываете"
diff --git a/app/home.html b/app/home.html
index cfb4b00a0..4fad0f993 100644
--- a/app/home.html
+++ b/app/home.html
@@ -3,10 +3,10 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1 user-scalable=no">
- <title>MetaMask Plugin</title>
+ <title>MetaMask</title>
</head>
<body>
<div id="app-content"></div>
- <script src="./scripts/popup.js" type="text/javascript" charset="utf-8"></script>
+ <script src="./ui.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>
diff --git a/app/manifest.json b/app/manifest.json
index a20f9b976..1982b4820 100644
--- a/app/manifest.json
+++ b/app/manifest.json
@@ -27,8 +27,8 @@
"default_locale": "en",
"background": {
"scripts": [
- "scripts/chromereload.js",
- "scripts/background.js"
+ "chromereload.js",
+ "background.js"
],
"persistent": true
},
@@ -48,7 +48,7 @@
"https://*/*"
],
"js": [
- "scripts/contentscript.js"
+ "contentscript.js"
],
"run_at": "document_start",
"all_frames": true
@@ -62,11 +62,11 @@
"https://*.infura.io/"
],
"web_accessible_resources": [
- "scripts/inpage.js"
+ "inpage.js"
],
"externally_connectable": {
"matches": [
"https://metamask.io/*"
]
}
-} \ No newline at end of file
+}
diff --git a/app/notification.html b/app/notification.html
index f10cbbf41..457ba7137 100644
--- a/app/notification.html
+++ b/app/notification.html
@@ -11,6 +11,6 @@
</head>
<body class="notification" style="height:600px;">
<div id="app-content"></div>
- <script src="./scripts/popup.js" type="text/javascript" charset="utf-8"></script>
+ <script src="./ui.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>
diff --git a/app/popup.html b/app/popup.html
index bf09b97ca..3acfd8c55 100644
--- a/app/popup.html
+++ b/app/popup.html
@@ -3,10 +3,10 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1 user-scalable=no">
- <title>MetaMask Plugin</title>
+ <title>MetaMask</title>
</head>
<body style="width:357px; height:600px;">
<div id="app-content"></div>
- <script src="./scripts/popup.js" type="text/javascript" charset="utf-8"></script>
+ <script src="./ui.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>
diff --git a/app/scripts/contentscript.js b/app/scripts/contentscript.js
index 7abbc60e7..2098fae27 100644
--- a/app/scripts/contentscript.js
+++ b/app/scripts/contentscript.js
@@ -7,8 +7,8 @@ const ObjectMultiplex = require('obj-multiplex')
const extension = require('extensionizer')
const PortStream = require('./lib/port-stream.js')
-const inpageContent = fs.readFileSync(path.join(__dirname, '..', '..', 'dist', 'chrome', 'scripts', 'inpage.js')).toString()
-const inpageSuffix = '//# sourceURL=' + extension.extension.getURL('scripts/inpage.js') + '\n'
+const inpageContent = fs.readFileSync(path.join(__dirname, '..', '..', 'dist', 'chrome', 'inpage.js')).toString()
+const inpageSuffix = '//# sourceURL=' + extension.extension.getURL('inpage.js') + '\n'
const inpageBundle = inpageContent + inpageSuffix
// Eventually this streaming injection could be replaced with:
@@ -96,7 +96,7 @@ function logStreamDisconnectWarning (remoteLabel, err) {
}
function shouldInjectWeb3 () {
- return doctypeCheck() && suffixCheck()
+ return doctypeCheck() && suffixCheck()
&& documentElementCheck() && !blacklistedDomainCheck()
}
diff --git a/app/scripts/controllers/currency.js b/app/scripts/controllers/currency.js
index 25a7a942e..930fc52e8 100644
--- a/app/scripts/controllers/currency.js
+++ b/app/scripts/controllers/currency.js
@@ -52,7 +52,7 @@ class CurrencyController {
this.setConversionDate(Number(parsedResponse.timestamp))
}).catch((err) => {
if (err) {
- console.warn('MetaMask - Failed to query currency conversion.')
+ console.warn(`MetaMask - Failed to query currency conversion:`, currentCurrency, err)
this.setConversionRate(0)
this.setConversionDate('N/A')
}
diff --git a/app/scripts/controllers/transactions.js b/app/scripts/controllers/transactions.js
index 3e3909361..a18a2d2e2 100644
--- a/app/scripts/controllers/transactions.js
+++ b/app/scripts/controllers/transactions.js
@@ -161,9 +161,11 @@ module.exports = class TransactionController extends EventEmitter {
this.emit(`${txMeta.id}:unapproved`, txMeta)
}
- async newUnapprovedTransaction (txParams) {
+ async newUnapprovedTransaction (txParams, opts = {}) {
log.debug(`MetaMaskController newUnapprovedTransaction ${JSON.stringify(txParams)}`)
const initialTxMeta = await this.addUnapprovedTransaction(txParams)
+ initialTxMeta.origin = opts.origin
+ this.txStateManager.updateTx(initialTxMeta, '#newUnapprovedTransaction - adding the origin')
// listen for tx completion (success, fail)
return new Promise((resolve, reject) => {
this.txStateManager.once(`${initialTxMeta.id}:finished`, (finishedTxMeta) => {
@@ -250,7 +252,7 @@ module.exports = class TransactionController extends EventEmitter {
// wait for a nonce
nonceLock = await this.nonceTracker.getNonceLock(fromAddress)
// add nonce to txParams
- // if txMeta has lastGasPrice then it is a retry at same nonce with higher
+ // if txMeta has lastGasPrice then it is a retry at same nonce with higher
// gas price transaction and their for the nonce should not be calculated
const nonce = txMeta.lastGasPrice ? txMeta.txParams.nonce : nonceLock.nextNonce
txMeta.txParams.nonce = ethUtil.addHexPrefix(nonce.toString(16))
@@ -273,12 +275,14 @@ module.exports = class TransactionController extends EventEmitter {
async signTransaction (txId) {
const txMeta = this.txStateManager.getTx(txId)
- const txParams = txMeta.txParams
- const fromAddress = txParams.from
// add network/chain id
- txParams.chainId = ethUtil.addHexPrefix(this.getChainId().toString(16))
+ const chainId = this.getChainId()
+ const txParams = Object.assign({}, txMeta.txParams, { chainId })
+ // sign tx
+ const fromAddress = txParams.from
const ethTx = new Transaction(txParams)
await this.signEthTx(ethTx, fromAddress)
+ // set state to signed
this.txStateManager.setTxStatusSigned(txMeta.id)
const rawTx = ethUtil.bufferToHex(ethTx.serialize())
return rawTx
diff --git a/app/scripts/lib/nonce-tracker.js b/app/scripts/lib/nonce-tracker.js
index ed9dd3f11..5b1cd7f43 100644
--- a/app/scripts/lib/nonce-tracker.js
+++ b/app/scripts/lib/nonce-tracker.js
@@ -31,14 +31,13 @@ class NonceTracker {
const networkNonceResult = await this._getNetworkNextNonce(address)
const highestLocallyConfirmed = this._getHighestLocallyConfirmed(address)
const nextNetworkNonce = networkNonceResult.nonce
- const highestLocalNonce = highestLocallyConfirmed
- const highestSuggested = Math.max(nextNetworkNonce, highestLocalNonce)
+ const highestSuggested = Math.max(nextNetworkNonce, highestLocallyConfirmed)
const pendingTxs = this.getPendingTransactions(address)
const localNonceResult = this._getHighestContinuousFrom(pendingTxs, highestSuggested) || 0
nonceDetails.params = {
- highestLocalNonce,
+ highestLocallyConfirmed,
highestSuggested,
nextNetworkNonce,
}
diff --git a/app/scripts/lib/setupRaven.js b/app/scripts/lib/setupRaven.js
index a869588d0..b93591e65 100644
--- a/app/scripts/lib/setupRaven.js
+++ b/app/scripts/lib/setupRaven.js
@@ -23,10 +23,20 @@ function setupRaven(opts) {
release,
transport: function(opts) {
const report = opts.data
- // simplify ethjs error messages
+ // simplify certain complex error messages
report.exception.values.forEach(item => {
- item.value = extractEthjsErrorMessage(item.value)
+ let errorMessage = item.value
+ // simplify ethjs error messages
+ errorMessage = extractEthjsErrorMessage(errorMessage)
+ // simplify 'Transaction Failed: known transaction'
+ if (errorMessage.indexOf('Transaction Failed: known transaction') === 0) {
+ // cut the hash from the error message
+ errorMessage = 'Transaction Failed: known transaction'
+ }
+ // finalize
+ item.value = errorMessage
})
+
// modify report urls
rewriteReportUrls(report)
// make request normally
diff --git a/app/scripts/lib/tx-state-manager.js b/app/scripts/lib/tx-state-manager.js
index ab344ae9b..23c915a61 100644
--- a/app/scripts/lib/tx-state-manager.js
+++ b/app/scripts/lib/tx-state-manager.js
@@ -106,12 +106,9 @@ module.exports = class TransactionStateManager extends EventEmitter {
}
updateTx (txMeta, note) {
+ // validate txParams
if (txMeta.txParams) {
- Object.keys(txMeta.txParams).forEach((key) => {
- const value = txMeta.txParams[key]
- if (typeof value !== 'string') console.error(`${key}: ${value} in txParams is not a string`)
- if (!ethUtil.isHexPrefixed(value)) console.error('is not hex prefixed, anything on txParams must be hex prefixed')
- })
+ this.validateTxParams(txMeta.txParams)
}
// create txMeta snapshot for history
@@ -139,6 +136,15 @@ module.exports = class TransactionStateManager extends EventEmitter {
this.updateTx(txMeta, `txStateManager#updateTxParams`)
}
+ // validates txParams members by type
+ validateTxParams(txParams) {
+ Object.keys(txParams).forEach((key) => {
+ const value = txParams[key]
+ if (typeof value !== 'string') throw new Error(`${key}: ${value} in txParams is not a string`)
+ if (!ethUtil.isHexPrefixed(value)) throw new Error('is not hex prefixed, everything on txParams must be hex prefixed')
+ })
+ }
+
/*
Takes an object of fields to search for eg:
let thingsToLookFor = {
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index 4422a5cf3..b96acc9da 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -57,7 +57,6 @@ module.exports = class MetamaskController extends EventEmitter {
this.defaultMaxListeners = 20
this.sendUpdate = debounce(this.privateSendUpdate.bind(this), 200)
-
this.opts = opts
const initState = opts.initState || {}
this.recordFirstTimeInfo(initState)
@@ -242,6 +241,11 @@ module.exports = class MetamaskController extends EventEmitter {
static: {
eth_syncing: false,
web3_clientVersion: `MetaMask/v${version}`,
+ eth_sendTransaction: (payload, next, end) => {
+ const origin = payload.origin
+ const txParams = payload.params[0]
+ nodeify(this.txController.newUnapprovedTransaction, this.txController)(txParams, { origin }, end)
+ },
},
// account mgmt
getAccounts: (cb) => {
@@ -256,7 +260,6 @@ module.exports = class MetamaskController extends EventEmitter {
cb(null, result)
},
// tx signing
- processTransaction: nodeify(async (txParams) => await this.txController.newUnapprovedTransaction(txParams), this),
// old style msg signing
processMessage: this.newUnsignedMessage.bind(this),
// personal_sign msg signing
diff --git a/app/scripts/popup.js b/app/scripts/ui.js
index 13c7ac5ec..13c7ac5ec 100644
--- a/app/scripts/popup.js
+++ b/app/scripts/ui.js