Merge branch 'testing' of https://github.com/tmashuang/metamask-extension into testing
commit
d9be7f989a
@ -1,27 +0,0 @@ |
||||
{ |
||||
"node": true, |
||||
"browser": true, |
||||
"esnext": true, |
||||
"bitwise": true, |
||||
"camelcase": true, |
||||
"curly": true, |
||||
"eqeqeq": true, |
||||
"immed": true, |
||||
"indent": 2, |
||||
"latedef": true, |
||||
"newcap": true, |
||||
"noarg": true, |
||||
"quotmark": "single", |
||||
"regexp": true, |
||||
"undef": true, |
||||
"unused": true, |
||||
"strict": true, |
||||
"trailing": true, |
||||
"smarttabs": true, |
||||
"globals" : { |
||||
"chrome": true, |
||||
"crypto": true, |
||||
"describe": true, |
||||
"it": true |
||||
} |
||||
} |
@ -0,0 +1,912 @@ |
||||
{ |
||||
"accept": { |
||||
"message": "Přijmout" |
||||
}, |
||||
"account": { |
||||
"message": "Účet" |
||||
}, |
||||
"accountDetails": { |
||||
"message": "Detaily účtu" |
||||
}, |
||||
"accountName": { |
||||
"message": "Název účtu" |
||||
}, |
||||
"address": { |
||||
"message": "Adresa" |
||||
}, |
||||
"addCustomToken": { |
||||
"message": "Přidat vlastní token" |
||||
}, |
||||
"addToken": { |
||||
"message": "Přidat token" |
||||
}, |
||||
"addTokens": { |
||||
"message": "Přidat tokeny" |
||||
}, |
||||
"amount": { |
||||
"message": "Částka" |
||||
}, |
||||
"amountPlusGas": { |
||||
"message": "Částka + palivo" |
||||
}, |
||||
"appDescription": { |
||||
"message": "Ethereum rozšíření prohlížeče", |
||||
"description": "The description of the application" |
||||
}, |
||||
"appName": { |
||||
"message": "MetaMask", |
||||
"description": "The name of the application" |
||||
}, |
||||
"approved": { |
||||
"message": "Schváleno" |
||||
}, |
||||
"attemptingConnect": { |
||||
"message": "Pokouším se připojit k blockchainu." |
||||
}, |
||||
"attributions": { |
||||
"message": "Zásluhy" |
||||
}, |
||||
"available": { |
||||
"message": "Dostupné" |
||||
}, |
||||
"back": { |
||||
"message": "Zpět" |
||||
}, |
||||
"balance": { |
||||
"message": "Zůstatek:" |
||||
}, |
||||
"balances": { |
||||
"message": "Zůstatek tokenu" |
||||
}, |
||||
"balanceIsInsufficientGas": { |
||||
"message": "Nedostatek prostředků pro aktuální množství paliva" |
||||
}, |
||||
"beta": { |
||||
"message": "BETA" |
||||
}, |
||||
"betweenMinAndMax": { |
||||
"message": "musí být větší nebo roven $1 a menší nebo roven $2.", |
||||
"description": "helper for inputting hex as decimal input" |
||||
}, |
||||
"blockiesIdenticon": { |
||||
"message": "Použít Blockies Identicon" |
||||
}, |
||||
"borrowDharma": { |
||||
"message": "Pújčit si přes Dharma (Beta)" |
||||
}, |
||||
"builtInCalifornia": { |
||||
"message": "MetaMask je navržen a vytvořen v Kalifornii." |
||||
}, |
||||
"buy": { |
||||
"message": "Koupit" |
||||
}, |
||||
"buyCoinbase": { |
||||
"message": "Nákup na Coinbase" |
||||
}, |
||||
"buyCoinbaseExplainer": { |
||||
"message": "Coinbase je světově nejoblíbenější místo k nákupu a prodeji bitcoinu, etherea nebo litecoinu." |
||||
}, |
||||
"ok": { |
||||
"message": "Ok" |
||||
}, |
||||
"cancel": { |
||||
"message": "Zrušit" |
||||
}, |
||||
"classicInterface": { |
||||
"message": "Použít klasické rozhraní" |
||||
}, |
||||
"clickCopy": { |
||||
"message": "Kliknutím zkopírovat" |
||||
}, |
||||
"confirm": { |
||||
"message": "Potvrdit" |
||||
}, |
||||
"confirmed": { |
||||
"message": "Potvrzeno" |
||||
}, |
||||
"confirmContract": { |
||||
"message": "Potvrdit kontrakt" |
||||
}, |
||||
"confirmPassword": { |
||||
"message": "Potvrdit heslo" |
||||
}, |
||||
"confirmTransaction": { |
||||
"message": "Potvrdit transakci" |
||||
}, |
||||
"continue": { |
||||
"message": "Pokračovat" |
||||
}, |
||||
"continueToCoinbase": { |
||||
"message": "Přejít na Coinbase" |
||||
}, |
||||
"contractDeployment": { |
||||
"message": "Nasazení kontraktu" |
||||
}, |
||||
"conversionProgress": { |
||||
"message": "Provádí se převod" |
||||
}, |
||||
"copiedButton": { |
||||
"message": "Zkopírováno" |
||||
}, |
||||
"copiedClipboard": { |
||||
"message": "Zkopírováno do schránky" |
||||
}, |
||||
"copiedExclamation": { |
||||
"message": "Zkopírováno!" |
||||
}, |
||||
"copiedSafe": { |
||||
"message": "Zkopíroval jsem to na bezpečné místo" |
||||
}, |
||||
"copy": { |
||||
"message": "Kopírovat" |
||||
}, |
||||
"copyToClipboard": { |
||||
"message": "Kopírovat do schránky" |
||||
}, |
||||
"copyButton": { |
||||
"message": " Kopírovat " |
||||
}, |
||||
"copyPrivateKey": { |
||||
"message": "Toto je váš privátní klíč (kliknutím zkopírujte)" |
||||
}, |
||||
"create": { |
||||
"message": "Vytvořit" |
||||
}, |
||||
"createAccount": { |
||||
"message": "Vytvořit účet" |
||||
}, |
||||
"createDen": { |
||||
"message": "Vytvořit" |
||||
}, |
||||
"crypto": { |
||||
"message": "Krypto", |
||||
"description": "Exchange type (cryptocurrencies)" |
||||
}, |
||||
"currentConversion": { |
||||
"message": "Aktuální převod" |
||||
}, |
||||
"currentNetwork": { |
||||
"message": "Aktuální síť" |
||||
}, |
||||
"customGas": { |
||||
"message": "Nastavit palivo" |
||||
}, |
||||
"customToken": { |
||||
"message": "Vlastní token" |
||||
}, |
||||
"customize": { |
||||
"message": "Nastavit" |
||||
}, |
||||
"customRPC": { |
||||
"message": "Vlastní RPC" |
||||
}, |
||||
"decimalsMustZerotoTen": { |
||||
"message": "Desetinných míst musí být od 0 do 36." |
||||
}, |
||||
"decimal": { |
||||
"message": "Počet desetinných míst přesnosti" |
||||
}, |
||||
"defaultNetwork": { |
||||
"message": "Výchozí síť pro Etherové transakce je Main Net." |
||||
}, |
||||
"denExplainer": { |
||||
"message": "Váš DEN je heslem šifrované uložiště v MetaMasku." |
||||
}, |
||||
"deposit": { |
||||
"message": "Vklad" |
||||
}, |
||||
"depositBTC": { |
||||
"message": "Vložte BTC na níže uvedenou adresu:" |
||||
}, |
||||
"depositCoin": { |
||||
"message": "Vložte $1 na níže uvedenou adresu", |
||||
"description": "Tells the user what coin they have selected to deposit with shapeshift" |
||||
}, |
||||
"depositEth": { |
||||
"message": "Vložit Eth" |
||||
}, |
||||
"depositEther": { |
||||
"message": "Vložit Ether" |
||||
}, |
||||
"depositFiat": { |
||||
"message": "Vklad s fiat měnou" |
||||
}, |
||||
"depositFromAccount": { |
||||
"message": "Vložte z jiného účtu" |
||||
}, |
||||
"depositShapeShift": { |
||||
"message": "Vklad přes ShapeShift" |
||||
}, |
||||
"depositShapeShiftExplainer": { |
||||
"message": "Pokud vlastníte jiné kryptoměny, můžete je směnit Ether a vložit ho přímo do peněženky MetaMask. Bez založení účtu." |
||||
}, |
||||
"details": { |
||||
"message": "Podrobnosti" |
||||
}, |
||||
"directDeposit": { |
||||
"message": "Přímý vklad" |
||||
}, |
||||
"directDepositEther": { |
||||
"message": "Vložit Ether přímo" |
||||
}, |
||||
"directDepositEtherExplainer": { |
||||
"message": "Pokud už vlastníte nějaký Ether, nejrychleji ho dostanete do peněženky přímým vkladem." |
||||
}, |
||||
"done": { |
||||
"message": "Hotovo" |
||||
}, |
||||
"downloadStateLogs": { |
||||
"message": "Stáhnout stavové protokoly" |
||||
}, |
||||
"dropped": { |
||||
"message": "Zrušeno" |
||||
}, |
||||
"edit": { |
||||
"message": "Upravit" |
||||
}, |
||||
"editAccountName": { |
||||
"message": "Upravit název účtu" |
||||
}, |
||||
"emailUs": { |
||||
"message": "Napište nám e-mail!" |
||||
}, |
||||
"encryptNewDen": { |
||||
"message": "Zašifrujte svůj nový DEN" |
||||
}, |
||||
"enterPassword": { |
||||
"message": "Zadejte heslo" |
||||
}, |
||||
"enterPasswordConfirm": { |
||||
"message": "Zadejte heslo k potvrzení" |
||||
}, |
||||
"passwordNotLongEnough": { |
||||
"message": "Heslo není dost dlouhé" |
||||
}, |
||||
"passwordsDontMatch": { |
||||
"message": "Hesla nejsou stejná" |
||||
}, |
||||
"etherscanView": { |
||||
"message": "Prohlédněte si účet na Etherscan" |
||||
}, |
||||
"exchangeRate": { |
||||
"message": "Směnný kurz" |
||||
}, |
||||
"exportPrivateKey": { |
||||
"message": "Exportovat privátní klíč" |
||||
}, |
||||
"exportPrivateKeyWarning": { |
||||
"message": "Exportujte privátní klíč na vlastní riziko." |
||||
}, |
||||
"failed": { |
||||
"message": "Neúspěšné" |
||||
}, |
||||
"fiat": { |
||||
"message": "FIAT", |
||||
"description": "Exchange type" |
||||
}, |
||||
"fileImportFail": { |
||||
"message": "Import souboru nefunguje? Klikněte sem!", |
||||
"description": "Helps user import their account from a JSON file" |
||||
}, |
||||
"followTwitter": { |
||||
"message": "Sledujte nás na Twitteru" |
||||
}, |
||||
"from": { |
||||
"message": "Od" |
||||
}, |
||||
"fromToSame": { |
||||
"message": "Adresy odesílatele a příjemce nemohou být stejné" |
||||
}, |
||||
"fromShapeShift": { |
||||
"message": "Z ShapeShift" |
||||
}, |
||||
"gas": { |
||||
"message": "Palivo", |
||||
"description": "Short indication of gas cost" |
||||
}, |
||||
"gasFee": { |
||||
"message": "Poplatek za palivo" |
||||
}, |
||||
"gasLimit": { |
||||
"message": "Limit paliva" |
||||
}, |
||||
"gasLimitCalculation": { |
||||
"message": "Počítáme doporučený limit paliva na základě úspěšnosti v síti." |
||||
}, |
||||
"gasLimitRequired": { |
||||
"message": "Limit paliva je povinný" |
||||
}, |
||||
"gasLimitTooLow": { |
||||
"message": "Limit paliva musí být alespoň 21000" |
||||
}, |
||||
"generatingSeed": { |
||||
"message": "Generuji klíčovou frázi..." |
||||
}, |
||||
"gasPrice": { |
||||
"message": "Cena paliva (GWEI)" |
||||
}, |
||||
"gasPriceCalculation": { |
||||
"message": "Počítáme doporučenou cenu paliva na základě úspěšnosti v síti." |
||||
}, |
||||
"gasPriceRequired": { |
||||
"message": "Cena paliva je povinná" |
||||
}, |
||||
"getEther": { |
||||
"message": "Získejte Ether" |
||||
}, |
||||
"getEtherFromFaucet": { |
||||
"message": "Získejte Ether z faucetu za $1.", |
||||
"description": "Displays network name for Ether faucet" |
||||
}, |
||||
"greaterThanMin": { |
||||
"message": "musí být větší nebo roven $1.", |
||||
"description": "helper for inputting hex as decimal input" |
||||
}, |
||||
"here": { |
||||
"message": "zde", |
||||
"description": "as in -click here- for more information (goes with troubleTokenBalances)" |
||||
}, |
||||
"hereList": { |
||||
"message": "Tady je seznam!!!!" |
||||
}, |
||||
"hide": { |
||||
"message": "Skrýt" |
||||
}, |
||||
"hideToken": { |
||||
"message": "Skrýt token" |
||||
}, |
||||
"hideTokenPrompt": { |
||||
"message": "Skrýt token?" |
||||
}, |
||||
"howToDeposit": { |
||||
"message": "Jakým způsobem chcete vložit Ether?" |
||||
}, |
||||
"holdEther": { |
||||
"message": "Dovoluje vám držet ether a tokeny a slouží jako most k decentralizovaným aplikacím." |
||||
}, |
||||
"import": { |
||||
"message": "Import", |
||||
"description": "Button to import an account from a selected file" |
||||
}, |
||||
"importAccount": { |
||||
"message": "Import účtu" |
||||
}, |
||||
"importAccountMsg": { |
||||
"message":"Importované účty nebudou spojeny s vaší původní MetaMaskovou klíčovou frází. Zjistěte více o importovaných účtech " |
||||
}, |
||||
"importAnAccount": { |
||||
"message": "Import účtu" |
||||
}, |
||||
"importDen": { |
||||
"message": "Import existujícího DEN" |
||||
}, |
||||
"imported": { |
||||
"message": "Importováno", |
||||
"description": "status showing that an account has been fully loaded into the keyring" |
||||
}, |
||||
"infoHelp": { |
||||
"message": "Informace a nápověda" |
||||
}, |
||||
"insufficientFunds": { |
||||
"message": "Nedostatek finančních prostředků." |
||||
}, |
||||
"insufficientTokens": { |
||||
"message": "Nedostatek tokenů." |
||||
}, |
||||
"invalidAddress": { |
||||
"message": "Neplatná adresa" |
||||
}, |
||||
"invalidAddressRecipient": { |
||||
"message": "Adresa příjemce je neplatná" |
||||
}, |
||||
"invalidGasParams": { |
||||
"message": "Neplatná parametry paliva" |
||||
}, |
||||
"invalidInput": { |
||||
"message": "Neplatný vstup." |
||||
}, |
||||
"invalidRequest": { |
||||
"message": "Neplatný požadavek" |
||||
}, |
||||
"invalidRPC": { |
||||
"message": "Neplatné RPC URI" |
||||
}, |
||||
"jsonFail": { |
||||
"message": "Něco se pokazilo. Prosím, ujistěte se, že váš JSON soubor má správný formát." |
||||
}, |
||||
"jsonFile": { |
||||
"message": "JSON soubor", |
||||
"description": "format for importing an account" |
||||
}, |
||||
"keepTrackTokens": { |
||||
"message": "Udržujte si záznamy o tokenech, které jste koupili s účtem v MetaMasku." |
||||
}, |
||||
"kovan": { |
||||
"message": "Kovan Test Network" |
||||
}, |
||||
"knowledgeDataBase": { |
||||
"message": "Navštivte naši Knowledge Base" |
||||
}, |
||||
"max": { |
||||
"message": "Max" |
||||
}, |
||||
"learnMore": { |
||||
"message": "Zjistěte více." |
||||
}, |
||||
"lessThanMax": { |
||||
"message": "musí být menší nebo roven $1.", |
||||
"description": "helper for inputting hex as decimal input" |
||||
}, |
||||
"likeToAddTokens": { |
||||
"message": "Chcete přidat tyto tokeny?" |
||||
}, |
||||
"links": { |
||||
"message": "Odkazy" |
||||
}, |
||||
"limit": { |
||||
"message": "Limit" |
||||
}, |
||||
"loading": { |
||||
"message": "Načítám..." |
||||
}, |
||||
"loadingTokens": { |
||||
"message": "Načítám tokeny..." |
||||
}, |
||||
"localhost": { |
||||
"message": "Localhost 8545" |
||||
}, |
||||
"login": { |
||||
"message": "Přihlásit" |
||||
}, |
||||
"logout": { |
||||
"message": "Odhlásit" |
||||
}, |
||||
"loose": { |
||||
"message": "Nevázané" |
||||
}, |
||||
"loweCaseWords": { |
||||
"message": "slova klíčové fráze mají pouze malá písmena" |
||||
}, |
||||
"mainnet": { |
||||
"message": "Main Ethereum Network" |
||||
}, |
||||
"message": { |
||||
"message": "Zpráva" |
||||
}, |
||||
"metamaskDescription": { |
||||
"message": "MetaMask je bezpečný osobní trezor pro Ethereum." |
||||
}, |
||||
"min": { |
||||
"message": "Minimum" |
||||
}, |
||||
"myAccounts": { |
||||
"message": "Moje účty" |
||||
}, |
||||
"mustSelectOne": { |
||||
"message": "Musíte zvolit aspoň 1 token." |
||||
}, |
||||
"needEtherInWallet": { |
||||
"message": "Potřebujete Ether v peněžence, abyste mohli pomocí MetaMasku interagovat s decentralizovanými aplikacemi." |
||||
}, |
||||
"needImportFile": { |
||||
"message": "Musíte zvolit soubor k importu.", |
||||
"description": "User is important an account and needs to add a file to continue" |
||||
}, |
||||
"needImportPassword": { |
||||
"message": "Musíte zadat heslo pro zvolený soubor.", |
||||
"description": "Password and file needed to import an account" |
||||
}, |
||||
"negativeETH": { |
||||
"message": "Nelze odeslat zápornou částku ETH." |
||||
}, |
||||
"networks": { |
||||
"message": "Sítě" |
||||
}, |
||||
"newAccount": { |
||||
"message": "Nový účet" |
||||
}, |
||||
"newAccountNumberName": { |
||||
"message": "Účet $1", |
||||
"description": "Default name of next account to be created on create account screen" |
||||
}, |
||||
"newContract": { |
||||
"message": "Nový kontrakt" |
||||
}, |
||||
"newPassword": { |
||||
"message": "Nové heslo (min 8 znaků)" |
||||
}, |
||||
"newRecipient": { |
||||
"message": "Nový příjemce" |
||||
}, |
||||
"newRPC": { |
||||
"message": "Nová RPC URL" |
||||
}, |
||||
"next": { |
||||
"message": "Další" |
||||
}, |
||||
"noAddressForName": { |
||||
"message": "Pro toto jméno nebyla nastavena žádná adresa." |
||||
}, |
||||
"noDeposits": { |
||||
"message": "Žádný vklad" |
||||
}, |
||||
"noTransactionHistory": { |
||||
"message": "Žádná historie transakcí." |
||||
}, |
||||
"noTransactions": { |
||||
"message": "Žádné transakce" |
||||
}, |
||||
"notStarted": { |
||||
"message": "Nezačalo" |
||||
}, |
||||
"oldUI": { |
||||
"message": "Staré rozhraní" |
||||
}, |
||||
"oldUIMessage": { |
||||
"message": "Vrátili jste se ke starému rozhraní. Můžete přepnout na nové rozhraní v nastavení v pravém horním menu." |
||||
}, |
||||
"or": { |
||||
"message": "nebo", |
||||
"description": "choice between creating or importing a new account" |
||||
}, |
||||
"passwordCorrect": { |
||||
"message": "Ujistěte se, že je vaše heslo správně." |
||||
}, |
||||
"passwordMismatch": { |
||||
"message": "hesla nesouhlasí", |
||||
"description": "in password creation process, the two new password fields did not match" |
||||
}, |
||||
"passwordShort": { |
||||
"message": "heslo je krátké", |
||||
"description": "in password creation process, the password is not long enough to be secure" |
||||
}, |
||||
"pastePrivateKey": { |
||||
"message": "Vložte zde svůj privátní klíč:", |
||||
"description": "For importing an account from a private key" |
||||
}, |
||||
"pasteSeed": { |
||||
"message": "Svou klíčovou frázi vložte zde!" |
||||
}, |
||||
"personalAddressDetected": { |
||||
"message": "Detekována osobní adresa. Zadejte adresu kontraktu tokenu." |
||||
}, |
||||
"pleaseReviewTransaction": { |
||||
"message": "Zkontrolujte si transakci." |
||||
}, |
||||
"popularTokens": { |
||||
"message": "Oblíbené tokeny" |
||||
}, |
||||
"privacyMsg": { |
||||
"message": "Zásady ochrany osobních údajů" |
||||
}, |
||||
"privateKey": { |
||||
"message": "Privátní klíč", |
||||
"description": "select this type of file to use to import an account" |
||||
}, |
||||
"privateKeyWarning": { |
||||
"message": "Upozornění: Nikdy nezveřejněte tento klíč. Kdokoli může s vaším privátním klíčem odcizit vaše aktiva z účtu." |
||||
}, |
||||
"privateNetwork": { |
||||
"message": "Soukromá síť" |
||||
}, |
||||
"qrCode": { |
||||
"message": "Ukázat QR kód" |
||||
}, |
||||
"readdToken": { |
||||
"message": "Tento token můžete v budoucnu přidat zpět s „Přidat token“ v nastavení účtu." |
||||
}, |
||||
"readMore": { |
||||
"message": "Přečtěte si více zde." |
||||
}, |
||||
"readMore2": { |
||||
"message": "Přečtěte si více." |
||||
}, |
||||
"receive": { |
||||
"message": "Obrdžet" |
||||
}, |
||||
"recipientAddress": { |
||||
"message": "Adresa příjemce" |
||||
}, |
||||
"refundAddress": { |
||||
"message": "Adresa pro vrácení peněz" |
||||
}, |
||||
"rejected": { |
||||
"message": "Odmítnuto" |
||||
}, |
||||
"resetAccount": { |
||||
"message": "Resetovat účet" |
||||
}, |
||||
"restoreFromSeed": { |
||||
"message": "Obnovit z seed fráze" |
||||
}, |
||||
"restoreVault": { |
||||
"message": "Obnovit trezor" |
||||
}, |
||||
"required": { |
||||
"message": "Povinné" |
||||
}, |
||||
"retryWithMoreGas": { |
||||
"message": "Opakujte s vyšší cenou paliva" |
||||
}, |
||||
"walletSeed": { |
||||
"message": "Klíčová fráze peněženky" |
||||
}, |
||||
"revealSeedWords": { |
||||
"message": "Zobrazit slova klíčové fráze" |
||||
}, |
||||
"revealSeedWordsWarning": { |
||||
"message": "Nebnovujte slova klíčové fráze na veřejnosti! Tato slova mohou být použita k odcizení veškerých vyašich účtů." |
||||
}, |
||||
"revert": { |
||||
"message": "Zvrátit" |
||||
}, |
||||
"rinkeby": { |
||||
"message": "Rinkeby Test Network" |
||||
}, |
||||
"ropsten": { |
||||
"message": "Ropsten Test Network" |
||||
}, |
||||
"currentRpc": { |
||||
"message": "Současné RPC" |
||||
}, |
||||
"connectingToMainnet": { |
||||
"message": "Připojuji se k Main Ethereum Network" |
||||
}, |
||||
"connectingToRopsten": { |
||||
"message": "Připojuji se k Ropsten Test Network" |
||||
}, |
||||
"connectingToKovan": { |
||||
"message": "Připojuji se k Kovan Test Network" |
||||
}, |
||||
"connectingToRinkeby": { |
||||
"message": "Připojuji se k Rinkeby Test Network" |
||||
}, |
||||
"connectingToUnknown": { |
||||
"message": "Připojuji se k neznámé síti" |
||||
}, |
||||
"sampleAccountName": { |
||||
"message": "Např. můj nový účet", |
||||
"description": "Help user understand concept of adding a human-readable name to their account" |
||||
}, |
||||
"save": { |
||||
"message": "Uložit" |
||||
}, |
||||
"reprice_title": { |
||||
"message": "Změnit cenu transakce" |
||||
}, |
||||
"reprice_subtitle": { |
||||
"message": "Navyšte cenu paliva ve snaze k přepsání a urychlení vyší transakce" |
||||
}, |
||||
"saveAsFile": { |
||||
"message": "Uložit do souboru", |
||||
"description": "Account export process" |
||||
}, |
||||
"saveSeedAsFile": { |
||||
"message": "Uložit slova klíčové fráze do souboru" |
||||
}, |
||||
"search": { |
||||
"message": "Hledat" |
||||
}, |
||||
"secretPhrase": { |
||||
"message": "Zadejte svých 12 slov tajné fráze k obnovení trezoru." |
||||
}, |
||||
"newPassword8Chars": { |
||||
"message": "Nové heslo (min 8 znaků)" |
||||
}, |
||||
"seedPhraseReq": { |
||||
"message": "klíčové fráze mají 12 slov" |
||||
}, |
||||
"select": { |
||||
"message": "Vybrat" |
||||
}, |
||||
"selectCurrency": { |
||||
"message": "Vybrat měnu" |
||||
}, |
||||
"selectService": { |
||||
"message": "Vybrat službu" |
||||
}, |
||||
"selectType": { |
||||
"message": "Vybrat typ" |
||||
}, |
||||
"send": { |
||||
"message": "Odeslat" |
||||
}, |
||||
"sendETH": { |
||||
"message": "Odeslat ETH" |
||||
}, |
||||
"sendTokens": { |
||||
"message": "Odeslat tokeny" |
||||
}, |
||||
"onlySendToEtherAddress": { |
||||
"message": "Posílejte jen ETH na Ethereum adresu." |
||||
}, |
||||
"searchTokens": { |
||||
"message": "Hledat tokeny" |
||||
}, |
||||
"sendTokensAnywhere": { |
||||
"message": "Posílejte tokeny komukoli s Ethereum účtem" |
||||
}, |
||||
"settings": { |
||||
"message": "Nastavení" |
||||
}, |
||||
"info": { |
||||
"message": "Informace" |
||||
}, |
||||
"shapeshiftBuy": { |
||||
"message": "Nakoupit na ShapeShift" |
||||
}, |
||||
"showPrivateKeys": { |
||||
"message": "Zobrazit privátní klíče" |
||||
}, |
||||
"showQRCode": { |
||||
"message": "Zobrazit QR kód" |
||||
}, |
||||
"sign": { |
||||
"message": "Podepsat" |
||||
}, |
||||
"signed": { |
||||
"message": "Podepsáno" |
||||
}, |
||||
"signMessage": { |
||||
"message": "Podepsat zprávu" |
||||
}, |
||||
"signNotice": { |
||||
"message": "Podepsání zprávy může mít \nnebezpečný vedlejší učinek. Podepisujte zprávy pouze ze \nstránek, kterým plně důvěřujete celým svým účtem.\n Tato nebezpečná metoda bude odebrána v budoucí verzi. " |
||||
}, |
||||
"sigRequest": { |
||||
"message": "Požadavek podpisu" |
||||
}, |
||||
"sigRequested": { |
||||
"message": "Požádáno o podpis" |
||||
}, |
||||
"spaceBetween": { |
||||
"message": "mezi slovy může být pouze mezera" |
||||
}, |
||||
"status": { |
||||
"message": "Stav" |
||||
}, |
||||
"stateLogs": { |
||||
"message": "Stavové protokoly" |
||||
}, |
||||
"stateLogsDescription": { |
||||
"message": "Stavové protokoly obsahují vaše veřejné adresy účtů a odeslané transakce." |
||||
}, |
||||
"stateLogError": { |
||||
"message": "Chyba během získávání stavových protokolů." |
||||
}, |
||||
"submit": { |
||||
"message": "Odeslat" |
||||
}, |
||||
"submitted": { |
||||
"message": "Odesláno" |
||||
}, |
||||
"supportCenter": { |
||||
"message": "Navštivte naše centrum podpory" |
||||
}, |
||||
"symbolBetweenZeroTen": { |
||||
"message": "Symbol musí být mezi 0 a 10 znaky." |
||||
}, |
||||
"takesTooLong": { |
||||
"message": "Trvá to dlouho?" |
||||
}, |
||||
"terms": { |
||||
"message": "Podmínky použití" |
||||
}, |
||||
"testFaucet": { |
||||
"message": "Testovací faucet" |
||||
}, |
||||
"to": { |
||||
"message": "Komu: " |
||||
}, |
||||
"toETHviaShapeShift": { |
||||
"message": "$1 na ETH přes ShapeShift", |
||||
"description": "system will fill in deposit type in start of message" |
||||
}, |
||||
"tokenAddress": { |
||||
"message": "Adresa tokenu" |
||||
}, |
||||
"tokenAlreadyAdded": { |
||||
"message": "Token byl už přidán." |
||||
}, |
||||
"tokenBalance": { |
||||
"message": "Váš zůstatek tokenu je:" |
||||
}, |
||||
"tokenSelection": { |
||||
"message": "Vyhledejte token nebo je vyberte z našeho seznamu oblíbených tokenů." |
||||
}, |
||||
"tokenSymbol": { |
||||
"message": "Symbol tokenu" |
||||
}, |
||||
"tokenWarning1": { |
||||
"message": "Mějte přehled o tokenech, které jste koupili s účtem MetaMasku. Pokud jste koupili tokeny s jiným účtem, tyto tokeny se zde nezobrazí." |
||||
}, |
||||
"total": { |
||||
"message": "Celkem" |
||||
}, |
||||
"transactions": { |
||||
"message": "transakce" |
||||
}, |
||||
"transactionError": { |
||||
"message": "Chyba transakce. Vyhozena výjimka v kódu kontraktu." |
||||
}, |
||||
"transactionMemo": { |
||||
"message": "Poznámka transakce (nepovinné)" |
||||
}, |
||||
"transactionNumber": { |
||||
"message": "Číslo transakce" |
||||
}, |
||||
"transfers": { |
||||
"message": "Převody" |
||||
}, |
||||
"troubleTokenBalances": { |
||||
"message": "Měli jsme problém s načtením vašich tokenových zůstatků. Můžete je vidět ", |
||||
"description": "Followed by a link (here) to view token balances" |
||||
}, |
||||
"twelveWords": { |
||||
"message": "Těchto 12 slov je jedinou možností, jak obnovit MetaMask účet. \nUložte je na bezpečné a neveřejné místo." |
||||
}, |
||||
"typePassword": { |
||||
"message": "Zadejte své heslo" |
||||
}, |
||||
"uiWelcome": { |
||||
"message": "Vítejte v novém rozhraní (Beta)" |
||||
}, |
||||
"uiWelcomeMessage": { |
||||
"message": "Používáte nyní nové rozhraní MetaMasku. Rozhlédněte se kolem, vyzkoušejte nové funkce, jako jsou zasílání tokenů, a dejte nám vědět, pokud narazíte na problém." |
||||
}, |
||||
"unapproved": { |
||||
"message": "Neschváleno" |
||||
}, |
||||
"unavailable": { |
||||
"message": "Nedostupné" |
||||
}, |
||||
"unknown": { |
||||
"message": "Neznámé" |
||||
}, |
||||
"unknownNetwork": { |
||||
"message": "Neznámá soukromá síť" |
||||
}, |
||||
"unknownNetworkId": { |
||||
"message": "Neznámé ID sítě" |
||||
}, |
||||
"uriErrorMsg": { |
||||
"message": "URI vyžadují korektní HTTP/HTTPS prefix." |
||||
}, |
||||
"usaOnly": { |
||||
"message": "jen v USA", |
||||
"description": "Using this exchange is limited to people inside the USA" |
||||
}, |
||||
"usedByClients": { |
||||
"message": "Používána různými klienty" |
||||
}, |
||||
"useOldUI": { |
||||
"message": "Použijte staré rozhraní" |
||||
}, |
||||
"validFileImport": { |
||||
"message": "Musíte vybrat validní soubor k importu." |
||||
}, |
||||
"vaultCreated": { |
||||
"message": "Trezor vytvořen" |
||||
}, |
||||
"viewAccount": { |
||||
"message": "Zobrazit účet" |
||||
}, |
||||
"visitWebSite": { |
||||
"message": "Navštivte naši stránku" |
||||
}, |
||||
"warning": { |
||||
"message": "Varování" |
||||
}, |
||||
"welcomeBeta": { |
||||
"message": "Vítejte v MetaMask Beta" |
||||
}, |
||||
"whatsThis": { |
||||
"message": "Co to je?" |
||||
}, |
||||
"yourSigRequested": { |
||||
"message": "Je vyžadován váš podpis" |
||||
}, |
||||
"youSign": { |
||||
"message": "Podepisujete" |
||||
} |
||||
} |
@ -0,0 +1,912 @@ |
||||
{ |
||||
"accept": { |
||||
"message": "Kabul et" |
||||
}, |
||||
"account": { |
||||
"message": "Hesap" |
||||
}, |
||||
"accountDetails": { |
||||
"message": "Hesap Detayları" |
||||
}, |
||||
"accountName": { |
||||
"message": "Hesap İsmi" |
||||
}, |
||||
"address": { |
||||
"message": "Adres" |
||||
}, |
||||
"addCustomToken": { |
||||
"message": "Özel jeton ekle" |
||||
}, |
||||
"addToken": { |
||||
"message": "Jeton ekle" |
||||
}, |
||||
"addTokens": { |
||||
"message": "Jetonlar ekle" |
||||
}, |
||||
"amount": { |
||||
"message": "Tutar" |
||||
}, |
||||
"amountPlusGas": { |
||||
"message": "Tutar + Gas" |
||||
}, |
||||
"appDescription": { |
||||
"message": "Ethereum Tarayıcı Uzantısı", |
||||
"description": "Uygulama açıklaması" |
||||
}, |
||||
"appName": { |
||||
"message": "MetaMask", |
||||
"description": "Uygulama ismi" |
||||
}, |
||||
"approved": { |
||||
"message": "Onaylandı" |
||||
}, |
||||
"attemptingConnect": { |
||||
"message": "Blockchain'e bağlanmayı deniyor" |
||||
}, |
||||
"attributions": { |
||||
"message": "Atıflar" |
||||
}, |
||||
"available": { |
||||
"message": "Müsait" |
||||
}, |
||||
"back": { |
||||
"message": "Geri" |
||||
}, |
||||
"balance": { |
||||
"message": "Bakiye:" |
||||
}, |
||||
"balances": { |
||||
"message": "Jeton bakiyesi" |
||||
}, |
||||
"balanceIsInsufficientGas": { |
||||
"message": "Toplam gas için yetersiz bakiye" |
||||
}, |
||||
"beta": { |
||||
"message": "BETA" |
||||
}, |
||||
"betweenMinAndMax": { |
||||
"message": "$1'e eşit veya daha büyük olmalı ve $2'den küçük veya eşit olmalı", |
||||
"description": "Onaltılık sayının ondalık sayı olarak girişi için yardımcı" |
||||
}, |
||||
"blockiesIdenticon": { |
||||
"message": "Blockies Identicon kullan" |
||||
}, |
||||
"borrowDharma": { |
||||
"message": "Dharma (Beta) ile ödünç al" |
||||
}, |
||||
"builtInCalifornia": { |
||||
"message": "MetaMask California'da tasarlandı ve yaratıldı" |
||||
}, |
||||
"buy": { |
||||
"message": "Satın al" |
||||
}, |
||||
"buyCoinbase": { |
||||
"message": "Coinbase'de satın al" |
||||
}, |
||||
"buyCoinbaseExplainer": { |
||||
"message": "Coinbase bitcoin, ethereum, and litecoin alıp satmanın dünyadaki en popüler yolu" |
||||
}, |
||||
"ok": { |
||||
"message": "Tamam" |
||||
}, |
||||
"cancel": { |
||||
"message": "Vazgeç" |
||||
}, |
||||
"classicInterface": { |
||||
"message": "Klasik arayüzü kullan" |
||||
}, |
||||
"clickCopy": { |
||||
"message": "Kopyalamak için tıkla" |
||||
}, |
||||
"confirm": { |
||||
"message": "Onayla" |
||||
}, |
||||
"confirmed": { |
||||
"message": "Onaylandı" |
||||
}, |
||||
"confirmContract": { |
||||
"message": "Sözleşmeyi onayla" |
||||
}, |
||||
"confirmPassword": { |
||||
"message": "Şifreyi onayla" |
||||
}, |
||||
"confirmTransaction": { |
||||
"message": "İşlemi onayla" |
||||
}, |
||||
"continue": { |
||||
"message": "Devam et" |
||||
}, |
||||
"continueToCoinbase": { |
||||
"message": "Coinbase'e devam et" |
||||
}, |
||||
"contractDeployment": { |
||||
"message": "Sözleşme kurulumu" |
||||
}, |
||||
"conversionProgress": { |
||||
"message": "Çevirim devam ediyor" |
||||
}, |
||||
"copiedButton": { |
||||
"message": "Kopyalandı" |
||||
}, |
||||
"copiedClipboard": { |
||||
"message": "Panoya kopyalandı" |
||||
}, |
||||
"copiedExclamation": { |
||||
"message": "Kopyalandı!" |
||||
}, |
||||
"copiedSafe": { |
||||
"message": "Güvenli bir yere kopyaladım" |
||||
}, |
||||
"copy": { |
||||
"message": "Kopyala" |
||||
}, |
||||
"copyToClipboard": { |
||||
"message": "Panoya kopyala" |
||||
}, |
||||
"copyButton": { |
||||
"message": " Kopyala " |
||||
}, |
||||
"copyPrivateKey": { |
||||
"message": "Bu sizin özel anahtarınız (kopyalamak için tıklayın)" |
||||
}, |
||||
"create": { |
||||
"message": "Yarat" |
||||
}, |
||||
"createAccount": { |
||||
"message": "Hesap Oluştur" |
||||
}, |
||||
"createDen": { |
||||
"message": "Yarat" |
||||
}, |
||||
"crypto": { |
||||
"message": "Kripto", |
||||
"description": "Kambiyo tipi (kripto para)" |
||||
}, |
||||
"currentConversion": { |
||||
"message": "Geçerli çevirme" |
||||
}, |
||||
"currentNetwork": { |
||||
"message": "Geçerli Ağ" |
||||
}, |
||||
"customGas": { |
||||
"message": "Gas'i özelleştir" |
||||
}, |
||||
"customToken": { |
||||
"message": "Özel Jeton" |
||||
}, |
||||
"customize": { |
||||
"message": "Özelleştir" |
||||
}, |
||||
"customRPC": { |
||||
"message": "Özel RPC" |
||||
}, |
||||
"decimalsMustZerotoTen": { |
||||
"message": "Ondalıklar en azından 0 olmalı ve 36'dan büyük olmamalı." |
||||
}, |
||||
"decimal": { |
||||
"message": "Ondalık hassasiyeti" |
||||
}, |
||||
"defaultNetwork": { |
||||
"message": "Ether işlemleri için varsayılan ağ Main Net." |
||||
}, |
||||
"denExplainer": { |
||||
"message": "DEN'iniz MetaMask içersinde parola-şifrelenmiş deponuzdur." |
||||
}, |
||||
"deposit": { |
||||
"message": "Yatır" |
||||
}, |
||||
"depositBTC": { |
||||
"message": "BTC'inizi aşağıdaki adrese yatırın:" |
||||
}, |
||||
"depositCoin": { |
||||
"message": "$1'nızı aşağıdaki adrese yatırın", |
||||
"description": "Kullanıcıya hangi jetonu seçtiyse onu yatırmasını shapeshift ile söyler." |
||||
}, |
||||
"depositEth": { |
||||
"message": "Eth yatır" |
||||
}, |
||||
"depositEther": { |
||||
"message": "Ether yatır" |
||||
}, |
||||
"depositFiat": { |
||||
"message": "Para yatır" |
||||
}, |
||||
"depositFromAccount": { |
||||
"message": "Başka bir hesaptan yatır" |
||||
}, |
||||
"depositShapeShift": { |
||||
"message": "ShapeShift ile yatır" |
||||
}, |
||||
"depositShapeShiftExplainer": { |
||||
"message": "Eğer başka kripto paralara sahipseniz, MetaMask cüzdanınıza direk olarak Ether yatırabilirsiniz. Hesaba gerek yoktur." |
||||
}, |
||||
"details": { |
||||
"message": "Ayrıntılar" |
||||
}, |
||||
"directDeposit": { |
||||
"message": "Direk Yatırma" |
||||
}, |
||||
"directDepositEther": { |
||||
"message": "Direk Ether Yatırma" |
||||
}, |
||||
"directDepositEtherExplainer": { |
||||
"message": "Eğer çoktan Etheriniz varsa, yeni hesabınıza Ether aktarmanın en kolay yolu direk yatırmadır." |
||||
}, |
||||
"done": { |
||||
"message": "Bitti" |
||||
}, |
||||
"downloadStateLogs": { |
||||
"message": "Durum kayıtlarını indir" |
||||
}, |
||||
"dropped": { |
||||
"message": "Bırakıldı" |
||||
}, |
||||
"edit": { |
||||
"message": "Düzenle" |
||||
}, |
||||
"editAccountName": { |
||||
"message": "Hesap ismini düzenle" |
||||
}, |
||||
"emailUs": { |
||||
"message": "Bize e-posta atın!" |
||||
}, |
||||
"encryptNewDen": { |
||||
"message": "Yeni DEN'inizi şifreleyin" |
||||
}, |
||||
"enterPassword": { |
||||
"message": "Parolanızı girin" |
||||
}, |
||||
"enterPasswordConfirm": { |
||||
"message": "Onaylamak için parolanızı girin" |
||||
}, |
||||
"passwordNotLongEnough": { |
||||
"message": "Parola yeterince uzun değil" |
||||
}, |
||||
"passwordsDontMatch": { |
||||
"message": "Parolalar eşleşmiyor" |
||||
}, |
||||
"etherscanView": { |
||||
"message": "Hesabı Etherscan üzerinde izle" |
||||
}, |
||||
"exchangeRate": { |
||||
"message": "Döviz kuru" |
||||
}, |
||||
"exportPrivateKey": { |
||||
"message": "Özel anahtarı ver" |
||||
}, |
||||
"exportPrivateKeyWarning": { |
||||
"message": "Özel anahtarınızı vermek sizin sorumluluğunuzdadır." |
||||
}, |
||||
"failed": { |
||||
"message": "Başarısız oldu" |
||||
}, |
||||
"fiat": { |
||||
"message": "Para", |
||||
"description": "Döviz türü" |
||||
}, |
||||
"fileImportFail": { |
||||
"message": "Dosya alma çalışmıyor mu? Buraya tıklayın!", |
||||
"description": "Kullanıcıların hesaplarını JSON dosyasından almalarına yardım eder" |
||||
}, |
||||
"followTwitter": { |
||||
"message": "Bizi twitter'da takip edin" |
||||
}, |
||||
"from": { |
||||
"message": "Kimden" |
||||
}, |
||||
"fromToSame": { |
||||
"message": "Kimden ve kime adresi aynı olamaz" |
||||
}, |
||||
"fromShapeShift": { |
||||
"message": "ShapeShift'den" |
||||
}, |
||||
"gas": { |
||||
"message": "Gas", |
||||
"description": "Gas maliyetinin kısa indikatörü" |
||||
}, |
||||
"gasFee": { |
||||
"message": "Gas Ücreti" |
||||
}, |
||||
"gasLimit": { |
||||
"message": "Gas Limiti" |
||||
}, |
||||
"gasLimitCalculation": { |
||||
"message": "Önerilen gas limitini ağ başarı oranını baz alarak hesaplıyoruz." |
||||
}, |
||||
"gasLimitRequired": { |
||||
"message": "Gas limiti gereklidir" |
||||
}, |
||||
"gasLimitTooLow": { |
||||
"message": "Gas limiti en az 21000 olmalıdır" |
||||
}, |
||||
"generatingSeed": { |
||||
"message": "Kaynak Oluşturuyor..." |
||||
}, |
||||
"gasPrice": { |
||||
"message": "Gas Fiyatı (GWEI)" |
||||
}, |
||||
"gasPriceCalculation": { |
||||
"message": "Önerilen gas fiyatını ağ başarı oranını baz alarak hesaplıyoruz." |
||||
}, |
||||
"gasPriceRequired": { |
||||
"message": "Gas Fiyatı Gereklidir" |
||||
}, |
||||
"getEther": { |
||||
"message": "Ether Al" |
||||
}, |
||||
"getEtherFromFaucet": { |
||||
"message": "Musluktan $1 karşılığı Ether alın", |
||||
"description": "Ether musluğunun ağ ismini gösterir" |
||||
}, |
||||
"greaterThanMin": { |
||||
"message": "must be greater than or equal to $1.", |
||||
"description": "helper for inputting hex as decimal input" |
||||
}, |
||||
"here": { |
||||
"message": "burada", |
||||
"description": "daha fazla bilgi için -buraya tıklayın- (troubleTokenBalances ile gidiyor)" |
||||
}, |
||||
"hereList": { |
||||
"message": "İşte bir liste!!!!" |
||||
}, |
||||
"hide": { |
||||
"message": "Gizle" |
||||
}, |
||||
"hideToken": { |
||||
"message": "Jetonu gizle" |
||||
}, |
||||
"hideTokenPrompt": { |
||||
"message": "Jetonu gizle?" |
||||
}, |
||||
"howToDeposit": { |
||||
"message": "Ether'i nasıl yatırmak istersiniz?" |
||||
}, |
||||
"holdEther": { |
||||
"message": "Ether ve jeton tutmanızı sağlar ve merkezi olmayan uygulamalar ve sizin aranızda köprü vazifesi görür." |
||||
}, |
||||
"import": { |
||||
"message": "Al", |
||||
"description": "Seçilen dosyadan hesap alma düğmesi. " |
||||
}, |
||||
"importAccount": { |
||||
"message": "Hesap Al" |
||||
}, |
||||
"importAccountMsg": { |
||||
"message":" Alınan hesaplar orjinal kaynakifadenizle yarattığınız MetaMask hesabınızla ilişkilendirilmez. Alınan hesaplar ile ilgili daha fazla bilgi edinin " |
||||
}, |
||||
"importAnAccount": { |
||||
"message": "Hesap al" |
||||
}, |
||||
"importDen": { |
||||
"message": "Varolan DEN al" |
||||
}, |
||||
"imported": { |
||||
"message": "Alındı", |
||||
"description": "Hesabın keyringe başarı ile alındığını gösteren durum" |
||||
}, |
||||
"infoHelp": { |
||||
"message": "Bilgi ve yardım" |
||||
}, |
||||
"insufficientFunds": { |
||||
"message": "Yetersiz kaynak." |
||||
}, |
||||
"insufficientTokens": { |
||||
"message": "Yetersiz Jeton." |
||||
}, |
||||
"invalidAddress": { |
||||
"message": "Geçersiz adres" |
||||
}, |
||||
"invalidAddressRecipient": { |
||||
"message": "Alıcı adresi geçersiz" |
||||
}, |
||||
"invalidGasParams": { |
||||
"message": "Geçersiz gas parametreleri" |
||||
}, |
||||
"invalidInput": { |
||||
"message": "Geçersiz giriş." |
||||
}, |
||||
"invalidRequest": { |
||||
"message": "Geçersiz istek" |
||||
}, |
||||
"invalidRPC": { |
||||
"message": "Geçersiz RPC URI" |
||||
}, |
||||
"jsonFail": { |
||||
"message": "Birşeyler yanlış gitti. JSON dosyanızın düzgün derlendiğinden emin olun." |
||||
}, |
||||
"jsonFile": { |
||||
"message": "JSON Dosyası", |
||||
"description": "Hesap alımı için düzenle" |
||||
}, |
||||
"keepTrackTokens": { |
||||
"message": "MetaMask hesabınızla satın aldığınız jetonların kaydını tutun." |
||||
}, |
||||
"kovan": { |
||||
"message": "Kovan Test Ağı" |
||||
}, |
||||
"knowledgeDataBase": { |
||||
"message": "Bilgi veritabanımızı ziyaret edin" |
||||
}, |
||||
"max": { |
||||
"message": "Maksimum" |
||||
}, |
||||
"learnMore": { |
||||
"message": "Daha fazla bilgi." |
||||
}, |
||||
"lessThanMax": { |
||||
"message": "$1'den az veya eşit olmalıdır.", |
||||
"description": "Onaltılık sayıyı ondalık olarak girmek için yardımcı" |
||||
}, |
||||
"likeToAddTokens": { |
||||
"message": "Bu jetonlara adres eklemek ister misiniz?" |
||||
}, |
||||
"links": { |
||||
"message": "Bağlantılar" |
||||
}, |
||||
"limit": { |
||||
"message": "Limit" |
||||
}, |
||||
"loading": { |
||||
"message": "Yükleniyor..." |
||||
}, |
||||
"loadingTokens": { |
||||
"message": "Jetonlar yükleniyor..." |
||||
}, |
||||
"localhost": { |
||||
"message": "Localhost 8545" |
||||
}, |
||||
"login": { |
||||
"message": "Giriş yap" |
||||
}, |
||||
"logout": { |
||||
"message": "Çıkış" |
||||
}, |
||||
"loose": { |
||||
"message": "Gevşek" |
||||
}, |
||||
"loweCaseWords": { |
||||
"message": "kaynak kelimeleri sadece küçük harflerden oluşabilir." |
||||
}, |
||||
"mainnet": { |
||||
"message": "Main Ethereum Ağı" |
||||
}, |
||||
"message": { |
||||
"message": "Mesaj" |
||||
}, |
||||
"metamaskDescription": { |
||||
"message": "MetaMask Ethereum için güvenli bir kimlik kasasıdır." |
||||
}, |
||||
"min": { |
||||
"message": "Minimum" |
||||
}, |
||||
"myAccounts": { |
||||
"message": "Hesaplarım" |
||||
}, |
||||
"mustSelectOne": { |
||||
"message": "En az bir jeton seçilmeli" |
||||
}, |
||||
"needEtherInWallet": { |
||||
"message": "MetaMask kullanarak merkezi olamayan uygulamalarla etkileşmek için cüzdanınızda Ether bulunmalıdır." |
||||
}, |
||||
"needImportFile": { |
||||
"message": "Almak için bir dosya seçmelisiniz.", |
||||
"description": "Kullanıcı bir hesap alır ve devam etmek içinbir dosya seçmelidir." |
||||
}, |
||||
"needImportPassword": { |
||||
"message": "Seçilen dosya için bir parola girmelisiniz.", |
||||
"description": "Hesap almak için parola ve dosya gerekiyor." |
||||
}, |
||||
"negativeETH": { |
||||
"message": "Negatif ETH miktarları gönderilemez." |
||||
}, |
||||
"networks": { |
||||
"message": "Ağlar" |
||||
}, |
||||
"newAccount": { |
||||
"message": "Yeni Hesap" |
||||
}, |
||||
"newAccountNumberName": { |
||||
"message": "Hesap $1", |
||||
"description": "Hesap yaratma ekranındaki bir sonraki hesabın varsayılan ismi" |
||||
}, |
||||
"newContract": { |
||||
"message": "Yeni Sözleşme" |
||||
}, |
||||
"newPassword": { |
||||
"message": "Yeni Parola (min 8 karakter)" |
||||
}, |
||||
"newRecipient": { |
||||
"message": "Yeni alıcı" |
||||
}, |
||||
"newRPC": { |
||||
"message": "Yeni RPC URL" |
||||
}, |
||||
"next": { |
||||
"message": "Sonraki" |
||||
}, |
||||
"noAddressForName": { |
||||
"message": "Bu isim için bir adres tanımlanmamış." |
||||
}, |
||||
"noDeposits": { |
||||
"message": "Yatırma alınmadı" |
||||
}, |
||||
"noTransactionHistory": { |
||||
"message": "İşlem geçmişi yok." |
||||
}, |
||||
"noTransactions": { |
||||
"message": "İşlem yok" |
||||
}, |
||||
"notStarted": { |
||||
"message": "Başlamadı" |
||||
}, |
||||
"oldUI": { |
||||
"message": "Eski UI" |
||||
}, |
||||
"oldUIMessage": { |
||||
"message": "Eski UI'a döndünüz. Yeni UI'a üst sağ sekme menüsündeki seçenek ile dönebilirsiniz." |
||||
}, |
||||
"or": { |
||||
"message": "veya", |
||||
"description": "Yeni bir hesap yaratmak veya almak arasındaki seçim" |
||||
}, |
||||
"passwordCorrect": { |
||||
"message": "Lütfen parolanın doğru olduğuna emin olun." |
||||
}, |
||||
"passwordMismatch": { |
||||
"message": "parolalar eşleşmiyor", |
||||
"description": "parola yaratma işleminde, iki yeni parola alanı eşleşmiyor." |
||||
}, |
||||
"passwordShort": { |
||||
"message": "parola yeterince uzun değil", |
||||
"description": "parola yaratma işleminde, parola güvenli olacak kadar uzun değil." |
||||
}, |
||||
"pastePrivateKey": { |
||||
"message": "Özel anahtar dizinizi buraya yapıştırın:", |
||||
"description": "Özel anahtardan hesap almak için" |
||||
}, |
||||
"pasteSeed": { |
||||
"message": "Kaynak ifadenizi buraya yapıştırın!" |
||||
}, |
||||
"personalAddressDetected": { |
||||
"message": "Kişisel adres tespit edilidi. Jeton sözleşme adresini girin." |
||||
}, |
||||
"pleaseReviewTransaction": { |
||||
"message": "Lütfen işleminizi gözden geçirin." |
||||
}, |
||||
"popularTokens": { |
||||
"message": "Popüler Jetonlar" |
||||
}, |
||||
"privacyMsg": { |
||||
"message": "Gizlilik Şartları" |
||||
}, |
||||
"privateKey": { |
||||
"message": "Özel Anahtar", |
||||
"description": "Hesap alırken bu tip bir dosya seçin" |
||||
}, |
||||
"privateKeyWarning": { |
||||
"message": "Uyarı: Bu anahtarı kimse ile paylaşmayın. Özel anahtarlarınıza sahip herkes hesaplarınızıdaki tüm varlığınızı çalabilir." |
||||
}, |
||||
"privateNetwork": { |
||||
"message": "Özel Ağ" |
||||
}, |
||||
"qrCode": { |
||||
"message": "QR Kodunu göster" |
||||
}, |
||||
"readdToken": { |
||||
"message": "Gelecekte Bu jetonu hesap seçenekleri menüsünde “Jeton ekle”'ye giderek geri ekleyebilirsiniz." |
||||
}, |
||||
"readMore": { |
||||
"message": "Burada daha fazla okuyun." |
||||
}, |
||||
"readMore2": { |
||||
"message": "Daha fazla okuyun." |
||||
}, |
||||
"receive": { |
||||
"message": "Al" |
||||
}, |
||||
"recipientAddress": { |
||||
"message": "Alıcı adresi" |
||||
}, |
||||
"refundAddress": { |
||||
"message": "İade adresiniz" |
||||
}, |
||||
"rejected": { |
||||
"message": "Rededildi" |
||||
}, |
||||
"resetAccount": { |
||||
"message": "Hesabı sıfıla" |
||||
}, |
||||
"restoreFromSeed": { |
||||
"message": "Kaynak ifadeden geri getir. Restore from seed phrase" |
||||
}, |
||||
"restoreVault": { |
||||
"message": "Kasayı geri getir" |
||||
}, |
||||
"required": { |
||||
"message": "Gerekli" |
||||
}, |
||||
"retryWithMoreGas": { |
||||
"message": "Daha yüksek bir gas fiyatı ile tekrar dene" |
||||
}, |
||||
"walletSeed": { |
||||
"message": "Cüzdan Kaynağı" |
||||
}, |
||||
"revealSeedWords": { |
||||
"message": "Kaynak kelimelerini göster" |
||||
}, |
||||
"revealSeedWordsWarning": { |
||||
"message": "Açık bir yerde kaynak kelimeliriniz geri getirmeyin! Bu kelimeler tüm hesaplarınızı çalmak için kullanılabilir." |
||||
}, |
||||
"revert": { |
||||
"message": "Geri döndür" |
||||
}, |
||||
"rinkeby": { |
||||
"message": "Rinkeby Test Ağı" |
||||
}, |
||||
"ropsten": { |
||||
"message": "Ropsten Test Ağı" |
||||
}, |
||||
"currentRpc": { |
||||
"message": "Geçerli RPC" |
||||
}, |
||||
"connectingToMainnet": { |
||||
"message": "Main Ethereum Ağına bağlanıyor" |
||||
}, |
||||
"connectingToRopsten": { |
||||
"message": "Ropsten Test Ağına bağlanıyor" |
||||
}, |
||||
"connectingToKovan": { |
||||
"message": "Kovan Test Ağına bağlanıyor" |
||||
}, |
||||
"connectingToRinkeby": { |
||||
"message": "Rinkeby Test Ağına bağlanıyor" |
||||
}, |
||||
"connectingToUnknown": { |
||||
"message": "Bilinmeyen Ağa bağlanıyor" |
||||
}, |
||||
"sampleAccountName": { |
||||
"message": "E.g. Yeni hesabım", |
||||
"description": "Kullanıcının hesabına okunabilir isim ekleme konseptini anlamasına yardımcı olmak." |
||||
}, |
||||
"save": { |
||||
"message": "Kaydet" |
||||
}, |
||||
"reprice_title": { |
||||
"message": "İşlemi Yeniden Fiyatlandır" |
||||
}, |
||||
"reprice_subtitle": { |
||||
"message": "İşlemizi hızlandırmayı denemek için gas fiyatınızı yükseltin." |
||||
}, |
||||
"saveAsFile": { |
||||
"message": "Dosya olarak kaydet", |
||||
"description": "Hesap verme işlemi" |
||||
}, |
||||
"saveSeedAsFile": { |
||||
"message": "Kaynak Kelimelerini Dosya olarak Kaydet" |
||||
}, |
||||
"search": { |
||||
"message": "Ara" |
||||
}, |
||||
"secretPhrase": { |
||||
"message": "Kasanızı geri getirmek için gizli 12 kelimelik ifadenizi giriniz." |
||||
}, |
||||
"newPassword8Chars": { |
||||
"message": "Yeni Parola (minumum 8 karakter)" |
||||
}, |
||||
"seedPhraseReq": { |
||||
"message": "Kaynak ifadeleri 12 kelimedir." |
||||
}, |
||||
"select": { |
||||
"message": "Seç" |
||||
}, |
||||
"selectCurrency": { |
||||
"message": "Döviz Seç" |
||||
}, |
||||
"selectService": { |
||||
"message": "Servis Seç" |
||||
}, |
||||
"selectType": { |
||||
"message": "Tip Seç" |
||||
}, |
||||
"send": { |
||||
"message": "Gönder" |
||||
}, |
||||
"sendETH": { |
||||
"message": "ETH Gönder" |
||||
}, |
||||
"sendTokens": { |
||||
"message": "Jeton Gönder" |
||||
}, |
||||
"onlySendToEtherAddress": { |
||||
"message": "Ethereum adresine sadece ETH gönder." |
||||
}, |
||||
"searchTokens": { |
||||
"message": "Jeton ara" |
||||
}, |
||||
"sendTokensAnywhere": { |
||||
"message": "Ethereum hesabı olan birine Jeton gönder" |
||||
}, |
||||
"settings": { |
||||
"message": "Ayarlar" |
||||
}, |
||||
"info": { |
||||
"message": "Bilgi" |
||||
}, |
||||
"shapeshiftBuy": { |
||||
"message": "Shapeshift ile satın al" |
||||
}, |
||||
"showPrivateKeys": { |
||||
"message": "Özel anahtarları göster" |
||||
}, |
||||
"showQRCode": { |
||||
"message": "QR Kodu göster" |
||||
}, |
||||
"sign": { |
||||
"message": "İmza" |
||||
}, |
||||
"signed": { |
||||
"message": "İmzalandı" |
||||
}, |
||||
"signMessage": { |
||||
"message": "Mesajı İmzala" |
||||
}, |
||||
"signNotice": { |
||||
"message": "Bu mesajı imzalamanın tehlikeli \nyan etkileri olabilir. Tamamen güvendiğiniz sitelerden \ngelen mesajları hesabınızla imzalayınız.\n Bu tehlikeli metod gelecek versiyonlarda çıkarılacaktır. " |
||||
}, |
||||
"sigRequest": { |
||||
"message": "İmza isteği" |
||||
}, |
||||
"sigRequested": { |
||||
"message": "İmza isteniyor" |
||||
}, |
||||
"spaceBetween": { |
||||
"message": "Kelimeler arası sadece bir boşluk olabilir." |
||||
}, |
||||
"status": { |
||||
"message": "Durum" |
||||
}, |
||||
"stateLogs": { |
||||
"message": "Durum Kayıtları" |
||||
}, |
||||
"stateLogsDescription": { |
||||
"message": "Durum kayıtları açık hesap adresinizi ve gönderilen işlemleri içerir." |
||||
}, |
||||
"stateLogError": { |
||||
"message": "Durum kayıtlarını alma hatası" |
||||
}, |
||||
"submit": { |
||||
"message": "Gönder" |
||||
}, |
||||
"submitted": { |
||||
"message": "Gönderildi" |
||||
}, |
||||
"supportCenter": { |
||||
"message": "Destek merkezimizi ziyaret edin" |
||||
}, |
||||
"symbolBetweenZeroTen": { |
||||
"message": "Sembol 0 ve 10 karakter aralığında olmalıdır." |
||||
}, |
||||
"takesTooLong": { |
||||
"message": "Çok mu uzun sürüyor?" |
||||
}, |
||||
"terms": { |
||||
"message": "Kullanım şartları" |
||||
}, |
||||
"testFaucet": { |
||||
"message": "Test Musluğu" |
||||
}, |
||||
"to": { |
||||
"message": "Kime: " |
||||
}, |
||||
"toETHviaShapeShift": { |
||||
"message": "ShapeShift üstünden $1'dan ETH'e", |
||||
"description": "system will fill in deposit type in start of message" |
||||
}, |
||||
"tokenAddress": { |
||||
"message": "Jeton Adresi" |
||||
}, |
||||
"tokenAlreadyAdded": { |
||||
"message": "Jeton çoktan eklenmiş." |
||||
}, |
||||
"tokenBalance": { |
||||
"message": "Jeton bakiyeniz:" |
||||
}, |
||||
"tokenSelection": { |
||||
"message": "Jeton arayın veya popüler jeton listemizden seçin." |
||||
}, |
||||
"tokenSymbol": { |
||||
"message": "Jeton Sembolü" |
||||
}, |
||||
"tokenWarning1": { |
||||
"message": "MetaMask hesabınızla aldığınız jetonların kaydını tutun. Başka bir hesapla jetonlar satın aldıysanız, o jetonlar burada gözükmeyecektir." |
||||
}, |
||||
"total": { |
||||
"message": "Toplam" |
||||
}, |
||||
"transactions": { |
||||
"message": "işlemler" |
||||
}, |
||||
"transactionError": { |
||||
"message": "İşlem Hatası. Sözleşme kodundan kural dışı durum fırlatıldı." |
||||
}, |
||||
"transactionMemo": { |
||||
"message": "İşlem notu (opsiyonel)" |
||||
}, |
||||
"transactionNumber": { |
||||
"message": "İşlem numarası" |
||||
}, |
||||
"transfers": { |
||||
"message": "Transferler" |
||||
}, |
||||
"troubleTokenBalances": { |
||||
"message": "Jeton bakiyelerinizi yüklerken sorun yaşadık. Buradan izleyebilirsiniz ", |
||||
"description": "Jeton bakiyelerini görmek için bir link (burası) ile takip ediliyor" |
||||
}, |
||||
"twelveWords": { |
||||
"message": "MetaMask hesaplarınızı geri getirmenin tek yolu bu 12 kelimedir.\nBu kelimeleri güvenli ve gizli bir yerde saklayın." |
||||
}, |
||||
"typePassword": { |
||||
"message": "Parolanızı girin" |
||||
}, |
||||
"uiWelcome": { |
||||
"message": "Yeni UI (Beta)'ya hoşgeldiniz" |
||||
}, |
||||
"uiWelcomeMessage": { |
||||
"message": "Şu anda yeni Metamask UI kullanmaktasınız. Gözatın, jeton gönderme gibi yeni özellikleri deneyin ve herhangi bir sorunlar karşılaşırsanız bize haber verin" |
||||
}, |
||||
"unapproved": { |
||||
"message": "Onaylanmadı" |
||||
}, |
||||
"unavailable": { |
||||
"message": "Mevcut değil" |
||||
}, |
||||
"unknown": { |
||||
"message": "Bilinmeyen" |
||||
}, |
||||
"unknownNetwork": { |
||||
"message": "Bilinmeyen özel ağ" |
||||
}, |
||||
"unknownNetworkId": { |
||||
"message": "Bilinmeyen ağ IDsi" |
||||
}, |
||||
"uriErrorMsg": { |
||||
"message": "URIler için HTTP/HTTPS öneki gerekmektedir." |
||||
}, |
||||
"usaOnly": { |
||||
"message": "Sadece ABD", |
||||
"description": "Bu dövizi sadece ABD ikamet edenler kullanabilir" |
||||
}, |
||||
"usedByClients": { |
||||
"message": "Farklı istemciler tarafından kullanılmakta" |
||||
}, |
||||
"useOldUI": { |
||||
"message": "Eski UI kullan" |
||||
}, |
||||
"validFileImport": { |
||||
"message": "Almak için geçerli bir dosya seçmelisiniz" |
||||
}, |
||||
"vaultCreated": { |
||||
"message": "Kasa Yaratıldı" |
||||
}, |
||||
"viewAccount": { |
||||
"message": "Hesabı İncele" |
||||
}, |
||||
"visitWebSite": { |
||||
"message": "Web sitemizi ziyaret edin" |
||||
}, |
||||
"warning": { |
||||
"message": "Uyarı" |
||||
}, |
||||
"welcomeBeta": { |
||||
"message": "MetaMask Beta'ya Hoşgeldiniz" |
||||
}, |
||||
"whatsThis": { |
||||
"message": "Bu nedir?" |
||||
}, |
||||
"yourSigRequested": { |
||||
"message": "İmzanız isteniyor" |
||||
}, |
||||
"youSign": { |
||||
"message": "İmzalıyorsunuz" |
||||
} |
||||
} |
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.7 KiB |
@ -1,44 +0,0 @@ |
||||
const MAINET_RPC_URL = 'https://mainnet.infura.io/metamask' |
||||
const ROPSTEN_RPC_URL = 'https://ropsten.infura.io/metamask' |
||||
const KOVAN_RPC_URL = 'https://kovan.infura.io/metamask' |
||||
const RINKEBY_RPC_URL = 'https://rinkeby.infura.io/metamask' |
||||
const LOCALHOST_RPC_URL = 'http://localhost:8545' |
||||
|
||||
const MAINET_RPC_URL_BETA = 'https://mainnet.infura.io/metamask2' |
||||
const ROPSTEN_RPC_URL_BETA = 'https://ropsten.infura.io/metamask2' |
||||
const KOVAN_RPC_URL_BETA = 'https://kovan.infura.io/metamask2' |
||||
const RINKEBY_RPC_URL_BETA = 'https://rinkeby.infura.io/metamask2' |
||||
|
||||
const DEFAULT_RPC = 'rinkeby' |
||||
const OLD_UI_NETWORK_TYPE = 'network' |
||||
const BETA_UI_NETWORK_TYPE = 'networkBeta' |
||||
|
||||
global.METAMASK_DEBUG = process.env.METAMASK_DEBUG |
||||
|
||||
module.exports = { |
||||
network: { |
||||
localhost: LOCALHOST_RPC_URL, |
||||
mainnet: MAINET_RPC_URL, |
||||
ropsten: ROPSTEN_RPC_URL, |
||||
kovan: KOVAN_RPC_URL, |
||||
rinkeby: RINKEBY_RPC_URL, |
||||
}, |
||||
// Used for beta UI
|
||||
networkBeta: { |
||||
localhost: LOCALHOST_RPC_URL, |
||||
mainnet: MAINET_RPC_URL_BETA, |
||||
ropsten: ROPSTEN_RPC_URL_BETA, |
||||
kovan: KOVAN_RPC_URL_BETA, |
||||
rinkeby: RINKEBY_RPC_URL_BETA, |
||||
}, |
||||
networkNames: { |
||||
3: 'Ropsten', |
||||
4: 'Rinkeby', |
||||
42: 'Kovan', |
||||
}, |
||||
enums: { |
||||
DEFAULT_RPC, |
||||
OLD_UI_NETWORK_TYPE, |
||||
BETA_UI_NETWORK_TYPE, |
||||
}, |
||||
} |
@ -0,0 +1,56 @@ |
||||
const ROPSTEN = 'ropsten' |
||||
const RINKEBY = 'rinkeby' |
||||
const KOVAN = 'kovan' |
||||
const MAINNET = 'mainnet' |
||||
const LOCALHOST = 'localhost' |
||||
|
||||
const ROPSTEN_CODE = 3 |
||||
const RINKEYBY_CODE = 4 |
||||
const KOVAN_CODE = 42 |
||||
|
||||
const ROPSTEN_DISPLAY_NAME = 'Ropsten' |
||||
const RINKEBY_DISPLAY_NAME = 'Rinkeby' |
||||
const KOVAN_DISPLAY_NAME = 'Kovan' |
||||
const MAINNET_DISPLAY_NAME = 'Main Ethereum Network' |
||||
|
||||
const MAINNET_RPC_URL = 'https://mainnet.infura.io/metamask' |
||||
const ROPSTEN_RPC_URL = 'https://ropsten.infura.io/metamask' |
||||
const KOVAN_RPC_URL = 'https://kovan.infura.io/metamask' |
||||
const RINKEBY_RPC_URL = 'https://rinkeby.infura.io/metamask' |
||||
const LOCALHOST_RPC_URL = 'http://localhost:8545' |
||||
|
||||
const MAINNET_RPC_URL_BETA = 'https://mainnet.infura.io/metamask2' |
||||
const ROPSTEN_RPC_URL_BETA = 'https://ropsten.infura.io/metamask2' |
||||
const KOVAN_RPC_URL_BETA = 'https://kovan.infura.io/metamask2' |
||||
const RINKEBY_RPC_URL_BETA = 'https://rinkeby.infura.io/metamask2' |
||||
|
||||
const DEFAULT_NETWORK = 'rinkeby' |
||||
const OLD_UI_NETWORK_TYPE = 'network' |
||||
const BETA_UI_NETWORK_TYPE = 'networkBeta' |
||||
|
||||
module.exports = { |
||||
ROPSTEN, |
||||
RINKEBY, |
||||
KOVAN, |
||||
MAINNET, |
||||
LOCALHOST, |
||||
ROPSTEN_CODE, |
||||
RINKEYBY_CODE, |
||||
KOVAN_CODE, |
||||
ROPSTEN_DISPLAY_NAME, |
||||
RINKEBY_DISPLAY_NAME, |
||||
KOVAN_DISPLAY_NAME, |
||||
MAINNET_DISPLAY_NAME, |
||||
MAINNET_RPC_URL, |
||||
ROPSTEN_RPC_URL, |
||||
KOVAN_RPC_URL, |
||||
RINKEBY_RPC_URL, |
||||
LOCALHOST_RPC_URL, |
||||
MAINNET_RPC_URL_BETA, |
||||
ROPSTEN_RPC_URL_BETA, |
||||
KOVAN_RPC_URL_BETA, |
||||
RINKEBY_RPC_URL_BETA, |
||||
DEFAULT_NETWORK, |
||||
OLD_UI_NETWORK_TYPE, |
||||
BETA_UI_NETWORK_TYPE, |
||||
} |
@ -0,0 +1,2 @@ |
||||
const NetworkController = require('./network') |
||||
module.exports = NetworkController |
@ -0,0 +1,65 @@ |
||||
const { |
||||
ROPSTEN, |
||||
RINKEBY, |
||||
KOVAN, |
||||
MAINNET, |
||||
LOCALHOST, |
||||
ROPSTEN_CODE, |
||||
RINKEYBY_CODE, |
||||
KOVAN_CODE, |
||||
ROPSTEN_DISPLAY_NAME, |
||||
RINKEBY_DISPLAY_NAME, |
||||
KOVAN_DISPLAY_NAME, |
||||
MAINNET_DISPLAY_NAME, |
||||
MAINNET_RPC_URL, |
||||
ROPSTEN_RPC_URL, |
||||
KOVAN_RPC_URL, |
||||
RINKEBY_RPC_URL, |
||||
LOCALHOST_RPC_URL, |
||||
MAINNET_RPC_URL_BETA, |
||||
ROPSTEN_RPC_URL_BETA, |
||||
KOVAN_RPC_URL_BETA, |
||||
RINKEBY_RPC_URL_BETA, |
||||
OLD_UI_NETWORK_TYPE, |
||||
BETA_UI_NETWORK_TYPE, |
||||
} = require('./enums') |
||||
|
||||
const networkToNameMap = { |
||||
[ROPSTEN]: ROPSTEN_DISPLAY_NAME, |
||||
[RINKEBY]: RINKEBY_DISPLAY_NAME, |
||||
[KOVAN]: KOVAN_DISPLAY_NAME, |
||||
[MAINNET]: MAINNET_DISPLAY_NAME, |
||||
[ROPSTEN_CODE]: ROPSTEN_DISPLAY_NAME, |
||||
[RINKEYBY_CODE]: RINKEBY_DISPLAY_NAME, |
||||
[KOVAN_CODE]: KOVAN_DISPLAY_NAME, |
||||
} |
||||
|
||||
const networkEndpointsMap = { |
||||
[OLD_UI_NETWORK_TYPE]: { |
||||
[LOCALHOST]: LOCALHOST_RPC_URL, |
||||
[MAINNET]: MAINNET_RPC_URL, |
||||
[ROPSTEN]: ROPSTEN_RPC_URL, |
||||
[KOVAN]: KOVAN_RPC_URL, |
||||
[RINKEBY]: RINKEBY_RPC_URL, |
||||
}, |
||||
[BETA_UI_NETWORK_TYPE]: { |
||||
[LOCALHOST]: LOCALHOST_RPC_URL, |
||||
[MAINNET]: MAINNET_RPC_URL_BETA, |
||||
[ROPSTEN]: ROPSTEN_RPC_URL_BETA, |
||||
[KOVAN]: KOVAN_RPC_URL_BETA, |
||||
[RINKEBY]: RINKEBY_RPC_URL_BETA, |
||||
}, |
||||
} |
||||
|
||||
const getNetworkDisplayName = key => networkToNameMap[key] |
||||
|
||||
const getNetworkEndpoints = (networkType = OLD_UI_NETWORK_TYPE) => { |
||||
return { |
||||
...networkEndpointsMap[networkType], |
||||
} |
||||
} |
||||
|
||||
module.exports = { |
||||
getNetworkDisplayName, |
||||
getNetworkEndpoints, |
||||
} |
@ -0,0 +1,81 @@ |
||||
const ObservableStore = require('obs-store') |
||||
const { warn } = require('loglevel') |
||||
|
||||
// By default, poll every 3 minutes
|
||||
const DEFAULT_INTERVAL = 180 * 1000 |
||||
|
||||
/** |
||||
* A controller that polls for token exchange |
||||
* rates based on a user's current token list |
||||
*/ |
||||
class TokenRatesController { |
||||
/** |
||||
* Creates a TokenRatesController |
||||
* |
||||
* @param {Object} [config] - Options to configure controller |
||||
*/ |
||||
constructor ({ interval = DEFAULT_INTERVAL, preferences } = {}) { |
||||
this.store = new ObservableStore() |
||||
this.preferences = preferences |
||||
this.interval = interval |
||||
} |
||||
|
||||
/** |
||||
* Updates exchange rates for all tokens |
||||
*/ |
||||
async updateExchangeRates () { |
||||
if (!this.isActive) { return } |
||||
const contractExchangeRates = {} |
||||
for (const i in this._tokens) { |
||||
const address = this._tokens[i].address |
||||
contractExchangeRates[address] = await this.fetchExchangeRate(address) |
||||
} |
||||
this.store.putState({ contractExchangeRates }) |
||||
} |
||||
|
||||
/** |
||||
* Fetches a token exchange rate by address |
||||
* |
||||
* @param {String} address - Token contract address |
||||
*/ |
||||
async fetchExchangeRate (address) { |
||||
try { |
||||
const response = await fetch(`https://metamask.balanc3.net/prices?from=${address}&to=ETH&autoConversion=false&summaryOnly=true`) |
||||
const json = await response.json() |
||||
return json && json.length ? json[0].averagePrice : 0 |
||||
} catch (error) { |
||||
warn(`MetaMask - TokenRatesController exchange rate fetch failed for ${address}.`, error) |
||||
return 0 |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @type {Number} |
||||
*/ |
||||
set interval (interval) { |
||||
this._handle && clearInterval(this._handle) |
||||
if (!interval) { return } |
||||
this._handle = setInterval(() => { this.updateExchangeRates() }, interval) |
||||
} |
||||
|
||||
/** |
||||
* @type {Object} |
||||
*/ |
||||
set preferences (preferences) { |
||||
this._preferences && this._preferences.unsubscribe() |
||||
if (!preferences) { return } |
||||
this._preferences = preferences |
||||
this.tokens = preferences.getState().tokens |
||||
preferences.subscribe(({ tokens = [] }) => { this.tokens = tokens }) |
||||
} |
||||
|
||||
/** |
||||
* @type {Array} |
||||
*/ |
||||
set tokens (tokens) { |
||||
this._tokens = tokens |
||||
this.updateExchangeRates() |
||||
} |
||||
} |
||||
|
||||
module.exports = TokenRatesController |
@ -0,0 +1,92 @@ |
||||
# Transaction Controller |
||||
|
||||
Transaction Controller is an aggregate of sub-controllers and trackers |
||||
exposed to the MetaMask controller. |
||||
|
||||
- txStateManager |
||||
responsible for the state of a transaction and |
||||
storing the transaction |
||||
- pendingTxTracker |
||||
watching blocks for transactions to be include |
||||
and emitting confirmed events |
||||
- txGasUtil |
||||
gas calculations and safety buffering |
||||
- nonceTracker |
||||
calculating nonces |
||||
|
||||
## Flow diagram of processing a transaction |
||||
|
||||
![transaction-flow](../../../../docs/transaction-flow.png) |
||||
|
||||
## txMeta's & txParams |
||||
|
||||
A txMeta is the "meta" object it has all the random bits of info we need about a transaction on it. txParams are sacred every thing on txParams gets signed so it must |
||||
be a valid key and be hex prefixed except for the network number. Extra stuff must go on the txMeta! |
||||
|
||||
Here is a txMeta too look at: |
||||
|
||||
```js |
||||
txMeta = { |
||||
"id": 2828415030114568, // unique id for this txMeta used for look ups |
||||
"time": 1524094064821, // time of creation |
||||
"status": "confirmed", |
||||
"metamaskNetworkId": "1524091532133", //the network id for the transaction |
||||
"loadingDefaults": false, // used to tell the ui when we are done calculatyig gass defaults |
||||
"txParams": { // the txParams object |
||||
"from": "0x8acce2391c0d510a6c5e5d8f819a678f79b7e675", |
||||
"to": "0x8acce2391c0d510a6c5e5d8f819a678f79b7e675", |
||||
"value": "0x0", |
||||
"gasPrice": "0x3b9aca00", |
||||
"gas": "0x7b0c", |
||||
"nonce": "0x0" |
||||
}, |
||||
"history": [{ //debug |
||||
"id": 2828415030114568, |
||||
"time": 1524094064821, |
||||
"status": "unapproved", |
||||
"metamaskNetworkId": "1524091532133", |
||||
"loadingDefaults": true, |
||||
"txParams": { |
||||
"from": "0x8acce2391c0d510a6c5e5d8f819a678f79b7e675", |
||||
"to": "0x8acce2391c0d510a6c5e5d8f819a678f79b7e675", |
||||
"value": "0x0" |
||||
} |
||||
}, |
||||
[ |
||||
{ |
||||
"op": "add", |
||||
"path": "/txParams/gasPrice", |
||||
"value": "0x3b9aca00" |
||||
}, |
||||
...], // I've removed most of history for this |
||||
"gasPriceSpecified": false, //whether or not the user/dapp has specified gasPrice |
||||
"gasLimitSpecified": false, //whether or not the user/dapp has specified gas |
||||
"estimatedGas": "5208", |
||||
"origin": "MetaMask", //debug |
||||
"nonceDetails": { |
||||
"params": { |
||||
"highestLocallyConfirmed": 0, |
||||
"highestSuggested": 0, |
||||
"nextNetworkNonce": 0 |
||||
}, |
||||
"local": { |
||||
"name": "local", |
||||
"nonce": 0, |
||||
"details": { |
||||
"startPoint": 0, |
||||
"highest": 0 |
||||
} |
||||
}, |
||||
"network": { |
||||
"name": "network", |
||||
"nonce": 0, |
||||
"details": { |
||||
"baseCount": 0 |
||||
} |
||||
} |
||||
}, |
||||
"rawTx": "0xf86980843b9aca00827b0c948acce2391c0d510a6c5e5d8f819a678f79b7e67580808602c5b5de66eea05c01a320b96ac730cb210ca56d2cb71fa360e1fc2c21fa5cf333687d18eb323fa02ed05987a6e5fd0f2459fcff80710b76b83b296454ad9a37594a0ccb4643ea90", // used for rebroadcast |
||||
"hash": "0xa45ba834b97c15e6ff4ed09badd04ecd5ce884b455eb60192cdc73bcc583972a", |
||||
"submittedTime": 1524094077902 // time of the attempt to submit the raw tx to the network, used in the ui to show the retry button |
||||
} |
||||
``` |
@ -0,0 +1,99 @@ |
||||
const { |
||||
addHexPrefix, |
||||
isValidAddress, |
||||
} = require('ethereumjs-util') |
||||
|
||||
/** |
||||
@module |
||||
*/ |
||||
module.exports = { |
||||
normalizeTxParams, |
||||
validateTxParams, |
||||
validateFrom, |
||||
validateRecipient, |
||||
getFinalStates, |
||||
} |
||||
|
||||
|
||||
// functions that handle normalizing of that key in txParams
|
||||
const normalizers = { |
||||
from: from => addHexPrefix(from).toLowerCase(), |
||||
to: to => addHexPrefix(to).toLowerCase(), |
||||
nonce: nonce => addHexPrefix(nonce), |
||||
value: value => addHexPrefix(value), |
||||
data: data => addHexPrefix(data), |
||||
gas: gas => addHexPrefix(gas), |
||||
gasPrice: gasPrice => addHexPrefix(gasPrice), |
||||
} |
||||
|
||||
/** |
||||
normalizes txParams |
||||
@param txParams {object} |
||||
@returns {object} normalized txParams |
||||
*/ |
||||
function normalizeTxParams (txParams) { |
||||
// apply only keys in the normalizers
|
||||
const normalizedTxParams = {} |
||||
for (const key in normalizers) { |
||||
if (txParams[key]) normalizedTxParams[key] = normalizers[key](txParams[key]) |
||||
} |
||||
return normalizedTxParams |
||||
} |
||||
|
||||
/** |
||||
validates txParams |
||||
@param txParams {object} |
||||
*/ |
||||
function validateTxParams (txParams) { |
||||
validateFrom(txParams) |
||||
validateRecipient(txParams) |
||||
if ('value' in txParams) { |
||||
const value = txParams.value.toString() |
||||
if (value.includes('-')) { |
||||
throw new Error(`Invalid transaction value of ${txParams.value} not a positive number.`) |
||||
} |
||||
|
||||
if (value.includes('.')) { |
||||
throw new Error(`Invalid transaction value of ${txParams.value} number must be in wei`) |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
validates the from field in txParams |
||||
@param txParams {object} |
||||
*/ |
||||
function validateFrom (txParams) { |
||||
if (!(typeof txParams.from === 'string')) throw new Error(`Invalid from address ${txParams.from} not a string`) |
||||
if (!isValidAddress(txParams.from)) throw new Error('Invalid from address') |
||||
} |
||||
|
||||
/** |
||||
validates the to field in txParams |
||||
@param txParams {object} |
||||
*/ |
||||
function validateRecipient (txParams) { |
||||
if (txParams.to === '0x' || txParams.to === null) { |
||||
if (txParams.data) { |
||||
delete txParams.to |
||||
} else { |
||||
throw new Error('Invalid recipient address') |
||||
} |
||||
} else if (txParams.to !== undefined && !isValidAddress(txParams.to)) { |
||||
throw new Error('Invalid recipient address') |
||||
} |
||||
return txParams |
||||
} |
||||
|
||||
/** |
||||
@returns an {array} of states that can be considered final |
||||
*/ |
||||
function getFinalStates () { |
||||
return [ |
||||
'rejected', // the user has responded no!
|
||||
'confirmed', // the tx has been included in a block.
|
||||
'failed', // the tx failed for some reason, included on tx data.
|
||||
'dropped', // the tx nonce was already used
|
||||
] |
||||
} |
||||
|
@ -1,69 +1,97 @@ |
||||
const asmcrypto = require('asmcrypto.js') |
||||
const Unibabel = require('browserify-unibabel') |
||||
|
||||
/** |
||||
* A Microsoft Edge-specific encryption class that exposes |
||||
* the interface expected by eth-keykeyring-controller |
||||
*/ |
||||
class EdgeEncryptor { |
||||
/** |
||||
* Encrypts an arbitrary object to ciphertext |
||||
* |
||||
* @param {string} password Used to generate a key to encrypt the data |
||||
* @param {Object} dataObject Data to encrypt |
||||
* @returns {Promise<string>} Promise resolving to an object with ciphertext |
||||
*/ |
||||
encrypt (password, dataObject) { |
||||
var salt = this._generateSalt() |
||||
return this._keyFromPassword(password, salt) |
||||
.then(function (key) { |
||||
var data = JSON.stringify(dataObject) |
||||
var dataBuffer = Unibabel.utf8ToBuffer(data) |
||||
var vector = global.crypto.getRandomValues(new Uint8Array(16)) |
||||
var resultbuffer = asmcrypto.AES_GCM.encrypt(dataBuffer, key, vector) |
||||
|
||||
encrypt (password, dataObject) { |
||||
var buffer = new Uint8Array(resultbuffer) |
||||
var vectorStr = Unibabel.bufferToBase64(vector) |
||||
var vaultStr = Unibabel.bufferToBase64(buffer) |
||||
return JSON.stringify({ |
||||
data: vaultStr, |
||||
iv: vectorStr, |
||||
salt: salt, |
||||
}) |
||||
}) |
||||
} |
||||
|
||||
var salt = this._generateSalt() |
||||
return this._keyFromPassword(password, salt) |
||||
.then(function (key) { |
||||
/** |
||||
* Decrypts an arbitrary object from ciphertext |
||||
* |
||||
* @param {string} password Used to generate a key to decrypt the data |
||||
* @param {string} text Ciphertext of an encrypted object |
||||
* @returns {Promise<Object>} Promise resolving to copy of decrypted object |
||||
*/ |
||||
decrypt (password, text) { |
||||
const payload = JSON.parse(text) |
||||
const salt = payload.salt |
||||
return this._keyFromPassword(password, salt) |
||||
.then(function (key) { |
||||
const encryptedData = Unibabel.base64ToBuffer(payload.data) |
||||
const vector = Unibabel.base64ToBuffer(payload.iv) |
||||
return new Promise((resolve, reject) => { |
||||
var result |
||||
try { |
||||
result = asmcrypto.AES_GCM.decrypt(encryptedData, key, vector) |
||||
} catch (err) { |
||||
return reject(new Error('Incorrect password')) |
||||
} |
||||
const decryptedData = new Uint8Array(result) |
||||
const decryptedStr = Unibabel.bufferToUtf8(decryptedData) |
||||
const decryptedObj = JSON.parse(decryptedStr) |
||||
resolve(decryptedObj) |
||||
}) |
||||
}) |
||||
} |
||||
|
||||
var data = JSON.stringify(dataObject) |
||||
var dataBuffer = Unibabel.utf8ToBuffer(data) |
||||
var vector = global.crypto.getRandomValues(new Uint8Array(16)) |
||||
var resultbuffer = asmcrypto.AES_GCM.encrypt(dataBuffer, key, vector) |
||||
/** |
||||
* Retrieves a cryptographic key using a password |
||||
* |
||||
* @private |
||||
* @param {string} password Password used to unlock a cryptographic key |
||||
* @param {string} salt Random base64 data |
||||
* @returns {Promise<Object>} Promise resolving to a derived key |
||||
*/ |
||||
_keyFromPassword (password, salt) { |
||||
|
||||
var buffer = new Uint8Array(resultbuffer) |
||||
var vectorStr = Unibabel.bufferToBase64(vector) |
||||
var vaultStr = Unibabel.bufferToBase64(buffer) |
||||
return JSON.stringify({ |
||||
data: vaultStr, |
||||
iv: vectorStr, |
||||
salt: salt, |
||||
}) |
||||
}) |
||||
} |
||||
var passBuffer = Unibabel.utf8ToBuffer(password) |
||||
var saltBuffer = Unibabel.base64ToBuffer(salt) |
||||
return new Promise((resolve) => { |
||||
var key = asmcrypto.PBKDF2_HMAC_SHA256.bytes(passBuffer, saltBuffer, 10000) |
||||
resolve(key) |
||||
}) |
||||
} |
||||
|
||||
decrypt (password, text) { |
||||
|
||||
const payload = JSON.parse(text) |
||||
const salt = payload.salt |
||||
return this._keyFromPassword(password, salt) |
||||
.then(function (key) { |
||||
const encryptedData = Unibabel.base64ToBuffer(payload.data) |
||||
const vector = Unibabel.base64ToBuffer(payload.iv) |
||||
return new Promise((resolve, reject) => { |
||||
var result |
||||
try { |
||||
result = asmcrypto.AES_GCM.decrypt(encryptedData, key, vector) |
||||
} catch (err) { |
||||
return reject(new Error('Incorrect password')) |
||||
} |
||||
const decryptedData = new Uint8Array(result) |
||||
const decryptedStr = Unibabel.bufferToUtf8(decryptedData) |
||||
const decryptedObj = JSON.parse(decryptedStr) |
||||
resolve(decryptedObj) |
||||
}) |
||||
}) |
||||
} |
||||
|
||||
_keyFromPassword (password, salt) { |
||||
|
||||
var passBuffer = Unibabel.utf8ToBuffer(password) |
||||
var saltBuffer = Unibabel.base64ToBuffer(salt) |
||||
return new Promise((resolve) => { |
||||
var key = asmcrypto.PBKDF2_HMAC_SHA256.bytes(passBuffer, saltBuffer, 10000) |
||||
resolve(key) |
||||
}) |
||||
} |
||||
|
||||
_generateSalt (byteCount = 32) { |
||||
var view = new Uint8Array(byteCount) |
||||
global.crypto.getRandomValues(view) |
||||
var b64encoded = btoa(String.fromCharCode.apply(null, view)) |
||||
return b64encoded |
||||
} |
||||
/** |
||||
* Generates random base64 encoded data |
||||
* |
||||
* @private |
||||
* @returns {string} Randomized base64 encoded data |
||||
*/ |
||||
_generateSalt (byteCount = 32) { |
||||
var view = new Uint8Array(byteCount) |
||||
global.crypto.getRandomValues(view) |
||||
var b64encoded = btoa(String.fromCharCode.apply(null, view)) |
||||
return b64encoded |
||||
} |
||||
} |
||||
|
||||
module.exports = EdgeEncryptor |
||||
|
@ -1,15 +1,24 @@ |
||||
// test and development environment variables
|
||||
const env = process.env.METAMASK_ENV |
||||
const METAMASK_DEBUG = process.env.METAMASK_DEBUG |
||||
const { DEFAULT_NETWORK, MAINNET } = require('./controllers/network/enums') |
||||
|
||||
//
|
||||
// The default state of MetaMask
|
||||
//
|
||||
module.exports = { |
||||
/** |
||||
* @typedef {Object} FirstTimeState |
||||
* @property {Object} config Initial configuration parameters |
||||
* @property {Object} NetworkController Network controller state |
||||
*/ |
||||
|
||||
/** |
||||
* @type {FirstTimeState} |
||||
*/ |
||||
const initialState = { |
||||
config: {}, |
||||
NetworkController: { |
||||
provider: { |
||||
type: (METAMASK_DEBUG || env === 'test') ? 'rinkeby' : 'mainnet', |
||||
type: (METAMASK_DEBUG || env === 'test') ? DEFAULT_NETWORK : MAINNET, |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
module.exports = initialState |
||||
|
@ -0,0 +1,49 @@ |
||||
const ObservableStore = require('obs-store') |
||||
|
||||
/** |
||||
* An ObservableStore that can composes a flat |
||||
* structure of child stores based on configuration |
||||
*/ |
||||
class ComposableObservableStore extends ObservableStore { |
||||
/** |
||||
* Create a new store |
||||
* |
||||
* @param {Object} [initState] - The initial store state |
||||
* @param {Object} [config] - Map of internal state keys to child stores |
||||
*/ |
||||
constructor (initState, config) { |
||||
super(initState) |
||||
this.updateStructure(config) |
||||
} |
||||
|
||||
/** |
||||
* Composes a new internal store subscription structure |
||||
* |
||||
* @param {Object} [config] - Map of internal state keys to child stores |
||||
*/ |
||||
updateStructure (config) { |
||||
this.config = config |
||||
this.removeAllListeners() |
||||
for (const key in config) { |
||||
config[key].subscribe((state) => { |
||||
this.updateState({ [key]: state }) |
||||
}) |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Merges all child store state into a single object rather than |
||||
* returning an object keyed by child store class name |
||||
* |
||||
* @returns {Object} - Object containing merged child store state |
||||
*/ |
||||
getFlatState () { |
||||
let flatState = {} |
||||
for (const key in this.config) { |
||||
flatState = { ...flatState, ...this.config[key].getState() } |
||||
} |
||||
return flatState |
||||
} |
||||
} |
||||
|
||||
module.exports = ComposableObservableStore |
@ -1,9 +1,13 @@ |
||||
// append dapp origin domain to request
|
||||
module.exports = createOriginMiddleware |
||||
|
||||
function createOriginMiddleware ({ origin }) { |
||||
return function originMiddleware (req, res, next, end) { |
||||
req.origin = origin |
||||
/** |
||||
* Returns a middleware that appends the DApp origin to request |
||||
* @param {{ origin: string }} opts - The middleware options |
||||
* @returns {Function} |
||||
*/ |
||||
function createOriginMiddleware (opts) { |
||||
return function originMiddleware (/** @type {any} */ req, /** @type {any} */ _, /** @type {Function} */ next) { |
||||
req.origin = opts.origin |
||||
next() |
||||
} |
||||
} |
||||
|
@ -0,0 +1,9 @@ |
||||
const ENVIRONMENT_TYPE_POPUP = 'popup' |
||||
const ENVIRONMENT_TYPE_NOTIFICATION = 'notification' |
||||
const ENVIRONMENT_TYPE_FULLSCREEN = 'fullscreen' |
||||
|
||||
module.exports = { |
||||
ENVIRONMENT_TYPE_POPUP, |
||||
ENVIRONMENT_TYPE_NOTIFICATION, |
||||
ENVIRONMENT_TYPE_FULLSCREEN, |
||||
} |
@ -1,10 +0,0 @@ |
||||
module.exports = function environmentType () { |
||||
const url = window.location.href |
||||
if (url.match(/popup.html$/)) { |
||||
return 'popup' |
||||
} else if (url.match(/home.html$/)) { |
||||
return 'responsive' |
||||
} else { |
||||
return 'notification' |
||||
} |
||||
} |
@ -0,0 +1,50 @@ |
||||
const clone = require('clone') |
||||
|
||||
module.exports = getObjStructure |
||||
|
||||
// This will create an object that represents the structure of the given object
|
||||
// it replaces all values with the result of their type
|
||||
|
||||
// {
|
||||
// "data": {
|
||||
// "CurrencyController": {
|
||||
// "conversionDate": "number",
|
||||
// "conversionRate": "number",
|
||||
// "currentCurrency": "string"
|
||||
// }
|
||||
// }
|
||||
|
||||
/** |
||||
* Creates an object that represents the structure of the given object. It replaces all values with the result of their |
||||
* type. |
||||
* |
||||
* @param {object} obj The object for which a 'structure' will be returned. Usually a plain object and not a class.
|
||||
* @returns {object} The "mapped" version of a deep clone of the passed object, with each non-object property value |
||||
* replaced with the javascript type of that value. |
||||
* |
||||
*/ |
||||
function getObjStructure(obj) { |
||||
const structure = clone(obj) |
||||
return deepMap(structure, (value) => { |
||||
return value === null ? 'null' : typeof value |
||||
}) |
||||
} |
||||
|
||||
/** |
||||
* Modifies all the properties and deeply nested of a passed object. Iterates recursively over all nested objects and |
||||
* their properties, and covers the entire depth of the object. At each property value which is not an object is modified. |
||||
* |
||||
* @param {object} target The object to modify |
||||
* @param {Function} visit The modifier to apply to each non-object property value |
||||
* @returns {object} The modified object |
||||
*/ |
||||
function deepMap(target = {}, visit) { |
||||
Object.entries(target).forEach(([key, value]) => { |
||||
if (typeof value === 'object' && value !== null) { |
||||
target[key] = deepMap(value, visit) |
||||
} else { |
||||
target[key] = visit(value) |
||||
} |
||||
}) |
||||
return target |
||||
} |
@ -1,11 +0,0 @@ |
||||
module.exports = function isPopupOrNotification () { |
||||
const url = window.location.href |
||||
// if (url.match(/popup.html$/) || url.match(/home.html$/)) {
|
||||
// Below regexes needed for feature toggles (e.g. see line ~340 in ui/app/app.js)
|
||||
// Revert below regexes to above commented out regexes before merge to master
|
||||
if (url.match(/popup.html(?:\?.+)*$/) || url.match(/home.html(?:\?.+)*$/)) { |
||||
return 'popup' |
||||
} else { |
||||
return 'notification' |
||||
} |
||||
} |
@ -0,0 +1,41 @@ |
||||
|
||||
const version = 24 |
||||
|
||||
/* |
||||
|
||||
This migration ensures that the from address in txParams is to lower case for |
||||
all unapproved transactions |
||||
|
||||
*/ |
||||
|
||||
const clone = require('clone') |
||||
|
||||
module.exports = { |
||||
version, |
||||
|
||||
migrate: async function (originalVersionedData) { |
||||
const versionedData = clone(originalVersionedData) |
||||
versionedData.meta.version = version |
||||
const state = versionedData.data |
||||
const newState = transformState(state) |
||||
versionedData.data = newState |
||||
return versionedData |
||||
}, |
||||
} |
||||
|
||||
function transformState (state) { |
||||
const newState = state |
||||
if (!newState.TransactionController) return newState |
||||
const transactions = newState.TransactionController.transactions |
||||
newState.TransactionController.transactions = transactions.map((txMeta, _, txList) => { |
||||
if ( |
||||
txMeta.status === 'unapproved' && |
||||
txMeta.txParams && |
||||
txMeta.txParams.from |
||||
) { |
||||
txMeta.txParams.from = txMeta.txParams.from.toLowerCase() |
||||
} |
||||
return txMeta |
||||
}) |
||||
return newState |
||||
} |
@ -0,0 +1,61 @@ |
||||
// next version number
|
||||
const version = 25 |
||||
|
||||
/* |
||||
|
||||
normalizes txParams on unconfirmed txs |
||||
|
||||
*/ |
||||
const ethUtil = require('ethereumjs-util') |
||||
const clone = require('clone') |
||||
|
||||
module.exports = { |
||||
version, |
||||
|
||||
migrate: async function (originalVersionedData) { |
||||
const versionedData = clone(originalVersionedData) |
||||
versionedData.meta.version = version |
||||
const state = versionedData.data |
||||
const newState = transformState(state) |
||||
versionedData.data = newState |
||||
return versionedData |
||||
}, |
||||
} |
||||
|
||||
function transformState (state) { |
||||
const newState = state |
||||
|
||||
if (newState.TransactionController) { |
||||
if (newState.TransactionController.transactions) { |
||||
const transactions = newState.TransactionController.transactions |
||||
newState.TransactionController.transactions = transactions.map((txMeta) => { |
||||
if (txMeta.status !== 'unapproved') return txMeta |
||||
txMeta.txParams = normalizeTxParams(txMeta.txParams) |
||||
return txMeta |
||||
}) |
||||
} |
||||
} |
||||
|
||||
return newState |
||||
} |
||||
|
||||
function normalizeTxParams (txParams) { |
||||
// functions that handle normalizing of that key in txParams
|
||||
const whiteList = { |
||||
from: from => ethUtil.addHexPrefix(from).toLowerCase(), |
||||
to: to => ethUtil.addHexPrefix(txParams.to).toLowerCase(), |
||||
nonce: nonce => ethUtil.addHexPrefix(nonce), |
||||
value: value => ethUtil.addHexPrefix(value), |
||||
data: data => ethUtil.addHexPrefix(data), |
||||
gas: gas => ethUtil.addHexPrefix(gas), |
||||
gasPrice: gasPrice => ethUtil.addHexPrefix(gasPrice), |
||||
} |
||||
|
||||
// apply only keys in the whiteList
|
||||
const normalizedTxParams = {} |
||||
Object.keys(whiteList).forEach((key) => { |
||||
if (txParams[key]) normalizedTxParams[key] = whiteList[key](txParams[key]) |
||||
}) |
||||
|
||||
return normalizedTxParams |
||||
} |
@ -0,0 +1,29 @@ |
||||
// next version number
|
||||
const version = 0 |
||||
|
||||
/* |
||||
|
||||
description of migration and what it does |
||||
|
||||
*/ |
||||
|
||||
const clone = require('clone') |
||||
|
||||
module.exports = { |
||||
version, |
||||
|
||||
migrate: async function (originalVersionedData) { |
||||
const versionedData = clone(originalVersionedData) |
||||
versionedData.meta.version = version |
||||
const state = versionedData.data |
||||
const newState = transformState(state) |
||||
versionedData.data = newState |
||||
return versionedData |
||||
}, |
||||
} |
||||
|
||||
function transformState (state) { |
||||
const newState = state |
||||
// transform state here
|
||||
return newState |
||||
} |
@ -0,0 +1,49 @@ |
||||
const fs = require('fs') |
||||
const { SourceMapConsumer } = require('source-map') |
||||
|
||||
//
|
||||
// Utility to help check if sourcemaps are working
|
||||
//
|
||||
// searches `dist/chrome/inpage.js` for "new Error" statements
|
||||
// and prints their source lines using the sourcemaps.
|
||||
// if not working it may error or print minified garbage
|
||||
//
|
||||
|
||||
start() |
||||
|
||||
async function start() { |
||||
const rawBuild = fs.readFileSync(__dirname + '/../dist/chrome/inpage.js', 'utf8') |
||||
const rawSourceMap = fs.readFileSync(__dirname + '/../dist/sourcemaps/inpage.js.map', 'utf8') |
||||
const consumer = await new SourceMapConsumer(rawSourceMap) |
||||
|
||||
console.log('hasContentsOfAllSources:', consumer.hasContentsOfAllSources(), '\n') |
||||
console.log('sources:') |
||||
consumer.sources.map((sourcePath) => console.log(sourcePath)) |
||||
|
||||
console.log('\nexamining "new Error" statements:\n') |
||||
const sourceLines = rawBuild.split('\n') |
||||
sourceLines.map(line => indicesOf('new Error', line)) |
||||
.forEach((errorIndices, lineIndex) => { |
||||
// if (errorIndex === null) return console.log('line does not contain "new Error"')
|
||||
errorIndices.forEach((errorIndex) => { |
||||
const position = { line: lineIndex + 1, column: errorIndex } |
||||
const result = consumer.originalPositionFor(position) |
||||
if (!result.source) return console.warn(`!! missing source for position: ${position}`) |
||||
// filter out deps distributed minified without sourcemaps
|
||||
if (result.source === 'node_modules/browserify/node_modules/browser-pack/_prelude.js') return // minified mess
|
||||
if (result.source === 'node_modules/web3/dist/web3.min.js') return // minified mess
|
||||
const sourceContent = consumer.sourceContentFor(result.source) |
||||
const sourceLines = sourceContent.split('\n') |
||||
const line = sourceLines[result.line-1] |
||||
console.log(`\n========================== ${result.source} ====================================\n`) |
||||
console.log(line) |
||||
console.log(`\n==============================================================================\n`) |
||||
}) |
||||
}) |
||||
} |
||||
|
||||
function indicesOf(substring, string) { |
||||
var a=[],i=-1; |
||||
while((i=string.indexOf(substring,i+1)) >= 0) a.push(i); |
||||
return a; |
||||
} |
@ -0,0 +1,134 @@ |
||||
{ |
||||
"metamask": { |
||||
"isInitialized": true, |
||||
"isUnlocked": true, |
||||
"featureFlags": {"betaUI": true}, |
||||
"rpcTarget": "https://rawtestrpc.metamask.io/", |
||||
"identities": { |
||||
"0xfdea65c8e26263f6d9a1b5de9555d2931a33b825": { |
||||
"address": "0xfdea65c8e26263f6d9a1b5de9555d2931a33b825", |
||||
"name": "Send Account 1" |
||||
}, |
||||
"0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb": { |
||||
"address": "0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb", |
||||
"name": "Send Account 2" |
||||
}, |
||||
"0x2f8d4a878cfa04a6e60d46362f5644deab66572d": { |
||||
"address": "0x2f8d4a878cfa04a6e60d46362f5644deab66572d", |
||||
"name": "Send Account 3" |
||||
}, |
||||
"0xd85a4b6a394794842887b8284293d69163007bbb": { |
||||
"address": "0xd85a4b6a394794842887b8284293d69163007bbb", |
||||
"name": "Send Account 4" |
||||
} |
||||
}, |
||||
"unapprovedTxs": {}, |
||||
"currentCurrency": "USD", |
||||
"conversionRate": 19855, |
||||
"conversionDate": 1489013762, |
||||
"noActiveNotices": true, |
||||
"frequentRpcList": [], |
||||
"network": "3", |
||||
"accounts": { |
||||
"0xfdea65c8e26263f6d9a1b5de9555d2931a33b825": { |
||||
"code": "0x", |
||||
"balance": "0x47c9d71831c76efe", |
||||
"nonce": "0x1b", |
||||
"address": "0xfdea65c8e26263f6d9a1b5de9555d2931a33b825" |
||||
}, |
||||
"0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb": { |
||||
"code": "0x", |
||||
"balance": "0x37452b1315889f80", |
||||
"nonce": "0xa", |
||||
"address": "0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb" |
||||
}, |
||||
"0x2f8d4a878cfa04a6e60d46362f5644deab66572d": { |
||||
"code": "0x", |
||||
"balance": "0x30c9d71831c76efe", |
||||
"nonce": "0x1c", |
||||
"address": "0x2f8d4a878cfa04a6e60d46362f5644deab66572d" |
||||
}, |
||||
"0xd85a4b6a394794842887b8284293d69163007bbb": { |
||||
"code": "0x", |
||||
"balance": "0x0", |
||||
"nonce": "0x0", |
||||
"address": "0xd85a4b6a394794842887b8284293d69163007bbb" |
||||
} |
||||
}, |
||||
"addressBook": [ |
||||
{ |
||||
"address": "0x06195827297c7a80a443b6894d3bdb8824b43896", |
||||
"name": "Address Book Account 1" |
||||
} |
||||
], |
||||
"tokens": [], |
||||
"transactions": {}, |
||||
"selectedAddressTxList": [], |
||||
"unapprovedMsgs": {}, |
||||
"unapprovedMsgCount": 0, |
||||
"unapprovedPersonalMsgs": {}, |
||||
"unapprovedPersonalMsgCount": 0, |
||||
"keyringTypes": [ |
||||
"Simple Key Pair", |
||||
"HD Key Tree" |
||||
], |
||||
"keyrings": [ |
||||
{ |
||||
"type": "HD Key Tree", |
||||
"accounts": [ |
||||
"fdea65c8e26263f6d9a1b5de9555d2931a33b825", |
||||
"c5b8dbac4c1d3f152cdeb400e2313f309c410acb", |
||||
"2f8d4a878cfa04a6e60d46362f5644deab66572d" |
||||
] |
||||
}, |
||||
{ |
||||
"type": "Simple Key Pair", |
||||
"accounts": [ |
||||
"0xfdea65c8e26263f6d9a1b5de9555d2931a33b825" |
||||
] |
||||
} |
||||
], |
||||
"selectedAddress": "0xfdea65c8e26263f6d9a1b5de9555d2931a33b825", |
||||
"currentCurrency": "PHP", |
||||
"provider": { |
||||
"type": "testnet" |
||||
}, |
||||
"shapeShiftTxList": [], |
||||
"lostAccounts": [], |
||||
"send": { |
||||
"gasLimit": null, |
||||
"gasPrice": null, |
||||
"gasTotal": "0xb451dc41b578", |
||||
"tokenBalance": null, |
||||
"from": "", |
||||
"to": "", |
||||
"amount": "0x0", |
||||
"memo": "", |
||||
"errors": {}, |
||||
"maxModeOn": false, |
||||
"editingTransactionId": null |
||||
}, |
||||
"currentLocale": "en" |
||||
}, |
||||
"appState": { |
||||
"menuOpen": false, |
||||
"currentView": { |
||||
"name": "accountDetail", |
||||
"detailView": null, |
||||
"context": "0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc" |
||||
}, |
||||
"accountDetail": { |
||||
"subview": "transactions" |
||||
}, |
||||
"modal": { |
||||
"modalState": {}, |
||||
"previousModalState": {} |
||||
}, |
||||
"transForward": true, |
||||
"isLoading": false, |
||||
"warning": null, |
||||
"scrollToBottom": false, |
||||
"forgottenPassword": null |
||||
}, |
||||
"identities": {} |
||||
} |
@ -0,0 +1,25 @@ |
||||
{ |
||||
"tags": { |
||||
"allowUnknownTags": false |
||||
}, |
||||
"source": { |
||||
"include": "app/scripts/", |
||||
"includePattern": ".js$", |
||||
"excludePattern": "(node_modules/|docs)" |
||||
}, |
||||
"plugins": [ |
||||
"plugins/markdown" |
||||
], |
||||
"opts": { |
||||
"template": "node_modules/radgrad-jsdoc-template/", |
||||
"encoding": "utf8", |
||||
"destination": "docs/jsdocs", |
||||
"recurse": true, |
||||
"verbose": true |
||||
}, |
||||
"templates": { |
||||
"cleverLinks": false, |
||||
"monospaceLinks": false |
||||
} |
||||
} |
||||
|
@ -0,0 +1,15 @@ |
||||
# Development Tools & Configurations |
||||
|
||||
This folder contains configuration files which are used by the the different |
||||
development-tools, like e.g. JsDoc. |
||||
|
||||
|
||||
## Appveyor |
||||
|
||||
|
||||
https://www.appveyor.com/docs/build-configuration/#alternative-yaml-file-location |
||||
|
||||
Withtin the configuration, point to a weblocation of a txt config file: |
||||
|
||||
https://ci.appveyor.com/project/lazaridiscom/mm-vault/settings |
||||
https://raw.githubusercontent.com/lazaridiscom/mm-vault/master/dev/tools/appveyor.txt |
@ -0,0 +1,21 @@ |
||||
# Test against the latest version of this Node.js version |
||||
environment: |
||||
nodejs_version: "8" |
||||
|
||||
# Install scripts. (runs after repo cloning) |
||||
install: |
||||
# Get the latest stable version of Node.js or io.js |
||||
- ps: Install-Product node $env:nodejs_version |
||||
# install modules |
||||
- npm install |
||||
|
||||
# Post-install test scripts. |
||||
test_script: |
||||
# Output useful info for debugging. |
||||
- node --version |
||||
- npm --version |
||||
# run tests |
||||
- npm test |
||||
|
||||
# Don't actually build. |
||||
build: off |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue