Merge remote-tracking branch 'origin/develop' into master-sync

feature/default_network_editable
ryanml 3 years ago
commit dfd52700a0
  1. 4
      .circleci/scripts/chrome-install.sh
  2. 2
      .depcheckrc.yml
  3. 9
      .eslintrc.babel.js
  4. 67
      .eslintrc.base.js
  5. 352
      .eslintrc.js
  6. 23
      .eslintrc.jsdoc.js
  7. 10
      .eslintrc.node.js
  8. 6
      .gitattributes
  9. 1
      .github/ISSUE_TEMPLATE/bug-report.yml
  10. 3
      .github/workflows/crowdin_action.yml
  11. 2
      .mocharc.js
  12. 1
      .prettierignore
  13. 201
      .storybook/3.COLORS.stories.mdx
  14. 1
      .storybook/images/design.token.graphic.svg
  15. 1
      .storybook/main.js
  16. 38
      .storybook/preview.js
  17. 129
      .storybook/test-data.js
  18. 24
      app/_locales/am/messages.json
  19. 24
      app/_locales/ar/messages.json
  20. 24
      app/_locales/bg/messages.json
  21. 24
      app/_locales/bn/messages.json
  22. 24
      app/_locales/ca/messages.json
  23. 3
      app/_locales/cs/messages.json
  24. 24
      app/_locales/da/messages.json
  25. 2302
      app/_locales/de/messages.json
  26. 167
      app/_locales/el/messages.json
  27. 384
      app/_locales/en/messages.json
  28. 52
      app/_locales/es/messages.json
  29. 1377
      app/_locales/es_419/messages.json
  30. 24
      app/_locales/et/messages.json
  31. 24
      app/_locales/fa/messages.json
  32. 24
      app/_locales/fi/messages.json
  33. 24
      app/_locales/fil/messages.json
  34. 443
      app/_locales/fr/messages.json
  35. 24
      app/_locales/he/messages.json
  36. 525
      app/_locales/hi/messages.json
  37. 3
      app/_locales/hn/messages.json
  38. 24
      app/_locales/hr/messages.json
  39. 9
      app/_locales/ht/messages.json
  40. 24
      app/_locales/hu/messages.json
  41. 485
      app/_locales/id/messages.json
  42. 42
      app/_locales/it/messages.json
  43. 1009
      app/_locales/ja/messages.json
  44. 24
      app/_locales/kn/messages.json
  45. 529
      app/_locales/ko/messages.json
  46. 24
      app/_locales/lt/messages.json
  47. 24
      app/_locales/lv/messages.json
  48. 24
      app/_locales/ms/messages.json
  49. 3
      app/_locales/nl/messages.json
  50. 24
      app/_locales/no/messages.json
  51. 52
      app/_locales/ph/messages.json
  52. 24
      app/_locales/pl/messages.json
  53. 3
      app/_locales/pt/messages.json
  54. 1898
      app/_locales/pt_BR/messages.json
  55. 24
      app/_locales/ro/messages.json
  56. 749
      app/_locales/ru/messages.json
  57. 24
      app/_locales/sk/messages.json
  58. 24
      app/_locales/sl/messages.json
  59. 24
      app/_locales/sr/messages.json
  60. 24
      app/_locales/sv/messages.json
  61. 24
      app/_locales/sw/messages.json
  62. 3
      app/_locales/ta/messages.json
  63. 6
      app/_locales/th/messages.json
  64. 115
      app/_locales/tl/messages.json
  65. 919
      app/_locales/tr/messages.json
  66. 24
      app/_locales/uk/messages.json
  67. 275
      app/_locales/vi/messages.json
  68. 63
      app/_locales/zh_CN/messages.json
  69. 24
      app/_locales/zh_TW/messages.json
  70. 4
      app/images/advanced-icon.svg
  71. 4
      app/images/alerts-icon.svg
  72. 9
      app/images/arbitrum.svg
  73. 4
      app/images/contacts-icon.svg
  74. 5
      app/images/experimental-icon.svg
  75. 4
      app/images/general-icon.svg
  76. 4
      app/images/info-icon.svg
  77. BIN
      app/images/logo/smart-transactions-header.png
  78. 4
      app/images/network-icon.svg
  79. 5
      app/images/optimism.svg
  80. 4
      app/images/security-icon.svg
  81. 3
      app/images/times.svg
  82. 39
      app/images/transaction-background-bottom.svg
  83. 34
      app/images/transaction-background-top.svg
  84. 2
      app/scripts/controllers/onboarding.js
  85. 34
      app/scripts/controllers/permissions/flask/snap-permissions.js
  86. 46
      app/scripts/controllers/permissions/flask/snap-permissions.test.js
  87. 3
      app/scripts/controllers/permissions/index.js
  88. 6
      app/scripts/controllers/permissions/specifications.js
  89. 11
      app/scripts/controllers/preferences.js
  90. 29
      app/scripts/controllers/swaps.js
  91. 12
      app/scripts/controllers/swaps.test.js
  92. 443
      app/scripts/controllers/transactions/index.js
  93. 215
      app/scripts/controllers/transactions/index.test.js
  94. 50
      app/scripts/controllers/transactions/lib/util.js
  95. 23
      app/scripts/controllers/transactions/tx-state-manager.js
  96. 43
      app/scripts/lib/rpc-method-middleware/createMethodMiddleware.js
  97. 2
      app/scripts/lib/rpc-method-middleware/index.js
  98. 6
      app/scripts/lib/typed-message-manager.js
  99. 458
      app/scripts/metamask-controller.js
  100. 31
      app/scripts/metamask-controller.test.js
  101. Some files were not shown because too many files have changed in this diff Show More

@ -5,12 +5,12 @@ set -u
set -o pipefail
# To get the latest version, see <https://www.ubuntuupdates.org/ppa/google_chrome?dist=stable>
CHROME_VERSION='96.0.4664.45-1'
CHROME_VERSION='98.0.4758.80-1'
CHROME_BINARY="google-chrome-stable_${CHROME_VERSION}_amd64.deb"
CHROME_BINARY_URL="https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/${CHROME_BINARY}"
# To retrieve this checksum, run the `wget` and `shasum` commands below
CHROME_BINARY_SHA512SUM='98433b003d43627e221faad212cba3df42d7f3d6e31894b1e14a9058069cbcd2bd3c83b3c59ecc1733dab11e36b181fa1d89e33b841a21fd53a8e82bbddc39aa'
CHROME_BINARY_SHA512SUM='83d151f05017ee1f255f4134ee84efdb5c7826d6c64d43e6d402bef1569e4800806be0f87af3cacd240917cacaeedb9cae5833ccbc65740482f6aafbef9b38e7'
wget -O "${CHROME_BINARY}" -t 5 "${CHROME_BINARY_URL}"

@ -18,6 +18,7 @@ ignores:
- '@metamask/auto-changelog' # invoked as `auto-changelog`
- '@metamask/forwarder'
- '@metamask/test-dapp'
- '@metamask/design-tokens' # Only imported in index.css
- '@sentry/cli' # invoked as `sentry-cli`
- 'chromedriver'
- 'depcheck' # ooo meta
@ -34,6 +35,7 @@ ignores:
- '@storybook/core'
- '@storybook/addon-essentials'
- '@storybook/addon-a11y'
- 'storybook-dark-mode'
- 'style-loader'
- 'css-loader'
- 'sass-loader'

@ -0,0 +1,9 @@
module.exports = {
parser: '@babel/eslint-parser',
plugins: ['@babel'],
rules: {
'@babel/no-invalid-this': 'error',
// Prettier handles this
'@babel/semi': 'off',
},
};

@ -0,0 +1,67 @@
const path = require('path');
module.exports = {
extends: [
'@metamask/eslint-config',
path.resolve(__dirname, '.eslintrc.jsdoc.js'),
],
globals: {
document: 'readonly',
window: 'readonly',
},
rules: {
'default-param-last': 'off',
'prefer-object-spread': 'error',
'require-atomic-updates': 'off',
// This is the same as our default config, but for the noted exceptions
'spaced-comment': [
'error',
'always',
{
markers: [
'global',
'globals',
'eslint',
'eslint-disable',
'*package',
'!',
',',
// Local additions
'/:', // This is for our code fences
],
exceptions: ['=', '-'],
},
],
'no-invalid-this': 'off',
// TODO: remove this override
'padding-line-between-statements': [
'error',
{
blankLine: 'always',
prev: 'directive',
next: '*',
},
{
blankLine: 'any',
prev: 'directive',
next: 'directive',
},
// Disabled temporarily to reduce conflicts while PR queue is large
// {
// blankLine: 'always',
// prev: ['multiline-block-like', 'multiline-expression'],
// next: ['multiline-block-like', 'multiline-expression'],
// },
],
// It is common to import modules without assigning them to variables in
// a browser context. For instance, we may import polyfills which change
// global variables, or we may import stylesheets.
'import/no-unassigned-import': 'off',
},
};

@ -1,132 +1,112 @@
const path = require('path');
const { version: reactVersion } = require('react/package.json');
module.exports = {
root: true,
parser: '@babel/eslint-parser',
parserOptions: {
sourceType: 'module',
ecmaVersion: 2017,
ecmaFeatures: {
experimentalObjectRestSpread: true,
impliedStrict: true,
modules: true,
blockBindings: true,
arrowFunctions: true,
objectLiteralShorthandMethods: true,
objectLiteralShorthandProperties: true,
templateStrings: true,
classes: true,
jsx: true,
},
},
// Ignore files which are also in .prettierignore
ignorePatterns: [
'!.eslintrc.js',
'!.mocharc.js',
'node_modules/**',
'dist/**',
'builds/**',
'test-*/**',
'docs/**',
'coverage/',
'jest-coverage/',
'development/chromereload.js',
'app/vendor/**',
'test/e2e/send-eth-with-private-key-test/**',
'nyc_output/**',
'.vscode/**',
'lavamoat/*/policy.json',
'storybook-build/**',
'builds/**/*',
'dist/**/*',
'development/chromereload.js',
],
overrides: [
/**
* == Modules ==
*
* The first two sections here, which cover module syntax, are mutually
* exclusive: the set of files covered between them may NOT overlap. This is
* because we do not allow a file to use two different styles for specifying
* imports and exports (however theoretically possible it may be).
*/
extends: ['@metamask/eslint-config', '@metamask/eslint-config-nodejs'],
plugins: ['@babel', 'import', 'jsdoc'],
globals: {
document: 'readonly',
window: 'readonly',
{
/**
* Modules (CommonJS module syntax)
*
* This is code that uses `require()` and `module.exports` to import and
* export other modules.
*/
files: [
'.eslintrc.js',
'.eslintrc.*.js',
'.mocharc.js',
'*.config.js',
'development/**/*.js',
'test/e2e/**/*.js',
'test/helpers/*.js',
'test/lib/wait-until-called.js',
],
extends: [
path.resolve(__dirname, '.eslintrc.base.js'),
path.resolve(__dirname, '.eslintrc.node.js'),
path.resolve(__dirname, '.eslintrc.babel.js'),
],
parserOptions: {
sourceType: 'module',
},
rules: {
'default-param-last': 'off',
'prefer-object-spread': 'error',
'require-atomic-updates': 'off',
// This is the same as our default config, but for the noted exceptions
'spaced-comment': [
'error',
'always',
// This rule does not work with CommonJS modules. We will just have to
// trust that all of the files specified above are indeed modules.
'import/unambiguous': 'off',
},
},
/**
* Modules (ES module syntax)
*
* This is code that explicitly uses `import`/`export` instead of
* `require`/`module.exports`.
*/
{
markers: [
'global',
'globals',
'eslint',
'eslint-disable',
'*package',
'!',
',',
// Local additions
'/:', // This is for our code fences
files: [
'app/**/*.js',
'shared/**/*.js',
'ui/**/*.js',
'**/*.test.js',
'test/lib/**/*.js',
'test/mocks/**/*.js',
'test/jest/**/*.js',
'test/stub/**/*.js',
'test/unit-global/**/*.js',
],
exceptions: ['=', '-'],
},
// TODO: Convert these files to modern JS
excludedFiles: ['test/lib/wait-until-called.js'],
extends: [
path.resolve(__dirname, '.eslintrc.base.js'),
path.resolve(__dirname, '.eslintrc.node.js'),
path.resolve(__dirname, '.eslintrc.babel.js'),
],
parserOptions: {
sourceType: 'module',
},
},
'import/no-unassigned-import': 'off',
'no-invalid-this': 'off',
'@babel/no-invalid-this': 'error',
// Prettier handles this
'@babel/semi': 'off',
'node/no-process-env': 'off',
// Allow tag `jest-environment` to work around Jest bug
// See: https://github.com/facebook/jest/issues/7780
'jsdoc/check-tag-names': ['error', { definedTags: ['jest-environment'] }],
/**
* == Everything else ==
*
* The sections from here on out may overlap with each other in various
* ways depending on their function.
*/
// TODO: remove this override
'padding-line-between-statements': [
'error',
{
blankLine: 'always',
prev: 'directive',
next: '*',
},
/**
* React-specific code
*
* Code in this category contains JSX and hence needs to be run through the
* React plugin.
*/
{
blankLine: 'any',
prev: 'directive',
next: 'directive',
},
// Disabled temporarily to reduce conflicts while PR queue is large
// {
// blankLine: 'always',
// prev: ['multiline-block-like', 'multiline-expression'],
// next: ['multiline-block-like', 'multiline-expression'],
// },
files: [
'test/lib/render-helpers.js',
'test/jest/rendering.js',
'ui/**/*.js',
],
// TODO: re-enable these rules
'node/no-sync': 'off',
'node/no-unpublished-import': 'off',
'node/no-unpublished-require': 'off',
'jsdoc/match-description': 'off',
'jsdoc/require-description': 'off',
'jsdoc/require-jsdoc': 'off',
'jsdoc/require-param-description': 'off',
'jsdoc/require-param-type': 'off',
'jsdoc/require-returns-description': 'off',
'jsdoc/require-returns-type': 'off',
'jsdoc/require-returns': 'off',
'jsdoc/valid-types': 'off',
extends: ['plugin:react/recommended', 'plugin:react-hooks/recommended'],
parserOptions: {
ecmaFeatures: {
jsx: true,
},
},
overrides: [
{
files: ['ui/**/*.js', 'test/lib/render-helpers.js', 'test/jest/*.js'],
plugins: ['react'],
extends: ['plugin:react/recommended', 'plugin:react-hooks/recommended'],
rules: {
'react/no-unused-prop-types': 'error',
'react/no-unused-state': 'error',
@ -139,74 +119,100 @@ module.exports = {
'react/default-props-match-prop-types': 'error',
'react/jsx-no-duplicate-props': 'error',
},
settings: {
react: {
// If this is set to 'detect', ESLint will import React in order to
// find its version. Because we run ESLint in the build system under
// LavaMoat, this means that detecting the React version requires a
// LavaMoat policy for all of React, in the build system. That's a
// no-go, so we grab it from React's package.json.
version: reactVersion,
},
{
files: ['test/e2e/**/*.spec.js'],
extends: ['@metamask/eslint-config-mocha'],
rules: {
'mocha/no-hooks-for-single-case': 'off',
'mocha/no-setup-in-describe': 'off',
},
},
{
files: ['app/scripts/migrations/*.js', '*.stories.js'],
rules: {
'import/no-anonymous-default-export': ['error', { allowObject: true }],
},
},
{
files: ['app/scripts/migrations/*.js'],
rules: {
'node/global-require': 'off',
},
},
/**
* Mocha tests
*
* These are files that make use of globals and syntax introduced by the
* Mocha library.
*/
{
files: ['**/*.test.js'],
files: [
'**/*.test.js',
'test/lib/wait-until-called.js',
'test/e2e/**/*.spec.js',
],
excludedFiles: [
'ui/**/*.test.js',
'ui/__mocks__/*.js',
'shared/**/*.test.js',
'development/**/*.test.js',
'app/scripts/controllers/network/**/*.test.js',
'app/scripts/controllers/permissions/**/*.test.js',
'app/scripts/lib/**/*.test.js',
'app/scripts/migrations/*.test.js',
'app/scripts/platforms/*.test.js',
'app/scripts/controllers/network/**/*.test.js',
'app/scripts/controllers/permissions/*.test.js',
'development/**/*.test.js',
'shared/**/*.test.js',
'ui/**/*.test.js',
'ui/__mocks__/*.js',
],
extends: ['@metamask/eslint-config-mocha'],
rules: {
// In Mocha tests, it is common to use `this` to store values or do
// things like force the test to fail.
'@babel/no-invalid-this': 'off',
'mocha/no-setup-in-describe': 'off',
},
},
{
files: ['**/__snapshots__/*.snap'],
plugins: ['jest'],
rules: {
'jest/no-large-snapshots': [
'error',
{ maxSize: 50, inlineMaxSize: 50 },
],
},
},
/**
* Jest tests
*
* These are files that make use of globals and syntax introduced by the
* Jest library.
*/
{
files: [
'ui/**/*.test.js',
'ui/__mocks__/*.js',
'shared/**/*.test.js',
'development/**/*.test.js',
'**/__snapshots__/*.snap',
'app/scripts/controllers/network/**/*.test.js',
'app/scripts/controllers/permissions/**/*.test.js',
'app/scripts/lib/**/*.test.js',
'app/scripts/migrations/*.test.js',
'app/scripts/platforms/*.test.js',
'app/scripts/controllers/network/**/*.test.js',
'app/scripts/controllers/permissions/*.test.js',
'development/**/*.test.js',
'shared/**/*.test.js',
'test/jest/*.js',
'test/helpers/*.js',
'ui/**/*.test.js',
'ui/__mocks__/*.js',
],
extends: ['@metamask/eslint-config-jest'],
parserOptions: {
sourceType: 'module',
},
rules: {
'jest/no-restricted-matchers': 'off',
'import/unambiguous': 'off',
'import/named': 'off',
'jest/no-large-snapshots': [
'error',
{ maxSize: 50, inlineMaxSize: 50 },
],
'jest/no-restricted-matchers': 'off',
},
},
/**
* Migrations
*/
{
files: ['app/scripts/migrations/*.js', '**/*.stories.js'],
rules: {
'import/no-anonymous-default-export': ['error', { allowObject: true }],
},
},
/**
* Executables and related files
*
* These are files that run in a Node context. They are either designed to
* run as executables (in which case they will have a shebang at the top) or
* are dependencies of executables (in which case they may use
* `process.exit` to exit).
*/
{
files: [
'development/**/*.js',
@ -218,27 +224,9 @@ module.exports = {
'node/shebang': 'off',
},
},
{
files: [
'.eslintrc.js',
'.mocharc.js',
'babel.config.js',
'jest.config.js',
'nyc.config.js',
'stylelint.config.js',
'app/scripts/lockdown-run.js',
'app/scripts/lockdown-more.js',
'development/**/*.js',
'test/e2e/**/*.js',
'test/env.js',
'test/setup.js',
'test/helpers/protect-intrinsics-helpers.js',
'test/lib/wait-until-called.js',
],
parserOptions: {
sourceType: 'script',
},
},
/**
* Lockdown files
*/
{
files: [
'app/scripts/lockdown-run.js',
@ -251,19 +239,11 @@ module.exports = {
Compartment: 'readonly',
},
},
],
settings: {
jsdoc: {
mode: 'typescript',
},
react: {
// If this is set to 'detect', ESLint will import React in order to find
// its version. Because we run ESLint in the build system under LavaMoat,
// this means that detecting the React version requires a LavaMoat policy
// for all of React, in the build system. That's a no-go, so we grab it
// from React's package.json.
version: reactVersion,
{
files: ['app/scripts/lockdown-run.js', 'app/scripts/lockdown-more.js'],
parserOptions: {
sourceType: 'script',
},
},
],
};

@ -0,0 +1,23 @@
module.exports = {
// Note that jsdoc is already in the `plugins` array thanks to
// @metamask/eslint-config — this just extends the config there
rules: {
// Allow tag `jest-environment` to work around Jest bug
// See: https://github.com/facebook/jest/issues/7780
'jsdoc/check-tag-names': ['error', { definedTags: ['jest-environment'] }],
'jsdoc/match-description': 'off',
'jsdoc/require-description': 'off',
'jsdoc/require-jsdoc': 'off',
'jsdoc/require-param-description': 'off',
'jsdoc/require-param-type': 'off',
'jsdoc/require-returns-description': 'off',
'jsdoc/require-returns-type': 'off',
'jsdoc/require-returns': 'off',
'jsdoc/valid-types': 'off',
},
settings: {
jsdoc: {
mode: 'typescript',
},
},
};

@ -0,0 +1,10 @@
module.exports = {
extends: ['@metamask/eslint-config-nodejs'],
rules: {
'node/no-process-env': 'off',
// TODO: re-enable these rules
'node/no-sync': 'off',
'node/no-unpublished-import': 'off',
'node/no-unpublished-require': 'off',
},
};

6
.gitattributes vendored

@ -10,3 +10,9 @@ yarn.lock linguist-generated=false
test/e2e/send-eth-with-private-key-test/ethereumjs-tx.js linguist-vendored linguist-generated -diff
test/e2e/send-eth-with-private-key-test/web3js.js linguist-vendored linguist-generated -diff
# Collapse changes to translation files by default in diffs as it is very common
# to remove keys in PRs. Of course this means that PRs that solely update
# translations will be a little harder to review but those do not get submitted
# as often as other PRs.
app/_locales/** linguist-generated

@ -89,6 +89,7 @@ body:
- Trezor
- Keystone
- GridPlus Lattice1
- AirGap Vault
- Other (please elaborate in the "Additional Context" section)
- type: textarea
id: additional

@ -25,7 +25,10 @@ jobs:
with:
upload_translations: true
download_translations: true
github_user_name: metamaskbot
github_user_email: metamaskbot@users.noreply.github.com
env:
GITHUB_ACTOR: metamaskbot
GITHUB_TOKEN: ${{ secrets.METAMASKBOT_CROWDIN_TOKEN }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}

@ -6,7 +6,7 @@ module.exports = {
'./app/scripts/migrations/*.test.js',
'./app/scripts/platforms/*.test.js',
'./app/scripts/controllers/network/**/*.test.js',
'./app/scripts/controllers/permissions/*.test.js',
'./app/scripts/controllers/permissions/**/*.test.js',
],
recursive: true,
require: ['test/env.js', 'test/setup.js'],

@ -10,3 +10,4 @@ app/vendor/**
.vscode/**
test/e2e/send-eth-with-private-key-test/**
*.scss
development/chromereload.js

@ -0,0 +1,201 @@
import { Meta } from '@storybook/addon-docs';
import ActionaleMessage from '../ui/components/ui/actionable-message';
import designTokenDiagramImage from './images/design.token.graphic.svg';
<Meta title="Design Tokens / Color" />
# Color
Color is used to express style and communicate meaning.
<ActionaleMessage
type="warning"
message="We are in the process of consolidating all of our colors, making them accessible and enabling theming. Many of the colors used throughout the codebase are deprecated please follow the guide below to ensure you are using the correct colors when building MetaMask UI"
/>
<br />
## Design tokens
We are importing design tokens as CSS variables from [@metamask/design-tokens](https://github.com/MetaMask/design-tokens) repo to help consolidate colors and enable theming across all MetaMask products.
### Token tiers
We follow a 3 tiered system for color design tokens and css variables.
<div
style={{
textAlign: 'center',
backgroundColor: 'var(--color-background-alternative)',
padding: 32,
}}
>
<img width="80%" src={designTokenDiagramImage} />
</div>
<br />
<br />
### **Brand colors** (tier 1)
These colors **SHOULD NOT** be used in your styles directly. They are used as a reference for the [theme colors](#theme-colors-tier-2). Brand colors should just keep track of every color used in our app.
#### Example of brand color css variables
```css
/** !!!DO NOT USE BRAND COLORS DIRECTLY IN YOUR CODE!!! */
var(--brand-colors-white-white000)
var(--brand-colors-white-white010)
var(--brand-colors-grey-grey030)
```
### **Theme colors** (tier 2)
Theme colors are color agnostic, semantically neutral and theme compatible design tokens that you can use in your code and styles. Please refer to the description of each token for it's intended purpose in [@metamask/design-tokens](https://github.com/MetaMask/design-tokens/blob/main/src/figma/tokens.json#L329-L554).
#### Example of theme color css variables
```css
/** Backgrounds */
var(--color-background-default)
var(--color-background-alternative)
/** Text */
var(--color-text-default)
var(--color-text-alternative)
var(--color-text-muted)
/** Icons */
var(--color-icon-default)
var(--color-icon-muted)
/** Borders */
var(--color-border-default)
var(--color-border-muted)
/** Overlays */
var(--color-overlay-default)
var(--color-overlay-inverse)
/** User Actions */
var(--color-primary-default)
var(--color-primary-alternative)
var(--color-primary-muted)
var(--color-primary-inverse)
var(--color-primary-disabled)
var(--color-secondary-default)
var(--color-secondary-alternative)
var(--color-secondary-muted)
var(--color-secondary-inverse)
var(--color-secondary-disabled)
/** States */
/** Error */
var(--color-error-default)
var(--color-error-alternative)
var(--color-error-muted)
var(--color-error-inverse)
var(--color-error-disabled)
/** Warning */
var(--color-warning-default)
var(--color-warning-alternative)
var(--color-warning-muted)
var(--color-warning-inverse)
var(--color-warning-disabled)
/** Success */
var(--color-success-default)
var(--color-success-alternative)
var(--color-success-muted)
var(--color-success-inverse)
var(--color-success-disabled)
/** Info */
var(--color-info-default)
var(--color-info-alternative)
var(--color-info-muted)
var(--color-info-inverse)
var(--color-info-disabled)
```
### **Component colors** (tier 3)
Another level of abstraction is component tier colors that you can define at the top of your styles and use at the component specific level.
```scss
.button {
--color-background-primary: var(--color-primary-default);
--color-text-primary: var(--color-primary-inverse);
--color-border-primary: var(--color-primary-default);
--color-background-primary-hover: var(--color-primary-alternative);
--color-border-primary-hover: var(--color-primary-alternative);
.btn-primary {
background-color: var(--color-background-primary);
color: var(--color-text-primary);
border: 1px solid var(--color-border-primary);
&:hover {
background-color: var(--color-background-primary-hover);
border: 1px solid var(--color-border-primary-hover);
}
/** btn-primary css continued... */
}
}
```
## Takeaways
- Do not use static HEX values in your code. Use the [theme colors](#theme-colors-tier-2). If one does not exist for your use case ask the designer or [create an issue](https://github.com/MetaMask/metamask-extension/issues/new) and tag it with a `design-system` label.
- Make sure the design token you are using is for it's intended purpose. Please refer to the description of each token in [@metamask/design-tokens](https://github.com/MetaMask/design-tokens/blob/main/src/figma/tokens.json#L329-L554).
### ❌ Don't do this
Don't use static hex values or brand color tokens in your code.
```css
/**
* Don't do this
* Static hex values create inconsistency and will break UI when using dark mode
**/
.card {
background-color: #ffffff;
color: #24272a;
}
/**
* Don't do this
* Not theme compatible and will break UI when using dark theme
**/
.card {
background-color: var(--brand-colors-white-white000);
color: var(--brand-colors-grey-grey800);
}
```
### ✅ Do this
Do use component tiered and [theme colors](#theme-colors-tier-2) in your styles and code
```css
.card {
--color-background: var(--color-background-default);
--color-text: var(--color-text-default);
background-color: var(--color-background);
color: var(--color-text);
}
```
<br />
## References
- [@metamask/design-tokens](https://github.com/MetaMask/design-tokens)
- [Figma brand colors library](https://www.figma.com/file/cBAUPFMnbv6tHR1J8KvBI2/Brand-Colors?node-id=0%3A1) (internal use only)
- [Figma theme colors library](https://www.figma.com/file/kdFzEC7xzSNw7cXteqgzDW/Light-Theme-Colors?node-id=0%3A1) (internal use only)
- [Figma dark theme colors library](https://www.figma.com/file/rLKsoqpjyoKauYnFDcBIbO/Dark-Theme-Colors?node-id=0%3A1) (internal use only)

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

@ -14,6 +14,7 @@ module.exports = {
'@storybook/addon-a11y',
'@storybook/addon-knobs',
'./i18n-party-addon/register.js',
'storybook-dark-mode',
],
// Uses babel.config.js settings and prevents "Missing class properties transform" error
babel: async (options) => ({ overrides: options.overrides }),

@ -1,4 +1,4 @@
import React, { useEffect } from 'react';
import React, { useEffect, useState } from 'react';
import { addDecorator, addParameters } from '@storybook/react';
import { action } from '@storybook/addon-actions';
import { Provider } from 'react-redux';
@ -13,13 +13,14 @@ import { Router } from 'react-router-dom';
import { createBrowserHistory } from 'history';
import { _setBackgroundConnection } from '../ui/store/actions';
import MetaMaskStorybookTheme from './metamask-storybook-theme';
import addons from '@storybook/addons';
addParameters({
backgrounds: {
default: 'light',
default: 'default',
values: [
{ name: 'light', value: '#FFFFFF' },
{ name: 'dark', value: '#333333' },
{ name: 'default', value: 'var(--color-background-default)' },
{ name: 'alternative', value: 'var(--color-background-alternative)' },
],
},
docs: {
@ -27,7 +28,13 @@ addParameters({
},
options: {
storySort: {
order: ['Getting Started', 'Components', ['UI', 'App'], 'Pages'],
order: [
'Getting Started',
'Design Tokens',
'Components',
['UI', 'App'],
'Pages',
],
},
},
});
@ -66,8 +73,29 @@ const proxiedBackground = new Proxy(
_setBackgroundConnection(proxiedBackground);
const metamaskDecorator = (story, context) => {
const [isDark, setDark] = useState(false);
const channel = addons.getChannel();
const currentLocale = context.globals.locale;
const current = allLocales[currentLocale];
useEffect(() => {
channel.on('DARK_MODE', setDark);
return () => channel.off('DARK_MODE', setDark);
}, [channel, setDark]);
useEffect(() => {
const currentTheme = document.documentElement.getAttribute('data-theme');
if (!currentTheme)
document.documentElement.setAttribute('data-theme', 'light');
if (currentTheme === 'light' && isDark) {
document.documentElement.setAttribute('data-theme', 'dark');
} else if (currentTheme === 'dark' && !isDark) {
document.documentElement.setAttribute('data-theme', 'light');
}
}, [isDark]);
return (
<Provider store={store}>
<Router history={history}>

@ -102,6 +102,85 @@ const state = {
swapsFeatureIsLive: false,
swapsQuoteRefreshTime: 60000,
},
"snapStates": {},
"snaps": {
"local:http://localhost:8080/": {
"enabled": true,
"id": "local:http://localhost:8080/",
"initialPermissions": {
"snap_confirm": {}
},
"manifest": {
"description": "An example MetaMask Snap.",
"initialPermissions": {
"snap_confirm": {}
},
"manifestVersion": "0.1",
"proposedName": "MetaMask Example Snap",
"repository": {
"type": "git",
"url": "https://github.com/MetaMask/snaps-skunkworks.git"
},
"source": {
"location": {
"npm": {
"filePath": "dist/bundle.js",
"iconPath": "images/icon.svg",
"packageName": "@metamask/example-snap",
"registry": "https://registry.npmjs.org/"
}
},
"shasum": "3lEt0yUu080DwV78neROaAAIQWXukSkMnP4OBhOhBnE="
},
"version": "0.6.0"
},
"permissionName": "wallet_snap_local:http://localhost:8080/",
"sourceCode": "(...)",
"status": "stopped",
"svgIcon": "<svg>...</svg>",
"version": "0.6.0"
},
"Filecoin Snap": {
"enabled": true,
"id": "npm:http://localhost:8080/",
"initialPermissions": {
"snap_confirm": {},
"eth_accounts": {},
"snap_manageState": {},
},
"manifest": {
"description": "This swap provides developers everywhere access to an entirely new data storage paradigm, even letting your programs store data autonomously. Learn more.",
"initialPermissions": {
"snap_confirm": {},
"eth_accounts": {},
"snap_manageState": {},
},
"manifestVersion": "0.1",
"proposedName": "Filecoin Snap",
"repository": {
"type": "git",
"url": "https://github.com/MetaMask/snaps-skunkworks.git"
},
"source": {
"location": {
"npm": {
"filePath": "dist/bundle.js",
"iconPath": "images/icon.svg",
"packageName": "@metamask/example-snap",
"registry": "https://registry.npmjs.org/"
}
},
"shasum": "3lEt0yUu080DwV78neROaAAIQWXukSkMnP4OBhOhBnE="
},
"version": "0.6.0"
},
"permissionName": "wallet_snap_npm:http://localhost:8080/",
"sourceCode": "(...)",
"status": "stopped",
"svgIcon": "<svg>...</svg>",
"version": "0.6.0"
},
},
accountArray: [
{
name: 'This is a Really Long Account Name',
@ -1030,6 +1109,17 @@ const state = {
},
},
},
"local:http://localhost:8080/": {
permissions: {
'snap_confirm': {
invoker: "local:http://localhost:8080/",
parentCapability: 'snap_confirm',
id: 'a7342F4b-beae-4525-a36c-c0635fd03359',
date: 1620710693178,
caveats: []
},
},
},
},
permissionActivityLog: [
{
@ -1172,20 +1262,6 @@ const state = {
},
},
},
subjectMetadata: {
'https://metamask.github.io': {
name: 'E2E Test Dapp',
origin: 'https://metamask.github.io',
iconUrl: 'https://metamask.github.io/test-dapp/metamask-fox.svg',
subjectType: 'website',
},
'https://app.uniswap.org': {
name: 'Uniswap',
origin: 'https://app.uniswap.org',
iconUrl: './UNI.png',
subjectType: 'website',
},
},
threeBoxSyncingAllowed: false,
showRestorePrompt: true,
threeBoxLastUpdated: 0,
@ -1212,6 +1288,31 @@ const state = {
ensResolutionsByAddress: {},
pendingApprovals: {},
pendingApprovalCount: 0,
subjectMetadata: {
"http://localhost:8080": {
extensionId: null,
iconUrl: null,
name: "Hello, Snaps!",
origin: "http://localhost:8080",
subjectType: "website"
},
"https://metamask.github.io": {
extensionId: null,
iconUrl: null,
name: "Snaps Iframe Execution Environment",
origin: "https://metamask.github.io",
subjectType: "website"
},
"local:http://localhost:8080/": {
extensionId: null,
iconUrl: null,
name: "MetaMask Example Snap",
origin: "local:http://localhost:8080/",
subjectType: "snap",
svgIcon: "<svg>...</svg>",
version: "0.6.0"
}
}
},
appState: {
shouldClose: false,

@ -2,9 +2,6 @@
"about": {
"message": "ስለ"
},
"aboutSettingsDescription": {
"message": "ስሪት፣ የድጋፍ መስጫ ማዕከልና የግንኙነት መረጃ "
},
"acceleratingATransaction": {
"message": "* ከፍተኛ የነዳጅ ዋጋን በመጠቀም ግብይትን ማፋጠን በአውታረ መረቡ በፍጥነት እንዲከወን የማድረግ ዕድልን ይጨምራል፤ ነገር ግን ሁልጊዜም የተረጋገጠ አይደለም።"
},
@ -56,9 +53,6 @@
"advancedOptions": {
"message": "የላቁ አማራጮች"
},
"advancedSettingsDescription": {
"message": "አዘጋጅ ባህርያትን መድረስ፣ የስቴት መዛግብትን ማውረድ፣ መለያን ዳግም መሙላት፣ testnets እና ብጁ RPC አዋቅር።"
},
"amount": {
"message": "ሰርዝ "
},
@ -139,9 +133,6 @@
"message": "መለያን በ$1እይ",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Blockies Identicon ተጠቀም"
},
"browserNotSupported": {
"message": "ማሰሺያዎት አልተደገፈም..."
},
@ -411,9 +402,6 @@
"general": {
"message": "አጠቃላይ"
},
"generalSettingsDescription": {
"message": "የገንዘብ ልወጣ፣ ተቀዳሚ የገንዘብ ዓይነት፣ ቋንቋ፣ blockies identicon"
},
"getEther": {
"message": "Ether ያግኙ"
},
@ -582,9 +570,6 @@
"networkName": {
"message": "የአውታረ መረብ ስም"
},
"networkSettingsDescription": {
"message": "ብጁ የ RPC አውታረ መረቦችን አክልና አርትዕ"
},
"networks": {
"message": "አውታረ መረቦች"
},
@ -765,9 +750,6 @@
"restore": {
"message": "እነበረበት መልስ"
},
"restoreAccountWithSeed": {
"message": "መለያዎን በዘር ሐረግ ወደነበረበት ይመልሱ"
},
"revealSeedWords": {
"message": "የዘር ቃላትን ይግለጹ"
},
@ -819,9 +801,6 @@
"securityAndPrivacy": {
"message": "ደህንነት እና ግላዊነት"
},
"securitySettingsDescription": {
"message": "የግላዊነት ቅንብሮች እና የቋት ዘር ሐረግ"
},
"seedPhrasePlaceholder": {
"message": "እያንዳንዱን ቃል በነጠላ ክፍት ቦታ ይለያዩ"
},
@ -855,9 +834,6 @@
"sendTokens": {
"message": "ተለዋጭ ስሞችን ላክ"
},
"separateEachWord": {
"message": "እያንዳንዱን ቃል በነጠላ ክፍት ቦታ ይለያዩ"
},
"settings": {
"message": "ቅንብሮች"
},

@ -8,9 +8,6 @@
"about": {
"message": "حول"
},
"aboutSettingsDescription": {
"message": "نسخة الإصدار ومركز الدعم ومعلومات الاتصال."
},
"acceleratingATransaction": {
"message": "* تسريع المعاملات باستخدام سعر عملة جاس أعلى يزيد من فرص معالجتها بواسطة الشبكة بشكلٍ أسرع، لكن ذلك غير مضمون دائماً."
},
@ -70,9 +67,6 @@
"advancedOptions": {
"message": "خيارات متقدمة"
},
"advancedSettingsDescription": {
"message": "يتاح لك استخدام ميزات تطوير البرامج وتنزيل سجلات الحالة وإعادة تعيين الحساب وإعداد شبكات الاختبارات وتخصيص استدعاء الإجراء عن بعد (RPC)."
},
"amount": {
"message": "المبلغ"
},
@ -153,9 +147,6 @@
"message": "عرض الحساب في $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "استخدم خدمة تكتلات Blockies Identicon"
},
"browserNotSupported": {
"message": "متصفحك غير مدعوم..."
},
@ -424,9 +415,6 @@
"general": {
"message": "عام"
},
"generalSettingsDescription": {
"message": "تحويل العملات، العملة الأساسية، اللغة ، تكتلات blockies identicon"
},
"getEther": {
"message": "احصل على إيثر"
},
@ -598,9 +586,6 @@
"networkName": {
"message": "اسم الشبكة"
},
"networkSettingsDescription": {
"message": "إضافة وتعديل شبكات RPC المخصصة"
},
"networks": {
"message": "الشبكات"
},
@ -781,9 +766,6 @@
"restore": {
"message": "استعادة"
},
"restoreAccountWithSeed": {
"message": "قم باستعادة حسابك بواسطة عبارة الأمان"
},
"revealSeedWords": {
"message": "كشف كلمات عبارات الأمان"
},
@ -835,9 +817,6 @@
"securityAndPrivacy": {
"message": "الأمن والخصوصية"
},
"securitySettingsDescription": {
"message": "إعدادات الخصوصية وعبارة أمان المحفظة"
},
"seedPhrasePlaceholder": {
"message": "يرجى فصل كل كلمة بمسافة واحدة"
},
@ -871,9 +850,6 @@
"sendTokens": {
"message": "إرسال عملات رمزية"
},
"separateEachWord": {
"message": "افصل كل كلمة بمسافة واحدة"
},
"settings": {
"message": "الإعدادات"
},

@ -8,9 +8,6 @@
"about": {
"message": "Информация"
},
"aboutSettingsDescription": {
"message": "Версия, център за поддръжка и информация за контакт"
},
"acceleratingATransaction": {
"message": "* Ускоряването на транзакция чрез използване на по-висока цена на газа увеличава шансовете й да се обработва по-бързо от мрежата, но това не винаги е гарантирано."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Разширени опции"
},
"advancedSettingsDescription": {
"message": "Достъп до функции за разработчици, изтегляйте дневници, нулиране на акаунта, тестови мрежи за настройка и персонализиран RPC"
},
"amount": {
"message": "Сума"
},
@ -145,9 +139,6 @@
"message": "Преглед на акаунт на $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Използване на Blockies Identicon"
},
"browserNotSupported": {
"message": "Браузърът ви не се поддържа ..."
},
@ -416,9 +407,6 @@
"general": {
"message": "Общ"
},
"generalSettingsDescription": {
"message": "Конвертиране на валута, първична валута, език, блокчейн идентичност"
},
"getEther": {
"message": "Вземете етер"
},
@ -593,9 +581,6 @@
"networkName": {
"message": "Име на мрежата"
},
"networkSettingsDescription": {
"message": "Добавете и редактирайте персонализирани RPC мрежи"
},
"networks": {
"message": "Mрежи"
},
@ -776,9 +761,6 @@
"restore": {
"message": "Възстановяване"
},
"restoreAccountWithSeed": {
"message": "Възстановете акаунта си с фраза зародиш"
},
"revealSeedWords": {
"message": "Разкрий думите зародиш"
},
@ -830,9 +812,6 @@
"securityAndPrivacy": {
"message": "Сигурност и поверителност"
},
"securitySettingsDescription": {
"message": "Настройки за поверителност и фраза зародиш за портфейла"
},
"seedPhrasePlaceholder": {
"message": "Отделете всяка дума с един интервал"
},
@ -866,9 +845,6 @@
"sendTokens": {
"message": "Изпращане на жетони"
},
"separateEachWord": {
"message": "Отделете всяка дума с интервал"
},
"settings": {
"message": "Настройки"
},

@ -8,9 +8,6 @@
"about": {
"message": "সমপর"
},
"aboutSettingsDescription": {
"message": "সকরণ, সহয়তর, এবর তথয।"
},
"acceleratingATransaction": {
"message": "* একটি উচচতর গর ময বযবহর কর একটিনদর গতিিটওয়র দির পরকিকরণ দততর হওয়র সমবনি কর, কি সবসময় সির নিচয়তওয়য় ন।"
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "উননত বিকলপসমহ"
},
"advancedSettingsDescription": {
"message": "ডলপর বিযগিস করন, সট লগগিউনলড করন, অউনট রিট করন, টটনটস এবটম RPC সটআপ করন।"
},
"amount": {
"message": "পরিন"
},
@ -145,9 +139,6 @@
"message": "$1 এ অউনট দন",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "বলকিজ আইডিকন বযবহর করন"
},
"browserNotSupported": {
"message": "আপনর বউজর সমরিত নয়..."
},
@ -420,9 +411,6 @@
"general": {
"message": "সরণ"
},
"generalSettingsDescription": {
"message": "মিিময়, পথমিক ম, ভ, বলকিস আইডিকন"
},
"getEther": {
"message": "ইথর পন"
},
@ -597,9 +585,6 @@
"networkName": {
"message": "নটওয়র নম"
},
"networkSettingsDescription": {
"message": "কটম RPC নটওয়কগিগ ও সমদন করন"
},
"networks": {
"message": "নটওয়কসমহ"
},
@ -780,9 +765,6 @@
"restore": {
"message": "পনরর করন"
},
"restoreAccountWithSeed": {
"message": "সড ফজ দি আপনর অউনট রির করন"
},
"revealSeedWords": {
"message": "সড শবদগিরকশ করন"
},
@ -834,9 +816,6 @@
"securityAndPrivacy": {
"message": "নিপত এবপনয়ত"
},
"securitySettingsDescription": {
"message": "গপনয়তিস এব ওয়ট সড ফজ"
},
"seedPhrasePlaceholder": {
"message": "পরতিি শবদক একটিস দি আল করন"
},
@ -870,9 +849,6 @@
"sendTokens": {
"message": "টনগিন"
},
"separateEachWord": {
"message": "পরতিি শবদক একটিস দি আল করন"
},
"settings": {
"message": "সিস"
},

@ -8,9 +8,6 @@
"about": {
"message": "Informació"
},
"aboutSettingsDescription": {
"message": "Versió, centre de suport, i informació de contacte"
},
"acceleratingATransaction": {
"message": "* Accelerar una transacció utilitzant un preu de gas més alt augmenta les possibilitats de ser processat més ràpidament per la xarxa, però no sempre es pot garantir."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Opcions Avançades"
},
"advancedSettingsDescription": {
"message": "Accedeix a característiques de desenvolupador, descarrega Registres d'Estat, Reinicia el Compte, instal·la testnets i personalitza RPC"
},
"amount": {
"message": "Quantitat"
},
@ -145,9 +139,6 @@
"message": "Veure compte a $1 ",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Fer servir els Identicon Blockies"
},
"browserNotSupported": {
"message": "El teu navegador no és suportat..."
},
@ -410,9 +401,6 @@
"gasUsed": {
"message": "Gas utilitzat"
},
"generalSettingsDescription": {
"message": "Conversió de divises, divisa principal, idioma, icones d'identificació única"
},
"getEther": {
"message": "Aconsegueix Ether"
},
@ -581,9 +569,6 @@
"networkName": {
"message": "Nom de la xarxa"
},
"networkSettingsDescription": {
"message": "Afegeix i edita xarxes RPC a mida"
},
"networks": {
"message": "Xarxes"
},
@ -758,9 +743,6 @@
"restore": {
"message": "Restaura"
},
"restoreAccountWithSeed": {
"message": "Restaura el teu compte amb Frase de Recuperació"
},
"revealSeedWords": {
"message": "Revelar Paraules de Recuperació"
},
@ -812,9 +794,6 @@
"securityAndPrivacy": {
"message": "Seguretat i privacitat"
},
"securitySettingsDescription": {
"message": "Configuració de privacitat i frase de recuperació del moneder"
},
"seedPhrasePlaceholder": {
"message": "Separa cada paraula amb un únic espai"
},
@ -848,9 +827,6 @@
"sendTokens": {
"message": "Enviar Fitxes"
},
"separateEachWord": {
"message": "Separa cada paraula amb un sol espai"
},
"settings": {
"message": "Configuració"
},

@ -51,9 +51,6 @@
"balance": {
"message": "Zůstatek:"
},
"blockiesIdenticon": {
"message": "Použít Blockies Identicon"
},
"cancel": {
"message": "Zrušit"
},

@ -8,9 +8,6 @@
"about": {
"message": "Om"
},
"aboutSettingsDescription": {
"message": "Version, supportcenter og kontaktinformation"
},
"acceleratingATransaction": {
"message": "* At gøre din transaktion hurtigere ved at bruge en højere Gas-priser, øger dennes chancer for at blive behandlet af netværket hurtigere, men det er ikke altid garanteret."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Avancerede Valgmuligheder"
},
"advancedSettingsDescription": {
"message": "Få adgang til udviklerfunktioner, hent tilstandslogs, nulstil konto, opsæt testnetværk og brugerdefineret RPC"
},
"amount": {
"message": "Beløb"
},
@ -145,9 +139,6 @@
"message": "Se konto på $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Brug Blockies Identicon"
},
"browserNotSupported": {
"message": "Din browser er ikke understøttet..."
},
@ -416,9 +407,6 @@
"general": {
"message": "Generelt"
},
"generalSettingsDescription": {
"message": "Valutakonvertering, primær valuta, sprog, blockies-identicon"
},
"getEther": {
"message": "Hent Ether"
},
@ -581,9 +569,6 @@
"networkName": {
"message": "Netværksnavn"
},
"networkSettingsDescription": {
"message": "Tilføj og redigér brugerdefinerede RPC-netværk"
},
"networks": {
"message": "Netværk"
},
@ -761,9 +746,6 @@
"restore": {
"message": "Gendan"
},
"restoreAccountWithSeed": {
"message": "Gendan din konto med Seed-sætning"
},
"revealSeedWords": {
"message": "Vis Seedord"
},
@ -815,9 +797,6 @@
"securityAndPrivacy": {
"message": "Sikkerhed & Privatliv"
},
"securitySettingsDescription": {
"message": "Indstillinger for beskyttelse af personlige oplysninger og backupsætning til tegnebog"
},
"seedPhrasePlaceholder": {
"message": "Adskil hvert ord med et enkelt mellemrum"
},
@ -848,9 +827,6 @@
"sendTokens": {
"message": "Send tokens"
},
"separateEachWord": {
"message": "Separer hvert ord med et enkelt mellemrum"
},
"settings": {
"message": "Indstillinger "
},

File diff suppressed because it is too large Load Diff

@ -42,14 +42,11 @@
"message": "Πορτοφόλι HW βασισμένο σε QR"
},
"QRHardwareWalletSteps2Description": {
"message": "AirGap Vault & Ngrave (Σύντομα)"
"message": "AirGap Vault & Ngrave (Έρχεται Σύντομα)"
},
"about": {
"message": "Σχετικά με"
},
"aboutSettingsDescription": {
"message": "Έκδοση, κέντρο υποστήριξης και πληροφορίες επικοινωνίας"
},
"acceleratingATransaction": {
"message": "* Η επιτάχυνση μιας συναλλαγής με τη χρήση υψηλότερης τιμής καυσίμου αυξάνει τις πιθανότητές της για ταχύτερη επεξεργασία από το δίκτυο, αλλά δεν είναι πάντοτε εγγυημένη."
},
@ -90,7 +87,7 @@
"message": "Δραστηριότητα"
},
"activityLog": {
"message": "αρχείο καταγραφής δραστηριότητας"
"message": "Αρχείο καταγραφής δραστηριότητας"
},
"add": {
"message": "Προσθήκη"
@ -114,7 +111,7 @@
"message": "Προσθήκη Προσαρμοσμένου Token"
},
"addCustomTokenByContractAddress": {
"message": "Αδυναμία εύρεσης token? Μπορείτε να προσθέσετε χειροκίνητα οποιοδήποτε διακριτικό επικολλώντας τη διεύθυνσή του. Οι διευθύνσεις συμβολαίων Token μπορούν να βρεθούν στο $1.",
"message": "Αδυναμία εύρεσης token; Μπορείτε να προσθέσετε χειροκίνητα οποιοδήποτε διακριτικό επικολλώντας τη διεύθυνσή του. Οι διευθύνσεις συμβολαίων Token μπορούν να βρεθούν στο $1.",
"description": "$1 is a blockchain explorer for a specific network, e.g. Etherscan for Ethereum"
},
"addEthereumChainConfirmationDescription": {
@ -185,9 +182,6 @@
"advancedPriorityFeeToolTip": {
"message": "Το τέλος προτεραιότητας (γνωστό και ως “miner tip”) πηγαίνει άμεσα στους miner και τους ενθαρρύνει να δώσουν προτεραιότητα στη συναλλαγή σας."
},
"advancedSettingsDescription": {
"message": "Αποκτήστε πρόσβαση στις λειτουργίες του προγραμματιστή, κατεβάστε Αρχεία Καταγραφών Καταστάσεων, Επαναφέρετε τον Λογαριασμό, εγκαταστήστε δοκιμαστικά δίκτυα και προσαρμοσμένα RPC"
},
"affirmAgree": {
"message": "Συμφωνώ"
},
@ -195,7 +189,7 @@
"message": "Αμοιβή ανταλλακτηρίου"
},
"alertDisableTooltip": {
"message": "Αυτό μπορεί να αλλάξει στο \"Ρυθμίσεις> Ειδοποιήσεις\""
"message": "Αυτό μπορεί να αλλάξει στο \"Ρυθμίσεις > Ειδοποιήσεις\""
},
"alertSettingsUnconnectedAccount": {
"message": "Περιήγηση σε μια ιστοσελίδα με έναν μη συνδεδεμένο λογαριασμό επιλεγμένο"
@ -207,14 +201,11 @@
"message": "Όταν μια ιστοσελίδα προσπαθεί να χρησιμοποιήσει το window.web3 API που έχει αφαιρεθεί"
},
"alertSettingsWeb3ShimUsageDescription": {
"message": "Αυτή η ειδοποίηση εμφανίζεται στο αναδυόμενο παράθυρο όταν περιηγείστε σε μια ιστοσελίδα που προσπαθεί να χρησιμοποιήσει το window.web3 API που έχει αφαιρεθεί, και μπορεί, ως αποτέλεσμα, να μην λειτουργεί."
"message": "Αυτή η ειδοποίηση εμφανίζεται στο αναδυόμενο παράθυρο όταν περιηγείστε σε μια ιστοσελίδα που προσπαθεί να χρησιμοποιήσει το window.web3 API που έχει αφαιρεθεί, και μπορεί, ως αποτέλεσμα, να μη λειτουργεί."
},
"alerts": {
"message": "Ειδοποιήσεις"
},
"alertsSettingsDescription": {
"message": "Ενεργοποίηση ή απενεργοποίηση κάθε ειδοποίησης"
},
"allowExternalExtensionTo": {
"message": "Επιτρέψτε σε αυτή την εξωτερική επέκταση να:"
},
@ -298,7 +289,7 @@
"message": "Χρονόμετρο Αυτόματης Αποσύνδεσης (λεπτά)"
},
"autoLockTimeLimitDescription": {
"message": "Ρυθμίστε τον χρόνο αδράνειας σε λεπτά πριν αποσυνδεθεί αυτόματα το MetaMask"
"message": "Ρυθμίστε τον χρόνο αδράνειας σε λεπτά πριν αποσυνδεθεί αυτόματα το MetaMask."
},
"average": {
"message": "Μέσος Όρος"
@ -331,7 +322,7 @@
"message": "Βασικά"
},
"betaMetamaskDescription": {
"message": "Αξιόπιστο για εκατομμύρια, MetaMask είναι ένα ασφαλές πορτοφόλι που καθιστά τον κόσμο του web3 προσβάσιμο σε όλους."
"message": "Αξιόπιστο για εκατομμύρια, το MetaMask είναι ένα ασφαλές πορτοφόλι που καθιστά τον κόσμο του web3 προσβάσιμο σε όλους."
},
"betaMetamaskDescriptionExplanation": {
"message": "Χρησιμοποιήστε αυτήν την έκδοση για να δοκιμάσετε τις επερχόμενες λειτουργίες πριν από την κυκλοφορία τους. Η χρήση και η ανατροφοδότηση σας μας βοηθούν να χτίσουμε την καλύτερη δυνατή έκδοση του MetaMask. Η χρήση του MetaMask Δοκιμαστική Έκδοση υπόκειται στα στάνταρ μας $1, καθώς και $2. Ως Δοκιμαστική Έκδοση, μπορεί να υπάρχει αυξημένος κίνδυνος σφαλμάτων. Συνεχίζοντας, αποδέχεστε και αναγνωρίζετε αυτούς τους κινδύνους, καθώς και τους κινδύνους που εντοπίζονται στους Όρους μας και τους Όρους Δοκιμαστικής Έκδοσης.",
@ -371,9 +362,6 @@
"message": "Προβολή λογαριασμού με $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Χρήση Αναπαράστασης Μπλοκ"
},
"browserNotSupported": {
"message": "Το Πρόγραμμα Περιήγησής σας δεν υποστηρίζεται..."
},
@ -531,7 +519,7 @@
"message": "Σύνδεση με $1"
},
"connectingToGoerli": {
"message": "Σύνδεση στο Δίκτυο Δοκιμής Goerli "
"message": "Σύνδεση στο Δίκτυο Δοκιμής Goerli"
},
"connectingToKovan": {
"message": "Σύνδεση στο Δοκιμαστικό Δίκτυο Kovan"
@ -551,9 +539,6 @@
"contacts": {
"message": "Επαφές"
},
"contactsSettingsDescription": {
"message": "Προσθέστε, επεξεργαστείτε, αφαιρέστε και διαχειριστείτε τις επαφές σας"
},
"continue": {
"message": "Συνέχεια"
},
@ -728,7 +713,7 @@
"message": "Αποσύνδεση όλων των λογαριασμών"
},
"disconnectAllAccountsConfirmationDescription": {
"message": "Είστε βέβαιοι ότι θέλετε να αποσυνδεθείτε? Μπορεί να χάσετε τη λειτουργικότητα της ιστοσελίδας."
"message": "Είστε βέβαιοι ότι θέλετε να αποσυνδεθείτε; Μπορεί να χάσετε τη λειτουργικότητα της ιστοσελίδας."
},
"disconnectPrompt": {
"message": "Αποσύνδεση $1"
@ -883,7 +868,7 @@
"message": "Η μέγιστη χρέωση ή το μέγιστο τέλος προτεραιότητας μπορεί να είναι χαμηλά για τις τρέχουσες συνθήκες της αγοράς. Δεν γνωρίζουμε πότε (ή εάν) η συναλλαγή σας θα επεξεργαστεί. "
},
"editGasTooLowWarningTooltip": {
"message": "Αυτό μειώνει τη μέγιστη χρέωση αλλά αν η κίνηση δικτύου αυξήσει την συναλλαγή σας μπορεί να καθυστερήσει ή να αποτύχει."
"message": "Αυτό μειώνει τη μέγιστη χρέωση αλλά αν η κίνηση δικτύου αυξήσει τη συναλλαγή σας μπορεί να καθυστερήσει ή να αποτύχει."
},
"editNonceField": {
"message": "Επεξεργασία Nonce"
@ -904,7 +889,7 @@
"message": "Ενεργοποίηση OpenSea API"
},
"enableOpenSeaAPIDescription": {
"message": "Χρήσιμοποιείστε το API OpenSea για λήψη δεδομένων NFT. Η αυτόματη ανίχνευση NFT βασίζεται στο API του OpenSea, και δεν θα είναι διαθέσιμη όταν αυτό είναι απενεργοποιημένο."
"message": "Χρησιμοποιήστε το API OpenSea για λήψη δεδομένων NFT. Η αυτόματη ανίχνευση NFT βασίζεται στο API του OpenSea, και δεν θα είναι διαθέσιμη όταν αυτό είναι απενεργοποιημένο."
},
"enableToken": {
"message": "ενεργοποίηση $1",
@ -918,7 +903,7 @@
"message": "Αίτηση δημόσιου κλειδιού κρυπτογράφησης"
},
"endOfFlowMessage1": {
"message": "Περάσατε τη δοκιμή - κρατήστε τη φράση φύτρου σας ασφαλή, είναι δική σας ευθύνη!"
"message": "Περάσατε τη δοκιμή - κρατήστε τη Μυστική Φράση Ανάκτησής σας ασφαλή, είναι δική σας ευθύνη!"
},
"endOfFlowMessage10": {
"message": "Όλα Έτοιμα"
@ -933,17 +918,17 @@
"message": "Μην μοιράζεστε ποτέ τη φράση με κανέναν."
},
"endOfFlowMessage5": {
"message": "Προσέξτε το ηλεκτρονικό \"ψάρεμα\"! Το MetaMask δεν θα ζητήσει ποτέ αυθόρμητα τη φράση φύτρου σας."
"message": "Προσέξτε το ηλεκτρονικό \"ψάρεμα\"! Το MetaMask δεν θα ζητήσει ποτέ από μόνο του τη Μυστική Φράση Ανάκτησής σας."
},
"endOfFlowMessage6": {
"message": "Αν χρειάζεται να δημιουργήσετε ξανά αντίγραφο της φράσης επαναφοράς σας, μπορείτε να την βρείτε στη Ρυθμίσεις -> Ασφάλεια."
"message": "Αν χρειάζεται να δημιουργήσετε ξανά αντίγραφο της φράσης επαναφοράς σας, μπορείτε να τη βρείτε στο Ρυθμίσεις -> Ασφάλεια."
},
"endOfFlowMessage7": {
"message": "Αν έχετε ποτέ ερωτήσεις ή δείτε κάτι ύποπτο, επικοινωνήστε με την υποστήριξή μας $1.",
"description": "$1 is a clickable link with text defined by the 'here' key. The link will open to a form where users can file support tickets."
},
"endOfFlowMessage8": {
"message": "Το MetaMask δεν μπορεί να ανακτήσει τη φράση φύτρου σας. Μάθετε περισσότερα."
"message": "Το MetaMask δεν μπορεί να ανακτήσει τη Μυστική Φράση Ανάκτησής σας. Μάθετε περισσότερα."
},
"endOfFlowMessage9": {
"message": "Μάθετε περισσότερα."
@ -1017,10 +1002,6 @@
"ethGasPriceFetchWarning": {
"message": "Το εφεδρικό τέλος συναλλαγής που παρέχεται ως η κύρια υπηρεσία εκτίμησης τελών συναλλαγής, δεν είναι διαθέσιμο αυτή τη στιγμή."
},
"eth_accounts": {
"message": "Βλέπε διεύθυνση, υπόλοιπο λογαριασμού, δραστηριότητα και έναρξη συναλλαγών",
"description": "The description for the `eth_accounts` permission"
},
"ethereumPublicAddress": {
"message": "Δημόσια Διεύθυνση Ethereum"
},
@ -1039,9 +1020,6 @@
"experimental": {
"message": "Πειραματικό"
},
"experimentalSettingsDescription": {
"message": "Εντοπισμός token & περισσότερα"
},
"exportPrivateKey": {
"message": "Εξαγωγή Ιδιωτικού Κλειδιού"
},
@ -1062,7 +1040,7 @@
"message": "Κάτι πήγε λάθος και δεν μπορέσαμε να ολοκληρώσουμε την ενέργεια"
},
"fakeTokenWarning": {
"message": "Οποιοσδήποτε μπορεί να δημιουργήσει ένα token, συμπεριλαμβανομένης της δημιουργίας ψεύτικων εκδόσεων των υφιστάμενων tokens. Μάθετε περισσότερά γι'αυτό $1"
"message": "Οποιοσδήποτε μπορεί να δημιουργήσει ένα token, συμπεριλαμβανομένης της δημιουργίας ψεύτικων εκδόσεων των υφιστάμενων tokens. Μάθετε περισσότερα γι'αυτό $1"
},
"fast": {
"message": "Γρήγορα"
@ -1103,7 +1081,7 @@
"message": "Διαγραφή αυτής της συσκευής"
},
"from": {
"message": "Από "
"message": "Από"
},
"fromAddress": {
"message": "Από: $1",
@ -1190,7 +1168,7 @@
"description": "$1 represents a number of seconds"
},
"gasTimingSecondsShort": {
"message": "$1 δευτ.",
"message": "$1 δευτ",
"description": "$1 represents a number of seconds"
},
"gasTimingVeryPositive": {
@ -1211,9 +1189,6 @@
"general": {
"message": "Γενικά"
},
"generalSettingsDescription": {
"message": "Μετατροπή νομίσματος, πρωτογενές νόμισμα, γλώσσα, αναπαράσταση μπλοκ"
},
"getEther": {
"message": "Λάβετε Ether"
},
@ -1237,7 +1212,7 @@
"message": "Χαιρόμαστε που σας βλέπουμε."
},
"hardware": {
"message": "υλικό"
"message": "Υλικό"
},
"hardwareWalletConnected": {
"message": "Συνδέθηκε το πορτοφόλι υλικού"
@ -1253,7 +1228,7 @@
"message": "Συνδέστε ένα πορτοφόλι εξοπλισμού"
},
"hardwareWalletsMsg": {
"message": "Επιλέξτε ένα πορτοφόλι εξοπλισμού το οποίο θέλετε να χρησιμοποιήσετε με το MetaMask"
"message": "Επιλέξτε ένα πορτοφόλι εξοπλισμού το οποίο θέλετε να χρησιμοποιήσετε με το MetaMask."
},
"here": {
"message": "εδώ",
@ -1298,18 +1273,11 @@
"importAccountError": {
"message": "Σφάλμα εισαγωγής λογαριασμού."
},
"importAccountLinkText": {
"message": "εισαγωγή χρησιμοποιώντας τη Μυστική Φράση Ανάκτησης"
},
"importAccountMsg": {
"message": "Οι λογαριασμοί που εισάγονται δεν θα συσχετιστούν με τη φάση σπόρου του λογαριασμού σας MetaTask που δημιουργήθηκε αρχικά. Μάθετε περισσότερα για τους εισηγμένους λογαριασμούς"
"message": "Οι λογαριασμοί που εισάγονται δεν θα συσχετιστούν με τη Μυστική Φράση Ανάκτησης του λογαριασμού σας MetaTask που δημιουργήθηκε αρχικά. Μάθετε περισσότερα για τους εισηγμένους λογαριασμούς"
},
"importAccountSeedPhrase": {
"message": "Εισαγωγή λογαριασμού με Φράση Φύτρου"
},
"importAccountText": {
"message": "ή $1",
"description": "$1 represents the text from `importAccountLinkText` as a link"
"message": "Εισαγωγή λογαριασμού με Μυστική Φράση Ανάκτησης"
},
"importExistingWalletDescription": {
"message": "Εισάγετε τη Μυστική Φράση Ανάκτησης (δλδ Seed Phrase) που σας δόθηκε όταν δημιουργήσατε το πορτοφόλι σας. $1",
@ -1347,7 +1315,7 @@
"description": "status showing that an account has been fully loaded into the keyring"
},
"infuraBlockedNotification": {
"message": "Το MetaMask δεν μπορεί να συνδεθεί με τον blockchain host. Ανασκόπηση πιθανών λόγων $1.",
"message": "Το MetaMask δεν μπορεί να συνδεθεί με τον εξυπηρετητή blockchain. Ανασκόπηση πιθανών λόγων $1.",
"description": "$1 is a clickable link with with text defined by the 'here' key"
},
"initialTransactionConfirmed": {
@ -1413,7 +1381,7 @@
"message": "Μη έγκυρο RPC URL"
},
"invalidSeedPhrase": {
"message": "Μη έγκυρη φράση φύτρου"
"message": "Μη έγκυρη Μυστική Φράση Ανάκτησής"
},
"ipfsGateway": {
"message": "Πύλη IPFS"
@ -1457,7 +1425,7 @@
"description": "$1 is link to cancel or speed up transactions"
},
"learnMore": {
"message": "Μάθε περισσότερα"
"message": "μάθε περισσότερα"
},
"learnMoreUpperCase": {
"message": "Μάθε περισσότερα"
@ -1610,7 +1578,7 @@
"message": "Συντήρηση των ανταλλαγών MetaMask. Παρακαλούμε ελέγξτε αργότερα."
},
"metamaskVersion": {
"message": "Έκδοση MetaMask "
"message": "Έκδοση MetaMask"
},
"metametricsCommitmentsAllowOptOut": {
"message": "Σας επιτρέπεται πάντα να εξαιρεθείτε μέσω των Ρυθμίσεων"
@ -1637,7 +1605,7 @@
"description": "The $1 is the bolded word 'Never', from 'metametricsCommitmentsBoldNever'"
},
"metametricsCommitmentsNeverIP": {
"message": "Ποτέ δεν συλλέγεi την πλήρη IP διεύθυνσή σας"
"message": "Ποτέ δεν συλλέγει την πλήρη IP διεύθυνσή σας"
},
"metametricsCommitmentsNeverSell": {
"message": "Ποτέ δεν πουλά δεδομένα για κέρδος. Ποτέ!"
@ -1688,7 +1656,7 @@
"message": "Όνομα"
},
"needHelp": {
"message": "Χρειάζεστε βοήθεια? Επικοινωνήστε με $1",
"message": "Χρειάζεστε βοήθεια; Επικοινωνήστε με $1",
"description": "$1 represents `needHelpLinkText`, the text which goes in the help link"
},
"needHelpFeedback": {
@ -1734,9 +1702,6 @@
"networkSettingsChainIdDescription": {
"message": "Το αναγνωριστικό αλυσίδας χρησιμοποιείται για την υπογραφή συναλλαγών. Πρέπει να ταιριάζει με το αναγνωριστικό αλυσίδας που επιστρέφεται από το δίκτυο. Μπορείτε να εισάγετε ένα δεκαδικό ή '0x'-προκαθορισμένο δεκαεξαδικό αριθμό, αλλά θα εμφανίσουμε τον αριθμό στο δεκαδικό σύστημα."
},
"networkSettingsDescription": {
"message": "Προσθήκη και επεξεργασία προσαρμοσμένων δικτύων RPC"
},
"networkStatus": {
"message": "Κατάσταση δικτύου"
},
@ -1773,9 +1738,6 @@
"message": "Λογαριασμός $1",
"description": "Default name of next account to be created on create account screen"
},
"newCollectibleAddFailed": {
"message": "Το Collectible δεν προστέθηκε επειδή: $1"
},
"newCollectibleAddedMessage": {
"message": "Το Collectible προστέθηκε με επιτυχία!"
},
@ -1832,7 +1794,7 @@
"message": "Δεν έχει ορισθεί καμιά διεύθυνση γ' αυτό το όνομα."
},
"noAlreadyHaveSeed": {
"message": "Όχι, έχω ήδη μια φράση φύτρου"
"message": "Όχι, έχω ήδη μια Μυστική Φράση Ανάκτησης"
},
"noConversionDateAvailable": {
"message": "Δεν Υπάρχει Διαθέσιμη Ημερομηνία Ισοτιμίας Μετατροπής Νομίσματος"
@ -1871,7 +1833,7 @@
"message": "Όχι απασχολημένος"
},
"notCurrentAccount": {
"message": "Είναι ο σωστός λογαριασμός? Είναι διαφορετικό από τον τρέχοντα επιλεγμένο λογαριασμό στο πορτοφόλι σας"
"message": "Είναι ο σωστός λογαριασμός; Είναι διαφορετικό από τον τρέχοντα επιλεγμένο λογαριασμό στο πορτοφόλι σας"
},
"notEnoughGas": {
"message": "Δεν Υπάρχει Αρκετό Αέριο"
@ -1901,7 +1863,7 @@
"description": "The 'call to action' on the button, or link, of the 'Swap on Binance Smart Chain!' notification. Upon clicking, users will be taken to a page where then can swap tokens on Binance Smart Chain."
},
"notifications4Description": {
"message": "Λάβετε τις καλύτερες τιμές για swaps token ακριβώς μέσα στο πορτοφόλι σας. Το MetaMask τώρα σας συνδέει με πολλαπλούς αποκεντρωμένα ανταλλακτήρια συναλλάγματος και επαγγελματίες διαμορφωτές της αγοράς για εξυπνη αλυσίδα Binance.",
"message": "Λάβετε τις καλύτερες τιμές για swaps token ακριβώς μέσα στο πορτοφόλι σας. Το MetaMask τώρα σας συνδέει με πολλαπλούς αποκεντρωμένα ανταλλακτήρια συναλλάγματος και επαγγελματίες διαμορφωτές της αγοράς για έξυπνη αλυσίδα Binance.",
"description": "Description of a notification in the 'See What's New' popup."
},
"notifications4Title": {
@ -1917,11 +1879,11 @@
"description": "Description of a notification in the 'See What's New' popup. Describes the Ledger support update."
},
"notifications6DescriptionThree": {
"message": "Όταν αλληλεπιδράτε με τον λογαριασμό σας Ledger στο MetaMask, θα ανοίξει μια νέα καρτέλα και θα σας ζητηθεί να ανοίξετε την εφαρμογή Ledger Live. Μόλις ανοίξει η εφαρμογή, θα σας ζητηθεί να επιτρέψετε μια σύνδεση WebSocket στο λογαριασμό σας MetaMask. Αυτό ήταν όλο!",
"message": "Όταν αλληλεπιδράτε με τον λογαριασμό σας Ledger στο MetaMask, θα ανοίξει μια νέα καρτέλα και θα σας ζητηθεί να ανοίξετε την εφαρμογή Ledger Live. Μόλις ανοίξει η εφαρμογή, θα σας ζητηθεί να επιτρέψετε μια σύνδεση WebSocket στον λογαριασμό σας MetaMask. Αυτό ήταν όλο!",
"description": "Description of a notification in the 'See What's New' popup. Describes the Ledger support update."
},
"notifications6DescriptionTwo": {
"message": "Μπορείτε να ενεργοποιήσετε την υποστήριξη Ledger Live κάνοντας κλικ στις Ρυθμίσεις> Για προχωρημένους> Χρήση Ledger Live.",
"message": "Μπορείτε να ενεργοποιήσετε την υποστήριξη Ledger Live κάνοντας κλικ στις Ρυθμίσεις > Για προχωρημένους > Χρήση Ledger Live.",
"description": "Description of a notification in the 'See What's New' popup. Describes the Ledger support update."
},
"notifications6Title": {
@ -1933,11 +1895,11 @@
"description": "Description of a notification in the 'See What's New' popup. Describes changes for ledger and EIP1559 in v10.1.0"
},
"notifications7DescriptionTwo": {
"message": "Για να ολοκληρώσετε τις συναλλαγές στο Ethereum Mainnet, βεβαιωθείτε ότι η συσκευή Ledger έχει το πιο πρόσφατο firmware.",
"message": "Για να ολοκληρώσετε τις συναλλαγές στο Ethereum Mainnet, βεβαιωθείτε ότι η συσκευή Ledger έχει το πιο πρόσφατο υλισμικό.",
"description": "Description of a notification in the 'See What's New' popup. Describes the need to update ledger firmware."
},
"notifications7Title": {
"message": "Ενημέρωση υλικολογισμικού Ledger",
"message": "Ενημέρωση υλισμικού Ledger",
"description": "Title for a notification in the 'See What's New' popup. Notifies ledger users of the need to update firmware."
},
"notifications8ActionText": {
@ -2085,7 +2047,7 @@
"description": "For importing an account from a private key"
},
"pending": {
"message": "σε εκκρεμότητα"
"message": "Σε εκκρεμότητα"
},
"pendingTransactionInfo": {
"message": "Αυτή η συναλλαγή δεν θα επεξεργαστεί μέχρι να ολοκληρωθεί αυτή η συναλλαγή."
@ -2100,6 +2062,10 @@
"permissionRequest": {
"message": "Αίτημα άδειας"
},
"permission_ethereumAccounts": {
"message": "Βλέπε διεύθυνση, υπόλοιπο λογαριασμού, δραστηριότητα και έναρξη συναλλαγών",
"description": "The description for the `eth_accounts` permission"
},
"permissions": {
"message": "Άδειες"
},
@ -2230,7 +2196,7 @@
"message": "Κατάργηση λογαριασμού"
},
"removeAccountDescription": {
"message": "Αυτός ο λογαριασμός θα καταργηθεί από το πορτοφόλι σας. Παρακαλούμε βεβαιωθείτε ότι έχετε την αρχική φράση επαναφοράς ή ιδιωτικό κλειδί για αυτόν τον εισαγόμενο λογαριασμό πριν συνεχίσετε. Μπορείτε να εισαγάγετε ή να δημιουργήσετε ξανά λογαριασμούς από το αναπτυσσόμενο μενού του λογαριασμού."
"message": "Αυτός ο λογαριασμός θα καταργηθεί από το πορτοφόλι σας. Παρακαλούμε βεβαιωθείτε ότι έχετε την αρχική φράση επαναφοράς ή ιδιωτικό κλειδί για αυτόν τον εισαγόμενο λογαριασμό πριν συνεχίσετε. Μπορείτε να εισαγάγετε ή να δημιουργήσετε ξανά λογαριασμούς από το αναπτυσσόμενο μενού του λογαριασμού. "
},
"removeNFT": {
"message": "Αφαίρεση NFT"
@ -2253,9 +2219,6 @@
"restore": {
"message": "Επαναφορά"
},
"restoreAccountWithSeed": {
"message": "Επαναφέρετε τον Λογαριασμό σας με Φράση Επαναφοράς"
},
"restoreWalletPreferences": {
"message": "Βρέθηκε ένα αντίγραφο ασφαλείας των δεδομένων σας από το $1. Θα θέλατε να επαναφέρετε τις προτιμήσεις του πορτοφολιού σας;",
"description": "$1 is the date at which the data was backed up"
@ -2267,10 +2230,10 @@
"message": "Ένα token εδώ επαναχρησιμοποιεί ένα σύμβολο από ένα άλλο token που παρακολουθείτε, αυτό μπορεί να προκαλέσει σύγχυση ή να είναι παραπλανητικό."
},
"revealSeedWords": {
"message": "Αποκάλυψη Λέξεων Φύτρου"
"message": "Αποκάλυψη Λέξεων Μυστικής Φράσης Ανάκτησης"
},
"revealSeedWordsDescription": {
"message": "Εάν αλλάξετε ποτέ προγράμματα περιήγησης ή μετακινήσετε υπολογιστές, θα χρειαστείτε αυτήν τη φράση φύτρου για να αποκτήσετε πρόσβαση στους λογαριασμούς σας. Αποθηκεύστε την κάπου με ασφάλεια και μυστικότητα."
"message": "Εάν αλλάξετε ποτέ προγράμματα περιήγησης ή μετακινήσετε υπολογιστές, θα χρειαστείτε αυτήν τη Μυστική Φράση Ανάκτησης για να αποκτήσετε πρόσβαση στους λογαριασμούς σας. Αποθηκεύστε την κάπου με ασφάλεια και μυστικότητα."
},
"revealSeedWordsWarning": {
"message": "Αυτές οι λέξεις μπορούν να χρησιμοποιηθούν για να κλαπούν όλοι οι λογαριασμοί σας."
@ -2323,9 +2286,6 @@
"secretPhrase": {
"message": "Μόνο ο πρώτος λογαριασμός σε αυτό το πορτοφόλι θα φορτώσει αυτόματα. Μετά την ολοκλήρωση αυτής της διαδικασίας, για να προσθέσετε επιπλέον λογαριασμούς, κάντε κλικ στο αναπτυσσόμενο μενού και, στη συνέχεια, επιλέξτε Δημιουργία Λογαριασμού."
},
"secretPhraseWarning": {
"message": "Αν κάνετε επαναφορά χρησιμοποιώντας μια άλλη Μυστική Φράση Ανάκτησης, το τρέχον πορτοφόλι, οι λογαριασμοί και τα περιουσιακά στοιχεία σας θα αφαιρεθούν από αυτή την εφαρμογή μόνιμα. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί."
},
"secretRecoveryPhrase": {
"message": "Μυστική Φράση Ανάκτησης"
},
@ -2335,9 +2295,6 @@
"securityAndPrivacy": {
"message": "Ασφάλεια και Απόρρητο"
},
"securitySettingsDescription": {
"message": "Φάση ρυθμίσεων απορρήτου και σπόρου πορτοφολιού"
},
"seedPhraseConfirm": {
"message": "Επιβεβαίωση Μυστικής Φράσης Ανάκτησης"
},
@ -2393,10 +2350,10 @@
"message": "Επικόλληση Μυστικής Φράσης Ανάκτησης από το πρόχειρο"
},
"seedPhraseReq": {
"message": "Οι φράσεις φύτρου έχουν μήκος 12 λέξεων"
"message": "Οι Μυστικές Φράσεις Ανάκτησης έχουν μήκος 12 λέξεων"
},
"seedPhraseWriteDownDetails": {
"message": "Γράψτε αυτή τη Μυστική Φράση Ανάκτησης 12 λέξεων και αποθηκεύστε την σε ένα μέρος που εμπιστεύεστε και όπου μόνο εσείς μπορείτε να έχετε πρόσβαση."
"message": "Γράψτε αυτή τη Μυστική Φράση Ανάκτησης 12 λέξεων και αποθηκεύστε τη σε ένα μέρος που εμπιστεύεστε και όπου μόνο εσείς μπορείτε να έχετε πρόσβαση."
},
"seedPhraseWriteDownHeader": {
"message": "Γράψτε τη Μυστική Φράση Ανάκτησης σας"
@ -2426,7 +2383,7 @@
"message": "Ενεργοποιήστε την ανίχνευση NFT στις Ρυθμίσεις"
},
"selectPathHelp": {
"message": "Εάν δεν βλέπετε τους υπάρχοντες λογαριασμούς σας Καθολικού παρακάτω, προσπαθήστε να αλλάξετε τις διαδρομές σε \"Legacy (MEW / MyCrypto)\""
"message": "Εάν δεν βλέπετε τους αναμενόμενους λογαριασμούς, προσπαθήστε να αλλάξετε το μονοπάτι HD."
},
"selectType": {
"message": "Επιλέξτε Τύπο"
@ -2454,9 +2411,6 @@
"message": "Αποστολή $1",
"description": "$1 represents the native currency symbol for the current network (e.g. ETH or BNB)"
},
"separateEachWord": {
"message": "Διαχωρίστε κάθε λέξη με ένα μόνο κενό"
},
"setAdvancedPrivacySettings": {
"message": "Ορίστε ρυθμίσεις απορρήτου για προχωρημένους"
},
@ -2545,7 +2499,7 @@
"message": "Παράλειψη Ασφάλειας Λογαριασμού;"
},
"skipAccountSecurityDetails": {
"message": "Καταλαβαίνω ότι μέχρι να δημιουργήσω αντίγραφα ασφαλείας για την Μυστική Φράση Ανάκτησής μου, μπορεί να χάσω τους λογαριασμούς μου και όλα τα περιουσιακά στοιχεία τους."
"message": "Καταλαβαίνω ότι μέχρι να δημιουργήσω αντίγραφα ασφαλείας για τη Μυστική Φράση Ανάκτησής μου, μπορεί να χάσω τους λογαριασμούς μου και όλα τα περιουσιακά στοιχεία τους."
},
"slow": {
"message": "Αργά"
@ -2763,7 +2717,7 @@
"message": "Τα τέλη συναλλαγών στην προηγούμενη οθόνη μοιράζονται μεταξύ αυτών των δύο συναλλαγών."
},
"swapGasFeesSummary": {
"message": "Τα τέλη συναλλαγών καταβάλλονται σε κρυπτο miners που επεξεργάζονται συναλλαγές στο δίκτυο $1. Το MetaMask δεν επωφελείται από τα τέλη συναλλαγών.",
"message": "Τα τέλη συναλλαγών καταβάλλονται σε κρυπτο-miners που επεξεργάζονται συναλλαγές στο δίκτυο $1. Το MetaMask δεν επωφελείται από τα τέλη συναλλαγών.",
"description": "$1 is the selected network, e.g. Ethereum or BSC"
},
"swapHighSlippageWarning": {
@ -2783,7 +2737,7 @@
"message": "Τέλος MetaMask"
},
"swapMetaMaskFeeDescription": {
"message": "Βρίσκουμε την καλύτερη τιμή από τις κορυφαίες πηγές ρευστότητας, κάθε φορά. Μια αμοιβή $1% λαμβάνεται αυτόματα υπόψη σε αυτή τη προσφορά.",
"message": "Βρίσκουμε την καλύτερη τιμή από τις κορυφαίες πηγές ρευστότητας, κάθε φορά. Μια αμοιβή $1% λαμβάνεται αυτόματα υπόψη σε αυτή την προσφορά.",
"description": "Provides information about the fee that metamask takes for swaps. $1 is a decimal number."
},
"swapNQuotesWithDot": {
@ -2795,7 +2749,7 @@
"description": "Tells the user the amount of time until the currently displayed quotes are update. $1 is a time that is counting down from 1:00 to 0:00"
},
"swapOnceTransactionHasProcess": {
"message": "Το $1 σας θα προστεθεί στο λογαριασμό σας μόλις ολοκληρωθεί αυτή η συναλλαγή.",
"message": "Το $1 σας θα προστεθεί στον λογαριασμό σας μόλις ολοκληρωθεί αυτή η συναλλαγή.",
"description": "This message communicates the token that is being transferred. It is shown on the awaiting swap screen. The $1 will be a token symbol."
},
"swapPriceDifference": {
@ -2824,10 +2778,6 @@
"swapQuoteDetailsSlippageInfo": {
"message": "Εάν η τιμή αλλάζει μεταξύ της ώρας που τοποθετείται η παραγγελία σας και επιβεβαιώνεται ονομάζεται \"ολίσθηση\". Η ανταλλαγή σας θα ακυρωθεί αυτόματα αν η ολίσθηση υπερβαίνει τη ρύθμιση \"ανοχή ολίσθησης\"."
},
"swapQuoteNofN": {
"message": "Προσφορά $1 από $2",
"description": "A count of loaded quotes shown to the user while they are waiting for quotes to be fetched. $1 is the number of quotes already loaded, and $2 is the total number of quotes to load."
},
"swapQuoteSource": {
"message": "Πηγή προσφοράς"
},
@ -2901,7 +2851,7 @@
"message": "για επιβεβαίωση με το υλικό πορτοφόλι σας"
},
"swapTokenAvailable": {
"message": "Το $1 σας έχει προστεθεί στο λογαριασμό σας.",
"message": "Το $1 σας έχει προστεθεί στον λογαριασμό σας.",
"description": "This message is shown after a swap is successful and communicates the exact amount of tokens the user has received for a swap. The $1 is a decimal number of tokens followed by the token symbol."
},
"swapTokenBalanceUnavailable": {
@ -3036,7 +2986,7 @@
"message": "Έλεγχος Βαλβίδας"
},
"thisWillCreate": {
"message": "Αυτό θα δημιουργήσει ένα νέο πορτοφόλι και φράση φύτρου"
"message": "Αυτό θα δημιουργήσει ένα νέο πορτοφόλι και Μυστική Φράση Ανάκτησης"
},
"time": {
"message": "Ώρα"
@ -3071,7 +3021,7 @@
"message": "Νέο! Η βελτιωμένη ανίχνευση token είναι διαθέσιμη στο Ethereum Mainnet ως πειραματικό χαρακτηριστικό. $1"
},
"tokenSymbol": {
"message": "Σύμβολο Διακριτικού"
"message": "Σύμβολο Token"
},
"tooltipApproveButton": {
"message": "Καταλαβαίνω"
@ -3125,7 +3075,7 @@
"message": "Τα τέλη συναλλαγών καθορίζονται από το δίκτυο και θα αυξάνονται ανάλογα με την κυκλοφορία του δικτύου και την πολυπλοκότητα των συναλλαγών."
},
"transactionDetailGasTooltipIntro": {
"message": "Τα τέλη συναλλαγών καταβάλλονται σε κρυπτο miners που επεξεργάζονται συναλλαγές στο δίκτυο $1. Το MetaMask δεν επωφελείται από τα τέλη συναλλαγών."
"message": "Τα τέλη συναλλαγών καταβάλλονται σε κρυπτο-miners που επεξεργάζονται συναλλαγές στο δίκτυο $1. Το MetaMask δεν επωφελείται από τα τέλη συναλλαγών."
},
"transactionDetailGasTotalSubtitle": {
"message": "Ποσό + τέλος συναλλαγής"
@ -3195,7 +3145,7 @@
"description": "$1 is the wallet device name; $2 is a link to wallet connection guide"
},
"troubleTokenBalances": {
"message": "Είχαμε πρόβλημα να φορτώσουμε τα υπόλοιπα του διακριτικού σας. Μπορείτε να τα δείτε",
"message": "Είχαμε πρόβλημα να φορτώσουμε τα υπόλοιπα του διακριτικού σας. Μπορείτε να τα δείτε ",
"description": "Followed by a link (here) to view token balances"
},
"trustSiteApprovePermission": {
@ -3236,7 +3186,7 @@
"message": "Παρουσιάστηκε σφάλμα κατά την προσπάθεια πρόσβασης στην κάμερά σας. Παρακαλούμε προσπαθήστε πάλι..."
},
"unknownCameraErrorTitle": {
"message": "Ουπς! Κάτι πήγε στραβά..."
"message": "Ουπς! Κάτι πήγε στραβά...."
},
"unknownNetwork": {
"message": "Άγνωστο Ιδιωτικό Δίκτυο"
@ -3369,9 +3319,6 @@
"walletCreationSuccessTitle": {
"message": "Επιτυχής δημιουργία πορτοφολιού"
},
"walletSeedRestore": {
"message": "Μυστικής Φράσης Ανάκτησης Πορτοφολιού"
},
"web3ShimUsageNotification": {
"message": "Παρατηρήσαμε ότι η τρέχουσα ιστοσελίδα προσπάθησε να χρησιμοποιήσει το αφαιρεθέν window.web3 API. Αν η ιστοσελίδα φαίνεται να έχει παραβιαστεί, κάντε κλικ στο $1 για περισσότερες πληροφορίες.",
"description": "$1 is a clickable link."
@ -3432,7 +3379,7 @@
"message": "Υπογράφετε"
},
"yourPrivateSeedPhrase": {
"message": "Η προσωπική σας φράση φύτρου"
"message": "Η προσωπική σας Μυστική Φράση Ανάκτησης"
},
"zeroGasPriceOnSpeedUpError": {
"message": "Μηδενική τιμή καυσίμου κατά την επιτάχυνση"

@ -42,14 +42,11 @@
"message": "QR-based HW Wallet"
},
"QRHardwareWalletSteps2Description": {
"message": "AirGap Vault & Ngrave (Coming Soon)"
"message": "Ngrave (Coming Soon)"
},
"about": {
"message": "About"
},
"aboutSettingsDescription": {
"message": "Version, support center, and contact info"
},
"acceleratingATransaction": {
"message": "* Accelerating a transaction by using a higher gas price increases its chances of getting processed by the network faster, but it is not always guaranteed."
},
@ -70,6 +67,9 @@
"accountDetails": {
"message": "Account details"
},
"accountIdenticon": {
"message": "Account Identicon"
},
"accountName": {
"message": "Account Name"
},
@ -98,6 +98,9 @@
"addANetwork": {
"message": "Add a network"
},
"addANetworkManually": {
"message": "Add a network manually"
},
"addANickname": {
"message": "Add a nickname"
},
@ -137,6 +140,9 @@
"addFriendsAndAddresses": {
"message": "Add friends and addresses you trust"
},
"addFromAListOfPopularNetworks": {
"message": "Add from a list of popular networks or add a network manually. Only interact with the entities you trust."
},
"addMemo": {
"message": "Add memo"
},
@ -185,15 +191,18 @@
"advancedPriorityFeeToolTip": {
"message": "Priority fee (aka “miner tip”) goes directly to miners and incentivizes them to prioritize your transaction."
},
"advancedSettingsDescription": {
"message": "Access developer features, download State Logs, Reset Account, setup test networks and custom RPC"
},
"affirmAgree": {
"message": "I Agree"
},
"aggregatorFeeCost": {
"message": "Aggregator network fee"
},
"airgapVault": {
"message": "AirGap Vault"
},
"airgapVaultTutorial": {
"message": " (Tutorials)"
},
"alertDisableTooltip": {
"message": "This can be changed in \"Settings > Alerts\""
},
@ -212,9 +221,6 @@
"alerts": {
"message": "Alerts"
},
"alertsSettingsDescription": {
"message": "Enable or disable each alert"
},
"allowExternalExtensionTo": {
"message": "Allow this external extension to:"
},
@ -257,6 +263,9 @@
"approve": {
"message": "Approve spend limit"
},
"approveAndInstall": {
"message": "Approve & Install"
},
"approveButtonText": {
"message": "Approve"
},
@ -270,6 +279,12 @@
"approvedAmountWithColon": {
"message": "Approved amount:"
},
"areYouDeveloper": {
"message": "Are you a developer?"
},
"areYouSure": {
"message": "Are you sure?"
},
"asset": {
"message": "Asset"
},
@ -371,8 +386,8 @@
"message": "View account at $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Use Blockies Identicon"
"blockies": {
"message": "Blockies"
},
"browserNotSupported": {
"message": "Your Browser is not supported..."
@ -397,6 +412,13 @@
"message": "Transak supports debit card and bank transfers (depending on location) in 59+ countries. $1 deposits into your MetaMask account.",
"description": "$1 represents the cypto symbol to be purchased"
},
"buyEth": {
"message": "Buy ETH"
},
"buyOther": {
"message": "Buy $1 or deposit from another account.",
"description": "$1 is a token symbol"
},
"buyWithWyre": {
"message": "Buy ETH with Wyre"
},
@ -429,6 +451,9 @@
"message": "To $1 a transaction the gas fee must be increased by at least 10% for it to be recognized by the network.",
"description": "$1 is string 'cancel' or 'speed up'"
},
"cancelSwap": {
"message": "Cancel swap"
},
"cancellationGasFee": {
"message": "Cancellation Gas Fee"
},
@ -444,6 +469,10 @@
"chainIdExistsErrorMsg": {
"message": "This Chain ID is currently used by the $1 network."
},
"chainListReturnedDifferentTickerSymbol": {
"message": "The network with chain ID $1 may use a different currency symbol ($2) than the one you have entered. Please verify before continuing.",
"description": "$1 is the chain id currently entered in the network form and $2 is the return value of nativeCurrency.symbol from chainlist.network"
},
"chromeRequiredForHardwareWallets": {
"message": "You need to use MetaMask on Google Chrome in order to connect to your Hardware Wallet."
},
@ -457,6 +486,9 @@
"close": {
"message": "Close"
},
"collectibleAddFailedMessage": {
"message": "NFT can’t be added as the ownership details do not match. Make sure you have entered correct information."
},
"collectibleAddressError": {
"message": "This token is an NFT. Add on the $1",
"description": "$1 is a clickable link with text defined by the 'importNFTPage' key"
@ -544,6 +576,10 @@
"message": "$1 is not connected to any sites.",
"description": "$1 is the account name"
},
"connectedSnapSites": {
"message": "$1 snap is connected to these sites. They have access to the permissions listed above.",
"description": "$1 represents the name of the snap"
},
"connecting": {
"message": "Connecting..."
},
@ -571,9 +607,6 @@
"contacts": {
"message": "Contacts"
},
"contactsSettingsDescription": {
"message": "Add, edit, remove, and manage your contacts"
},
"continue": {
"message": "Continue"
},
@ -680,12 +713,18 @@
"customGasSubTitle": {
"message": "Increasing fee may decrease processing times, but it is not guaranteed."
},
"customNetworks": {
"message": "Custom networks"
},
"customSpendLimit": {
"message": "Custom Spend Limit"
},
"customToken": {
"message": "Custom Token"
},
"customerSupport": {
"message": "customer support"
},
"dappSuggested": {
"message": "Site suggested"
},
@ -974,6 +1013,9 @@
"enableOpenSeaAPIDescription": {
"message": "Use OpenSea's API to fetch NFT data. NFT auto-detection relies on OpenSea's API, and will not be available when this is turned off."
},
"enableSmartTransactions": {
"message": "Enable Smart Transactions"
},
"enableToken": {
"message": "enable $1",
"description": "$1 is a token symbol, e.g. ETH"
@ -1017,7 +1059,7 @@
"message": "Learn more."
},
"endpointReturnedDifferentChainId": {
"message": "The endpoint returned a different chain ID: $1",
"message": "The RPC URL you have entered returned a different chain ID ($1). Please update the Chain ID to match the RPC URL of the network you are trying to add.",
"description": "$1 is the return value of eth_chainId from an RPC endpoint"
},
"ensIllegalCharacter": {
@ -1085,10 +1127,6 @@
"ethGasPriceFetchWarning": {
"message": "Backup gas price is provided as the main gas estimation service is unavailable right now."
},
"eth_accounts": {
"message": "See address, account balance, activity and suggest transactions to approve",
"description": "The description for the `eth_accounts` permission"
},
"ethereumPublicAddress": {
"message": "Ethereum Public Address"
},
@ -1101,15 +1139,15 @@
"etherscanViewOn": {
"message": "View on Etherscan"
},
"expandExperience": {
"message": "Expand your web3 experience"
},
"expandView": {
"message": "Expand view"
},
"experimental": {
"message": "Experimental"
},
"experimentalSettingsDescription": {
"message": "Token detection & more"
},
"exportPrivateKey": {
"message": "Export Private Key"
},
@ -1126,6 +1164,9 @@
"failedToFetchChainId": {
"message": "Could not fetch chain ID. Is your RPC URL correct?"
},
"failedToFetchTickerSymbolData": {
"message": "Ticker symbol verification data is currently unavailable, make sure that the symbol you have entered is correct. It will impact the conversion rates that you see for this network"
},
"failureMessage": {
"message": "Something went wrong, and we were unable to complete the action"
},
@ -1190,6 +1231,9 @@
"forgetDevice": {
"message": "Forget this device"
},
"forgotPassword": {
"message": "Forgot password?"
},
"from": {
"message": "From"
},
@ -1302,9 +1346,6 @@
"general": {
"message": "General"
},
"generalSettingsDescription": {
"message": "Currency conversion, primary currency, language, blockies identicon"
},
"getEther": {
"message": "Get Ether"
},
@ -1321,6 +1362,9 @@
"goerli": {
"message": "Goerli Test Network"
},
"gotIt": {
"message": "Got it!"
},
"grantedToWithColon": {
"message": "Granted to:"
},
@ -1359,6 +1403,9 @@
"hide": {
"message": "Hide"
},
"hideToken": {
"message": "Hide token"
},
"hideTokenPrompt": {
"message": "Hide Token?"
},
@ -1392,19 +1439,12 @@
"importAccountError": {
"message": "Error importing account."
},
"importAccountLinkText": {
"message": "import using Secret Recovery Phrase"
},
"importAccountMsg": {
"message": "Imported accounts will not be associated with your originally created MetaMask account Secret Recovery Phrase. Learn more about imported accounts"
},
"importAccountSeedPhrase": {
"message": "Import a wallet with Secret Recovery Phrase"
},
"importAccountText": {
"message": "or $1",
"description": "$1 represents the text from `importAccountLinkText` as a link"
},
"importExistingWalletDescription": {
"message": "Enter your Secret Recovery Phrase (aka Seed Phrase) that you were given when you created your wallet. $1",
"description": "$1 is the words 'Learn More' from key 'learnMore', separated here so that it can be added as a link"
@ -1462,6 +1502,10 @@
"insufficientBalance": {
"message": "Insufficient balance."
},
"insufficientCurrency": {
"message": "You do not have enough $1 in your account to pay for transaction fees on $2 network.",
"description": "$1 is currency, $2 is network"
},
"insufficientFunds": {
"message": "Insufficient funds."
},
@ -1530,6 +1574,12 @@
"ipfsGatewayDescription": {
"message": "Enter the URL of the IPFS CID gateway to use for ENS content resolution."
},
"jazzAndBlockies": {
"message": "Jazzicons and Blockies are two different styles of unique icons that help you identify an account at a glance."
},
"jazzicons": {
"message": "Jazzicons"
},
"jsDeliver": {
"message": "jsDeliver"
},
@ -1655,6 +1705,10 @@
"lockTimeTooGreat": {
"message": "Lock time is too great"
},
"logo": {
"message": "$1 logo",
"description": "$1 is the name of the ticker"
},
"low": {
"message": "Low"
},
@ -1681,6 +1735,12 @@
"message": "Make sure no one is watching your screen",
"description": "Warning to users to be care while creating and saving their new Secret Recovery Phrase"
},
"malformedData": {
"message": "Malformed data"
},
"manageSnaps": {
"message": "Manage your installed Snaps"
},
"max": {
"message": "Max"
},
@ -1787,6 +1847,12 @@
"missingNFT": {
"message": "Don't see your NFT?"
},
"missingSetting": {
"message": "Can't find a setting?"
},
"missingSettingRequest": {
"message": "Request here"
},
"missingToken": {
"message": "Don't see your token?"
},
@ -1826,6 +1892,9 @@
"negativeETH": {
"message": "Can not send negative amounts of ETH."
},
"network": {
"message": "Network:"
},
"networkDetails": {
"message": "Network Details"
},
@ -1859,9 +1928,6 @@
"networkSettingsChainIdDescription": {
"message": "The chain ID is used for signing transactions. It must match the chain ID returned by the network. You can enter a decimal or '0x'-prefixed hexadecimal number, but we will display the number in decimal."
},
"networkSettingsDescription": {
"message": "Add and edit custom RPC networks"
},
"networkStatus": {
"message": "Network status"
},
@ -1898,9 +1964,6 @@
"message": "Account $1",
"description": "Default name of next account to be created on create account screen"
},
"newCollectibleAddFailed": {
"message": "Collectible was not added because: $1"
},
"newCollectibleAddedMessage": {
"message": "Collectible was successfully added!"
},
@ -1968,9 +2031,15 @@
"noNFTs": {
"message": "No NFTs yet"
},
"noSnaps": {
"message": "No Snaps installed"
},
"noThanks": {
"message": "No Thanks"
},
"noThanksVariant2": {
"message": "No, thanks."
},
"noTransactions": {
"message": "You have no transactions"
},
@ -2165,10 +2234,16 @@
"onlyConnectTrust": {
"message": "Only connect with sites you trust."
},
"onlyInteractWith": {
"message": "Only interact with entities you trust."
},
"openFullScreenForLedgerWebHid": {
"message": "Open MetaMask in full screen to connect your ledger via WebHID.",
"description": "Shown to the user on the confirm screen when they are viewing MetaMask in a popup window but need to connect their ledger via webhid."
},
"openSourceCode": {
"message": "Check the source code"
},
"optional": {
"message": "Optional"
},
@ -2178,6 +2253,9 @@
"or": {
"message": "or"
},
"orDeposit": {
"message": "or deposit from another account."
},
"origin": {
"message": "Origin"
},
@ -2225,6 +2303,37 @@
"permissionRequest": {
"message": "Permission request"
},
"permissionRequestCapitalized": {
"message": "Permission Request"
},
"permission_accessNetwork": {
"message": "Access the Internet.",
"description": "The description of the `endowment:network-access` permission."
},
"permission_accessSnap": {
"message": "Connect to the $1 Snap.",
"description": "The description for the `wallet_snap_*` permission. $1 is the name of the Snap."
},
"permission_customConfirmation": {
"message": "Display a confirmation in MetaMask.",
"description": "The description for the `snap_confirm` permission"
},
"permission_ethereumAccounts": {
"message": "See address, account balance, activity and suggest transactions to approve",
"description": "The description for the `eth_accounts` permission"
},
"permission_manageBip44Keys": {
"message": "Control your \"$1\" accounts and assets.",
"description": "The description for the `snap_getBip44Entropy_*` permission. $1 is the name of a protocol, e.g. 'Filecoin'."
},
"permission_manageState": {
"message": "Store and manage its data on your device.",
"description": "The description for the `snap_manageState` permission"
},
"permission_unknown": {
"message": "Unknown permission: $1",
"description": "$1 is the name of a requested permission that is not recognized."
},
"permissions": {
"message": "Permissions"
},
@ -2239,6 +2348,9 @@
"message": "Preferred Ledger Connection Type",
"description": "A header for a dropdown in the advanced section of settings. Appears above the ledgerConnectionPreferenceDescription message"
},
"preparingSwap": {
"message": "Preparing swap..."
},
"prev": {
"message": "Prev"
},
@ -2285,6 +2397,12 @@
"queued": {
"message": "Queued"
},
"reAddAccounts": {
"message": "re-add any other accounts"
},
"reAdded": {
"message": "re-added"
},
"readdToken": {
"message": "You can add this token back in the future by going to “Import token” in your accounts options menu."
},
@ -2360,6 +2478,12 @@
"removeNFT": {
"message": "Remove NFT"
},
"removeSnap": {
"message": "Remove Snap"
},
"removeSnapDescription": {
"message": "This action will delete the snap, its data and revoke your given permissions."
},
"replace": {
"message": "replace"
},
@ -2378,12 +2502,21 @@
"resetAccountDescription": {
"message": "Resetting your account will clear your transaction history. This will not change the balances in your accounts or require you to re-enter your Secret Recovery Phrase."
},
"resetWallet": {
"message": "Reset Wallet"
},
"resetWalletSubHeader": {
"message": "MetaMask does not keep a copy of your password. If you’re having trouble unlocking your account, you will need to reset your wallet. You can do this by providing the Secret Recovery Phrase you used when you set up your wallet."
},
"resetWalletUsingSRP": {
"message": "This action will delete your current wallet and Secret Recovery Phrase from this device, along with the list of accounts you’ve curated. After resetting with a Secret Recovery Phrase, you’ll see a list of accounts based on the Secret Recovery Phrase you use to reset. This new list will automatically include accounts that have a balance. You’ll also be able to $1 created previously. Custom accounts that you’ve imported will need to be $2, and any custom tokens you’ve added to an account will need to be $3 as well."
},
"resetWalletWarning": {
"message": "Make sure you’re using the correct Secret Recovery Phrase before proceeding. You will not be able to undo this."
},
"restore": {
"message": "Restore"
},
"restoreAccountWithSeed": {
"message": "Restore your Account with Secret Recovery Phrase"
},
"restoreWalletPreferences": {
"message": "A backup of your data from $1 has been found. Would you like to restore your wallet preferences?",
"description": "$1 is the date at which the data was backed up"
@ -2439,6 +2572,9 @@
"searchResults": {
"message": "Search Results"
},
"searchSettings": {
"message": "Search in settings"
},
"searchTokens": {
"message": "Search Tokens"
},
@ -2451,9 +2587,6 @@
"secretPhrase": {
"message": "Only the first account on this wallet will auto load. After completing this process, to add additional accounts, click the drop down menu, then select Create Account."
},
"secretPhraseWarning": {
"message": "If you restore using another Secret Recovery Phrase, your current wallet, accounts and assets will be removed from this app permanently. This action cannot be undone."
},
"secretRecoveryPhrase": {
"message": "Secret Recovery Phrase"
},
@ -2463,9 +2596,6 @@
"securityAndPrivacy": {
"message": "Security & Privacy"
},
"securitySettingsDescription": {
"message": "Privacy settings and wallet Secret Recovery Phrase"
},
"seedPhraseConfirm": {
"message": "Confirm Secret Recovery Phrase"
},
@ -2479,22 +2609,22 @@
"message": "Secure my wallet (recommended)"
},
"seedPhraseIntroSidebarBulletFour": {
"message": "Write down and store in multiple secret places."
"message": "Write down and store in multiple secret places"
},
"seedPhraseIntroSidebarBulletOne": {
"message": "Save in a password manager"
},
"seedPhraseIntroSidebarBulletThree": {
"message": "Store in a safe-deposit box."
"message": "Store in a safe deposit box"
},
"seedPhraseIntroSidebarBulletTwo": {
"message": "Store in a bank vault."
"message": "Store in a bank vault"
},
"seedPhraseIntroSidebarCopyOne": {
"message": "Your Secret Recovery Phrase is a 12-word phrase that is the “master key” to your wallet and your funds"
},
"seedPhraseIntroSidebarCopyThree": {
"message": "If someone asks for your recovery phrase they are likely trying to scam you and steal your wallet funds"
"message": "If someone asks for your recovery phrase they are likely trying to scam you and steal your wallet funds."
},
"seedPhraseIntroSidebarCopyTwo": {
"message": "Never, ever share your Secret Recovery Phrase, not even with MetaMask!"
@ -2585,9 +2715,6 @@
"message": "Sending $1",
"description": "$1 represents the native currency symbol for the current network (e.g. ETH or BNB)"
},
"separateEachWord": {
"message": "Separate each word with a single space"
},
"setAdvancedPrivacySettings": {
"message": "Set advanced privacy settings"
},
@ -2597,6 +2724,9 @@
"settings": {
"message": "Settings"
},
"settingsSearchMatchingNotFound": {
"message": "No matching results found"
},
"show": {
"message": "Show"
},
@ -2681,6 +2811,42 @@
"slow": {
"message": "Slow"
},
"smartTransaction": {
"message": "Smart transaction"
},
"snapAccess": {
"message": "$1 snap has access to:",
"description": "$1 represents the name of the snap"
},
"snapError": {
"message": "Snap Error: '$1'. Error Code: '$2'",
"description": "This is shown when a snap encounters an error. $1 is the error message from the snap, and $2 is the error code."
},
"snapInstall": {
"message": "Install Snap"
},
"snapInstallWarningCheck": {
"message": "To confirm you understand, check all."
},
"snapInstallWarningKeyAccess": {
"message": "You are granting key access to the snap \"$1\". This is irrevocable and grants \"$1\" control of your accounts and assets. Make sure you trust \"$1\" before proceeding.",
"description": "The parameter is the name of the snap"
},
"snapRequestsPermission": {
"message": "This snap is requesting the following permissions:"
},
"snaps": {
"message": "Snaps"
},
"snapsSettingsDescription": {
"message": "Manage your Snaps"
},
"snapsStatus": {
"message": "Snap status is dependent on activity."
},
"snapsToggle": {
"message": "A snap will only run if it is enabled"
},
"somethingWentWrong": {
"message": "Oops! Something went wrong."
},
@ -2742,6 +2908,9 @@
"stateLogsDescription": {
"message": "State logs contain your public account addresses and sent transactions."
},
"status": {
"message": "Status"
},
"statusConnected": {
"message": "Connected"
},
@ -2779,6 +2948,86 @@
"storePhrase": {
"message": "Store this phrase in a password manager like 1Password."
},
"stxAreHere": {
"message": "Smart Transactions are here!"
},
"stxBenefit1": {
"message": "Minimize transaction costs"
},
"stxBenefit2": {
"message": "Reduce transaction failures"
},
"stxBenefit3": {
"message": "Eliminate stuck transactions"
},
"stxBenefit4": {
"message": "Prevent front-running"
},
"stxCancelled": {
"message": "Swap would have failed"
},
"stxCancelledDescription": {
"message": "Your transaction would have failed and was canceled to protect you from paying unnecessary gas fees."
},
"stxCancelledSubDescription": {
"message": "Try your swap again. We’ll be here to protect you against similar risks next time."
},
"stxDescription": {
"message": "MetaMask Swaps just got a whole lot smarter! Enabling Smart Transactions will allow MetaMask to programmatically optimize your Swap to help:"
},
"stxFailure": {
"message": "Swap failed"
},
"stxFailureDescription": {
"message": "Sudden market changes can cause failures. If the problem persists, please reach out to $1.",
"description": "This message is shown to a user if their swap fails. The $1 will be replaced by support.metamask.io"
},
"stxFallbackToNormal": {
"message": "You can still swap using the normal method or wait for cheaper gas fees and less failures with smart transactions."
},
"stxPendingFinalizing": {
"message": "Finalizing..."
},
"stxPendingOptimizingGas": {
"message": "Optimizing gas..."
},
"stxPendingPrivatelySubmitting": {
"message": "Privately submitting the Swap..."
},
"stxSubDescription": {
"message": "* Smart Transactions will attempt to submit your transaction privately, multiple times. If all attempts fail, the transaction will be broadcast publicly to ensure your Swap successfully goes through."
},
"stxSuccess": {
"message": "Swap complete!"
},
"stxSuccessDescription": {
"message": "Your $1 is now available.",
"description": "$1 is a token symbol, e.g. ETH"
},
"stxTooltip": {
"message": "Simulate transactions before submitting to decrease transaction costs and reduce failures."
},
"stxTryRegular": {
"message": "Try a regular swap."
},
"stxUnavailable": {
"message": "Smart transactions temporarily unavailable"
},
"stxUnknown": {
"message": "Status unknown"
},
"stxUnknownDescription": {
"message": "A transaction has been successful but we’re unsure what it is. This may be due to submitting another transaction while this swap was processing."
},
"stxUserCancelled": {
"message": "Swap canceled"
},
"stxUserCancelledDescription": {
"message": "Your transaction has been canceled and you did not pay any unnecessary gas fees."
},
"stxYouCanOptOut": {
"message": "You can opt-out in advanced settings any time."
},
"submit": {
"message": "Submit"
},
@ -2818,6 +3067,10 @@
"message": "You need $1 more $2 to complete this swap",
"description": "Tells the user how many more of a given token they need for a specific swap. $1 is an amount of tokens and $2 is the token symbol."
},
"swapApproveNeedMoreTokensSmartTransactions": {
"message": "You need more $1 to complete this swap using smart transactions.",
"description": "Tells the user that they need more of a certain token ($1) before they can complete the swap via smart transactions."
},
"swapBestOfNQuotes": {
"message": "Best of $1 quotes.",
"description": "$1 is the number of quotes that the user can select from when opening the list of quotes on the 'view quote' screen"
@ -2826,6 +3079,10 @@
"message": "No tokens available matching $1",
"description": "Tells the user that a given search string does not match any tokens in our token lists. $1 can be any string of text"
},
"swapCompleteIn": {
"message": "Swap complete in <",
"description": "'<' means 'less than', e.g. Swap complete in < 2:59"
},
"swapConfirmWithHwWallet": {
"message": "Confirm with your hardware wallet"
},
@ -2868,6 +3125,10 @@
"swapFailedErrorTitle": {
"message": "Swap failed"
},
"swapFetchingQuoteNofN": {
"message": "Fetching quote $1 of $2",
"description": "A count of possible quotes shown to the user while they are waiting for quotes to be fetched. $1 is the number of quotes already loaded, and $2 is the total number of resources that we check for quotes. Keep in mind that not all resources will have a quote for a particular swap."
},
"swapFetchingQuotes": {
"message": "Fetching quotes"
},
@ -2955,10 +3216,6 @@
"swapQuoteDetailsSlippageInfo": {
"message": "If the price changes between the time your order is placed and confirmed it’s called \"slippage\". Your Swap will automatically cancel if slippage exceeds your \"slippage tolerance\" setting."
},
"swapQuoteNofN": {
"message": "Quote $1 of $2",
"description": "A count of loaded quotes shown to the user while they are waiting for quotes to be fetched. $1 is the number of quotes already loaded, and $2 is the total number of quotes to load."
},
"swapQuoteSource": {
"message": "Quote source"
},
@ -3201,6 +3458,12 @@
"tokenDecimalFetchFailed": {
"message": "Token decimal required."
},
"tokenDecimalTitle": {
"message": "Token Decimal:"
},
"tokenDetails": {
"message": "Token details"
},
"tokenDetectionAnnouncement": {
"message": "New! Improved token detection is available on Ethereum Mainnet as an experimental feature. $1"
},
@ -3506,9 +3769,6 @@
"walletCreationSuccessTitle": {
"message": "Wallet creation successful"
},
"walletSeedRestore": {
"message": "Wallet Secret Recovery Phrase"
},
"web3ShimUsageNotification": {
"message": "We noticed that the current website tried to use the removed window.web3 API. If the site appears to be broken, please click $1 for more information.",
"description": "$1 is a clickable link."

@ -2,9 +2,6 @@
"about": {
"message": "Acerca de"
},
"aboutSettingsDescription": {
"message": "Versión, centro de soporte técnico e información de contacto"
},
"acceleratingATransaction": {
"message": "* Usar un precio de gas más alto para acelerar una transacción aumenta las posibilidades de un procesamiento más rápido en la red, pero esto no siempre se garantiza."
},
@ -97,9 +94,6 @@
"advancedOptions": {
"message": "Opciones avanzadas"
},
"advancedSettingsDescription": {
"message": "Acceder a recursos para desarrolladores, descargar registros de estado, restablecer cuenta, configurar redes de prueba y RPC personalizada"
},
"affirmAgree": {
"message": "Acepto"
},
@ -124,9 +118,6 @@
"alerts": {
"message": "Alertas"
},
"alertsSettingsDescription": {
"message": "Habilitar o deshabilitar cada alerta"
},
"allowExternalExtensionTo": {
"message": "Permitir que esta extensión externa haga lo siguiente:"
},
@ -242,9 +233,6 @@
"message": "Ver cuenta en $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Usar Blockies Identicon"
},
"browserNotSupported": {
"message": "El explorador no es compatible…"
},
@ -397,9 +385,6 @@
"contacts": {
"message": "Contactos"
},
"contactsSettingsDescription": {
"message": "Agregar, editar, quitar y administrar sus contactos"
},
"continue": {
"message": "Continuar"
},
@ -677,10 +662,6 @@
"ethGasPriceFetchWarning": {
"message": "Se muestra el precio del gas de respaldo, ya que el servicio para calcular el precio del gas principal no se encuentra disponible en este momento."
},
"eth_accounts": {
"message": "Ver las direcciones de las cuentas permitidas (requerido)",
"description": "The description for the `eth_accounts` permission"
},
"ethereumPublicAddress": {
"message": "Dirección pública de Ethereum"
},
@ -787,9 +768,6 @@
"message": "Política de privacidad aquí",
"description": "this translation is intended to be exclusively used as the replacement for the $1 in the gdprMessage translation"
},
"generalSettingsDescription": {
"message": "Conversión de moneda, moneda principal, idioma, Blockies Identicon"
},
"getEther": {
"message": "Obtener ether"
},
@ -848,19 +826,12 @@
"importAccount": {
"message": "Importar cuenta"
},
"importAccountLinkText": {
"message": "importar con la frase secreta de recuperación"
},
"importAccountMsg": {
"message": " Las cuentas importadas no se asociarán con la frase secreta de recuperación de la cuenta original de MetaMask. Más información sobre las cuentas importadas "
},
"importAccountSeedPhrase": {
"message": "Importar una cuenta con la frase secreta de recuperación"
},
"importAccountText": {
"message": "o $1",
"description": "$1 represents the text from `importAccountLinkText` as a link"
},
"importTokenQuestion": {
"message": "¿Desea importar el token?"
},
@ -1120,9 +1091,6 @@
"networkSettingsChainIdDescription": {
"message": "El id. de la cadena se usa para firmar transacciones. Debe coincidir con el id. de la cadena que devuelve la red. Puede escribir un número decimal o un número hexadecimal con el prefijo “0x”, pero el número se mostrará en decimal."
},
"networkSettingsDescription": {
"message": "Agregar y editar redes RPC personalizadas"
},
"networkURL": {
"message": "Dirección URL de la red"
},
@ -1314,6 +1282,10 @@
"pending": {
"message": "Pendiente"
},
"permission_ethereumAccounts": {
"message": "Ver las direcciones de las cuentas permitidas (requerido)",
"description": "The description for the `eth_accounts` permission"
},
"permissions": {
"message": "Permisos"
},
@ -1442,9 +1414,6 @@
"restore": {
"message": "Restaurar"
},
"restoreAccountWithSeed": {
"message": "Restaurar la cuenta con la frase secreta de recuperación"
},
"restoreWalletPreferences": {
"message": "Se encontró una copia de seguridad de los datos de $1. ¿Desea restaurar las preferencias de cartera?",
"description": "$1 is the date at which the data was backed up"
@ -1515,9 +1484,6 @@
"securityAndPrivacy": {
"message": "Seguridad y privacidad"
},
"securitySettingsDescription": {
"message": "Configuración de privacidad y frase secreta de recuperación de la cartera"
},
"seedPhraseIntroSidebarBulletFour": {
"message": "Escríbala y guárdela en varios lugares secretos."
},
@ -1606,9 +1572,6 @@
"sendTokens": {
"message": "Enviar tokens"
},
"separateEachWord": {
"message": "Separar cada palabra con un solo espacio"
},
"settings": {
"message": "Configuración"
},
@ -1883,10 +1846,6 @@
"swapQuoteDetailsSlippageInfo": {
"message": "Si el precio cambia entre el momento en que hace el pedido y cuando se confirma, se denomina \"desfase\". El canje se cancelará automáticamente si el desfase supera lo establecido en la configuración \"tolerancia de desfase\"."
},
"swapQuoteNofN": {
"message": "Cotización $1 de $2",
"description": "A count of loaded quotes shown to the user while they are waiting for quotes to be fetched. $1 is the number of quotes already loaded, and $2 is the total number of quotes to load."
},
"swapQuoteSource": {
"message": "Fuente de la cotización"
},
@ -2257,9 +2216,6 @@
"walletConnectionGuide": {
"message": "nuestra guía de conexión de la cartera de hardware"
},
"walletSeedRestore": {
"message": "Frase secreta de recuperación de la cartera"
},
"web3ShimUsageNotification": {
"message": "Parece que el sitio web actual intentó utilizar la API de window.web3 que se eliminó. Si el sitio no funciona, haga clic en $1 para obtener más información.",
"description": "$1 is a clickable link."

File diff suppressed because it is too large Load Diff

@ -8,9 +8,6 @@
"about": {
"message": "Teave"
},
"aboutSettingsDescription": {
"message": "Versioon, tugikeskus ja kontaktteave"
},
"acceleratingATransaction": {
"message": "* Tehingu kiirendamine kõrgemate gaasihindadega suurendab võimalust kiiremaks võrgus töötlemiseks, kuid see ei ole alati tagatud."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Täpsemad suvandid"
},
"advancedSettingsDescription": {
"message": "Juurdepääs arendaja funktsioonidele, olekulogide allalaadimine, konto lähtestamine, testvõrkude ja kohandatud RPC-de seadistamine"
},
"amount": {
"message": "Summa"
},
@ -145,9 +139,6 @@
"message": "Vaata kontot $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Kasuta Blockies Identiconi"
},
"browserNotSupported": {
"message": "Teie lehitsejat ei toetata..."
},
@ -416,9 +407,6 @@
"general": {
"message": "Üldine teave"
},
"generalSettingsDescription": {
"message": "Valuutavahetus, põhivaluuta, keel, plokkidest identicon"
},
"getEther": {
"message": "Hankige eetrit"
},
@ -587,9 +575,6 @@
"networkName": {
"message": "Võrgu nimi"
},
"networkSettingsDescription": {
"message": "Kohandatud RPC-võrkude lisamine ja muutmine"
},
"networks": {
"message": "Võrgud"
},
@ -770,9 +755,6 @@
"restore": {
"message": "Taasta"
},
"restoreAccountWithSeed": {
"message": "Taastage konto seemnefraasi abil"
},
"revealSeedWords": {
"message": "Kuva seemnesõnu"
},
@ -824,9 +806,6 @@
"securityAndPrivacy": {
"message": "Turvalisus ja privaatsus"
},
"securitySettingsDescription": {
"message": "Privaatsusseaded ja rahakoti seemnefraas"
},
"seedPhrasePlaceholder": {
"message": "Eraldage iga sõna ühe tühikuga"
},
@ -860,9 +839,6 @@
"sendTokens": {
"message": "Saada lube"
},
"separateEachWord": {
"message": "Eraldage iga sõna ühe tühikuga"
},
"settings": {
"message": "Seaded"
},

@ -8,9 +8,6 @@
"about": {
"message": "درباره"
},
"aboutSettingsDescription": {
"message": "نسخه، مرکز پشتیبانی و معلومات تماس."
},
"acceleratingATransaction": {
"message": "* تسریع یک معامله با استفاده از قیمت بالاتر گاز، فرصت تسریع پروسس آنرا توسط شبکه افزایش میدهد اما همیشه این تضمین نمیشود."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "گزینه های پیشرفته"
},
"advancedSettingsDescription": {
"message": "مشخصات توسعه دهنده دسترسی، دفترچه ثبت وضعیت دانلود، دوباره سازی حساب، شبکه های آزمایشی تنظیمات و RPC معمول."
},
"amount": {
"message": "مبلغ"
},
@ -145,9 +139,6 @@
"message": "مشاهده حساب در 1$1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "استفاده شناسا بلوک ها"
},
"browserNotSupported": {
"message": "مرورگر شما پشتیبانی نمیشود"
},
@ -420,9 +411,6 @@
"general": {
"message": "عمومی"
},
"generalSettingsDescription": {
"message": "تبادل واحد پول، واحد پول اصلی، زبان، شناسا های بلوکی"
},
"getEther": {
"message": "اتر را بگیرید"
},
@ -597,9 +585,6 @@
"networkName": {
"message": "نام شبکه"
},
"networkSettingsDescription": {
"message": "اضافه سازی و ویرایش شبکه های دلخواه PRC"
},
"networks": {
"message": "شبکه ها"
},
@ -780,9 +765,6 @@
"restore": {
"message": "بازیابی"
},
"restoreAccountWithSeed": {
"message": "حساب تان را با عبارت بازیاب، بازیابی کنید"
},
"revealSeedWords": {
"message": "کلمات بازیاب را آشکار کنید"
},
@ -834,9 +816,6 @@
"securityAndPrivacy": {
"message": "امنیت و حریم خصوصی"
},
"securitySettingsDescription": {
"message": "تنظیمات حریم خصوصی و عبارت بازیاب کیف"
},
"seedPhrasePlaceholder": {
"message": "هر کلمه را با یک فاصله واحد جدا سازید"
},
@ -870,9 +849,6 @@
"sendTokens": {
"message": "رمزیاب ها را ارسال کنید"
},
"separateEachWord": {
"message": "هر کلمه را با یک فاصله واحد جدا سازید"
},
"settings": {
"message": "تنظیمات"
},

@ -8,9 +8,6 @@
"about": {
"message": "Tietoja asetuksista"
},
"aboutSettingsDescription": {
"message": "Versio, tukikeskus ja yhteystiedot"
},
"acceleratingATransaction": {
"message": "* Tapahtuman nopeuttaminen käyttämällä korkeampaa gas-hintaa parantaa mahdollisuutta, että verkko käsittelee sen nopeammin, mutta tämä ei ole aina taattua."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Tarkemmat vaihtoehdot"
},
"advancedSettingsDescription": {
"message": "Käytä kehittäjän ominaisuuksia, lataa tilalokeja, palauta tilit, asenna testiverkostoja ja muokattavia RPC:itä"
},
"amount": {
"message": "Summa"
},
@ -145,9 +139,6 @@
"message": "Näytä tili kohteessa $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Käytä Blockies Identiconia"
},
"browserNotSupported": {
"message": "Selaintasi ei tueta..."
},
@ -420,9 +411,6 @@
"general": {
"message": "Yleistä"
},
"generalSettingsDescription": {
"message": "Valuuttamuunnin, päävaluutta, kieli, blockies identicon"
},
"getEther": {
"message": "Hanki Etheriä"
},
@ -597,9 +585,6 @@
"networkName": {
"message": "Verkon nimi"
},
"networkSettingsDescription": {
"message": "Lisää ja muokkaa omia RPC-verkostojasi"
},
"networks": {
"message": "Verkot"
},
@ -777,9 +762,6 @@
"restore": {
"message": "Palauta"
},
"restoreAccountWithSeed": {
"message": "Palauta tilisi käyttäen salaustekstiä (seed phrase)"
},
"revealSeedWords": {
"message": "Paljasta salaussanat"
},
@ -831,9 +813,6 @@
"securityAndPrivacy": {
"message": "Turva & yksityisyys"
},
"securitySettingsDescription": {
"message": "Yksityisyysasetukset ja kukkaron salausteksti"
},
"seedPhrasePlaceholder": {
"message": "Erota kukin sana yhdellä välilyönnillä"
},
@ -867,9 +846,6 @@
"sendTokens": {
"message": "Lähetä tietueita"
},
"separateEachWord": {
"message": "Erottele sanat toisistaan yhdellä välilyönnillä"
},
"settings": {
"message": "Asetukset"
},

@ -8,9 +8,6 @@
"about": {
"message": "Tungkol sa"
},
"aboutSettingsDescription": {
"message": "Bersyon, support center, at impormasyon sa pakikipag-ugnayan"
},
"acceleratingATransaction": {
"message": "* Ang pagpapabilis sa isang transaksyon sa pamamagitan ng paggamit ng mas mataas na presyo ng gas ay makakadagdag sa tsansa nitong maproseso ng network nang mas mabilis, pero hindi ito palaging garantisado."
},
@ -56,9 +53,6 @@
"advancedOptions": {
"message": "Mga Advanced na Opsyon"
},
"advancedSettingsDescription": {
"message": "I-access ang mga feature para sa mga developer, mag-download ng mga State Log, I-reset ang Account, mag-set up ng mga testnet at custom RPC"
},
"amount": {
"message": "Halaga"
},
@ -130,9 +124,6 @@
"message": "Tingnan ang account sa $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Gumamit ng Blockies Identicon"
},
"browserNotSupported": {
"message": "Hindi sinusuportahan ang iyong Browser..."
},
@ -389,9 +380,6 @@
"general": {
"message": "Pangkalahatan"
},
"generalSettingsDescription": {
"message": "Pagpapapalit ng currency, pangunahing currency, wika, blockies identicon"
},
"getEther": {
"message": "Kumuha ng Ether"
},
@ -535,9 +523,6 @@
"networkName": {
"message": "Pangalan ng Network"
},
"networkSettingsDescription": {
"message": "Magdagdag at mag-edit ng mga custom na RPC network"
},
"networks": {
"message": "Mga Network"
},
@ -704,9 +689,6 @@
"restore": {
"message": "Ipanumbalik"
},
"restoreAccountWithSeed": {
"message": "I-restore ang iyong Account gamit ang Seed Phrase"
},
"revealSeedWords": {
"message": "Ipakita ang Seed Words"
},
@ -752,9 +734,6 @@
"securityAndPrivacy": {
"message": "Seguridad at Privacy"
},
"securitySettingsDescription": {
"message": "Mga setting ng privacy at seed phrase ng wallet"
},
"seedPhrasePlaceholder": {
"message": "Paghiwa-hiwalayin ang bawat salita gamit ang isang space"
},
@ -788,9 +767,6 @@
"sendTokens": {
"message": "Magpadala ng Mga Token"
},
"separateEachWord": {
"message": "Paghiwa-hiwalayin ang bawat salita gamit ang isang space"
},
"settings": {
"message": "Mga Setting"
},

File diff suppressed because it is too large Load Diff

@ -8,9 +8,6 @@
"about": {
"message": "מידע כללי"
},
"aboutSettingsDescription": {
"message": "גרסה, מרכז תמיכה ופרטי יצירת קשר."
},
"acceleratingATransaction": {
"message": "* האצת עסקה על ידי שימוש במחיר דלק גבוה יותר מגדילה את סיכוייה לעבור עיבוד מהיר יותר ע\"י הרשת, אך זה לא תמיד מובטח."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "אפשרויות מתקדמות"
},
"advancedSettingsDescription": {
"message": "קבלת גישה לפיצ'רים למפתחים, הורדת יומני מצב, איפוס חשבון, הגדרת testnets ו-RPC מותאם אישית."
},
"amount": {
"message": "כמות"
},
@ -145,9 +139,6 @@
"message": "הצג חשבון ב- $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "השתמש ב- Blockies Identicon"
},
"browserNotSupported": {
"message": "הדפדפן שלך אינו נתמך..."
},
@ -420,9 +411,6 @@
"general": {
"message": "כללי"
},
"generalSettingsDescription": {
"message": "המרת מטבע, מטבע עיקרי, שפה, blockies identicon"
},
"getEther": {
"message": "השג/י את'ר"
},
@ -594,9 +582,6 @@
"networkName": {
"message": "שם רשת"
},
"networkSettingsDescription": {
"message": "הוסף וערוך רשתות RPC מותאמות אישית"
},
"networks": {
"message": "רשתות"
},
@ -777,9 +762,6 @@
"restore": {
"message": "שחזר"
},
"restoreAccountWithSeed": {
"message": "שחזר את חשבונך באמצעות צירוף הגרעין"
},
"revealSeedWords": {
"message": "גלה מילות Seed"
},
@ -828,9 +810,6 @@
"securityAndPrivacy": {
"message": "אבטחה ופרטיות"
},
"securitySettingsDescription": {
"message": "הגדרות פרטיות וצירוף הגרעין של הארנק"
},
"seedPhrasePlaceholder": {
"message": "הפרד/י בין המילים ברווח אחד"
},
@ -864,9 +843,6 @@
"sendTokens": {
"message": "שלח טוקנים"
},
"separateEachWord": {
"message": "יש להפריד כל מילה עם רווח יחיד"
},
"settings": {
"message": "הגדרות"
},

File diff suppressed because it is too large Load Diff

@ -45,9 +45,6 @@
"balance": {
"message": "उपलबध बस।"
},
"blockiesIdenticon": {
"message": "बज पहचन क उपयग कर"
},
"cancel": {
"message": "रदद कर"
},

@ -8,9 +8,6 @@
"about": {
"message": "O opcijama"
},
"aboutSettingsDescription": {
"message": "Inačica, centar za podršku i informacije za kontakt"
},
"acceleratingATransaction": {
"message": "* Ubrzavanjem se transakcije pomoću veće cijene goriva povećava šansa za bržu obradu mrežom, ali se uvijek ne jamči."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Napredne mogućnosti"
},
"advancedSettingsDescription": {
"message": "Pristup značajkama razvojnog inženjera, preuzimanje zapisnika stanja, poništavanje računa, postavljanje testnih mreža i prilagođeni RPC"
},
"amount": {
"message": "Iznos"
},
@ -145,9 +139,6 @@
"message": "Prikaži račun u $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Upotrijebi identifikaciju blokovima"
},
"browserNotSupported": {
"message": "Vaš se preglednik ne podržava..."
},
@ -416,9 +407,6 @@
"general": {
"message": "Opće"
},
"generalSettingsDescription": {
"message": "Konverzija valuta, glavna valuta, jezik, blockies identicon"
},
"getEther": {
"message": "Dohvati Ether"
},
@ -590,9 +578,6 @@
"networkName": {
"message": "Naziv mreže"
},
"networkSettingsDescription": {
"message": "Dodaj i uredi prilagođene mreže RPC"
},
"networks": {
"message": "Mreže"
},
@ -773,9 +758,6 @@
"restore": {
"message": "Vrati"
},
"restoreAccountWithSeed": {
"message": "Obnovite svoj račun početnom rečenicom"
},
"revealSeedWords": {
"message": "Otkrij početne riječi"
},
@ -827,9 +809,6 @@
"securityAndPrivacy": {
"message": "Sigurnost i privatnost"
},
"securitySettingsDescription": {
"message": "Postavke privatnosti i početna rečenica novčanika"
},
"seedPhrasePlaceholder": {
"message": "Odvojite pojedinačne riječi jednim razmakom"
},
@ -863,9 +842,6 @@
"sendTokens": {
"message": "Pošalji tokene"
},
"separateEachWord": {
"message": "Odvojite pojedinačne riječi jednim razmakom"
},
"settings": {
"message": "Postavke"
},

@ -78,9 +78,6 @@
"balance": {
"message": "Balans"
},
"blockiesIdenticon": {
"message": "Itilize Blockies Identicon"
},
"browserNotSupported": {
"message": "Navigatè ou a pa sipòte..."
},
@ -482,9 +479,6 @@
"restore": {
"message": "Retabli"
},
"restoreAccountWithSeed": {
"message": "Retabli kont ou avèk yo Seed Fraz"
},
"revealSeedWords": {
"message": "Revele Seed Mo Yo"
},
@ -545,9 +539,6 @@
"sendTokens": {
"message": "Voye Tokens"
},
"separateEachWord": {
"message": "Separe chak mo ak yon sèl espas"
},
"settings": {
"message": "Paramèt"
},

@ -8,9 +8,6 @@
"about": {
"message": "Névjegy"
},
"aboutSettingsDescription": {
"message": "Verzió, ügyfélszolgálat és elérhetőségek"
},
"acceleratingATransaction": {
"message": "* Ha szeretné felgyorsítani a tranzakciót azzal, hogy magasabb gázárat használ, az növeli a gyorsabb feldolgozás esélyét, de ez nem mindig garantált."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Haladó beállítások"
},
"advancedSettingsDescription": {
"message": "Hozzáférés fejlesztői funkciókhoz, állapotnaplók letöltése, fiók újraállítása, testnetek és egyéni RPC-k beállítása"
},
"amount": {
"message": "Összeg"
},
@ -145,9 +139,6 @@
"message": "Tekintse meg a fiókot a(z) $1-en",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Blockies identikon használata"
},
"browserNotSupported": {
"message": "Az ön böngészője nem támogatott..."
},
@ -416,9 +407,6 @@
"general": {
"message": "Általános"
},
"generalSettingsDescription": {
"message": "Pénznem átváltása, elsődleges pénznem, nyelv, blockies identikonok"
},
"getEther": {
"message": "Ether beszerzése"
},
@ -590,9 +578,6 @@
"networkName": {
"message": "Hálózat neve"
},
"networkSettingsDescription": {
"message": "Egyedi RPC-hálózatok hozzáadása és szerkesztése"
},
"networks": {
"message": "Hálózatok"
},
@ -773,9 +758,6 @@
"restore": {
"message": "Visszaállítás"
},
"restoreAccountWithSeed": {
"message": "Fiók helyreállítása a seed mondat segítségével"
},
"revealSeedWords": {
"message": "Seed szavak megjelenítése"
},
@ -827,9 +809,6 @@
"securityAndPrivacy": {
"message": "Biztonság és adatvédelem"
},
"securitySettingsDescription": {
"message": "Biztonsági beállítások és pénztárca kulcsszólánca"
},
"seedPhrasePlaceholder": {
"message": "A szavakat egy-egy szóközzel válassza el"
},
@ -863,9 +842,6 @@
"sendTokens": {
"message": "Token küldése"
},
"separateEachWord": {
"message": "Minden egyes szavat szóközzel válasszon el"
},
"settings": {
"message": "Beállítások"
},

File diff suppressed because it is too large Load Diff

@ -8,9 +8,6 @@
"about": {
"message": "Informazioni"
},
"aboutSettingsDescription": {
"message": "Versione, centro di supporto e contatti"
},
"acceleratingATransaction": {
"message": "* Accelerare una transazione usando un prezzo del gas maggiore aumenta la probabilità che la rete la elabori più velocemente, ma non è garantito."
},
@ -73,9 +70,6 @@
"advancedOptions": {
"message": "Opzioni Avanzate"
},
"advancedSettingsDescription": {
"message": "Accedi alle funzionalità sviluppatore, download dei log di Stato, Reset Account, imposta reti di test e RPC personalizzata"
},
"affirmAgree": {
"message": "Acconsento"
},
@ -100,9 +94,6 @@
"alerts": {
"message": "Avvisi"
},
"alertsSettingsDescription": {
"message": "Attiva o disattiva ogni avviso"
},
"allowExternalExtensionTo": {
"message": "Permetti a questa estensione di:"
},
@ -206,9 +197,6 @@
"message": "Visualizza account su $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Usa le icone Blockie"
},
"browserNotSupported": {
"message": "Il tuo Browser non è supportato..."
},
@ -340,9 +328,6 @@
"contacts": {
"message": "Contatti"
},
"contactsSettingsDescription": {
"message": "Aggiungi, modifica, rimuovi e gestisci i tuoi contatti"
},
"continue": {
"message": "Continua"
},
@ -577,10 +562,6 @@
"estimatedProcessingTimes": {
"message": "Tempi di Elaborazione Stimati"
},
"eth_accounts": {
"message": "Accesso agli indirizzi dei tuoi account autorizzati (richiesto)",
"description": "The description for the `eth_accounts` permission"
},
"ethereumPublicAddress": {
"message": "Indirizzo pubblico Ethereum "
},
@ -681,9 +662,6 @@
"general": {
"message": "Generale"
},
"generalSettingsDescription": {
"message": "Conversione moneta, moneta primaria, lingua, icone blockie"
},
"getEther": {
"message": "Ottieni Ether"
},
@ -952,9 +930,6 @@
"networkSettingsChainIdDescription": {
"message": "Il chain ID è usato per firmare le transazioni. Deve essere uguale al chain ID restituito dalla rete. Puoi inserire un numero intero o un numero esadecimale con prefisso '0x', ma mostreremo sempre un numero intero."
},
"networkSettingsDescription": {
"message": "Aggiungi e modifica reti RPC personalizzate"
},
"networks": {
"message": "Reti"
},
@ -1072,6 +1047,10 @@
"pending": {
"message": "in corso"
},
"permission_ethereumAccounts": {
"message": "Accesso agli indirizzi dei tuoi account autorizzati (richiesto)",
"description": "The description for the `eth_accounts` permission"
},
"permissions": {
"message": "Permessi"
},
@ -1173,9 +1152,6 @@
"restore": {
"message": "Ripristina"
},
"restoreAccountWithSeed": {
"message": "Ripristina Account con la Frase Seed"
},
"restoreWalletPreferences": {
"message": "È stato trovato un backup dei tuoi dati da $1. Vuoi ripristinare le preferenze del portafoglio?",
"description": "$1 is the date at which the data was backed up"
@ -1240,9 +1216,6 @@
"securityAndPrivacy": {
"message": "Sicurezza & Privacy"
},
"securitySettingsDescription": {
"message": "Impostazioni sulla Privacy e sulla frase seed del portafoglio"
},
"seedPhrasePlaceholder": {
"message": "Separa ogni parola con un singolo spazio"
},
@ -1292,9 +1265,6 @@
"sendTokens": {
"message": "Invia Tokens"
},
"separateEachWord": {
"message": "Separa ogni parola con un solo spazio"
},
"settings": {
"message": "Impostazioni"
},
@ -1506,10 +1476,6 @@
"swapQuoteDetailsSlippageInfo": {
"message": "Si chiama \"slippage\" la differenza tra il prezzo quando il tuo ordine viene inserito e quando viene confermato. Lo scambio sarà annullato automaticamente se lo slippage supera il \"massimo slippage\" impostato."
},
"swapQuoteNofN": {
"message": "Quotazione $1 di $2",
"description": "A count of loaded quotes shown to the user while they are waiting for quotes to be fetched. $1 is the number of quotes already loaded, and $2 is the total number of quotes to load."
},
"swapQuoteSource": {
"message": "Sorgente della quota"
},

File diff suppressed because it is too large Load Diff

@ -8,9 +8,6 @@
"about": {
"message": "ಕಿ"
},
"aboutSettingsDescription": {
"message": "ಆವಿ, ಬಬಲ ಕರ ಮತಪರಕ ಮಿಿ"
},
"acceleratingATransaction": {
"message": "* ಹಿನ ಗಯನ ಬಳಸಿ ವಹಿಟನಗಗಿದರಿದ ನವರಗವಿರಕಿವ ಸಯತಗಳನ ಅದಿತದ, ಆದರ ಇದಗಲ ಖಚಿತವಿಿಲ."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "ಸಿತ ಆಯಗಳ"
},
"advancedSettingsDescription": {
"message": "ಡವಲಪರಿಯಗಳನರವಿಿ, ರಯದ ಲಗಳನಿ, ಖಯನ ಮರಿಿ, ಟಿಿ ಮತ ಕಸಟಮ RPC"
},
"amount": {
"message": "ಮತ"
},
@ -145,9 +139,6 @@
"message": " $1 ನಲಿಯನಿಿ",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "ಬ ಐಡಿ ಬಳಸಿ"
},
"browserNotSupported": {
"message": "ನಿಮ ಬಸರಬಲಿಿಲ..."
},
@ -420,9 +411,6 @@
"general": {
"message": "ಸಯ"
},
"generalSettingsDescription": {
"message": "ಕರಿ ಪರಿವರತನ, ಪಥಮಿಕ ಕರಿ, ಭ, ನಿಧಗಳ ಗಿಿ"
},
"getEther": {
"message": "ಎಥರ ಪಡಿಿ"
},
@ -597,9 +585,6 @@
"networkName": {
"message": "ನವರಸರ"
},
"networkSettingsDescription": {
"message": "ಕಸಟಮ RPC ನವರಗಳನಿಿ ಮತಿಿ"
},
"networks": {
"message": "ನವರಗಳ"
},
@ -780,9 +765,6 @@
"restore": {
"message": "ಮರಪನ"
},
"restoreAccountWithSeed": {
"message": "ಸಿಿಮ ಖಯನ ಮರಿಿ"
},
"revealSeedWords": {
"message": "ಸ ವರ ಬಹಿಗಪಡಿಿ"
},
@ -834,9 +816,6 @@
"securityAndPrivacy": {
"message": "ಭದರತ ಮತಯತ"
},
"securitySettingsDescription": {
"message": "ಗಯತಿಗಳ ಮತ"
},
"seedPhrasePlaceholder": {
"message": "ಒಲಕ ಪರತಿ ಪದವನಪಡಿಿ"
},
@ -870,9 +849,6 @@
"sendTokens": {
"message": "ಟಕನಗಳನ ಕಳಿಿ"
},
"separateEachWord": {
"message": "ಒಲಕ ಪರತಿ ಪದವನಪಡಿಿ"
},
"settings": {
"message": "ಸಿಗಳ"
},

File diff suppressed because it is too large Load Diff

@ -8,9 +8,6 @@
"about": {
"message": "Apie"
},
"aboutSettingsDescription": {
"message": "Versija, palaikymo centras ir kontaktinė informacija"
},
"acceleratingATransaction": {
"message": "Operacijos paspartinimas naudojantis didesne dujų kaina padidina galimybes, kad ji bus greičiau apdorota tinkle, tačiau tai ne visada garantuojama. "
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Išplėstinės parinktys"
},
"advancedSettingsDescription": {
"message": "Prieigos kūrėjo funkcijos, būsenos žurnalų atsiuntimas, paskyros atstatymas, „testnet“ nustatymas ir pritaikytas RPC"
},
"amount": {
"message": "Suma"
},
@ -145,9 +139,6 @@
"message": "Peržiūrėti paskyrą $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "„Blockies Identicon“ naudojimas"
},
"browserNotSupported": {
"message": "Jūsų naršyklė neatpažįstama..."
},
@ -420,9 +411,6 @@
"general": {
"message": "Bendra"
},
"generalSettingsDescription": {
"message": "Valiutos keitimas, pagrindinė valiuta, kalba, „blockies identicon“"
},
"getEther": {
"message": "Gauti eterių"
},
@ -597,9 +585,6 @@
"networkName": {
"message": "Tinklo pavadinimas"
},
"networkSettingsDescription": {
"message": "Įtraukti ir redaguoti tinkintus RPC tinklus"
},
"networks": {
"message": "Tinklai"
},
@ -780,9 +765,6 @@
"restore": {
"message": "Atkurti"
},
"restoreAccountWithSeed": {
"message": "Atkurti paskyrą naudojant atkūrimo frazę"
},
"revealSeedWords": {
"message": "Atskleisti atkūrimo žodžius"
},
@ -834,9 +816,6 @@
"securityAndPrivacy": {
"message": "Sauga ir privatumas"
},
"securitySettingsDescription": {
"message": "Privatumo nuostatos ir slaptažodinės atkūrimo frazė"
},
"seedPhrasePlaceholder": {
"message": "Kiekvieną žodį atskirkite viengubu tarpu"
},
@ -870,9 +849,6 @@
"sendTokens": {
"message": "Siųsti žetonus"
},
"separateEachWord": {
"message": "Kiekvieną žodį atskirkite viengubu tarpu"
},
"settings": {
"message": "Nustatymai"
},

@ -8,9 +8,6 @@
"about": {
"message": "Par"
},
"aboutSettingsDescription": {
"message": "Versija, atbalsta centrs un kontaktinformācija"
},
"acceleratingATransaction": {
"message": "* Darījuma paātrināšana, izmantojot augstāku Gas cenu, palielina iespēju, ka tīkls to apstrādās ātrāk, taču tas nav garantēts."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Papildu opcijas"
},
"advancedSettingsDescription": {
"message": "Piekļūstiet izstrādātāju funkcijām, lejupielādējiet stāvokļu žurnālus, atiestatiet kontu, iestatiet testa tīklus un pielāgotos RPC izsaukumus"
},
"amount": {
"message": "Apjoms"
},
@ -145,9 +139,6 @@
"message": "Skatīt kontu $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Izmantot blok indentifikatoru"
},
"browserNotSupported": {
"message": "Jūsu pārlūkprogramma netiek atbalstīta..."
},
@ -416,9 +407,6 @@
"general": {
"message": "Vispārīgi"
},
"generalSettingsDescription": {
"message": "Valūtas konvertēšana, galvenā valūta, valoda, bloku identifikators"
},
"getEther": {
"message": "Saņemt Ether"
},
@ -593,9 +581,6 @@
"networkName": {
"message": "Tīkla nosaukums"
},
"networkSettingsDescription": {
"message": "Pievienot un rediģēt pielāgotos RPC tīklus"
},
"networks": {
"message": "Tīkli"
},
@ -776,9 +761,6 @@
"restore": {
"message": "Atjaunot"
},
"restoreAccountWithSeed": {
"message": "Atjaunojiet savu kontu ar atkopšanas frāzi"
},
"revealSeedWords": {
"message": "Parādīt atkopšanas vārdus"
},
@ -830,9 +812,6 @@
"securityAndPrivacy": {
"message": "Drošība un konfidencialitāte"
},
"securitySettingsDescription": {
"message": "Konfidencialitātes iestatījumi un maka atkopšanas frāze"
},
"seedPhrasePlaceholder": {
"message": "Atdaliet katru vārdu ar vienu atstarpi"
},
@ -866,9 +845,6 @@
"sendTokens": {
"message": "Nosūtīt marķierus"
},
"separateEachWord": {
"message": "Atdaliet katru vārdu ar vienu atstarpi"
},
"settings": {
"message": "Iestatījumi"
},

@ -8,9 +8,6 @@
"about": {
"message": "Mengenai"
},
"aboutSettingsDescription": {
"message": "Versi, pusat sokongan, dan maklumat perhubungan"
},
"acceleratingATransaction": {
"message": "* Mempercepatkan transaksi menggunakan harga gas lebih tinggi akan meningkatkan peluang diproses oleh rangkaian lebih cepat, tetapi ini pun tidak sentiasa dijamin."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Pilihan Lanjutan"
},
"advancedSettingsDescription": {
"message": "Akses ciri-ciri pembangun, muat turun Log Keadaan, Set Semula Akaun, sediakan jaringan ujian dan RPC tersuai"
},
"amount": {
"message": "Jumlah"
},
@ -145,9 +139,6 @@
"message": "Lihat akaun pada $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Gunakan Identicon Blockies"
},
"browserNotSupported": {
"message": "Pelayar anda tidak disokong..."
},
@ -413,9 +404,6 @@
"general": {
"message": "Am"
},
"generalSettingsDescription": {
"message": "Penukaran mata wang, mata wang utama, bahasa, blockies identicon"
},
"getEther": {
"message": "Dapatkan Ether"
},
@ -580,9 +568,6 @@
"networkName": {
"message": "Nama Rangkaian"
},
"networkSettingsDescription": {
"message": "Tambah dan sunting rangkaian RPC tersuai"
},
"networks": {
"message": "Rangkaian"
},
@ -760,9 +745,6 @@
"restore": {
"message": "Pulihkan"
},
"restoreAccountWithSeed": {
"message": "Pulihkan Akaun anda dengan Ungkapan Benih"
},
"revealSeedWords": {
"message": "Dedahkan Ungkapan Benih"
},
@ -814,9 +796,6 @@
"securityAndPrivacy": {
"message": "Keselamatan & Privasi"
},
"securitySettingsDescription": {
"message": "Tetapan privasi dan ungkapan benih dompet"
},
"seedPhrasePlaceholder": {
"message": "Pisahkan setiap perkataan dengan satu ruang"
},
@ -850,9 +829,6 @@
"sendTokens": {
"message": "Hantar Token"
},
"separateEachWord": {
"message": "Pisahkan setiap perkataan dengan ruang tunggal"
},
"settings": {
"message": "Tetapan"
},

@ -45,9 +45,6 @@
"balance": {
"message": "Balans:"
},
"blockiesIdenticon": {
"message": "Gebruik Blockies Identicon"
},
"cancel": {
"message": "Annuleer"
},

@ -8,9 +8,6 @@
"about": {
"message": "Info"
},
"aboutSettingsDescription": {
"message": "Versjon, brukerstøtte og kontaktinformasjon"
},
"acceleratingATransaction": {
"message": "* Akselerering av en transaksjon ved å bruke en høyere datakraftspris øker sjansene for å bli behandlet av nettverket raskere, men det er ikke alltid garantert."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Avanserte valg"
},
"advancedSettingsDescription": {
"message": "Få tilgang til utviklerfunksjoner, last ned tilstandslogger, tilbakestill konto, installer testnett og tilpasset RPC"
},
"amount": {
"message": "Sum"
},
@ -145,9 +139,6 @@
"message": "Se konto på $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Bruk Blockies Identicon"
},
"browserNotSupported": {
"message": "Nettleseren din støttes ikke ..."
},
@ -413,9 +404,6 @@
"general": {
"message": "Generell"
},
"generalSettingsDescription": {
"message": "Valutakonvertering, primærvaluta, språk, identifikasjonsblokkering"
},
"getEther": {
"message": "Skaff Ether "
},
@ -584,9 +572,6 @@
"networkName": {
"message": "Nettverksnavn "
},
"networkSettingsDescription": {
"message": "Legg til og rediger tilpassede RPC-nettverk"
},
"networks": {
"message": "Nettverk"
},
@ -767,9 +752,6 @@
"restore": {
"message": "Gjenopprett"
},
"restoreAccountWithSeed": {
"message": "Gjenopprett konto med frøfrase"
},
"revealSeedWords": {
"message": "Vis frøord"
},
@ -818,9 +800,6 @@
"securityAndPrivacy": {
"message": "Sikkerhet og personvern"
},
"securitySettingsDescription": {
"message": "Personverninnstillinger og lommebokens mnemoniske gjenopprettingsfrase"
},
"seedPhrasePlaceholder": {
"message": "Skill hvert ord med ett enkelt mellomrom"
},
@ -851,9 +830,6 @@
"sendTokens": {
"message": "Send tokener"
},
"separateEachWord": {
"message": "Del hvert ord med et enkelt mellomrom "
},
"settings": {
"message": "Innstillinger"
},

@ -2,9 +2,6 @@
"about": {
"message": "Tungkol Dito"
},
"aboutSettingsDescription": {
"message": "Bersyon, support center, at impormasyon sa pakikipag-ugnayan"
},
"acceleratingATransaction": {
"message": "* Kapag in-accelerate ang transaksyon sa pamamagitan ng paggamit ng mas mataas na presyo ng gas, mas magiging malaki ang tsansang mas mabilis na maiproseso ng network, pero hindi ito palaging ginagarantiya."
},
@ -97,9 +94,6 @@
"advancedOptions": {
"message": "Mga Advanced na Opsyon"
},
"advancedSettingsDescription": {
"message": "I-access ang mga pang-developer na feature, i-download ang Mga Log ng Status, I-reset ang Account, i-set up ang mga testnet at custom na RPC"
},
"affirmAgree": {
"message": "Sang-ayon ako"
},
@ -124,9 +118,6 @@
"alerts": {
"message": "Mga Alerto"
},
"alertsSettingsDescription": {
"message": "I-enable o i-disable ang bawat alerto"
},
"allowExternalExtensionTo": {
"message": "Payagan ang external extension na ito na:"
},
@ -242,9 +233,6 @@
"message": "Tingnan ang account sa $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Gumamit ng Blockies Identicon"
},
"browserNotSupported": {
"message": "Hindi sinusuportahan ang iyong Browser..."
},
@ -400,9 +388,6 @@
"contacts": {
"message": "Mga Contact"
},
"contactsSettingsDescription": {
"message": "Magdagdag, mag-edit, mag-alis, at mamahala ng iyong mga contact"
},
"continue": {
"message": "Magpatuloy"
},
@ -680,10 +665,6 @@
"ethGasPriceFetchWarning": {
"message": "Ibinibigay ang backup na presyo ng gas dahil hindi available ang pangunahing serbisyo sa pagtatantya ng gas sa ngayon."
},
"eth_accounts": {
"message": "Tingnan ang mga address ng iyong mga pinapayagang account (kinakailangan)",
"description": "The description for the `eth_accounts` permission"
},
"ethereumPublicAddress": {
"message": "Pampublikong Address ng Ethereum"
},
@ -796,9 +777,6 @@
"general": {
"message": "Pangkalahatan"
},
"generalSettingsDescription": {
"message": "Conversion ng currency, pangunahing currency, wika, blockies identicon"
},
"getEther": {
"message": "Kunin ang Ether"
},
@ -864,19 +842,12 @@
"importAccount": {
"message": "Mag-import ng Account"
},
"importAccountLinkText": {
"message": "i-import gamit ang Secret Recovery Phrase"
},
"importAccountMsg": {
"message": " Ang mga na-import na account ay hindi mauugnay sa orihinal mong nagawang Secret Recovery Phrase ng MetaMask account. Matuto pa tungkol sa mga na-import account "
},
"importAccountSeedPhrase": {
"message": "Mag-import ng account gamit ang Secret Recovery Phrase"
},
"importAccountText": {
"message": "o $1",
"description": "$1 represents the text from `importAccountLinkText` as a link"
},
"importTokenQuestion": {
"message": "Mag-import ng token?"
},
@ -1142,9 +1113,6 @@
"networkSettingsChainIdDescription": {
"message": "Ginagamit ang chain ID sa paglagda ng mga transaksyon. Dapat itong tumugma sa chain ID na ibinalik ng network. Puwede kang maglagay ng decimal o '0x'-prefixed hexadecimal number, pero ipapakita namin ang numero sa decimal."
},
"networkSettingsDescription": {
"message": "Magdagdag at mag-edit ng mga custom na RPC network"
},
"networkURL": {
"message": "URL ng Network"
},
@ -1339,6 +1307,10 @@
"pending": {
"message": "Nakabinbin"
},
"permission_ethereumAccounts": {
"message": "Tingnan ang mga address ng iyong mga pinapayagang account (kinakailangan)",
"description": "The description for the `eth_accounts` permission"
},
"permissions": {
"message": "Mga Pahintulot"
},
@ -1467,9 +1439,6 @@
"restore": {
"message": "I-restore"
},
"restoreAccountWithSeed": {
"message": "I-restore ang iyong Account gamit ang Secret Recovery Phrase"
},
"restoreWalletPreferences": {
"message": "Nakita ang backup ng iyong data mula sa $1. Gusto mo bang i-restore ang mga kagustuhan mo sa wallet?",
"description": "$1 is the date at which the data was backed up"
@ -1540,9 +1509,6 @@
"securityAndPrivacy": {
"message": "Seguridad at Privacy"
},
"securitySettingsDescription": {
"message": "Mga setting ng privacy at Secret Recovery Phrase ng wallet"
},
"seedPhraseIntroSidebarBulletFour": {
"message": "Isulat ito at itabi sa maraming tagong lugar."
},
@ -1631,9 +1597,6 @@
"sendTokens": {
"message": "Magpadala ng Mga Token"
},
"separateEachWord": {
"message": "Paghiwa-hiwalayin ang bawat salita gamit ang isang space"
},
"settings": {
"message": "Mga Setting"
},
@ -1908,10 +1871,6 @@
"swapQuoteDetailsSlippageInfo": {
"message": "Kung magbabago ang presyo sa pagitan ng oras ng pag-order mo at sa oras na nakumpirma ito, tinatawag itong \"slippage\". Awtomatikong makakansela ang iyong Pag-swap kung lalampas ang slippage sa iyong setting na \"tolerance ng slippage.\""
},
"swapQuoteNofN": {
"message": "Quote $1 ng $2",
"description": "A count of loaded quotes shown to the user while they are waiting for quotes to be fetched. $1 is the number of quotes already loaded, and $2 is the total number of quotes to load."
},
"swapQuoteSource": {
"message": "Pinagkunan ng quote"
},
@ -2288,9 +2247,6 @@
"walletConnectionGuide": {
"message": "ang aming gabay sa pagkonekta ng hardware wallet"
},
"walletSeedRestore": {
"message": "Recovery Phrase ng Wallet Secret"
},
"web3ShimUsageNotification": {
"message": "Napansin naming sinubukang gamitin ng kasalukuyang website ang tinanggal na window.web3 API. Kung mukhang sira ang site, paki-click ang $1 para sa higit pang impormasyon.",
"description": "$1 is a clickable link."

@ -8,9 +8,6 @@
"about": {
"message": "Informacje"
},
"aboutSettingsDescription": {
"message": "Wersja, centrum wsparcia i dane kontaktowe"
},
"acceleratingATransaction": {
"message": "* Przyspieszenie transakcji poprzez zastosowanie wyższej ceny gazu zwiększa szanse na jej szybsze przetworzenie przez sieć, jednak skuteczność tej operacji nie jest gwarantowana."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Opcje zaawansowane"
},
"advancedSettingsDescription": {
"message": "Dostęp do funkcji programisty, pobieranie dzienników stanu, resetowanie konta, konfigurowanie sieci testowych i niestandardowe RPC"
},
"amount": {
"message": "Ilość"
},
@ -145,9 +139,6 @@
"message": "Wyświetl konto w $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Użyj Blockies Identicon"
},
"browserNotSupported": {
"message": "Twoja przeglądarka nie jest obsługiwana..."
},
@ -420,9 +411,6 @@
"general": {
"message": "Ogólne"
},
"generalSettingsDescription": {
"message": "Przeliczanie walut, waluta podstawowa, język, ikona (identicon) Blockies"
},
"getEther": {
"message": "Zdobądź Eter"
},
@ -594,9 +582,6 @@
"networkName": {
"message": "Nazwa sieci"
},
"networkSettingsDescription": {
"message": "Dodawaj i edytuj niestandardowe sieci RPC"
},
"networks": {
"message": "Sieci"
},
@ -774,9 +759,6 @@
"restore": {
"message": "Przywróć"
},
"restoreAccountWithSeed": {
"message": "Przywróć konto frazą seed"
},
"revealSeedWords": {
"message": "Pokaż słowa seed"
},
@ -828,9 +810,6 @@
"securityAndPrivacy": {
"message": "Bezpieczeństwo i prywatność"
},
"securitySettingsDescription": {
"message": "Ustawienia prywatności i fraza seed portfela"
},
"seedPhrasePlaceholder": {
"message": "Oddziel słowa pojedynczą spacją"
},
@ -864,9 +843,6 @@
"sendTokens": {
"message": "Wyślij tokeny"
},
"separateEachWord": {
"message": "Oddziel słowa pojedynczą spacją"
},
"settings": {
"message": "Ustawienia"
},

@ -45,9 +45,6 @@
"balance": {
"message": "Saldo:"
},
"blockiesIdenticon": {
"message": "Usar Blockies Identicon"
},
"cancel": {
"message": "Cancelar"
},

File diff suppressed because it is too large Load Diff

@ -8,9 +8,6 @@
"about": {
"message": "Despre"
},
"aboutSettingsDescription": {
"message": "Versiune, centru de asistență și date de contact"
},
"acceleratingATransaction": {
"message": "* Accelerarea unei tranzacții folosind un preț în gas mai mare îi crește șansele de a fi procesată mai rapid de rețea, însă acest lucru nu este garantat întotdeauna."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Opțiuni avansate"
},
"advancedSettingsDescription": {
"message": "Accesați funcții pentru dezvoltatori, descărcați Jurnale de stare, resetați contul, configurați rețele de test și RPC personalizat"
},
"amount": {
"message": "Sumă"
},
@ -145,9 +139,6 @@
"message": "Vizualizare cont la $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Folosește Blockies Identicon"
},
"browserNotSupported": {
"message": "Browserul dvs. nu este compatibil..."
},
@ -413,9 +404,6 @@
"gasUsed": {
"message": "Suma gaz folosită"
},
"generalSettingsDescription": {
"message": "Schimb valutar, moneda principală, limba, blockies identicon"
},
"getEther": {
"message": "Obțineți Ether"
},
@ -584,9 +572,6 @@
"networkName": {
"message": "Numele rețelei"
},
"networkSettingsDescription": {
"message": "Adăugați și editați rețelele RPC particularizate"
},
"networks": {
"message": "Rețele"
},
@ -767,9 +752,6 @@
"restore": {
"message": "Restabilește"
},
"restoreAccountWithSeed": {
"message": "Restaurați-vă contul folosind fraza inițială"
},
"revealSeedWords": {
"message": "Arată cuvintele din seed"
},
@ -821,9 +803,6 @@
"securityAndPrivacy": {
"message": "Securitate și confidențialitate"
},
"securitySettingsDescription": {
"message": "Setările de confidențialitate și fraza seed a portofelului"
},
"seedPhrasePlaceholder": {
"message": "Despărțiți fiecare cuvânt cu un spațiu"
},
@ -857,9 +836,6 @@
"sendTokens": {
"message": "Trimiteți indicative"
},
"separateEachWord": {
"message": "Despărțiți fiecare cuvânt cu un spațiu"
},
"settings": {
"message": "Setări"
},

File diff suppressed because it is too large Load Diff

@ -8,9 +8,6 @@
"about": {
"message": "Informácie"
},
"aboutSettingsDescription": {
"message": "Verzia, centrum podpory a kontaktné informácie"
},
"acceleratingATransaction": {
"message": "*Urýchlenie transakcie pomocou vyššej ceny za GAS zvyšuje šance na rýchlejšie spracovanie v sieti, nie je to však vždy zaručené."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Rozšírené nastavenia"
},
"advancedSettingsDescription": {
"message": "Získajte prístup k vývojárskym funkciám, sťahujte si Stavové denníky, resetujte účet, nastavujte testovacie siete a vlastné RPC"
},
"amount": {
"message": "Částka"
},
@ -139,9 +133,6 @@
"message": "Zobraziť účet na $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Použít Blockies Identicon"
},
"browserNotSupported": {
"message": "Váš prehliadač nie je podporovaný..."
},
@ -414,9 +405,6 @@
"general": {
"message": "Všeobecne"
},
"generalSettingsDescription": {
"message": "Prevod mien, primárna mena, jazyk, identifikácia blokov"
},
"getEther": {
"message": "Získejte Ether"
},
@ -569,9 +557,6 @@
"networkName": {
"message": "Názov siete"
},
"networkSettingsDescription": {
"message": "Pridať a upraviť vlastné siete RPC"
},
"networks": {
"message": "Sítě"
},
@ -749,9 +734,6 @@
"restore": {
"message": "Obnoviť"
},
"restoreAccountWithSeed": {
"message": "Obnoviť účet pomocou seed frázy"
},
"revealSeedWords": {
"message": "Zobrazit slova klíčové fráze"
},
@ -797,9 +779,6 @@
"securityAndPrivacy": {
"message": "Bezpečnosť a súkromie"
},
"securitySettingsDescription": {
"message": "Nastavenia súkromia a seed fráza peňaženky"
},
"seedPhrasePlaceholder": {
"message": "Každé slovo oddeľte jednou medzerou"
},
@ -833,9 +812,6 @@
"sendTokens": {
"message": "Odeslat tokeny"
},
"separateEachWord": {
"message": "Každé slovo oddeľte jednou medzerou"
},
"settings": {
"message": "Nastavení"
},

@ -8,9 +8,6 @@
"about": {
"message": "O možnostih"
},
"aboutSettingsDescription": {
"message": "Različica, center za podporo in podatki za stik"
},
"acceleratingATransaction": {
"message": "* Pospešitev transakcije z višjo gas ceno poveča njene možnosti za hitrejšo obdelavo v omrežju, vendar ni vedno zagotovljena."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Napredne možnosti"
},
"advancedSettingsDescription": {
"message": "Dostopite do funkcij razvijalca, prenesite dnevnike držav, ponastavite račun, nastavite testne mreže in RPC po meri"
},
"amount": {
"message": "Znesek"
},
@ -145,9 +139,6 @@
"message": "Ogled računa na  $1 ",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Uporabi identifikacijo Blockies"
},
"browserNotSupported": {
"message": "Vaš brskalnik ni podptrt ..."
},
@ -417,9 +408,6 @@
"general": {
"message": "Splošno"
},
"generalSettingsDescription": {
"message": "Pretvorba valut, primarna valuta, jezik, identifikacija Blockies"
},
"getEther": {
"message": "Pridobi Ether"
},
@ -585,9 +573,6 @@
"networkName": {
"message": "Ime omrežja"
},
"networkSettingsDescription": {
"message": "Dodajte in uredite omrežja RPC po meri"
},
"networks": {
"message": "Omrežja"
},
@ -768,9 +753,6 @@
"restore": {
"message": "Obnovi"
},
"restoreAccountWithSeed": {
"message": "Obnovi račun z seed phrase"
},
"revealSeedWords": {
"message": "Razkrij seed words"
},
@ -822,9 +804,6 @@
"securityAndPrivacy": {
"message": "Varnost in zasebnost"
},
"securitySettingsDescription": {
"message": "Nastavitve zasebnosti in geslo za denarnico seed phrase "
},
"seedPhrasePlaceholder": {
"message": "Vsako besedo ločite z enim presledkom"
},
@ -858,9 +837,6 @@
"sendTokens": {
"message": "Pošlji žetone"
},
"separateEachWord": {
"message": "Vsako besedo ločite z enim presledkom"
},
"settings": {
"message": "Nastavitve"
},

@ -8,9 +8,6 @@
"about": {
"message": "Основни подаци"
},
"aboutSettingsDescription": {
"message": "Verzija, centar za podršku i podaci za kontakt"
},
"acceleratingATransaction": {
"message": "* Time što se ubrzava transakcija koristeći veću gas cenu, povećavaju se šanse da se procesuira brže od strane mreže, ali to nije uvek zagarantovano."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Dodatne opcije"
},
"advancedSettingsDescription": {
"message": "Pristupite funkcijama za programere, preuzmite državne evidencije, resetujte nalog, postavite testne mreže i prilagođeni RPC"
},
"amount": {
"message": "Iznos"
},
@ -145,9 +139,6 @@
"message": "Pogledajte nalog za $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Koristite „Blockies Identicon”"
},
"browserNotSupported": {
"message": "Vaš pregledač nije podržan..."
},
@ -417,9 +408,6 @@
"general": {
"message": "Opšte"
},
"generalSettingsDescription": {
"message": "Konverzija valuta, primarna valuta, jezik, blockies identicon"
},
"getEther": {
"message": "Nabavite Ether"
},
@ -588,9 +576,6 @@
"networkName": {
"message": "Ime mreže"
},
"networkSettingsDescription": {
"message": "Dodajte i uredite prilagođene RPC mreže"
},
"networks": {
"message": "Mreže"
},
@ -771,9 +756,6 @@
"restore": {
"message": "Поново отвори"
},
"restoreAccountWithSeed": {
"message": "Povratite svoj nalog uz pomoć seed fraze"
},
"revealSeedWords": {
"message": "Otkrivanje početnih reči"
},
@ -825,9 +807,6 @@
"securityAndPrivacy": {
"message": "Bezbednost i privatnost"
},
"securitySettingsDescription": {
"message": "Podešavanja privatnosti i novčanik fraze početnih vrednosti"
},
"seedPhrasePlaceholder": {
"message": "Odvojite svaku reč jednim razmakom"
},
@ -861,9 +840,6 @@
"sendTokens": {
"message": "Pošalji tokene"
},
"separateEachWord": {
"message": "Razdvojite svaku reč jednim mestom razmaka"
},
"settings": {
"message": "Podešavanja"
},

@ -8,9 +8,6 @@
"about": {
"message": "Om"
},
"aboutSettingsDescription": {
"message": "Version, supportcenter och kontaktinformation"
},
"acceleratingATransaction": {
"message": "* Att snabba upp en överföring genom att använda ett högre gaspris ökar chanserna för att överföringen ska hanteras snabbare av nätverket, men det är inte en garanti."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Avancerade alternativ"
},
"advancedSettingsDescription": {
"message": "Åtkomst till verktyg för utvecklare, ladda ner loggar, återställ konto, upprätta testnätverk och skräddarsy RPC"
},
"amount": {
"message": "Belopp"
},
@ -145,9 +139,6 @@
"message": "Visa konto på $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Använd Blockies Identicon"
},
"browserNotSupported": {
"message": "Din webbläsare stöds inte..."
},
@ -410,9 +401,6 @@
"general": {
"message": "Allmänt"
},
"generalSettingsDescription": {
"message": "Valutaomvandling, primär valuta, språk"
},
"getEther": {
"message": "Skaffa Ether"
},
@ -581,9 +569,6 @@
"networkName": {
"message": "Nätverksnamn"
},
"networkSettingsDescription": {
"message": "Lägg till och redigera RPC-nätverk"
},
"networks": {
"message": "Nätverk"
},
@ -764,9 +749,6 @@
"restore": {
"message": "Återställ"
},
"restoreAccountWithSeed": {
"message": "Återställ ditt konto med seedphrase"
},
"revealSeedWords": {
"message": "Visa seed-ord"
},
@ -818,9 +800,6 @@
"securityAndPrivacy": {
"message": "Säkerhet och integritet"
},
"securitySettingsDescription": {
"message": "Sekretessinställningar och plånbokens seedfras"
},
"seedPhrasePlaceholder": {
"message": "Separera varje ord med ett enda mellanslag."
},
@ -854,9 +833,6 @@
"sendTokens": {
"message": "Skicka tokens"
},
"separateEachWord": {
"message": "Lägg in ett mellanslag mellan varje ord"
},
"settings": {
"message": "Inställningar"
},

@ -8,9 +8,6 @@
"about": {
"message": "Kuhusu"
},
"aboutSettingsDescription": {
"message": "Toleo, kituo cha msaada, na taarifa za mawasiliano"
},
"acceleratingATransaction": {
"message": "*Kuwezesha muamala kwa kutumia bei ya juu ya gesi huongeza uwezekano wake wa kushughulikiwa na mtandao haraka, lakini hauhakikishiwi siku zote."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Machaguo ya Juu"
},
"advancedSettingsDescription": {
"message": "Vipengele vya idhini ya msanidi, Kumbukumbu za Hali ya kupakua, Kufuta Akaunti, mitando ya majaribio ya kuweka mipangilio na RPC maalumu"
},
"amount": {
"message": "Kiasi"
},
@ -142,9 +136,6 @@
"message": "Tazama akaunti kwenye $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Tumia Blockies Identicon"
},
"browserNotSupported": {
"message": "Kivinjari chaku hakiwezeshwi..."
},
@ -410,9 +401,6 @@
"general": {
"message": "Jumla"
},
"generalSettingsDescription": {
"message": "Ubadilishaji wa fedha, sarafu ya msingi, lugha, blockies identicon"
},
"getEther": {
"message": "Pata Ether"
},
@ -575,9 +563,6 @@
"networkName": {
"message": "Jina la mtandao"
},
"networkSettingsDescription": {
"message": "Ongeza na hariri mitandao maalumu ya RPC"
},
"networks": {
"message": "Mitandao"
},
@ -758,9 +743,6 @@
"restore": {
"message": "Rejesha"
},
"restoreAccountWithSeed": {
"message": "Rejesha Akaunti yako kwa kutumia Kirai Kianzio."
},
"revealSeedWords": {
"message": "Onyesha Maneno ya Kianzio"
},
@ -812,9 +794,6 @@
"securityAndPrivacy": {
"message": "Ulinzi na Faragha"
},
"securitySettingsDescription": {
"message": "Mipangilio ya Faragha na kirai kianzio cha waleti"
},
"seedPhrasePlaceholder": {
"message": "Tenganisha kila neno kwa nafasi moja"
},
@ -848,9 +827,6 @@
"sendTokens": {
"message": "Tuma Vianzio"
},
"separateEachWord": {
"message": "Tenganisha kila neno kwa nafasi moja"
},
"settings": {
"message": "Mipangilio"
},

@ -60,9 +60,6 @@
"basic": {
"message": "அடிபட"
},
"blockiesIdenticon": {
"message": "பி ஐடி பயன"
},
"cancel": {
"message": "ரத"
},

@ -54,9 +54,6 @@
"balance": {
"message": "ยอดคงเหลอ:"
},
"blockiesIdenticon": {
"message": "ใชงาน Blockies Identicon"
},
"cancel": {
"message": "ยกเลก"
},
@ -299,9 +296,6 @@
"negativeETH": {
"message": "ไมสามารถสงอเธอรเปนจำนวนตดลบได"
},
"networkSettingsDescription": {
"message": "เพมและแกไขเครอขาย RPC แบบกำหนดเอง"
},
"networks": {
"message": "เครอขาย"
},

@ -6,7 +6,7 @@
"message": "Hindi tugmang data ng transaksyon. Pakisuriin ang mga detalye ng transaksyon."
},
"QRHardwarePubkeyAccountOutOfRange": {
"message": "Wala nang mga account. Kung gusto mong mag-access ng iba pang account na hindi nakalista sa ibba, pakikonektang muli ang hardware wallet mo at piliin ito."
"message": "Wala nang mga account. Kung gusto mong mag-access ng iba pang account na hindi nakalista sa ibaba, pakikonektang muli ang hardware wallet mo at piliin ito."
},
"QRHardwareScanInstructions": {
"message": "Ilagay ang QR code sa harap ng iyong camera. Malabo ang screen, pero hindi ito makakaapekto sa pagbabasa."
@ -47,9 +47,6 @@
"about": {
"message": "Tungkol Dito"
},
"aboutSettingsDescription": {
"message": "Bersyon, support center, at impormasyon sa pakikipag-ugnayan"
},
"acceleratingATransaction": {
"message": "* Kapag in-accelerate ang transaksyon sa pamamagitan ng paggamit ng mas mataas na presyo ng gasolina, mas magiging malaki ang tsansang mas mabilis na maproseso ng network, pero hindi ito palaging ginagarantiya."
},
@ -90,7 +87,7 @@
"message": "Aktibidad"
},
"activityLog": {
"message": "log ng aktibidad"
"message": "Log ng aktibidad"
},
"add": {
"message": "Magdagdag"
@ -185,9 +182,6 @@
"advancedPriorityFeeToolTip": {
"message": "Ang priority fee (kilala rin bilang “tip ng miner”) ay direktang napupunta sa mga miner at ginagawang insentibo ang mga ito upang unahin ang iyong mga transaksyon."
},
"advancedSettingsDescription": {
"message": "I-access ang mga pang-developer na feature, i-download ang Mga Log ng Estado, I-reset ang Account, i-set up ang mga testnet at custom na RPC"
},
"affirmAgree": {
"message": "Sang-ayon Ako"
},
@ -212,9 +206,6 @@
"alerts": {
"message": "Mga Alerto"
},
"alertsSettingsDescription": {
"message": "I-enable o i-disable ang bawat alerto"
},
"allowExternalExtensionTo": {
"message": "Payagan ang external extension na ito na:"
},
@ -371,9 +362,6 @@
"message": "Tingnan ang account sa $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Gumamit ng Blockies Identicon"
},
"browserNotSupported": {
"message": "Hindi sinusuportahan ang iyong Browser..."
},
@ -504,7 +492,7 @@
"message": "Kumonekta sa MetaMask"
},
"connectedAccountsDescriptionPlural": {
"message": "Mayroon kang $1 (na) account na nakakonekta sa site na ito.",
"message": "Mayroon kang $1 account na nakakonekta sa site na ito.",
"description": "$1 is the number of accounts"
},
"connectedAccountsDescriptionSingular": {
@ -551,9 +539,6 @@
"contacts": {
"message": "Mga Contact"
},
"contactsSettingsDescription": {
"message": "Magdagdag, mag-edit, magtanggal, at mamahala ng iyong mga contact"
},
"continue": {
"message": "Magpatuloy"
},
@ -743,7 +728,7 @@
"message": "I-on ito para i-dismiss ang mensahe ng paalala ng pag-back up ng recovery phrase. Lubos naming inirerekomendang i-back up mo ang iyong Secret Recovery Phrase para maiwasan ang pagkawala ng pondo"
},
"dismissReminderField": {
"message": "I-dismiss ang back up na paalala ng Sikretong Recovert Phrase"
"message": "I-dismiss ang back up na paalala ng Secret Recovery Phrase"
},
"domain": {
"message": "Domain"
@ -849,7 +834,7 @@
"message": "Ang priority fee ay mas mataas sa kinakailangan. Maaari kang magbayad nang higit sa kinakailangan"
},
"editGasMaxPriorityFeeLow": {
"message": "Amg priority fee ay mababa para sa kasalukuyang mga kundisyon ng network"
"message": "Ang priority fee ay mababa para sa kasalukuyang mga kundisyon ng network"
},
"editGasMaxPriorityFeeLowV2": {
"message": "Ang priority fee ay mababa para sa kasalukuyang mga kundisyon ng network"
@ -883,7 +868,7 @@
"message": "Ang iyong max fee o max priority fee ay maaaring mababa para sa kasalukuyang kondisyon ng market. Hindi namin alam kung kailan (o kung) ipoproseso ang iyong transaksyon. "
},
"editGasTooLowWarningTooltip": {
"message": "Pinabababa nito ang iyong maximum fee ngunit kung network traffic ay maaaring maantala o mabigo ang iyong transaksyon."
"message": "Pinapababa nito ang iyong maximum fee ngunit kung network traffic ay maaaring maantala o mabigo ang iyong transaksyon."
},
"editNonceField": {
"message": "I-edit sa Nonce"
@ -1017,10 +1002,6 @@
"ethGasPriceFetchWarning": {
"message": "Ang backup gas price ay inilalaan dahil ang pangunahing pagtantiya ng presyo ng gas ay hindi available sa ngayon."
},
"eth_accounts": {
"message": "Tingnan ang mga address ng iyong mga pinapayagang account (kinakailangan)",
"description": "The description for the `eth_accounts` permission"
},
"ethereumPublicAddress": {
"message": "Pampublikong Address ng Ethereum"
},
@ -1039,9 +1020,6 @@
"experimental": {
"message": "Experimental"
},
"experimentalSettingsDescription": {
"message": "Pag-detect ng token at iba pa"
},
"exportPrivateKey": {
"message": "I-export ang Pribadong Key"
},
@ -1211,9 +1189,6 @@
"general": {
"message": "Pangkalahatan"
},
"generalSettingsDescription": {
"message": "Conversion ng currency, pangunahing currency, wika, blockies identicon"
},
"getEther": {
"message": "Kunin ang Ether"
},
@ -1253,7 +1228,7 @@
"message": "Magkonekta ng hardware wallet"
},
"hardwareWalletsMsg": {
"message": "Pumili ng hardware wallet na gusto mong gamitin kasama ng MetaMask"
"message": "Pumili ng hardware wallet na gusto mong gamitin kasama ng MetaMask."
},
"here": {
"message": "dito",
@ -1273,7 +1248,7 @@
"description": "$1 is the symbol for a token (e.g. 'DAI')"
},
"hideZeroBalanceTokens": {
"message": "I-hide ang mga oken na Walang Balanse"
"message": "I-hide ang mga Token na Walang Balanse"
},
"high": {
"message": "Agresibo"
@ -1298,21 +1273,14 @@
"importAccountError": {
"message": "Error sa pag-import ng account."
},
"importAccountLinkText": {
"message": "i-import gamit ang Secret Recovery Phrase"
},
"importAccountMsg": {
"message": " Ang mga na-import na account ay hindi mauugnay sa orihinal mong nagawang Secret Recovery Phrase ng MetaMask account. Matuto pa tungkol sa mga na-import account "
"message": "Ang mga na-import na account ay hindi mauugnay sa orihinal mong nagawang Secret Recovery Phrase ng MetaMask account. Matuto pa tungkol sa mga na-import account"
},
"importAccountSeedPhrase": {
"message": "Mag-import ng account gamit ang Secret Recovery Phrase"
},
"importAccountText": {
"message": "o $1",
"description": "$1 represents the text from `importAccountLinkText` as a link"
},
"importExistingWalletDescription": {
"message": "Ilagay ang iyong Sirektong Recovery Phrase (kilala rin bilang Seed Phrase) na ibinigay sa iyo noong gumawa ka ng iyong wallet. $1",
"message": "Ilagay ang iyong Secret Recovery Phrase (kilala rin bilang Seed Phrase) na ibinigay sa iyo noong gumawa ka ng iyong wallet. $1",
"description": "$1 is the words 'Learn More' from key 'learnMore', separated here so that it can be added as a link"
},
"importExistingWalletTitle": {
@ -1457,7 +1425,7 @@
"description": "$1 is link to cancel or speed up transactions"
},
"learnMore": {
"message": "Matuto pa"
"message": "matuto pa"
},
"learnMoreUpperCase": {
"message": "Matuto pa"
@ -1623,7 +1591,7 @@
"description": "This string is localized separately from some of the commitments so that we can bold it"
},
"metametricsCommitmentsIntro": {
"message": "Gagawin ng MetaMask ang sumusunod..."
"message": "Ang MetaMask ay.."
},
"metametricsCommitmentsNeverCollect": {
"message": "Huwag mangolekta ng mga key, address, transaksyon, balanse, hash, o anumang personal na impormasyon"
@ -1717,7 +1685,7 @@
"message": "BSC"
},
"networkNameDefinition": {
"message": "Ang panglan ay nauugnay sa network na ito."
"message": "Ang pangalan ay nauugnay sa network na ito."
},
"networkNameEthereum": {
"message": "Ethereum"
@ -1734,9 +1702,6 @@
"networkSettingsChainIdDescription": {
"message": "Ginagaamit ang chain ID sa paglagda ng mga transaksyon. Dapat itong tumugma sa chain ID na ibinalik ng network. Puwede kang maglagay ng decimal o '0x'-prefixed hexadecimal number, pero ipapakita namin ang numero sa decimal."
},
"networkSettingsDescription": {
"message": "Magdagdag at mag-edit ng mga custom na RPC network"
},
"networkStatus": {
"message": "Network status"
},
@ -1773,9 +1738,6 @@
"message": "Account $1",
"description": "Default name of next account to be created on create account screen"
},
"newCollectibleAddFailed": {
"message": "Ang collectible ay hindi idinagdag dahil: $1"
},
"newCollectibleAddedMessage": {
"message": "Ang collectible ay tagumpay na naidagdag!"
},
@ -1901,7 +1863,7 @@
"description": "The 'call to action' on the button, or link, of the 'Swap on Binance Smart Chain!' notification. Upon clicking, users will be taken to a page where then can swap tokens on Binance Smart Chain."
},
"notifications4Description": {
"message": "Kunin ang pinakamagagandang papremyyo sa pag-swap ng token sa loob ng iyong wallet. Ikinokonekta ka na ngayon ng MetaMask sa maraming decentralized exchange aggregator at mga propesyonal na market maker sa Binance Smart Chain.",
"message": "Kunin ang pinakamagagandang papremyo sa pag-swap ng token sa loob ng iyong wallet. Ikinokonekta ka na ngayon ng MetaMask sa maraming decentralized exchange aggregator at mga propesyonal na market maker sa Binance Smart Chain.",
"description": "Description of a notification in the 'See What's New' popup."
},
"notifications4Title": {
@ -1909,7 +1871,7 @@
"description": "Title for a notification in the 'See What's New' popup. Encourages users to do swaps on Binance Smart Chain."
},
"notifications5Description": {
"message": "Ang iyong \"Seed Phrase\" ay tinatawag na ngayon na iyong \"Sirektong Recovery Phrase.\"",
"message": "Ang iyong \"Seed Phrase\" ay tinatawag na ngayon na iyong \"Secret Recovery Phrase.\"",
"description": "Description of a notification in the 'See What's New' popup. Describes the seed phrase wording update."
},
"notifications6DescriptionOne": {
@ -1917,7 +1879,7 @@
"description": "Description of a notification in the 'See What's New' popup. Describes the Ledger support update."
},
"notifications6DescriptionThree": {
"message": "Kapag gingamit ang iyong Ledger account sa MetaMask, ang bagong tab ay magbubukas at hihilingin sa iyo ng buksan ang Ledger Live app. Kapag nabuksan na ang app, hihilingin sa iyo na payagan ang koneksyon ng WebSocket sa iyong MetaMask account. Ganun lang!",
"message": "Kapag ginagamit ang iyong Ledger account sa MetaMask, ang bagong tab ay magbubukas at hihilingin sa iyo ng buksan ang Ledger Live app. Kapag nabuksan na ang app, hihilingin sa iyo na payagan ang koneksyon ng WebSocket sa iyong MetaMask account. Ganun lang!",
"description": "Description of a notification in the 'See What's New' popup. Describes the Ledger support update."
},
"notifications6DescriptionTwo": {
@ -1960,7 +1922,7 @@
"message": "Binibigyan namin kayo ngayon ng mas maraming kaalaman sa tab na'Data' kapag kinukumpirma ang mga transaksyon ng smart contract."
},
"notifications9DescriptionTwo": {
"message": "Mas maiintindihan mo na ngayon ang mga detalye ng transaksyon bago kumpirmahin, at mas madaling makakapagdagdag ng mga address ng transaksyon sa iyong address book, na nakaakatulong sa iyo na maging litas at malaman ang mga desisyon."
"message": "Mas maiintindihan mo na ngayon ang mga detalye ng transaksyon bago kumpirmahin, at mas madaling makakapagdagdag ng mga address ng transaksyon sa iyong address book, na nakaakatulong sa iyo na maging ligtas at malaman ang mga desisyon."
},
"notifications9Title": {
"message": "👓 Pinadadali naming mabasa ang mga transaksyon."
@ -1972,7 +1934,7 @@
"message": "Naka-off"
},
"offlineForMaintenance": {
"message": "Offline para sa pagmementina"
"message": "Offline para sa pagmamantini"
},
"ok": {
"message": "Ok"
@ -2005,7 +1967,7 @@
"message": "I-pin ang MetaMask sa iyong browser para madali itong ma-access at madaling makita ang mga kumpirmasyon ng transaksyon."
},
"onboardingPinExtensionDescription2": {
"message": "Maaari mong buksan ang MetaMask sa pamamagitan ng pag-click sa ektensyon at pag-accesss sa wallet mo sa 1 click lang."
"message": "Maaari mong buksan ang MetaMask sa pamamagitan ng pag-click sa extension at pag-accesss sa wallet mo sa 1 click lang."
},
"onboardingPinExtensionDescription3": {
"message": "Mag-click sa icon ng browser extension para agad itong ma-access"
@ -2100,6 +2062,10 @@
"permissionRequest": {
"message": "Kahilingan sa pahintulot"
},
"permission_ethereumAccounts": {
"message": "Tingnan ang mga address, balanse ng account, aktibidad at simulan ang iyong mga transaksyon",
"description": "The description for the `eth_accounts` permission"
},
"permissions": {
"message": "Mga Pahintulot"
},
@ -2209,7 +2175,7 @@
"message": "Tanggihan Lahat"
},
"rejectTxsDescription": {
"message": "Maramihan mong tatanggihan ang $1 (na) transaksyon."
"message": "Maramihan mong tatanggihan ang $1 transaksyon."
},
"rejectTxsN": {
"message": "Tanggihan ang $1 transaksyon"
@ -2253,9 +2219,6 @@
"restore": {
"message": "I-restore"
},
"restoreAccountWithSeed": {
"message": "I-restore ang iyong Account gamit ang Secret Recovery Phrase"
},
"restoreWalletPreferences": {
"message": "Nakita ang backup ng iyong data mula sa $1. Gusto mo bang i-restore ang mga kagustuhan mo sa wallet?",
"description": "$1 is the date at which the data was backed up"
@ -2323,9 +2286,6 @@
"secretPhrase": {
"message": "Ang unang account lang sa wallet na ito ang awtomatikong maglo-load. Pagkatapos makumpleto ang prosesong ito, upang magdagdag ng mga karagdagang account, i-click ang drop down na menu, pagkatapos ay piliin ang Gumawa ng Account."
},
"secretPhraseWarning": {
"message": "Kapag nagre-restore ka gamit ang isa pang Secret Recovery Phrase, permanenteng aalisin sa app na ito ang iyong kasalukuyang wallet, mga account, at asset. Ang gawaing ito ay hindi pwedeng baguhin."
},
"secretRecoveryPhrase": {
"message": "Secret Recovery Phrase"
},
@ -2335,9 +2295,6 @@
"securityAndPrivacy": {
"message": "Seguridad at Pagkapribado"
},
"securitySettingsDescription": {
"message": "Mga setting ng privacy at Secret Recovery Phrase ng wallet"
},
"seedPhraseConfirm": {
"message": "Kumpirmahin ang Secret Recovery Phrase"
},
@ -2396,7 +2353,7 @@
"message": "Ang mga Secret Recovery Phrase ay naglalaman ng 12, 15, 18, 21, o 24 na salita"
},
"seedPhraseWriteDownDetails": {
"message": "Isulat ang 12 salitang Secret Recovery Phrase at i-save sa lugar na pinagkakatiwalaan mo at ikaw ang ang makaka-access."
"message": "Isulat ang 12 salitang Secret Recovery Phrase at i-save sa lugar na pinagkakatiwalaan mo at ikaw ang makaka-access."
},
"seedPhraseWriteDownHeader": {
"message": "Isulat ang iyong Secret Recovery Phrase"
@ -2426,7 +2383,7 @@
"message": "I-on ang pag-detect ng NFT sa Settings"
},
"selectPathHelp": {
"message": "Kung hindi mo makita ang mga kasalukuyan mong Ledger account sa ibaba, subukang ilipat ang path sa \"Legacy (MEW / MyCrypto)\""
"message": "Kung hindi mo makita ang mga account na inaasahan mo, subukang ilipat sa HD path."
},
"selectType": {
"message": "Pumili ng Uri"
@ -2454,9 +2411,6 @@
"message": "Nagpapadala ng $1",
"description": "$1 represents the native currency symbol for the current network (e.g. ETH or BNB)"
},
"separateEachWord": {
"message": "Paghiwa-hiwalayin ang bawat salita gamit ang espasyo"
},
"setAdvancedPrivacySettings": {
"message": "Magtakda ng advanced privacy settings"
},
@ -2521,7 +2475,7 @@
"message": "Lumagda"
},
"signNotice": {
"message": "Maaaring may mga \nmapanganib na side effect ang paglagda sa mensaheng ito. Lagdaan lang ang mga mensahe mula sa \nmga site na pinagkakatiwalaan mo para sa buong account mo.\n Tatanggalin ang mapanganib na paraang ito sa bersyon sa hinaharap. "
"message": "Maaaring may mga \nmapanganib na side effect ang paglagda sa mensaheng ito. Lagdaan lang ang mga mensahe mula sa \nmga site na pinagkakatiwalaan mo para sa buong account mo.\n Tatanggalin ang mapanganib na paraang ito sa bersyon sa hinaharap."
},
"signatureRequest": {
"message": "Request na Paglagda"
@ -2810,7 +2764,7 @@
"message": "Ang price impact ay ang pagkakaiba sa pagitan ng kasalukuyang market price at ang halagang natanggap sa panahon ng pagpapatupad ng transaksyon. Ang price impact ay isang function ng laki ng iyong trade kaugnay sa laki ng liquidity pool."
},
"swapPriceUnavailableDescription": {
"message": "Hindi matukoy ang price impact dahil sa kakulangan ng data ng market price. Pakikumpirma na kumportable ka sa dami ng mga token na matatanggap mo bago mag-swap."
"message": "Hindi matukoy ang price impact dahil sa kakulangan ng data ng market price. Pakikumpirma na komportable ka sa dami ng mga token na matatanggap mo bago mag-swap."
},
"swapPriceUnavailableTitle": {
"message": "Tingnan ang iyong rate bago magpatuloy"
@ -2824,10 +2778,6 @@
"swapQuoteDetailsSlippageInfo": {
"message": "Kung magbabago ang presyo sa pagitan ng oras ng pag-order mo at sa oras na nakumpirma ito, tinatawag itong \"slippage\". Awtomatikong makakansela ang iyong Pag-swap kung lalampas ang slippage sa iyong setting na \"max slippage\"."
},
"swapQuoteNofN": {
"message": "Quote $1 ng $2",
"description": "A count of loaded quotes shown to the user while they are waiting for quotes to be fetched. $1 is the number of quotes already loaded, and $2 is the total number of quotes to load."
},
"swapQuoteSource": {
"message": "Pinagkunan ng quote"
},
@ -2886,7 +2836,7 @@
"message": "Minungkahing pag-swap"
},
"swapSuggestedGasSettingToolTipMessage": {
"message": "Ang mga swap ay kumpikado at sensitibo sa oras na mga transaksyon. Nirerekomenda namin ang gas fee na ito para sa magandang balanse sa pagitan ng halaga at kumpiyansa ng matagumpay na Pag-swap."
"message": "Ang mga swap ay kumplikado at sensitibo sa oras na mga transaksyon. Nirerekomenda namin ang gas fee na ito para sa magandang balanse sa pagitan ng halaga at kumpiyansa ng matagumpay na Pag-swap."
},
"swapSwapFrom": {
"message": "Ipalit mula sa"
@ -2934,7 +2884,7 @@
"message": "Nakumpleto ang transaksyon"
},
"swapTwoTransactions": {
"message": "2 transakasyon"
"message": "2 transaksyon"
},
"swapUnknown": {
"message": "Hindi Alam"
@ -3272,7 +3222,7 @@
"message": "Kinakailangan ng mga URL ang naaangkop na HTTP/HTTPS prefix."
},
"urlExistsErrorMsg": {
"message": "Nasa kasalukuyang listahan ng mga network na ang URL"
"message": "Nasa kasalukuyang listahan ng mga network na ang URL."
},
"useCollectibleDetection": {
"message": "Autodetect ng mga NFT"
@ -3369,9 +3319,6 @@
"walletCreationSuccessTitle": {
"message": "Matagumpay ang paggawa ng wallet"
},
"walletSeedRestore": {
"message": "Recovery Phrase ng Wallet Secret"
},
"web3ShimUsageNotification": {
"message": "Napansin namin na sinubukan ng kasalukuyang website na gamitin ang inalis na window.web3 API. Kung mukhang sira ang site, paki-click ang $1 para sa karagdagang impormasyon.",
"description": "$1 is a clickable link."

File diff suppressed because it is too large Load Diff

@ -8,9 +8,6 @@
"about": {
"message": "Про Google Chrome"
},
"aboutSettingsDescription": {
"message": "Версія, центр підтримки та контактна інформація"
},
"acceleratingATransaction": {
"message": "* Прискорення транзакції за допомогою вищих цін на газ підвищує її шанси бути обробленою мережею швидше, але це не завжди гарантовано."
},
@ -62,9 +59,6 @@
"advancedOptions": {
"message": "Додаткові параметри"
},
"advancedSettingsDescription": {
"message": "Отримайте доступ до функцій розробника, завантажте Логи станів, перезапустіть обліковий запис, налаштуйте тестові сітки та персоніфіковані RPC"
},
"amount": {
"message": "Кількість"
},
@ -145,9 +139,6 @@
"message": "Переглянути обліковий запис на $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Викоритовувати Blockies Identicon"
},
"browserNotSupported": {
"message": "Ваш браузер не підтримується..."
},
@ -420,9 +411,6 @@
"general": {
"message": "Загальні"
},
"generalSettingsDescription": {
"message": "Конверсія валют, первісна валюта, мова, ідентикон блокіз"
},
"getEther": {
"message": "Отримати Ефір"
},
@ -597,9 +585,6 @@
"networkName": {
"message": "Ім’я мережі"
},
"networkSettingsDescription": {
"message": "Додавайте та редагуйте мережі RPC, що можна налаштовувати"
},
"networks": {
"message": "Мережі"
},
@ -780,9 +765,6 @@
"restore": {
"message": "Відновити"
},
"restoreAccountWithSeed": {
"message": "Відновіть ваш обліковий запис за допомогою seed-фрази"
},
"revealSeedWords": {
"message": "Показати мнемонічні слова"
},
@ -834,9 +816,6 @@
"securityAndPrivacy": {
"message": "Безпека й конфіденційність"
},
"securitySettingsDescription": {
"message": "Налаштування приватності та початкова фраза гаманця"
},
"seedPhrasePlaceholder": {
"message": "Відділіть кожне слово одним пробілом"
},
@ -870,9 +849,6 @@
"sendTokens": {
"message": "Надіслати токени"
},
"separateEachWord": {
"message": "Відділіть кожне слово одним пробілом"
},
"settings": {
"message": "Налаштування"
},

@ -6,7 +6,7 @@
"message": "Dữ liệu giao dịch không đồng nhất. Vui lòng kiểm tra chi tiết giao dịch."
},
"QRHardwarePubkeyAccountOutOfRange": {
"message": "Không còn tài khoản nào. Nếu bạn muốn truy cập một tài khoản khác không được liệt kê bên dưới, vui lòng kết nối lại với ví lạnh và chọn tài khoản đó."
"message": "Không còn tài khoản nào. Nếu bạn muốn truy cập một tài khoản khác không được liệt kê bên dưới, vui lòng kết nối lại với ví cứng và chọn tài khoản đó."
},
"QRHardwareScanInstructions": {
"message": "Đặt mã QR phía trước máy ảnh. Màn hình bị mờ nhưng không ảnh hưởng đến khả năng đọc."
@ -30,16 +30,16 @@
"message": "Lỗi"
},
"QRHardwareUnknownWalletQRCode": {
"message": "Mã QR không hợp lệ. Vui lòng quét mã QR đồng bộ của ví lạnh."
"message": "Mã QR không hợp lệ. Vui lòng quét mã QR đồng bộ của ví cứng."
},
"QRHardwareWalletImporterTitle": {
"message": "Quét mã QR"
},
"QRHardwareWalletSteps1Description": {
"message": "Kết nối với một ví lạnh ngoại tuyến hoàn toàn có thể truyền tin bằng mã QR. Các ví lạnh ngoại tuyến hoàn toàn được hỗ trợ chính thức bao gồm:"
"message": "Kết nối với một ví cứng ngoại tuyến hoàn toàn có thể truyền tin bằng mã QR. Các ví cứng ngoại tuyến hoàn toàn được hỗ trợ chính thức bao gồm:"
},
"QRHardwareWalletSteps1Title": {
"message": "Ví Lạnh dựa trên QR"
"message": "Ví cứng dựa trên QR"
},
"QRHardwareWalletSteps2Description": {
"message": "AirGap Vault & Ngrave (Sắp Ra Mắt)"
@ -47,9 +47,6 @@
"about": {
"message": "Giới thiệu"
},
"aboutSettingsDescription": {
"message": "Phiên bản, trung tâm trợ giúp và thông tin liên hệ"
},
"acceleratingATransaction": {
"message": "* Việc đẩy nhanh giao dịch bằng cách sử dụng giá gas cao hơn sẽ tăng khả năng được mạng xử lý nhanh hơn, nhưng không phải lúc nào điều này cũng được đảm bảo."
},
@ -62,7 +59,7 @@
"description": "$1 is the url of the site requesting ability to spend"
},
"accessingYourCamera": {
"message": "Đang truy cập camera..."
"message": "Đang truy cập máy ảnh..."
},
"account": {
"message": "Tài khoản"
@ -90,7 +87,7 @@
"message": "Hoạt động"
},
"activityLog": {
"message": "nhật ký hoạt động"
"message": "Nhật ký hoạt động"
},
"add": {
"message": "Thêm"
@ -108,7 +105,7 @@
"message": "Thêm biệt danh"
},
"addContact": {
"message": "Thêm người liên hệ"
"message": "Thêm địa chỉ liên hệ"
},
"addCustomToken": {
"message": "Thêm Token Tùy Chỉnh"
@ -135,7 +132,7 @@
"message": "Cho phép trang này thêm một mạng?"
},
"addFriendsAndAddresses": {
"message": "Thêm bạn bè và địa chỉ bạn tin cậy"
"message": "Thêm bạn bè và địa chỉ mà bạn tin tưởng"
},
"addMemo": {
"message": "Thêm bản ghi nhớ"
@ -185,9 +182,6 @@
"advancedPriorityFeeToolTip": {
"message": "Phí ưu tiên (hay còn được gọi là \"phí khích lệ thợ đào\") được chuyển trực tiếp cho các thợ đào và khuyến khích họ ưu tiên giao dịch của bạn."
},
"advancedSettingsDescription": {
"message": "Truy cập các tính năng dành cho nhà phát triển, tải Nhật ký trạng thái xuống, Đặt lại tài khoản, thiết lập mạng thử nghiệm và RPC tùy chỉnh"
},
"affirmAgree": {
"message": "Tôi đồng ý"
},
@ -212,9 +206,6 @@
"alerts": {
"message": "Cảnh báo"
},
"alertsSettingsDescription": {
"message": "Bật hoặc tắt từng cảnh báo"
},
"allowExternalExtensionTo": {
"message": "Cho phép tiện ích bên ngoài này:"
},
@ -268,7 +259,7 @@
"message": "Đã phê duyệt"
},
"approvedAmountWithColon": {
"message": "Số lượng được chấp nhận:"
"message": "Số tiền được duyệt:"
},
"asset": {
"message": "Tài sản"
@ -313,7 +304,7 @@
"message": "Đây là mã bí mật bắt buộc phải dùng để khôi phục ví trong trường hợp bạn bị mất thiết bị, quên mật khẩu, phải cài đặt lại MetaMask hoặc muốn truy cập ví của mình trên một thiết bị khác."
},
"backupApprovalNotice": {
"message": "Sao lưu khôi phục bí mật để đảm bảo an toàn cho ví và tiền của bạn."
"message": "Sao lưu Cụm mật khẩu khôi phục bí mật để đảm bảo an toàn cho ví và tiền của bạn."
},
"backupNow": {
"message": "Sao lưu ngay"
@ -371,9 +362,6 @@
"message": "Xem tài khoản tại $1",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "Dùng biểu tượng nhận dạng kiểu Blockies"
},
"browserNotSupported": {
"message": "Trình duyệt của bạn không được hỗ trợ..."
},
@ -393,7 +381,7 @@
"message": "Mua ETH qua Wyre"
},
"buyWithWyreDescription": {
"message": "Wyre cho phép bạn dùng thẻ ghi nợ để np ETH trực tiếp vào tài khoản MetaMask của mình."
"message": "Wyre cho phép bạn dùng thẻ ghi nợ để np ETH trực tiếp vào tài khoản MetaMask của mình."
},
"bytes": {
"message": "Byte"
@ -436,7 +424,7 @@
"description": "Text that can be clicked to open a browser popup for connecting the ledger device via webhid"
},
"clickToRevealSeed": {
"message": "Nhấp vào đây để hiện các từ bí mật"
"message": "Nhấn vào đây để hiện các từ bí mật"
},
"close": {
"message": "Đóng"
@ -451,19 +439,19 @@
"message": "Xác nhận Cụm Mật Khẩu Khôi Phục Bí Mật"
},
"confirmSecretBackupPhrase": {
"message": "Xác nhận Cụm mật khẩu sao lưu bí mật"
"message": "Xác nhận Cụm mật khẩu khôi phục bí mật"
},
"confirmed": {
"message": "Đã xác nhận"
},
"confusableUnicode": {
"message": "“$1” tương tự với “$2”."
"message": "'$1' tương tự với '$2'."
},
"confusableZeroWidthUnicode": {
"message": "Tìm thấy ký tự có độ rộng bằng 0."
},
"confusingEnsDomain": {
"message": "Chúng tôi đã phát hiện thấy một ký tự có thể gây nhầm lẫn trong tên ENS. Hãy kiểm tra tên ENS để tránh khả năng bị lừa đảo."
"message": "Chúng tôi đã phát hiện thấy một ký tự có thể gây nhầm lẫn trong tên ENS. Hãy kiểm tra tên ENS để tránh nguy cơ bị lừa đảo."
},
"congratulations": {
"message": "Chúc mừng bạn"
@ -517,11 +505,11 @@
"message": "Trang web đã kết nối"
},
"connectedSitesDescription": {
"message": "$1 đã kết nối với các trang web này. Các trang web này có thể xem địa chỉ tài khoản của bạn.",
"message": "$1 đã được kết nối với các trang web này. Các trang web này có thể xem địa chỉ tài khoản của bạn.",
"description": "$1 is the account name"
},
"connectedSitesEmptyDescription": {
"message": "$1 chưa kết nối với bất kỳ trang web nào.",
"message": "$1 chưa được kết nối với bất kỳ trang web nào.",
"description": "$1 is the account name"
},
"connecting": {
@ -551,9 +539,6 @@
"contacts": {
"message": "Danh bạ"
},
"contactsSettingsDescription": {
"message": "Thêm, chỉnh sửa, xóa và quản lý danh bạ của bạn"
},
"continue": {
"message": "Tiếp tục"
},
@ -570,7 +555,7 @@
"message": "Địa chỉ hợp đồng"
},
"contractAddressError": {
"message": "Bạn đang gửi token đến địa chỉ hợp đồng của token. Điều này có thể khiến bạn bị mất những token này."
"message": "Bạn đang gửi token đến địa chỉ hợp đồng của token. Điều này có thể khiến bạn bị mất số token này."
},
"contractDeployment": {
"message": "Triển khai hợp đồng"
@ -582,16 +567,16 @@
"message": "Đã sao chép!"
},
"copyAddress": {
"message": "Sao chép địa chỉ vào khay nhớ tạm"
"message": "Sao chép địa chỉ vào bộ nhớ đệm"
},
"copyPrivateKey": {
"message": "Đây là khóa riêng tư của bạn (hãy nhấp vào để sao chép)"
"message": "Đây là khóa riêng tư của bạn (hãy nhấn vào để sao chép)"
},
"copyRawTransactionData": {
"message": "Sao chép dữ liệu giao dịch thô"
},
"copyToClipboard": {
"message": "Sao chép vào khay nhớ tạm"
"message": "Sao chép vào bộ nhớ đệm"
},
"copyTransactionId": {
"message": "Sao chép mã giao dịch"
@ -678,10 +663,10 @@
"message": "Thập lục phân"
},
"decimal": {
"message": "Vị trí thập phân của token"
"message": "Số thập phân của token"
},
"decimalsMustZerotoTen": {
"message": "Số vị trí thập phân ít nhất phải bằng 0 và không được quá 36."
"message": "Số thập phân ít nhất phải bằng 0 và không được quá 36."
},
"decrypt": {
"message": "Giải mã"
@ -698,10 +683,10 @@
"description": "$1 is the web3 site name"
},
"decryptMetamask": {
"message": "Thông báo của Decrypt"
"message": "Giải mã thông báo"
},
"decryptRequest": {
"message": "Yêu cầu của Decrypt"
"message": "Giải mã yêu cầu"
},
"delete": {
"message": "Xóa"
@ -740,13 +725,13 @@
"message": "Đóng"
},
"dismissReminderDescriptionField": {
"message": "Bật tùy chọn này để tắt thông báo nhắc sao lưu cụm mật khẩu khôi phục. Bạn nên sao lưu Cụm mật khẩu khôi phục bí mật của mình để tránh mất tiền"
"message": "Bật tùy chọn này để tắt thông báo nhắc sao lưu Cụm mật khẩu khôi phục bí mật. Bạn nên sao lưu Cụm mật khẩu khôi phục bí mật của mình để tránh mất tiền"
},
"dismissReminderField": {
"message": "Tắt lời nhắc sao lưu cụm mật khẩu khôi phục"
"message": "Tắt lời nhắc sao lưu Cụm mật khẩu khôi phục bí mật"
},
"domain": {
"message": "Miền"
"message": "Tên miền"
},
"done": {
"message": "Hoàn tất"
@ -755,13 +740,13 @@
"message": "Không hiển thị lại"
},
"downloadGoogleChrome": {
"message": "Tải Google Chrome xuống"
"message": "Tải về Google Chrome"
},
"downloadSecretBackup": {
"message": "Tải Cụm mật khẩu sao lưu bí mật này xuống và lưu giữ trên một ổ đĩa cứng hoặc môi trường lưu trữ bên ngoài được mã hóa."
"message": "Tải về Cụm mật khẩu khôi phục bí mật này và lưu trữ trên một ổ đĩa cứng hoặc phương tiện lưu trữ bên ngoài an toàn và được mã hóa."
},
"downloadStateLogs": {
"message": "Tải nhật ký trạng thái xuống"
"message": "Tải về nhật ký trạng thái"
},
"dropped": {
"message": "Đã ngừng"
@ -776,7 +761,7 @@
"message": "Chỉnh sửa tên riêng địa chỉ"
},
"editContact": {
"message": "Chỉnh sửa người liên hệ"
"message": "Chỉnh sửa địa chỉ liên hệ"
},
"editGasEducationButtonText": {
"message": "Tôi nên chọn như thế nào?"
@ -918,7 +903,7 @@
"message": "Yêu cầu khóa mã hóa công khai"
},
"endOfFlowMessage1": {
"message": "Bạn đã vượt qua bài kiểm tra. Hãy lưu giữ Cụm mật khẩu khôi phục bí mật của bạn an toàn, đó là trách nhiệm của bạn!"
"message": "Bạn đã vượt qua bài kiểm tra - hãy lưu giữ Cụm mật khẩu khôi phục bí mật của bạn an toàn, đó là trách nhiệm của bạn!"
},
"endOfFlowMessage10": {
"message": "Tất cả đã hoàn tất"
@ -933,7 +918,7 @@
"message": "Tuyệt đối không chia sẻ cụm mật khẩu với bất kỳ ai."
},
"endOfFlowMessage5": {
"message": "Hãy cẩn thận với hoạt động lừa đảo! MetaMask sẽ không bao giờ tự ý hỏi Cụm mật khẩu khôi phục bí mật của bạn."
"message": "Hãy cẩn thận với hành vi lừa đảo! MetaMask sẽ không bao giờ tự ý hỏi Cụm mật khẩu khôi phục bí mật của bạn."
},
"endOfFlowMessage6": {
"message": "Nếu bạn cần sao lưu lại Cụm mật khẩu khôi phục bí mật, bạn có thể tìm thấy chức năng này trong phần Cài đặt -> Bảo mật."
@ -1017,10 +1002,6 @@
"ethGasPriceFetchWarning": {
"message": "Giá gas dự phòng được cung cấp vì dịch vụ ước tính giá gas chính hiện không hoạt động."
},
"eth_accounts": {
"message": "Xem địa chỉ của các tài khoản được cho phép của bạn (bắt buộc)",
"description": "The description for the `eth_accounts` permission"
},
"ethereumPublicAddress": {
"message": "Địa chỉ công khai trên Ethereum"
},
@ -1039,9 +1020,6 @@
"experimental": {
"message": "Thử nghiệm"
},
"experimentalSettingsDescription": {
"message": "Phát hiện token và hơn thế nữa"
},
"exportPrivateKey": {
"message": "Xuất khóa riêng tư"
},
@ -1078,7 +1056,7 @@
"description": "Exchange type"
},
"fileImportFail": {
"message": "Tính năng nhập tệp không hoạt động? Nhấp vào đây!",
"message": "Tính năng nhập tập tin không hoạt động? Nhấn vào đây!",
"description": "Helps user import their account from a JSON file"
},
"flaskSnapSettingsCardButtonCta": {
@ -1211,9 +1189,6 @@
"general": {
"message": "Chung"
},
"generalSettingsDescription": {
"message": "Quy đổi tiền, đơn vị tiền chính, ngôn ngữ, biểu tượng nhận dạng kiểu blockies"
},
"getEther": {
"message": "Nhận Ether"
},
@ -1247,7 +1222,7 @@
"description": "Text representing the MEW path"
},
"hardwareWalletSupportLinkConversion": {
"message": "nhấp vào đây"
"message": "nhấn vào đây"
},
"hardwareWallets": {
"message": "Kết nối với một ví cứng"
@ -1298,18 +1273,11 @@
"importAccountError": {
"message": "Lỗi khi nhập tài khoản."
},
"importAccountLinkText": {
"message": "nhập bằng Cụm mật khẩu khôi phục bí mật"
},
"importAccountMsg": {
"message": " Tài khoản đã nhập sẽ không được liên kết với Cụm mật khẩu khôi phục bí mật cho tài khoản MetaMask đã tạo ban đầu của bạn. Tìm hiểu thêm về các tài khoản đã nhập "
"message": "Tài khoản đã nhập sẽ không được liên kết với Cụm mật khẩu khôi phục bí mật cho tài khoản MetaMask đã tạo ban đầu của bạn. Tìm hiểu thêm về các tài khoản đã nhập"
},
"importAccountSeedPhrase": {
"message": "Nhập một tài khoản bằng Cụm mật khẩu khôi phục bí mật"
},
"importAccountText": {
"message": "hoặc $1",
"description": "$1 represents the text from `importAccountLinkText` as a link"
"message": "Nhập một ví bằng Cụm mật khẩu khôi phục bí mật"
},
"importExistingWalletDescription": {
"message": "Nhập Cụm Mật Khẩu Khôi Phục Bí Mật (còn được gọi là Cụm Mật Khẩu Gốc) mà bạn được cấp khi tạo ví. $1",
@ -1351,7 +1319,7 @@
"description": "$1 is a clickable link with with text defined by the 'here' key"
},
"initialTransactionConfirmed": {
"message": "Mạng đã xác nhận giao dịch ban đầu của bạn. Nhấp vào OK để quay lại."
"message": "Mạng đã xác nhận giao dịch ban đầu của bạn. Nhấn OK để quay lại."
},
"insufficientBalance": {
"message": "Không đủ số dư."
@ -1425,7 +1393,7 @@
"message": "jsDeliver"
},
"jsonFile": {
"message": "Tệp JSON",
"message": "Tập tin JSON",
"description": "format for importing an account"
},
"keystone": {
@ -1444,7 +1412,7 @@
"message": "Mạng thử nghiệm Kovan"
},
"lastConnected": {
"message": "Đã kết nối lần gần đây nhất"
"message": "Đã kết nối lần cuối"
},
"layer1Fees": {
"message": "Phí Lớp 1"
@ -1457,7 +1425,7 @@
"description": "$1 is link to cancel or speed up transactions"
},
"learnMore": {
"message": "Tìm hiểu thêm"
"message": "tìm hiểu thêm"
},
"learnMoreUpperCase": {
"message": "Tìm hiểu thêm"
@ -1517,22 +1485,22 @@
"message": "Có, hãy thiết lập!"
},
"likeToImportTokens": {
"message": "Bạn có muốn thêm những token này không?"
"message": "Bạn có muốn nhập những token này không?"
},
"link": {
"message": "Liên kết"
},
"links": {
"message": "Đường liên kết"
"message": "Liên kết"
},
"loadMore": {
"message": "Nạp thêm"
"message": "Tải thêm"
},
"loading": {
"message": "Đang tải..."
},
"loadingTokens": {
"message": "Đang nạp token..."
"message": "Đang tải token..."
},
"localhost": {
"message": "Máy chủ cục bộ 8545"
@ -1586,25 +1554,25 @@
"description": "$1 is key 'medium' (text: 'Market') separated here so that it can be passed in with bold fontweight"
},
"memo": {
"message": "thư báo"
"message": "bản ghi nhớ"
},
"memorizePhrase": {
"message": "Lưu cụm mật khẩu này."
"message": "Ghi nhớ cụm mật khẩu này."
},
"message": {
"message": "Thông báo"
},
"metaMaskConnectStatusParagraphOne": {
"message": "Giờ đây bạn có thể kiểm soát chi tiết hơn đối với các mối liên kết với tài khoản của mình trong MetaMask."
"message": "Giờ đây, bạn có nhiều quyền kiểm soát hơn đối với các kết nối của tài khoản trong MetaMask."
},
"metaMaskConnectStatusParagraphThree": {
"message": "Nhấp vào đó để quản lý các tài khoản bạn đã kết nối."
"message": "Nhấn vào để quản lý các tài khoản đã kết nối của bạn."
},
"metaMaskConnectStatusParagraphTwo": {
"message": "Nút trạng thái kết nối sẽ hiển thị nếu trang web mà bạn đang truy cập được kết nối với tài khoản bạn đang chọn."
},
"metamaskDescription": {
"message": "Kết nối bạn với Ethereum và Web phi tập trung."
"message": "Kết nối bạn với Ethereum và trang Web phi tập trung."
},
"metamaskSwapsOfflineDescription": {
"message": "Tính năng Hoán đổi trên MetaMask đang được bảo trì. Vui lòng kiểm tra lại sau."
@ -1647,7 +1615,7 @@
"description": "The $1 is the bolded word 'Never', from 'metametricsCommitmentsBoldNever'"
},
"metametricsCommitmentsSendAnonymizedEvents": {
"message": "Gửi các lượt nhấp và xem trang đã được ẩn danh"
"message": "Gửi các lượt nhấn và xem trang đã được ẩn danh"
},
"metametricsHelpImproveMetaMask": {
"message": "Giúp chúng tôi cải thiện MetaMask"
@ -1701,11 +1669,11 @@
"message": "Gửi Phiếu"
},
"needImportFile": {
"message": "Bạn phải chọn tệp để nhập.",
"message": "Bạn phải chọn tập tin để nhập.",
"description": "User is important an account and needs to add a file to continue"
},
"negativeETH": {
"message": "Không thể gửi khoản ETH âm."
"message": "Không thể gửi số lượng ETH âm."
},
"networkDetails": {
"message": "Thông tin về mạng"
@ -1717,7 +1685,7 @@
"message": "BSC"
},
"networkNameDefinition": {
"message": "Tên liên kết với mạng này."
"message": "Tên được liên kết với mạng này."
},
"networkNameEthereum": {
"message": "Ethereum"
@ -1734,9 +1702,6 @@
"networkSettingsChainIdDescription": {
"message": "Mã chuỗi được dùng để ký các giao dịch. Giá trị này phải khớp với mã chuỗi do mạng trả về. Bạn có thể nhập một số thập phân hoặc số thập lục phân bắt đầu bằng “0x” nhưng chúng tôi sẽ hiển thị số ở dạng thập phân."
},
"networkSettingsDescription": {
"message": "Thêm và chỉnh sửa mạng RPC tùy chỉnh"
},
"networkStatus": {
"message": "Trạng thái mạng"
},
@ -1767,20 +1732,17 @@
"message": "Tài khoản mới"
},
"newAccountDetectedDialogMessage": {
"message": "Đã tìm thấy địa chỉ mới! Nhấp vào đây để thêm địa chỉ này vào sổ địa chỉ của bạn."
"message": "Đã tìm thấy địa chỉ mới! Nhấn vào đây để thêm địa chỉ này vào sổ địa chỉ của bạn."
},
"newAccountNumberName": {
"message": "Tài khoản $1",
"description": "Default name of next account to be created on create account screen"
},
"newCollectibleAddFailed": {
"message": "Bộ sưu tập đã không được thêm vì: $1"
},
"newCollectibleAddedMessage": {
"message": "Bộ sưu tập đã được thêm thành công!"
},
"newContact": {
"message": "Người liên hệ mới"
"message": "Địa chỉ liên hệ mới"
},
"newContract": {
"message": "Hợp đồng mới"
@ -1832,7 +1794,7 @@
"message": "Chưa có địa chỉ nào được đặt cho tên này."
},
"noAlreadyHaveSeed": {
"message": "Không, tôi đã có Cụm mật khẩu bí mật"
"message": "Không, tôi đã có Cụm mật khẩu khôi phục bí mật"
},
"noConversionDateAvailable": {
"message": "Hiện Không Có Ngày Chuyển Đổi Tiền Tệ Nào"
@ -1889,7 +1851,7 @@
"description": "The 'call to action' on the button, or link, of the 'Stay secure' notification. Upon clicking, users will be taken to a page about security on the metamask support website."
},
"notifications3Description": {
"message": "Luôn cập nhật các phương pháp bảo mật hay nhất của MetaMask và nhận các mẹo mới nhất về bảo mật từ nhóm hỗ trợ chính thức của MetaMask.",
"message": "Luôn cập nhật các phương pháp bảo mật tốt nhất của MetaMask và nhận các mẹo mới nhất về bảo mật từ nhóm hỗ trợ chính thức của MetaMask.",
"description": "Description of a notification in the 'See What's New' popup. Describes the information they can get on security from the linked support page."
},
"notifications3Title": {
@ -1921,7 +1883,7 @@
"description": "Description of a notification in the 'See What's New' popup. Describes the Ledger support update."
},
"notifications6DescriptionTwo": {
"message": "Bạn có thể kích hoạt tính năng hỗ trợ Ledger Live bằng cách nhấp vào phần Cài đặt > Nâng cao > Sử dụng Ledger Live.",
"message": "Bạn có thể kích hoạt tính năng hỗ trợ Ledger Live bằng cách nhấn vào phần Cài đặt > Nâng cao > Sử dụng Ledger Live.",
"description": "Description of a notification in the 'See What's New' popup. Describes the Ledger support update."
},
"notifications6Title": {
@ -2045,10 +2007,10 @@
"description": "Shown to the user on the confirm screen when they are viewing MetaMask in a popup window but need to connect their ledger via webhid."
},
"optional": {
"message": "Tùy chọn"
"message": "Không bắt buộc"
},
"optionalWithParanthesis": {
"message": "(Tùy chọn)"
"message": "(Không bắt buộc)"
},
"or": {
"message": "hoặc"
@ -2100,6 +2062,10 @@
"permissionRequest": {
"message": "Yêu cầu quyền"
},
"permission_ethereumAccounts": {
"message": "Xem địa chỉ, số dư tài khoản, hoạt động và bắt đầu giao dịch",
"description": "The description for the `eth_accounts` permission"
},
"permissions": {
"message": "Quyền"
},
@ -2137,7 +2103,7 @@
"description": "select this type of file to use to import an account"
},
"privateKeyWarning": {
"message": "Cảnh báo: Tuyệt đối không để lộ mã khóa này. Bất kỳ ai có mã khóa riêng tư của bạn cũng có thể đánh cắp tài sản được giữ trong tài khoản của bạn."
"message": "Cảnh báo: Tuyệt đối không để lộ mã khóa này. Bất kỳ ai có mã khóa riêng tư của bạn cũng có thể đánh cắp tài sản được lưu giữ trong tài khoản của bạn."
},
"privateNetwork": {
"message": "Mạng riêng"
@ -2253,9 +2219,6 @@
"restore": {
"message": "Khôi phục"
},
"restoreAccountWithSeed": {
"message": "Khôi phục tài khoản của bạn bằng cụm mật khẩu khôi phục bí mật"
},
"restoreWalletPreferences": {
"message": "Đã tìm thấy bản sao lưu dữ liệu của bạn từ $1. Bạn có muốn khôi phục các tùy chọn ưu tiên trong ví của mình không?",
"description": "$1 is the date at which the data was backed up"
@ -2291,7 +2254,7 @@
"message": "Lưu"
},
"saveAsCsvFile": {
"message": "Lưu dưới dạng tệp CSV"
"message": "Lưu dưới dạng tập tin CSV"
},
"scanInstructions": {
"message": "Đặt mã QR vào trước máy ảnh"
@ -2315,16 +2278,13 @@
"message": "Tìm kiếm token"
},
"secretBackupPhraseDescription": {
"message": "Cụm mật khẩu sao lưu bí mật giúp việc sao lưu và khôi phục tài khoản trở nên dễ dàng."
"message": "Cụm mật khẩu khôi phục bí mật giúp việc sao lưu và khôi phục tài khoản trở nên dễ dàng."
},
"secretBackupPhraseWarning": {
"message": "CẢNH BÁO: Tuyệt đối không để lộ cụm mật khẩu sao lưu của bạn. Bất kỳ ai có cụm mật khẩu này cũng có thể lấy Ether của bạn vĩnh viễn."
"message": "CẢNH BÁO: Tuyệt đối không để lộ Cụm mật khẩu khôi phục bí mật của bạn. Bất kỳ ai có cụm mật khẩu này cũng có thể lấy Ether của bạn vĩnh viễn."
},
"secretPhrase": {
"message": "Nhập cụm mật khẩu bí mật của bạn vào đây để khôi phục két của bạn."
},
"secretPhraseWarning": {
"message": "Nếu bạn khôi phục bằng cách sử dụng một Cụm Mật Khẩu Khôi Phục Bí Mật khác, thì ví, tài khoản và tài sản hiện tại của bạn sẽ bị xóa khỏi ứng dụng này vĩnh viễn. Không thể hoàn tác hành động này."
"message": "Chỉ tự động tải tài khoản đầu tên trên ví. Sau khi hoàn tất quá trình này, để thêm tài khoản bổ sung, hãy nhấn vào trình đơn thả xuống và chọn Tạo tài khoản."
},
"secretRecoveryPhrase": {
"message": "Cụm Mật Khẩu Khôi Phục Bí Mật"
@ -2335,9 +2295,6 @@
"securityAndPrivacy": {
"message": "Bảo mật và quyền riêng tư"
},
"securitySettingsDescription": {
"message": "Các cài đặt quyền riêng tư và Cụm mật khẩu khôi phục bí mật của ví"
},
"seedPhraseConfirm": {
"message": "Xác nhận Cụm Mật Khẩu Khôi Phục Bí Mật"
},
@ -2360,25 +2317,25 @@
"message": "Lưu giữ trong hộp ký gửi an toàn."
},
"seedPhraseIntroSidebarBulletTwo": {
"message": "Lưu giữ trong két an toàn."
"message": "Lưu giữ trong két an toàn của ngân hàng."
},
"seedPhraseIntroSidebarCopyOne": {
"message": "Cụm mật khẩu khôi phục bí mật là “chìa khóa chính” để truy cập ví và số tiền của bạn."
"message": "Cụm mật khẩu khôi phục bí mật gồm 12 từ là “chìa khóa chính” để truy cập ví và số tiền của bạn"
},
"seedPhraseIntroSidebarCopyThree": {
"message": "Nếu ai đó hỏi bạn cụm mật khẩu khôi phục bí mật, thì họ đang cố gắng lừa đảo bạn."
"message": "Nếu ai đó hỏi bạn cụm mật khẩu khôi phục bí mật, thì họ đang cố gắng lừa đảo và đánh cắp tiền trong ví của bạn"
},
"seedPhraseIntroSidebarCopyTwo": {
"message": "Đừng bao giờ cho ai biết cụm mật khẩu khôi phục bí mật, kể cả MetaMask!"
},
"seedPhraseIntroSidebarTitleOne": {
"message": "Cụm mật khẩu khôi phục là gì?"
"message": "Cụm mật khẩu khôi phục bí mật là gì?"
},
"seedPhraseIntroSidebarTitleThree": {
"message": "Tôi có nên cho ai biết cụm mật khẩu khôi phục bí mật của mình không?"
},
"seedPhraseIntroSidebarTitleTwo": {
"message": "Tôi lưu cụm mật khẩu khôi phục của mình bằng cách nào?"
"message": "Tôi lưu Cụm mật khẩu khôi phục bí mật của mình bằng cách nào?"
},
"seedPhraseIntroTitle": {
"message": "Bảo mật cho ví của bạn"
@ -2405,7 +2362,7 @@
"message": "Chọn phí gas cao hơn để tăng tốc quá trình xử lý giao dịch của bạn.*"
},
"selectAccounts": {
"message": "Chọn (các) tài khoản"
"message": "Chọn (các) tài khoản để sử dụng trên trang web này"
},
"selectAll": {
"message": "Chọn tất cả"
@ -2420,13 +2377,13 @@
"message": "Vui lòng chọn từng cụm mật khẩu theo thứ tự để đảm bảo sự chính xác."
},
"selectHdPath": {
"message": "Chọn đường dẫn phân cấp xác định"
"message": "Chọn đường dẫn HD"
},
"selectNFTPrivacyPreference": {
"message": "Bật phát hiện NFT trong phần Cài Đặt"
},
"selectPathHelp": {
"message": "Nếu bạn không thấy các tài khoản Ledger hiện có của bạn dưới đây, hãy thử chuyển đường dẫn thành \"Legacy (MEW / MyCrypto)\""
"message": "Nếu bạn không thấy các tài khoản như mong đợi, hãy chuyển sang đường dẫn HD."
},
"selectType": {
"message": "Chọn loại"
@ -2454,9 +2411,6 @@
"message": "Gửi $1",
"description": "$1 represents the native currency symbol for the current network (e.g. ETH or BNB)"
},
"separateEachWord": {
"message": "Phân tách mỗi từ bằng một dấu cách"
},
"setAdvancedPrivacySettings": {
"message": "Thiết lập cài đặt quyền riêng tư nâng cao"
},
@ -2473,13 +2427,13 @@
"message": "Quyền kiểm soát gas nâng cao"
},
"showAdvancedGasInlineDescription": {
"message": "Chọn tùy chọn này để hiển thị các quyền kiểm soát giá và giới hạn ngay trên màn hình gửi và xác nhận."
"message": "Chọn tùy chọn này để hiển thị các quyền kiểm soát giá gas và giới hạn ngay trên màn hình gửi và xác nhận."
},
"showFiatConversionInTestnets": {
"message": "Hiển thị tỷ lệ quy đổi trên các mạng thử nghiệm"
},
"showFiatConversionInTestnetsDescription": {
"message": "Chọn tùy chọn này để hiển thị tỷ lệ quy đổi pháp định trên Mạng thử nghiệm"
"message": "Chọn tùy chọn này để hiển thị tỷ lệ quy đổi tiền pháp định trên mạng thử nghiệm"
},
"showHexData": {
"message": "Hiển thị dữ liệu thập lục phân"
@ -2512,7 +2466,7 @@
"message": "Hiển thị các mạng thử nghiệm"
},
"showTestnetNetworksDescription": {
"message": "Chọn cái này để hiển thị các mạng thử nghiệm trong danh sách mạng"
"message": "Chọn tùy chọn này để hiển thị các mạng thử nghiệm trong danh sách mạng"
},
"sigRequest": {
"message": "Yêu cầu chữ ký"
@ -2521,7 +2475,7 @@
"message": "Ký"
},
"signNotice": {
"message": "Việc ký thông báo này có thể gây ra \nảnh hưởng nguy hiểm ngoài ý muốn. Chỉ ký những thông báo từ \ncác trang web mà bạn hoàn toàn tin tưởng bằng toàn bộ tài khoản của mình.\n Chúng tôi sẽ loại bỏ phương thức nguy hiểm này trong phiên bản sau này. "
"message": "Việc ký vào thông báo này có thể gây nguy hiểm. Chữ ký này có thể được dùng để thực hiện bất kỳ hành động nào thay mặt cho tài khoản của bạn, bao gồm cả cấp toàn quyền kiểm soát tài khoản và tất cả tài sản bên trong cho trang web yêu cầu. Chỉ ký vào thông báo này nếu bạn biết mình đang làm gì hoặc hoàn toàn tin tưởng trang web yêu cầu."
},
"signatureRequest": {
"message": "Yêu cầu chữ ký"
@ -2621,32 +2575,32 @@
"message": "Đảm bảo Lattice1 của bạn đã sẵn sàng để kết nối"
},
"step1LatticeWalletMsg": {
"message": "Bạn có thể kết nối MetaMask với Lattice1 sau khi thiết bị đã được thiết lập và trực tuyến. Mở khóa thiết bị và chuẩn bị sẵn ID Thiết Bị. Để biết thêm về cách sử dụng ví lạnh, $1",
"message": "Bạn có thể kết nối MetaMask với Lattice1 sau khi thiết bị đã được thiết lập và trực tuyến. Mở khóa thiết bị và chuẩn bị sẵn ID Thiết Bị. Để biết thêm về cách sử dụng ví cứng, $1",
"description": "$1 represents the `hardwareWalletSupportLinkConversion` localization key"
},
"step1LedgerWallet": {
"message": "Tải ứng dụng Ledger xuống"
"message": "Tải về ứng dụng Ledger"
},
"step1LedgerWalletMsg": {
"message": "Tải xuống, thiết lập và nhập mật khẩu của bạn để mở khóa $1.",
"message": "Tải về, thiết lập và nhập mật khẩu của bạn để mở khóa $1.",
"description": "$1 represents the `ledgerLiveApp` localization value"
},
"step1TrezorWallet": {
"message": "Kết nối ví Trezor"
"message": "Cắm ví Trezor"
},
"step1TrezorWalletMsg": {
"message": "Kết nối ví của bạn trực tiếp với máy tính. Để biết thêm thông tin về cách sử dụng thiết bị ví cứng của bạn, $1",
"description": "$1 represents the `hardwareWalletSupportLinkConversion` localization key"
},
"step2LedgerWallet": {
"message": "Kết nối ví Ledger"
"message": "Cắm ví Ledger"
},
"step2LedgerWalletMsg": {
"message": "Kết nối ví của bạn trực tiếp với máy tính. Mở khóa Ledger của bạn và mở ứng dụng Ethereum. Để biết thêm thông tin về cách sử dụng thiết bị ví cứng của bạn, $1.",
"description": "$1 represents the `hardwareWalletSupportLinkConversion` localization key"
},
"storePhrase": {
"message": "Lưu cụm mật khẩu này trong trình quản lý mật khẩu chẳng hạn như 1Password."
"message": "Lưu trữ cụm mật khẩu này trong trình quản lý mật khẩu chẳng hạn như 1Password."
},
"submit": {
"message": "Gửi"
@ -2824,15 +2778,11 @@
"swapQuoteDetailsSlippageInfo": {
"message": "Khi giá giữa thời điểm đặt lệnh và thời điểm xác nhận lệnh thay đổi, hiện tượng này được gọi là \"trượt giá\". Giao dịch hoán đổi của bạn sẽ tự động hủy nếu mức trượt giá vượt quá \"mức trượt giá cho phép\" đã đặt."
},
"swapQuoteNofN": {
"message": "Báo giá $1/$2",
"description": "A count of loaded quotes shown to the user while they are waiting for quotes to be fetched. $1 is the number of quotes already loaded, and $2 is the total number of quotes to load."
},
"swapQuoteSource": {
"message": "Nguồn báo giá"
},
"swapQuotesExpiredErrorDescription": {
"message": "Vui lòng yêu cầu báo giá mới để biết các mức tỷ lệ mới nhất."
"message": "Vui lòng yêu cầu báo giá mới để biết các tỷ giá mới nhất."
},
"swapQuotesExpiredErrorTitle": {
"message": "Hết thời gian chờ báo giá"
@ -2844,10 +2794,10 @@
"message": "Không có báo giá"
},
"swapRate": {
"message": "Tỷ lệ"
"message": "Tỷ giá"
},
"swapReceiving": {
"message": "Đang nhận"
"message": "Nhận"
},
"swapReceivingInfoTooltip": {
"message": "Đây là giá trị ước tính. Số tiền chính xác phụ thuộc vào mức trượt giá."
@ -2856,7 +2806,7 @@
"message": "Yêu cầu báo giá"
},
"swapReviewSwap": {
"message": "Xem xét giao dịch hoán đổi"
"message": "Xem lại giao dịch hoán đổi"
},
"swapSearchForAToken": {
"message": "Tìm kiếm token"
@ -2880,7 +2830,7 @@
"message": "Nguồn thanh khoản"
},
"swapSourceInfo": {
"message": "Chúng tôi tìm kiếm nhiều nguồn thanh khoản (các sàn giao dịch, trình tổng hợp và nhà tạo lập thị trường) để tìm được mức tỷ lệ tốt nhất và phí mạng thấp nhất."
"message": "Chúng tôi tìm kiếm nhiều nguồn thanh khoản (các sàn giao dịch, trình tổng hợp và nhà tạo lập thị trường) để tìm được mức tỷ giá tốt nhất và phí mạng thấp nhất."
},
"swapSuggested": {
"message": "Hoán đổi gợi ý"
@ -2997,16 +2947,16 @@
"message": "Đang đồng bộ"
},
"syncWithMobile": {
"message": "Đồng bộ hóa với thiết bị di động"
"message": "Đồng bộ với thiết bị di động"
},
"syncWithMobileBeCareful": {
"message": "Đảm bảo rằng không có ai nhìn vào màn hình của bạn khi quét mã này"
},
"syncWithMobileComplete": {
"message": "Đã đồng bộ hóa thành công dữ liệu của bạn. Tận hưởng ứng dụng MetaMask trên thiết bị di động!"
"message": "Đã đồng bộ thành công dữ liệu của bạn. Tận hưởng ứng dụng MetaMask trên thiết bị di động!"
},
"syncWithMobileDesc": {
"message": "Bạn có thể đồng bộ hóa tài khoản và thông tin của mình với thiết bị di động. Mở ứng dụng MetaMask trên thiết bị di động, chuyển đến phần \"Cài đặt\" và nhấn vào \"Đồng bộ hóa với tiện ích trình duyệt\""
"message": "Bạn có thể đồng bộ tài khoản và thông tin của mình với thiết bị di động. Mở ứng dụng MetaMask trên thiết bị di động, chuyển đến phần \"Cài đặt\" và nhấn vào \"Đồng bộ với tiện ích trình duyệt\""
},
"syncWithMobileDescNewUsers": {
"message": "Nếu mới mở ứng dụng MetaMask trên thiết bị di động lần đầu tiên, bạn chỉ cần làm theo các bước hướng dẫn trên điện thoại."
@ -3015,16 +2965,16 @@
"message": "Quét mã này bằng ứng dụng MetaMask trên thiết bị di động"
},
"syncWithMobileTitle": {
"message": "Đồng bộ hóa với thiết bị di động"
"message": "Đồng bộ với thiết bị di động"
},
"syncWithThreeBox": {
"message": "Đồng bộ hóa dữ liệu với 3Box (thử nghiệm)"
"message": "Đồng bộ dữ liệu với 3Box (thử nghiệm)"
},
"syncWithThreeBoxDescription": {
"message": "Bật để sao lưu các tùy chọn cài đặt của bạn với 3Box. Tính năng này hiện đang trong giai đoạn thử nghiệm; bạn tự chịu rủi ro khi sử dụng."
},
"syncWithThreeBoxDisabled": {
"message": "Đã tắt 3Box do có lỗi xảy ra trong quá trình đồng bộ hóa ban đầu"
"message": "Đã tắt 3Box do có lỗi xảy ra trong quá trình đồng bộ ban đầu"
},
"terms": {
"message": "Điều khoản sử dụng"
@ -3065,7 +3015,7 @@
"message": "Địa chỉ hợp đồng token"
},
"tokenDecimalFetchFailed": {
"message": "Cần có vị trí thập phân của token."
"message": "Cần có số thập phân của token."
},
"tokenDetectionAnnouncement": {
"message": "Mới! Tính năng phát hiện token được cải tiến hiện đã có sẵn trên Mạng chính thức của Ethereum dưới dạng một tính năng thử nghiệm. $1"
@ -3083,7 +3033,7 @@
"message": "giao dịch"
},
"transactionCancelAttempted": {
"message": "Đã cố gắng hủy giao dịch với mức phí gas $1 lúc $2"
"message": "Đã cố gắng hủy giao dịch với mức phí gas ước tính $1 lúc $2"
},
"transactionCancelSuccess": {
"message": "Đã hủy thành công giao dịch lúc $2"
@ -3104,7 +3054,7 @@
"message": "Đã xác minh hợp đồng trên $1"
},
"transactionDecodingUnsupportedNetworkError": {
"message": "Giải mã giao dịch hiện không khả dụng cho chainId $1"
"message": "Giải mã giao dịch hiện không khả dụng cho mã chuỗi $1"
},
"transactionDetailDappGasMoreInfo": {
"message": "Trang web gợi ý"
@ -3173,10 +3123,10 @@
"message": "Tổng Phí Gas"
},
"transactionResubmitted": {
"message": "Đã gửi lại giao dịch với mức phí gas tăng lên $1 lúc $2"
"message": "Đã gửi lại giao dịch với mức phí gas ước tính tăng lên $1 lúc $2"
},
"transactionSubmitted": {
"message": "Đã gửi giao dịch với mức phí gas $1 lúc $2."
"message": "Đã gửi giao dịch với mức phí gas ước tính $1 lúc $2."
},
"transactionUpdated": {
"message": "Đã cập nhật giao dịch lúc $2."
@ -3266,7 +3216,7 @@
"description": "This is an error message we show the user if they attempt to send a collectible asset type, for which currently don't support sending"
},
"updatedWithDate": {
"message": "Đã cập nhật vào $1"
"message": "Đã cập nhật $1"
},
"urlErrorMsg": {
"message": "URL phải có tiền tố HTTP/HTTPS phù hợp."
@ -3284,7 +3234,7 @@
"message": "Sử dụng tính năng Phát hiện lừa đảo"
},
"usePhishingDetectionDescription": {
"message": "Hiển thị cảnh báo đối với các miền lừa đảo nhắm đến người dùng Ethereum"
"message": "Hiển thị cảnh báo đối với các tên miền lừa đảo nhắm đến người dùng Ethereum"
},
"useTokenDetection": {
"message": "Sử Dụng Phát Hiện Token"
@ -3299,7 +3249,7 @@
"message": "Tên người dùng"
},
"verifyThisTokenDecimalOn": {
"message": "Không tìm thấy vị trí thập phân của token trên $1",
"message": "Không tìm thấy số thập phân của token trên $1",
"description": "Points the user to etherscan as a place they can verify information about a token. $1 is replaced with the translation for \"etherscan\""
},
"verifyThisTokenOn": {
@ -3317,7 +3267,7 @@
"message": "Xem toàn bộ chi tiết"
},
"viewContact": {
"message": "Xem người liên hệ"
"message": "Xem địa chỉ liên hệ"
},
"viewFullTransactionDetails": {
"message": "Xem chi tiết giao dịch đầy đủ"
@ -3369,9 +3319,6 @@
"walletCreationSuccessTitle": {
"message": "Tạo ví thành công"
},
"walletSeedRestore": {
"message": "Cụm mật khẩu khôi phục bí mật của ví"
},
"web3ShimUsageNotification": {
"message": "Chúng tôi nhận thấy rằng trang web hiện tại đã cố dùng API window.web3 đã bị xóa. Nếu trang web có vẻ như đã bị lỗi, vui lòng nhấp vào $1 để biết thêm thông tin.",
"description": "$1 is a clickable link."
@ -3426,13 +3373,13 @@
"message": "Có, hãy thử"
},
"youNeedToAllowCameraAccess": {
"message": "Bạn cần cho phép truy cập vào camera để sử dụng tính năng này."
"message": "Bạn cần cho phép truy cập vào máy ảnh để sử dụng tính năng này."
},
"youSign": {
"message": "Bạn đang ký"
},
"yourPrivateSeedPhrase": {
"message": "Cụm mật khẩu bí mật, riêng tư của bạn"
"message": "Cụm mật khẩu khôi phục bí mật riêng tư của bạn"
},
"zeroGasPriceOnSpeedUpError": {
"message": "Giá gas bằng 0 khi tăng tốc"

@ -47,9 +47,6 @@
"about": {
"message": "关于"
},
"aboutSettingsDescription": {
"message": "版本、支持中心和联系方式。"
},
"acceleratingATransaction": {
"message": "* 设定更高燃料价格,可以加快交易完成进度,提高网络快速处理机率,但无法保证每次均能够实现提速。"
},
@ -185,9 +182,6 @@
"advancedPriorityFeeToolTip": {
"message": "优先收费(又称“矿工费”)直接向矿工支付,并鼓励他们确定您的交易的优先次序。"
},
"advancedSettingsDescription": {
"message": "访问开发者功能,下载状态日志,重置账户,设置测试网和自定义 RPC。"
},
"affirmAgree": {
"message": "我同意"
},
@ -212,9 +206,6 @@
"alerts": {
"message": "提醒"
},
"alertsSettingsDescription": {
"message": "启用或禁用每个提醒"
},
"allowExternalExtensionTo": {
"message": "允许这个外部扩展到:"
},
@ -371,9 +362,6 @@
"message": "通过 $1 查看账户",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "使用 Blockies Identicon 图标头像"
},
"browserNotSupported": {
"message": "您的浏览器不支持该功能……"
},
@ -551,9 +539,6 @@
"contacts": {
"message": "联系人"
},
"contactsSettingsDescription": {
"message": "添加、编辑、删除和管理您的联系人。"
},
"continue": {
"message": "继续"
},
@ -1017,10 +1002,6 @@
"ethGasPriceFetchWarning": {
"message": "由于目前主要的燃料估算服务不可用,因此提供了备用燃料价格。"
},
"eth_accounts": {
"message": "查看您允许的账户的地址(必填)",
"description": "The description for the `eth_accounts` permission"
},
"ethereumPublicAddress": {
"message": "以太坊 Ethereum 公开地址"
},
@ -1039,9 +1020,6 @@
"experimental": {
"message": "实验性"
},
"experimentalSettingsDescription": {
"message": "代币检测及更多"
},
"exportPrivateKey": {
"message": "导出私钥"
},
@ -1201,7 +1179,7 @@
"message": "燃料使用"
},
"gdprMessage": {
"message": "这些数据是汇总的,因此,根据《GDPR 通用数据保护条例》(EU)2016/679,这些数据是匿名的。有关我们隐私惯例的更多信息,请参见我们的 $1。",
"message": "这些数据是汇总的,因此,根据《GDPR 通用数据保护条例》(EU) 2016/679,这些数据是匿名的。有关我们隐私惯例的更多信息,请参见我们的 $1。",
"description": "$1 refers to the gdprMessagePrivacyPolicy message, the translation of which is meant to be used exclusively in the context of gdprMessage"
},
"gdprMessagePrivacyPolicy": {
@ -1211,9 +1189,6 @@
"general": {
"message": "通用"
},
"generalSettingsDescription": {
"message": "货币转换、主要价格单位、语言和 Blockies Identicon 图标头像"
},
"getEther": {
"message": "获取 Ether"
},
@ -1298,19 +1273,12 @@
"importAccountError": {
"message": "导入帐户时出错。"
},
"importAccountLinkText": {
"message": "使用账户助记词导入"
},
"importAccountMsg": {
"message": "导入的账户将不会与最初创建的 MetaMask 账户助记词相关联。了解更多有关导入账户的信息 。"
},
"importAccountSeedPhrase": {
"message": "使用账户助记词导入账户"
},
"importAccountText": {
"message": "或 $1",
"description": "$1 represents the text from `importAccountLinkText` as a link"
},
"importExistingWalletDescription": {
"message": "输入您创建$1钱包时提供的保密恢复短语(或Seed Phrase)。",
"description": "$1 is the words 'Learn More' from key 'learnMore', separated here so that it can be added as a link"
@ -1734,9 +1702,6 @@
"networkSettingsChainIdDescription": {
"message": "链 ID 用于签署交易。它必须与网络返回的链 ID 相匹配。您可以输入十进制或'0x'前缀的十六进制数字,但我们将以十进制显示。"
},
"networkSettingsDescription": {
"message": "添加和编辑自定义 RPC 网络"
},
"networkStatus": {
"message": "网络状态"
},
@ -1773,9 +1738,6 @@
"message": "账户 $1",
"description": "Default name of next account to be created on create account screen"
},
"newCollectibleAddFailed": {
"message": "未添加收藏,因为:$1"
},
"newCollectibleAddedMessage": {
"message": "收藏已成功添加!"
},
@ -2100,6 +2062,10 @@
"permissionRequest": {
"message": "权限请求"
},
"permission_ethereumAccounts": {
"message": "查看您允许的账户的地址(必填)",
"description": "The description for the `eth_accounts` permission"
},
"permissions": {
"message": "权限"
},
@ -2253,9 +2219,6 @@
"restore": {
"message": "恢复"
},
"restoreAccountWithSeed": {
"message": "使用账户助记词恢复您的账户"
},
"restoreWalletPreferences": {
"message": "已找到于 $1 的数据备份。您想恢复您的钱包设置吗?",
"description": "$1 is the date at which the data was backed up"
@ -2323,9 +2286,6 @@
"secretPhrase": {
"message": "只有这个钱包上的第一个帐户将自动加载。 完成此流程后,点击下拉菜单,然后选择创建账户。"
},
"secretPhraseWarning": {
"message": "如果您使用另一个账户助记词来还原,您当前的钱包、帐户和资产将永久从这个应用中移除。 此操作不能撤消。"
},
"secretRecoveryPhrase": {
"message": "账户助记词"
},
@ -2335,9 +2295,6 @@
"securityAndPrivacy": {
"message": "安全与隐私"
},
"securitySettingsDescription": {
"message": "隐私设置和账户助记词"
},
"seedPhraseConfirm": {
"message": "请确认账户助记词"
},
@ -2454,9 +2411,6 @@
"message": "正在发送$1",
"description": "$1 represents the native currency symbol for the current network (e.g. ETH or BNB)"
},
"separateEachWord": {
"message": "用空格分隔每个单词"
},
"setAdvancedPrivacySettings": {
"message": "设置高级隐私设置"
},
@ -2824,10 +2778,6 @@
"swapQuoteDetailsSlippageInfo": {
"message": "如果在您下订单和确认订单之间的价格发生了变化,这就叫做\"滑点\"。如果滑点超过您的\"最大滑点\"设置,您的兑换将自动取消。"
},
"swapQuoteNofN": {
"message": "报价 $1 / $2",
"description": "A count of loaded quotes shown to the user while they are waiting for quotes to be fetched. $1 is the number of quotes already loaded, and $2 is the total number of quotes to load."
},
"swapQuoteSource": {
"message": "报价来源"
},
@ -3369,9 +3319,6 @@
"walletCreationSuccessTitle": {
"message": "钱包创建成功"
},
"walletSeedRestore": {
"message": "钱包账户助记词"
},
"web3ShimUsageNotification": {
"message": "我们发现当前的网站尝试使用已经删除的 window.web3 API。如果这个网站网站已经无法正常使用,请点击 $1 获取更多信息。",
"description": "$1 is a clickable link."

@ -2,9 +2,6 @@
"about": {
"message": "關於"
},
"aboutSettingsDescription": {
"message": "版本,支援中心,以及聯絡資訊。"
},
"acceleratingATransaction": {
"message": "* 提高交易費 Gas 價格將可加速處理時間,但不保證會有顯著效果"
},
@ -59,9 +56,6 @@
"advancedOptions": {
"message": "進階選項"
},
"advancedSettingsDescription": {
"message": "存取開發者功能,下載狀態日誌,重設帳號,設定測試網及自訂 PRC。"
},
"amount": {
"message": "數量"
},
@ -145,9 +139,6 @@
"message": "在 $1 觀看帳號 ",
"description": "$1 replaced by URL for custom block explorer"
},
"blockiesIdenticon": {
"message": "使用像素風格代表圖案"
},
"browserNotSupported": {
"message": "您的瀏覽器尚未支援..."
},
@ -420,9 +411,6 @@
"general": {
"message": "一般"
},
"generalSettingsDescription": {
"message": "貨幣轉換,主要貨幣,語言,區塊鏈哈希頭像"
},
"getEther": {
"message": "取得以太幣"
},
@ -591,9 +579,6 @@
"networkName": {
"message": "網路名稱"
},
"networkSettingsDescription": {
"message": "新增並編輯自訂 RPC 網路"
},
"networks": {
"message": "網路"
},
@ -762,9 +747,6 @@
"resetAccountDescription": {
"message": "重置帳戶將清除您的交易紀錄"
},
"restoreAccountWithSeed": {
"message": "透過助憶詞還原您的帳戶"
},
"revealSeedWords": {
"message": "顯示助憶詞"
},
@ -816,9 +798,6 @@
"securityAndPrivacy": {
"message": "安全&隱私"
},
"securitySettingsDescription": {
"message": "隱私設定及錢包助記詞"
},
"seedPhrasePlaceholder": {
"message": "單詞之間請用空白分隔"
},
@ -849,9 +828,6 @@
"sendTokens": {
"message": "發送代幣"
},
"separateEachWord": {
"message": "單詞之間請以空白間隔"
},
"settings": {
"message": "設定"
},

@ -0,0 +1,4 @@
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.28348 10.8571V12H0.140625V10.8571H3.28348ZM6.42634 9.71429C6.5811 9.71429 6.71503 9.77083 6.82813 9.88393C6.94122 9.99702 6.99777 10.131 6.99777 10.2857V12.5714C6.99777 12.7262 6.94122 12.8601 6.82813 12.9732C6.71503 13.0863 6.5811 13.1429 6.42634 13.1429H4.14062C3.98586 13.1429 3.85193 13.0863 3.73884 12.9732C3.62574 12.8601 3.5692 12.7262 3.5692 12.5714V10.2857C3.5692 10.131 3.62574 9.99702 3.73884 9.88393C3.85193 9.77083 3.98586 9.71429 4.14062 9.71429H6.42634ZM7.85491 6.28571V7.42857H0.140625V6.28571H7.85491ZM2.14062 1.71428V2.85714H0.140625V1.71428H2.14062ZM13.8549 10.8571V12H7.28348V10.8571H13.8549ZM5.28348 0.571428C5.43824 0.571428 5.57217 0.627976 5.68527 0.741071C5.79836 0.854166 5.85491 0.988095 5.85491 1.14286V3.42857C5.85491 3.58333 5.79836 3.71726 5.68527 3.83036C5.57217 3.94345 5.43824 4 5.28348 4H2.99777C2.84301 4 2.70908 3.94345 2.59598 3.83036C2.48289 3.71726 2.42634 3.58333 2.42634 3.42857V1.14286C2.42634 0.988095 2.48289 0.854166 2.59598 0.741071C2.70908 0.627976 2.84301 0.571428 2.99777 0.571428H5.28348ZM10.9978 5.14286C11.1525 5.14286 11.2865 5.1994 11.3996 5.3125C11.5126 5.42559 11.5692 5.55952 11.5692 5.71429V8C11.5692 8.15476 11.5126 8.28869 11.3996 8.40179C11.2865 8.51488 11.1525 8.57143 10.9978 8.57143H8.71205C8.55729 8.57143 8.42336 8.51488 8.31027 8.40179C8.19717 8.28869 8.14062 8.15476 8.14062 8V5.71429C8.14062 5.55952 8.19717 5.42559 8.31027 5.3125C8.42336 5.1994 8.55729 5.14286 8.71205 5.14286H10.9978ZM13.8549 6.28571V7.42857H11.8549V6.28571H13.8549ZM13.8549 1.71428V2.85714H6.14063V1.71428H13.8549Z" fill="#24292E"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -0,0 +1,4 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 15.5714C8.09524 15.5714 8.14286 15.5238 8.14286 15.4286C8.14286 15.3333 8.09524 15.2857 8 15.2857C7.64881 15.2857 7.34524 15.1577 7.08929 14.9018C6.83929 14.6518 6.71429 14.3512 6.71429 14C6.71429 13.9048 6.66667 13.8571 6.57143 13.8571C6.47619 13.8571 6.42857 13.9048 6.42857 14C6.42857 14.4345 6.58036 14.8036 6.88393 15.1071C7.19345 15.4167 7.56548 15.5714 8 15.5714ZM15.4286 12.8571C15.4286 13.1667 15.3155 13.4345 15.0893 13.6607C14.8631 13.8869 14.5952 14 14.2857 14H10.2857C10.2857 14.631 10.0625 15.1696 9.61607 15.6161C9.16964 16.0625 8.63095 16.2857 8 16.2857C7.36905 16.2857 6.83036 16.0625 6.38393 15.6161C5.9375 15.1696 5.71429 14.631 5.71429 14H1.71429C1.40476 14 1.1369 13.8869 0.910714 13.6607C0.684524 13.4345 0.571429 13.1667 0.571429 12.8571C0.869048 12.6071 1.13988 12.3452 1.38393 12.0714C1.62798 11.7976 1.88095 11.4435 2.14286 11.0089C2.40476 10.5685 2.625 10.0952 2.80357 9.58929C2.9881 9.08333 3.1369 8.47024 3.25 7.75C3.36905 7.02976 3.42857 6.25595 3.42857 5.42857C3.42857 4.52381 3.77679 3.68452 4.47321 2.91071C5.16964 2.13095 6.08333 1.65774 7.21429 1.49107C7.16667 1.37798 7.14286 1.2619 7.14286 1.14286C7.14286 0.904762 7.22619 0.702381 7.39286 0.535714C7.55952 0.369047 7.76191 0.285713 8 0.285713C8.2381 0.285713 8.44048 0.369047 8.60714 0.535714C8.77381 0.702381 8.85714 0.904762 8.85714 1.14286C8.85714 1.2619 8.83333 1.37798 8.78572 1.49107C9.91667 1.65774 10.8304 2.13095 11.5268 2.91071C12.2232 3.68452 12.5714 4.52381 12.5714 5.42857C12.5714 6.25595 12.628 7.02976 12.7411 7.75C12.8601 8.47024 13.0089 9.08333 13.1875 9.58929C13.372 10.0952 13.5952 10.5685 13.8571 11.0089C14.119 11.4435 14.372 11.7976 14.6161 12.0714C14.8601 12.3452 15.131 12.6071 15.4286 12.8571Z" fill="#24292E"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

@ -0,0 +1,4 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.2935 11.3393C11.2935 11 11.2757 10.6815 11.24 10.3839C11.2102 10.0863 11.1477 9.78869 11.0525 9.49107C10.9632 9.1875 10.8471 8.93155 10.7042 8.72321C10.5614 8.50893 10.3709 8.33631 10.1328 8.20536C9.89472 8.06845 9.62388 8 9.32031 8C9.2846 8.02381 9.18341 8.08631 9.01674 8.1875C8.85603 8.28274 8.73103 8.35417 8.64174 8.40179C8.55246 8.4494 8.43043 8.50893 8.27567 8.58036C8.12686 8.65179 7.98103 8.70238 7.83817 8.73214C7.70127 8.7619 7.56436 8.77679 7.42746 8.77679C7.29055 8.77679 7.15067 8.7619 7.00781 8.73214C6.87091 8.70238 6.72507 8.65179 6.57031 8.58036C6.4215 8.50893 6.30246 8.4494 6.21317 8.40179C6.12388 8.35417 5.99591 8.28274 5.82924 8.1875C5.66853 8.08631 5.57031 8.02381 5.5346 8C5.23103 8 4.96019 8.06845 4.7221 8.20536C4.484 8.33631 4.29353 8.50893 4.15067 8.72321C4.00781 8.93155 3.88876 9.1875 3.79353 9.49107C3.70424 9.78869 3.64174 10.0863 3.60603 10.3839C3.57626 10.6815 3.56138 11 3.56138 11.3393C3.56138 11.7738 3.68638 12.1369 3.93638 12.4286C4.18638 12.7143 4.49293 12.8571 4.85603 12.8571H9.99888C10.362 12.8571 10.6685 12.7143 10.9185 12.4286C11.1685 12.1369 11.2935 11.7738 11.2935 11.3393ZM9.74888 6.03571C9.74888 5.39286 9.51972 4.84524 9.06138 4.39286C8.609 3.94048 8.06436 3.71428 7.42746 3.71428C6.79055 3.71428 6.24293 3.94048 5.7846 4.39286C5.33222 4.84524 5.10603 5.39286 5.10603 6.03571C5.10603 6.67262 5.33222 7.21726 5.7846 7.66964C6.24293 8.12202 6.79055 8.34821 7.42746 8.34821C8.06436 8.34821 8.609 8.12202 9.06138 7.66964C9.51972 7.21726 9.74888 6.67262 9.74888 6.03571ZM15.4275 10.8571V12.5714C15.4275 12.6548 15.4007 12.7232 15.3471 12.7768C15.2935 12.8304 15.2251 12.8571 15.1417 12.8571H14.2846V14.8571C14.2846 15.25 14.1447 15.5863 13.865 15.8661C13.5852 16.1458 13.2489 16.2857 12.856 16.2857H1.99888C1.60603 16.2857 1.26972 16.1458 0.989955 15.8661C0.710193 15.5863 0.570312 15.25 0.570312 14.8571V1.71428C0.570312 1.32143 0.710193 0.985118 0.989955 0.705357C1.26972 0.425594 1.60603 0.285713 1.99888 0.285713H12.856C13.2489 0.285713 13.5852 0.425594 13.865 0.705357C14.1447 0.985118 14.2846 1.32143 14.2846 1.71428V3.71428H15.1417C15.2251 3.71428 15.2935 3.74107 15.3471 3.79464C15.4007 3.84821 15.4275 3.91667 15.4275 4V5.71428C15.4275 5.79762 15.4007 5.86607 15.3471 5.91964C15.2935 5.97321 15.2251 6 15.1417 6H14.2846V7.14286H15.1417C15.2251 7.14286 15.2935 7.16964 15.3471 7.22321C15.4007 7.27679 15.4275 7.34524 15.4275 7.42857V9.14286C15.4275 9.22619 15.4007 9.29464 15.3471 9.34821C15.2935 9.40179 15.2251 9.42857 15.1417 9.42857H14.2846V10.5714H15.1417C15.2251 10.5714 15.2935 10.5982 15.3471 10.6518C15.4007 10.7054 15.4275 10.7738 15.4275 10.8571Z" fill="#24292E"/>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

@ -0,0 +1,5 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.2042 13.2143C14.5376 13.744 14.6001 14.1964 14.3917 14.5714C14.1894 14.9524 13.7727 15.1429 13.1417 15.1429H2.85603C2.22507 15.1429 1.80543 14.9524 1.5971 14.5714C1.39472 14.1964 1.46019 13.744 1.79353 13.2143L6.2846 6.13393V2.57143H5.71317C5.55841 2.57143 5.42448 2.51488 5.31138 2.40178C5.19829 2.28869 5.14174 2.15476 5.14174 2C5.14174 1.84524 5.19829 1.71131 5.31138 1.59821C5.42448 1.48512 5.55841 1.42857 5.71317 1.42857H10.2846C10.4394 1.42857 10.5733 1.48512 10.6864 1.59821C10.7995 1.71131 10.856 1.84524 10.856 2C10.856 2.15476 10.7995 2.28869 10.6864 2.40178C10.5733 2.51488 10.4394 2.57143 10.2846 2.57143H9.71317V6.13393L14.2042 13.2143ZM7.24888 6.74107L4.82031 10.5714H11.1775L8.74888 6.74107L8.57031 6.46429V6.13393V2.57143H7.42746V6.13393V6.46429L7.24888 6.74107Z" fill="#24292E"/>
</svg>

After

Width:  |  Height:  |  Size: 916 B

@ -0,0 +1,4 @@
<svg width="14" height="15" viewBox="0 0 14 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.61384 8.90179C9.06027 8.45536 9.28348 7.91667 9.28348 7.28571C9.28348 6.65476 9.06027 6.11607 8.61384 5.66964C8.16741 5.22321 7.62872 5 6.99777 5C6.36682 5 5.82813 5.22321 5.3817 5.66964C4.93527 6.11607 4.71205 6.65476 4.71205 7.28571C4.71205 7.91667 4.93527 8.45536 5.3817 8.90179C5.82813 9.34821 6.36682 9.57143 6.99777 9.57143C7.62872 9.57143 8.16741 9.34821 8.61384 8.90179ZM13.8549 6.3125V8.29464C13.8549 8.36607 13.8311 8.43452 13.7835 8.5C13.7359 8.56548 13.6763 8.60417 13.6049 8.61607L11.9531 8.86607C11.84 9.1875 11.724 9.45833 11.6049 9.67857C11.8132 9.97619 12.1317 10.3869 12.5603 10.9107C12.6198 10.9821 12.6496 11.0565 12.6496 11.1339C12.6496 11.2113 12.6228 11.2798 12.5692 11.3393C12.4085 11.5595 12.1138 11.881 11.6853 12.3036C11.2567 12.7262 10.9769 12.9375 10.846 12.9375C10.7746 12.9375 10.6972 12.9107 10.6138 12.8571L9.3817 11.8929C9.11979 12.0298 8.84896 12.1429 8.5692 12.2321C8.47396 13.0417 8.38765 13.5952 8.31027 13.8929C8.2686 14.0595 8.16146 14.1429 7.98884 14.1429H6.0067C5.92336 14.1429 5.84896 14.1161 5.78348 14.0625C5.72396 14.0149 5.69122 13.9524 5.68527 13.875L5.43527 12.2321C5.1436 12.1369 4.87574 12.0268 4.6317 11.9018L3.37277 12.8571C3.31324 12.9107 3.23884 12.9375 3.14955 12.9375C3.06622 12.9375 2.99182 12.9048 2.92634 12.8393C2.17634 12.1607 1.68527 11.6607 1.45312 11.3393C1.41146 11.2798 1.39062 11.2113 1.39062 11.1339C1.39062 11.0625 1.41443 10.994 1.46205 10.9286C1.55134 10.8036 1.70313 10.6071 1.91741 10.3393C2.1317 10.0655 2.29241 9.85417 2.39955 9.70536C2.23884 9.40774 2.11682 9.11309 2.03348 8.82143L0.399554 8.58036C0.322173 8.56845 0.259673 8.53274 0.212054 8.47321C0.164435 8.40774 0.140625 8.33631 0.140625 8.25893V6.27679C0.140625 6.20536 0.164435 6.1369 0.212054 6.07143C0.259673 6.00595 0.31622 5.96726 0.381696 5.95536L2.04241 5.70536C2.12574 5.43155 2.24182 5.15774 2.39062 4.88393C2.15253 4.54464 1.83408 4.13393 1.43527 3.65178C1.37574 3.58036 1.34598 3.50893 1.34598 3.4375C1.34598 3.37798 1.37277 3.30952 1.42634 3.23214C1.5811 3.01786 1.87277 2.6994 2.30134 2.27678C2.73586 1.84821 3.0186 1.63393 3.14955 1.63393C3.22693 1.63393 3.30432 1.66369 3.3817 1.72321L4.61384 2.67857C4.87574 2.54167 5.14658 2.42857 5.42634 2.33928C5.52158 1.52976 5.60789 0.97619 5.68527 0.678571C5.72693 0.511904 5.83408 0.428571 6.0067 0.428571H7.98884C8.07217 0.428571 8.1436 0.455357 8.20312 0.508928C8.2686 0.556547 8.30432 0.619047 8.31027 0.696428L8.56027 2.33928C8.85194 2.43452 9.11979 2.54464 9.36384 2.66964L10.6317 1.71428C10.6853 1.66071 10.7567 1.63393 10.846 1.63393C10.9234 1.63393 10.9978 1.66369 11.0692 1.72321C11.8371 2.43155 12.3281 2.9375 12.5424 3.24107C12.5841 3.28869 12.6049 3.35417 12.6049 3.4375C12.6049 3.50893 12.5811 3.57738 12.5335 3.64286C12.4442 3.76786 12.2924 3.96726 12.0781 4.24107C11.8638 4.50893 11.7031 4.71726 11.596 4.86607C11.7507 5.16369 11.8728 5.45536 11.9621 5.74107L13.596 5.99107C13.6734 6.00298 13.7359 6.04167 13.7835 6.10714C13.8311 6.16667 13.8549 6.23512 13.8549 6.3125Z" fill="#24292E"/>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

@ -0,0 +1,4 @@
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.28348 11.5714V10.1429C9.28348 10.0595 9.2567 9.99107 9.20312 9.9375C9.14955 9.88393 9.0811 9.85714 8.99777 9.85714H8.14062V5.28571C8.14062 5.20238 8.11384 5.13393 8.06027 5.08036C8.0067 5.02679 7.93824 5 7.85491 5H4.99777C4.91443 5 4.84598 5.02679 4.79241 5.08036C4.73884 5.13393 4.71205 5.20238 4.71205 5.28571V6.71429C4.71205 6.79762 4.73884 6.86607 4.79241 6.91964C4.84598 6.97321 4.91443 7 4.99777 7H5.85491V9.85714H4.99777C4.91443 9.85714 4.84598 9.88393 4.79241 9.9375C4.73884 9.99107 4.71205 10.0595 4.71205 10.1429V11.5714C4.71205 11.6548 4.73884 11.7232 4.79241 11.7768C4.84598 11.8304 4.91443 11.8571 4.99777 11.8571H8.99777C9.0811 11.8571 9.14955 11.8304 9.20312 11.7768C9.2567 11.7232 9.28348 11.6548 9.28348 11.5714ZM8.14062 3.57143V2.14286C8.14062 2.05952 8.11384 1.99107 8.06027 1.9375C8.0067 1.88393 7.93824 1.85714 7.85491 1.85714H6.14063C6.05729 1.85714 5.98884 1.88393 5.93527 1.9375C5.8817 1.99107 5.85491 2.05952 5.85491 2.14286V3.57143C5.85491 3.65476 5.8817 3.72321 5.93527 3.77678C5.98884 3.83036 6.05729 3.85714 6.14063 3.85714H7.85491C7.93824 3.85714 8.0067 3.83036 8.06027 3.77678C8.11384 3.72321 8.14062 3.65476 8.14062 3.57143ZM12.9353 3.84821C13.5484 4.89583 13.8549 6.04167 13.8549 7.28571C13.8549 8.52976 13.5484 9.67857 12.9353 10.7321C12.3222 11.7798 11.4888 12.6101 10.4353 13.2232C9.38765 13.8363 8.24182 14.1429 6.99777 14.1429C5.75372 14.1429 4.60491 13.8363 3.55134 13.2232C2.50372 12.6101 1.67336 11.7798 1.06027 10.7321C0.447173 9.67857 0.140625 8.52976 0.140625 7.28571C0.140625 6.04167 0.447173 4.89583 1.06027 3.84821C1.67336 2.79464 2.50372 1.96131 3.55134 1.34821C4.60491 0.735119 5.75372 0.428571 6.99777 0.428571C8.24182 0.428571 9.38765 0.735119 10.4353 1.34821C11.4888 1.96131 12.3222 2.79464 12.9353 3.84821Z" fill="#24292E"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

@ -0,0 +1,4 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15.6696 4.33036C15.8899 4.55655 16 4.82738 16 5.14286C16 5.45238 15.8899 5.72024 15.6696 5.94643L12.0893 9.51786L13.4286 10.8571L12 12.2857C11.0298 13.256 9.86905 13.8125 8.51786 13.9554C7.17262 14.0923 5.94941 13.7917 4.84821 13.0536L1.61607 16.2857H0V14.6696L3.23214 11.4375C2.49405 10.3363 2.19345 9.1131 2.33036 7.76786C2.47321 6.41667 3.02976 5.25595 4 4.28571L5.42857 2.85714L6.76786 4.19643L10.3393 0.616071C10.5655 0.395832 10.8363 0.285713 11.1518 0.285713C11.4673 0.285713 11.7351 0.395832 11.9554 0.616071C12.1756 0.836309 12.2857 1.10714 12.2857 1.42857C12.2857 1.74405 12.1756 2.0119 11.9554 2.23214L8.38393 5.8125L10.4732 7.90179L14.0536 4.33036C14.2798 4.11012 14.5506 4 14.8661 4C15.1815 4 15.4494 4.11012 15.6696 4.33036Z" fill="#24292E"/>
</svg>

After

Width:  |  Height:  |  Size: 871 B

@ -0,0 +1,5 @@
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="250" cy="250" r="250" fill="#FF0420"/>
<path d="M177.133 316.446C162.247 316.446 150.051 312.943 140.544 305.938C131.162 298.808 126.471 288.676 126.471 275.541C126.471 272.789 126.784 269.411 127.409 265.408C129.036 256.402 131.35 245.581 134.352 232.947C142.858 198.547 164.812 181.347 200.213 181.347C209.845 181.347 218.476 182.973 226.107 186.225C233.738 189.352 239.742 194.106 244.12 200.486C248.498 206.74 250.688 214.246 250.688 223.002C250.688 225.629 250.375 228.944 249.749 232.947C247.873 244.08 245.621 254.901 242.994 265.408C238.616 282.546 231.048 295.368 220.29 303.874C209.532 312.255 195.147 316.446 177.133 316.446ZM179.76 289.426C186.766 289.426 192.707 287.362 197.586 283.234C202.59 279.106 206.155 272.789 208.281 264.283C211.158 252.524 213.348 242.266 214.849 233.51C215.349 230.883 215.599 228.194 215.599 225.441C215.599 214.058 209.657 208.366 197.774 208.366C190.768 208.366 184.764 210.43 179.76 214.558C174.882 218.687 171.379 225.004 169.253 233.51C167.001 241.891 164.749 252.149 162.498 264.283C161.997 266.784 161.747 269.411 161.747 272.163C161.747 283.672 167.752 289.426 179.76 289.426Z" fill="white"/>
<path d="M259.303 314.57C257.927 314.57 256.863 314.132 256.113 313.256C255.487 312.255 255.3 311.13 255.55 309.879L281.444 187.914C281.694 186.538 282.382 185.412 283.508 184.536C284.634 183.661 285.822 183.223 287.073 183.223H336.985C350.87 183.223 362.003 186.1 370.384 191.854C378.891 197.609 383.144 205.927 383.144 216.81C383.144 219.937 382.769 223.19 382.018 226.567C378.891 240.953 372.574 251.586 363.067 258.466C353.685 265.346 340.8 268.786 324.413 268.786H299.082L290.451 309.879C290.2 311.255 289.512 312.38 288.387 313.256C287.261 314.132 286.072 314.57 284.822 314.57H259.303ZM325.727 242.892C330.98 242.892 335.546 241.453 339.424 238.576C343.427 235.699 346.054 231.571 347.305 226.192C347.68 224.065 347.868 222.189 347.868 220.563C347.868 216.935 346.805 214.183 344.678 212.307C342.551 210.305 338.924 209.305 333.795 209.305H311.278L304.148 242.892H325.727Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -0,0 +1,4 @@
<svg width="12" height="15" viewBox="0 0 12 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.43108 7.28571H8.57394V5.35714C8.57394 4.64732 8.32282 4.04129 7.82059 3.53906C7.31836 3.03683 6.71233 2.78571 6.00251 2.78571C5.29269 2.78571 4.68666 3.03683 4.18443 3.53906C3.6822 4.04129 3.43108 4.64732 3.43108 5.35714V7.28571ZM11.7882 8.25V14.0357C11.7882 14.3036 11.6945 14.5312 11.507 14.7188C11.3195 14.9062 11.0918 15 10.8239 15H1.18108C0.913225 15 0.685547 14.9062 0.498047 14.7188C0.310547 14.5312 0.216797 14.3036 0.216797 14.0357V8.25C0.216797 7.98214 0.310547 7.75446 0.498047 7.56696C0.685547 7.37946 0.913225 7.28571 1.18108 7.28571H1.50251V5.35714C1.50251 4.125 1.94448 3.06696 2.8284 2.18304C3.71233 1.29911 4.77037 0.857142 6.00251 0.857142C7.23465 0.857142 8.29269 1.29911 9.17662 2.18304C10.0605 3.06696 10.5025 4.125 10.5025 5.35714V7.28571H10.8239C11.0918 7.28571 11.3195 7.37946 11.507 7.56696C11.6945 7.75446 11.7882 7.98214 11.7882 8.25Z" fill="#24292E"/>
</svg>

After

Width:  |  Height:  |  Size: 996 B

@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.42237 13.347C9.42237 13.5827 9.33819 13.7847 9.16983 13.9531C9.00147 14.1214 8.79944 14.2056 8.56374 14.2056L6.84648 14.2056C6.61078 14.2056 6.40875 14.1214 6.24039 13.9531C6.07203 13.7847 5.98785 13.5827 5.98785 13.347L5.98785 9.63466L2.27554 9.63466C2.03984 9.63466 1.83781 9.55048 1.66945 9.38212C1.50109 9.21377 1.41691 9.01174 1.41691 8.77603L1.41691 7.05877C1.41691 6.82307 1.50109 6.62104 1.66945 6.45268C1.83781 6.28432 2.03984 6.20014 2.27554 6.20014L5.98785 6.20014V2.48783C5.98785 2.25213 6.07203 2.0501 6.24039 1.88174C6.40875 1.71338 6.61078 1.6292 6.84648 1.6292H8.56374C8.79944 1.6292 9.00147 1.71338 9.16983 1.88174C9.33819 2.0501 9.42237 2.25213 9.42237 2.48783L9.42237 6.20014H13.1347C13.3704 6.20014 13.5724 6.28432 13.7408 6.45268C13.9091 6.62104 13.9933 6.82307 13.9933 7.05877V8.77603C13.9933 9.01173 13.9091 9.21377 13.7408 9.38212C13.5724 9.55048 13.3704 9.63466 13.1347 9.63466H9.42237L9.42237 13.347Z" fill="#6A737D"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1,39 @@
<svg width="800" height="62" viewBox="0 0 800 62" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.6" d="M771.428 58.4105C771.515 58.4105 771.602 58.4105 771.69 58.4105C773.279 58.3407 774.746 57.6603 775.829 56.4914C778.047 54.0837 777.89 50.2978 775.48 48.0821C773.069 45.8663 769.279 46.0234 767.061 48.431C765.978 49.5999 765.419 51.1178 765.489 52.7054C765.559 54.2931 766.24 55.7586 767.41 56.8403C768.511 57.8697 769.925 58.4105 771.428 58.4105ZM771.445 48.1693C772.493 48.1693 773.523 48.5357 774.362 49.3033C776.108 50.9084 776.213 53.6301 774.606 55.3748C773.82 56.2122 772.772 56.7182 771.62 56.7531C770.467 56.8054 769.384 56.4042 768.528 55.6191C767.69 54.834 767.183 53.7871 767.148 52.6357C767.096 51.4842 767.498 50.4025 768.284 49.5476C769.122 48.6404 770.275 48.1693 771.445 48.1693Z" fill="#FFB0EB"/>
<path opacity="0.6" d="M540.023 29.9695C538.904 29.9695 537.997 29.0634 537.997 27.9457C537.997 26.828 538.904 25.9219 540.023 25.9219C541.142 25.9219 542.05 26.828 542.05 27.9457C542.05 29.0634 541.142 29.9695 540.023 29.9695Z" fill="url(#paint0_linear_482_3319)"/>
<path opacity="0.6" d="M722.945 18.7508C721.826 18.7508 720.919 17.8447 720.919 16.727C720.919 15.6092 721.826 14.7031 722.945 14.7031C724.064 14.7031 724.971 15.6092 724.971 16.727C724.971 17.8447 724.064 18.7508 722.945 18.7508Z" fill="url(#paint1_linear_482_3319)"/>
<path opacity="0.6" d="M629.995 38.9795C630.31 38.9795 630.624 38.8748 630.886 38.6829L644.44 28.3893C644.877 28.0578 645.104 27.4995 644.999 26.9587C644.894 26.4178 644.51 25.9642 643.986 25.8072L625.821 20.0149C625.297 19.8579 624.738 19.98 624.336 20.3638C623.952 20.7476 623.795 21.3059 623.952 21.8293L628.563 37.9152C628.703 38.3863 629.052 38.7527 629.524 38.9097C629.681 38.962 629.838 38.9795 629.995 38.9795ZM640.388 27.7612L630.816 35.0365L627.568 23.6787L640.388 27.7612Z" fill="url(#paint2_linear_482_3319)"/>
<path opacity="0.6" d="M474.407 30.6766C474.46 30.6766 474.495 30.6766 474.547 30.6766C480.014 30.6068 484.415 26.0881 484.346 20.6273C484.276 15.1665 479.769 10.7699 474.285 10.8397C468.818 10.9095 464.417 15.4282 464.487 20.889C464.556 26.3149 468.993 30.6766 474.407 30.6766ZM474.407 13.4218C478.407 13.4218 481.708 16.6494 481.761 20.6622C481.813 24.7098 478.564 28.0421 474.512 28.0945C470.46 28.1643 467.124 24.9017 467.072 20.8541C467.019 16.8065 470.268 13.4741 474.32 13.4218C474.337 13.4218 474.372 13.4218 474.407 13.4218Z" fill="#86E29B"/>
<path opacity="0.6" d="M295.91 44.6648C295.949 43.932 295.379 43.2899 294.645 43.2517C291.69 43.0863 290.043 44.4307 288.722 45.5071C287.522 46.4968 286.574 47.2748 284.661 47.1552C282.753 47.0523 281.899 46.1612 280.809 45.0625C279.616 43.847 278.142 42.3274 275.186 42.1621C272.231 41.9967 270.584 43.3411 269.263 44.4175C268.063 45.4072 267.114 46.1852 265.202 46.0656C263.294 45.9627 262.44 45.0716 261.35 43.9729C260.156 42.7574 258.682 41.2378 255.727 41.0725C252.771 40.9071 251.124 42.2515 249.804 43.3279C248.604 44.3176 247.655 45.0956 245.743 44.976C245.009 44.9377 244.366 45.5074 244.327 46.2402C244.289 46.9731 244.859 47.6151 245.592 47.6534C248.548 47.8187 250.195 46.4743 251.515 45.3979C252.715 44.4082 253.664 43.6302 255.576 43.7499C257.484 43.8527 258.338 44.7439 259.428 45.8426C260.622 47.058 262.096 48.5776 265.051 48.743C268.007 48.9083 269.654 47.5639 270.975 46.4875C272.174 45.4978 273.123 44.7198 275.036 44.8395C276.944 44.9423 277.797 45.8334 278.887 46.9321C280.081 48.1476 281.555 49.6672 284.51 49.8326C287.466 49.9979 289.113 48.6535 290.434 47.5771C291.633 46.5874 292.582 45.8094 294.495 45.9291C295.228 45.9673 295.871 45.3977 295.91 44.6648Z" fill="#FFB0EB"/>
<path opacity="0.6" d="M361.428 58.4105C361.515 58.4105 361.603 58.4105 361.69 58.4105C363.279 58.3407 364.747 57.6603 365.83 56.4914C368.048 54.0837 367.891 50.2978 365.48 48.0821C363.07 45.8663 359.28 46.0234 357.061 48.431C355.979 49.5999 355.42 51.1178 355.49 52.7054C355.559 54.2931 356.241 55.7586 357.411 56.8403C358.511 57.8697 359.926 58.4105 361.428 58.4105ZM361.445 48.1693C362.493 48.1693 363.524 48.5357 364.362 49.3033C366.109 50.9084 366.214 53.6301 364.607 55.3748C363.821 56.2122 362.773 56.7182 361.62 56.7531C360.467 56.8054 359.385 56.4042 358.529 55.6191C357.69 54.834 357.184 53.7871 357.149 52.6357C357.096 51.4842 357.498 50.4025 358.284 49.5476C359.123 48.6404 360.275 48.1693 361.445 48.1693Z" fill="#FFB0EB"/>
<path opacity="0.6" d="M130.024 29.9695C128.905 29.9695 127.998 29.0634 127.998 27.9457C127.998 26.828 128.905 25.9219 130.024 25.9219C131.143 25.9219 132.05 26.828 132.05 27.9457C132.05 29.0634 131.143 29.9695 130.024 29.9695Z" fill="url(#paint3_linear_482_3319)"/>
<path opacity="0.6" d="M322.946 4.75077C321.827 4.75077 320.92 3.84468 320.92 2.72695C320.92 1.60922 321.827 0.703125 322.946 0.703125C324.065 0.703125 324.972 1.60922 324.972 2.72695C324.972 3.84468 324.065 4.75077 322.946 4.75077Z" fill="url(#paint4_linear_482_3319)"/>
<path opacity="0.6" d="M179.996 61.9795C180.31 61.9795 180.625 61.8748 180.887 61.6829L194.44 51.3893C194.877 51.0578 195.104 50.4995 194.999 49.9587C194.895 49.4178 194.51 48.9642 193.986 48.8072L175.821 43.0149C175.297 42.8579 174.739 42.98 174.337 43.3638C173.953 43.7476 173.795 44.3059 173.953 44.8293L178.564 60.9152C178.703 61.3863 179.053 61.7527 179.524 61.9097C179.681 61.962 179.839 61.9795 179.996 61.9795ZM190.388 50.7612L180.817 58.0365L177.568 46.6787L190.388 50.7612Z" fill="url(#paint5_linear_482_3319)"/>
<path opacity="0.6" d="M34.4077 30.6766C34.4601 30.6766 34.495 30.6766 34.5474 30.6766C40.0144 30.6068 44.4159 26.0881 44.346 20.6273C44.2761 15.1665 39.7698 10.7699 34.2854 10.8397C28.8185 10.9095 24.417 15.4282 24.4869 20.889C24.5568 26.3149 28.9932 30.6766 34.4077 30.6766ZM34.4077 13.4218C38.4075 13.4218 41.7086 16.6494 41.761 20.6622C41.8134 24.7098 38.5647 28.0421 34.5125 28.0945C30.4604 28.1643 27.1243 24.9017 27.0719 20.8541C27.0195 16.8065 30.2682 13.4741 34.3204 13.4218C34.3379 13.4218 34.3728 13.4218 34.4077 13.4218Z" fill="#86E29B"/>
<defs>
<linearGradient id="paint0_linear_482_3319" x1="542.049" y1="27.9529" x2="537.996" y2="27.9529" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C3FC"/>
<stop offset="1" stop-color="#75C3FC"/>
</linearGradient>
<linearGradient id="paint1_linear_482_3319" x1="724.971" y1="16.7328" x2="720.918" y2="16.7328" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C3FC"/>
<stop offset="1" stop-color="#75C3FC"/>
</linearGradient>
<linearGradient id="paint2_linear_482_3319" x1="645.028" y1="29.4641" x2="623.903" y2="29.4641" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE466"/>
<stop offset="1" stop-color="#FFAFEA"/>
</linearGradient>
<linearGradient id="paint3_linear_482_3319" x1="132.05" y1="27.9529" x2="127.996" y2="27.9529" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C3FC"/>
<stop offset="1" stop-color="#75C3FC"/>
</linearGradient>
<linearGradient id="paint4_linear_482_3319" x1="324.971" y1="2.73276" x2="320.918" y2="2.73276" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C3FC"/>
<stop offset="1" stop-color="#75C3FC"/>
</linearGradient>
<linearGradient id="paint5_linear_482_3319" x1="195.028" y1="52.4641" x2="173.904" y2="52.4641" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE466"/>
<stop offset="1" stop-color="#FFAFEA"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 7.1 KiB

@ -0,0 +1,34 @@
<svg width="817" height="54" viewBox="0 0 817 54" fill="none" xmlns="http://www.w3.org/2000/svg">
<g opacity="0.75">
<path opacity="0.6" d="M720.209 36.4667C720.262 35.734 719.72 35.0884 718.987 35.0187C716.035 34.7919 714.358 36.1004 713.031 37.1472C711.808 38.1067 710.83 38.8569 708.926 38.7174C707.022 38.5603 706.184 37.6706 705.118 36.5365C703.948 35.2978 702.516 33.7451 699.564 33.5008C696.612 33.274 694.936 34.5825 693.608 35.6293C692.386 36.5889 691.408 37.3391 689.504 37.1995C687.6 37.0425 686.762 36.1527 685.696 35.0187C684.526 33.7799 683.094 32.2272 680.142 31.9829C677.19 31.7561 675.531 33.0646 674.186 34.1114C672.963 35.071 671.985 35.8212 670.081 35.6816C669.348 35.6293 668.701 36.1701 668.632 36.9029C668.562 37.6357 669.121 38.2812 669.854 38.351C672.806 38.5778 674.465 37.2693 675.81 36.2225C677.033 35.2629 678.011 34.5127 679.915 34.6523C681.819 34.8093 682.657 35.6991 683.722 36.8331C684.893 38.0718 686.325 39.6246 689.277 39.8688C692.228 40.0957 693.888 38.7872 695.233 37.7403C696.455 36.7808 697.433 36.0306 699.337 36.1701C701.241 36.3272 702.079 37.2169 703.145 38.351C704.315 39.5897 705.747 41.1425 708.699 41.3867C711.651 41.6135 713.328 40.305 714.655 39.2582C715.878 38.2986 716.856 37.5484 718.76 37.688C719.493 37.7578 720.139 37.2169 720.209 36.4667Z" fill="#FBC49D"/>
<path opacity="0.6" d="M488.556 23.1411C488.742 23.1411 488.928 23.0915 489.09 22.9923L503.392 14.5222C503.74 14.3114 503.938 13.9146 503.901 13.5177C503.851 13.1085 503.578 12.7736 503.193 12.6496L482.572 5.94052C482.187 5.81651 481.765 5.92812 481.492 6.22575C481.219 6.52339 481.144 6.95743 481.293 7.32947L487.612 22.5087C487.724 22.7815 487.96 23.0047 488.246 23.0915C488.345 23.1163 488.444 23.1411 488.556 23.1411ZM500.363 13.9022L489.065 20.5989L484.074 8.6068L500.363 13.9022Z" fill="#75C4FD"/>
<path opacity="0.6" d="M599.843 19.6242C600.07 19.6242 600.315 19.6068 600.542 19.5719C603.476 19.188 605.537 16.5013 605.17 13.5702C604.978 12.157 604.262 10.8834 603.127 10.0111C601.992 9.13874 600.577 8.75491 599.162 8.94683C597.747 9.13874 596.472 9.85406 595.599 10.9881C594.726 12.1221 594.341 13.5353 594.534 14.9485C594.9 17.6702 597.206 19.6242 599.843 19.6242ZM599.861 10.5694C600.682 10.5694 601.468 10.8311 602.114 11.337C602.9 11.9477 603.406 12.82 603.529 13.797C603.791 15.8208 602.358 17.6876 600.332 17.9668C598.306 18.2285 596.437 16.7978 596.158 14.774C596.036 13.797 596.298 12.82 596.891 12.0349C597.503 11.2498 598.376 10.7438 599.354 10.6217C599.529 10.5694 599.704 10.5694 599.861 10.5694Z" fill="#86E29B"/>
<path opacity="0.6" d="M789.426 33.0604C789.479 33.0604 789.514 33.0604 789.566 33.0604C795.033 32.9906 799.435 28.4719 799.365 23.0111C799.295 17.5503 794.789 13.1537 789.304 13.2235C783.837 13.2933 779.436 17.812 779.506 23.2728C779.576 28.6987 784.012 33.0604 789.426 33.0604ZM789.426 15.8056C793.426 15.8056 796.727 19.0332 796.78 23.046C796.832 27.0936 793.583 30.4259 789.531 30.4783C785.479 30.5481 782.143 27.2855 782.091 23.2379C782.038 19.1902 785.287 15.8579 789.339 15.8056C789.357 15.8056 789.392 15.8056 789.426 15.8056Z" fill="#86E29B"/>
</g>
<g opacity="0.75">
<path opacity="0.6" d="M169.843 29.6242C170.071 29.6242 170.315 29.6068 170.542 29.5719C173.476 29.188 175.537 26.5013 175.171 23.5702C174.979 22.157 174.262 20.8834 173.127 20.0111C171.992 19.1387 170.577 18.7549 169.162 18.9468C167.748 19.1387 166.473 19.8541 165.599 20.9881C164.726 22.1221 164.342 23.5353 164.534 24.9485C164.901 27.6702 167.206 29.6242 169.843 29.6242ZM169.861 20.5694C170.682 20.5694 171.468 20.8311 172.114 21.337C172.9 21.9477 173.407 22.82 173.529 23.797C173.791 25.8208 172.359 27.6876 170.333 27.9668C168.306 28.2285 166.438 26.7978 166.158 24.774C166.036 23.797 166.298 22.82 166.892 22.0349C167.503 21.2498 168.376 20.7438 169.354 20.6217C169.529 20.5694 169.704 20.5694 169.861 20.5694Z" fill="#86E29B"/>
<path opacity="0.6" d="M306.157 32.0974C305.038 32.0974 304.131 31.1913 304.131 30.0736C304.131 28.9559 305.038 28.0498 306.157 28.0498C307.276 28.0498 308.183 28.9559 308.183 30.0736C308.183 31.1913 307.276 32.0974 306.157 32.0974Z" fill="url(#paint0_linear_482_3306)"/>
<path opacity="0.6" d="M88.0759 4.28984C86.9569 4.28984 86.0498 3.38374 86.0498 2.26601C86.0498 1.14829 86.9569 0.242188 88.0759 0.242188C89.1948 0.242188 90.102 1.14829 90.102 2.26601C90.102 3.38374 89.1948 4.28984 88.0759 4.28984Z" fill="url(#paint1_linear_482_3306)"/>
<path opacity="0.6" d="M123.285 47.9139C122.166 47.9139 121.259 47.0078 121.259 45.89C121.259 44.7723 122.166 43.8662 123.285 43.8662C124.404 43.8662 125.311 44.7723 125.311 45.89C125.311 47.0078 124.404 47.9139 123.285 47.9139Z" fill="url(#paint2_linear_482_3306)"/>
<path opacity="0.75" d="M21.0915 29.9623C19.278 29.9623 17.8079 28.4938 17.8079 26.6823C17.8079 24.8708 19.278 23.4023 21.0915 23.4023C22.905 23.4023 24.3752 24.8708 24.3752 26.6823C24.3752 28.4938 22.905 29.9623 21.0915 29.9623Z" fill="url(#paint3_linear_482_3306)"/>
<path opacity="0.6" d="M379.426 53.0594C379.479 53.0594 379.514 53.0594 379.566 53.0594C385.033 52.9896 389.435 48.4709 389.365 43.0101C389.295 37.5493 384.789 33.1527 379.304 33.2225C373.837 33.2923 369.436 37.811 369.506 43.2718C369.575 48.6977 374.012 53.0594 379.426 53.0594ZM379.426 35.8046C383.426 35.8046 386.727 39.0323 386.78 43.045C386.832 47.0926 383.583 50.4249 379.531 50.4773C375.479 50.5471 372.143 47.2845 372.091 43.2369C372.038 39.1893 375.287 35.857 379.339 35.8046C379.357 35.8046 379.392 35.8046 379.426 35.8046Z" fill="#86E29B"/>
</g>
<defs>
<linearGradient id="paint0_linear_482_3306" x1="308.177" y1="30.0684" x2="304.124" y2="30.0684" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C3FC"/>
<stop offset="1" stop-color="#75C3FC"/>
</linearGradient>
<linearGradient id="paint1_linear_482_3306" x1="90.1014" y1="2.27182" x2="86.0481" y2="2.27182" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C3FC"/>
<stop offset="1" stop-color="#75C3FC"/>
</linearGradient>
<linearGradient id="paint2_linear_482_3306" x1="125.31" y1="45.8958" x2="121.257" y2="45.8958" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C3FC"/>
<stop offset="1" stop-color="#75C3FC"/>
</linearGradient>
<linearGradient id="paint3_linear_482_3306" x1="24.3728" y1="26.8017" x2="17.7968" y2="26.5677" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C3FC"/>
<stop offset="1" stop-color="#75C3FC"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

@ -69,7 +69,7 @@ export default class OnboardingController {
* @param {string} tabId - The id of the tab registering
*/
registerOnboarding = async (location, tabId) => {
if (this.completedOnboarding) {
if (this.store.getState().completedOnboarding) {
log.debug('Ignoring registerOnboarding; user already onboarded');
return;
}

@ -0,0 +1,34 @@
import {
restrictedMethodPermissionBuilders,
selectHooks,
} from '@metamask/rpc-methods';
import { endowmentPermissionBuilders } from '@metamask/snap-controllers';
/**
* @returns {Record<string, Record<string, unknown>>} All endowment permission
* specifications.
*/
export const buildSnapEndowmentSpecifications = () =>
Object.values(endowmentPermissionBuilders).reduce(
(allSpecifications, { targetKey, specificationBuilder }) => {
allSpecifications[targetKey] = specificationBuilder();
return allSpecifications;
},
{},
);
/**
* @param {Record<string, Function>} hooks - The hooks for the Snap
* restricted method implementations.
*/
export function buildSnapRestrictedMethodSpecifications(hooks) {
return Object.values(restrictedMethodPermissionBuilders).reduce(
(specifications, { targetKey, specificationBuilder, methodHooks }) => {
specifications[targetKey] = specificationBuilder({
methodHooks: selectHooks(hooks, methodHooks),
});
return specifications;
},
{},
);
}

@ -0,0 +1,46 @@
import {
EndowmentPermissions,
RestrictedMethods,
} from '../../../../../shared/constants/permissions';
import {
buildSnapEndowmentSpecifications,
buildSnapRestrictedMethodSpecifications,
} from './snap-permissions';
describe('buildSnapRestrictedMethodSpecifications', () => {
it('creates valid permission specification objects', () => {
const hooks = {
addSnap: () => undefined,
clearSnapState: () => undefined,
getMnemonic: () => undefined,
getSnap: () => undefined,
getSnapRpcHandler: () => undefined,
getSnapState: () => undefined,
showConfirmation: () => undefined,
updateSnapState: () => undefined,
};
const specifications = buildSnapRestrictedMethodSpecifications(hooks);
const allRestrictedMethods = Object.keys(RestrictedMethods);
Object.keys(specifications).forEach((permissionKey) =>
expect(allRestrictedMethods).toContain(permissionKey),
);
Object.values(specifications).forEach((specification) => {
expect(specification).toMatchObject({
targetKey: expect.stringMatching(/^(snap_|wallet_)/u),
methodImplementation: expect.any(Function),
allowedCaveats: null,
});
});
});
});
describe('buildSnapEndowmentSpecifications', () => {
it('creates valid permission specification objects', () => {
expect(
Object.keys(buildSnapEndowmentSpecifications()).sort(),
).toStrictEqual(Object.keys(EndowmentPermissions).sort());
});
});

@ -4,3 +4,6 @@ export * from './enums';
export * from './permission-log';
export * from './specifications';
export * from './selectors';
///: BEGIN:ONLY_INCLUDE_IN(flask)
export * from './flask/snap-permissions';
///: END:ONLY_INCLUDE_IN

@ -1,4 +1,7 @@
import { constructPermission } from '@metamask/snap-controllers';
import {
constructPermission,
PermissionType,
} from '@metamask/snap-controllers';
import {
CaveatTypes,
RestrictedMethods,
@ -90,6 +93,7 @@ export const getPermissionSpecifications = ({
}) => {
return {
[PermissionKeys.eth_accounts]: {
permissionType: PermissionType.RestrictedMethod,
targetKey: PermissionKeys.eth_accounts,
allowedCaveats: [CaveatTypes.restrictReturnedAccounts],

@ -143,13 +143,12 @@ export default class PreferencesController {
/**
* Setter for the `openSeaEnabled` property
*
* @param {boolean} val - Whether or not the user prefers to use the OpenSea API for collectibles data.
* @param {boolean} openSeaEnabled - Whether or not the user prefers to use the OpenSea API for collectibles data.
*/
setOpenSeaEnabled(val) {
this.store.updateState({ openSeaEnabled: val });
if (!val) {
this.store.updateState({ useCollectibleDetection: false });
}
setOpenSeaEnabled(openSeaEnabled) {
this.store.updateState({
openSeaEnabled,
});
}
/**

@ -41,6 +41,8 @@ const POLL_COUNT_LIMIT = 3;
// If for any reason the MetaSwap API fails to provide a refresh time,
// provide a reasonable fallback to avoid further errors
const FALLBACK_QUOTE_REFRESH_TIME = MINUTE;
const FALLBACK_SMART_TRANSACTION_REFRESH_TIME = SECOND * 10;
const FALLBACK_SMART_TRANSACTIONS_DEADLINE = 180;
function calculateGasEstimateWithRefund(
maxGas = MAX_GAS_LIMIT,
@ -84,6 +86,9 @@ const initialState = {
saveFetchedQuotes: false,
swapsQuoteRefreshTime: FALLBACK_QUOTE_REFRESH_TIME,
swapsQuotePrefetchingRefreshTime: FALLBACK_QUOTE_REFRESH_TIME,
swapsStxBatchStatusRefreshTime: FALLBACK_SMART_TRANSACTION_REFRESH_TIME,
swapsStxGetTransactionsRefreshTime: FALLBACK_SMART_TRANSACTION_REFRESH_TIME,
swapsFeatureFlags: {},
},
};
@ -134,7 +139,9 @@ export default class SwapsController {
if (
!refreshRates ||
typeof refreshRates.quotes !== 'number' ||
typeof refreshRates.quotesPrefetching !== 'number'
typeof refreshRates.quotesPrefetching !== 'number' ||
typeof refreshRates.stxGetTransactions !== 'number' ||
typeof refreshRates.stxBatchStatus !== 'number'
) {
throw new Error(
`MetaMask - invalid response for refreshRates: ${response}`,
@ -144,6 +151,9 @@ export default class SwapsController {
return {
quotes: refreshRates.quotes * 1000,
quotesPrefetching: refreshRates.quotesPrefetching * 1000,
stxGetTransactions: refreshRates.stxGetTransactions * 1000,
stxBatchStatus: refreshRates.stxBatchStatus * 1000,
stxStatusDeadline: refreshRates.stxStatusDeadline,
};
}
@ -164,6 +174,15 @@ export default class SwapsController {
swapsRefreshRates?.quotes || FALLBACK_QUOTE_REFRESH_TIME,
swapsQuotePrefetchingRefreshTime:
swapsRefreshRates?.quotesPrefetching || FALLBACK_QUOTE_REFRESH_TIME,
swapsStxGetTransactionsRefreshTime:
swapsRefreshRates?.stxGetTransactions ||
FALLBACK_SMART_TRANSACTION_REFRESH_TIME,
swapsStxBatchStatusRefreshTime:
swapsRefreshRates?.stxBatchStatus ||
FALLBACK_SMART_TRANSACTION_REFRESH_TIME,
swapsStxStatusDeadline:
swapsRefreshRates?.stxStatusDeadline ||
FALLBACK_SMART_TRANSACTIONS_DEADLINE,
},
});
}
@ -574,6 +593,13 @@ export default class SwapsController {
});
}
setSwapsFeatureFlags(swapsFeatureFlags) {
const { swapsState } = this.store.getState();
this.store.updateState({
swapsState: { ...swapsState, swapsFeatureFlags },
});
}
resetPostFetchState() {
const { swapsState } = this.store.getState();
this.store.updateState({
@ -585,6 +611,7 @@ export default class SwapsController {
swapsQuoteRefreshTime: swapsState.swapsQuoteRefreshTime,
swapsQuotePrefetchingRefreshTime:
swapsState.swapsQuotePrefetchingRefreshTime,
swapsFeatureFlags: swapsState.swapsFeatureFlags,
},
});
clearTimeout(this.pollingTimeout);

@ -131,8 +131,11 @@ const EMPTY_INIT_STATE = {
topAggId: null,
routeState: '',
swapsFeatureIsLive: true,
swapsFeatureFlags: {},
swapsQuoteRefreshTime: 60000,
swapsQuotePrefetchingRefreshTime: 60000,
swapsStxBatchStatusRefreshTime: 10000,
swapsStxGetTransactionsRefreshTime: 10000,
swapsUserFeeLevel: '',
saveFetchedQuotes: false,
},
@ -840,6 +843,9 @@ describe('SwapsController', function () {
swapsQuoteRefreshTime: old.swapsQuoteRefreshTime,
swapsQuotePrefetchingRefreshTime:
old.swapsQuotePrefetchingRefreshTime,
swapsStxGetTransactionsRefreshTime:
old.swapsStxGetTransactionsRefreshTime,
swapsStxBatchStatusRefreshTime: old.swapsStxBatchStatusRefreshTime,
});
});
@ -885,15 +891,21 @@ describe('SwapsController', function () {
const tokens = 'test';
const fetchParams = 'test';
const swapsFeatureIsLive = false;
const swapsFeatureFlags = {};
const swapsQuoteRefreshTime = 0;
const swapsQuotePrefetchingRefreshTime = 0;
const swapsStxBatchStatusRefreshTime = 0;
const swapsStxGetTransactionsRefreshTime = 0;
swapsController.store.updateState({
swapsState: {
tokens,
fetchParams,
swapsFeatureIsLive,
swapsFeatureFlags,
swapsQuoteRefreshTime,
swapsQuotePrefetchingRefreshTime,
swapsStxBatchStatusRefreshTime,
swapsStxGetTransactionsRefreshTime,
},
});

@ -10,6 +10,7 @@ import { ethers } from 'ethers';
import NonceTracker from 'nonce-tracker';
import log from 'loglevel';
import BigNumber from 'bignumber.js';
import { merge, pickBy } from 'lodash';
import cleanErrorStack from '../../lib/cleanErrorStack';
import {
hexToBn,
@ -20,7 +21,10 @@ import {
} from '../../lib/util';
import { TRANSACTION_NO_CONTRACT_ERROR_KEY } from '../../../../ui/helpers/constants/error-keys';
import { getSwapsTokensReceivedFromTxMeta } from '../../../../ui/pages/swaps/swaps.util';
import { hexWEIToDecGWEI } from '../../../../ui/helpers/utils/conversions.util';
import {
hexWEIToDecGWEI,
decimalToHex,
} from '../../../../ui/helpers/utils/conversions.util';
import {
TRANSACTION_STATUSES,
TRANSACTION_TYPES,
@ -65,6 +69,8 @@ const SWAP_TRANSACTION_TYPES = [
* @typedef {import('../../../../shared/constants/transaction').TransactionMetaMetricsEventString} TransactionMetaMetricsEventString
*/
const METRICS_STATUS_FAILED = 'failed on-chain';
/**
* @typedef {Object} CustomGasSettings
* @property {string} [gas] - The gas limit to use for the transaction
@ -125,6 +131,8 @@ export default class TransactionController extends EventEmitter {
this.updateEventFragment = opts.updateEventFragment;
this.finalizeEventFragment = opts.finalizeEventFragment;
this.getEventFragmentById = opts.getEventFragmentById;
this.getDeviceModel = opts.getDeviceModel;
this.getAccountType = opts.getAccountType;
this.memStore = new ObservableStore({});
this.query = new EthQuery(this.provider);
@ -143,9 +151,15 @@ export default class TransactionController extends EventEmitter {
this.nonceTracker = new NonceTracker({
provider: this.provider,
blockTracker: this.blockTracker,
getPendingTransactions: this.txStateManager.getPendingTransactions.bind(
this.txStateManager,
),
getPendingTransactions: (...args) => {
const pendingTransactions = this.txStateManager.getPendingTransactions(
...args,
);
const externalPendingTransactions = opts.getExternalPendingTransactions(
...args,
);
return [...pendingTransactions, ...externalPendingTransactions];
},
getConfirmedTransactions: this.txStateManager.getConfirmedTransactions.bind(
this.txStateManager,
),
@ -336,6 +350,268 @@ export default class TransactionController extends EventEmitter {
});
}
// ====================================================================================================================================================
/**
* @param {number} txId
* @returns {TransactionMeta} the txMeta who matches the given id if none found
* for the network returns undefined
*/
_getTransaction(txId) {
const { transactions } = this.store.getState();
return transactions[txId];
}
_checkIfTxStatusIsUnapproved(txId) {
return (
this.txStateManager.getTransaction(txId).status ===
TRANSACTION_STATUSES.UNAPPROVED
);
}
_updateTransaction(txId, proposedUpdate, note) {
const txMeta = this.txStateManager.getTransaction(txId);
const updated = merge(txMeta, proposedUpdate);
this.txStateManager.updateTransaction(updated, note);
}
/**
*
* @param {string} txId - transaction id
* @param {object} editableParams - holds the eip1559 fees parameters
* @param editableParams.data
* @param editableParams.from
* @param editableParams.to
* @param editableParams.value
* @param editableParams.gas
* @param editableParams.gasPrice
*/
updateEditableParams(txId, { data, from, to, value, gas, gasPrice }) {
if (!this._checkIfTxStatusIsUnapproved(txId)) {
return;
}
const editableParams = {
txParams: {
data,
from,
to,
value,
gas,
gasPrice,
},
};
// only update what is defined
editableParams.txParams = pickBy(editableParams.txParams);
const note = `Update Editable Params for ${txId}`;
this._updateTransaction(txId, editableParams, note);
}
/**
* updates the gas fees of the transaction with id if the transaction state is unapproved
*
* @param {string} txId - transaction id
* @param {object} txGasFees - holds the gas fees parameters
* {
* gasLimit,
* gasPrice,
* maxPriorityFeePerGas,
* maxFeePerGas,
* estimateUsed,
* estimateSuggested
* }
* @param txGasFees.gasLimit
* @param txGasFees.gasPrice
* @param txGasFees.maxPriorityFeePerGas
* @param txGasFees.maxFeePerGas
* @param txGasFees.estimateUsed
* @param txGasFees.estimateSuggested
* @param txGasFees.defaultGasEstimates
* @param txGasFees.gas
* @param txGasFees.originalGasEstimate
*/
updateTransactionGasFees(
txId,
{
gas,
gasLimit,
gasPrice,
maxPriorityFeePerGas,
maxFeePerGas,
estimateUsed,
estimateSuggested,
defaultGasEstimates,
originalGasEstimate,
},
) {
if (!this._checkIfTxStatusIsUnapproved(txId)) {
return;
}
let txGasFees = {
txParams: {
gas,
gasLimit,
gasPrice,
maxPriorityFeePerGas,
maxFeePerGas,
},
estimateUsed,
estimateSuggested,
defaultGasEstimates,
originalGasEstimate,
};
// only update what is defined
txGasFees.txParams = pickBy(txGasFees.txParams);
txGasFees = pickBy(txGasFees);
const note = `Update Transaction Gas Fees for ${txId}`;
this._updateTransaction(txId, txGasFees, note);
}
/**
* updates the estimate base fees of the transaction with id if the transaction state is unapproved
*
* @param {string} txId - transaction id
* @param {object} txEstimateBaseFees - holds the estimate base fees parameters
* {
* estimatedBaseFee,
* decEstimatedBaseFee
* }
* @param txEstimateBaseFees.estimatedBaseFee
* @param txEstimateBaseFees.decEstimatedBaseFee
*/
updateTransactionEstimatedBaseFee(
txId,
{ estimatedBaseFee, decEstimatedBaseFee },
) {
if (!this._checkIfTxStatusIsUnapproved(txId)) {
return;
}
let txEstimateBaseFees = { estimatedBaseFee, decEstimatedBaseFee };
// only update what is defined
txEstimateBaseFees = pickBy(txEstimateBaseFees);
const note = `Update Transaction Estimated Base Fees for ${txId}`;
this._updateTransaction(txId, txEstimateBaseFees, note);
}
/**
* updates a swap approval transaction with provided metadata and source token symbol
* if the transaction state is unapproved.
*
* @param {string} txId
* @param {object} swapApprovalTransaction - holds the metadata and token symbol
* {
* type,
* sourceTokenSymbol
* }
* @param swapApprovalTransaction.type
* @param swapApprovalTransaction.sourceTokenSymbol
*/
updateSwapApprovalTransaction(txId, { type, sourceTokenSymbol }) {
if (!this._checkIfTxStatusIsUnapproved(txId)) {
return;
}
let swapApprovalTransaction = { type, sourceTokenSymbol };
// only update what is defined
swapApprovalTransaction = pickBy(swapApprovalTransaction);
const note = `Update Swap Approval Transaction for ${txId}`;
this._updateTransaction(txId, swapApprovalTransaction, note);
}
/**
* updates a swap transaction with provided metadata and source token symbol
* if the transaction state is unapproved.
*
* @param {string} txId
* @param {object} swapTransaction - holds the metadata
* {
* sourceTokenSymbol,
* destinationTokenSymbol,
* type,
* destinationTokenDecimals,
* destinationTokenAddress,
* swapMetaData,
* swapTokenValue,
* estimatedBaseFee,
* approvalTxId
*}
* @param swapTransaction.sourceTokenSymbol
* @param swapTransaction.destinationTokenSymbol
* @param swapTransaction.type
* @param swapTransaction.destinationTokenDecimals
* @param swapTransaction.destinationTokenAddress
* @param swapTransaction.swapMetaData
* @param swapTransaction.swapTokenValue
* @param swapTransaction.estimatedBaseFee
* @param swapTransaction.approvalTxId
*/
updateSwapTransaction(
txId,
{
sourceTokenSymbol,
destinationTokenSymbol,
type,
destinationTokenDecimals,
destinationTokenAddress,
swapMetaData,
swapTokenValue,
estimatedBaseFee,
approvalTxId,
},
) {
if (!this._checkIfTxStatusIsUnapproved(txId)) {
return;
}
let swapTransaction = {
sourceTokenSymbol,
destinationTokenSymbol,
type,
destinationTokenDecimals,
destinationTokenAddress,
swapMetaData,
swapTokenValue,
estimatedBaseFee,
approvalTxId,
};
// only update what is defined
swapTransaction = pickBy(swapTransaction);
const note = `Update Swap Transaction for ${txId}`;
this._updateTransaction(txId, swapTransaction, note);
}
/**
* updates a transaction's user settings only if the transaction state is unapproved
*
* @param {string} txId
* @param {object} userSettings - holds the metadata
* { userEditedGasLimit, userFeeLevel }
* @param userSettings.userEditedGasLimit
* @param userSettings.userFeeLevel
*/
updateTransactionUserSettings(txId, { userEditedGasLimit, userFeeLevel }) {
if (!this._checkIfTxStatusIsUnapproved(txId)) {
return;
}
let userSettings = { userEditedGasLimit, userFeeLevel };
// only update what is defined
userSettings = pickBy(userSettings);
const note = `Update User Settings for ${txId}`;
this._updateTransaction(txId, userSettings, note);
}
// ====================================================================================================================================================
/**
* Validates and generates a txMeta with defaults and puts it in txStateManager
* store.
@ -956,6 +1232,72 @@ export default class TransactionController extends EventEmitter {
}
}
async approveTransactionsWithSameNonce(listOfTxParams = []) {
if (listOfTxParams.length === 0) {
return '';
}
const initialTx = listOfTxParams[0];
const common = await this.getCommonConfiguration(initialTx.from);
const initialTxAsEthTx = TransactionFactory.fromTxData(initialTx, {
common,
});
const initialTxAsSerializedHex = bufferToHex(initialTxAsEthTx.serialize());
if (this.inProcessOfSigning.has(initialTxAsSerializedHex)) {
return '';
}
this.inProcessOfSigning.add(initialTxAsSerializedHex);
let rawTxes, nonceLock;
try {
// TODO: we should add a check to verify that all transactions have the same from address
const fromAddress = initialTx.from;
nonceLock = await this.nonceTracker.getNonceLock(fromAddress);
const nonce = nonceLock.nextNonce;
rawTxes = await Promise.all(
listOfTxParams.map((txParams) => {
txParams.nonce = addHexPrefix(nonce.toString(16));
return this.signExternalTransaction(txParams);
}),
);
} catch (err) {
log.error(err);
// must set transaction to submitted/failed before releasing lock
// continue with error chain
throw err;
} finally {
if (nonceLock) {
nonceLock.releaseLock();
}
this.inProcessOfSigning.delete(initialTxAsSerializedHex);
}
return rawTxes;
}
async signExternalTransaction(_txParams) {
const normalizedTxParams = txUtils.normalizeTxParams(_txParams);
// add network/chain id
const chainId = this.getChainId();
const type = isEIP1559Transaction({ txParams: normalizedTxParams })
? TRANSACTION_ENVELOPE_TYPES.FEE_MARKET
: TRANSACTION_ENVELOPE_TYPES.LEGACY;
const txParams = {
...normalizedTxParams,
type,
gasLimit: normalizedTxParams.gas,
chainId: addHexPrefix(decimalToHex(chainId)),
};
// sign tx
const fromAddress = txParams.from;
const common = await this.getCommonConfiguration(fromAddress);
const unsignedEthTx = TransactionFactory.fromTxData(txParams, { common });
const signedEthTx = await this.signEthTx(unsignedEthTx, fromAddress);
const rawTx = bufferToHex(signedEthTx.serialize());
return rawTx;
}
/**
* adds the chain id and signs the transaction and set the status to signed
*
@ -1054,12 +1396,7 @@ export default class TransactionController extends EventEmitter {
}
try {
// It seems that sometimes the numerical values being returned from
// this.query.getTransactionReceipt are BN instances and not strings.
const gasUsed =
typeof txReceipt.gasUsed === 'string'
? txReceipt.gasUsed
: txReceipt.gasUsed.toString(16);
const gasUsed = txUtils.normalizeTxReceiptGasUsed(txReceipt.gasUsed);
txMeta.txReceipt = {
...txReceipt,
@ -1086,7 +1423,79 @@ export default class TransactionController extends EventEmitter {
}
if (txReceipt.status === '0x0') {
metricsParams.status = 'failed on-chain';
metricsParams.status = METRICS_STATUS_FAILED;
// metricsParams.error = TODO: figure out a way to get the on-chain failure reason
}
this._trackTransactionMetricsEvent(
txMeta,
TRANSACTION_EVENTS.FINALIZED,
metricsParams,
);
this.txStateManager.updateTransaction(
txMeta,
'transactions#confirmTransaction - add txReceipt',
);
if (txMeta.type === TRANSACTION_TYPES.SWAP) {
const postTxBalance = await this.query.getBalance(txMeta.txParams.from);
const latestTxMeta = this.txStateManager.getTransaction(txId);
const approvalTxMeta = latestTxMeta.approvalTxId
? this.txStateManager.getTransaction(latestTxMeta.approvalTxId)
: null;
latestTxMeta.postTxBalance = postTxBalance.toString(16);
this.txStateManager.updateTransaction(
latestTxMeta,
'transactions#confirmTransaction - add postTxBalance',
);
this._trackSwapsMetrics(latestTxMeta, approvalTxMeta);
}
} catch (err) {
log.error(err);
}
}
async confirmExternalTransaction(txMeta, txReceipt, baseFeePerGas) {
// add external transaction
await this.txStateManager.addExternalTransaction(txMeta);
if (!txMeta) {
return;
}
const txId = txMeta.id;
try {
const gasUsed = txUtils.normalizeTxReceiptGasUsed(txReceipt.gasUsed);
txMeta.txReceipt = {
...txReceipt,
gasUsed,
};
if (baseFeePerGas) {
txMeta.baseFeePerGas = baseFeePerGas;
}
this.txStateManager.setTxStatusConfirmed(txId);
this._markNonceDuplicatesDropped(txId);
const { submittedTime } = txMeta;
const metricsParams = { gas_used: gasUsed };
if (submittedTime) {
metricsParams.completion_time = this._getTransactionCompletionTime(
submittedTime,
);
}
if (txReceipt.status === '0x0') {
metricsParams.status = METRICS_STATUS_FAILED;
// metricsParams.error = TODO: figure out a way to get the on-chain failure reason
}
@ -1478,13 +1887,13 @@ export default class TransactionController extends EventEmitter {
.round(2)}%`
: null;
const estimatedVsUsedGasRatio = `${new BigNumber(
txMeta.txReceipt.gasUsed,
16,
)
const estimatedVsUsedGasRatio =
txMeta.txReceipt.gasUsed && txMeta.swapMetaData.estimated_gas
? `${new BigNumber(txMeta.txReceipt.gasUsed, 16)
.div(txMeta.swapMetaData.estimated_gas, 10)
.times(100)
.round(2)}%`;
.round(2)}%`
: null;
this._trackMetaMetricsEvent({
event: 'Swap Completed',
@ -1591,6 +2000,8 @@ export default class TransactionController extends EventEmitter {
eip_1559_version: eip1559Version,
gas_edit_type: 'none',
gas_edit_attempted: 'none',
account_type: await this.getAccountType(this.getSelectedAddress()),
device_model: await this.getDeviceModel(this.getSelectedAddress()),
};
const sensitiveProperties = {

@ -82,6 +82,8 @@ describe('Transaction Controller', function () {
getEventFragmentById: () =>
fragmentExists === false ? undefined : { id: 0 },
getEIP1559GasFeeEstimates: () => undefined,
getAccountType: () => 'MetaMask',
getDeviceModel: () => 'N/A',
});
txController.nonceTracker.getNonceLock = () =>
Promise.resolve({ nextNonce: 0, releaseLock: noop });
@ -1616,6 +1618,8 @@ describe('Transaction Controller', function () {
referrer: 'metamask',
source: 'user',
type: TRANSACTION_TYPES.SIMPLE_SEND,
account_type: 'MetaMask',
device_model: 'N/A',
},
sensitiveProperties: {
default_gas: '0.000031501',
@ -1691,6 +1695,8 @@ describe('Transaction Controller', function () {
referrer: 'metamask',
source: 'user',
type: TRANSACTION_TYPES.SIMPLE_SEND,
account_type: 'MetaMask',
device_model: 'N/A',
},
sensitiveProperties: {
default_gas: '0.000031501',
@ -1776,6 +1782,8 @@ describe('Transaction Controller', function () {
referrer: 'other',
source: 'dapp',
type: TRANSACTION_TYPES.SIMPLE_SEND,
account_type: 'MetaMask',
device_model: 'N/A',
},
sensitiveProperties: {
default_gas: '0.000031501',
@ -1853,6 +1861,8 @@ describe('Transaction Controller', function () {
referrer: 'other',
source: 'dapp',
type: TRANSACTION_TYPES.SIMPLE_SEND,
account_type: 'MetaMask',
device_model: 'N/A',
},
sensitiveProperties: {
default_gas: '0.000031501',
@ -1930,6 +1940,8 @@ describe('Transaction Controller', function () {
referrer: 'other',
source: 'dapp',
type: TRANSACTION_TYPES.SIMPLE_SEND,
account_type: 'MetaMask',
device_model: 'N/A',
},
sensitiveProperties: {
gas_price: '2',
@ -1989,6 +2001,8 @@ describe('Transaction Controller', function () {
eip_1559_version: '0',
gas_edit_attempted: 'none',
gas_edit_type: 'none',
account_type: 'MetaMask',
device_model: 'N/A',
},
sensitiveProperties: {
baz: 3.0,
@ -2058,6 +2072,8 @@ describe('Transaction Controller', function () {
referrer: 'other',
source: 'dapp',
type: TRANSACTION_TYPES.SIMPLE_SEND,
account_type: 'MetaMask',
device_model: 'N/A',
},
sensitiveProperties: {
baz: 3.0,
@ -2159,4 +2175,203 @@ describe('Transaction Controller', function () {
assert.deepEqual(result, expectedParams);
});
});
describe('update transaction methods', function () {
let txStateManager;
beforeEach(function () {
txStateManager = txController.txStateManager;
txStateManager.addTransaction({
id: '1',
status: TRANSACTION_STATUSES.UNAPPROVED,
metamaskNetworkId: currentNetworkId,
txParams: {
gasLimit: '0x001',
gasPrice: '0x002',
// max fees can not be mixed with gasPrice
// maxPriorityFeePerGas: '0x003',
// maxFeePerGas: '0x004',
to: VALID_ADDRESS,
from: VALID_ADDRESS,
},
estimateUsed: '0x005',
estimatedBaseFee: '0x006',
decEstimatedBaseFee: '6',
type: 'swap',
sourceTokenSymbol: 'ETH',
destinationTokenSymbol: 'UNI',
destinationTokenDecimals: 16,
destinationTokenAddress: VALID_ADDRESS,
swapMetaData: {},
swapTokenValue: '0x007',
userEditedGasLimit: '0x008',
userFeeLevel: 'medium',
});
});
it('updates transaction gas fees', function () {
// test update gasFees
txController.updateTransactionGasFees('1', {
gasPrice: '0x0022',
gasLimit: '0x0011',
});
let result = txStateManager.getTransaction('1');
assert.equal(result.txParams.gasPrice, '0x0022');
// TODO: weird behavior here...only gasPrice gets returned.
// assert.equal(result.txParams.gasLimit, '0x0011');
// test update maxPriorityFeePerGas
txStateManager.addTransaction({
id: '2',
status: TRANSACTION_STATUSES.UNAPPROVED,
metamaskNetworkId: currentNetworkId,
txParams: {
maxPriorityFeePerGas: '0x003',
to: VALID_ADDRESS,
from: VALID_ADDRESS,
},
estimateUsed: '0x005',
});
txController.updateTransactionGasFees('2', {
maxPriorityFeePerGas: '0x0033',
});
result = txStateManager.getTransaction('2');
assert.equal(result.txParams.maxPriorityFeePerGas, '0x0033');
// test update maxFeePerGas
txStateManager.addTransaction({
id: '3',
status: TRANSACTION_STATUSES.UNAPPROVED,
metamaskNetworkId: currentNetworkId,
txParams: {
maxPriorityFeePerGas: '0x003',
maxFeePerGas: '0x004',
to: VALID_ADDRESS,
from: VALID_ADDRESS,
},
estimateUsed: '0x005',
});
txController.updateTransactionGasFees('3', { maxFeePerGas: '0x0044' });
result = txStateManager.getTransaction('3');
assert.equal(result.txParams.maxFeePerGas, '0x0044');
// test update estimate used
txController.updateTransactionGasFees('3', { estimateUsed: '0x0055' });
result = txStateManager.getTransaction('3');
assert.equal(result.estimateUsed, '0x0055');
});
it('updates estimated base fee', function () {
txController.updateTransactionEstimatedBaseFee('1', {
estimatedBaseFee: '0x0066',
decEstimatedBaseFee: '66',
});
const result = txStateManager.getTransaction('1');
assert.equal(result.estimatedBaseFee, '0x0066');
assert.equal(result.decEstimatedBaseFee, '66');
});
it('updates swap approval transaction', function () {
txController.updateSwapApprovalTransaction('1', {
type: 'swapApproval',
sourceTokenSymbol: 'XBN',
});
const result = txStateManager.getTransaction('1');
assert.equal(result.type, 'swapApproval');
assert.equal(result.sourceTokenSymbol, 'XBN');
});
it('updates swap transaction', function () {
txController.updateSwapTransaction('1', {
sourceTokenSymbol: 'BTCX',
destinationTokenSymbol: 'ETH',
});
const result = txStateManager.getTransaction('1');
assert.equal(result.sourceTokenSymbol, 'BTCX');
assert.equal(result.destinationTokenSymbol, 'ETH');
assert.equal(result.destinationTokenDecimals, 16);
assert.equal(result.destinationTokenAddress, VALID_ADDRESS);
assert.equal(result.swapTokenValue, '0x007');
txController.updateSwapTransaction('1', {
type: 'swapped',
destinationTokenDecimals: 8,
destinationTokenAddress: VALID_ADDRESS_TWO,
swapTokenValue: '0x0077',
});
assert.equal(result.sourceTokenSymbol, 'BTCX');
assert.equal(result.destinationTokenSymbol, 'ETH');
assert.equal(result.type, 'swapped');
assert.equal(result.destinationTokenDecimals, 8);
assert.equal(result.destinationTokenAddress, VALID_ADDRESS_TWO);
assert.equal(result.swapTokenValue, '0x0077');
});
it('updates transaction user settings', function () {
txController.updateTransactionUserSettings('1', {
userEditedGasLimit: '0x0088',
userFeeLevel: 'high',
});
const result = txStateManager.getTransaction('1');
assert.equal(result.userEditedGasLimit, '0x0088');
assert.equal(result.userFeeLevel, 'high');
});
it('does not update if status is not unapproved', function () {
txStateManager.addTransaction({
id: '4',
status: TRANSACTION_STATUSES.APPROVED,
metamaskNetworkId: currentNetworkId,
txParams: {
maxPriorityFeePerGas: '0x007',
maxFeePerGas: '0x008',
to: VALID_ADDRESS,
from: VALID_ADDRESS,
},
estimateUsed: '0x009',
});
txController.updateTransactionGasFees('4', { maxFeePerGas: '0x0088' });
let result = txStateManager.getTransaction('4');
assert.equal(result.txParams.maxFeePerGas, '0x008');
// test update estimate used
txController.updateTransactionGasFees('4', { estimateUsed: '0x0099' });
result = txStateManager.getTransaction('4');
assert.equal(result.estimateUsed, '0x009');
});
it('does not update unknown parameters in update method', function () {
txController.updateSwapTransaction('1', {
type: 'swapped',
destinationTokenDecimals: 8,
destinationTokenAddress: VALID_ADDRESS_TWO,
swapTokenValue: '0x011',
gasPrice: '0x12',
});
let result = txStateManager.getTransaction('1');
assert.equal(result.type, 'swapped');
assert.equal(result.destinationTokenDecimals, 8);
assert.equal(result.destinationTokenAddress, VALID_ADDRESS_TWO);
assert.equal(result.swapTokenValue, '0x011');
assert.equal(result.txParams.gasPrice, '0x002'); // not updated even though it's passed in to update
txController.updateTransactionGasFees('1', {
estimateUsed: '0x13',
gasPrice: '0x14',
destinationTokenAddress: VALID_ADDRESS,
});
result = txStateManager.getTransaction('1');
console.log(result);
assert.equal(result.estimateUsed, '0x13');
assert.equal(result.txParams.gasPrice, '0x14');
assert.equal(result.destinationTokenAddress, VALID_ADDRESS_TWO); // not updated even though it's passed in to update
});
});
});

@ -264,6 +264,44 @@ export function validateRecipient(txParams) {
return txParams;
}
export const validateConfirmedExternalTransaction = ({
txMeta,
pendingTransactions,
confirmedTransactions,
} = {}) => {
if (!txMeta || !txMeta.txParams) {
throw ethErrors.rpc.invalidParams(
'"txMeta" or "txMeta.txParams" is missing',
);
}
if (txMeta.status !== TRANSACTION_STATUSES.CONFIRMED) {
throw ethErrors.rpc.invalidParams(
'External transaction status should be "confirmed"',
);
}
const externalTxNonce = txMeta.txParams.nonce;
if (pendingTransactions && pendingTransactions.length > 0) {
const foundPendingTxByNonce = pendingTransactions.find(
(el) => el.txParams?.nonce === externalTxNonce,
);
if (foundPendingTxByNonce) {
throw ethErrors.rpc.invalidParams(
'External transaction nonce should not be in pending txs',
);
}
}
if (confirmedTransactions && confirmedTransactions.length > 0) {
const foundConfirmedTxByNonce = confirmedTransactions.find(
(el) => el.txParams?.nonce === externalTxNonce,
);
if (foundConfirmedTxByNonce) {
throw ethErrors.rpc.invalidParams(
'External transaction nonce should not be in confirmed txs',
);
}
}
};
/**
* Returns a list of final states
*
@ -277,3 +315,15 @@ export function getFinalStates() {
TRANSACTION_STATUSES.DROPPED, // the tx nonce was already used
];
}
/**
* Normalizes tx receipt gas used to be a hexadecimal string.
* It seems that sometimes the numerical values being returned from
* this.query.getTransactionReceipt are BN instances and not strings.
*
* @param {string or BN instance} gasUsed
* @returns normalized gas used as hexadecimal string
*/
export function normalizeTxReceiptGasUsed(gasUsed) {
return typeof gasUsed === 'string' ? gasUsed : gasUsed.toString(16);
}

@ -11,7 +11,11 @@ import {
replayHistory,
snapshotFromTxMeta,
} from './lib/tx-state-history-helpers';
import { getFinalStates, normalizeAndValidateTxParams } from './lib/util';
import {
getFinalStates,
normalizeAndValidateTxParams,
validateConfirmedExternalTransaction,
} from './lib/util';
/**
* TransactionStatuses reimported from the shared transaction constants file
@ -245,9 +249,9 @@ export default class TransactionStateManager extends EventEmitter {
const txsToDelete = transactions
.reverse()
.filter((tx) => {
const { nonce } = tx.txParams;
const { nonce, from } = tx.txParams;
const { chainId, metamaskNetworkId, status } = tx;
const key = `${nonce}-${chainId ?? metamaskNetworkId}`;
const key = `${nonce}-${chainId ?? metamaskNetworkId}-${from}`;
if (nonceNetworkSet.has(key)) {
return false;
} else if (
@ -266,6 +270,19 @@ export default class TransactionStateManager extends EventEmitter {
return txMeta;
}
addExternalTransaction(txMeta) {
const fromAddress = txMeta?.txParams?.from;
const confirmedTransactions = this.getConfirmedTransactions(fromAddress);
const pendingTransactions = this.getPendingTransactions(fromAddress);
validateConfirmedExternalTransaction({
txMeta,
pendingTransactions,
confirmedTransactions,
});
this._addTransactionsToState([txMeta]);
return txMeta;
}
/**
* @param {number} txId
* @returns {TransactionMeta} the txMeta who matches the given id if none found

@ -1,3 +1,6 @@
///: BEGIN:ONLY_INCLUDE_IN(flask)
import { handlers as permittedSnapMethods } from '@metamask/rpc-methods/dist/permitted';
///: END:ONLY_INCLUDE_IN
import { flatten } from 'lodash';
import { permissionRpcMethods } from '@metamask/snap-controllers';
import { selectHooks } from '@metamask/rpc-methods';
@ -30,7 +33,7 @@ const expectedHookNames = Array.from(
* controllers.
* @returns {(req: Object, res: Object, next: Function, end: Function) => void}
*/
export default function createMethodMiddleware(hooks) {
export function createMethodMiddleware(hooks) {
// Fail immediately if we forgot to provide any expected hooks.
const missingHookNames = expectedHookNames.filter(
(hookName) => !Object.hasOwnProperty.call(hooks, hookName),
@ -60,6 +63,7 @@ export default function createMethodMiddleware(hooks) {
selectHooks(hooks, hookNames),
);
} catch (error) {
console.error(error);
return end(error);
}
}
@ -67,3 +71,40 @@ export default function createMethodMiddleware(hooks) {
return next();
};
}
///: BEGIN:ONLY_INCLUDE_IN(flask)
const snapHandlerMap = permittedSnapMethods.reduce((map, handler) => {
for (const methodName of handler.methodNames) {
map.set(methodName, handler);
}
return map;
}, new Map());
export function createSnapMethodMiddleware(isSnap, hooks) {
return async function methodMiddleware(req, res, next, end) {
const handler = snapHandlerMap.get(req.method);
if (handler) {
if (/^snap_/iu.test(req.method) && !isSnap) {
return end(ethErrors.rpc.methodNotFound());
}
const { implementation, hookNames } = handler;
try {
// Implementations may or may not be async, so we must await them.
return await implementation(
req,
res,
next,
end,
selectHooks(hooks, hookNames),
);
} catch (error) {
console.error(error);
return end(error);
}
}
return next();
};
}
///: END:ONLY_INCLUDE_IN

@ -1 +1 @@
export { default } from './createMethodMiddleware';
export * from './createMethodMiddleware';

@ -33,9 +33,9 @@ export default class TypedMessageManager extends EventEmitter {
*
* @param options
* @param options.getCurrentChainId
* @param options.metricEvents
* @param options.metricsEvent
*/
constructor({ getCurrentChainId, metricEvents }) {
constructor({ getCurrentChainId, metricsEvent }) {
super();
this._getCurrentChainId = getCurrentChainId;
this.memStore = new ObservableStore({
@ -43,7 +43,7 @@ export default class TypedMessageManager extends EventEmitter {
unapprovedTypedMessagesCount: 0,
});
this.messages = [];
this.metricEvents = metricEvents;
this.metricsEvent = metricsEvent;
}
/**

@ -35,10 +35,17 @@ import {
AssetsContractController,
CollectibleDetectionController,
} from '@metamask/controllers';
import SmartTransactionsController from '@metamask/smart-transactions-controller';
import {
PermissionController,
SubjectMetadataController,
///: BEGIN:ONLY_INCLUDE_IN(flask)
SnapController,
///: END:ONLY_INCLUDE_IN
} from '@metamask/snap-controllers';
///: BEGIN:ONLY_INCLUDE_IN(flask)
import { IframeExecutionService } from '@metamask/iframe-execution-environment-service';
///: END:ONLY_INCLUDE_IN
import {
TRANSACTION_STATUSES,
@ -57,11 +64,17 @@ import {
import {
CaveatTypes,
RestrictedMethods,
///: BEGIN:ONLY_INCLUDE_IN(flask)
EndowmentPermissions,
///: END:ONLY_INCLUDE_IN
} from '../../shared/constants/permissions';
import { UI_NOTIFICATIONS } from '../../shared/notifications';
import { toChecksumHexAddress } from '../../shared/modules/hexstring-utils';
import { MILLISECOND } from '../../shared/constants/time';
import {
///: BEGIN:ONLY_INCLUDE_IN(flask)
MESSAGE_TYPE,
///: END:ONLY_INCLUDE_IN
POLLING_TOKEN_ENVIRONMENT_TYPES,
SUBJECT_TYPES,
} from '../../shared/constants/app';
@ -73,7 +86,12 @@ import { isEqualCaseInsensitive } from '../../ui/helpers/utils/util';
import ComposableObservableStore from './lib/ComposableObservableStore';
import AccountTracker from './lib/account-tracker';
import createLoggerMiddleware from './lib/createLoggerMiddleware';
import createMethodMiddleware from './lib/rpc-method-middleware';
import {
createMethodMiddleware,
///: BEGIN:ONLY_INCLUDE_IN(flask)
createSnapMethodMiddleware,
///: END:ONLY_INCLUDE_IN
} from './lib/rpc-method-middleware';
import createOriginMiddleware from './lib/createOriginMiddleware';
import createTabIdMiddleware from './lib/createTabIdMiddleware';
import createOnboardingMiddleware from './lib/createOnboardingMiddleware';
@ -107,9 +125,13 @@ import {
getPermissionBackgroundApiMethods,
getPermissionSpecifications,
getPermittedAccountsByOrigin,
PermissionLogController,
NOTIFICATION_NAMES,
PermissionLogController,
unrestrictedMethods,
///: BEGIN:ONLY_INCLUDE_IN(flask)
buildSnapEndowmentSpecifications,
buildSnapRestrictedMethodSpecifications,
///: END:ONLY_INCLUDE_IN
} from './controllers/permissions';
export const METAMASK_CONTROLLER_EVENTS = {
@ -500,7 +522,8 @@ export default class MetamaskController extends EventEmitter {
}),
state: initState.PermissionController,
caveatSpecifications: getCaveatSpecifications({ getIdentities }),
permissionSpecifications: getPermissionSpecifications({
permissionSpecifications: {
...getPermissionSpecifications({
getIdentities,
getAllAccounts: this.keyringController.getAccounts.bind(
this.keyringController,
@ -530,6 +553,10 @@ export default class MetamaskController extends EventEmitter {
);
},
}),
///: BEGIN:ONLY_INCLUDE_IN(flask)
...this.getSnapPermissionSpecifications(),
///: END:ONLY_INCLUDE_IN
},
unrestrictedMethods,
});
@ -547,6 +574,53 @@ export default class MetamaskController extends EventEmitter {
subjectCacheLimit: 100,
});
///: BEGIN:ONLY_INCLUDE_IN(flask)
this.workerController = new IframeExecutionService({
onError: this.onExecutionEnvironmentError.bind(this),
iframeUrl: new URL(
'https://metamask.github.io/iframe-execution-environment/0.3.1',
),
messenger: this.controllerMessenger.getRestricted({
name: 'ExecutionService',
}),
setupSnapProvider: this.setupSnapProvider.bind(this),
});
const snapControllerMessenger = this.controllerMessenger.getRestricted({
name: 'SnapController',
allowedEvents: [
'ExecutionService:unhandledError',
'ExecutionService:unresponsive',
],
allowedActions: [
`${this.permissionController.name}:getEndowments`,
`${this.permissionController.name}:getPermissions`,
`${this.permissionController.name}:hasPermission`,
`${this.permissionController.name}:requestPermissions`,
`${this.permissionController.name}:revokeAllPermissions`,
],
});
this.snapController = new SnapController({
endowmentPermissionNames: Object.values(EndowmentPermissions),
terminateAllSnaps: this.workerController.terminateAllSnaps.bind(
this.workerController,
),
terminateSnap: this.workerController.terminateSnap.bind(
this.workerController,
),
executeSnap: this.workerController.executeSnap.bind(
this.workerController,
),
getRpcMessageHandler: this.workerController.getRpcMessageHandler.bind(
this.workerController,
),
closeAllConnections: this.removeAllConnections.bind(this),
state: initState.SnapController,
messenger: snapControllerMessenger,
});
///: END:ONLY_INCLUDE_IN
this.detectTokensController = new DetectTokensController({
preferences: this.preferencesController,
tokensController: this.tokensController,
@ -597,7 +671,7 @@ export default class MetamaskController extends EventEmitter {
this.networkController,
),
preferencesStore: this.preferencesController.store,
txHistoryLimit: 40,
txHistoryLimit: 60,
signTransaction: this.keyringController.signTransaction.bind(
this.keyringController,
),
@ -623,6 +697,11 @@ export default class MetamaskController extends EventEmitter {
getEIP1559GasFeeEstimates: this.gasFeeController.fetchGasFeeEstimates.bind(
this.gasFeeController,
),
getExternalPendingTransactions: this.getExternalPendingTransactions.bind(
this,
),
getAccountType: this.getAccountType.bind(this),
getDeviceModel: this.getDeviceModel.bind(this),
});
this.txController.on('newUnapprovedTx', () => opts.showUserConfirmation());
@ -758,6 +837,24 @@ export default class MetamaskController extends EventEmitter {
this.gasFeeController,
),
});
this.smartTransactionsController = new SmartTransactionsController({
onNetworkStateChange: this.networkController.store.subscribe.bind(
this.networkController.store,
),
getNetwork: this.networkController.getNetworkState.bind(
this.networkController,
),
getNonceLock: this.txController.nonceTracker.getNonceLock.bind(
this.txController.nonceTracker,
),
confirmExternalTransaction: this.txController.confirmExternalTransaction.bind(
this.txController,
),
provider: this.provider,
trackMetaMetricsEvent: this.metaMetricsController.trackEvent.bind(
this.metaMetricsController,
),
});
// ensure accountTracker updates balances after network change
this.networkController.on(NETWORK_EVENTS.NETWORK_DID_CHANGE, () => {
@ -798,7 +895,11 @@ export default class MetamaskController extends EventEmitter {
GasFeeController: this.gasFeeController,
TokenListController: this.tokenListController,
TokensController: this.tokensController,
SmartTransactionsController: this.smartTransactionsController,
CollectiblesController: this.collectiblesController,
///: BEGIN:ONLY_INCLUDE_IN(flask)
SnapController: this.snapController,
///: END:ONLY_INCLUDE_IN
});
this.memStore = new ComposableObservableStore({
@ -834,7 +935,11 @@ export default class MetamaskController extends EventEmitter {
GasFeeController: this.gasFeeController,
TokenListController: this.tokenListController,
TokensController: this.tokensController,
SmartTransactionsController: this.smartTransactionsController,
CollectiblesController: this.collectiblesController,
///: BEGIN:ONLY_INCLUDE_IN(flask)
SnapController: this.snapController,
///: END:ONLY_INCLUDE_IN
},
controllerMessenger: this.controllerMessenger,
});
@ -866,6 +971,58 @@ export default class MetamaskController extends EventEmitter {
this.publicConfigStore = this.createPublicConfigStore();
}
///: BEGIN:ONLY_INCLUDE_IN(flask)
/**
* Constructor helper for getting Snap permission specifications.
*/
getSnapPermissionSpecifications() {
return {
...buildSnapEndowmentSpecifications(),
...buildSnapRestrictedMethodSpecifications({
addSnap: this.controllerMessenger.call.bind(
this.controllerMessenger,
'SnapController:add',
),
clearSnapState: (fromSubject) =>
this.controllerMessenger(
'SnapController:updateSnap',
fromSubject,
{},
),
getMnemonic: this.getPrimaryKeyringMnemonic.bind(this),
getSnap: this.controllerMessenger.call.bind(
this.controllerMessenger,
'SnapController:get',
),
getSnapRpcHandler: this.controllerMessenger.call.bind(
this.controllerMessenger,
'SnapController:getRpcMessageHandler',
),
getSnapState: async (...args) => {
// TODO:flask Just return the action result directly in the next
// @metamask/snap-controllers update.
return (
(await this.controllerMessenger.call(
'SnapController:getSnapState',
...args,
)) ?? null
);
},
showConfirmation: (origin, confirmationData) =>
this.approvalController.addAndShowApprovalRequest({
origin,
type: MESSAGE_TYPE.SNAP_CONFIRM,
requestData: confirmationData,
}),
updateSnapState: this.controllerMessenger.call.bind(
this.controllerMessenger,
'SnapController:updateSnapState',
),
}),
};
}
///: END:ONLY_INCLUDE_IN
/**
* Sets up BaseController V2 event subscriptions. Currently, this includes
* the subscriptions necessary to notify permission subjects of account
@ -929,6 +1086,39 @@ export default class MetamaskController extends EventEmitter {
},
getPermittedAccountsByOrigin,
);
///: BEGIN:ONLY_INCLUDE_IN(flask)
// Record Snap metadata whenever a Snap is added to state.
this.controllerMessenger.subscribe(
`${this.snapController.name}:snapAdded`,
(snapId, snap, svgIcon = null) => {
const {
manifest: { proposedName },
version,
} = snap;
this.subjectMetadataController.addSubjectMetadata({
subjectType: SUBJECT_TYPES.SNAP,
name: proposedName,
origin: snapId,
version,
svgIcon,
});
},
);
this.controllerMessenger.subscribe(
`${this.snapController.name}:snapInstalled`,
(snapId) => {
this.metaMetricsController.trackEvent({
event: 'Snap Installed',
category: 'Snaps',
properties: {
snap_id: snapId,
},
});
},
);
///: END:ONLY_INCLUDE_IN
}
/**
@ -1093,6 +1283,7 @@ export default class MetamaskController extends EventEmitter {
swapsController,
threeBoxController,
tokensController,
smartTransactionsController,
txController,
} = this;
@ -1315,6 +1506,9 @@ export default class MetamaskController extends EventEmitter {
updateAndApproveTransaction: txController.updateAndApproveTransaction.bind(
txController,
),
approveTransactionsWithSameNonce: txController.approveTransactionsWithSameNonce.bind(
txController,
),
createCancelTransaction: this.createCancelTransaction.bind(this),
createSpeedUpTransaction: this.createSpeedUpTransaction.bind(this),
estimateGas: this.estimateGas.bind(this),
@ -1325,6 +1519,7 @@ export default class MetamaskController extends EventEmitter {
createTransactionEventFragment: txController.createTransactionEventFragment.bind(
txController,
),
getTransactions: txController.getTransactions.bind(txController),
// messageManager
signMessage: this.signMessage.bind(this),
@ -1399,6 +1594,16 @@ export default class MetamaskController extends EventEmitter {
),
...getPermissionBackgroundApiMethods(permissionController),
///: BEGIN:ONLY_INCLUDE_IN(flask)
// snaps
removeSnapError: this.snapController.removeSnapError.bind(
this.snapController,
),
disableSnap: this.snapController.disableSnap.bind(this.snapController),
enableSnap: this.snapController.enableSnap.bind(this.snapController),
removeSnap: this.removeSnap.bind(this),
///: END:ONLY_INCLUDE_IN
// swaps
fetchAndSetQuotes: swapsController.fetchAndSetQuotes.bind(
swapsController,
@ -1443,6 +1648,9 @@ export default class MetamaskController extends EventEmitter {
swapsController,
),
setSwapsLiveness: swapsController.setSwapsLiveness.bind(swapsController),
setSwapsFeatureFlags: swapsController.setSwapsFeatureFlags.bind(
swapsController,
),
setSwapsUserFeeLevel: swapsController.setSwapsUserFeeLevel.bind(
swapsController,
),
@ -1450,6 +1658,32 @@ export default class MetamaskController extends EventEmitter {
swapsController,
),
// Smart Transactions
setSmartTransactionsOptInStatus: smartTransactionsController.setOptInState.bind(
smartTransactionsController,
),
fetchSmartTransactionFees: smartTransactionsController.getFees.bind(
smartTransactionsController,
),
estimateSmartTransactionsGas: smartTransactionsController.estimateGas.bind(
smartTransactionsController,
),
submitSignedTransactions: smartTransactionsController.submitSignedTransactions.bind(
smartTransactionsController,
),
cancelSmartTransaction: smartTransactionsController.cancelSmartTransaction.bind(
smartTransactionsController,
),
fetchSmartTransactionsLiveness: smartTransactionsController.fetchLiveness.bind(
smartTransactionsController,
),
updateSmartTransaction: smartTransactionsController.updateSmartTransaction.bind(
smartTransactionsController,
),
setStatusRefreshInterval: smartTransactionsController.setStatusRefreshInterval.bind(
smartTransactionsController,
),
// MetaMetrics
trackMetaMetricsEvent: metaMetricsController.trackEvent.bind(
metaMetricsController,
@ -1825,6 +2059,17 @@ export default class MetamaskController extends EventEmitter {
this.preferencesController.setSelectedAddress(address);
}
/**
* Gets the mnemonic of the user's primary keyring.
*/
getPrimaryKeyringMnemonic() {
const keyring = this.keyringController.getKeyringsByType('HD Key Tree')[0];
if (!keyring.mnemonic) {
throw new Error('Primary keyring mnemonic unavailable.');
}
return keyring.mnemonic;
}
//
// Hardware
//
@ -1861,7 +2106,7 @@ export default class MetamaskController extends EventEmitter {
if (deviceName === DEVICE_NAMES.LATTICE) {
keyring.appName = 'MetaMask';
}
if (deviceName === 'trezor') {
if (deviceName === DEVICE_NAMES.TREZOR) {
const model = keyring.getModel();
this.appStateController.setTrezorModel(model);
}
@ -1872,7 +2117,7 @@ export default class MetamaskController extends EventEmitter {
}
async attemptLedgerTransportCreation() {
const keyring = await this.getKeyringForDevice('ledger');
const keyring = await this.getKeyringForDevice(DEVICE_NAMES.LEDGER);
return await keyring.attemptMakeApp();
}
@ -1939,6 +2184,54 @@ export default class MetamaskController extends EventEmitter {
return true;
}
/**
* Retrieves the keyring for the selected address and using the .type returns
* a subtype for the account. Either 'hardware', 'imported' or 'MetaMask'.
*
* @param {string} address - Address to retrieve keyring for
* @returns {'hardware' | 'imported' | 'MetaMask'}
*/
async getAccountType(address) {
const keyring = await this.keyringController.getKeyringForAccount(address);
switch (keyring.type) {
case KEYRING_TYPES.TREZOR:
case KEYRING_TYPES.LATTICE:
case KEYRING_TYPES.QR:
case KEYRING_TYPES.LEDGER:
return 'hardware';
case KEYRING_TYPES.IMPORTED:
return 'imported';
default:
return 'MetaMask';
}
}
/**
* Retrieves the keyring for the selected address and using the .type
* determines if a more specific name for the device is available. Returns
* 'N/A' for non hardware wallets.
*
* @param {string} address - Address to retrieve keyring for
* @returns {'ledger' | 'lattice' | 'N/A' | string}
*/
async getDeviceModel(address) {
const keyring = await this.keyringController.getKeyringForAccount(address);
switch (keyring.type) {
case KEYRING_TYPES.TREZOR:
return keyring.getModel();
case KEYRING_TYPES.QR:
return keyring.getName();
case KEYRING_TYPES.LEDGER:
// TODO: get model after ledger keyring exposes method
return DEVICE_NAMES.LEDGER;
case KEYRING_TYPES.LATTICE:
// TODO: get model after lattice keyring exposes method
return DEVICE_NAMES.LATTICE;
default:
return 'N/A';
}
}
/**
* get hardware account label
*
@ -2200,6 +2493,32 @@ export default class MetamaskController extends EventEmitter {
return await promise;
}
///: BEGIN:ONLY_INCLUDE_IN(flask)
/**
* Gets an "app key" corresponding to an Ethereum address. An app key is more
* or less an addrdess hashed together with some string, in this case a
* subject identifier / origin.
*
* @todo Figure out a way to derive app keys that doesn't depend on the user's
* Ethereum addresses.
* @param {string} subject - The identifier of the subject whose app key to
* retrieve.
* @param {string} [requestedAccount] - The account whose app key to retrieve.
* The first account in the keyring will be used by default.
*/
async getAppKeyForSubject(subject, requestedAccount) {
let account;
if (requestedAccount) {
account = requestedAccount;
} else {
account = (await this.keyringController.getAccounts())[0];
}
return this.keyringController.exportAppKeyForAddress(account, subject);
}
///: END:ONLY_INCLUDE_IN
/**
* Signifies user intent to complete an eth_sign method.
*
@ -2670,6 +2989,13 @@ export default class MetamaskController extends EventEmitter {
* @property {string} - The URL of the page or frame hosting the script that sent the message.
*/
/**
* A Snap sender object.
*
* @typedef {Object} SnapSender
* @property {string} snapId - The ID of the snap.
*/
/**
* Used to create a multiplexed stream for connecting to an untrusted context
* like a Dapp or other extension.
@ -2681,6 +3007,7 @@ export default class MetamaskController extends EventEmitter {
*/
setupUntrustedCommunication({ connectionStream, sender, subjectType }) {
const { usePhishDetect } = this.preferencesController.store.getState();
let _subjectType;
if (subjectType) {
_subjectType = subjectType;
@ -2793,14 +3120,20 @@ export default class MetamaskController extends EventEmitter {
* A method for serving our ethereum provider over a given stream.
*
* @param {*} outStream - The stream to provide over.
* @param {MessageSender} sender - The sender of the messages on this stream
* @param {MessageSender | SnapSender} sender - The sender of the messages on this stream
* @param {string} subjectType - The type of the sender, i.e. subject.
*/
setupProviderConnection(outStream, sender, subjectType) {
let origin;
if (subjectType === SUBJECT_TYPES.INTERNAL) {
origin = 'metamask';
} else {
}
///: BEGIN:ONLY_INCLUDE_IN(flask)
else if (subjectType === SUBJECT_TYPES.SNAP) {
origin = sender.snapId;
}
///: END:ONLY_INCLUDE_IN
else {
origin = new URL(sender.url).origin;
}
@ -2819,9 +3152,9 @@ export default class MetamaskController extends EventEmitter {
const engine = this.setupProviderEngine({
origin,
tabId,
sender,
subjectType,
tabId,
});
// setup connection
@ -2843,6 +3176,33 @@ export default class MetamaskController extends EventEmitter {
});
}
///: BEGIN:ONLY_INCLUDE_IN(flask)
/**
* For snaps running in workers.
*
* @param snapId
* @param error
*/
onExecutionEnvironmentError(snapId, error) {
this.snapController.stopPlugin(snapId);
this.snapController.addSnapError(error);
}
/**
* For snaps running in workers.
*
* @param snapId
* @param connectionStream
*/
setupSnapProvider(snapId, connectionStream) {
this.setupUntrustedCommunication({
connectionStream,
sender: { snapId },
subjectType: SUBJECT_TYPES.SNAP,
});
}
///: END:ONLY_INCLUDE_IN
/**
* A method for creating a provider that is safely restricted for the requesting subject.
*
@ -2871,13 +3231,16 @@ export default class MetamaskController extends EventEmitter {
// append origin to each request
engine.push(createOriginMiddleware({ origin }));
// append tabId to each request if it exists
if (tabId) {
engine.push(createTabIdMiddleware({ tabId }));
}
// logging
engine.push(createLoggerMiddleware({ origin }));
engine.push(this.permissionLogController.createMiddleware());
// onboarding
if (subjectType === SUBJECT_TYPES.WEBSITE) {
engine.push(
@ -2887,6 +3250,8 @@ export default class MetamaskController extends EventEmitter {
}),
);
}
// Unrestricted/permissionless RPC method implementations
engine.push(
createMethodMiddleware({
origin,
@ -2974,6 +3339,34 @@ export default class MetamaskController extends EventEmitter {
),
}),
);
///: BEGIN:ONLY_INCLUDE_IN(flask)
engine.push(
createSnapMethodMiddleware(subjectType === SUBJECT_TYPES.SNAP, {
getAppKey: this.getAppKeyForSubject.bind(this, origin),
getSnaps: this.snapController.getPermittedSnaps.bind(
this.snapController,
origin,
),
requestPermissions: async (requestedPermissions) => {
const [
approvedPermissions,
] = await this.permissionController.requestPermissions(
{ origin },
requestedPermissions,
);
return Object.values(approvedPermissions);
},
getAccounts: this.getPermittedAccounts.bind(this, origin),
installSnaps: this.snapController.installSnaps.bind(
this.snapController,
origin,
),
}),
);
///: END:ONLY_INCLUDE_IN
// filter and subscription polyfills
engine.push(filterMiddleware);
engine.push(subscriptionManager.middleware);
@ -2985,6 +3378,7 @@ export default class MetamaskController extends EventEmitter {
}),
);
}
// forward to metamask primary provider
engine.push(providerAsMiddleware(provider));
return engine;
@ -3059,6 +3453,24 @@ export default class MetamaskController extends EventEmitter {
}
}
/**
* Closes all connections for the given origin, and removes the references
* to them.
* Ignores unknown origins.
*
* @param {string} origin - The origin string.
*/
removeAllConnections(origin) {
const connections = this.connections[origin];
if (!connections) {
return;
}
Object.keys(connections).forEach((id) => {
this.removeConnection(origin, id);
});
}
/**
* Causes the RPC engines associated with the connections to the given origin
* to emit a notification event with the given payload.
@ -3214,6 +3626,13 @@ export default class MetamaskController extends EventEmitter {
// MISCELLANEOUS
//=============================================================================
getExternalPendingTransactions(address) {
return this.smartTransactionsController.getTransactions({
addressFrom: address,
status: 'pending',
});
}
/**
* Returns the nonce that will be associated with a transaction once approved
*
@ -3415,7 +3834,7 @@ export default class MetamaskController extends EventEmitter {
transportType,
);
const keyring = await this.getKeyringForDevice('ledger');
const keyring = await this.getKeyringForDevice(DEVICE_NAMES.LEDGER);
if (keyring?.updateTransportMethod) {
return keyring.updateTransportMethod(newValue).catch((e) => {
// If there was an error updating the transport, we should
@ -3512,4 +3931,23 @@ export default class MetamaskController extends EventEmitter {
}
return this.keyringController.setLocked();
}
///: BEGIN:ONLY_INCLUDE_IN(flask)
// SNAPS
/**
* Removes the specified snap, and all of its associated permissions.
* If we didn't revoke the permission to access the snap from all subjects,
* they could just reinstall without any confirmation.
*
* TODO: This should be implemented in `SnapController.removeSnap` via a controller action.
*
* @param {{ id: string, permissionName: string }} snap - The wrapper object of the snap to remove.
*/
removeSnap(snap) {
this.snapController.removeSnap(snap.id);
this.permissionController.revokePermissionForAllSubjects(
snap.permissionName,
);
}
///: END:ONLY_INCLUDE_IN
}

@ -9,7 +9,10 @@ import proxyquire from 'proxyquire';
import { TRANSACTION_STATUSES } from '../../shared/constants/transaction';
import createTxMeta from '../../test/lib/createTxMeta';
import { NETWORK_TYPE_RPC } from '../../shared/constants/network';
import { KEYRING_TYPES } from '../../shared/constants/hardware-wallets';
import {
KEYRING_TYPES,
DEVICE_NAMES,
} from '../../shared/constants/hardware-wallets';
import { addHexPrefix } from './lib/util';
const Ganache = require('../../test/e2e/ganache');
@ -490,7 +493,9 @@ describe('MetaMaskController', function () {
it('should add the Trezor Hardware keyring', async function () {
sinon.spy(metamaskController.keyringController, 'addNewKeyring');
await metamaskController.connectHardware('trezor', 0).catch(() => null);
await metamaskController
.connectHardware(DEVICE_NAMES.TREZOR, 0)
.catch(() => null);
const keyrings = await metamaskController.keyringController.getKeyringsByType(
KEYRING_TYPES.TREZOR,
);
@ -503,7 +508,9 @@ describe('MetaMaskController', function () {
it('should add the Ledger Hardware keyring', async function () {
sinon.spy(metamaskController.keyringController, 'addNewKeyring');
await metamaskController.connectHardware('ledger', 0).catch(() => null);
await metamaskController
.connectHardware(DEVICE_NAMES.LEDGER, 0)
.catch(() => null);
const keyrings = await metamaskController.keyringController.getKeyringsByType(
KEYRING_TYPES.LEDGER,
);
@ -531,8 +538,12 @@ describe('MetaMaskController', function () {
});
it('should be locked by default', async function () {
await metamaskController.connectHardware('trezor', 0).catch(() => null);
const status = await metamaskController.checkHardwareStatus('trezor');
await metamaskController
.connectHardware(DEVICE_NAMES.TREZOR, 0)
.catch(() => null);
const status = await metamaskController.checkHardwareStatus(
DEVICE_NAMES.TREZOR,
);
assert.equal(status, false);
});
});
@ -550,8 +561,10 @@ describe('MetaMaskController', function () {
});
it('should wipe all the keyring info', async function () {
await metamaskController.connectHardware('trezor', 0).catch(() => null);
await metamaskController.forgetDevice('trezor');
await metamaskController
.connectHardware(DEVICE_NAMES.TREZOR, 0)
.catch(() => null);
await metamaskController.forgetDevice(DEVICE_NAMES.TREZOR);
const keyrings = await metamaskController.keyringController.getKeyringsByType(
KEYRING_TYPES.TREZOR,
);
@ -592,11 +605,11 @@ describe('MetaMaskController', function () {
sinon.spy(metamaskController.preferencesController, 'setSelectedAddress');
sinon.spy(metamaskController.preferencesController, 'setAccountLabel');
await metamaskController
.connectHardware('trezor', 0, `m/44'/1'/0'/0`)
.connectHardware(DEVICE_NAMES.TREZOR, 0, `m/44'/1'/0'/0`)
.catch(() => null);
await metamaskController.unlockHardwareWalletAccount(
accountToUnlock,
'trezor',
DEVICE_NAMES.TREZOR,
`m/44'/1'/0'/0`,
);
});

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save