Merge branch 'master' into i18n-translator-redux

feature/default_network_editable
Dan 7 years ago
commit d2bd5687e8
  1. 11
      CHANGELOG.md
  2. 15
      app/_locales/en/messages.json
  3. 819
      app/_locales/sl/messages.json
  4. 819
      app/_locales/th/messages.json
  5. 864
      app/_locales/zh_TW/messages.json
  6. 2
      app/manifest.json
  7. 2
      app/scripts/background.js
  8. 39
      app/scripts/migrations/022.js
  9. 1
      app/scripts/migrations/index.js
  10. 9
      mascara/src/app/first-time/index.css
  11. 7
      mascara/src/app/first-time/index.js
  12. 17
      test/integration/lib/add-token.js
  13. 6
      test/integration/lib/mascara-first-time.js
  14. 1
      test/integration/lib/send-new-ui.js
  15. 32
      test/unit/migrations/022-test.js
  16. 96
      ui/app/add-token.js
  17. 6
      ui/app/app.js
  18. 180
      ui/app/css/itcss/components/add-token.scss
  19. 1
      ui/app/css/itcss/components/request-signature.scss
  20. 1
      ui/app/css/itcss/settings/variables.scss
  21. 44
      yarn.lock

@ -2,6 +2,17 @@
## Current Master ## Current Master
## 4.4.0 Mon Mar 26 2018
- Internationalization: Taiwanese, Thai, Slovenian
- Fixes bug where MetaMask would not open once its storage grew too large.
- Updates design of new-ui Add Token screen
- New-ui can send to ens addresses
- Update new-ui button styles
- Signed-type-data notification handles long messages
- Popup extension in new-ui uses new on-boarding designs
- Buy ether step of new-ui on-boarding uses new buy ether modal designs
## 4.3.0 Wed Mar 21 2018 ## 4.3.0 Wed Mar 21 2018
- (beta) Add internationalization support! Includes translations for 13 (!!) new languages: French, Spanish, Italian, German, Dutch, Portuguese, Japanese, Korean, Vietnamese, Mandarin, Hindi, Tagalog, and Russian! Select "Try Beta" in the menu to take them for a spin. Read more about the community effort [here](https://medium.com/gitcoin/metamask-internationalizes-via-gitcoin-bf1390c0301c) - (beta) Add internationalization support! Includes translations for 13 (!!) new languages: French, Spanish, Italian, German, Dutch, Portuguese, Japanese, Korean, Vietnamese, Mandarin, Hindi, Tagalog, and Russian! Select "Try Beta" in the menu to take them for a spin. Read more about the community effort [here](https://medium.com/gitcoin/metamask-internationalizes-via-gitcoin-bf1390c0301c)

@ -171,6 +171,9 @@
"customGas": { "customGas": {
"message": "Customize Gas" "message": "Customize Gas"
}, },
"customToken": {
"message": "Custom Token"
},
"customize": { "customize": {
"message": "Customize" "message": "Customize"
}, },
@ -415,6 +418,9 @@
"message": "JSON File", "message": "JSON File",
"description": "format for importing an account" "description": "format for importing an account"
}, },
"keepTrackTokens": {
"message": "Keep track of the tokens you’ve bought with your MetaMask account."
},
"kovan": { "kovan": {
"message": "Kovan Test Network" "message": "Kovan Test Network"
}, },
@ -424,6 +430,9 @@
"max": { "max": {
"message": "Max" "message": "Max"
}, },
"learnMore": {
"message": "Learn more."
},
"lessThanMax": { "lessThanMax": {
"message": "must be less than or equal to $1.", "message": "must be less than or equal to $1.",
"description": "helper for inputting hex as decimal input" "description": "helper for inputting hex as decimal input"
@ -564,6 +573,9 @@
"pleaseReviewTransaction": { "pleaseReviewTransaction": {
"message": "Please review your transaction." "message": "Please review your transaction."
}, },
"popularTokens": {
"message": "Popular Tokens"
},
"privacyMsg": { "privacyMsg": {
"message": "Privacy Policy" "message": "Privacy Policy"
}, },
@ -708,6 +720,9 @@
"onlySendToEtherAddress": { "onlySendToEtherAddress": {
"message": "Only send ETH to an Ethereum address." "message": "Only send ETH to an Ethereum address."
}, },
"searchTokens": {
"message": "Search Tokens"
},
"sendTokensAnywhere": { "sendTokensAnywhere": {
"message": "Send Tokens to anyone with an Ethereum account" "message": "Send Tokens to anyone with an Ethereum account"
}, },

@ -0,0 +1,819 @@
{
"accept": {
"message": "Sprejmi"
},
"account": {
"message": "Račun"
},
"accountDetails": {
"message": "Podrobnosti računa"
},
"accountName": {
"message": "Ime računa"
},
"address": {
"message": "Naslov"
},
"addCustomToken": {
"message": "Dodaj žeton po meri"
},
"addToken": {
"message": "Dodaj žeton"
},
"addTokens": {
"message": "Dodaj žetone"
},
"amount": {
"message": "Znesek"
},
"amountPlusGas": {
"message": "Znesek + Gas"
},
"appDescription": {
"message": "Denarnica za Ethereum v brskalniku",
"description": "The description of the application"
},
"appName": {
"message": "MetaMask",
"description": "The name of the application"
},
"attemptingConnect": {
"message": "Povezovanje z verigo blokov ..."
},
"attributions": {
"message": "Dodelitve"
},
"available": {
"message": "Na voljo"
},
"back": {
"message": "Nazaj"
},
"balance": {
"message": "Znesek:"
},
"balances": {
"message": "Vaš znesek"
},
"balanceIsInsufficientGas": {
"message": "Napačen znesek za skupno gas vrednost"
},
"beta": {
"message": "BETA"
},
"betweenMinAndMax": {
"message": "mora biti večji ali enak $1 in manjši ali enak $1.",
"description": "helper for inputting hex as decimal input"
},
"blockiesIdenticon": {
"message": "Uporabite Blockies Identicon"
},
"borrowDharma": {
"message": "Izposoja z Dharma (Beta)"
},
"builtInCalifornia": {
"message": "MetaMask je ustvarjen v Kaliforniji."
},
"buy": {
"message": "Kupi"
},
"buyCoinbase": {
"message": "Kupi na Coinbase"
},
"buyCoinbaseExplainer": {
"message": "Coinbase je najpopularnejši načun za kupovanje in prodajo bitcoinov, ethereuma, in litecoina."
},
"cancel": {
"message": "Prekliči"
},
"classicInterface": {
"message": "Uporabi navaden način"
},
"clickCopy": {
"message": "Kliknite za kopiranje"
},
"confirm": {
"message": "Potrdi"
},
"confirmContract": {
"message": "Potrdi pogodbo"
},
"confirmPassword": {
"message": "Potrdi geslo"
},
"confirmTransaction": {
"message": "Potrdi transakcijo"
},
"continue": {
"message": "Nadaljuj"
},
"continueToCoinbase": {
"message": "Nadaljuj na Coinbase"
},
"contractDeployment": {
"message": "Ustvarjanje pogodbe"
},
"conversionProgress": {
"message": "Poteka pretvorba"
},
"copiedButton": {
"message": "Kopirano"
},
"copiedClipboard": {
"message": "Kopirano v odložišče"
},
"copiedExclamation": {
"message": "Kopirano!"
},
"copiedSafe": {
"message": "Prilepil sem ga na varno!"
},
"copy": {
"message": "Kopiraj"
},
"copyToClipboard": {
"message": "Kopiraj v odložišče"
},
"copyButton": {
"message": " Kopiraj "
},
"copyPrivateKey": {
"message": "To je vaš zesebni ključ (kliknite za kopiranje)"
},
"create": {
"message": "Ustvari"
},
"createAccount": {
"message": "Ustvari račun"
},
"createDen": {
"message": "Ustvari"
},
"crypto": {
"message": "Kripto",
"description": "Exchange type (cryptocurrencies)"
},
"currentConversion": {
"message": "Trenutna cena"
},
"currentNetwork": {
"message": "Trenutno omrežje"
},
"customGas": {
"message": "Prilagodi gas"
},
"customize": {
"message": "Prilagodi"
},
"customRPC": {
"message": "Poljuben RPC"
},
"decimalsMustZerotoTen": {
"message": "Decimalk mora biti vsaj 0, in ne več kot 36."
},
"decimal": {
"message": "Decimalke natančnosti"
},
"defaultNetwork": {
"message": "Privzeto omrežje za transakcije je Main Net."
},
"denExplainer": {
"message": "DEN je vaša šifrirana shramba v MetaMasku."
},
"deposit": {
"message": "Vplačilo"
},
"depositBTC": {
"message": "Vplačajte vaš BTC na spodnji naslov:"
},
"depositCoin": {
"message": "Vplačajte $1 na spodnji naslov",
"description": "Tells the user what coin they have selected to deposit with shapeshift"
},
"depositEth": {
"message": "Vplačilo ETH"
},
"depositEther": {
"message": "Vplačilo ethera"
},
"depositFiat": {
"message": "Vplačilo s klasičnimi valutami"
},
"depositFromAccount": {
"message": "Vplačilo iz drugega računa"
},
"depositShapeShift": {
"message": "Vplačilo z ShapeShift"
},
"depositShapeShiftExplainer": {
"message": "Če imate druge kriptovalute, lahko vpačate ether neposredno v MetaMask. Brez računov."
},
"details": {
"message": "Podrobnosti"
},
"directDeposit": {
"message": "Direktno vplačilo"
},
"directDepositEther": {
"message": "Direktno vplačilo ehera"
},
"directDepositEtherExplainer": {
"message": "Če že imate ether, ga lahko najhitreje dobite v MetaMask z direktnim vplačilom."
},
"done": {
"message": "Končano"
},
"downloadStatelogs": {
"message": "Prenesi state dnevnike"
},
"edit": {
"message": "Uredi"
},
"editAccountName": {
"message": "Uredi ime računa"
},
"emailUs": {
"message": "Pišite nam!"
},
"encryptNewDen": {
"message": "Šifrirajte DEN"
},
"enterPassword": {
"message": "Vpišite geslo"
},
"enterPasswordConfirm": {
"message": "Potrdite geslo"
},
"etherscanView": {
"message": "Poglejte račun na Etherscan"
},
"exchangeRate": {
"message": "Menjalni tečaj"
},
"exportPrivateKey": {
"message": "Izvozi zasebni ključ"
},
"exportPrivateKeyWarning": {
"message": "Izvažanje zasebnih ključev je na lastno odgovornost."
},
"failed": {
"message": "Ni uspelo"
},
"fiat": {
"message": "FIAT",
"description": "Exchange type"
},
"fileImportFail": {
"message": "Uvoz z datoteko ni uspel? Kliknite tukaj!",
"description": "Helps user import their account from a JSON file"
},
"followTwitter": {
"message": "Sledite nam na Twitterju"
},
"from": {
"message": "Od"
},
"fromToSame": {
"message": "From and To address cannot be the same"
},
"fromShapeShift": {
"message": "Od ShapeShift"
},
"gas": {
"message": "Gas",
"description": "Short indication of gas cost"
},
"gasFee": {
"message": "Gas fee"
},
"gasLimit": {
"message": "Gas limit"
},
"gasLimitCalculation": {
"message": "Priporočen gas limit je izračunan glede na omrežje."
},
"gasLimitRequired": {
"message": "Gas limit je zahtevan"
},
"gasLimitTooLow": {
"message": "Gas limit mora biti najmanj 21000"
},
"generatingSeed": {
"message": "Ustvarjenje seed ..."
},
"gasPrice": {
"message": "Gas price (GWEI)"
},
"gasPriceCalculation": {
"message": "Priporočen gas price je izračunan glede na omrežje"
},
"gasPriceRequired": {
"message": "Gas price je zahtevan"
},
"getEther": {
"message": "Pridobite ether"
},
"getEtherFromFaucet": {
"message": "Pridobite ether iz fauceta za $1",
"description": "Displays network name for Ether faucet"
},
"greaterThanMin": {
"message": "mora biti višji ali enak $1.",
"description": "helper for inputting hex as decimal input"
},
"here": {
"message": "tukaj",
"description": "as in -click here- for more information (goes with troubleTokenBalances)"
},
"hereList": {
"message": "Tukaj je seznam!!!"
},
"hide": {
"message": "Skrij"
},
"hideToken": {
"message": "Skrij žeton"
},
"hideTokenPrompt": {
"message": "Skrijem žeton?"
},
"howToDeposit": {
"message": "Kako želite vplačati ether?"
},
"holdEther": {
"message": "Omogoča vam, da imate eter in žetone in služi kot most za decentralizirane aplikacije."
},
"import": {
"message": "Uvozi",
"description": "Button to import an account from a selected file"
},
"importAccount": {
"message": "Uvozi račun"
},
"importAccountMsg": {
"message":" Uvoženi računi ne bodo povezani s prvotnim seedphaseom. Preberite več o uvoženih računih "
},
"importAnAccount": {
"message": "Uvozi račun"
},
"importDen": {
"message": "Uvozi DEN"
},
"imported": {
"message": "Uvoženo",
"description": "status showing that an account has been fully loaded into the keyring"
},
"infoHelp": {
"message": "Info & Pomoč"
},
"insufficientFunds": {
"message": "Nezadostna sredstva."
},
"insufficientTokens": {
"message": "Nezadostni žetoni."
},
"invalidAddress": {
"message": "Nepravilen naslov"
},
"invalidAddressRecipient": {
"message": "Prejemnikov naslov je neveljaven"
},
"invalidGasParams": {
"message": "Nepravilno nastavljen gas"
},
"invalidInput": {
"message": "Napačen vnos."
},
"invalidRequest": {
"message": "Napačna zahteva"
},
"invalidRPC": {
"message": "Napačen RPC URI"
},
"jsonFail": {
"message": "Nekaj je bilo narobe. Prepričajte se, da je JSON datoteka pravilno oblikovana."
},
"jsonFile": {
"message": "JSON datoteka",
"description": "format for importing an account"
},
"kovan": {
"message": "Testno omrežje Kovan"
},
"knowledgeDataBase": {
"message": "Obiščite našo pomoč"
},
"lessThanMax": {
"message": "mora biti večji ali enak $1.",
"description": "helper for inputting hex as decimal input"
},
"likeToAddTokens": {
"message": "Želite dodati te žetone?"
},
"limit": {
"message": "Omejitev"
},
"loading": {
"message": "Nalaganje ..."
},
"loadingTokens": {
"message": "Nalaganje žetonov ..."
},
"localhost": {
"message": "Localhost 8545"
},
"login": {
"message": "Prijava"
},
"logout": {
"message": "Odjava"
},
"loose": {
"message": "Loose"
},
"loweCaseWords": {
"message": "seed words imajo lahko le male črke"
},
"mainnet": {
"message": "Glavno omrežje"
},
"message": {
"message": "Sporočilo"
},
"metamaskDescription": {
"message": "MetaMask je varen identitetni sklad za Ethereum."
},
"min": {
"message": "Najmanj"
},
"myAccounts": {
"message": "Moji računi"
},
"mustSelectOne": {
"message": "Izbran mora biti vsaj 1 žeton."
},
"needEtherInWallet": {
"message": "Za interakcijo z decentraliziranimi aplikacijami, ki uporabljajo MetaMask, boste v svoji denarnici potrebovali eter."
},
"needImportFile": {
"message": "Za uvoz morate izbrati datoteko.",
"description": "User is important an account and needs to add a file to continue"
},
"needImportPassword": {
"message": "Za izbrano datoteko morate vnesti geslo.",
"description": "Password and file needed to import an account"
},
"negativeETH": {
"message": "Ni mogoče poslati negativne vsote ETH."
},
"networks": {
"message": "Omrežja"
},
"newAccount": {
"message": "Nov račun"
},
"newAccountNumberName": {
"message": "Račun $1",
"description": "Default name of next account to be created on create account screen"
},
"newContract": {
"message": "Nova pogodba"
},
"newPassword": {
"message": "Novo geslo (min. 8. črk)"
},
"newRecipient": {
"message": "Nov prejemnik"
},
"newRPC": {
"message": "Nov RPC URL"
},
"next": {
"message": "Naprej"
},
"noAddressForName": {
"message": "Za to ime ni bil nastavljen noben naslov."
},
"noDeposits": {
"message": "Ni prejetih vplačil"
},
"noTransactionHistory": {
"message": "Ni zgodovine transakcij."
},
"noTransactions": {
"message": "Ni transakcij"
},
"notStarted": {
"message": "Ni se začelo"
},
"oldUI": {
"message": "Starejši uporabniški vmesnik"
},
"oldUIMessage": {
"message": "Vrnili ste se v starejši uporabniški vmesnik. V novega se lahko vrnete z možnostjo v spustnem meniju v zgornjem desnem kotu."
},
"or": {
"message": "ali",
"description": "choice between creating or importing a new account"
},
"passwordCorrect": {
"message": "Prepričajte se, da je geslo pravilno."
},
"passwordMismatch": {
"message": "gesli se ne ujemata",
"description": "in password creation process, the two new password fields did not match"
},
"passwordShort": {
"message": "geslo ni dovolj dolgo",
"description": "in password creation process, the password is not long enough to be secure"
},
"pastePrivateKey": {
"message": "Tukaj prilepite zasebni ključ:",
"description": "For importing an account from a private key"
},
"pasteSeed": {
"message": "Tukaj prilepite seed phrase!"
},
"personalAddressDetected": {
"message": "Osebni naslov je zaznan. Vnesite naslov žetona."
},
"pleaseReviewTransaction": {
"message": "Preglejte transakcijo."
},
"privacyMsg": {
"message": "Politika zasebnosti"
},
"privateKey": {
"message": "Zasebni ključ",
"description": "select this type of file to use to import an account"
},
"privateKeyWarning": {
"message": "Opozorilo: Nikoli ne razkrijte tega ključa. Vsakdo s svojimi zasebnimi ključi lahko ukrade vse premoženje v računu."
},
"privateNetwork": {
"message": "Zasebno omrežje"
},
"qrCode": {
"message": "Prikaži QR kodo"
},
"readdToken": {
"message": "Ta žeton lahko dodate tudi v prihodnosti, tako da odprete možnost »Dodaj žeton« v meniju z računi."
},
"readMore": {
"message": "Preberite več."
},
"readMore2": {
"message": "Preberite več."
},
"receive": {
"message": "Prejmite"
},
"recipientAddress": {
"message": "Prejemnikov naslov"
},
"refundAddress": {
"message": "Vaš naslov za vračilo"
},
"rejected": {
"message": "Zavrnjeno"
},
"resetAccount": {
"message": "Ponastavi račun"
},
"restoreFromSeed": {
"message": "Obnovi iz seed phrase"
},
"required": {
"message": "Zahtevano"
},
"retryWithMoreGas": {
"message": "Poskusi z višjim gas price"
},
"revealSeedWords": {
"message": "Prikaži seed words"
},
"revealSeedWordsWarning": {
"message": "Ne obnovite seed words na javnem mestu! Te besede se lahko uporabijo za krajo vseh vaših računov."
},
"revert": {
"message": "Povrni"
},
"rinkeby": {
"message": "Testno omrežje Rinkeby"
},
"ropsten": {
"message": "Testno omrežje Ropsten"
},
"sampleAccountName": {
"message": "npr. Moj nov račun",
"description": "Help user understand concept of adding a human-readable name to their account"
},
"save": {
"message": "Shrani"
},
"saveAsFile": {
"message": "Shrani kot datoteko",
"description": "Account export process"
},
"saveSeedAsFile": {
"message": "Shrani seed words kot datoteko"
},
"search": {
"message": "Iskanje"
},
"secretPhrase": {
"message": "Tukaj vnesite svoje seed words, da obnovite svoje račune."
},
"seedPhraseReq": {
"message": "seed phrases so dolgi 12 besed"
},
"select": {
"message": "Izberi"
},
"selectCurrency": {
"message": "Izberi valuto"
},
"selectService": {
"message": "Izberi storitev"
},
"selectType": {
"message": "Izberi vrsto"
},
"send": {
"message": "Pošlji"
},
"sendETH": {
"message": "Pošlji ETH"
},
"sendTokens": {
"message": "Pošlji žetone"
},
"sendTokensAnywhere": {
"message": "Pošljite žetone vsem, ki imajo Ethereum račun"
},
"settings": {
"message": "Nastavitve"
},
"shapeshiftBuy": {
"message": "Kupite z Shapeshift"
},
"showPrivateKeys": {
"message": "Prikaži zasebne ključe"
},
"showQRCode": {
"message": "Prikaži QR kodo"
},
"sign": {
"message": "Podpiši"
},
"signMessage": {
"message": "Podpiši sporočilo"
},
"signNotice": {
"message": "To podpisovanje lahko povzroči \nnevarne stranske učinke. Podpisujte samo sporočila \nstrani, ki jim zaupate s svojim celotnim računom.\n Ta nevarna funkcija bo odstranjena v prihodnji različici. "
},
"sigRequest": {
"message": "Zahteva za podpis"
},
"sigRequested": {
"message": "Podpis je zahtevan"
},
"spaceBetween": {
"message": "med besedami je lahko samo presledek"
},
"status": {
"message": "Status"
},
"stateLogs": {
"message": "State dnevniki"
},
"stateLogsDescription": {
"message": "State dnevniki vsebujejo naslove vašega računa in poslane transakcije.."
},
"submit": {
"message": "Potrdi"
},
"supportCenter": {
"message": "Obiščite našo podporo"
},
"symbolBetweenZeroTen": {
"message": "Simbol mora biti dolg od 0 do 10 znakov."
},
"takesTooLong": {
"message": "Traja predolgo?"
},
"terms": {
"message": "Pogoji uporabe"
},
"testFaucet": {
"message": "Testni faucet"
},
"to": {
"message": "Za"
},
"toETHviaShapeShift": {
"message": "$1 v ETH prek ShapeShift",
"description": "system will fill in deposit type in start of message"
},
"tokenAddress": {
"message": "Naslov žetona"
},
"tokenAlreadyAdded": {
"message": "Žeton je že bil dodan."
},
"tokenBalance": {
"message": "Vaš znesek žetona:"
},
"tokenSelection": {
"message": "Poiščite žetone ali jih izberite z našega seznama priljubljenih žetonov."
},
"tokenSymbol": {
"message": "Simbol žetona"
},
"tokenWarning1": {
"message": "Spremljajte žetone, ki ste jih kupili s svojim MetaMask računom. Če ste kupili žetone z drugačnim računom, ti žetoni ne bodo prikazani tukaj."
},
"total": {
"message": "Skupno"
},
"transactions": {
"message": "transakcije"
},
"transactionMemo": {
"message": "Opis transakcije (ni zahtevano)"
},
"transactionNumber": {
"message": "Številka transakcije"
},
"transfers": {
"message": "Prenosi"
},
"troubleTokenBalances": {
"message": "Imeli smo težave pri nalaganju vaših žetonov. Ogledate si jih lahko ",
"description": "Followed by a link (here) to view token balances"
},
"twelveWords": {
"message": "Edini način za obnovitev MetaMask računa, je teh 12 besed.\nShranite jih na varno in skrivno mesto."
},
"typePassword": {
"message": "Vpišite vaše geslo"
},
"uiWelcome": {
"message": "Dobrodošli v novem uporabniškem vmesniku (Beta)"
},
"uiWelcomeMessage": {
"message": "Zdaj uporabljate novi MetaMask uporabniški vmesnik. Razglejte se, preizkusite nove funkcije, kot so pošiljanje žetonov, in nas obvestite, če imate kakšne težave."
},
"unavailable": {
"message": "Ni na voljo"
},
"unknown": {
"message": "Neznano"
},
"unknownNetwork": {
"message": "Neznano zasebno omrežje"
},
"unknownNetworkId": {
"message": "Neznan ID omrežja"
},
"uriErrorMsg": {
"message": "URI-ji zahtevajo ustrezno HTTP/HTTPS predpono."
},
"usaOnly": {
"message": "Samo za ZDA",
"description": "Using this exchange is limited to people inside the USA"
},
"usedByClients": {
"message": "Uporablja jih več različnih odjemalcev"
},
"useOldUI": {
"message": "Uporabi star uporabniški vmesnik"
},
"validFileImport": {
"message": "Za uvoz morate izbrati pravilno datoteko."
},
"vaultCreated": {
"message": "Račun je ustvarjen"
},
"viewAccount": {
"message": "Poglej račun"
},
"visitWebSite": {
"message": "Obiščite našo spletno stran"
},
"warning": {
"message": "Opozorilo"
},
"welcomeBeta": {
"message": "Dobrodošli v MetaMask Beta"
},
"whatsThis": {
"message": "Kaj je to?"
},
"yourSigRequested": {
"message": "Vaš podpis je bil zahtevan"
},
"youSign": {
"message": "Podpisani ste"
}
}

@ -0,0 +1,819 @@
{
"accept": {
"message": "ยอมรบ"
},
"account": {
"message": "บญช"
},
"accountDetails": {
"message": "รายละเอยดบญช"
},
"accountName": {
"message": "ชอบญช"
},
"address": {
"message": "แอดเดรส"
},
"addCustomToken": {
"message": "เพมโทเคนดวยตวเอง"
},
"addToken": {
"message": "เพมโทเคน"
},
"addTokens": {
"message": "เพมหลายโทเคน"
},
"amount": {
"message": "จำนวน"
},
"amountPlusGas": {
"message": "จำนวน + แกส"
},
"appDescription": {
"message": "สวนขยายเบราวเซอรสำหรบอเธอเรยม",
"description": "The description of the application"
},
"appName": {
"message": "MetaMask",
"description": "The name of the application"
},
"attemptingConnect": {
"message": "กำลงเชอมตอกบบลอกเชน"
},
"attributions": {
"message": "อางถง"
},
"available": {
"message": "วาง"
},
"back": {
"message": "กลบ"
},
"balance": {
"message": "ยอดคงเหลอ:"
},
"balances": {
"message": "ยอดคงเหลอของคณ"
},
"balanceIsInsufficientGas": {
"message": "ยอดคงเหลอไมพอสำหรบจายคาแกสทงหมด"
},
"beta": {
"message": "เบตา"
},
"betweenMinAndMax": {
"message": "ตองมากกวาหรอเทากบ $1 และนอยกวาหรอเทากบ $2",
"description": "helper for inputting hex as decimal input"
},
"blockiesIdenticon": {
"message": "ใชงาน Blockies Identicon"
},
"borrowDharma": {
"message": "ยมดวย Dharma (เบตา)"
},
"builtInCalifornia": {
"message": "MetaMask ออกแบบและพฒนาทแคลฟอรเนย"
},
"buy": {
"message": "ซอ"
},
"buyCoinbase": {
"message": "ซอดวย Coinbase"
},
"buyCoinbaseExplainer": {
"message": "Coinbase เปนแหลงซอขายบตคอยนไลทคอยนและอเธอเรยมทไดบความนยมสงสดในโลก"
},
"cancel": {
"message": "ยกเลก"
},
"classicInterface": {
"message": "ใชหนาตาแบบเกา"
},
"clickCopy": {
"message": "กดเพอคดลอก"
},
"confirm": {
"message": "ยนยน"
},
"confirmContract": {
"message": "ยนยนสญญา"
},
"confirmPassword": {
"message": "ยนยนรหสผาน"
},
"confirmTransaction": {
"message": "ยนยนการทำรายการธรกรรม"
},
"continue": {
"message": "ทำตอไป"
},
"continueToCoinbase": {
"message": "ไปท Coinbase"
},
"contractDeployment": {
"message": "การตดตงสญญา"
},
"conversionProgress": {
"message": "กำลงดำเนนการแปลงหนวย"
},
"copiedButton": {
"message": "คดลอกแลว"
},
"copiedClipboard": {
"message": "คดลอกไปทคลบบอรดแลว"
},
"copiedExclamation": {
"message": "คดลอกแลว!"
},
"copiedSafe": {
"message": "ฉนไดดลอกเกบไวในทปลอดภยเรยบรอยแลว"
},
"copy": {
"message": "คดลอก"
},
"copyToClipboard": {
"message": "คดลอกไปคลปบอรด"
},
"copyButton": {
"message": " คดลอก "
},
"copyPrivateKey": {
"message": "นอควนตวของคณ(กดเพอคดลอก)"
},
"create": {
"message": "สราง"
},
"createAccount": {
"message": "สรางบญช"
},
"createDen": {
"message": "สราง"
},
"crypto": {
"message": "ครปโต",
"description": "Exchange type (cryptocurrencies)"
},
"currentConversion": {
"message": "อตราแลกเปลยนปจจน"
},
"currentNetwork": {
"message": "เครอขายปจจน"
},
"customGas": {
"message": "กำหนดคาแกสเอง"
},
"customize": {
"message": "กำหนดคาเอง"
},
"customRPC": {
"message": "กำหนดคา RPC เอง"
},
"decimalsMustZerotoTen": {
"message": "จำนวนตองมากกวา 0 และไมเกน 36"
},
"decimal": {
"message": "ตำแหนงของทศนยม"
},
"defaultNetwork": {
"message": "คาเรมตนของเครอขายสำหรบทำรายการธรกรรมอเธอรอ Main Net"
},
"denExplainer": {
"message": "DEN ของคณคอตวเกบขอมลทเขารหสไววยรหสผานของคณภายใน MetaMask "
},
"deposit": {
"message": "ฝาก"
},
"depositBTC": {
"message": "ฝากบตคอยนของคณไปทแอดเดรสดานลางน:"
},
"depositCoin": {
"message": "ฝาก $1 ของคณไปทแอดเดรสดานลางน:",
"description": "Tells the user what coin they have selected to deposit with shapeshift"
},
"depositEth": {
"message": "การฝากอเธอร"
},
"depositEther": {
"message": "การฝากอเธอร"
},
"depositFiat": {
"message": "ฝากดวยเงนตรา"
},
"depositFromAccount": {
"message": "ฝากจากบญชน"
},
"depositShapeShift": {
"message": "ฝากดวย ShapeShift"
},
"depositShapeShiftExplainer": {
"message": "ถามเงนสกลอนอยสามารถแลกเงนและฝากเปนอเธอรไดโดยตรงเขากระเปา MetaMask ไดเลยไมองสมครบญช"
},
"details": {
"message": "รายละเอยด"
},
"directDeposit": {
"message": "ฝากตรง"
},
"directDepositEther": {
"message": "ฝากอเธอรโดยตรง"
},
"directDepositEtherExplainer": {
"message": "ถาคณมเธอรอยแลววการทเรวทดในการเอาเงนเขากระเปาใหมอการโอนตรงๆ"
},
"done": {
"message": "เสรจสน"
},
"downloadStatelogs": {
"message": "ดาวนโหลดลอกสถานะ"
},
"edit": {
"message": "แกไข"
},
"editAccountName": {
"message": "แกไขชอบญช"
},
"emailUs": {
"message": "อเมลหาเรา!"
},
"encryptNewDen": {
"message": "เขารหส DEN ของคณ"
},
"enterPassword": {
"message": "ใสรหสผาน"
},
"enterPasswordConfirm": {
"message": "ใสรหสผานอกครงเพอยนยน"
},
"etherscanView": {
"message": "ดญชบน Etherscan"
},
"exchangeRate": {
"message": "อตราแลกเปลยน"
},
"exportPrivateKey": {
"message": "สงออกควนตว"
},
"exportPrivateKeyWarning": {
"message": "สงออกควนตวโดยคณรบความเสยงเอง"
},
"failed": {
"message": "ลมเหลว"
},
"fiat": {
"message": "เงนตรา",
"description": "Exchange type"
},
"fileImportFail": {
"message": "นำเขาไฟลไมสำเหรจ กดท!",
"description": "Helps user import their account from a JSON file"
},
"followTwitter": {
"message": "ตดตามเราบนทวตเตอร"
},
"from": {
"message": "จาก"
},
"fromToSame": {
"message": "แอดเดรสทงกบทบจะตองไมไชนเดยวกน"
},
"fromShapeShift": {
"message": "จาก ShapeShift"
},
"gas": {
"message": "แกส",
"description": "Short indication of gas cost"
},
"gasFee": {
"message": "คาแกส"
},
"gasLimit": {
"message": "วงเงนแกส"
},
"gasLimitCalculation": {
"message": "เราแนะนำวงเงนแกสตามความสำเรจบนเครอขาย"
},
"gasLimitRequired": {
"message": "ตองกำหนดวงเงนแกส"
},
"gasLimitTooLow": {
"message": "วงเงนแกสตองอยางนอย 21000"
},
"generatingSeed": {
"message": "กำลงสรางชด..."
},
"gasPrice": {
"message": "ราคาแกส (GWEI)"
},
"gasPriceCalculation": {
"message": "เราแนะนำราคาแกสตามความสำเรจบนเครอขาย"
},
"gasPriceRequired": {
"message": "ตองมราคาแกส"
},
"getEther": {
"message": "รบอเธอร"
},
"getEtherFromFaucet": {
"message": "รบอเธอรปลอยจาก $1",
"description": "Displays network name for Ether faucet"
},
"greaterThanMin": {
"message": "ตองมากกวาหรอเทากบ $1.",
"description": "helper for inputting hex as decimal input"
},
"here": {
"message": "ท",
"description": "as in -click here- for more information (goes with troubleTokenBalances)"
},
"hereList": {
"message": "รายการอย!!!!"
},
"hide": {
"message": "ซอน"
},
"hideToken": {
"message": "ซอนโทเคน"
},
"hideTokenPrompt": {
"message": "ซอนโทเคนหรอไม?"
},
"howToDeposit": {
"message": "คณตองการฝากอเธอรอยางไร?"
},
"holdEther": {
"message": "ชวยคณถออเทอรและโทเคนและทำหนาทเปนสะพานเชอมตอกบแอพพลเคชนแบบกระจาย"
},
"import": {
"message": "นำเขา",
"description": "Button to import an account from a selected file"
},
"importAccount": {
"message": "นำเขาบญช"
},
"importAccountMsg": {
"message":"บญชนำเขาจะไมกรวมกบบญชสรางดวยคำเเรมตนบนเมตามารสในตอนแรก เรยนรเพมเตมเกยวกบบญชนำเขา"
},
"importAnAccount": {
"message": "นำเขาบญช"
},
"importDen": {
"message": "นำเขา DEN ทอยแลว"
},
"imported": {
"message": "นำเขาเรยบรอย",
"description": "status showing that an account has been fully loaded into the keyring"
},
"infoHelp": {
"message": "ขอมลและความชวยเหลอ"
},
"insufficientFunds": {
"message": "เงนทนไมเพยงพอ"
},
"insufficientTokens": {
"message": "โทเคนไมเพยงพอ"
},
"invalidAddress": {
"message": "แอดแดรสไมกตอง"
},
"invalidAddressRecipient": {
"message": "แอดแดรสผบไมกตอง"
},
"invalidGasParams": {
"message": "ตงคาแกสไมกตอง"
},
"invalidInput": {
"message": "อนพทไมกตอง"
},
"invalidRequest": {
"message": "คำรองขอไมกตอง"
},
"invalidRPC": {
"message": "RPC URI ไมกตอง"
},
"jsonFail": {
"message": "เกดบางอยางผดพลาด โปรดตรวจสอบวาไฟล JSON ของคณมปแบบทกตอง."
},
"jsonFile": {
"message": "ไฟล JSON",
"description": "format for importing an account"
},
"kovan": {
"message": "เครอขายทดสอบ Kovan"
},
"knowledgeDataBase": {
"message": "ไปทคลงความรของเรา"
},
"lessThanMax": {
"message": "ตองนอยกวาหรอเทากบ $1.",
"description": "helper for inputting hex as decimal input"
},
"likeToAddTokens": {
"message": "คณตองการเพมโทเคนเหลานหรอไม?"
},
"limit": {
"message": "ขอจำกด"
},
"loading": {
"message": "กำลงโหลด..."
},
"loadingTokens": {
"message": "กำลงโหลดโทเคน..."
},
"localhost": {
"message": "Localhost 8545"
},
"login": {
"message": "เขาสระบบ"
},
"logout": {
"message": "ออกจากระบบ"
},
"loose": {
"message": "อสระ"
},
"loweCaseWords": {
"message": "กลมคำชดมเพยงตวพมพเลกเทานน"
},
"mainnet": {
"message": "เครอขาย Main Net"
},
"message": {
"message": "ขอความ"
},
"metamaskDescription": {
"message": "MetaMask คอทเกบตวตนนรภยสำหรบอเธอเรยม"
},
"min": {
"message": "ขนตำ"
},
"myAccounts": {
"message": "บญชของฉน"
},
"mustSelectOne": {
"message": "ตองเลอกอยางนอย 1 โทเคน"
},
"needEtherInWallet": {
"message": "คณจะตองมเธอรในกระเปาเงนของคณในการใชงานกบแอพพลเคชนแบบกระจายดวย MetaMask"
},
"needImportFile": {
"message": "คณตองเลอกไฟลจะนำเขา",
"description": "User is important an account and needs to add a file to continue"
},
"needImportPassword": {
"message": "คณตองปอนรหสผานสำหรบไฟลเลอก",
"description": "Password and file needed to import an account"
},
"negativeETH": {
"message": "ไมสามารถสงอเธอรเปนจำนวนตดลบได"
},
"networks": {
"message": "เครอขาย"
},
"newAccount": {
"message": "บญชใหม"
},
"newAccountNumberName": {
"message": "บญช $1",
"description": "Default name of next account to be created on create account screen"
},
"newContract": {
"message": "สรางสญญาใหม"
},
"newPassword": {
"message": "รหสผานใหม(ขนตำ 8 ตวอกษร)"
},
"newRecipient": {
"message": "ผบใหม"
},
"newRPC": {
"message": "RPC URL ใหม"
},
"next": {
"message": "ถดไป"
},
"noAddressForName": {
"message": "ยงไมแอดแดรสไหนตงในชอน"
},
"noDeposits": {
"message": "ไมเงนฝากเขามา"
},
"noTransactionHistory": {
"message": "ไมรายการธรกรรมในอดต"
},
"noTransactions": {
"message": "ยงไมรายการธรกรรม"
},
"notStarted": {
"message": "ยงไมเรม"
},
"oldUI": {
"message": "หนาตาแบบเกา"
},
"oldUIMessage": {
"message": "คณไดเปลยนเปนหนาตาแบบเกาแลว คณสามารถเปลยนเปนหนาตาแบบใหมไดโดยไปทวเลอกตรงเมนมขวาบน"
},
"or": {
"message": "หรอ",
"description": "choice between creating or importing a new account"
},
"passwordCorrect": {
"message": "โปรดตรวจสอบวารหสผานของคณถกตอง"
},
"passwordMismatch": {
"message": "รหสผานไมตรงกน",
"description": "in password creation process, the two new password fields did not match"
},
"passwordShort": {
"message": "รหสผานไมยาวพอ",
"description": "in password creation process, the password is not long enough to be secure"
},
"pastePrivateKey": {
"message": "วางควนตวของคณท:",
"description": "For importing an account from a private key"
},
"pasteSeed": {
"message": "วางคำชดของคณท!"
},
"personalAddressDetected": {
"message": "ตรวจพบแอดแดรสสวนตวแลว ใสแอดแดรสสญญาโทเคน"
},
"pleaseReviewTransaction": {
"message": "โปรดตรวจสอบธรกรรมของคณ"
},
"privacyMsg": {
"message": "นโยบายสความเปนสวนตว"
},
"privateKey": {
"message": "ควนตว",
"description": "select this type of file to use to import an account"
},
"privateKeyWarning": {
"message": "คำเตอน: หามเปดเผยคกคนทวนตวสามารถขโมยขอมลใด ๆ ทเกบไวในบญชของคณได"
},
"privateNetwork": {
"message": "เครอขายสวนตว"
},
"qrCode": {
"message": "แสดง QR Code"
},
"readdToken": {
"message": "คณสามารถเพมโทเคนนในอนาคตไดโดยไปท “เพมโทเคน” ในเมนวเลอกบญชของคณ"
},
"readMore": {
"message": "อานเพมเตมท"
},
"readMore2": {
"message": "อานเพมเตม"
},
"receive": {
"message": "รบ"
},
"recipientAddress": {
"message": "แอดแดรสผบ"
},
"refundAddress": {
"message": "แอดแดรสสำหรบการคนเงนของคณ"
},
"rejected": {
"message": "ถกปฏเสธ"
},
"resetAccount": {
"message": "รเซตบญช"
},
"restoreFromSeed": {
"message": "กนจากกลมคำชด"
},
"required": {
"message": "จำเปน"
},
"retryWithMoreGas": {
"message": "ลองใหมวยราคาแกสทงกวาน"
},
"revealSeedWords": {
"message": "เปดเผยกลมคำชด"
},
"revealSeedWordsWarning": {
"message": "อยาเปดเผยคำกลมคำชดของคณในทสาธารณะ! คำเหลานสามารถใชเพอขโมยบญชงหมดของคณ"
},
"revert": {
"message": "ยอนกลบ"
},
"rinkeby": {
"message": "เครอขายทดสอบ Rinkeby"
},
"ropsten": {
"message": "เครอขายทดสอบ Ropsten"
},
"sampleAccountName": {
"message": "เชน บญชเฮงเฮงของฉน",
"description": "Help user understand concept of adding a human-readable name to their account"
},
"save": {
"message": "บนทก"
},
"saveAsFile": {
"message": "บนทกเปนไฟล",
"description": "Account export process"
},
"saveSeedAsFile": {
"message": "บนทกกลมคำชดเปนไฟล"
},
"search": {
"message": "คนหา"
},
"secretPhrase": {
"message": "ปอนกลมคำสบสองคำเพอกนตเซฟของคณ"
},
"seedPhraseReq": {
"message": "กลมคำชดมความยาว 12 คำ"
},
"select": {
"message": "เลอก"
},
"selectCurrency": {
"message": "เลอกสกลเงน"
},
"selectService": {
"message": "เลอกบรการ"
},
"selectType": {
"message": "เลอกประเภท"
},
"send": {
"message": "สง"
},
"sendETH": {
"message": "สงอเธอร"
},
"sendTokens": {
"message": "สงโทเคน"
},
"sendTokensAnywhere": {
"message": "สงโทเคนไปใหกคนทญชเธอเรยม"
},
"settings": {
"message": "การตงคา"
},
"shapeshiftBuy": {
"message": "ซอดวย Shapeshift"
},
"showPrivateKeys": {
"message": "แสดงควนตว"
},
"showQRCode": {
"message": "แสดง QR Code"
},
"sign": {
"message": "เซนชอ"
},
"signMessage": {
"message": "เซนชอในขอความ"
},
"signNotice": {
"message": "การเซนชอในขอความนอาจจะเปนอนตรายได \nเซนชอเฉพาะขอความจากแหลงทณไววางใจไดจรง ๆ เทานน \nวนตรายนจะถกลบออกในอนาคต"
},
"sigRequest": {
"message": "ขอลายเซน"
},
"sigRequested": {
"message": "ขอลายเซนแลว"
},
"spaceBetween": {
"message": "มองวางไดเพยงตวเดยวระหวางคำเทานน"
},
"status": {
"message": "สถานะ"
},
"stateLogs": {
"message": "บนทกของสถานะ"
},
"stateLogsDescription": {
"message": "บนทกของสถานะประกอบดวยแอดแดรสสาธารณะและธรกรรมทง"
},
"submit": {
"message": "ตกลง"
},
"supportCenter": {
"message": "ไปทนยสนบสนนของเรา"
},
"symbolBetweenZeroTen": {
"message": "สญลกษณองมความยาวตงแต 0 ถง 10 อกขระ"
},
"takesTooLong": {
"message": "ใชเวลานานเกนไปใชหรอไม?"
},
"terms": {
"message": "ขอตกลงในการใชงาน"
},
"testFaucet": {
"message": "ตวแจกจายเพอการทดสอบ"
},
"to": {
"message": "ถง"
},
"toETHviaShapeShift": {
"message": "$1 เปนอเธอรโดย ShapeShift",
"description": "system will fill in deposit type in start of message"
},
"tokenAddress": {
"message": "แอดแดรสโทเคน"
},
"tokenAlreadyAdded": {
"message": "โทเคนไดกเพมไปแลว"
},
"tokenBalance": {
"message": "ยอดโทเคนคงเหลอของคณคอ:"
},
"tokenSelection": {
"message": "คนหาโทเคนหรอเลอกจากรายการโทเคนยอดนยมของเรา"
},
"tokenSymbol": {
"message": "สญลกษณประจำตว"
},
"tokenWarning1": {
"message": "ตดตามโทเคนทณซอดวยบญช MetaMask ของคณ หากคณซอโทเคนโดยใชญชนโทเคนเหลานนจะไมปรากฏท"
},
"total": {
"message": "รวม"
},
"transactions": {
"message": "ธรกรรม"
},
"transactionMemo": {
"message": "บนทกชวยจำของการทำธรกรรม (ไมงคบ)"
},
"transactionNumber": {
"message": "หมายเลขธรกรรม"
},
"transfers": {
"message": "โอน"
},
"troubleTokenBalances": {
"message": "เรามญหาในการโหลดยอดโทเคนคงเหลอของคณ คณสามารถดได",
"description": "Followed by a link (here) to view token balances"
},
"twelveWords": {
"message": "กลมคำ 12 คำเหลานเปนวเดยวทจะกนบญช MetaMask ของคณ \n กรณาเกบไวในทปลอดภยและเกบเปนความลบ"
},
"typePassword": {
"message": "พมพรหสผานของคณ"
},
"uiWelcome": {
"message": "ยนดอนรบสหนาตาใหม (เบตา)"
},
"uiWelcomeMessage": {
"message": "ขณะนณใชงาน Metamask หนาตาใหมแลว ลองใชความสามรถใหม ๆ เชนการสงโทเคนและหากพบปญหากรณาแจงใหเราทราบ"
},
"unavailable": {
"message": "ใชงานไมได"
},
"unknown": {
"message": "ไมก"
},
"unknownNetwork": {
"message": "ไมกเครอขายสวนตว"
},
"unknownNetworkId": {
"message": "ไมกหมายเลขเครอขาย"
},
"uriErrorMsg": {
"message": "URI ตองมคำนำหนาเปน HTTP หรอ HTTPS"
},
"usaOnly": {
"message": "ในสหรฐอเมรกาเทานน",
"description": "Using this exchange is limited to people inside the USA"
},
"usedByClients": {
"message": "ถกใชงานโดยหลายไคลเอนท"
},
"useOldUI": {
"message": "ใชหนาตาเกา"
},
"validFileImport": {
"message": "คณตองเลอกไฟลกตองเพอนำเขา"
},
"vaultCreated": {
"message": "สรางตเซฟแลว"
},
"viewAccount": {
"message": "ดญช"
},
"visitWebSite": {
"message": "เยยมชมเวบไซตของเรา"
},
"warning": {
"message": "คำเตอน"
},
"welcomeBeta": {
"message": "ยนดอนรบส MetaMask เบตา"
},
"whatsThis": {
"message": "นออะไร?"
},
"yourSigRequested": {
"message": "ลายเซนของคณกำลงไดบการรองขอ"
},
"youSign": {
"message": "คณกำลงเซนชอ"
}
}

@ -0,0 +1,864 @@
{
"accept": {
"message": "接受"
},
"account": {
"message": "帳戶"
},
"accountDetails": {
"message": "帳戶詳情"
},
"accountName": {
"message": "帳戶名稱"
},
"address": {
"message": "帳戶地址"
},
"addCustomToken": {
"message": "加入自訂代幣"
},
"addToken": {
"message": "加入代幣"
},
"addTokens": {
"message": "加入多筆代幣"
},
"amount": {
"message": "數額"
},
"amountPlusGas": {
"message": "數額 + Gas"
},
"appDescription": {
"message": "乙太坊瀏覽器擴充插件",
"description": "The description of the application"
},
"appName": {
"message": "MetaMask",
"description": "The name of the application"
},
"approved": {
"message": "已同意"
},
"attemptingConnect": {
"message": "正在嘗試連接區塊鏈。"
},
"attributions": {
"message": "來源"
},
"available": {
"message": "可使用"
},
"back": {
"message": "上一頁"
},
"balance": {
"message": "餘額:"
},
"balances": {
"message": "你的餘額:"
},
"balanceIsInsufficientGas": {
"message": "當前餘額不足以支付 Gas"
},
"beta": {
"message": "BETA"
},
"betweenMinAndMax": {
"message": "必須大於等於 $1 並且小於等於 $2 。",
"description": "helper for inputting hex as decimal input"
},
"blockiesIdenticon": {
"message": "使用 Blockies Identicon"
},
"borrowDharma": {
"message": "透過 Dharma (Beta) 借用"
},
"builtInCalifornia": {
"message": "MetaMask 是在加州設計製造."
},
"buy": {
"message": "購買"
},
"buyCoinbase": {
"message": "在 Coinbase 上購買"
},
"buyCoinbaseExplainer": {
"message": "Coinbase 是世界上最流行的買賣比特幣,以太幣和萊特幣的交易所。"
},
"ok": {
"message": "Ok"
},
"cancel": {
"message": "取消"
},
"classicInterface": {
"message": "使用舊版界面"
},
"clickCopy": {
"message": "點擊複製"
},
"confirm": {
"message": "確認"
},
"confirmed": {
"message": "已確認"
},
"confirmContract": {
"message": "確認合約"
},
"confirmPassword": {
"message": "確認密碼"
},
"confirmTransaction": {
"message": "確認交易"
},
"continue": {
"message": "繼續"
},
"continueToCoinbase": {
"message": "繼續前往 Coinbase"
},
"contractDeployment": {
"message": "合約部署"
},
"conversionProgress": {
"message": "正在取得匯率"
},
"copiedButton": {
"message": "已複製"
},
"copiedClipboard": {
"message": "已複製到剪貼簿"
},
"copiedExclamation": {
"message": "已複製!"
},
"copiedSafe": {
"message": "我已經複製到某個安全的地方了"
},
"copy": {
"message": "複製"
},
"copyToClipboard": {
"message": "複製到剪貼簿"
},
"copyButton": {
"message": " 複製 "
},
"copyPrivateKey": {
"message": "這是你的私鑰(點擊複製)"
},
"create": {
"message": "建立"
},
"createAccount": {
"message": "建立帳戶"
},
"createDen": {
"message": "建立"
},
"crypto": {
"message": "加密",
"description": "Exchange type (cryptocurrencies)"
},
"currentConversion": {
"message": "當前匯率"
},
"currentNetwork": {
"message": "當前網路"
},
"customGas": {
"message": "自訂 Gas"
},
"customize": {
"message": "自訂"
},
"customRPC": {
"message": "自訂 RPC"
},
"decimalsMustZerotoTen": {
"message": "小數點後位數至少為0, 最多為36."
},
"decimal": {
"message": "小數點精度"
},
"defaultNetwork": {
"message": "預設Ether交易網路為主網(Main Net)。"
},
"denExplainer": {
"message": "你的 DEN 是在你的 MetaMask 中的加密密碼儲存庫。"
},
"deposit": {
"message": "存入"
},
"depositBTC": {
"message": "將你的 BTC 存入到下面的地址:"
},
"depositCoin": {
"message": "將你的 $1 存入到下面的地址",
"description": "Tells the user what coin they have selected to deposit with shapeshift"
},
"depositEth": {
"message": "存入 Eth"
},
"depositEther": {
"message": "存入 Ether"
},
"depositFiat": {
"message": "從法定貨幣存入"
},
"depositFromAccount": {
"message": "從其他帳戶存入"
},
"depositShapeShift": {
"message": "從 ShapeShift 存入"
},
"depositShapeShiftExplainer": {
"message": "如果你擁有其他加密貨幣,你可以直接交易並存入 Ether 到你的MetaMask錢包。不需要開帳戶。"
},
"details": {
"message": "詳情"
},
"directDeposit": {
"message": "直接存入"
},
"directDepositEther": {
"message": "直接存入 Ether"
},
"directDepositEtherExplainer": {
"message": "如果你已經擁有了一些Ether,使用直接存入功能是讓你的新錢包最快取得Ether的方式。"
},
"done": {
"message": "完成"
},
"downloadStatelogs": {
"message": "下載狀態紀錄"
},
"dropped": {
"message": "丟棄"
},
"edit": {
"message": "編輯"
},
"editAccountName": {
"message": "編輯帳戶名稱"
},
"emailUs": {
"message": "寄 Email 給我們!"
},
"encryptNewDen": {
"message": "加密你的新 DEN"
},
"enterPassword": {
"message": "請輸入密碼"
},
"enterPasswordConfirm": {
"message": "請再次輸入密碼確認"
},
"passwordNotLongEnough": {
"message": "您所輸入的密碼長度不足"
},
"passwordsDontMatch": {
"message": "您所輸入的密碼不一致"
},
"etherscanView": {
"message": "在 Etherscan 上查看帳戶"
},
"exchangeRate": {
"message": "匯率"
},
"exportPrivateKey": {
"message": "導出私鑰"
},
"exportPrivateKeyWarning": {
"message": "您需要自行負擔導出私鑰產生的風險"
},
"failed": {
"message": "失败"
},
"fiat": {
"message": "FIAT",
"description": "Exchange type"
},
"fileImportFail": {
"message": "檔案導入失敗?點擊這裡!",
"description": "Helps user import their account from a JSON file"
},
"from": {
"message": "來源地址"
},
"fromToSame": {
"message": "來源和目的地址不能一樣"
},
"fromShapeShift": {
"message": "來自 ShapeShift"
},
"gas": {
"message": "Gas",
"description": "Short indication of gas cost"
},
"gasFee": {
"message": "Gas 費用"
},
"gasLimit": {
"message": "Gas 上限"
},
"gasLimitCalculation": {
"message": "我們根據網路成功率算出建議的 Gas 上限。"
},
"gasLimitRequired": {
"message": "必需填寫 Gas 上限"
},
"gasLimitTooLow": {
"message": "Gas 上限至少為 21000"
},
"gasPrice": {
"message": "Gas 價格 (GWEI)"
},
"gasPriceCalculation": {
"message": "我們根據網路成功率算出建議的 Gas 價格"
},
"gasPriceRequired": {
"message": "必需填寫 Gas 價格"
},
"getEther": {
"message": "取得 Ether"
},
"getEtherFromFaucet": {
"message": "從水管取得$1 Ether",
"description": "Displays network name for Ether faucet"
},
"greaterThanMin": {
"message": "必須要大於等於 $1。",
"description": "helper for inputting hex as decimal input"
},
"here": {
"message": "這裡",
"description": "as in -click here- for more information (goes with troubleTokenBalances)"
},
"hereList": {
"message": "Here's a list!!!!"
},
"hide": {
"message": "隱藏"
},
"hideToken": {
"message": "隱藏代幣"
},
"hideTokenPrompt": {
"message": "隱藏代幣?"
},
"howToDeposit": {
"message": "你想怎麼存入 Ether?"
},
"holdEther": {
"message": "Metamask 讓您能保存 ether 和代幣, 並成為您接觸分散式應用程式的途徑."
},
"import": {
"message": "導入",
"description": "Button to import an account from a selected file"
},
"importAccount": {
"message": "導入帳戶"
},
"importAnAccount": {
"message": "導入一個帳戶"
},
"importDen": {
"message": "導入現成的 DEN"
},
"imported": {
"message": "已導入私鑰",
"description": "status showing that an account has been fully loaded into the keyring"
},
"infoHelp": {
"message": "說明 & 資訊"
},
"insufficientFunds": {
"message": "資金不足."
},
"insufficientTokens": {
"message": "代幣不足."
},
"invalidAddress": {
"message": "錯誤的地址"
},
"invalidAddressRecipient": {
"message": "接收地址錯誤"
},
"invalidGasParams": {
"message": "Gas 參數錯誤"
},
"invalidInput": {
"message": "輸入錯誤。"
},
"invalidRequest": {
"message": "無效的請求"
},
"invalidRPC": {
"message": "無效的 RPC URI"
},
"jsonFail": {
"message": "有東西出錯了. 請確認你的 JSON 檔案格式正確."
},
"jsonFile": {
"message": "JSON 檔案",
"description": "format for importing an account"
},
"kovan": {
"message": "Kovan 測試網路"
},
"knowledgeDataBase": {
"message": "查看我們的知識庫"
},
"max": {
"message": "最大值"
},
"lessThanMax": {
"message": "必須小於等於 $1.",
"description": "helper for inputting hex as decimal input"
},
"likeToAddTokens": {
"message": "您確定要加入這些代幣嗎?"
},
"links": {
"message": "連結"
},
"limit": {
"message": "上限"
},
"loading": {
"message": "載入..."
},
"loadingTokens": {
"message": "載入代幣..."
},
"localhost": {
"message": "Localhost 8545"
},
"logout": {
"message": "登出"
},
"loose": {
"message": "非Metamask帳號"
},
"loweCaseWords": {
"message": "助憶詞僅包含小寫字元"
},
"mainnet": {
"message": "主乙太坊網路"
},
"message": {
"message": "訊息"
},
"metamaskDescription": {
"message": "MetaMask 是Ethereum的安全身份識別金庫."
},
"min": {
"message": "最小"
},
"myAccounts": {
"message": "我的帳戶"
},
"mustSelectOne": {
"message": "必須選擇至少 1 代幣."
},
"needEtherInWallet": {
"message": "要使用 MetaMask 存取 DAPP時,您的錢包中需要有 Ether。"
},
"needImportFile": {
"message": "您必須選擇一個檔案來導入。",
"description": "User is important an account and needs to add a file to continue"
},
"needImportPassword": {
"message": "您必須為選擇好的檔案輸入密碼。",
"description": "Password and file needed to import an account"
},
"networks": {
"message": "網路"
},
"newAccount": {
"message": "新帳戶"
},
"newAccountNumberName": {
"message": "帳戶 $1",
"description": "Default name of next account to be created on create account screen"
},
"newContract": {
"message": "新合約"
},
"newPassword": {
"message": "新密碼(至少8個字)"
},
"newRecipient": {
"message": "新收款人"
},
"newRPC": {
"message": "New RPC URL"
},
"next": {
"message": "下一頁"
},
"noAddressForName": {
"message": "此 ENS 尚未指定地址。"
},
"noDeposits": {
"message": "尚未有存款"
},
"noTransactionHistory": {
"message": "尚未有交易紀錄。"
},
"noTransactions": {
"message": "尚未有交易"
},
"notStarted": {
"message": "尚未開始"
},
"oldUI": {
"message": "舊版界面"
},
"oldUIMessage": {
"message": "你已經切換到舊版界面。可以通過右上方下拉選單中的選項切換回新的使用者界面。"
},
"or": {
"message": "或",
"description": "choice between creating or importing a new account"
},
"passwordMismatch": {
"message": "密碼不一致",
"description": "in password creation process, the two new password fields did not match"
},
"passwordShort": {
"message": "密碼不夠長",
"description": "in password creation process, the password is not long enough to be secure"
},
"pastePrivateKey": {
"message": "請貼上你的私鑰串:",
"description": "For importing an account from a private key"
},
"pasteSeed": {
"message": "請貼上你的助憶詞!"
},
"personalAddressDetected": {
"message": "已偵測到個人地址. 請輸入代幣合約地址."
},
"pleaseReviewTransaction": {
"message": "請檢查你的交易。"
},
"privateKey": {
"message": "私鑰",
"description": "select this type of file to use to import an account"
},
"privateKeyWarning": {
"message": "注意:永遠不要公開這個私鑰。任何取得這把私鑰的人都可以竊取這個帳號中的任何資產。"
},
"privateNetwork": {
"message": "私有網路"
},
"qrCode": {
"message": "顯示 QR Code"
},
"readdToken": {
"message": "之後還可以透過帳戶選單中的“加入代幣”來加入此代幣。"
},
"readMore": {
"message": "了解更多。"
},
"readMore2": {
"message": "了解更多。"
},
"receive": {
"message": "接收"
},
"recipientAddress": {
"message": "接收地址"
},
"refundAddress": {
"message": "你的退款地址"
},
"rejected": {
"message": "拒絕"
},
"resetAccount": {
"message": "重置帳戶"
},
"restoreFromSeed": {
"message": "透過助憶詞重置"
},
"restoreVault": {
"message": "重置金庫"
},
"required": {
"message": "必填"
},
"retryWithMoreGas": {
"message": "改用更高的 Gas 價格重試"
},
"walletSeed": {
"message": "錢包助憶詞"
},
"revealSeedWords": {
"message": "顯示助憶詞"
},
"revealSeedWordsWarning": {
"message": "別在公共場合回復你的助憶詞!這些詞可被用來竊取你的帳戶."
},
"revert": {
"message": "還原"
},
"rinkeby": {
"message": "Rinkeby 測試網路"
},
"ropsten": {
"message": "Ropsten 測試網路"
},
"currentRpc": {
"message": "當前的 RPC"
},
"connectingToMainnet": {
"message": "連線到主 Ethereum 網路"
},
"connectingToRopsten": {
"message": "連線到 Ropsten 測試網路"
},
"connectingToKovan": {
"message": "連線到 Kovan 測試網路"
},
"connectingToRinkeby": {
"message": "連線到 Rinkeby 測試網路"
},
"connectingToUnknown": {
"message": "連線到未知網路"
},
"sampleAccountName": {
"message": "例如:我的新帳戶",
"description": "Help user understand concept of adding a human-readable name to their account"
},
"save": {
"message": "儲存"
},
"saveAsFile": {
"message": "儲存檔案",
"description": "Account export process"
},
"saveSeedAsFile": {
"message": "將助憶詞儲存成檔案"
},
"search": {
"message": "搜尋"
},
"secretPhrase": {
"message": "在此輸入你的12個祕密助憶詞以回復金庫."
},
"newPassword8Chars": {
"message": "新密碼 (至少 8 個字元)"
},
"seedPhraseReq": {
"message": "助憶詞為 12 個詞語"
},
"select": {
"message": "選擇"
},
"selectCurrency": {
"message": "選擇幣別"
},
"selectService": {
"message": "選擇服務"
},
"selectType": {
"message": "選擇類型"
},
"send": {
"message": "發送"
},
"sendETH": {
"message": "發送 ETH"
},
"sendTokens": {
"message": "發送代幣"
},
"onlySendToEtherAddress": {
"message": "只發送 ETH 到乙太坊地址."
},
"sendTokensAnywhere": {
"message": "發送代幣給擁有乙太坊帳戶的任何人"
},
"settings": {
"message": "設定"
},
"info": {
"message": "資訊"
},
"shapeshiftBuy": {
"message": "從 Shapeshift 購買"
},
"showPrivateKeys": {
"message": "顯示私鑰"
},
"showQRCode": {
"message": "顯示 QR Code"
},
"sign": {
"message": "簽名"
},
"signMessage": {
"message": "簽署訊息"
},
"signNotice": {
"message": "簽署此訊息可能會產生危險的副作用。 \n只從你完全信任的網站上簽名。這種危險的方法;將在未來的版本中被移除。"
},
"sigRequest": {
"message": "請求簽署"
},
"sigRequested": {
"message": "已請求簽署"
},
"spaceBetween": {
"message": "there can only be a space between words"
},
"status": {
"message": "狀態"
},
"stateLogs": {
"message": "狀態紀錄"
},
"stateLogsDescription": {
"message": "狀態紀錄包含你的公開帳戶地址和已傳送的交易資訊."
},
"stateLogError": {
"message": "在取得狀態紀錄時發生錯誤."
},
"submit": {
"message": "送出"
},
"submitted": {
"message": "已送出"
},
"supportCenter": {
"message": "造訪我們的協助中心"
},
"symbolBetweenZeroTen": {
"message": "代號必須介於 0 到 10 字元間."
},
"takesTooLong": {
"message": "花費太長時間?"
},
"terms": {
"message": "使用條款"
},
"testFaucet": {
"message": "測試水管"
},
"to": {
"message": "目的帳號"
},
"toETHviaShapeShift": {
"message": "$1 ETH 透過 ShapeShift",
"description": "system will fill in deposit type in start of message"
},
"tokenAddress": {
"message": "代幣地址"
},
"tokenAlreadyAdded": {
"message": "已加入過此代幣。"
},
"tokenBalance": {
"message": "代幣餘額:"
},
"tokenSelection": {
"message": "搜尋代幣或是從熱門代幣列表中選擇。"
},
"tokenSymbol": {
"message": "代幣代號"
},
"tokenWarning1": {
"message": "使用 MetaMask 帳戶追蹤你已購得的代幣。如果你使用不同的帳戶保存購得的代幣,那些代幣就不會出現在這裡。"
},
"total": {
"message": "總量"
},
"transactions": {
"message": "交易紀錄"
},
"transactionMemo": {
"message": "交易備註(選填)"
},
"transactionNumber": {
"message": "交易號碼"
},
"transfers": {
"message": "交易"
},
"troubleTokenBalances": {
"message": "無法取得代幣餘額。您k可以到這裡查看 ",
"description": "Followed by a link (here) to view token balances"
},
"twelveWords": {
"message": "這 12 個單詞是唯一回復你的 MetaMask 帳號的方法。\n將它們儲存到那些安全且隱密的地方吧。"
},
"typePassword": {
"message": "請輸入密碼"
},
"uiWelcome": {
"message": "歡迎使用新版界面 (Beta)"
},
"uiWelcomeMessage": {
"message": "你現在正在使用新的 Metamask 界面。試試諸如發送代幣等新功能,有任何問題請告知我們。"
},
"unapproved": {
"message": "未同意"
},
"unavailable": {
"message": "不可用"
},
"unknown": {
"message": "未知"
},
"unknownNetwork": {
"message": "未知私有網路"
},
"unknownNetworkId": {
"message": "未知網路 ID"
},
"uriErrorMsg": {
"message": "URIs 需要加入適當的 HTTP/HTTPS 前綴."
},
"usaOnly": {
"message": "僅限美國",
"description": "Using this exchange is limited to people inside the USA"
},
"usedByClients": {
"message": "可用於各種不同的客戶端"
},
"useOldUI": {
"message": "使用舊版界面"
},
"validFileImport": {
"message": "您必須選擇一個合法的檔案來導入."
},
"vaultCreated": {
"message": "已建立金庫"
},
"viewAccount": {
"message": "查看帳戶"
},
"visitWebSite": {
"message": "造訪我們的網站"
},
"warning": {
"message": "警告"
},
"welcomeBeta": {
"message": "歡迎到 MetaMask Beta"
},
"whatsThis": {
"message": "這是什麼?"
},
"yourSigRequested": {
"message": "正在請求你的簽署"
},
"youSign": {
"message": "正在簽署"
}
}

@ -1,7 +1,7 @@
{ {
"name": "__MSG_appName__", "name": "__MSG_appName__",
"short_name": "__MSG_appName__", "short_name": "__MSG_appName__",
"version": "4.3.0", "version": "4.4.0",
"manifest_version": 2, "manifest_version": 2,
"author": "https://metamask.io", "author": "https://metamask.io",
"description": "__MSG_appDescription__", "description": "__MSG_appDescription__",

@ -85,7 +85,6 @@ async function loadStateFromPersistence () {
// write to disk // write to disk
if (localStore.isSupported) localStore.set(versionedData) if (localStore.isSupported) localStore.set(versionedData)
diskStore.putState(versionedData)
// return just the data // return just the data
return versionedData.data return versionedData.data
@ -123,7 +122,6 @@ function setupController (initState, initLangCode) {
debounce(1000), debounce(1000),
storeTransform(versionifyData), storeTransform(versionifyData),
storeTransform(syncDataWithExtension), storeTransform(syncDataWithExtension),
asStream(diskStore),
(error) => { (error) => {
log.error('pump hit error', error) log.error('pump hit error', error)
} }

@ -0,0 +1,39 @@
const version = 22
/*
This migration adds submittedTime to the txMeta if it is not their
*/
const clone = require('clone')
module.exports = {
version,
migrate: function (originalVersionedData) {
const versionedData = clone(originalVersionedData)
versionedData.meta.version = version
try {
const state = versionedData.data
const newState = transformState(state)
versionedData.data = newState
} catch (err) {
console.warn(`MetaMask Migration #${version}` + err.stack)
}
return Promise.resolve(versionedData)
},
}
function transformState (state) {
const newState = state
const transactions = newState.TransactionController.transactions
newState.TransactionController.transactions = transactions.map((txMeta) => {
if (txMeta.status !== 'submitted' || txMeta.submittedTime) return txMeta
txMeta.submittedTime = (new Date()).getTime()
return txMeta
})
return newState
}

@ -32,4 +32,5 @@ module.exports = [
require('./019'), require('./019'),
require('./020'), require('./020'),
require('./021'), require('./021'),
require('./022'),
] ]

@ -122,6 +122,10 @@
width: calc(100vw - 80px); width: calc(100vw - 80px);
} }
.unique-image {
width: auto;
}
.create-password__title, .create-password__title,
.unique-image__title, .unique-image__title,
.tou__title, .tou__title,
@ -221,10 +225,6 @@
max-width: 46rem; max-width: 46rem;
} }
.backup-phrase {
width: 100%;
}
.create-password__title, .create-password__title,
.unique-image__title, .unique-image__title,
.tou__title, .tou__title,
@ -674,7 +674,6 @@ button.backup-phrase__confirm-seed-option:hover {
} }
.buy-ether__action-content-wrapper { .buy-ether__action-content-wrapper {
width: 360px;
display: flex; display: flex;
flex-flow: column nowrap; flex-flow: column nowrap;
} }

@ -10,6 +10,7 @@ import ImportSeedPhraseScreen from './import-seed-phrase-screen'
import { import {
onboardingBuyEthView, onboardingBuyEthView,
unMarkPasswordForgotten, unMarkPasswordForgotten,
showModal,
} from '../../../../ui/app/actions' } from '../../../../ui/app/actions'
class FirstTimeFlow extends Component { class FirstTimeFlow extends Component {
@ -80,7 +81,7 @@ class FirstTimeFlow extends Component {
renderScreen () { renderScreen () {
const {SCREEN_TYPE} = FirstTimeFlow const {SCREEN_TYPE} = FirstTimeFlow
const { const {
goToBuyEtherView, openBuyEtherModal,
address, address,
restoreCreatePasswordScreen, restoreCreatePasswordScreen,
forgottenPassword, forgottenPassword,
@ -131,7 +132,7 @@ class FirstTimeFlow extends Component {
case SCREEN_TYPE.BACK_UP_PHRASE: case SCREEN_TYPE.BACK_UP_PHRASE:
return ( return (
<BackupPhraseScreen <BackupPhraseScreen
next={() => goToBuyEtherView(address)} next={() => openBuyEtherModal()}
/> />
) )
default: default:
@ -167,7 +168,7 @@ export default connect(
}), }),
dispatch => ({ dispatch => ({
leaveImportSeedScreenState: () => dispatch(unMarkPasswordForgotten()), leaveImportSeedScreenState: () => dispatch(unMarkPasswordForgotten()),
goToBuyEtherView: address => dispatch(onboardingBuyEthView(address)), openBuyEtherModal: () => dispatch(showModal({ name: 'DEPOSIT_ETHER'})),
}) })
)(FirstTimeFlow) )(FirstTimeFlow)

@ -34,8 +34,8 @@ async function runAddTokenFlowTest (assert, done) {
let addTokenWrapper = await queryAsync($, '.add-token__wrapper') let addTokenWrapper = await queryAsync($, '.add-token__wrapper')
assert.ok(addTokenWrapper[0], 'add token wrapper renders') assert.ok(addTokenWrapper[0], 'add token wrapper renders')
let addTokenTitle = await queryAsync($, '.add-token__title') let addTokenTitle = await queryAsync($, '.add-token__header__title')
assert.equal(addTokenTitle[0].textContent, 'Add Token', 'add token title is correct') assert.equal(addTokenTitle[0].textContent, 'Add Tokens', 'add token title is correct')
// Cancel Add Token // Cancel Add Token
const cancelAddTokenButton = await queryAsync($, 'button.btn-secondary--lg.add-token__cancel-button') const cancelAddTokenButton = await queryAsync($, 'button.btn-secondary--lg.add-token__cancel-button')
@ -51,9 +51,9 @@ async function runAddTokenFlowTest (assert, done) {
// Verify Add Token Screen // Verify Add Token Screen
addTokenWrapper = await queryAsync($, '.add-token__wrapper') addTokenWrapper = await queryAsync($, '.add-token__wrapper')
addTokenTitle = await queryAsync($, '.add-token__title') addTokenTitle = await queryAsync($, '.add-token__header__title')
assert.ok(addTokenWrapper[0], 'add token wrapper renders') assert.ok(addTokenWrapper[0], 'add token wrapper renders')
assert.equal(addTokenTitle[0].textContent, 'Add Token', 'add token title is correct') assert.equal(addTokenTitle[0].textContent, 'Add Tokens', 'add token title is correct')
// Search for token // Search for token
const searchInput = await queryAsync($, 'input.add-token__input') const searchInput = await queryAsync($, 'input.add-token__input')
@ -91,9 +91,11 @@ async function runAddTokenFlowTest (assert, done) {
assert.ok(addTokenButton[0], 'add token button present') assert.ok(addTokenButton[0], 'add token button present')
addTokenButton[0].click() addTokenButton[0].click()
const addCustom = await queryAsync($, '.add-token__add-custom') const addTokenTabs = await queryAsync($, '.add-token__header__tabs__tab')
assert.ok(addCustom[0], 'add custom token button present') assert.equal(addTokenTabs.length, 2, 'expected number of tabs')
addCustom[0].click() assert.equal(addTokenTabs[1].textContent, 'Custom Token', 'Custom Token tab present')
assert.ok(addTokenTabs[1], 'add custom token tab present')
addTokenTabs[1].click()
// Input token contract address // Input token contract address
const customInput = await queryAsync($, 'input.add-token__add-custom-input') const customInput = await queryAsync($, 'input.add-token__add-custom-input')
@ -108,6 +110,7 @@ async function runAddTokenFlowTest (assert, done) {
// Verify symbol length error since contract address won't return symbol // Verify symbol length error since contract address won't return symbol
const errorMessage = await queryAsync($, '.add-token__add-custom-error-message') const errorMessage = await queryAsync($, '.add-token__add-custom-error-message')
assert.ok(errorMessage[0], 'error rendered') assert.ok(errorMessage[0], 'error rendered')
$('button.btn-secondary--lg')[0].click() $('button.btn-secondary--lg')[0].click()
// // Confirm Add token // // Confirm Add token

@ -57,9 +57,9 @@ async function runFirstTimeUsageTest (assert, done) {
;(await findAsync(app, '.first-time-flow__button')).click() ;(await findAsync(app, '.first-time-flow__button')).click()
// Deposit Ether Screen // Deposit Ether Screen
const buyEthTitle = (await findAsync(app, '.buy-ether__title'))[0] const depositEthTitle = (await findAsync(app, '.page-container__title'))[0]
assert.equal(buyEthTitle.textContent, 'Deposit Ether', 'deposit ether screen') assert.equal(depositEthTitle.textContent, 'Deposit Ether', 'deposit ether screen')
;(await findAsync(app, '.buy-ether__do-it-later')).click() ;(await findAsync(app, '.page-container__header-close')).click()
const menu = (await findAsync(app, '.account-menu__icon'))[0] const menu = (await findAsync(app, '.account-menu__icon'))[0]
menu.click() menu.click()

@ -129,7 +129,6 @@ async function runSendFlowTest(assert, done) {
selectState.val('send edit') selectState.val('send edit')
reactTriggerChange(selectState[0]) reactTriggerChange(selectState[0])
await timeout(10000)
const confirmFromName = (await queryAsync($, '.sender-to-recipient__sender-name')).first() const confirmFromName = (await queryAsync($, '.sender-to-recipient__sender-name')).first()
assert.equal(confirmFromName[0].textContent, 'Send Account 2', 'confirm screen should show correct from name') assert.equal(confirmFromName[0].textContent, 'Send Account 2', 'confirm screen should show correct from name')

@ -0,0 +1,32 @@
const assert = require('assert')
const migration22 = require('../../../app/scripts/migrations/022')
const properTime = (new Date()).getTime()
const storage = {
"meta": {},
"data": {
"TransactionController": {
"transactions": [
{ "status": "submitted" },
{ "status": "submitted", "submittedTime": properTime },
{"status": "confirmed"},
]
},
},
}
describe('storage is migrated successfully where transactions that are submitted have submittedTimes', () => {
it('should add submittedTime key on the txMeta if appropriate', (done) => {
migration22.migrate(storage)
.then((migratedData) => {
const [txMeta1, txMeta2, txMeta3] = migratedData.data.TransactionController.transactions
assert.equal(migratedData.meta.version, 22)
// should have written a submitted time
assert(txMeta1.submittedTime)
// should not have written a submitted time because it already has one
assert.equal(txMeta2.submittedTime, properTime)
// should not have written a submitted time
assert(!txMeta3.submittedTime)
done()
}).catch(done)
})
})

@ -54,10 +54,10 @@ function AddTokenScreen () {
customSymbol: '', customSymbol: '',
customDecimals: '', customDecimals: '',
searchQuery: '', searchQuery: '',
isCollapsed: true,
selectedTokens: {}, selectedTokens: {},
errors: {}, errors: {},
autoFilled: false, autoFilled: false,
displayedTab: 'SEARCH',
} }
this.tokenAddressDidChange = this.tokenAddressDidChange.bind(this) this.tokenAddressDidChange = this.tokenAddressDidChange.bind(this)
this.tokenSymbolDidChange = this.tokenSymbolDidChange.bind(this) this.tokenSymbolDidChange = this.tokenSymbolDidChange.bind(this)
@ -191,7 +191,7 @@ AddTokenScreen.prototype.attemptToAutoFillTokenParams = async function (address)
AddTokenScreen.prototype.renderCustomForm = function () { AddTokenScreen.prototype.renderCustomForm = function () {
const { autoFilled, customAddress, customSymbol, customDecimals, errors } = this.state const { autoFilled, customAddress, customSymbol, customDecimals, errors } = this.state
return !this.state.isCollapsed && ( return (
h('div.add-token__add-custom-form', [ h('div.add-token__add-custom-form', [
h('div', { h('div', {
className: classnames('add-token__add-custom-field', { className: classnames('add-token__add-custom-field', {
@ -246,7 +246,9 @@ AddTokenScreen.prototype.renderTokenList = function () {
}) })
const results = [...addressSearchResult, ...fuseSearchResult] const results = [...addressSearchResult, ...fuseSearchResult]
return Array(6).fill(undefined) return h('div', [
results.length > 0 && h('div.add-token__token-icons-title', this.props.t('popularTokens')),
h('div.add-token__token-icons-container', Array(6).fill(undefined)
.map((_, i) => { .map((_, i) => {
const { logo, symbol, name, address } = results[i] || {} const { logo, symbol, name, address } = results[i] || {}
const tokenAlreadyAdded = this.checkExistingAddresses(address) const tokenAlreadyAdded = this.checkExistingAddresses(address)
@ -272,7 +274,8 @@ AddTokenScreen.prototype.renderTokenList = function () {
// ), // ),
]) ])
) )
}) })),
])
} }
AddTokenScreen.prototype.renderConfirmation = function () { AddTokenScreen.prototype.renderConfirmation = function () {
@ -299,7 +302,6 @@ AddTokenScreen.prototype.renderConfirmation = function () {
h('div.add-token', [ h('div.add-token', [
h('div.add-token__wrapper', [ h('div.add-token__wrapper', [
h('div.add-token__title-container.add-token__confirmation-title', [ h('div.add-token__title-container.add-token__confirmation-title', [
h('div.add-token__title', this.props.t('addToken')),
h('div.add-token__description', this.props.t('likeToAddTokens')), h('div.add-token__description', this.props.t('likeToAddTokens')),
]), ]),
h('div.add-token__content-container.add-token__confirmation-content', [ h('div.add-token__content-container.add-token__confirmation-content', [
@ -331,52 +333,86 @@ AddTokenScreen.prototype.renderConfirmation = function () {
) )
} }
AddTokenScreen.prototype.render = function () { AddTokenScreen.prototype.displayTab = function (selectedTab) {
const { isCollapsed, errors, isShowingConfirmation } = this.state this.setState({ displayedTab: selectedTab })
const { goHome } = this.props }
return isShowingConfirmation AddTokenScreen.prototype.renderTabs = function () {
? this.renderConfirmation() const { displayedTab, errors } = this.state
: (
h('div.add-token', [ return displayedTab === 'CUSTOM_TOKEN'
? this.renderCustomForm()
: h('div', [
h('div.add-token__wrapper', [ h('div.add-token__wrapper', [
h('div.add-token__title-container', [
h('div.add-token__title', this.props.t('addToken')),
h('div.add-token__description', this.props.t('tokenWarning1')),
h('div.add-token__description', this.props.t('tokenSelection')),
]),
h('div.add-token__content-container', [ h('div.add-token__content-container', [
h('div.add-token__info-box', [
h('div.add-token__info-box__close'),
h('div.add-token__info-box__title', this.props.t('whatsThis')),
h('div.add-token__info-box__copy', this.props.t('keepTrackTokens')),
h('div.add-token__info-box__copy--blue', this.props.t('learnMore')),
]),
h('div.add-token__input-container', [ h('div.add-token__input-container', [
h('input.add-token__input', { h('input.add-token__input', {
type: 'text', type: 'text',
placeholder: this.props.t('search'), placeholder: this.props.t('searchTokens'),
onChange: e => this.setState({ searchQuery: e.target.value }), onChange: e => this.setState({ searchQuery: e.target.value }),
}), }),
h('div.add-token__search-input-error-message', errors.tokenSelector), h('div.add-token__search-input-error-message', errors.tokenSelector),
]), ]),
h(
'div.add-token__token-icons-container',
this.renderTokenList(), this.renderTokenList(),
),
]), ]),
h('div.add-token__footers', [ ]),
h('div.add-token__add-custom', { ])
onClick: () => this.setState({ isCollapsed: !isCollapsed }), }
AddTokenScreen.prototype.render = function () {
const {
isShowingConfirmation,
displayedTab,
} = this.state
const { goHome } = this.props
return h('div.add-token', [
h('div.add-token__header', [
h('div.add-token__header__cancel', {
onClick: () => goHome(),
}, [ }, [
this.props.t('addCustomToken'), h('i.fa.fa-angle-left.fa-lg'),
h(`i.fa.fa-angle-${isCollapsed ? 'down' : 'up'}`), h('span', this.props.t('cancel')),
]), ]),
this.renderCustomForm(), h('div.add-token__header__title', this.props.t('addTokens')),
!isShowingConfirmation && h('div.add-token__header__tabs', [
h('div.add-token__header__tabs__tab', {
className: classnames('add-token__header__tabs__tab', {
'add-token__header__tabs__selected': displayedTab === 'SEARCH',
'add-token__header__tabs__unselected cursor-pointer': displayedTab !== 'SEARCH',
}),
onClick: () => this.displayTab('SEARCH'),
}, this.props.t('search')),
h('div.add-token__header__tabs__tab', {
className: classnames('add-token__header__tabs__tab', {
'add-token__header__tabs__selected': displayedTab === 'CUSTOM_TOKEN',
'add-token__header__tabs__unselected cursor-pointer': displayedTab !== 'CUSTOM_TOKEN',
}),
onClick: () => this.displayTab('CUSTOM_TOKEN'),
}, this.props.t('customToken')),
]), ]),
]), ]),
h('div.add-token__buttons', [ //
isShowingConfirmation
? this.renderConfirmation()
: this.renderTabs(),
!isShowingConfirmation && h('div.add-token__buttons', [
h('button.btn-secondary--lg.add-token__cancel-button', { h('button.btn-secondary--lg.add-token__cancel-button', {
onClick: goHome, onClick: goHome,
}, this.props.t('cancel')), }, this.props.t('cancel')),
h('button.btn-primary--lg', { h('button.btn-primary--lg.add-token__confirm-button', {
onClick: this.onNext, onClick: this.onNext,
}, this.props.t('next')), }, this.props.t('next')),
]), ]),
]) ])
)
} }

@ -385,7 +385,7 @@ App.prototype.renderPrimary = function () {
isUnlocked, isUnlocked,
} = props } = props
const isMascaraOnboarding = isMascara && isOnboarding const isMascaraOnboarding = isMascara && isOnboarding
const isBetaUIOnboarding = betaUI && isOnboarding && !props.isPopup && !isRevealingSeedWords const isBetaUIOnboarding = betaUI && isOnboarding
if (!welcomeScreenSeen && betaUI && !isInitialized && !isUnlocked) { if (!welcomeScreenSeen && betaUI && !isInitialized && !isUnlocked) {
return h(WelcomeScreen) return h(WelcomeScreen)
@ -396,7 +396,7 @@ App.prototype.renderPrimary = function () {
} }
// notices // notices
if (!props.noActiveNotices) { if (!props.noActiveNotices && !betaUI) {
log.debug('rendering notice screen for unread notices.') log.debug('rendering notice screen for unread notices.')
return h(NoticeScreen, { return h(NoticeScreen, {
notice: props.lastUnreadNotice, notice: props.lastUnreadNotice,
@ -417,7 +417,7 @@ App.prototype.renderPrimary = function () {
return h(HDRestoreVaultScreen, {key: 'HDRestoreVaultScreen'}) return h(HDRestoreVaultScreen, {key: 'HDRestoreVaultScreen'})
} else if (!props.isInitialized && !props.isUnlocked && !isRevealingSeedWords) { } else if (!props.isInitialized && !props.isUnlocked && !isRevealingSeedWords) {
log.debug('rendering menu screen') log.debug('rendering menu screen')
return props.isPopup return !betaUI
? h(OldUIInitializeMenuScreen, {key: 'menuScreenInit'}) ? h(OldUIInitializeMenuScreen, {key: 'menuScreenInit'})
: h(InitializeMenuScreen, {key: 'menuScreenInit'}) : h(InitializeMenuScreen, {key: 'menuScreenInit'})
} }

@ -1,37 +1,118 @@
.add-token { .add-token {
width: 498px; width: 498px;
max-height: 805px;
display: flex; display: flex;
flex-flow: column nowrap; flex-flow: column nowrap;
align-items: center;
position: relative; position: relative;
z-index: 12; z-index: 12;
font-family: 'DIN Next Light'; font-family: 'Roboto';
background: white;
border-radius: 8px;
&__wrapper { &__wrapper {
background-color: $white; background-color: $white;
box-shadow: 0 2px 4px 0 rgba($black, .08);
display: flex; display: flex;
flex-flow: column nowrap; flex-flow: column nowrap;
align-items: center; align-items: center;
flex: 0 0 auto; flex: 0 0 auto;
} }
&__title-container { &__header {
display: flex; display: flex;
flex-flow: column nowrap; flex-flow: column nowrap;
align-items: center; padding: 16px 16px 0px;
padding: 30px 60px 12px; border-bottom: 1px solid $geyser;
border-bottom: 1px solid $gallery;
flex: 0 0 auto; flex: 0 0 auto;
&__cancel {
color: $dodger-blue;
display: flex;
align-items: center;
span {
font-family: Roboto;
font-size: 16px;
line-height: 21px;
margin-left: 8px;
}
} }
&__title { &__title {
color: $scorpion; color: $tundora;
font-size: 20px; font-size: 32px;
line-height: 26px; font-weight: 500;
margin-top: 4px;
}
&__tabs {
margin-left: 22px;
display: flex;
&__tab {
height: 54px;
padding: 15px 10px;
color: $dusty-gray;
font-family: Roboto;
font-size: 18px;
line-height: 24px;
text-align: center; text-align: center;
font-weight: 600; }
margin-bottom: 12px;
&__tab:first-of-type {
margin-right: 20px;
}
&__unselected:hover {
color: $black;
border-bottom: none;
}
&__selected {
color: $curious-blue;
border-bottom: 3px solid $curious-blue;
}
}
}
&__info-box {
height: 96px;
margin: 20px 24px 0px;
border-radius: 4px;
background-color: $alabaster;
position: relative;
padding-left: 18px;
display: flex;
flex-flow: column;
&__close::after {
content: '\00D7';
font-size: 29px;
font-weight: 200;
color: $dusty-gray;
position: absolute;
right: 17px;
cursor: pointer;
}
&__title {
color: $mid-gray;
font-family: Roboto;
font-size: 14px;
margin-top: 15px;
margin-bottom: 9px;
}
&__copy,
&__copy--blue {
color: $mid-gray;
font-family: Roboto;
font-size: 12px;
line-height: 18px;
}
&__copy--blue {
color: $curious-blue;
}
} }
&__description { &__description {
@ -48,19 +129,17 @@
&__content-container { &__content-container {
width: 100%; width: 100%;
border-bottom: 1px solid $gallery;
} }
&__input-container { &__input-container {
padding: 11px 0; display: flex;
width: 263px;
margin: 0 auto;
position: relative; position: relative;
} }
&__search-input-error-message { &__search-input-error-message {
position: absolute; position: absolute;
bottom: -10px; bottom: -10px;
left: 22px;
font-size: 12px; font-size: 12px;
width: 100%; width: 100%;
text-overflow: ellipsis; text-overflow: ellipsis;
@ -69,16 +148,24 @@
color: $red; color: $red;
} }
&__input { &__input,
width: 100%; &__add-custom-input {
border: 2px solid $gallery; height: 54px;
padding: 21px 6px;
border: 1px solid $geyser;
border-radius: 4px; border-radius: 4px;
padding: 5px 15px; margin: 22px 24px;
font-size: 14px; position: relative;
line-height: 19px; flex: 1 0 auto;
color: $scorpion;
font-family: Roboto;
font-size: 16px;
&::placeholder { &::placeholder {
color: $silver; color: $scorpion;
font-family: Roboto;
font-size: 16px;
line-height: 21px;
} }
} }
@ -115,13 +202,14 @@
&__add-custom-form { &__add-custom-form {
display: flex; display: flex;
flex-flow: column nowrap; flex-flow: column nowrap;
margin: 8px 0 51px; margin: 40px 0 30px;
} }
&__add-custom-field { &__add-custom-field {
width: 290px;
margin: 0 auto;
position: relative; position: relative;
display: flex;
flex-flow: column;
flex: 1 0 auto;
&--error { &--error {
.add-token__add-custom-input { .add-token__add-custom-input {
@ -132,7 +220,8 @@
&__add-custom-error-message { &__add-custom-error-message {
position: absolute; position: absolute;
bottom: -21px; bottom: 1px;
left: 22px;
font-size: 12px; font-size: 12px;
width: 100%; width: 100%;
text-overflow: ellipsis; text-overflow: ellipsis;
@ -144,38 +233,52 @@
&__add-custom-label { &__add-custom-label {
font-size: 16px; font-size: 16px;
line-height: 21px; line-height: 21px;
margin-bottom: 8px; margin-left: 22px;
color: $scorpion;
} }
&__add-custom-input { &__add-custom-input {
width: 100%; margin-top: 6px;
border: 1px solid $silver; font-size: 16px;
padding: 5px 15px;
font-size: 14px;
line-height: 19px;
&::placeholder { &::placeholder {
color: $silver; color: $silver;
font-size: 16px;
} }
} }
&__add-custom-field + &__add-custom-field { &__add-custom-field + &__add-custom-field {
margin-top: 21px; margin-top: 6px;
} }
&__buttons { &__buttons {
display: flex; display: flex;
flex-flow: row nowrap; flex-flow: row nowrap;
margin: 30px 0 51px;
flex: 0 0 auto; flex: 0 0 auto;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding-bottom: 30px;
padding-top: 20px;
} }
&__confirm-button,
&__cancel-button { &__cancel-button {
margin: 0 12px;
padding: 10px 13px;
height: 54px;
width: 133px;
margin-right: 1.2rem; margin-right: 1.2rem;
} }
&__token-icons-title {
color: #5B5D67;
font-family: Roboto;
font-size: 18px;
line-height: 24px;
margin-left: 24px;
margin-top: 8px;
}
&__token-icons-container { &__token-icons-container {
display: flex; display: flex;
flex-flow: row wrap; flex-flow: row wrap;
@ -188,7 +291,7 @@
flex: 0 0 42.5%; flex: 0 0 42.5%;
align-items: center; align-items: center;
padding: 12px; padding: 12px;
margin: 2.5%; margin: 0% 2.5% 1.5%;
box-sizing: border-box; box-sizing: border-box;
border-radius: 10px; border-radius: 10px;
cursor: pointer; cursor: pointer;
@ -302,13 +405,14 @@
top: 0; top: 0;
width: 100%; width: 100%;
overflow: hidden; overflow: hidden;
height: 100%; flex: 1 0 auto;
&__wrapper { &__wrapper {
box-shadow: none !important; box-shadow: none !important;
flex: 1 1 auto; flex: 1 1 auto;
width: 100%; width: 100%;
overflow-y: auto; overflow-y: scroll;
height: 400px;
} }
&__footers { &__footers {

@ -162,6 +162,7 @@
&__row { &__row {
display: flex; display: flex;
flex-flow: column; flex-flow: column;
flex: 1 0 auto;
} }
&__row-title { &__row-title {

@ -51,6 +51,7 @@ $java: #29b6af;
$wild-strawberry: #ff4a8d; $wild-strawberry: #ff4a8d;
$cornflower-blue: #7057ff; $cornflower-blue: #7057ff;
$saffron: #f6c343; $saffron: #f6c343;
$dodger-blue: #3099f2;
$zumthor: #edf7ff; $zumthor: #edf7ff;
$ecstasy: #f7861c; $ecstasy: #f7861c;

@ -72,6 +72,15 @@
normalize-path "^2.0.1" normalize-path "^2.0.1"
through2 "^2.0.3" through2 "^2.0.3"
"@sentry/cli@^1.30.3":
version "1.30.3"
resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.30.3.tgz#02d0f7781c1ee5e1be5a4312a325fbe8b1b37231"
dependencies:
https-proxy-agent "^2.1.1"
node-fetch "^1.7.3"
progress "2.0.0"
proxy-from-env "^1.0.0"
"@types/node@*": "@types/node@*":
version "8.5.2" version "8.5.2"
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.5.2.tgz#83b8103fa9a2c2e83d78f701a9aa7c9539739aa5" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.5.2.tgz#83b8103fa9a2c2e83d78f701a9aa7c9539739aa5"
@ -201,6 +210,12 @@ agent-base@2:
extend "~3.0.0" extend "~3.0.0"
semver "~5.0.1" semver "~5.0.1"
agent-base@^4.1.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.0.tgz#9838b5c3392b962bad031e6a4c5e1024abec45ce"
dependencies:
es6-promisify "^5.0.0"
ajv-keywords@^1.1.1: ajv-keywords@^1.1.1:
version "1.5.1" version "1.5.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
@ -3771,6 +3786,16 @@ es6-map@^0.1.3:
es6-symbol "~3.1.1" es6-symbol "~3.1.1"
event-emitter "~0.3.5" event-emitter "~0.3.5"
es6-promise@^4.0.3:
version "4.2.4"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29"
es6-promisify@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
dependencies:
es6-promise "^4.0.3"
es6-set@~0.1.5: es6-set@~0.1.5:
version "0.1.5" version "0.1.5"
resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
@ -6008,6 +6033,13 @@ https-proxy-agent@1:
debug "2" debug "2"
extend "3" extend "3"
https-proxy-agent@^2.1.1:
version "2.2.0"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.0.tgz#7fbba856be8cd677986f42ebd3664f6317257887"
dependencies:
agent-base "^4.1.0"
debug "^3.1.0"
human-standard-token-abi@^1.0.2: human-standard-token-abi@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/human-standard-token-abi/-/human-standard-token-abi-1.0.2.tgz#207d7846796ee5bb85fdd336e769cb38045b2ae0" resolved "https://registry.yarnpkg.com/human-standard-token-abi/-/human-standard-token-abi-1.0.2.tgz#207d7846796ee5bb85fdd336e769cb38045b2ae0"
@ -8138,7 +8170,7 @@ nock@^9.0.14:
qs "^6.5.1" qs "^6.5.1"
semver "^5.3.0" semver "^5.3.0"
node-fetch@^1.0.1, node-fetch@~1.7.1: node-fetch@^1.0.1, node-fetch@^1.7.3, node-fetch@~1.7.1:
version "1.7.3" version "1.7.3"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
dependencies: dependencies:
@ -9168,7 +9200,7 @@ process@~0.5.1:
version "0.5.2" version "0.5.2"
resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
progress@^2.0.0: progress@2.0.0, progress@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
@ -9244,6 +9276,10 @@ proxy-agent@~2.0.0:
pac-proxy-agent "1" pac-proxy-agent "1"
socks-proxy-agent "2" socks-proxy-agent "2"
proxy-from-env@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee"
prr@~1.0.1: prr@~1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
@ -9422,6 +9458,10 @@ raphael@^2.2.0:
dependencies: dependencies:
eve-raphael "0.5.0" eve-raphael "0.5.0"
raven-js@^3.24.0:
version "3.24.0"
resolved "https://registry.yarnpkg.com/raven-js/-/raven-js-3.24.0.tgz#59464d8bc4b3812ae87a282e9bb98ecad5b4b047"
raw-body@2, raw-body@2.3.2: raw-body@2, raw-body@2.3.2:
version "2.3.2" version "2.3.2"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89"

Loading…
Cancel
Save