diff options
author | hackyminer <hackyminer@gmail.com> | 2018-10-26 19:37:35 +0800 |
---|---|---|
committer | hackyminer <hackyminer@gmail.com> | 2018-10-26 19:37:35 +0800 |
commit | bc7f8d0a5bf42b73ee1d1102362fc0a94dc80c0d (patch) | |
tree | 96fc1c969b49c66081ff1a042a6e2e3e787723c7 /app | |
parent | b62d07f3a5bdfde7e295f17b7f601c6f2d5314ef (diff) | |
parent | 54a8ade2669cb5f8f046509873bc2a9c25425847 (diff) | |
download | tangerine-wallet-browser-bc7f8d0a5bf42b73ee1d1102362fc0a94dc80c0d.tar tangerine-wallet-browser-bc7f8d0a5bf42b73ee1d1102362fc0a94dc80c0d.tar.gz tangerine-wallet-browser-bc7f8d0a5bf42b73ee1d1102362fc0a94dc80c0d.tar.bz2 tangerine-wallet-browser-bc7f8d0a5bf42b73ee1d1102362fc0a94dc80c0d.tar.lz tangerine-wallet-browser-bc7f8d0a5bf42b73ee1d1102362fc0a94dc80c0d.tar.xz tangerine-wallet-browser-bc7f8d0a5bf42b73ee1d1102362fc0a94dc80c0d.tar.zst tangerine-wallet-browser-bc7f8d0a5bf42b73ee1d1102362fc0a94dc80c0d.zip |
Merge branch 'develop' into eth_chainid
Diffstat (limited to 'app')
-rw-r--r-- | app/_locales/en/messages.json | 25 | ||||
-rw-r--r-- | app/_locales/ht/messages.json | 2545 | ||||
-rw-r--r-- | app/_locales/index.json | 42 | ||||
-rw-r--r-- | app/_locales/nl/messages.json | 2 | ||||
-rw-r--r-- | app/loading.html | 12 | ||||
-rw-r--r-- | app/scripts/background.js | 10 | ||||
-rw-r--r-- | app/scripts/controllers/currency.js | 52 | ||||
-rw-r--r-- | app/scripts/controllers/network/network.js | 62 | ||||
-rw-r--r-- | app/scripts/controllers/preferences.js | 70 | ||||
-rw-r--r-- | app/scripts/lib/ens-ipfs/contracts/registrar.js (renamed from app/scripts/lib/contracts/registrar.js) | 0 | ||||
-rw-r--r-- | app/scripts/lib/ens-ipfs/contracts/resolver.js (renamed from app/scripts/lib/contracts/resolver.js) | 0 | ||||
-rw-r--r-- | app/scripts/lib/ens-ipfs/resolver.js | 54 | ||||
-rw-r--r-- | app/scripts/lib/ens-ipfs/setup.js | 63 | ||||
-rw-r--r-- | app/scripts/lib/ipfsContent.js | 46 | ||||
-rw-r--r-- | app/scripts/lib/resolver.js | 71 | ||||
-rw-r--r-- | app/scripts/metamask-controller.js | 20 |
16 files changed, 1635 insertions, 1439 deletions
diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index bf5854a31..5423c76dc 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -692,9 +692,27 @@ "newRecipient": { "message": "New Recipient" }, - "newRPC": { + "newNetwork": { + "message": "New Network" + }, + "rpcURL": { "message": "New RPC URL" }, + "showAdvancedOptions": { + "message": "Show Advanced Options" + }, + "hideAdvancedOptions": { + "message": "Hide Advanced Options" + }, + "optionalChainId": { + "message": "ChainID (optional)" + }, + "optionalSymbol": { + "message": "Symbol (optional)" + }, + "optionalNickname": { + "message": "Nickname (optional)" + }, "next": { "message": "Next" }, @@ -803,7 +821,7 @@ "message": "Primary Currency" }, "primaryCurrencySettingDescription": { - "message": "Select ETH to prioritize displaying values in ETH. Select Fiat to prioritize displaying values in your selected currency." + "message": "Select native to prioritize displaying values in the native currency of the chain (e.g. ETH). Select Fiat to prioritize displaying values in your selected fiat currency." }, "privacyMsg": { "message": "Privacy Policy" @@ -1169,6 +1187,9 @@ "transactionUpdatedGas": { "message": "Transaction updated with a gas price of $1 on $2." }, + "transactionErrored": { + "message": "Transaction encountered an error." + }, "transactions": { "message": "transactions" }, diff --git a/app/_locales/ht/messages.json b/app/_locales/ht/messages.json index 50a0ec2bb..81ce18018 100644 --- a/app/_locales/ht/messages.json +++ b/app/_locales/ht/messages.json @@ -1,1237 +1,1312 @@ { - "accept": { - "message": "Aksepte" - }, - "accessingYourCamera": { - "message": "Aksè a Kamera" - }, - "account": { - "message": "Kont" - }, - "accountDetails": { - "message": "Detay Kont" - }, - "accountName": { - "message": "Non Kont" - }, - "accountSelectionRequired": { - "message": "Ou bezwen chwazi yon kont!" - }, - "activityLog": { - "message": "aktivite ki fèt" - }, - "address": { - "message": "Adrès" - }, - "addCustomToken": { - "message": "Ajoute token" - }, - "addToken": { - "message": "Ajoute Token" - }, - "addTokens": { - "message": "Ajoute Token" - }, - "addSuggestedTokens": { - "message": "Ajoute Token Yo Sikjere W" - }, - "addAcquiredTokens": { - "message": "Ajoute tokens yo ou te achte lè l sèvi avèk MetaMask" - }, - "amount": { - "message": "Kantite lajan" - }, - "amountPlusGas": { - "message": "Kantite lajan + Gaz" - }, - "appDescription": { - "message": "Ethereum Ekstansyon Navigatè", - "description": "The description of the application" - }, - "appName": { - "message": "MetaMask", - "description": "The name of the application" - }, - "approve": { - "message": "Apwouve" - }, - "approved": { - "message": "Apwouve" - }, - "attemptingConnect": { - "message": "Eseye konekte nan blockchain." - }, - "attributions": { - "message": "Atribisyon" - }, - "available": { - "message": "Disponib" - }, - "back": { - "message": "Retounen" - }, - "balance": { - "message": "Balans" - }, - "balances": { - "message": "Balans Token" - }, - "balanceIsInsufficientGas": { - "message": "Ensifizan balans pou total gaz aktyèl la" - }, - "beta": { - "message": "BETA" - }, - "betweenMinAndMax": { - "message": "dwe plis pase oswa egal a $ 1 mwens ke oswa egal a $ 2.", - "description": "helper for inputting hex as decimal input" - }, - "blockiesIdenticon": { - "message": "Itilize Blockies Identicon" - }, - "borrowDharma": { - "message": "Prete Avèk Dharma (Beta)" - }, - "browserNotSupported": { - "message": "Navigatè ou a pa sipòte..." - }, - "builtInCalifornia": { - "message": "MetaMask fèt e bati nan California." - }, - "buy": { - "message": "Achte" - }, - "buyCoinbase": { - "message": "Achte sou Coinbase" - }, - "buyCoinbaseExplainer": { - "message": "Coinbase se fason ki pi popilè nan mond lan yo achte ak vann Bitcoin, Ethereum, ak Litecoin." - }, - "bytes": { - "message": "Bytes" - }, - "ok": { - "message": "Oke" - }, - "cancel": { - "message": "Anile" - }, - "classicInterface": { - "message": "Sèvi ak fas klasik la" - }, - "clickCopy": { - "message": "Klike sou kopi" - }, - "close": { - "message": "Fèmen" - }, - "chromeRequiredForHardwareWallets": { - "message": "Ou bezwen sèvi ak MetaMask sou Google Chrome yo nan lòd yo konekte sou Hardware Wallet." - }, - "confirm": { - "message": "Konfime" - }, - "confirmed": { - "message": "Konfime" - }, - "confirmContract": { - "message": "Konfime Kontra" - }, - "confirmPassword": { - "message": "Konfime Modpas" - }, - "confirmTransaction": { - "message": "Konfime Tranzaksyon" - }, - "connectHardwareWallet": { - "message": "Konekte Hardware Wallet" - }, - "connect": { - "message": "Konekte" - }, - "connecting": { - "message": "Koneksyon..." - }, - "connectToLedger": { - "message": "Konekte ak Ledger" - }, - "connectToTrezor": { - "message": "Konekte ak Trezor" - }, - "continue": { - "message": "Kontinye" - }, - "continueToCoinbase": { - "message": "Kontinye Coinbase" - }, - "contractDeployment": { - "message": "Kontra Deplwaman" - }, - "conversionProgress": { - "message": "Konvèsyon nan Pwogrè" - }, - "copiedButton": { - "message": "Kopye" - }, - "copiedClipboard": { - "message": "Kopi nan Clipboard" - }, - "copiedExclamation": { - "message": "Kopye!" - }, - "copiedSafe": { - "message": "Mwen te kopye li yon kote ki san danje" - }, - "copy": { - "message": "Kopye" - }, - "copyAddress": { - "message": "Kopi adrès clipboard" - }, - "copyToClipboard": { - "message": "Kopi clipboard" - }, - "copyButton": { - "message": " Kopi " - }, - "copyPrivateKey": { - "message": "Sa a se kle prive ou (klike pou ou kopye)" - }, - "create": { - "message": "Kreye" - }, - "createAccount": { - "message": "Kreye Kont" - }, - "createDen": { - "message": "Kreye" - }, - "crypto": { - "message": "Crypto", - "description": "Change tip (cryptocurrencies)" - }, - "currentConversion": { - "message": "Konvèsyon aktyèl" - }, - "currentNetwork": { - "message": "Rezo aktyèl" - }, - "customGas": { - "message": "Koutim Gaz" - }, - "customToken": { - "message": "Koutim Token" - }, - "customize": { - "message": "Koutim" - }, - "customRPC": { - "message": "Koutim RPC" - }, - "decimalsMustZerotoTen": { - "message": "Desimal yo dwe omwen 0, epi pa dwe plis pase 36." - }, - "decimal": { - "message": "Presizyon desimal la" - }, - "defaultNetwork": { - "message": "Dfo rezo a pou tranzaksyon Ether se Mainnet." - }, - "denExplainer": { - "message": "DEN ou se depo modpas avèk chif ou nan MetaMask." - }, - "deposit": { - "message": "Depo" - }, - "depositBTC": { - "message": "Depoze BTC ou nan adrès ki anba a:" - }, - "depositCoin": { - "message": "Depoze $1 ou nan adrès ki anba a", - "description": "Tells the user what coin they have selected to deposit with shapeshift" - }, - "depositEth": { - "message": "Depo Eth" - }, - "depositEther": { - "message": "Depo Ether" - }, - "depositFiat": { - "message": "Depo ak Fiat" - }, - "depositFromAccount": { - "message": "Depo nan yon lòt kont" - }, - "depositShapeShift": { - "message": "Depo avèk ShapeShift" - }, - "depositShapeShiftExplainer": { - "message": "Si ou posede lòt cryptocurrencies, ou ka chanje ak depo Ether dirèkteman nan Wallet MetaMask ou. Pa gen kont ki nesesè." - }, - "details": { - "message": "Detay yo" - }, - "directDeposit": { - "message": "Depo Dirèk" - }, - "directDepositEther": { - "message": "Dirèkteman Depo Ether" - }, - "directDepositEtherExplainer": { - "message": "Si ou deja gen kèk Ether, fason ki pi rapid yo ka resevwa Ether nan nouvo Wallet ou pa depo dirèk." - }, - "done": { - "message": "Fini" - }, - "downloadGoogleChrome": { - "message": "Telechaje Google Chrome" - }, - "downloadStateLogs": { - "message": "Telechaje State Logs" - }, - "dontHaveAHardwareWallet": { - "message": "Pa gen yon materyèl bous?" - }, - "dropped": { - "message": "Tonbe" - }, - "edit": { - "message": "Korije" - }, - "editAccountName": { - "message": "Korije Non Kont" - }, - "editingTransaction": { - "message": "Fè chanjman nan tranzaksyon ou" - }, - "emailUs": { - "message": "Imèl nou!" - }, - "encryptNewDen": { - "message": "Ankripte nouvo DEN ou" - }, - "ensNameNotFound": { - "message": "Nou pa jwenn non ENS ou a" - }, - "enterPassword": { - "message": "Mete modpas" - }, - "enterPasswordConfirm": { - "message": "Antre nan modpas ou a konfime" - }, - "enterPasswordContinue": { - "message": "Mete modpas pou kontinye" - }, - "parameters": { - "message": "Paramèt" - }, - "passwordNotLongEnough": { - "message": "Modpas la pa ase" - }, - "passwordsDontMatch": { - "message": "Modpas Pa Koresponn ak" - }, - "etherscanView": { - "message": "Gade kont sou Etherscan" - }, - "exchangeRate": { - "message": "Chanje to" - }, - "exportPrivateKey": { - "message": "Voye Kòd Prive" - }, - "exportPrivateKeyWarning": { - "message": "Voye kle prive ak pwòp risk ou." - }, - "failed": { - "message": "Tonbe" - }, - "fiat": { - "message": "FIAT", - "description": "Exchange type" - }, - "fileImportFail": { - "message": "Enpòte dosye ki pa travay? Klike la a!", - "description": "Helps user import their account from a JSON file" - }, - "followTwitter": { - "message": "Swiv nou sou Twitter" - }, - "forgetDevice": { - "message": "Bliye aparèy sa a" - }, - "from": { - "message": "Soti nan" - }, - "fromToSame": { - "message": "Adrès orijinal le ak sa ou resevwa pake menm" - }, - "fromShapeShift": { - "message": "Soti nan ShapeShift" - }, - "functionType": { - "message": "Kalite Fonksyon" - }, - "gas": { - "message": "Gaz", - "description": "Short indication of gas cost" - }, - "gasFee": { - "message": "Frè gaz" - }, - "gasLimit": { - "message": "Limit gaz" - }, - "gasLimitCalculation": { - "message": "Nou kalkile gaz limit sijere a ki baze sou pousantaj siksè rezo a." - }, - "gasLimitRequired": { - "message": "Limit gaz nesesè" - }, - "gasLimitTooLow": { - "message": "Limit gaz dwe omwen 21000" - }, - "generatingSeed": { - "message": "Génération Seed..." - }, - "gasPrice": { - "message": "Pri gaz (GWEI)" - }, - "gasPriceCalculation": { - "message": "Nou kalkile pri yo gaz ki sijere ki baze sou pousantaj siksè rezo." - }, - "gasPriceRequired": { - "message": "Pri Gaz la Egzije" - }, - "generatingTransaction": { - "message": "Tranzaksyon kap fè" - }, - "getEther": { - "message": "Jwenn Ether" - }, - "getEtherFromFaucet": { - "message": "Jwenn Ether nan yon tiyo pou $1 la", - "description": "Displays network name for Ether faucet" - }, - "getHelp": { - "message": "Jwenn èd." - }, - "greaterThanMin": { - "message": "dwe pi gran pase oswa egal a $ 1.", - "description": "helper for inputting hex as decimal input" - }, - "hardware": { - "message": "hardware" - }, - "hardwareWalletConnected": { - "message": "Hardware Wallet konekte" - }, - "hardwareWallets": { - "message": "Hardware Wallet konekte" - }, - "hardwareWalletsMsg": { - "message": "Chwazi yon Hardware Wallet ou ta renmen itilize ak MetaMask" - }, - "havingTroubleConnecting": { - "message": "Èske w gen pwoblèm pou konekte?" - }, - "here": { - "message": "isit la", - "description": "as in -click here- for more information (goes with troubleTokenBalances)" - }, - "hereList": { - "message": "Isit la nan yon lis !!!!" - }, - "hexData": { - "message": "Hex Data" - }, - "hide": { - "message": "Kache" - }, - "hideToken": { - "message": "Kache Token" - }, - "hideTokenPrompt": { - "message": "Kache Token?" - }, - "history": { - "message": "Istwa" - }, - "howToDeposit": { - "message": "Ki jan ou ta renmen depo Ether?" - }, - "holdEther": { - "message": "Li pèmèt ou kenbe ether & tokens, epi sèvi kòm on pon pou desantralize aplikasyon." - }, - "import": { - "message": "Pòte", - "description": "Button to import an account from a selected file" - }, - "importAccount": { - "message": "Pòte Kont" - }, - "importAccountMsg": { - "message": " Kont pòte pa pral asosye avèk orijinal ou te kreye nan kont MetaMask seed fraz. Aprann plis sou kont enpòte " - }, - "importAnAccount": { - "message": "Pòte yon kont" - }, - "importDen": { - "message": "Pòte ki deja egziste DEN" - }, - "imported": { - "message": "Pòte", - "description": "status showing that an account has been fully loaded into the keyring" - }, - "importUsingSeed": { - "message": "Pòte lè sèvi avèk seed fraz" - }, - "infoHelp": { - "message": "Enfo & Èd" - }, - "initialTransactionConfirmed": { - "message": "Premye tranzaksyon ou konfime sou rezo a. Klike sou OK pou tounen." - }, - "insufficientFunds": { - "message": "Lajan ensifizan." - }, - "insufficientTokens": { - "message": "Tokens pa valab." - }, - "invalidAddress": { - "message": "Adrès pa valab" - }, - "invalidAddressRecipient": { - "message": "Moun ki resevwa adrès la pa valab" - }, - "invalidGasParams": { - "message": "Gaz Paramèt la pa valab" - }, - "invalidInput": { - "message": "Sa ou rantre a pa valab" - }, - "invalidRequest": { - "message": "Demann pa valab" - }, - "invalidRPC": { - "message": "RPC URI pa valab" - }, - "invalidSeedPhrase": { - "message": "Seed fraz pa valab" - }, - "jsonFail": { - "message": "Yon bagay ale mal. Tanpri, asire w ke dosye JSON ou an byen fòmate." - }, - "jsonFile": { - "message": "JSON Dosye", - "description": "format for importing an account" - }, - "keepTrackTokens": { - "message": "Gade tokens yo ou te achte ak kont MetaMask ou." - }, - "kovan": { - "message": "Kovan Tès Rezo" - }, - "knowledgeDataBase": { - "message": "Vizite baz nou an" - }, - "max": { - "message": "Maksimòm" - }, - "learnMore": { - "message": "Aprann plis" - }, - "ledgerAccountRestriction": { - "message": "Ou bezwen sèvi ak dènye kont ou anvan ou ka ajoute yon nouvo." - }, - "lessThanMax": { - "message": "dwe mwens pase oswa egal a $ 1.", - "description": "helper for inputting hex as decimal input" - }, - "likeToAddTokens": { - "message": "Èske ou ta renmen ajoute sa nan tokens?" - }, - "links": { - "message": "Lyen" - }, - "limit": { - "message": "Limitasyon" - }, - "loading": { - "message": "Telechaje..." - }, - "loadingTokens": { - "message": "Telechaje Tokens..." - }, - "localhost": { - "message": "Localhost 8545" - }, - "login": { - "message": "Ouvri" - }, - "logout": { - "message": "Dekonekte" - }, - "loose": { - "message": "Pèdi" - }, - "loweCaseWords": { - "message": "seed mo sèlman gen karaktè miniskil" - }, - "mainnet": { - "message": "Main Ethereum Network" - }, - "menu": { - "message": "Opsyon" - }, - "message": { - "message": "Mesaje" - }, - "metamaskDescription": { - "message": "MetaMask sekirize idantite pou Ethereum." - }, - "metamaskSeedWords": { - "message": "MetaMask Seed Mo" - }, - "min": { - "message": "Minimòm" - }, - "myAccounts": { - "message": "Kont mwen" - }, - "mustSelectOne": { - "message": "Ou dwe chwazi omwen 1 token." - }, - "needEtherInWallet": { - "message": "Pou kominike avèk aplikasyon desantralize ou dwe itilize MetaMask, ou pral bezwen Ether nan Wallet ou." - }, - "needImportFile": { - "message": "Ou dwe chwazi yon dosye pou enpòte.", - "description": "User is important an account and needs to add a file to continue" - }, - "needImportPassword": { - "message": "Ou dwe antre nan yon modpas pou dosye ou te chwazi a.", - "description": "Password and file needed to import an account" - }, - "negativeETH": { - "message": "Pa ka voye kantite lajan negatif ETH." - }, - "networks": { - "message": "Rezo" - }, - "nevermind": { - "message": "Pa pwoblèm" - }, - "newAccount": { - "message": "Nouvo Kont" - }, - "newAccountNumberName": { - "message": "Kont $1", - "description": "Default name of next account to be created on create account screen" - }, - "newContract": { - "message": "Nouvo Kontra" - }, - "newPassword": { - "message": "Nouvo modpas (minit 8)" - }, - "newRecipient": { - "message": "Nouvo Benefisyè" - }, - "newRPC": { - "message": "Nouvo RPC URL" - }, - "next": { - "message": "Aprè sa" - }, - "noAddressForName": { - "message": "Pa gen adrès ki etabli pou non sa a." - }, - "noDeposits": { - "message": "Pa gen depo ou te resevwa" - }, - "noConversionRateAvailable": { - "message": "Pa gen okenn Konvèsyon Disponib" - }, - "noTransactionHistory": { - "message": "Pa gen istwa tranzaksyon." - }, - "noTransactions": { - "message": "Pa gen tranzaksyon" - }, - "notFound": { - "message": "Pa jwenn" - }, - "notStarted": { - "message": "Pa kòmanse" - }, - "noWebcamFoundTitle": { - "message": "Pa jwenn webcam" - }, - "noWebcamFound": { - "message": "Nou pakay jwenn webcam òdinatè ou. Tanpri eseye ankò." - }, - "oldUI": { - "message": "Ansyen Itilizatè kouòdone" - }, - "oldUIMessage": { - "message": "Ou te retounen nan Ansyen Itilizatè kouòdone. Ou ka chanje tounen nan nouvo Ansyen Itilizatè nan opsyon a nan meni an tèt la." - }, - "openInTab": { - "message": "Louvri nan etikèt" - }, - "or": { - "message": "oubyen", - "description": "choice between creating or importing a new account" - }, - "origin": { - "message": "Orijin" - }, - "password": { - "message": "Modpas" - }, - "passwordCorrect": { - "message": "Tanpri asire ke modpas ou kòrèk." - }, - "passwordMismatch": { - "message": "modpas sa pa menm", - "description": "in password creation process, the two new password fields did not match" - }, - "passwordShort": { - "message": "modpas pa sifi", - "description": "in password creation process, the password is not long enough to be secure" - }, - "pastePrivateKey": { - "message": "Kole fraz prive ou a la:", - "description": "For importing an account from a private key" - }, - "pasteSeed": { - "message": "Kole seed fraz ou a la!" - }, - "pending": { - "message": "l ap mache" - }, - "personalAddressDetected": { - "message": "Adrès pèsonèl detekte. Antre adrès kontra token la." - }, - "pleaseReviewTransaction": { - "message": "Tanpri revize tranzaksyon ou." - }, - "popularTokens": { - "message": "Popilè Tokens" - }, - "prev": { - "message": "Avan" - }, - "privacyMsg": { - "message": "Règleman sou enfòmasyon prive" - }, - "privateKey": { - "message": "Prive kle", - "description": "select this type of file to use to import an account" - }, - "privateKeyWarning": { - "message": "Atansyon: pa janm divilge kle sa. Nenpòt moun kapab avèk kle prive ou a vòlè sa ou gen ou sou kont ou a." - }, - "privateNetwork": { - "message": "Rezo Prive" - }, - "qrCode": { - "message": "Montre QR Kòd" - }, - "queue": { - "message": "Queue" - }, - "readdToken": { - "message": "Ou ka ajoute token sa aprè sa ankò ou prale nan \"Ajoute token\" nan opsyon meni kont ou an." - }, - "readMore": { - "message": "Li plis isit la." - }, - "readMore2": { - "message": "Li plis isit la." - }, - "receive": { - "message": "Resevwa" - }, - "recipientAddress": { - "message": "Adrès pou resevwa" - }, - "refundAddress": { - "message": "Adrès pou resevwa" - }, - "rejected": { - "message": "Rejte" - }, - "reset": { - "message": "Repwograme" - }, - "resetAccount": { - "message": "Repwograme Kont" - }, - "resetAccountDescription": { - "message": "Repwograme kont a netwaye tranzaksyon ou yo." - }, - "restoreFromSeed": { - "message": "Restore kont?" - }, - "restoreVault": { - "message": "Retabli kazye" - }, - "restoreAccountWithSeed": { - "message": "Retabli kont ou avèk yo Seed Fraz" - }, - "required": { - "message": "Egzije" - }, - "retryWithMoreGas": { - "message": "Reseye ak yon pri gaz pi wo isit la" - }, - "walletSeed": { - "message": "Wallet Seed" - }, - "restore": { - "message": "Retabli" - }, - "revealSeedWords": { - "message": "Revele Seed Mo Yo" - }, - "revealSeedWordsTitle": { - "message": "Seed Fraz" - }, - "revealSeedWordsDescription": { - "message": "Si ou pa janm chanje navigatè ou deplase òdinatè, ou pral bezwen fraz seed la pou ka gen aksè a kont ou. Sere yo on kote an sekirite e an sekrè." - }, - "revealSeedWordsWarningTitle": { - "message": "PA pataje fraz sa a avèk nenpòt moun!" - }, - "revealSeedWordsWarning": { - "message": "Yo ka itilize mo sa pou vòlè kont ou." - }, - "revert": { - "message": "Retounen" - }, - "remove": { - "message": "retire" - }, - "removeAccount": { - "message": "Retire kont" - }, - "removeAccountDescription": { - "message": "Kont sa a pral retire nan Wallet ou. Tanpri, asire ou ke ou gen orijinal fraz seed la oubyen kle prive pou rantre kont lan avan ou kontinye. Oubyen ou ka rantre kont ou ankò apati kont \"drop-down\" ou an." - }, - "readyToConnect": { - "message": "Pare pou konekte?" - }, - "rinkeby": { - "message": "Rinkeby Tès Rezo" - }, - "ropsten": { - "message": "Ropsten Tès Rezo" - }, - "rpc": { - "message": "Koutim RPC" - }, - "currentRpc": { - "message": "Kounya RPC" - }, - "connectingToMainnet": { - "message": "Konekte ak Main (Prensipal) Ethereum Rezo a" - }, - "connectingToRopsten": { - "message": "Konekte ak Ropsten Tès Rezo a" - }, - "connectingToKovan": { - "message": "Konekte nan Kovan Tès Rezo a" - }, - "connectingToRinkeby": { - "message": "Konekte nan Rinkeby Tès Rezo a" - }, - "connectingToUnknown": { - "message": "Konekte nan rezo enkoni" - }, - "sampleAccountName": { - "message": "Pa egzanp, Nouvo kont mwen an", - "description": "Help user understand concept of adding a human-readable name to their account" - }, - "save": { - "message": "Sove" - }, - "speedUp": { - "message": "pi vit" - }, - "speedUpTitle": { - "message": "Monte vitès tranzaksyon" - }, - "speedUpSubtitle": { - "message": "Ogmante pri gaz ou pou eseye efase tranzaksyon ou pi vit" - }, - "saveAsCsvFile": { - "message": "Sove kòm dosye CSV" - }, - "saveAsFile": { - "message": "Sove kòm dosye", - "description": "Account export process" - }, - "saveSeedAsFile": { - "message": "Sove pawòl seed kòm dosye" - }, - "search": { - "message": "Rechèch" - }, - "searchResults": { - "message": "Rezilta rechèch" - }, - "secretPhrase": { - "message": "Antre fraz sekrè douz mo ou a pou w restore kòf ou a." - }, - "showHexData": { - "message": "Montre Hex Data" - }, - "showHexDataDescription": { - "message": "Pran sa pouw ka montre chan entèfas hex data a" - }, - "newPassword8Chars": { - "message": "Nouvo modpas (pou pi pit 8)" - }, - "seedPhraseReq": { - "message": "Seed fraz yo se 12 long mo" - }, - "select": { - "message": "Chwazi" - }, - "selectCurrency": { - "message": "Chwazi Lajan" - }, - "selectService": { - "message": "Chwazi Sèvis" - }, - "selectType": { - "message": "Chwazi Kalite" - }, - "send": { - "message": "Voye" - }, - "sendETH": { - "message": "Voye ETH" - }, - "sendTokens": { - "message": "Voye Tokens" - }, - "sentEther": { - "message": "Voye ether" - }, - "sentTokens": { - "message": "tokens deja voye" - }, - "separateEachWord": { - "message": "Separe chak mo ak yon sèl espas" - }, - "onlySendToEtherAddress": { - "message": "Sèlman voye ETH nan yon adrès Ethereum." - }, - "onlySendTokensToAccountAddress": { - "message": "Sèlman voye $ 1 nan yon adrès kont Ethereum.", - "description": "displays token symbol" - }, - "orderOneHere": { - "message": "Mete nan lòd on Trezor oswa Ledger epi kenbe lajan ou nan yon stòk frèt." - }, - "outgoing": { - "message": "Ap kite" - }, - "searchTokens": { - "message": "Rechèch Tokens" - }, - "selectAnAddress": { - "message": "Chwazi yon adrès" - }, - "selectAnAccount": { - "message": "Chwazi yon kont" - }, - "selectAnAccountHelp": { - "message": "Chwazi kont pou wè nan MetaMask" - }, - "selectHdPath": { - "message": "Chwazi chemen HD" - }, - "selectPathHelp": { - "message": "Si ou pa wè kont Ledger ou te genyen an anba a, eseye chanje chemen an \"Eritaj (MEW / MyCrypto)\"" - }, - "sendTokensAnywhere": { - "message": "Voye Tokens pou nenpòt moun ki gen yon kont Ethereum" - }, - "settings": { - "message": "Paramèt" - }, - "step1HardwareWallet": { - "message": "1. Konekte Materyèl bous" - }, - "step1HardwareWalletMsg": { - "message": "Konekte materyèl bous ou dirèkteman nan òdinatè ou." - }, - "step2HardwareWallet": { - "message": "2. Chwazi yon kont" - }, - "step2HardwareWalletMsg": { - "message": "Chwazi kont ou vle wè a. Ou ka chwazi youn sèlman nan yon moman." - }, - "step3HardwareWallet": { - "message": "3. Kòmanse itilize dApps ak plis ankò!" - }, - "step3HardwareWalletMsg": { - "message": "Sèvi ak kont materyèl ou menm jan ou t ap fè pou kont Etherum. Ouvri sesyon an nan dApps, voye Eth, achte ak stòke ERC20 tokens ak e ki pake chanje tokens tankou CryptoKitties." - }, - "info": { - "message": "Enfòmasyon" - }, - "scanInstructions": { - "message": "Mete kòd QR la devan kamera ou" - }, - "scanQrCode": { - "message": "Enspeksyon QR Kòd" - }, - "shapeshiftBuy": { - "message": "Achte avèk Shapeshift" - }, - "showPrivateKeys": { - "message": "Montre Kle Prive" - }, - "showQRCode": { - "message": "Montre Kòd QR" - }, - "sign": { - "message": "Siyen" - }, - "signatureRequest": { - "message": "Siyati Mande" - }, - "signed": { - "message": "Te Siyen" - }, - "signMessage": { - "message": "Siyen mesaj" - }, - "signNotice": { - "message": "Lè w siyen mesaj sa a ka gen efè segondè ki \ndanjere. Sèlman \nsit mesaj ki soti nan sit ou konplètman fè konfyans ak tout kont ou. \n Metòd danjere sa yo pral retire nan yon vèsyon fiti. " - }, - "sigRequest": { - "message": "Demann Siyati" - }, - "sigRequested": { - "message": "Demann Siyati" - }, - "spaceBetween": { - "message": "ka gen sèlman yon espas ant mo yo" - }, - "status": { - "message": "Kondisyon" - }, - "stateLogs": { - "message": "State Logs" - }, - "stateLogsDescription": { - "message": "State logs gen adrès kont piblik ou yo epi tranzaksyon ou te voye yo." - }, - "stateLogError": { - "message": "Erè nan retwouve State Logs yo." - }, - "submit": { - "message": "Soumèt" - }, - "submitted": { - "message": "Te Soumèt" - }, - "supportCenter": { - "message": "Vizite Sant Sipò Nou" - }, - "symbolBetweenZeroTen": { - "message": "Senbòl yo dwe ant 0 ak 10 karaktè." - }, - "takesTooLong": { - "message": "Pran twò lontan?" - }, - "terms": { - "message": "Tèm pou itilize" - }, - "testFaucet": { - "message": "Tès Tiyo" - }, - "to": { - "message": "Pou" - }, - "toETHviaShapeShift": { - "message": "$1 pou ETH pa ShapeShift", - "description": "system will fill in deposit type in start of message" - }, - "token": { - "message": "Token" - }, - "tokenAddress": { - "message": "Adrès Token" - }, - "tokenAlreadyAdded": { - "message": "Ou te deja ajoute token." - }, - "tokenBalance": { - "message": "Balans Token ou se:" - }, - "tokenSelection": { - "message": "Chache Tokens oswa chwazi nan lis Tokens popilè nou an." - }, - "tokenSymbol": { - "message": "Token Senbòl" - }, - "tokenWarning1": { - "message": "Kenbe tras token yo ou te achte ak kont MetaMask ou. Si ou te achte tokens pandan wap itilize yon kont diferan tokens sa yo pa pral parèt la." - }, - "total": { - "message": "Total" - }, - "transactions": { - "message": "tranzaksyon yo" - }, - "transactionConfirmed": { - "message": "Tranzaksyon ou te konfime pou $2." - }, - "transactionCreated": { - "message": "Tranzaksyon ou te kreye avèk on valè de $1 pou $2." - }, - "transactionDropped": { - "message": "Tranzaksyon ou te tonbe a $2." - }, - "transactionSubmitted": { - "message": "Tranzaksyon ou te soumèt a $2." - }, - "transactionUpdated": { - "message": "Tranzaksyon ou te aktyalize a $2." - }, - "transactionUpdatedGas": { - "message": "Tranzaksyon ou te aktyalize avèk on pri gaz de $1 a $2." - }, - "transactionError": { - "message": "Erè tranzaksyon. Eksepsyon jete nan kòd kontra." - }, - "transactionMemo": { - "message": "Memo tranzaksyon (opsyonèl)" - }, - "transactionNumber": { - "message": "Nimewo Tranzaksyon" - }, - "transfer": { - "message": "Transfè" - }, - "transfers": { - "message": "Transfè yo" - }, - "trezorHardwareWallet": { - "message": "TREZOR Materyèl Bous" - }, - "troubleTokenBalances": { - "message": "Nou te gen pwoblèm chaje balans token ou. Ou ka wè yo ", - "description": "Followed by a link (here) to view token balances" - }, - "tryAgain": { - "message": "Eseye anko" - }, - "twelveWords": { - "message": "12 mo sa yo se sèl fason pou retabli kont MetaMask ou yo. \nKenbe yo yon kote ki an sekirite ak sekrè." - }, - "typePassword": { - "message": "Tape modpas ou" - }, - "uiWelcome": { - "message": "Byenveni nan New itilizatè koòdone (Beta)" - }, - "uiWelcomeMessage": { - "message": "Kounya w ap itilize nouvo MetaMask UI (itilizatè koòdone) a." - }, - "unapproved": { - "message": "Pa apwouve" - }, - "unavailable": { - "message": "Pa disponib" - }, - "units": { - "message": "inite yo" - }, - "unknown": { - "message": "Enkoni" - }, - "unknownFunction": { - "message": "Fonksyon enkoni" - }, - "unknownNetwork": { - "message": "Rezo Prive Enkoni" - }, - "unknownNetworkId": { - "message": "Rezo ID Enkoni" - }, - "unknownQrCode": { - "message": "Erè: Nou pa t kapab idantifye QR kòd sa" - }, - "unknownCameraErrorTitle": { - "message": "Ooops! Yon bagay te ale mal...." - }, - "unknownCameraError": { - "message": "Te gen yon erè pandan y ap eseye jwenn aksè nan kamera ou. Tanpri eseye ankò..." - }, - "unlock": { - "message": "Debloke" - }, - "unlockMessage": { - "message": "Entènèt desantralize a ap tann" - }, - "uriErrorMsg": { - "message": "URIs mande pou apwopriye prefiks HTTP / HTTPS a." - }, - "usaOnly": { - "message": "USA sèlman", - "description": "Using this exchange is limited to people inside the USA" - }, - "usedByClients": { - "message": "Itilize pa yon varyete de kliyan diferan" - }, - "useOldUI": { - "message": "Itilizasyon ansyen UI (itilizatè koòdone)" - }, - "validFileImport": { - "message": "Ou dwe chwazi yon dosye ki valab pou enpòte." - }, - "vaultCreated": { - "message": "Kòf Kreye" - }, - "viewAccount": { - "message": "Wè Kont" - }, - "viewOnEtherscan": { - "message": "Wè sou Etherscan" - }, - "visitWebSite": { - "message": "Vizite sit entènèt nou an" - }, - "warning": { - "message": "Avètisman" - }, - "welcomeBack": { - "message": "Bon retou!" - }, - "welcomeBeta": { - "message": "Byenveni nan MetaMask Beta" - }, - "whatsThis": { - "message": "Kisa sa ye?" - }, - "youNeedToAllowCameraAccess": { - "message": "Ou bezwen bay kamera aksè pou sèvi ak fonksyon sa." - }, - "yourSigRequested": { - "message": "Yo mande siyati ou" - }, - "youSign": { - "message": "Ou ap siyen kounya" - }, - "yourPrivateSeedPhrase": { - "message": "Seed fraz prive ou a" - } + "accept": { + "message": "Aksepte" + }, + "accessingYourCamera": { + "message": "Aksè a Kamera" + }, + "account": { + "message": "Kont" + }, + "accountDetails": { + "message": "Detay Kont" + }, + "accountName": { + "message": "Non Kont" + }, + "accountOptions": { + "message": "Opsyon kont" + }, + "accountSelectionRequired": { + "message": "Ou bezwen chwazi yon kont!" + }, + "activityLog": { + "message": "aktivite ki fèt" + }, + "address": { + "message": "Adrès" + }, + "addCustomToken": { + "message": "Ajoute token" + }, + "addToken": { + "message": "Ajoute Token" + }, + "addTokens": { + "message": "Ajoute Token" + }, + "addSuggestedTokens": { + "message": "Ajoute Token Yo Sikjere W" + }, + "addAcquiredTokens": { + "message": "Ajoute tokens yo ou te achte lè l sèvi avèk MetaMask" + }, + "amount": { + "message": "Kantite lajan" + }, + "amountPlusGas": { + "message": "Kantite lajan + Gaz" + }, + "appDescription": { + "message": "Ekstansyon Navigatè Ethereum", + "description": "The description of the application" + }, + "appName": { + "message": "MetaMask", + "description": "The name of the application" + }, + "approve": { + "message": "Apwouve" + }, + "approved": { + "message": "Apwouve" + }, + "attemptingConnect": { + "message": "Eseye konekte nan blockchain." + }, + "attemptToCancel": { + "message": "Eseye anile?" + }, + "attemptToCancelDescription": { + "message": "Soumèt tantativ sa a pa garanti ke yo pral anile tranzaksyon ou anile. Si tantativ anile an gen siksè, ou pral chaje frè yo tranzaksyon pi wo a." + }, + "attributions": { + "message": "Atribisyon" + }, + "available": { + "message": "Disponib" + }, + "back": { + "message": "Retounen" + }, + "balance": { + "message": "Balans" + }, + "balances": { + "message": "Balans Token" + }, + "balanceIsInsufficientGas": { + "message": "Ensifizan balans pou total gaz aktyèl la" + }, + "beta": { + "message": "BETA" + }, + "betweenMinAndMax": { + "message": "dwe plis pase oswa egal a $ 1 mwens ke oswa egal a $ 2.", + "description": "helper for inputting hex as decimal input" + }, + "blockiesIdenticon": { + "message": "Itilize Blockies Identicon" + }, + "borrowDharma": { + "message": "Prete Avèk Dharma (Beta)" + }, + "browserNotSupported": { + "message": "Navigatè ou a pa sipòte..." + }, + "builtInCalifornia": { + "message": "MetaMask fèt e bati nan California." + }, + "buy": { + "message": "Achte" + }, + "buyCoinbase": { + "message": "Achte sou Coinbase" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase se fason ki pi popilè nan mond lan yo achte ak vann Bitcoin, Ethereum, ak Litecoin." + }, + "bytes": { + "message": "Bytes" + }, + "ok": { + "message": "Oke" + }, + "cancel": { + "message": "Anile" + }, + "cancelAttempt": { + "message": "Teste Anile" + }, + "cancellationGasFee": { + "message": "Anilasyon Gaz Chaj" + }, + "cancelN": { + "message": "Anile tout $ 1 tranzaksyon" + }, + "classicInterface": { + "message": "Sèvi ak fas klasik la" + }, + "clickCopy": { + "message": "Klike sou kopi" + }, + "clickToAdd": { + "message": "Klike sou $ 1 pou ajoute yo nan kont ou" + }, + "close": { + "message": "Fèmen" + }, + "chromeRequiredForHardwareWallets": { + "message": "Ou bezwen sèvi ak MetaMask sou Google Chrome yo nan lòd yo konekte sou Hardware Wallet." + }, + "confirm": { + "message": "Konfime" + }, + "confirmed": { + "message": "Konfime" + }, + "confirmContract": { + "message": "Konfime Kontra" + }, + "confirmPassword": { + "message": "Konfime Modpas" + }, + "confirmTransaction": { + "message": "Konfime Tranzaksyon" + }, + "connectHardwareWallet": { + "message": "Konekte Materyèl Wallet" + }, + "connect": { + "message": "Konekte" + }, + "connecting": { + "message": "Koneksyon..." + }, + "connectingToKovan": { + "message": "Konekte nan Kovan Tès Rezo a" + }, + "connectingToMainnet": { + "message": "Konekte ak Prensipal Ethereum Rezo a" + }, + "connectingToRopsten": { + "message": "Konekte ak Ropsten Tès Rezo a" + }, + "connectingToRinkeby": { + "message": "Konekte nan Rinkeby Tès Rezo a" + }, + "connectingToUnknown": { + "message": "Konekte nan rezo enkoni" + }, + "connectToLedger": { + "message": "Konekte ak Ledger" + }, + "connectToTrezor": { + "message": "Konekte ak Trezor" + }, + "continue": { + "message": "Kontinye" + }, + "continueToCoinbase": { + "message": "Kontinye Coinbase" + }, + "contractDeployment": { + "message": "Kontra Deplwaman" + }, + "conversionProgress": { + "message": "Konvèsyon nan Pwogrè" + }, + "copiedButton": { + "message": "Kopye" + }, + "copiedClipboard": { + "message": "Kopi nan Clipboard" + }, + "copiedExclamation": { + "message": "Kopye!" + }, + "copiedSafe": { + "message": "Mwen te kopye li yon kote ki san danje" + }, + "copy": { + "message": "Kopye" + }, + "copyAddress": { + "message": "Kopi adrès clipboard" + }, + "copyToClipboard": { + "message": "Kopi clipboard" + }, + "copyButton": { + "message": " Kopi " + }, + "copyPrivateKey": { + "message": "Sa a se kle prive ou (klike pou ou kopye)" + }, + "create": { + "message": "Kreye" + }, + "createAccount": { + "message": "Kreye Kont" + }, + "createDen": { + "message": "Kreye" + }, + "crypto": { + "message": "Crypto", + "description": "Exchange type (cryptocurrencies)" + }, + "currentConversion": { + "message": "Konvèsyon aktyèl" + }, + "currentLanguage": { + "message": "Lang Aktyèl" + }, + "currentNetwork": { + "message": "Rezo aktyèl" + }, + "currentRpc": { + "message": "Aktyèl RPC" + }, + "customGas": { + "message": "Koutim Gaz" + }, + "customToken": { + "message": "Koutim Token" + }, + "customize": { + "message": "Koutim" + }, + "customRPC": { + "message": "Koutim RPC" + }, + "decimalsMustZerotoTen": { + "message": "Desimal yo dwe omwen 0, epi pa dwe plis pase 36." + }, + "decimal": { + "message": "Presizyon desimal la" + }, + "defaultNetwork": { + "message": "Dfo rezo a pou tranzaksyon Ether se Mainnet." + }, + "denExplainer": { + "message": "DEN ou se depo modpas avèk chif ou nan MetaMask." + }, + "deposit": { + "message": "Depo" + }, + "depositBTC": { + "message": "Depoze BTC ou nan adrès ki anba a:" + }, + "depositCoin": { + "message": "Depoze $1 ou nan adrès ki anba a", + "description": "Tells the user what coin they have selected to deposit with shapeshift" + }, + "depositEth": { + "message": "Depo Eth" + }, + "depositEther": { + "message": "Depo Ether" + }, + "depositFiat": { + "message": "Depo ak Fiat" + }, + "depositFromAccount": { + "message": "Depo nan yon lòt kont" + }, + "depositShapeShift": { + "message": "Depo avèk ShapeShift" + }, + "depositShapeShiftExplainer": { + "message": "Si ou posede lòt cryptocurrencies, ou ka chanje ak depo Ether dirèkteman nan Wallet MetaMask ou. Pa gen kont ki nesesè." + }, + "details": { + "message": "Detay yo" + }, + "directDeposit": { + "message": "Depo Dirèk" + }, + "directDepositEther": { + "message": "Dirèkteman Depo Ether" + }, + "directDepositEtherExplainer": { + "message": "Si ou deja gen kèk Ether, fason ki pi rapid yo ka resevwa Ether nan nouvo Wallet ou pa depo dirèk." + }, + "done": { + "message": "Fini" + }, + "downloadGoogleChrome": { + "message": "Telechaje Google Chrome" + }, + "downloadStateLogs": { + "message": "Telechaje State Logs" + }, + "dontHaveAHardwareWallet": { + "message": "Pa gen yon materyèl bous?" + }, + "dropped": { + "message": "Tonbe" + }, + "edit": { + "message": "Korije" + }, + "editAccountName": { + "message": "Korije Non Kont" + }, + "editingTransaction": { + "message": "Fè chanjman nan tranzaksyon ou" + }, + "emailUs": { + "message": "Imèl nou!" + }, + "encryptNewDen": { + "message": "Ankripte nouvo DEN ou" + }, + "ensNameNotFound": { + "message": "Nou pa jwenn non ENS ou a" + }, + "enterPassword": { + "message": "Mete modpas" + }, + "enterPasswordConfirm": { + "message": "Antre nan modpas ou a konfime" + }, + "enterPasswordContinue": { + "message": "Mete modpas pou kontinye" + }, + "eth": { + "message": "ETH" + }, + "etherscanView": { + "message": "Gade kont sou Etherscan" + }, + "exchangeRate": { + "message": "Chanje to" + }, + "expandView": { + "message": "Elaji Wè" + }, + "exportPrivateKey": { + "message": "Voye Kòd Prive" + }, + "exportPrivateKeyWarning": { + "message": "Voye kle prive ak pwòp risk ou." + }, + "failed": { + "message": "Tonbe" + }, + "fiat": { + "message": "FIAT", + "description": "Exchange type" + }, + "fileImportFail": { + "message": "Enpòte dosye ki pa travay? Klike la a!", + "description": "Helps user import their account from a JSON file" + }, + "followTwitter": { + "message": "Swiv nou sou Twitter" + }, + "forgetDevice": { + "message": "Bliye aparèy sa a" + }, + "from": { + "message": "Soti nan" + }, + "fromToSame": { + "message": "Adrès orijinal le ak sa ou resevwa pake menm" + }, + "fromShapeShift": { + "message": "Soti nan ShapeShift" + }, + "functionType": { + "message": "Kalite Fonksyon" + }, + "gas": { + "message": "Gaz", + "description": "Short indication of gas cost" + }, + "gasFee": { + "message": "Frè gaz" + }, + "gasLimit": { + "message": "Limit gaz" + }, + "gasLimitCalculation": { + "message": "Nou kalkile gaz limit sijere a ki baze sou pousantaj siksè rezo a." + }, + "gasLimitRequired": { + "message": "Limit gaz nesesè" + }, + "gasLimitTooLow": { + "message": "Limit gaz dwe omwen 21000" + }, + "gasUsed": { + "message": "Gaz yo Itilize" + }, + "generatingSeed": { + "message": "Grenn jenerasyon..." + }, + "gasPrice": { + "message": "Pri gaz (GWEI)" + }, + "gasPriceCalculation": { + "message": "Nou kalkile pri yo gaz ki sijere ki baze sou pousantaj siksè rezo." + }, + "gasPriceRequired": { + "message": "Pri Gaz la Egzije" + }, + "generatingTransaction": { + "message": "Tranzaksyon kap fè" + }, + "getEther": { + "message": "Jwenn Ether" + }, + "getEtherFromFaucet": { + "message": "Jwenn Ether nan yon tiyo pou $1 la", + "description": "Displays network name for Ether faucet" + }, + "getHelp": { + "message": "Jwenn èd." + }, + "greaterThanMin": { + "message": "dwe pi gran pase oswa egal a $ 1.", + "description": "helper for inputting hex as decimal input" + }, + "hardware": { + "message": "materyèl" + }, + "hardwareWalletConnected": { + "message": "Materyèl Wallet konekte" + }, + "hardwareWallets": { + "message": "Materyèl Wallet konekte" + }, + "hardwareWalletsMsg": { + "message": "Chwazi yon Materyèl Wallet ou ta renmen itilize ak MetaMask" + }, + "havingTroubleConnecting": { + "message": "Èske w gen pwoblèm pou konekte?" + }, + "here": { + "message": "isit la", + "description": "as in -click here- for more information (goes with troubleTokenBalances)" + }, + "hereList": { + "message": "Isit la nan yon lis !!!!" + }, + "hexData": { + "message": "Hex Data" + }, + "hide": { + "message": "Kache" + }, + "hideToken": { + "message": "Kache Token" + }, + "hideTokenPrompt": { + "message": "Kache Token?" + }, + "history": { + "message": "Istwa" + }, + "howToDeposit": { + "message": "Ki jan ou ta renmen depo Ether?" + }, + "holdEther": { + "message": "Li pèmèt ou kenbe ether & tokens, epi sèvi kòm on pon pou desantralize aplikasyon." + }, + "import": { + "message": "Pòte", + "description": "Button to import an account from a selected file" + }, + "importAccount": { + "message": "Pòte Kont" + }, + "importAccountMsg": { + "message": " Kont pòte pa pral asosye avèk orijinal ou te kreye nan kont MetaMask seed fraz. Aprann plis sou kont enpòte " + }, + "importAnAccount": { + "message": "Pòte yon kont" + }, + "importDen": { + "message": "Pòte ki deja egziste DEN" + }, + "imported": { + "message": "Pòte", + "description": "status showing that an account has been fully loaded into the keyring" + }, + "importUsingSeed": { + "message": "Pòte lè sèvi avèk seed fraz" + }, + "info": { + "message": "Enfo" + }, + "infoHelp": { + "message": "Enfo & Èd" + }, + "initialTransactionConfirmed": { + "message": "Premye tranzaksyon ou konfime sou rezo a. Klike sou OK pou tounen." + }, + "insufficientFunds": { + "message": "Lajan ensifizan." + }, + "insufficientTokens": { + "message": "Tokens pa valab." + }, + "invalidAddress": { + "message": "Adrès pa valab" + }, + "invalidAddressRecipient": { + "message": "Moun ki resevwa adrès la pa valab" + }, + "invalidGasParams": { + "message": "Gaz Paramèt la pa valab" + }, + "invalidInput": { + "message": "Sa ou rantre a pa valab" + }, + "invalidRequest": { + "message": "Demann pa valab" + }, + "invalidRPC": { + "message": "RPC URI pa valab" + }, + "invalidSeedPhrase": { + "message": "Seed fraz pa valab" + }, + "jsonFail": { + "message": "Yon bagay ale mal. Tanpri, asire w ke dosye JSON ou an byen fòmate." + }, + "jsonFile": { + "message": "JSON Dosye", + "description": "format for importing an account" + }, + "keepTrackTokens": { + "message": "Gade tokens yo ou te achte ak kont MetaMask ou." + }, + "kovan": { + "message": "Kovan Tès Rezo" + }, + "knowledgeDataBase": { + "message": "Vizite baz nou an" + }, + "max": { + "message": "Maksimòm" + }, + "learnMore": { + "message": "Aprann plis" + }, + "ledgerAccountRestriction": { + "message": "Ou bezwen sèvi ak dènye kont ou anvan ou ka ajoute yon nouvo." + }, + "lessThanMax": { + "message": "dwe mwens pase oswa egal a $ 1.", + "description": "helper for inputting hex as decimal input" + }, + "likeToAddTokens": { + "message": "Èske ou ta renmen ajoute sa nan tokens?" + }, + "links": { + "message": "Lyen" + }, + "limit": { + "message": "Limitasyon" + }, + "loading": { + "message": "Telechaje..." + }, + "loadingTokens": { + "message": "Telechaje Tokens..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "login": { + "message": "Ouvri" + }, + "logout": { + "message": "Dekonekte" + }, + "loose": { + "message": "Pèdi" + }, + "loweCaseWords": { + "message": "seed mo sèlman gen karaktè miniskil" + }, + "mainnet": { + "message": "Prensipal Ethereum Rezo a" + }, + "menu": { + "message": "Opsyon" + }, + "message": { + "message": "Mesaje" + }, + "metamaskDescription": { + "message": "MetaMask sekirize idantite pou Ethereum." + }, + "metamaskSeedWords": { + "message": "MetaMask Seed Mo" + }, + "metamaskVersion": { + "message": "MetaMask Vèsyon" + }, + "min": { + "message": "Minimòm" + }, + "missingYourTokens": { + "message": "Ou pa wè token ou a?" + }, + "myAccounts": { + "message": "Kont mwen" + }, + "mustSelectOne": { + "message": "Ou dwe chwazi omwen 1 token." + }, + "needEtherInWallet": { + "message": "Pou kominike avèk aplikasyon desantralize ou dwe itilize MetaMask, ou pral bezwen Ether nan Wallet ou." + }, + "needImportFile": { + "message": "Ou dwe chwazi yon dosye pou enpòte.", + "description": "User is important an account and needs to add a file to continue" + }, + "needImportPassword": { + "message": "Ou dwe antre nan yon modpas pou dosye ou te chwazi a.", + "description": "Password and file needed to import an account" + }, + "negativeETH": { + "message": "Pa ka voye kantite lajan negatif ETH." + }, + "networks": { + "message": "Rezo" + }, + "nevermind": { + "message": "Pa pwoblèm" + }, + "newAccount": { + "message": "Nouvo Kont" + }, + "newAccountNumberName": { + "message": "Kont $1", + "description": "Default name of next account to be created on create account screen" + }, + "newContract": { + "message": "Nouvo Kontra" + }, + "newPassword": { + "message": "Nouvo modpas (minit 8)" + }, + "newPassword8Chars": { + "message": "Nouvo modpas (minit 8)" + }, + "newRecipient": { + "message": "Nouvo Benefisyè" + }, + "newRPC": { + "message": "Nouvo RPC URL" + }, + "next": { + "message": "Aprè sa" + }, + "noAddressForName": { + "message": "Pa gen adrès ki etabli pou non sa a." + }, + "noDeposits": { + "message": "Pa gen depo ou te resevwa" + }, + "noConversionRateAvailable": { + "message": "Pa gen okenn Konvèsyon Disponib" + }, + "noTransactionHistory": { + "message": "Pa gen istwa tranzaksyon." + }, + "noTransactions": { + "message": "Pa gen tranzaksyon" + }, + "notFound": { + "message": "Pa jwenn" + }, + "notStarted": { + "message": "Pa kòmanse" + }, + "noWebcamFoundTitle": { + "message": "Pa jwenn webcam" + }, + "noWebcamFound": { + "message": "Nou pakay jwenn webcam òdinatè ou. Tanpri eseye ankò." + }, + "oldUI": { + "message": "Ansyen Itilizatè kouòdone" + }, + "oldUIMessage": { + "message": "Ou te retounen nan Ansyen Itilizatè kouòdone. Ou ka chanje tounen nan nouvo Ansyen Itilizatè nan opsyon a nan meni an tèt la." + }, + "onlySendToEtherAddress": { + "message": "Sèlman voye ETH nan yon adrès Ethereum." + }, + "onlySendTokensToAccountAddress": { + "message": "Sèlman voye $ 1 nan yon adrès kont Ethereum.", + "description": "displays token symbol" + }, + "openInTab": { + "message": "Louvri nan etikèt" + }, + "or": { + "message": "oubyen", + "description": "choice between creating or importing a new account" + }, + "orderOneHere": { + "message": "Mete nan lòd on Trezor oswa Ledger epi kenbe lajan ou nan yon stòk frèt." + }, + "origin": { + "message": "Orijin" + }, + "outgoing": { + "message": "Ap kite" + }, + "parameters": { + "message": "Paramèt" + }, + "password": { + "message": "Modpas" + }, + "passwordCorrect": { + "message": "Tanpri asire ke modpas ou kòrèk." + }, + "passwordsDontMatch": { + "message": "Modpas pa matche" + }, + "passwordMismatch": { + "message": "modpas sa pa menm", + "description": "in password creation process, the two new password fields did not match" + }, + "passwordNotLongEnough": { + "message": "Modpas pa lontan ase" + }, + "passwordShort": { + "message": "modpas pa sifi", + "description": "in password creation process, the password is not long enough to be secure" + }, + "pastePrivateKey": { + "message": "Kole fraz prive ou a la:", + "description": "For importing an account from a private key" + }, + "pasteSeed": { + "message": "Kole seed fraz ou a la!" + }, + "pending": { + "message": "l ap mache" + }, + "personalAddressDetected": { + "message": "Adrès pèsonèl detekte. Antre adrès kontra token la." + }, + "pleaseReviewTransaction": { + "message": "Tanpri revize tranzaksyon ou." + }, + "popularTokens": { + "message": "Popilè Tokens" + }, + "prev": { + "message": "Avan" + }, + "primaryCurrencySetting": { + "message": "Lajan ou itilize pi plis la" + }, + "primaryCurrencySettingDescription": { + "message": "Chwazi ETH pou bay priyorite montre valè nan ETH. Chwazi Fiat priyorite montre valè nan lajan ou chwazi a." + }, + "privacyMsg": { + "message": "Règleman sou enfòmasyon prive" + }, + "privateKey": { + "message": "Prive kle", + "description": "select this type of file to use to import an account" + }, + "privateKeyWarning": { + "message": "Atansyon: pa janm divilge kle sa. Nenpòt moun kapab avèk kle prive ou a vòlè sa ou gen ou sou kont ou a." + }, + "privateNetwork": { + "message": "Rezo Prive" + }, + "qrCode": { + "message": "Montre QR Kòd" + }, + "queue": { + "message": "Queue" + }, + "readdToken": { + "message": "Ou ka ajoute token sa aprè sa ankò ou prale nan \"Ajoute token\" nan opsyon meni kont ou an." + }, + "readMore": { + "message": "Li plis isit la." + }, + "readMore2": { + "message": "Li plis isit la." + }, + "receive": { + "message": "Resevwa" + }, + "recipientAddress": { + "message": "Adrès pou resevwa" + }, + "refundAddress": { + "message": "Adrès pou resevwa" + }, + "reject": { + "message": "Rejte" + }, + "rejectAll": { + "message": "Rejte Tout" + }, + "rejectTxsN": { + "message": "Rejete $ 1 tranzaksyon" + }, + "rejectTxsDescription": { + "message": "Ou se sou rejte $ 1 yon anpil nan tranzaksyon yo." + }, + "rejected": { + "message": "Rejete" + }, + "reset": { + "message": "Repwograme" + }, + "resetAccount": { + "message": "Repwograme Kont" + }, + "resetAccountDescription": { + "message": "Repwograme kont a netwaye tranzaksyon ou yo." + }, + "restoreFromSeed": { + "message": "Restore kont?" + }, + "restoreVault": { + "message": "Retabli kazye" + }, + "restoreAccountWithSeed": { + "message": "Retabli kont ou avèk yo Seed Fraz" + }, + "required": { + "message": "Egzije" + }, + "retryWithMoreGas": { + "message": "Reseye ak yon pri gaz pi wo isit la" + }, + "restore": { + "message": "Retabli" + }, + "revealSeedWords": { + "message": "Revele Seed Mo Yo" + }, + "revealSeedWordsTitle": { + "message": "Seed Fraz" + }, + "revealSeedWordsDescription": { + "message": "Si ou pa janm chanje navigatè ou deplase òdinatè, ou pral bezwen fraz seed la pou ka gen aksè a kont ou. Sere yo on kote an sekirite e an sekrè." + }, + "revealSeedWordsWarningTitle": { + "message": "PA pataje fraz sa a avèk nenpòt moun!" + }, + "revealSeedWordsWarning": { + "message": "Yo ka itilize mo sa pou vòlè kont ou." + }, + "revert": { + "message": "Retounen" + }, + "remove": { + "message": "retire" + }, + "removeAccount": { + "message": "Retire kont" + }, + "removeAccountDescription": { + "message": "Kont sa a pral retire nan Wallet ou. Tanpri, asire ou ke ou gen orijinal fraz seed la oubyen kle prive pou rantre kont lan avan ou kontinye. Oubyen ou ka rantre kont ou ankò apati kont \"drop-down\" ou an." + }, + "readyToConnect": { + "message": "Pare pou konekte?" + }, + "rinkeby": { + "message": "Rinkeby Tès Rezo" + }, + "ropsten": { + "message": "Ropsten Tès Rezo" + }, + "rpc": { + "message": "Koutim RPC" + }, + "sampleAccountName": { + "message": "Pa egzanp, Nouvo kont mwen an", + "description": "Help user understand concept of adding a human-readable name to their account" + }, + "save": { + "message": "Sove" + }, + "saveAsCsvFile": { + "message": "Sove kòm dosye CSV" + }, + "saveAsFile": { + "message": "Sove kòm dosye", + "description": "Account export process" + }, + "saveSeedAsFile": { + "message": "Sove pawòl seed kòm dosye" + }, + "scanInstructions": { + "message": "Mete kòd QR la devan kamera ou" + }, + "scanQrCode": { + "message": "Enspeksyon QR Kòd" + }, + "search": { + "message": "Rechèch" + }, + "searchResults": { + "message": "Rezilta rechèch" + }, + "secretPhrase": { + "message": "Antre fraz sekrè douz mo ou a pou w restore kòf ou a." + }, + "seedPhraseReq": { + "message": "Seed fraz yo se 12 long mo" + }, + "select": { + "message": "Chwazi" + }, + "selectCurrency": { + "message": "Chwazi Lajan" + }, + "selectLocale": { + "message": "Chwazi Lokasyon" + }, + "selectService": { + "message": "Chwazi Sèvis" + }, + "selectType": { + "message": "Chwazi Kalite" + }, + "send": { + "message": "Voye" + }, + "sendETH": { + "message": "Voye ETH" + }, + "sendTokens": { + "message": "Voye Tokens" + }, + "sentEther": { + "message": "Voye ether" + }, + "sentTokens": { + "message": "tokens deja voye" + }, + "separateEachWord": { + "message": "Separe chak mo ak yon sèl espas" + }, + "searchTokens": { + "message": "Rechèch Tokens" + }, + "selectAnAddress": { + "message": "Chwazi yon adrès" + }, + "selectAnAccount": { + "message": "Chwazi yon kont" + }, + "selectAnAccountHelp": { + "message": "Chwazi kont pou wè nan MetaMask" + }, + "selectHdPath": { + "message": "Chwazi chemen HD" + }, + "selectPathHelp": { + "message": "Si ou pa wè kont Ledger ou te genyen an anba a, eseye chanje chemen an \"Eritaj (MEW / MyCrypto)\"" + }, + "sendTokensAnywhere": { + "message": "Voye Tokens pou nenpòt moun ki gen yon kont Ethereum" + }, + "settings": { + "message": "Paramèt" + }, + "shapeshiftBuy": { + "message": "Achte avèk Shapeshift" + }, + "showPrivateKeys": { + "message": "Montre Kle Prive" + }, + "showQRCode": { + "message": "Montre Kòd QR" + }, + "showHexData": { + "message": "Montre Hex Data" + }, + "showHexDataDescription": { + "message": "Pran sa pouw ka montre chan entèfas hex data a" + }, + "sign": { + "message": "Siyen" + }, + "signatureRequest": { + "message": "Siyati Mande" + }, + "signed": { + "message": "Te Siyen" + }, + "signMessage": { + "message": "Siyen mesaj" + }, + "signNotice": { + "message": "Lè w siyen mesaj sa a ka gen efè segondè ki \ndanjere. Sèlman \nsit mesaj ki soti nan sit ou konplètman fè konfyans ak tout kont ou. \n Metòd danjere sa yo pral retire nan yon vèsyon fiti. " + }, + "sigRequest": { + "message": "Demann Siyati" + }, + "sigRequested": { + "message": "Demann Siyati" + }, + "spaceBetween": { + "message": "ka gen sèlman yon espas ant mo yo" + }, + "speedUp": { + "message": "pi vit" + }, + "speedUpTitle": { + "message": "Monte vitès tranzaksyon" + }, + "speedUpSubtitle": { + "message": "Ogmante pri gaz ou pou eseye efase tranzaksyon ou pi vit" + }, + "status": { + "message": "Kondisyon" + }, + "stateLogs": { + "message": "State Logs" + }, + "stateLogsDescription": { + "message": "State logs gen adrès kont piblik ou yo epi tranzaksyon ou te voye yo." + }, + "stateLogError": { + "message": "Erè nan retwouve State Logs yo." + }, + "step1HardwareWallet": { + "message": "1. Konekte Materyèl bous" + }, + "step1HardwareWalletMsg": { + "message": "Konekte materyèl bous ou dirèkteman nan òdinatè ou." + }, + "step2HardwareWallet": { + "message": "2. Chwazi yon kont" + }, + "step2HardwareWalletMsg": { + "message": "Chwazi kont ou vle wè a. Ou ka chwazi youn sèlman nan yon moman." + }, + "step3HardwareWallet": { + "message": "3. Kòmanse itilize dApps ak plis ankò!" + }, + "step3HardwareWalletMsg": { + "message": "Sèvi ak kont materyèl ou menm jan ou t ap fè pou kont Etherum. Ouvri sesyon an nan dApps, voye Eth, achte ak stòke ERC20 tokens ak e ki pake chanje tokens tankou CryptoKitties." + }, + "submit": { + "message": "Soumèt" + }, + "submitted": { + "message": "Te Soumèt" + }, + "supportCenter": { + "message": "Vizite Sant Sipò Nou" + }, + "symbolBetweenZeroTen": { + "message": "Senbòl yo dwe ant 0 ak 10 karaktè." + }, + "takesTooLong": { + "message": "Pran twò lontan?" + }, + "terms": { + "message": "Tèm pou itilize" + }, + "testFaucet": { + "message": "Tès Tiyo" + }, + "to": { + "message": "Pou" + }, + "toETHviaShapeShift": { + "message": "$1 pou ETH pa ShapeShift", + "description": "system will fill in deposit type in start of message" + }, + "token": { + "message": "Token" + }, + "tokenAddress": { + "message": "Adrès Token" + }, + "tokenAlreadyAdded": { + "message": "Ou te deja ajoute token." + }, + "tokenBalance": { + "message": "Balans Token ou se:" + }, + "tokenSelection": { + "message": "Chache Tokens oswa chwazi nan lis Tokens popilè nou an." + }, + "tokenSymbol": { + "message": "Token Senbòl" + }, + "tokenWarning1": { + "message": "Kenbe tras token yo ou te achte ak kont MetaMask ou. Si ou te achte tokens pandan wap itilize yon kont diferan tokens sa yo pa pral parèt la." + }, + "total": { + "message": "Total" + }, + "transaction": { + "message": "tranzaksyon yo" + }, + "transactionConfirmed": { + "message": "Tranzaksyon ou te konfime pou $2." + }, + "transactionCreated": { + "message": "Tranzaksyon ou te kreye avèk on valè de $1 pou $2." + }, + "transactionWithNonce": { + "message": "Tranzaksyon $1" + }, + "transactionDropped": { + "message": "Tranzaksyon ou te tonbe a $2." + }, + "transactionSubmitted": { + "message": "Tranzaksyon ou te soumèt a $2." + }, + "transactionUpdated": { + "message": "Tranzaksyon ou te aktyalize a $2." + }, + "transactionUpdatedGas": { + "message": "Tranzaksyon ou te aktyalize avèk on pri gaz de $1 a $2." + }, + "transactions": { + "message": "transactions" + }, + "transactionError": { + "message": "Erè tranzaksyon. Eksepsyon jete nan kòd kontra." + }, + "transactionMemo": { + "message": "Memo tranzaksyon (opsyonèl)" + }, + "transactionNumber": { + "message": "Nimewo Tranzaksyon" + }, + "transfer": { + "message": "Transfè" + }, + "transferFrom": { + "message": "Transfer From" + }, + "transfers": { + "message": "Transfè yo" + }, + "trezorHardwareWallet": { + "message": "TREZOR Materyèl Bous" + }, + "troubleTokenBalances": { + "message": "Nou te gen pwoblèm chaje balans token ou. Ou ka wè yo ", + "description": "Followed by a link (here) to view token balances" + }, + "tryAgain": { + "message": "Eseye anko" + }, + "twelveWords": { + "message": "12 mo sa yo se sèl fason pou retabli kont MetaMask ou yo. \nKenbe yo yon kote ki an sekirite ak sekrè." + }, + "typePassword": { + "message": "Tape modpas ou" + }, + "uiWelcome": { + "message": "Byenveni nan New itilizatè koòdone (Beta)" + }, + "uiWelcomeMessage": { + "message": "Kounya w ap itilize nouvo MetaMask UI (itilizatè koòdone) a." + }, + "unapproved": { + "message": "Pa apwouve" + }, + "unavailable": { + "message": "Pa disponib" + }, + "units": { + "message": "inite yo" + }, + "unknown": { + "message": "Enkoni" + }, + "unknownFunction": { + "message": "Fonksyon enkoni" + }, + "unknownNetwork": { + "message": "Rezo Prive Enkoni" + }, + "unknownNetworkId": { + "message": "Rezo ID Enkoni" + }, + "unknownQrCode": { + "message": "Erè: Nou pa t kapab idantifye QR kòd sa" + }, + "unknownCameraErrorTitle": { + "message": "Ooops! Yon bagay te ale mal...." + }, + "unknownCameraError": { + "message": "Te gen yon erè pandan y ap eseye jwenn aksè nan kamera ou. Tanpri eseye ankò..." + }, + "unlock": { + "message": "Debloke" + }, + "unlockMessage": { + "message": "Entènèt desantralize a ap tann" + }, + "updatedWithDate": { + "message": "Mete ajou $1" + }, + "uriErrorMsg": { + "message": "URIs mande pou apwopriye prefiks HTTP / HTTPS a." + }, + "usaOnly": { + "message": "USA sèlman", + "description": "Using this exchange is limited to people inside the USA" + }, + "usedByClients": { + "message": "Itilize pa yon varyete de kliyan diferan" + }, + "useOldUI": { + "message": "Itilizasyon ansyen UI (itilizatè koòdone)" + }, + "validFileImport": { + "message": "Ou dwe chwazi yon dosye ki valab pou enpòte." + }, + "vaultCreated": { + "message": "Kòf Kreye" + }, + "viewAccount": { + "message": "Wè Kont" + }, + "viewOnEtherscan": { + "message": "Wè sou Etherscan" + }, + "visitWebSite": { + "message": "Vizite sit entènèt nou an" + }, + "walletSeed": { + "message": "Bous Seed" + }, + "warning": { + "message": "Avètisman" + }, + "welcomeBack": { + "message": "Bon Retou!" + }, + "welcomeBeta": { + "message": "Byenveni nan MetaMask Beta" + }, + "whatsThis": { + "message": "Kisa sa ye?" + }, + "yesLetsTry": { + "message": "Wi, ann eseye" + }, + "youNeedToAllowCameraAccess": { + "message": "Ou bezwen bay kamera aksè pou sèvi ak fonksyon sa." + }, + "yourSigRequested": { + "message": "Yo mande siyati ou" + }, + "youSign": { + "message": "Ou ap siyen kounya" + }, + "yourPrivateSeedPhrase": { + "message": "Seed fraz prive ou a" + } } diff --git a/app/_locales/index.json b/app/_locales/index.json index 46933dc3f..234215e39 100644 --- a/app/_locales/index.json +++ b/app/_locales/index.json @@ -1,24 +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": "pl", "name": "Polish" }, - { "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/nl/messages.json b/app/_locales/nl/messages.json index e6d09c123..fc3450290 100644 --- a/app/_locales/nl/messages.json +++ b/app/_locales/nl/messages.json @@ -435,7 +435,7 @@ "message": "back-up woorden hebben alleen kleine letters" }, "mainnet": { - "message": "belangrijkste Ethereum-netwerk" + "message": "Main Netwerk" }, "message": { "message": "Bericht" diff --git a/app/loading.html b/app/loading.html index aef5d9607..71403a5ac 100644 --- a/app/loading.html +++ b/app/loading.html @@ -1,5 +1,9 @@ -<html> +<!DOCTYPE html> +<html lang="en"> <head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>MetaMask Loading</title> <style> #div-logo { @@ -31,5 +35,11 @@ <div id="div-logo"> <img id="logo" src="./images/loginglogo.svg"> </div> + <script type="text/javascript"> + // redirect to 404 after one minute + setTimeout(() => { + location.href = './404.html' + }, 60000) + </script> </body> </html> diff --git a/app/scripts/background.js b/app/scripts/background.js index 509a0001d..6b3ac2664 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -29,7 +29,7 @@ const setupMetamaskMeshMetrics = require('./lib/setupMetamaskMeshMetrics') const EdgeEncryptor = require('./edge-encryptor') const getFirstPreferredLangCode = require('./lib/get-first-preferred-lang-code') const getObjStructure = require('./lib/getObjStructure') -const ipfsContent = require('./lib/ipfsContent.js') +const setupEnsIpfsResolver = require('./lib/ens-ipfs/setup') const { ENVIRONMENT_TYPE_POPUP, @@ -58,7 +58,6 @@ const isIE = !!document.documentMode // Edge 20+ const isEdge = !isIE && !!window.StyleMedia -let ipfsHandle let popupIsOpen = false let notificationIsOpen = false const openMetamaskTabsIDs = {} @@ -164,7 +163,6 @@ async function initialize () { const initLangCode = await getFirstPreferredLangCode() await setupController(initState, initLangCode) log.debug('MetaMask initialization complete.') - ipfsHandle = ipfsContent(initState.NetworkController.provider) } // @@ -269,10 +267,8 @@ function setupController (initState, initLangCode) { }) global.metamaskController = controller - controller.networkController.on('networkDidChange', () => { - ipfsHandle && ipfsHandle.remove() - ipfsHandle = ipfsContent(controller.networkController.providerStore.getState()) - }) + const provider = controller.provider + setupEnsIpfsResolver({ provider }) // report failed transactions to Sentry controller.txController.on(`tx:status-update`, (txId, status) => { diff --git a/app/scripts/controllers/currency.js b/app/scripts/controllers/currency.js index d5bc5fe2b..1e866d2c9 100644 --- a/app/scripts/controllers/currency.js +++ b/app/scripts/controllers/currency.js @@ -21,6 +21,7 @@ class CurrencyController { * since midnight of January 1, 1970 * @property {number} conversionInterval The id of the interval created by the scheduleConversionInterval method. * Used to clear an existing interval on subsequent calls of that method. + * @property {string} nativeCurrency The ticker/symbol of the native chain currency * */ constructor (opts = {}) { @@ -28,6 +29,7 @@ class CurrencyController { currentCurrency: 'usd', conversionRate: 0, conversionDate: 'N/A', + nativeCurrency: 'ETH', }, opts.initState) this.store = new ObservableStore(initState) } @@ -37,6 +39,29 @@ class CurrencyController { // /** + * A getter for the nativeCurrency property + * + * @returns {string} A 2-4 character shorthand that describes the specific currency + * + */ + getNativeCurrency () { + return this.store.getState().nativeCurrency + } + + /** + * A setter for the nativeCurrency property + * + * @param {string} nativeCurrency The new currency to set as the nativeCurrency in the store + * + */ + setNativeCurrency (nativeCurrency) { + this.store.updateState({ + nativeCurrency, + ticker: nativeCurrency, + }) + } + + /** * A getter for the currentCurrency property * * @returns {string} A 2-4 character shorthand that describes a specific currency, currently selected by the user @@ -104,15 +129,32 @@ class CurrencyController { * */ async updateConversionRate () { - let currentCurrency + let currentCurrency, nativeCurrency try { currentCurrency = this.getCurrentCurrency() - const response = await fetch(`https://api.infura.io/v1/ticker/eth${currentCurrency.toLowerCase()}`) + nativeCurrency = this.getNativeCurrency() + let apiUrl + if (nativeCurrency === 'ETH') { + apiUrl = `https://api.infura.io/v1/ticker/eth${currentCurrency.toLowerCase()}` + } else { + apiUrl = `https://min-api.cryptocompare.com/data/price?fsym=${nativeCurrency.toUpperCase()}&tsyms=${currentCurrency.toUpperCase()}` + } + const response = await fetch(apiUrl) const parsedResponse = await response.json() - this.setConversionRate(Number(parsedResponse.bid)) - this.setConversionDate(Number(parsedResponse.timestamp)) + if (nativeCurrency === 'ETH') { + this.setConversionRate(Number(parsedResponse.bid)) + this.setConversionDate(Number(parsedResponse.timestamp)) + } else { + if (parsedResponse[currentCurrency.toUpperCase()]) { + this.setConversionRate(Number(parsedResponse[currentCurrency.toUpperCase()])) + this.setConversionDate(parseInt((new Date()).getTime() / 1000)) + } else { + this.setConversionRate(0) + this.setConversionDate('N/A') + } + } } catch (err) { - log.warn(`MetaMask - Failed to query currency conversion:`, currentCurrency, err) + log.warn(`MetaMask - Failed to query currency conversion:`, nativeCurrency, currentCurrency, err) this.setConversionRate(0) this.setConversionDate('N/A') } diff --git a/app/scripts/controllers/network/network.js b/app/scripts/controllers/network/network.js index 6a5369f06..c21e9c764 100644 --- a/app/scripts/controllers/network/network.js +++ b/app/scripts/controllers/network/network.js @@ -11,6 +11,8 @@ const createInfuraClient = require('./createInfuraClient') const createJsonRpcClient = require('./createJsonRpcClient') const createLocalhostClient = require('./createLocalhostClient') const { createSwappableProxy, createEventEmitterProxy } = require('swappable-obj-proxy') +const extend = require('extend') +const networks = { networkList: {} } const { ROPSTEN, @@ -29,6 +31,10 @@ const defaultProviderConfig = { type: testMode ? RINKEBY : MAINNET, } +const defaultNetworkConfig = { + ticker: 'ETH', +} + module.exports = class NetworkController extends EventEmitter { constructor (opts = {}) { @@ -39,7 +45,8 @@ module.exports = class NetworkController extends EventEmitter { // create stores this.providerStore = new ObservableStore(providerConfig) this.networkStore = new ObservableStore('loading') - this.store = new ComposedStore({ provider: this.providerStore, network: this.networkStore }) + this.networkConfig = new ObservableStore(defaultNetworkConfig) + this.store = new ComposedStore({ provider: this.providerStore, network: this.networkStore, settings: this.networkConfig }) this.on('networkDidChange', this.lookupNetwork) // provider and block tracker this._provider = null @@ -51,8 +58,8 @@ module.exports = class NetworkController extends EventEmitter { initializeProvider (providerParams) { this._baseProviderParams = providerParams - const { type, rpcTarget } = this.providerStore.getState() - this._configureProvider({ type, rpcTarget }) + const { type, rpcTarget, chainId, ticker, nickname } = this.providerStore.getState() + this._configureProvider({ type, rpcTarget, chainId, ticker, nickname }) this.lookupNetwork() } @@ -72,7 +79,20 @@ module.exports = class NetworkController extends EventEmitter { return this.networkStore.getState() } - setNetworkState (network) { + getNetworkConfig () { + return this.networkConfig.getState() + } + + setNetworkState (network, type) { + if (network === 'loading') { + return this.networkStore.putState(network) + } + + // type must be defined + if (!type) { + return + } + network = networks.networkList[type] && networks.networkList[type].chainId ? networks.networkList[type].chainId : network return this.networkStore.putState(network) } @@ -85,6 +105,7 @@ module.exports = class NetworkController extends EventEmitter { if (!this._provider) { return log.warn('NetworkController - lookupNetwork aborted due to missing provider') } + var { type } = this.providerStore.getState() const ethQuery = new EthQuery(this._provider) // first attempt to perform lookup via eth_chainId ethQuery.sendAsync({ method: 'eth_chainId' }, (err, chainIdHex) => { @@ -93,20 +114,23 @@ module.exports = class NetworkController extends EventEmitter { ethQuery.sendAsync({ method: 'net_version' }, (err, network) => { if (err) return this.setNetworkState('loading') log.info(`net_version returned ${network}`) - this.setNetworkState(network) + this.setNetworkState(network, type) }) return } const chainId = Number.parseInt(chainIdHex, 16) log.info(`net_version returned ${chainId}`) - this.setNetworkState(chainId) + this.setNetworkState(chainId, type) }) } - setRpcTarget (rpcTarget) { + setRpcTarget (rpcTarget, chainId, ticker = 'ETH', nickname = '') { const providerConfig = { type: 'rpc', rpcTarget, + chainId, + ticker, + nickname, } this.providerConfig = providerConfig } @@ -142,7 +166,7 @@ module.exports = class NetworkController extends EventEmitter { } _configureProvider (opts) { - const { type, rpcTarget } = opts + const { type, rpcTarget, chainId, ticker, nickname } = opts // infura type-based endpoints const isInfura = INFURA_PROVIDER_TYPES.includes(type) if (isInfura) { @@ -152,7 +176,7 @@ module.exports = class NetworkController extends EventEmitter { this._configureLocalhostProvider() // url-based rpc endpoints } else if (type === 'rpc') { - this._configureStandardProvider({ rpcUrl: rpcTarget }) + this._configureStandardProvider({ rpcUrl: rpcTarget, chainId, ticker, nickname }) } else { throw new Error(`NetworkController - _configureProvider - unknown type "${type}"`) } @@ -162,6 +186,11 @@ module.exports = class NetworkController extends EventEmitter { log.info('NetworkController - configureInfuraProvider', type) const networkClient = createInfuraClient({ network: type }) this._setNetworkClient(networkClient) + // setup networkConfig + var settings = { + ticker: 'ETH', + } + this.networkConfig.putState(settings) } _configureLocalhostProvider () { @@ -170,9 +199,22 @@ module.exports = class NetworkController extends EventEmitter { this._setNetworkClient(networkClient) } - _configureStandardProvider ({ rpcUrl }) { + _configureStandardProvider ({ rpcUrl, chainId, ticker, nickname }) { log.info('NetworkController - configureStandardProvider', rpcUrl) const networkClient = createJsonRpcClient({ rpcUrl }) + // hack to add a 'rpc' network with chainId + networks.networkList['rpc'] = { + chainId: chainId, + rpcUrl, + ticker: ticker || 'ETH', + nickname, + } + // setup networkConfig + var settings = { + network: chainId, + } + settings = extend(settings, networks.networkList['rpc']) + this.networkConfig.putState(settings) this._setNetworkClient(networkClient) } diff --git a/app/scripts/controllers/preferences.js b/app/scripts/controllers/preferences.js index 8eb2bce0c..120801f06 100644 --- a/app/scripts/controllers/preferences.js +++ b/app/scripts/controllers/preferences.js @@ -25,7 +25,7 @@ class PreferencesController { */ constructor (opts = {}) { const initState = extend({ - frequentRpcList: [], + frequentRpcListDetail: [], currentAccountTab: 'history', accountTokens: {}, assetImages: {}, @@ -39,7 +39,7 @@ class PreferencesController { seedWords: null, forgottenPassword: false, preferences: { - useETHAsPrimaryCurrency: true, + useNativeCurrencyAsPrimaryCurrency: true, }, }, opts.initState) @@ -104,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': @@ -375,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 @@ -405,35 +389,53 @@ 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. + * @param {number} chainId Optional chainId of the selected network. + * @param {string} ticker Optional ticker symbol of the selected network. + * @param {string} nickname Optional nickname of the selected network. + * @returns {Promise<array>} Promise resolving to updated frequentRpcList. * */ - addToFrequentRpcList (_url, remove = false) { - const rpcList = this.getFrequentRpcList() - const index = rpcList.findIndex((element) => { return element === _url }) + addToFrequentRpcList (url, chainId, ticker = 'ETH', nickname = '') { + const rpcList = this.getFrequentRpcListDetail() + const index = rpcList.findIndex((element) => { return element.rpcUrl === url }) if (index !== -1) { rpcList.splice(index, 1) } - if (!remove && _url !== 'http://localhost:8545') { - rpcList.push(_url) + if (url !== 'http://localhost:8545') { + rpcList.push({ rpcUrl: url, chainId, ticker, nickname }) + } + this.store.updateState({ frequentRpcListiDetail: 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.getFrequentRpcListDetail() + const index = rpcList.findIndex((element) => { return element.rpcUrl === url }) + if (index !== -1) { + rpcList.splice(index, 1) } + this.store.updateState({ frequentRpcListDetail: rpcList }) return Promise.resolve(rpcList) } /** - * Getter for the `frequentRpcList` property. + * Getter for the `frequentRpcListDetail` property. * - * @returns {array<string>} An array of one or two rpc urls. + * @returns {array<array>} An array of rpc urls. * */ - getFrequentRpcList () { - return this.store.getState().frequentRpcList + getFrequentRpcListDetail () { + return this.store.getState().frequentRpcListDetail } /** diff --git a/app/scripts/lib/contracts/registrar.js b/app/scripts/lib/ens-ipfs/contracts/registrar.js index 99ca24458..99ca24458 100644 --- a/app/scripts/lib/contracts/registrar.js +++ b/app/scripts/lib/ens-ipfs/contracts/registrar.js diff --git a/app/scripts/lib/contracts/resolver.js b/app/scripts/lib/ens-ipfs/contracts/resolver.js index 1bf3f90ce..1bf3f90ce 100644 --- a/app/scripts/lib/contracts/resolver.js +++ b/app/scripts/lib/ens-ipfs/contracts/resolver.js diff --git a/app/scripts/lib/ens-ipfs/resolver.js b/app/scripts/lib/ens-ipfs/resolver.js new file mode 100644 index 000000000..fe2dc1134 --- /dev/null +++ b/app/scripts/lib/ens-ipfs/resolver.js @@ -0,0 +1,54 @@ +const namehash = require('eth-ens-namehash') +const multihash = require('multihashes') +const Eth = require('ethjs-query') +const EthContract = require('ethjs-contract') +const registrarAbi = require('./contracts/registrar') +const resolverAbi = require('./contracts/resolver') + +module.exports = resolveEnsToIpfsContentId + + +async function resolveEnsToIpfsContentId ({ provider, name }) { + const eth = new Eth(provider) + const hash = namehash.hash(name) + const contract = new EthContract(eth) + // lookup registrar + const chainId = Number.parseInt(await eth.net_version(), 10) + const registrarAddress = getRegistrarForChainId(chainId) + if (!registrarAddress) { + throw new Error(`EnsIpfsResolver - no known ens-ipfs registrar for chainId "${chainId}"`) + } + const Registrar = contract(registrarAbi).at(registrarAddress) + // lookup resolver + const resolverLookupResult = await Registrar.resolver(hash) + const resolverAddress = resolverLookupResult[0] + if (hexValueIsEmpty(resolverAddress)) { + throw new Error(`EnsIpfsResolver - no resolver found for name "${name}"`) + } + const Resolver = contract(resolverAbi).at(resolverAddress) + // lookup content id + const contentLookupResult = await Resolver.content(hash) + const contentHash = contentLookupResult[0] + if (hexValueIsEmpty(contentHash)) { + throw new Error(`EnsIpfsResolver - no content ID found for name "${name}"`) + } + const nonPrefixedHex = contentHash.slice(2) + const buffer = multihash.fromHexString(nonPrefixedHex) + const contentId = multihash.toB58String(multihash.encode(buffer, 'sha2-256')) + return contentId +} + +function hexValueIsEmpty(value) { + return [undefined, null, '0x', '0x0', '0x0000000000000000000000000000000000000000000000000000000000000000'].includes(value) +} + +function getRegistrarForChainId (chainId) { + switch (chainId) { + // mainnet + case 1: + return '0x314159265dd8dbb310642f98f50c066173c1259b' + // ropsten + case 3: + return '0x112234455c3a32fd11230c42e7bccd4a84e02010' + } +} diff --git a/app/scripts/lib/ens-ipfs/setup.js b/app/scripts/lib/ens-ipfs/setup.js new file mode 100644 index 000000000..45eb1ce14 --- /dev/null +++ b/app/scripts/lib/ens-ipfs/setup.js @@ -0,0 +1,63 @@ +const urlUtil = require('url') +const extension = require('extensionizer') +const resolveEnsToIpfsContentId = require('./resolver.js') + +const supportedTopLevelDomains = ['eth'] + +module.exports = setupEnsIpfsResolver + +function setupEnsIpfsResolver({ provider }) { + + // install listener + const urlPatterns = supportedTopLevelDomains.map(tld => `*://*.${tld}/*`) + extension.webRequest.onErrorOccurred.addListener(webRequestDidFail, { urls: urlPatterns }) + + // return api object + return { + // uninstall listener + remove () { + extension.webRequest.onErrorOccurred.removeListener(webRequestDidFail) + }, + } + + async function webRequestDidFail (details) { + const { tabId, url } = details + // ignore requests that are not associated with tabs + if (tabId === -1) return + // parse ens name + const urlData = urlUtil.parse(url) + const { hostname: name, path, search } = urlData + const domainParts = name.split('.') + const topLevelDomain = domainParts[domainParts.length - 1] + // if unsupported TLD, abort + if (!supportedTopLevelDomains.includes(topLevelDomain)) return + // otherwise attempt resolve + attemptResolve({ tabId, name, path, search }) + } + + async function attemptResolve({ tabId, name, path, search }) { + extension.tabs.update(tabId, { url: `loading.html` }) + try { + const ipfsContentId = await resolveEnsToIpfsContentId({ provider, name }) + let url = `https://gateway.ipfs.io/ipfs/${ipfsContentId}${path}${search || ''}` + try { + // check if ipfs gateway has result + const response = await fetch(url, { method: 'HEAD' }) + // if failure, redirect to 404 page + if (response.status !== 200) { + extension.tabs.update(tabId, { url: '404.html' }) + return + } + // otherwise redirect to the correct page + extension.tabs.update(tabId, { url }) + } catch (err) { + console.warn(err) + // if HEAD fetch failed, redirect so user can see relevant error page + extension.tabs.update(tabId, { url }) + } + } catch (err) { + console.warn(err) + extension.tabs.update(tabId, { url: `error.html?name=${name}` }) + } + } +} diff --git a/app/scripts/lib/ipfsContent.js b/app/scripts/lib/ipfsContent.js deleted file mode 100644 index 8b08453c4..000000000 --- a/app/scripts/lib/ipfsContent.js +++ /dev/null @@ -1,46 +0,0 @@ -const extension = require('extensionizer') -const resolver = require('./resolver.js') - -module.exports = function (provider) { - function ipfsContent (details) { - const name = details.url.substring(7, details.url.length - 1) - let clearTime = null - if (/^.+\.eth$/.test(name) === false) return - - extension.tabs.query({active: true}, tab => { - extension.tabs.update(tab.id, { url: 'loading.html' }) - - clearTime = setTimeout(() => { - return extension.tabs.update(tab.id, { url: '404.html' }) - }, 60000) - - resolver.resolve(name, provider).then(ipfsHash => { - clearTimeout(clearTime) - let url = 'https://ipfs.infura.io/ipfs/' + ipfsHash - return fetch(url, { method: 'HEAD' }).then(response => response.status).then(statusCode => { - if (statusCode !== 200) return extension.tabs.update(tab.id, { url: '404.html' }) - extension.tabs.update(tab.id, { url: url }) - }) - .catch(err => { - url = 'https://ipfs.infura.io/ipfs/' + ipfsHash - extension.tabs.update(tab.id, {url: url}) - return err - }) - }) - .catch(err => { - clearTimeout(clearTime) - const url = err === 'unsupport' ? 'unsupport' : 'error' - extension.tabs.update(tab.id, {url: `${url}.html?name=${name}`}) - }) - }) - return { cancel: true } - } - - extension.webRequest.onErrorOccurred.addListener(ipfsContent, {urls: ['*://*.eth/'], types: ['main_frame']}) - - return { - remove () { - extension.webRequest.onErrorOccurred.removeListener(ipfsContent) - }, - } -} diff --git a/app/scripts/lib/resolver.js b/app/scripts/lib/resolver.js deleted file mode 100644 index ff0fed161..000000000 --- a/app/scripts/lib/resolver.js +++ /dev/null @@ -1,71 +0,0 @@ -const namehash = require('eth-ens-namehash') -const multihash = require('multihashes') -const HttpProvider = require('ethjs-provider-http') -const Eth = require('ethjs-query') -const EthContract = require('ethjs-contract') -const registrarAbi = require('./contracts/registrar') -const resolverAbi = require('./contracts/resolver') - -function ens (name, provider) { - const eth = new Eth(new HttpProvider(getProvider(provider.type))) - const hash = namehash.hash(name) - const contract = new EthContract(eth) - const Registrar = contract(registrarAbi).at(getRegistrar(provider.type)) - return new Promise((resolve, reject) => { - if (provider.type === 'mainnet' || provider.type === 'ropsten') { - Registrar.resolver(hash).then((address) => { - if (address === '0x0000000000000000000000000000000000000000') { - reject(null) - } else { - const Resolver = contract(resolverAbi).at(address['0']) - return Resolver.content(hash) - } - }).then((contentHash) => { - if (contentHash['0'] === '0x0000000000000000000000000000000000000000000000000000000000000000') reject(null) - if (contentHash.ret !== '0x') { - const hex = contentHash['0'].substring(2) - const buf = multihash.fromHexString(hex) - resolve(multihash.toB58String(multihash.encode(buf, 'sha2-256'))) - } else { - reject(null) - } - }) - } else { - return reject('unsupport') - } - }) -} - -function getProvider (type) { - switch (type) { - case 'mainnet': - return 'https://mainnet.infura.io/' - case 'ropsten': - return 'https://ropsten.infura.io/' - default: - return 'http://localhost:8545/' - } -} - -function getRegistrar (type) { - switch (type) { - case 'mainnet': - return '0x314159265dd8dbb310642f98f50c066173c1259b' - case 'ropsten': - return '0x112234455c3a32fd11230c42e7bccd4a84e02010' - default: - return '0x0000000000000000000000000000000000000000' - } -} - -module.exports.resolve = function (name, provider) { - const path = name.split('.') - const topLevelDomain = path[path.length - 1] - if (topLevelDomain === 'eth' || topLevelDomain === 'test') { - return ens(name, provider) - } else { - return new Promise((resolve, reject) => { - reject(null) - }) - } -} diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 32ceb6790..3778dbdb6 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -138,12 +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({ @@ -197,6 +197,8 @@ module.exports = class MetamaskController extends EventEmitter { }) this.networkController.on('networkDidChange', () => { this.balancesController.updateAllBalances() + var currentCurrency = this.currencyController.getCurrentCurrency() + this.setCurrentCurrency(currentCurrency, function() {}) }) this.balancesController.updateAllBalances() @@ -1412,10 +1414,13 @@ module.exports = class MetamaskController extends EventEmitter { * @param {Function} cb - A callback function returning currency info. */ setCurrentCurrency (currencyCode, cb) { + const { ticker } = this.networkController.getNetworkConfig() try { + this.currencyController.setNativeCurrency(ticker) this.currencyController.setCurrentCurrency(currencyCode) this.currencyController.updateConversionRate() const data = { + nativeCurrency: ticker || 'ETH', conversionRate: this.currencyController.getConversionRate(), currentCurrency: this.currencyController.getCurrentCurrency(), conversionDate: this.currencyController.getConversionDate(), @@ -1454,11 +1459,14 @@ module.exports = class MetamaskController extends EventEmitter { /** * A method for selecting a custom URL for an ethereum RPC provider. * @param {string} rpcTarget - A URL for a valid Ethereum RPC API. + * @param {number} chainId - The chainId of the selected network. + * @param {string} ticker - The ticker symbol of the selected network. + * @param {string} nickname - Optional nickname of the selected network. * @returns {Promise<String>} - The RPC Target URL confirmed. */ - async setCustomRpc (rpcTarget) { - this.networkController.setRpcTarget(rpcTarget) - await this.preferencesController.updateFrequentRpcList(rpcTarget) + async setCustomRpc (rpcTarget, chainId, ticker = 'ETH', nickname = '') { + this.networkController.setRpcTarget(rpcTarget, chainId, ticker, nickname) + await this.preferencesController.addToFrequentRpcList(rpcTarget, chainId, ticker, nickname) return rpcTarget } @@ -1467,7 +1475,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) } /** |