From 4f36a3121c1667f042a63dac0cb0300772952643 Mon Sep 17 00:00:00 2001
From: Ariella Vu <20778143+digiwand@users.noreply.github.com>
Date: Fri, 17 Mar 2023 10:36:20 -0700
Subject: [PATCH 01/10] Sign in with Ethereum: re-enable warning UI for
mismatched domains / disable domain binding (#18200)
* siwe: re-enable warning UI for mismatched domains
- unblocks mismatched domain support
- we may re-add error handling here #18184
- reverts logic from #16616
* siwe: fix mismatch domain warning msg UI
* lint: rm whitespace EOL
* siwe: rm unit test
* lint: fix whitespace
* Revert "siwe: rm unit test"
This reverts commit c80a4a2e661609c46c76d1e43e05909b6db3f0f5.
---------
Co-authored-by: legobeat <109787230+legobeat@users.noreply.github.com>
---
app/scripts/lib/personal-message-manager.js | 9 ---------
app/scripts/lib/personal-message-manager.test.js | 10 ----------
.../app/signature-request-siwe/index.scss | 15 +++++++++++----
.../signature-request-siwe.js | 1 -
4 files changed, 11 insertions(+), 24 deletions(-)
diff --git a/app/scripts/lib/personal-message-manager.js b/app/scripts/lib/personal-message-manager.js
index 8440fa4ce..bb0a2b0c1 100644
--- a/app/scripts/lib/personal-message-manager.js
+++ b/app/scripts/lib/personal-message-manager.js
@@ -153,15 +153,6 @@ export default class PersonalMessageManager extends EventEmitter {
const siwe = detectSIWE(msgParams);
msgParams.siwe = siwe;
- if (siwe.isSIWEMessage && req.origin) {
- const { host } = new URL(req.origin);
- if (siwe.parsedMessage.domain !== host) {
- throw new Error(
- `SIWE domain is not valid: "${host}" !== "${siwe.parsedMessage.domain}"`,
- );
- }
- }
-
// create txData obj with parameters and meta data
const time = new Date().getTime();
const msgId = createId();
diff --git a/app/scripts/lib/personal-message-manager.test.js b/app/scripts/lib/personal-message-manager.test.js
index a4f8f4613..e565c0229 100644
--- a/app/scripts/lib/personal-message-manager.test.js
+++ b/app/scripts/lib/personal-message-manager.test.js
@@ -178,15 +178,5 @@ describe('Personal Message Manager', () => {
const result2 = messageManager.getMsg(msgId2);
expect(result2.msgParams.siwe.isSIWEMessage).toStrictEqual(false);
});
-
- it("should throw an error if the SIWE message's domain doesn't match", async () => {
- const request = { origin: 'https://mismatched-domain.com' };
- const { host: siweDomain } = new URL(origin);
- const { host: browserDomain } = new URL(request.origin);
- const expectedError = `SIWE domain is not valid: "${browserDomain}" !== "${siweDomain}"`;
- await expect(async () => {
- await messageManager.addUnapprovedMessage(msgParams, request);
- }).rejects.toThrow(expectedError);
- });
});
});
diff --git a/ui/components/app/signature-request-siwe/index.scss b/ui/components/app/signature-request-siwe/index.scss
index a6de5df10..2dedc438a 100644
--- a/ui/components/app/signature-request-siwe/index.scss
+++ b/ui/components/app/signature-request-siwe/index.scss
@@ -21,18 +21,25 @@
box-shadow: 0 0 7px 0 rgba(0, 0, 0, 0.08);
}
+ /** @todo replace ActionableMessage or remove overwritten code. */
.signature-request-siwe__actionable-message {
- margin: 0 16px 16px;
+ margin: 0 16px;
+ flex-direction: row;
+ align-items: initial;
.icon {
position: absolute;
left: 17px;
top: 13px;
}
- }
- .actionable-message--with-icon.actionable-message--with-right-button {
- padding-left: 48px;
+ .actionable-message__message {
+ padding-left: 16px;
+ }
+
+ &.actionable-message--with-icon {
+ padding-left: 16px;
+ }
}
}
diff --git a/ui/components/app/signature-request-siwe/signature-request-siwe.js b/ui/components/app/signature-request-siwe/signature-request-siwe.js
index b801be970..e7d7e178a 100644
--- a/ui/components/app/signature-request-siwe/signature-request-siwe.js
+++ b/ui/components/app/signature-request-siwe/signature-request-siwe.js
@@ -120,7 +120,6 @@ export default function SignatureRequestSIWE({
}
iconFillColor="var(--color-error-default)"
useIcon
- withRightButton
icon={}
/>
)}
From f730c6c8b4345a198c56c49c9aef1c13e6519c4f Mon Sep 17 00:00:00 2001
From: MetaMask Bot
Date: Fri, 17 Mar 2023 18:19:39 +0000
Subject: [PATCH 02/10] Version v10.26.2
---
CHANGELOG.md | 7 ++++++-
package.json | 2 +-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2f30379c3..3caea2e39 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
+## [10.26.2]
+### Uncategorized
+- Sign in with Ethereum: re-enable warning UI for mismatched domains / disable domain binding ([#18200](https://github.com/MetaMask/metamask-extension/pull/18200))
+
## [10.26.1]
### Fixed
- Fix main build by modifying desktop build steps ([#18112](https://github.com/MetaMask/metamask-extension/pull/18112))
@@ -3532,7 +3536,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Uncategorized
- Added the ability to restore accounts from seed words.
-[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.26.1...HEAD
+[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.26.2...HEAD
+[10.26.2]: https://github.com/MetaMask/metamask-extension/compare/v10.26.1...v10.26.2
[10.26.1]: https://github.com/MetaMask/metamask-extension/compare/v10.26.0...v10.26.1
[10.26.0]: https://github.com/MetaMask/metamask-extension/compare/v10.25.0...v10.26.0
[10.25.0]: https://github.com/MetaMask/metamask-extension/compare/v10.24.2...v10.25.0
diff --git a/package.json b/package.json
index c0e532056..7b100c4a3 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "metamask-crx",
- "version": "10.26.1",
+ "version": "10.26.2",
"private": true,
"repository": {
"type": "git",
From dacdaf031cd1b35a45e03041e55709d6302de4be Mon Sep 17 00:00:00 2001
From: legobeat <109787230+legobeat@users.noreply.github.com>
Date: Fri, 17 Mar 2023 23:29:39 +0900
Subject: [PATCH 03/10] security: patch request for CVE-2023-28155 (#18208)
* security: patch request for CVE-2023-28155
GHSA-p8p7-x288-28g6
Ported from https://github.com/request/request/pull/3444
* add iyarc exclusion
---
.iyarc | 4 +++
.../request-npm-2.88.2-f4a57c72c4.patch | 31 +++++++++++++++++++
package.json | 5 ++-
yarn.lock | 30 +++++++++++++++++-
4 files changed, 68 insertions(+), 2 deletions(-)
create mode 100644 .yarn/patches/request-npm-2.88.2-f4a57c72c4.patch
diff --git a/.iyarc b/.iyarc
index 3fa8de8b3..79536d383 100644
--- a/.iyarc
+++ b/.iyarc
@@ -15,3 +15,7 @@ GHSA-6fc8-4gx4-v693
# patched version of 3.3.1. We can remove this once the
# smart-transaction-controller updates its dependency.
GHSA-8gh8-hqwg-xf34
+
+# request library is subject to SSRF.
+# addressed by temporary patch in .yarn/patches/request-npm-2.88.2-f4a57c72c4.patch
+GHSA-p8p7-x288-28g6
diff --git a/.yarn/patches/request-npm-2.88.2-f4a57c72c4.patch b/.yarn/patches/request-npm-2.88.2-f4a57c72c4.patch
new file mode 100644
index 000000000..c879c340c
--- /dev/null
+++ b/.yarn/patches/request-npm-2.88.2-f4a57c72c4.patch
@@ -0,0 +1,31 @@
+diff --git a/lib/redirect.js b/lib/redirect.js
+index b9150e77c73d63367845c0aec15b5684d900943f..2864f9f2abc481ecf2b2dd96b1293f5b93393efd 100644
+--- a/lib/redirect.js
++++ b/lib/redirect.js
+@@ -14,6 +14,7 @@ function Redirect (request) {
+ this.redirects = []
+ this.redirectsFollowed = 0
+ this.removeRefererHeader = false
++ this.allowInsecureRedirect = false
+ }
+
+ Redirect.prototype.onRequest = function (options) {
+@@ -40,6 +41,9 @@ Redirect.prototype.onRequest = function (options) {
+ if (options.followOriginalHttpMethod !== undefined) {
+ self.followOriginalHttpMethod = options.followOriginalHttpMethod
+ }
++ if (options.allowInsecureRedirect !== undefined) {
++ self.allowInsecureRedirect = options.allowInsecureRedirect
++ }
+ }
+
+ Redirect.prototype.redirectTo = function (response) {
+@@ -108,7 +112,7 @@ Redirect.prototype.onResponse = function (response) {
+ request.uri = url.parse(redirectTo)
+
+ // handle the case where we change protocol from https to http or vice versa
+- if (request.uri.protocol !== uriPrev.protocol) {
++ if (request.uri.protocol !== uriPrev.protocol && self.allowInsecureRedirect) {
+ delete request.agent
+ }
+
diff --git a/package.json b/package.json
index 7b100c4a3..a29887794 100644
--- a/package.json
+++ b/package.json
@@ -206,7 +206,10 @@
"lavamoat-core@^14.0.0": "patch:lavamoat-core@npm%3A14.0.0#./.yarn/patches/lavamoat-core-npm-14.0.0-0f5bdac846.patch",
"lavamoat-core@^12.3.0": "patch:lavamoat-core@npm%3A12.4.0#./.yarn/patches/lavamoat-core-npm-12.4.0-cecca1a9b5.patch",
"lavamoat-core@^12.4.0": "patch:lavamoat-core@npm%3A12.4.0#./.yarn/patches/lavamoat-core-npm-12.4.0-cecca1a9b5.patch",
- "@lavamoat/snow@^1.4.1": "patch:@lavamoat/snow@npm%3A1.4.1#./.yarn/patches/@lavamoat-snow-npm-1.4.1-405a48e593.patch"
+ "@lavamoat/snow@^1.4.1": "patch:@lavamoat/snow@npm%3A1.4.1#./.yarn/patches/@lavamoat-snow-npm-1.4.1-405a48e593.patch",
+ "request@^2.83.0": "patch:request@npm%3A2.88.2#./.yarn/patches/request-npm-2.88.2-f4a57c72c4.patch",
+ "request@^2.88.2": "patch:request@npm%3A2.88.2#./.yarn/patches/request-npm-2.88.2-f4a57c72c4.patch",
+ "request@^2.85.0": "patch:request@npm%3A2.88.2#./.yarn/patches/request-npm-2.88.2-f4a57c72c4.patch"
},
"dependencies": {
"@babel/runtime": "^7.5.5",
diff --git a/yarn.lock b/yarn.lock
index 1e3838669..e023cfe05 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -29774,7 +29774,7 @@ __metadata:
languageName: node
linkType: hard
-"request@npm:^2.83.0, request@npm:^2.85.0, request@npm:^2.88.2":
+"request@npm:2.88.2":
version: 2.88.2
resolution: "request@npm:2.88.2"
dependencies:
@@ -29802,6 +29802,34 @@ __metadata:
languageName: node
linkType: hard
+"request@patch:request@npm%3A2.88.2#./.yarn/patches/request-npm-2.88.2-f4a57c72c4.patch::locator=metamask-crx%40workspace%3A.":
+ version: 2.88.2
+ resolution: "request@patch:request@npm%3A2.88.2#./.yarn/patches/request-npm-2.88.2-f4a57c72c4.patch::version=2.88.2&hash=2aadd7&locator=metamask-crx%40workspace%3A."
+ dependencies:
+ aws-sign2: ~0.7.0
+ aws4: ^1.8.0
+ caseless: ~0.12.0
+ combined-stream: ~1.0.6
+ extend: ~3.0.2
+ forever-agent: ~0.6.1
+ form-data: ~2.3.2
+ har-validator: ~5.1.3
+ http-signature: ~1.2.0
+ is-typedarray: ~1.0.0
+ isstream: ~0.1.2
+ json-stringify-safe: ~5.0.1
+ mime-types: ~2.1.19
+ oauth-sign: ~0.9.0
+ performance-now: ^2.1.0
+ qs: ~6.5.2
+ safe-buffer: ^5.1.2
+ tough-cookie: ~2.5.0
+ tunnel-agent: ^0.6.0
+ uuid: ^3.3.2
+ checksum: 1a64d706b36b2bdd5803c3a0fd3fee5e76e8c17d01c34f84972460fbfa5914302c300821a1fafce804d236e637f3745f3bdfbbb4219c139e112076790fc279af
+ languageName: node
+ linkType: hard
+
"require-directory@npm:^2.1.1":
version: 2.1.1
resolution: "require-directory@npm:2.1.1"
From ad9181c374d2602524da2b19a9e67f8251f901b9 Mon Sep 17 00:00:00 2001
From: Dan J Miller
Date: Fri, 17 Mar 2023 16:29:11 -0230
Subject: [PATCH 04/10] Update changelog
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3caea2e39..aca89dc0d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [10.26.2]
-### Uncategorized
+### Changed
- Sign in with Ethereum: re-enable warning UI for mismatched domains / disable domain binding ([#18200](https://github.com/MetaMask/metamask-extension/pull/18200))
## [10.26.1]
From 3552941323a9ddb8818c27fd4c789db17b3fc7df Mon Sep 17 00:00:00 2001
From: Victorien Gauch <85494462+VGau@users.noreply.github.com>
Date: Tue, 21 Mar 2023 17:28:38 +0100
Subject: [PATCH 05/10] feat: add the ConsenSys zkEVM (Linea) as a default
network (#17875)
* feat: add the consensys zkEVM as a default network
* fix: change infuraNetworkStatus in navigate-txs file
* fix: remove account tracker for zkEVM + remove zkEVM from infura list
* fix: change consensys zkevm name to linea + change rpc url for linea network
* fix: rebase conflicts
* feat: add new colors for linea goerli network
* feat: add new function inside network dropdown to render non infura networks
* feat: add feature toggle for linea network
* fix: add new unit test
---------
Co-authored-by: Dan J Miller
---
app/_locales/am/messages.json | 6 ++
app/_locales/ar/messages.json | 6 ++
app/_locales/bg/messages.json | 6 ++
app/_locales/ca/messages.json | 6 ++
app/_locales/da/messages.json | 6 ++
app/_locales/de/messages.json | 6 ++
app/_locales/el/messages.json | 6 ++
app/_locales/en/messages.json | 6 ++
app/_locales/es/messages.json | 6 ++
app/_locales/es_419/messages.json | 6 ++
app/_locales/et/messages.json | 6 ++
app/_locales/fa/messages.json | 6 ++
app/_locales/fi/messages.json | 6 ++
app/_locales/fil/messages.json | 3 +
app/_locales/fr/messages.json | 6 ++
app/_locales/he/messages.json | 6 ++
app/_locales/hi/messages.json | 6 ++
app/_locales/hr/messages.json | 6 ++
app/_locales/hu/messages.json | 6 ++
app/_locales/id/messages.json | 6 ++
app/_locales/it/messages.json | 6 ++
app/_locales/ja/messages.json | 6 ++
app/_locales/kn/messages.json | 6 ++
app/_locales/ko/messages.json | 6 ++
app/_locales/lt/messages.json | 6 ++
app/_locales/lv/messages.json | 6 ++
app/_locales/ms/messages.json | 6 ++
app/_locales/no/messages.json | 3 +
app/_locales/ph/messages.json | 6 ++
app/_locales/pl/messages.json | 6 ++
app/_locales/pt/messages.json | 6 ++
app/_locales/pt_BR/messages.json | 6 ++
app/_locales/ro/messages.json | 6 ++
app/_locales/ru/messages.json | 6 ++
app/_locales/sk/messages.json | 6 ++
app/_locales/sl/messages.json | 6 ++
app/_locales/sr/messages.json | 6 ++
app/_locales/sv/messages.json | 6 ++
app/_locales/sw/messages.json | 6 ++
app/_locales/tl/messages.json | 6 ++
app/_locales/tr/messages.json | 6 ++
app/_locales/uk/messages.json | 6 ++
app/_locales/vi/messages.json | 6 ++
app/_locales/zh_CN/messages.json | 6 ++
app/_locales/zh_TW/messages.json | 6 ++
.../handlers/switch-ethereum-chain.js | 3 +-
development/states/navigate-txs.json | 3 +-
shared/constants/network.ts | 27 +++++++
.../app/dropdowns/network-dropdown.js | 80 +++++++++++++++++--
.../app/dropdowns/network-dropdown.test.js | 19 ++++-
.../loading-network-screen.component.js | 2 +
.../signature-request-original.component.js | 2 +
.../signature-request.component.js | 2 +
ui/components/ui/typography/typography.js | 2 +
ui/css/design-system/colors.scss | 2 +
ui/css/itcss/components/network.scss | 4 +
ui/css/utilities/colors.scss | 2 +
ui/helpers/constants/design-system.ts | 8 ++
ui/helpers/constants/settings.js | 7 ++
ui/helpers/utils/settings-search.test.js | 2 +-
ui/helpers/utils/util.js | 1 +
ui/helpers/utils/util.test.js | 11 +++
ui/pages/routes/routes.component.js | 2 +
.../networks-tab/networks-tab.constants.js | 10 +++
.../settings/networks-tab/networks-tab.js | 40 ++++++----
ui/store/actions.ts | 2 +
66 files changed, 469 insertions(+), 26 deletions(-)
diff --git a/app/_locales/am/messages.json b/app/_locales/am/messages.json
index 8d86237b5..155a3286c 100644
--- a/app/_locales/am/messages.json
+++ b/app/_locales/am/messages.json
@@ -172,6 +172,9 @@
"connectingToGoerli": {
"message": "ከ Goerli የሙከራ አውታረ መረብ ጋር መገናኘት"
},
+ "connectingToLineaTestnet": {
+ "message": "ከ Linea Goerli የሙከራ አውታረ መረብ ጋር መገናኘት"
+ },
"connectingToMainnet": {
"message": "ከዋናው የ Ethereum አውታረ መረብ ጋር መገናኘት"
},
@@ -425,6 +428,9 @@
"likeToImportTokens": {
"message": "እነዚህን ተለዋጭ ስሞች ለማከል ይፈልጋሉ?"
},
+ "lineatestnet": {
+ "message": "የ Linea Goerli የሙከራ አውታረ መረብ"
+ },
"links": {
"message": "ማስፈንጠሪያዎች"
},
diff --git a/app/_locales/ar/messages.json b/app/_locales/ar/messages.json
index b1462ad75..50d252b1b 100644
--- a/app/_locales/ar/messages.json
+++ b/app/_locales/ar/messages.json
@@ -182,6 +182,9 @@
"connectingToGoerli": {
"message": "الاتصال بشبكة اختبار Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "الاتصال بشبكة اختبار Linea Goerli"
+ },
"connectingToMainnet": {
"message": "جارِ الاتصال بشبكة إيثيريوم الرئيسية"
},
@@ -437,6 +440,9 @@
"likeToImportTokens": {
"message": "هل ترغب في إضافة هذه الرموز؟"
},
+ "lineatestnet": {
+ "message": "شبكة اختبار Linea Goerli"
+ },
"links": {
"message": "الروابط"
},
diff --git a/app/_locales/bg/messages.json b/app/_locales/bg/messages.json
index 5eb731605..ea6d78ee6 100644
--- a/app/_locales/bg/messages.json
+++ b/app/_locales/bg/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "Свързване с тестова мрежа на Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Свързване с тестова мрежа на Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Свързване с главната мрежа Ethereum"
},
@@ -433,6 +436,9 @@
"likeToImportTokens": {
"message": "Искате ли да добавите тези жетони?"
},
+ "lineatestnet": {
+ "message": "Тестова мрежа на Linea Goerli"
+ },
"links": {
"message": "Връзки"
},
diff --git a/app/_locales/ca/messages.json b/app/_locales/ca/messages.json
index bae263733..b206f37dd 100644
--- a/app/_locales/ca/messages.json
+++ b/app/_locales/ca/messages.json
@@ -175,6 +175,9 @@
"connectingToGoerli": {
"message": "Connectant a Xarxa de Prova Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Connectant a Xarxa de Prova Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Connectant a Xarxa Principal Ethereum"
},
@@ -424,6 +427,9 @@
"likeToImportTokens": {
"message": "T'agradaria afegir aquestes fitxes?"
},
+ "lineatestnet": {
+ "message": "Xarxa de test Linea Goerli"
+ },
"links": {
"message": "Enllaços"
},
diff --git a/app/_locales/da/messages.json b/app/_locales/da/messages.json
index f0d400c0e..4640d2957 100644
--- a/app/_locales/da/messages.json
+++ b/app/_locales/da/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "Opretter forbindelse til Goerli Testnetværk"
},
+ "connectingToLineaTestnet": {
+ "message": "Opretter forbindelse til Linea Goerli Testnetværk"
+ },
"connectingToMainnet": {
"message": "Forbinder til dit Primære Ethereum Netværk"
},
@@ -430,6 +433,9 @@
"likeToImportTokens": {
"message": "Ønsker du at tilføje disse tokens?"
},
+ "lineatestnet": {
+ "message": "Linea-testnetværk"
+ },
"loadMore": {
"message": "Indlæs Mere"
},
diff --git a/app/_locales/de/messages.json b/app/_locales/de/messages.json
index be6cb7785..7890f6927 100644
--- a/app/_locales/de/messages.json
+++ b/app/_locales/de/messages.json
@@ -736,6 +736,9 @@
"connectingToGoerli": {
"message": "Verbindungsaufbau zum Goerli-Testnetzwerk"
},
+ "connectingToLineaTestnet": {
+ "message": "Verbindungsaufbau zum Linea-Testnetzwerk"
+ },
"connectingToMainnet": {
"message": "Verbinde zum Ethereum Mainnet"
},
@@ -1813,6 +1816,9 @@
"likeToImportTokens": {
"message": "Möchtest du diese Token hinzufügen?"
},
+ "lineatestnet": {
+ "message": "Linea-Testnetzwerk"
+ },
"link": {
"message": "Link"
},
diff --git a/app/_locales/el/messages.json b/app/_locales/el/messages.json
index df76ccafa..0f487ff17 100644
--- a/app/_locales/el/messages.json
+++ b/app/_locales/el/messages.json
@@ -736,6 +736,9 @@
"connectingToGoerli": {
"message": "Σύνδεση στο Δίκτυο Δοκιμής Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Σύνδεση στο δίκτυο δοκιμών Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Σύνδεση στο Κύριο Δίκτυο Ethereum"
},
@@ -1813,6 +1816,9 @@
"likeToImportTokens": {
"message": "Θέλετε να προσθέσετε αυτά τα token;"
},
+ "lineatestnet": {
+ "message": "Δίκτυο δοκιμών Linea Goerli"
+ },
"link": {
"message": "Σύνδεσμος"
},
diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json
index 12a2abfef..49ad840b2 100644
--- a/app/_locales/en/messages.json
+++ b/app/_locales/en/messages.json
@@ -743,6 +743,9 @@
"connectingToGoerli": {
"message": "Connecting to Goerli test network"
},
+ "connectingToLineaTestnet": {
+ "message": "Connecting to Linea Goerli test network"
+ },
"connectingToMainnet": {
"message": "Connecting to Ethereum Mainnet"
},
@@ -1836,6 +1839,9 @@
"likeToImportTokens": {
"message": "Would you like to import these tokens?"
},
+ "lineatestnet": {
+ "message": "Linea Goerli test network"
+ },
"link": {
"message": "Link"
},
diff --git a/app/_locales/es/messages.json b/app/_locales/es/messages.json
index 22d7489d6..aa1104a2d 100644
--- a/app/_locales/es/messages.json
+++ b/app/_locales/es/messages.json
@@ -736,6 +736,9 @@
"connectingToGoerli": {
"message": "Estableciendo conexión a la red de prueba Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Conectando a la red de prueba Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Estableciendo conexión a la red principal de Ethereum"
},
@@ -1813,6 +1816,9 @@
"likeToImportTokens": {
"message": "¿Le gustaría agregar estos tokens?"
},
+ "lineatestnet": {
+ "message": "Red de prueba Linea Goerli"
+ },
"link": {
"message": "Vínculo"
},
diff --git a/app/_locales/es_419/messages.json b/app/_locales/es_419/messages.json
index 774f552c7..b8e429718 100644
--- a/app/_locales/es_419/messages.json
+++ b/app/_locales/es_419/messages.json
@@ -469,6 +469,9 @@
"connectingToGoerli": {
"message": "Estableciendo conexión a la red de prueba Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Estableciendo conexión a la red de prueba Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Estableciendo conexión a la red principal de Ethereum"
},
@@ -1308,6 +1311,9 @@
"likeToImportTokens": {
"message": "¿Quiere agregar estos tokens?"
},
+ "lineatestnet": {
+ "message": "Red de prueba Linea Goerli"
+ },
"link": {
"message": "Enlace"
},
diff --git a/app/_locales/et/messages.json b/app/_locales/et/messages.json
index e6879d2d6..ba3c7b7ba 100644
--- a/app/_locales/et/messages.json
+++ b/app/_locales/et/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "Ühendamine Goerli testvõrguga"
},
+ "connectingToLineaTestnet": {
+ "message": "Ühendamine Linea Goerli testvõrguga"
+ },
"connectingToMainnet": {
"message": "Ühenduse loomine peamise Etherumi võrguga"
},
@@ -433,6 +436,9 @@
"likeToImportTokens": {
"message": "Kas soovite need load lisada?"
},
+ "lineatestnet": {
+ "message": "Linea Goerli testvõrk"
+ },
"links": {
"message": "Lingid"
},
diff --git a/app/_locales/fa/messages.json b/app/_locales/fa/messages.json
index 1b1a1ff53..084da8b5b 100644
--- a/app/_locales/fa/messages.json
+++ b/app/_locales/fa/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "در حال اتصال به شبکه آزمایشی Goerli "
},
+ "connectingToLineaTestnet": {
+ "message": "در حال اتصال به شبکه آزمایشی Linea Goerli"
+ },
"connectingToMainnet": {
"message": "در حال اتصال به شبکه اصلی ایتریم"
},
@@ -437,6 +440,9 @@
"likeToImportTokens": {
"message": "آیا میخواهید این رمزیاب ها را اضافه نمایید؟"
},
+ "lineatestnet": {
+ "message": "شبکه آزمایشی Linea Goerli"
+ },
"links": {
"message": "لینک ها"
},
diff --git a/app/_locales/fi/messages.json b/app/_locales/fi/messages.json
index 2cff7d700..46d6a0fac 100644
--- a/app/_locales/fi/messages.json
+++ b/app/_locales/fi/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "Yhdistetään Goerlin testiverkostoon"
},
+ "connectingToLineaTestnet": {
+ "message": "Yhdistetään Linea Goerli testiverkostoon"
+ },
"connectingToMainnet": {
"message": "Yhdistetään Ethereumin pääverkkoon"
},
@@ -437,6 +440,9 @@
"likeToImportTokens": {
"message": "Haluaisitko lisätä nämä poletit?"
},
+ "lineatestnet": {
+ "message": "Linea-testiverkko"
+ },
"links": {
"message": "Linkit"
},
diff --git a/app/_locales/fil/messages.json b/app/_locales/fil/messages.json
index 8168dc729..5c4207eab 100644
--- a/app/_locales/fil/messages.json
+++ b/app/_locales/fil/messages.json
@@ -157,6 +157,9 @@
"connectingToGoerli": {
"message": "Kumokonekta sa Goerli Test Network"
},
+ "connectingToLineaTestnet": {
+ "message": "Kumokonekta sa Linea Goerli Test Network"
+ },
"connectingToMainnet": {
"message": "Kumokonekta sa Ethereum Mainnet"
},
diff --git a/app/_locales/fr/messages.json b/app/_locales/fr/messages.json
index 909e07417..545919216 100644
--- a/app/_locales/fr/messages.json
+++ b/app/_locales/fr/messages.json
@@ -736,6 +736,9 @@
"connectingToGoerli": {
"message": "Connexion au testnet Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Connexion au réseau de test Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Connexion au réseau principal Ethereum"
},
@@ -1813,6 +1816,9 @@
"likeToImportTokens": {
"message": "Souhaitez-vous ajouter ces jetons ?"
},
+ "lineatestnet": {
+ "message": "Réseau de test Linea Goerli"
+ },
"link": {
"message": "Associer"
},
diff --git a/app/_locales/he/messages.json b/app/_locales/he/messages.json
index 94543a14f..22cfe088b 100644
--- a/app/_locales/he/messages.json
+++ b/app/_locales/he/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "מתחבר ל-Goerli Test Network"
},
+ "connectingToLineaTestnet": {
+ "message": "מתחבר ל-Linea Goerli Test Network"
+ },
"connectingToMainnet": {
"message": "מתחבר לרשת אתריום הראשית"
},
@@ -437,6 +440,9 @@
"likeToImportTokens": {
"message": "האם ברצונך להוסיף טוקנים אלה?"
},
+ "lineatestnet": {
+ "message": "רשת בדיקה Linea Goerli"
+ },
"links": {
"message": "קישורים"
},
diff --git a/app/_locales/hi/messages.json b/app/_locales/hi/messages.json
index 256e5b166..e232416af 100644
--- a/app/_locales/hi/messages.json
+++ b/app/_locales/hi/messages.json
@@ -736,6 +736,9 @@
"connectingToGoerli": {
"message": "Goerli टेस्ट नेटवर्क से कनेक्ट हो रहा है"
},
+ "connectingToLineaTestnet": {
+ "message": "Linea Goerli टेस्ट नेटवर्क से कनेक्ट हो रहा है"
+ },
"connectingToMainnet": {
"message": "Ethereum Mainnet से कनेक्ट हो रहा है"
},
@@ -1813,6 +1816,9 @@
"likeToImportTokens": {
"message": "क्या आप इन टोकन को इंपोर्ट करना चाहते हैं?"
},
+ "lineatestnet": {
+ "message": "Linea Goerli टेस्ट नेटवर्क"
+ },
"link": {
"message": "लिंक"
},
diff --git a/app/_locales/hr/messages.json b/app/_locales/hr/messages.json
index d959ef76c..ac747094d 100644
--- a/app/_locales/hr/messages.json
+++ b/app/_locales/hr/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "Povezivanje na testnu mrežu Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Povezivanje na testnu mrežu Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Povezivanje na glavnu mrežu Ethereum"
},
@@ -433,6 +436,9 @@
"likeToImportTokens": {
"message": "Želite li dodati ove tokene?"
},
+ "lineatestnet": {
+ "message": "Testna mreža Linea Goerli"
+ },
"links": {
"message": "Poveznice"
},
diff --git a/app/_locales/hu/messages.json b/app/_locales/hu/messages.json
index 1c0a5c87f..040a7822e 100644
--- a/app/_locales/hu/messages.json
+++ b/app/_locales/hu/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "Csatlakozás a Goerli teszthálózathoz"
},
+ "connectingToLineaTestnet": {
+ "message": "Csatlakozás a Linea Goerli teszthálózathoz"
+ },
"connectingToMainnet": {
"message": "Csatlakozás a fő Ethereum hálózathoz"
},
@@ -433,6 +436,9 @@
"likeToImportTokens": {
"message": "Hozzá szeretné adni ezeket az érméket?"
},
+ "lineatestnet": {
+ "message": "Linea Goerli teszthálózat"
+ },
"links": {
"message": "Linkek"
},
diff --git a/app/_locales/id/messages.json b/app/_locales/id/messages.json
index 65d3d6969..077a53028 100644
--- a/app/_locales/id/messages.json
+++ b/app/_locales/id/messages.json
@@ -736,6 +736,9 @@
"connectingToGoerli": {
"message": "Menghubungkan ke jaringan uji Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Menghubungkan ke jaringan uji Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Menghubungkan ke Ethereum Mainnet"
},
@@ -1813,6 +1816,9 @@
"likeToImportTokens": {
"message": "Apakah Anda ingin menambahkan token ini?"
},
+ "lineatestnet": {
+ "message": "Jaringan uji Linea Goerli"
+ },
"link": {
"message": "Tautan"
},
diff --git a/app/_locales/it/messages.json b/app/_locales/it/messages.json
index ed5798e4d..8bb36f323 100644
--- a/app/_locales/it/messages.json
+++ b/app/_locales/it/messages.json
@@ -599,6 +599,9 @@
"connectingToGoerli": {
"message": "Connessione alla Rete di Test Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Connessione alla Rete di test Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Connessione alla Rete Ethereum Principale"
},
@@ -1210,6 +1213,9 @@
"likeToImportTokens": {
"message": "Vorresti aggiungere questi token?"
},
+ "lineatestnet": {
+ "message": "Rete di test Linea Goerli"
+ },
"links": {
"message": "Collegamenti"
},
diff --git a/app/_locales/ja/messages.json b/app/_locales/ja/messages.json
index 797c53435..a78e13c19 100644
--- a/app/_locales/ja/messages.json
+++ b/app/_locales/ja/messages.json
@@ -736,6 +736,9 @@
"connectingToGoerli": {
"message": "Goerliテストネットワークに接続中"
},
+ "connectingToLineaTestnet": {
+ "message": "Linea Goerli テストネットワークに接続中"
+ },
"connectingToMainnet": {
"message": "イーサリアムメインネットに接続中"
},
@@ -1813,6 +1816,9 @@
"likeToImportTokens": {
"message": "これらのトークンを追加しますか?"
},
+ "lineatestnet": {
+ "message": "Linea Goerli テストネットワーク"
+ },
"link": {
"message": "リンク"
},
diff --git a/app/_locales/kn/messages.json b/app/_locales/kn/messages.json
index 2c58b461f..f4b75091e 100644
--- a/app/_locales/kn/messages.json
+++ b/app/_locales/kn/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "Goerli ಪರೀಕ್ಷಾ ನೆಟ್ವರ್ಕ್ಗೆ ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ"
},
+ "connectingToLineaTestnet": {
+ "message": "Linea Goerli ಪರೀಕ್ಷಾ ನೆಟ್ವರ್ಕ್ಗೆ ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ"
+ },
"connectingToMainnet": {
"message": "ಮುಖ್ಯ ಎಥೆರಿಯಮ್ ನೆಟ್ವರ್ಕ್ಗೆ ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ"
},
@@ -437,6 +440,9 @@
"likeToImportTokens": {
"message": "ನೀವು ಈ ಟೋಕನ್ಗಳನ್ನು ಸೇರಿಸಲು ಬಯಸುತ್ತೀರಾ?"
},
+ "lineatestnet": {
+ "message": "Linea Goerli ಪರೀಕ್ಷೆ ನೆಟ್ವರ್ಕ್"
+ },
"links": {
"message": "ಲಿಂಕ್ಗಳು"
},
diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json
index 9988fc17b..4fd899110 100644
--- a/app/_locales/ko/messages.json
+++ b/app/_locales/ko/messages.json
@@ -736,6 +736,9 @@
"connectingToGoerli": {
"message": "Goerli 테스트 네트워크에 연결 중"
},
+ "connectingToLineaTestnet": {
+ "message": "Linea Goerli 테스트 네트워크에 연결 중"
+ },
"connectingToMainnet": {
"message": "이더리움 메인넷에 연결 중"
},
@@ -1813,6 +1816,9 @@
"likeToImportTokens": {
"message": "이 토큰을 추가할까요?"
},
+ "lineatestnet": {
+ "message": "Linea Goerli 테스트 네트워크"
+ },
"link": {
"message": "링크"
},
diff --git a/app/_locales/lt/messages.json b/app/_locales/lt/messages.json
index 76765856f..e5942963d 100644
--- a/app/_locales/lt/messages.json
+++ b/app/_locales/lt/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "Jungiamasi prie „Goerli“ bandomojo tinklo"
},
+ "connectingToLineaTestnet": {
+ "message": "Jungiamasi prie „Linea“ bandomojo tinklo"
+ },
"connectingToMainnet": {
"message": "Jungiamasi prie pagrindinio „Ethereum“ tinklo"
},
@@ -437,6 +440,9 @@
"likeToImportTokens": {
"message": "Ar norėtumėte pridėti šiuos žetonus?"
},
+ "lineatestnet": {
+ "message": "„Linea“ bandomasis tinklas"
+ },
"links": {
"message": "Nuorodos"
},
diff --git a/app/_locales/lv/messages.json b/app/_locales/lv/messages.json
index 4a16847d0..906b990e7 100644
--- a/app/_locales/lv/messages.json
+++ b/app/_locales/lv/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "Pieslēdzas Goerli testa tīklam"
},
+ "connectingToLineaTestnet": {
+ "message": "Pieslēdzas Linea Goerli testa tīklam"
+ },
"connectingToMainnet": {
"message": "Savienojas ar galveno Ethereum tīklu"
},
@@ -433,6 +436,9 @@
"likeToImportTokens": {
"message": "Vai vēlaties pievienot šos marķierus?"
},
+ "lineatestnet": {
+ "message": "Linea Goerli testa tīkls"
+ },
"links": {
"message": "Saites"
},
diff --git a/app/_locales/ms/messages.json b/app/_locales/ms/messages.json
index 95865e4c2..86a29324f 100644
--- a/app/_locales/ms/messages.json
+++ b/app/_locales/ms/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "Menyambung kepada Rangkaian Ujian Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Menyambung kepada Rangkaian Ujian Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Menyambung kepada Rangkaian Ethereum Utama"
},
@@ -426,6 +429,9 @@
"likeToImportTokens": {
"message": "Adakah anda ingin menambah token ini?"
},
+ "lineatestnet": {
+ "message": "Rangkaian Ujian Linea Goerli"
+ },
"links": {
"message": "Pautan"
},
diff --git a/app/_locales/no/messages.json b/app/_locales/no/messages.json
index 46788f1c2..b8dfff373 100644
--- a/app/_locales/no/messages.json
+++ b/app/_locales/no/messages.json
@@ -175,6 +175,9 @@
"connectingToGoerli": {
"message": "Oppretter forbindelse med Goerli Test Network"
},
+ "connectingToLineaTestnet": {
+ "message": "Oppretter forbindelse med Linea Goerli Test Network"
+ },
"connectingToMainnet": {
"message": "Forbinder med hoved-Ethereumnettverk "
},
diff --git a/app/_locales/ph/messages.json b/app/_locales/ph/messages.json
index c972807c7..5f89b000a 100644
--- a/app/_locales/ph/messages.json
+++ b/app/_locales/ph/messages.json
@@ -332,6 +332,9 @@
"connectingToGoerli": {
"message": "Kumokonekta sa Goerli Test Network"
},
+ "connectingToLineaTestnet": {
+ "message": "Kumokonekta sa Linea Goerli Test Network"
+ },
"connectingToMainnet": {
"message": "Kumokonekta sa Ethereum Mainnet"
},
@@ -840,6 +843,9 @@
"likeToImportTokens": {
"message": "Gusto mo bang idagdag ang mga token na ito?"
},
+ "lineatestnet": {
+ "message": "Linea Goerli Test Network"
+ },
"links": {
"message": "Mga Link"
},
diff --git a/app/_locales/pl/messages.json b/app/_locales/pl/messages.json
index a403f46de..424615fa4 100644
--- a/app/_locales/pl/messages.json
+++ b/app/_locales/pl/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "Łączenie z siecią testową Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Łączenie z siecią testową Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Łączenie z główną siecią Ethereum"
},
@@ -437,6 +440,9 @@
"likeToImportTokens": {
"message": "Czy chcesz dodać te tokeny?"
},
+ "lineatestnet": {
+ "message": "Sieć testowa Linea Goerli"
+ },
"links": {
"message": "Łącza"
},
diff --git a/app/_locales/pt/messages.json b/app/_locales/pt/messages.json
index bfe7febde..7f1f61efd 100644
--- a/app/_locales/pt/messages.json
+++ b/app/_locales/pt/messages.json
@@ -736,6 +736,9 @@
"connectingToGoerli": {
"message": "Conectando à rede de testes Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Conectando à rede de teste Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Conectando à mainnet do Ethereum"
},
@@ -1813,6 +1816,9 @@
"likeToImportTokens": {
"message": "Gostaria de adicionar estes tokens?"
},
+ "lineatestnet": {
+ "message": "Rede de teste Linea Goerli"
+ },
"link": {
"message": "Link"
},
diff --git a/app/_locales/pt_BR/messages.json b/app/_locales/pt_BR/messages.json
index ae06eebdc..e5d15ee42 100644
--- a/app/_locales/pt_BR/messages.json
+++ b/app/_locales/pt_BR/messages.json
@@ -469,6 +469,9 @@
"connectingToGoerli": {
"message": "Conectando à rede de testes Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Conectando à rede de testes Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Conectando à mainnet do Ethereum"
},
@@ -1308,6 +1311,9 @@
"likeToImportTokens": {
"message": "Você gostaria de importar esses tokens?"
},
+ "lineatestnet": {
+ "message": "Rede de testes Linea Goerli"
+ },
"link": {
"message": "Link"
},
diff --git a/app/_locales/ro/messages.json b/app/_locales/ro/messages.json
index 44efbb0cc..3592f2faa 100644
--- a/app/_locales/ro/messages.json
+++ b/app/_locales/ro/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "Se conectează la rețeaua de test Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Se conectează la rețeaua de test Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Se conectează la rețeaua Ethereum principală"
},
@@ -427,6 +430,9 @@
"likeToImportTokens": {
"message": "Adăugați aceste indicative?"
},
+ "lineatestnet": {
+ "message": "Rețea de test Linea Goerli"
+ },
"links": {
"message": "Link-uri"
},
diff --git a/app/_locales/ru/messages.json b/app/_locales/ru/messages.json
index 2221e078b..efc0c1ec7 100644
--- a/app/_locales/ru/messages.json
+++ b/app/_locales/ru/messages.json
@@ -736,6 +736,9 @@
"connectingToGoerli": {
"message": "Подключение к тестовой сети Goerli..."
},
+ "connectingToLineaTestnet": {
+ "message": "Подключение к тестовой сети Linea..."
+ },
"connectingToMainnet": {
"message": "Подключение к сети Ethereum Mainnet..."
},
@@ -1813,6 +1816,9 @@
"likeToImportTokens": {
"message": "Вы хотели бы импортировать эти токены?"
},
+ "lineatestnet": {
+ "message": "Тестовая сеть Linea Goerli"
+ },
"link": {
"message": "Привязать"
},
diff --git a/app/_locales/sk/messages.json b/app/_locales/sk/messages.json
index b43ecd63f..29b29567c 100644
--- a/app/_locales/sk/messages.json
+++ b/app/_locales/sk/messages.json
@@ -172,6 +172,9 @@
"connectingToGoerli": {
"message": "Pripája sa k testovacej sieti Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Pripája sa k testovacej sieti Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Připojuji se k Ethereum Mainnet"
},
@@ -424,6 +427,9 @@
"likeToImportTokens": {
"message": "Chcete přidat tyto tokeny?"
},
+ "lineatestnet": {
+ "message": "Testovacia sieť Linea Goerli"
+ },
"links": {
"message": "Odkazy"
},
diff --git a/app/_locales/sl/messages.json b/app/_locales/sl/messages.json
index fca992011..386e4e8a8 100644
--- a/app/_locales/sl/messages.json
+++ b/app/_locales/sl/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "Povezovanje na testno omrežje Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Povezovanje na testno omrežje Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Povezovanje na glavno omrežje"
},
@@ -431,6 +434,9 @@
"likeToImportTokens": {
"message": "Želite dodati te žetone?"
},
+ "lineatestnet": {
+ "message": "Testno omrežje Linea Goerli"
+ },
"links": {
"message": "Povezave"
},
diff --git a/app/_locales/sr/messages.json b/app/_locales/sr/messages.json
index 72e8eb829..5308a5653 100644
--- a/app/_locales/sr/messages.json
+++ b/app/_locales/sr/messages.json
@@ -175,6 +175,9 @@
"connectingToGoerli": {
"message": "Povezuje se sa test mrežom Goerli "
},
+ "connectingToLineaTestnet": {
+ "message": "Povezuje se sa test mrežom Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Povezuje se na glavnu Ethereum mrežu"
},
@@ -434,6 +437,9 @@
"likeToImportTokens": {
"message": "Želite li da dodate ove tokene?"
},
+ "lineatestnet": {
+ "message": "Test mreža Linea Goerli"
+ },
"links": {
"message": "Veze"
},
diff --git a/app/_locales/sv/messages.json b/app/_locales/sv/messages.json
index b73e7c7f5..a5b365916 100644
--- a/app/_locales/sv/messages.json
+++ b/app/_locales/sv/messages.json
@@ -172,6 +172,9 @@
"connectingToGoerli": {
"message": "Ansluter till Goerli Test Network"
},
+ "connectingToLineaTestnet": {
+ "message": "Ansluter till Linea Goerli Test Network"
+ },
"connectingToMainnet": {
"message": "Koppla till Ethereums huvudnätverk"
},
@@ -427,6 +430,9 @@
"likeToImportTokens": {
"message": "Vill du lägga till dessa tokens?"
},
+ "lineatestnet": {
+ "message": "Linea Goerli testnätverk"
+ },
"links": {
"message": "Länkar"
},
diff --git a/app/_locales/sw/messages.json b/app/_locales/sw/messages.json
index 59e28b5c7..4884f08c6 100644
--- a/app/_locales/sw/messages.json
+++ b/app/_locales/sw/messages.json
@@ -172,6 +172,9 @@
"connectingToGoerli": {
"message": "Inaunganisha kwenye Mtandao wa Majaribio wa Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Inaunganisha kwenye Mtandao wa Majaribio wa Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Inaunganisha kwenye Mtandao Mkuu wa Ethereum"
},
@@ -424,6 +427,9 @@
"likeToImportTokens": {
"message": "Je, ungependa kuongeza vianzio hivi?"
},
+ "lineatestnet": {
+ "message": "Mtandao wa Majaribio wa Linea Goerli"
+ },
"links": {
"message": "Viungo"
},
diff --git a/app/_locales/tl/messages.json b/app/_locales/tl/messages.json
index ef92e1c31..d49004713 100644
--- a/app/_locales/tl/messages.json
+++ b/app/_locales/tl/messages.json
@@ -736,6 +736,9 @@
"connectingToGoerli": {
"message": "Kumokonekta sa Goerli Test Network"
},
+ "connectingToLineaTestnet": {
+ "message": "Kumokonekta sa Linea Goerli test network"
+ },
"connectingToMainnet": {
"message": "Kumokonekta sa Ethereum Mainnet"
},
@@ -1813,6 +1816,9 @@
"likeToImportTokens": {
"message": "Gusto mo bang idagdag ang mga token na ito?"
},
+ "lineatestnet": {
+ "message": "Linea Goerli test network"
+ },
"link": {
"message": "Link"
},
diff --git a/app/_locales/tr/messages.json b/app/_locales/tr/messages.json
index bc120bb11..ffa5f6c6a 100644
--- a/app/_locales/tr/messages.json
+++ b/app/_locales/tr/messages.json
@@ -736,6 +736,9 @@
"connectingToGoerli": {
"message": "Goerli Test Ağına Bağlanıyor"
},
+ "connectingToLineaTestnet": {
+ "message": "Linea Goerli test ağına bağlanılıyor"
+ },
"connectingToMainnet": {
"message": "Ethereum Mainnet ağına bağlanıyor"
},
@@ -1813,6 +1816,9 @@
"likeToImportTokens": {
"message": "Bu tokenleri içe aktarmak ister misiniz?"
},
+ "lineatestnet": {
+ "message": "Linea Goerli test ağı"
+ },
"link": {
"message": "Bağlantı"
},
diff --git a/app/_locales/uk/messages.json b/app/_locales/uk/messages.json
index 69fa453ba..3a1748a5d 100644
--- a/app/_locales/uk/messages.json
+++ b/app/_locales/uk/messages.json
@@ -178,6 +178,9 @@
"connectingToGoerli": {
"message": "Підключення до тестової мережі Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Підключення до тестової мережі Linea Goerli"
+ },
"connectingToMainnet": {
"message": "З'єднуємось з Головною мережею Ethereum"
},
@@ -437,6 +440,9 @@
"likeToImportTokens": {
"message": "Ви б хотіли додати ці токени?"
},
+ "lineatestnet": {
+ "message": "Тестова мережа Linea Goerli"
+ },
"links": {
"message": "Посилання"
},
diff --git a/app/_locales/vi/messages.json b/app/_locales/vi/messages.json
index bc03a062d..0fbff37ab 100644
--- a/app/_locales/vi/messages.json
+++ b/app/_locales/vi/messages.json
@@ -736,6 +736,9 @@
"connectingToGoerli": {
"message": "Đang kết nối với mạng thử nghiệm Goerli"
},
+ "connectingToLineaTestnet": {
+ "message": "Đang kết nối với mạng thử nghiệm Linea Goerli"
+ },
"connectingToMainnet": {
"message": "Đang kết nối với mạng chính thức của Ethereum"
},
@@ -1813,6 +1816,9 @@
"likeToImportTokens": {
"message": "Bạn có muốn nhập những token này không?"
},
+ "lineatestnet": {
+ "message": "Mạng thử nghiệm Linea Goerli"
+ },
"link": {
"message": "Liên kết"
},
diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json
index e7f16c271..986e750c1 100644
--- a/app/_locales/zh_CN/messages.json
+++ b/app/_locales/zh_CN/messages.json
@@ -736,6 +736,9 @@
"connectingToGoerli": {
"message": "正在连接 Goerli 测试网络"
},
+ "connectingToLineaTestnet": {
+ "message": "正在连接Linea测试网络"
+ },
"connectingToMainnet": {
"message": "正在连接到以太坊主网"
},
@@ -1813,6 +1816,9 @@
"likeToImportTokens": {
"message": "您想导入这些代币吗?"
},
+ "lineatestnet": {
+ "message": "Linea测试网络"
+ },
"link": {
"message": "链接"
},
diff --git a/app/_locales/zh_TW/messages.json b/app/_locales/zh_TW/messages.json
index 16b1843a4..6d56de0c3 100644
--- a/app/_locales/zh_TW/messages.json
+++ b/app/_locales/zh_TW/messages.json
@@ -331,6 +331,9 @@
"connectingToGoerli": {
"message": "連線到 Goerli 測試網路"
},
+ "connectingToLineaTestnet": {
+ "message": "連線到 Linea Goerli 測試網路"
+ },
"connectingToMainnet": {
"message": "連線到 Ethereum 主網路"
},
@@ -854,6 +857,9 @@
"likeToImportTokens": {
"message": "確定要加入代幣?"
},
+ "lineatestnet": {
+ "message": "Linea Goerli 測試網路"
+ },
"links": {
"message": "連結"
},
diff --git a/app/scripts/lib/rpc-method-middleware/handlers/switch-ethereum-chain.js b/app/scripts/lib/rpc-method-middleware/handlers/switch-ethereum-chain.js
index 7c5edc155..c3a0bbfe8 100644
--- a/app/scripts/lib/rpc-method-middleware/handlers/switch-ethereum-chain.js
+++ b/app/scripts/lib/rpc-method-middleware/handlers/switch-ethereum-chain.js
@@ -110,7 +110,8 @@ async function switchEthereumChainHandler(
});
if (
chainId in CHAIN_ID_TO_TYPE_MAP &&
- approvedRequestData.type !== NETWORK_TYPES.LOCALHOST
+ approvedRequestData.type !== NETWORK_TYPES.LOCALHOST &&
+ approvedRequestData.type !== NETWORK_TYPES.LINEA_TESTNET
) {
setProviderType(approvedRequestData.type);
} else {
diff --git a/development/states/navigate-txs.json b/development/states/navigate-txs.json
index 68d2535a2..6a4605e9a 100644
--- a/development/states/navigate-txs.json
+++ b/development/states/navigate-txs.json
@@ -304,7 +304,8 @@
"infuraNetworkStatus": {
"mainnet": "ok",
"goerli": "ok",
- "sepolia": "ok"
+ "sepolia": "ok",
+ "lineatestnet": "ok"
}
},
"send": {
diff --git a/shared/constants/network.ts b/shared/constants/network.ts
index 84314ac3d..a11db2b5e 100644
--- a/shared/constants/network.ts
+++ b/shared/constants/network.ts
@@ -165,6 +165,7 @@ export const NETWORK_TYPES = {
MAINNET: 'mainnet',
RPC: 'rpc',
SEPOLIA: 'sepolia',
+ LINEA_TESTNET: 'lineatestnet',
} as const;
/**
@@ -190,6 +191,7 @@ export const NETWORK_IDS = {
GOERLI: '5',
LOCALHOST: '1337',
SEPOLIA: '11155111',
+ LINEA_TESTNET: '59140',
} as const;
/**
@@ -211,6 +213,7 @@ export const CHAIN_IDS = {
HARMONY: '0x63564c40',
PALM: '0x2a15c308d',
SEPOLIA: '0xaa36a7',
+ LINEA_TESTNET: '0xe704',
AURORA: '0x4e454152',
} as const;
@@ -223,6 +226,7 @@ export const MAX_SAFE_CHAIN_ID = 4503599627370476;
export const MAINNET_DISPLAY_NAME = 'Ethereum Mainnet';
export const GOERLI_DISPLAY_NAME = 'Goerli';
export const SEPOLIA_DISPLAY_NAME = 'Sepolia';
+export const LINEA_TESTNET_DISPLAY_NAME = 'Linea Goerli test network';
export const LOCALHOST_DISPLAY_NAME = 'Localhost 8545';
export const BSC_DISPLAY_NAME = 'Binance Smart Chain';
export const POLYGON_DISPLAY_NAME = 'Polygon';
@@ -252,6 +256,7 @@ export const MAINNET_RPC_URL = getRpcUrl({
});
export const GOERLI_RPC_URL = getRpcUrl({ network: NETWORK_TYPES.GOERLI });
export const SEPOLIA_RPC_URL = getRpcUrl({ network: NETWORK_TYPES.SEPOLIA });
+export const LINEA_TESTNET_RPC_URL = 'https://rpc.goerli.linea.build';
export const LOCALHOST_RPC_URL = 'http://localhost:8545';
/**
@@ -428,6 +433,7 @@ export const INFURA_PROVIDER_TYPES = [
export const TEST_CHAINS = [
CHAIN_IDS.GOERLI,
CHAIN_IDS.SEPOLIA,
+ CHAIN_IDS.LINEA_TESTNET,
CHAIN_IDS.LOCALHOST,
];
@@ -446,6 +452,10 @@ export const TEST_NETWORK_TICKER_MAP: {
[NETWORK_TYPES.SEPOLIA]: `${typedCapitalize(NETWORK_TYPES.SEPOLIA)}${
CURRENCY_SYMBOLS.ETH
}`,
+ [NETWORK_TYPES.LINEA_TESTNET]:
+ `Linea${CURRENCY_SYMBOLS.ETH}` as `${Capitalize<
+ typeof NETWORK_TYPES.LINEA_TESTNET
+ >}${typeof CURRENCY_SYMBOLS.ETH}`,
};
/**
@@ -462,6 +472,12 @@ export const BUILT_IN_NETWORKS = {
chainId: CHAIN_IDS.SEPOLIA,
ticker: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.SEPOLIA],
},
+ [NETWORK_TYPES.LINEA_TESTNET]: {
+ networkId: NETWORK_IDS.LINEA_TESTNET,
+ chainId: CHAIN_IDS.LINEA_TESTNET,
+ ticker: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.LINEA_TESTNET],
+ blockExplorerUrl: 'https://explorer.goerli.linea.build',
+ },
[NETWORK_TYPES.MAINNET]: {
networkId: NETWORK_IDS.MAINNET,
chainId: CHAIN_IDS.MAINNET,
@@ -476,15 +492,18 @@ export const NETWORK_TO_NAME_MAP = {
[NETWORK_TYPES.MAINNET]: MAINNET_DISPLAY_NAME,
[NETWORK_TYPES.GOERLI]: GOERLI_DISPLAY_NAME,
[NETWORK_TYPES.SEPOLIA]: SEPOLIA_DISPLAY_NAME,
+ [NETWORK_TYPES.LINEA_TESTNET]: LINEA_TESTNET_DISPLAY_NAME,
[NETWORK_TYPES.LOCALHOST]: LOCALHOST_DISPLAY_NAME,
[NETWORK_IDS.GOERLI]: GOERLI_DISPLAY_NAME,
[NETWORK_IDS.SEPOLIA]: SEPOLIA_DISPLAY_NAME,
+ [NETWORK_IDS.LINEA_TESTNET]: LINEA_TESTNET_DISPLAY_NAME,
[NETWORK_IDS.MAINNET]: MAINNET_DISPLAY_NAME,
[NETWORK_IDS.LOCALHOST]: LOCALHOST_DISPLAY_NAME,
[CHAIN_IDS.GOERLI]: GOERLI_DISPLAY_NAME,
[CHAIN_IDS.SEPOLIA]: SEPOLIA_DISPLAY_NAME,
+ [CHAIN_IDS.LINEA_TESTNET]: LINEA_TESTNET_DISPLAY_NAME,
[CHAIN_IDS.MAINNET]: MAINNET_DISPLAY_NAME,
[CHAIN_IDS.LOCALHOST]: LOCALHOST_DISPLAY_NAME,
} as const;
@@ -493,12 +512,14 @@ export const CHAIN_ID_TO_TYPE_MAP = {
[CHAIN_IDS.MAINNET]: NETWORK_TYPES.MAINNET,
[CHAIN_IDS.GOERLI]: NETWORK_TYPES.GOERLI,
[CHAIN_IDS.SEPOLIA]: NETWORK_TYPES.SEPOLIA,
+ [CHAIN_IDS.LINEA_TESTNET]: NETWORK_TYPES.LINEA_TESTNET,
[CHAIN_IDS.LOCALHOST]: NETWORK_TYPES.LOCALHOST,
} as const;
export const CHAIN_ID_TO_RPC_URL_MAP = {
[CHAIN_IDS.GOERLI]: GOERLI_RPC_URL,
[CHAIN_IDS.SEPOLIA]: SEPOLIA_RPC_URL,
+ [CHAIN_IDS.LINEA_TESTNET]: LINEA_TESTNET_RPC_URL,
[CHAIN_IDS.MAINNET]: MAINNET_RPC_URL,
[CHAIN_IDS.LOCALHOST]: LOCALHOST_RPC_URL,
} as const;
@@ -520,6 +541,7 @@ export const CHAIN_ID_TO_NETWORK_IMAGE_URL_MAP = {
export const NETWORK_ID_TO_ETHERS_NETWORK_NAME_MAP = {
[NETWORK_IDS.GOERLI]: NETWORK_TYPES.GOERLI,
[NETWORK_IDS.SEPOLIA]: NETWORK_TYPES.SEPOLIA,
+ [NETWORK_IDS.LINEA_TESTNET]: NETWORK_TYPES.LINEA_TESTNET,
[NETWORK_IDS.MAINNET]: NETWORK_NAMES.HOMESTEAD,
} as const;
@@ -527,6 +549,7 @@ export const CHAIN_ID_TO_NETWORK_ID_MAP = {
[CHAIN_IDS.MAINNET]: NETWORK_IDS.MAINNET,
[CHAIN_IDS.GOERLI]: NETWORK_IDS.GOERLI,
[CHAIN_IDS.SEPOLIA]: NETWORK_IDS.SEPOLIA,
+ [CHAIN_IDS.LINEA_TESTNET]: NETWORK_IDS.LINEA_TESTNET,
[CHAIN_IDS.LOCALHOST]: NETWORK_IDS.LOCALHOST,
} as const;
@@ -591,6 +614,7 @@ export const BUYABLE_CHAINS_MAP: {
| typeof CHAIN_IDS.PALM
| typeof CHAIN_IDS.HARMONY
| typeof CHAIN_IDS.OPTIMISM_TESTNET
+ | typeof CHAIN_IDS.LINEA_TESTNET
>]: BuyableChainSettings;
} = {
[CHAIN_IDS.MAINNET]: {
@@ -982,3 +1006,6 @@ export const FEATURED_RPCS: RPCDefinition[] = [
},
},
];
+
+export const SHOULD_SHOW_LINEA_TESTNET_NETWORK =
+ new Date().getTime() > Date.UTC(2023, 2, 28);
diff --git a/ui/components/app/dropdowns/network-dropdown.js b/ui/components/app/dropdowns/network-dropdown.js
index f54c8ddce..0e1884441 100644
--- a/ui/components/app/dropdowns/network-dropdown.js
+++ b/ui/components/app/dropdowns/network-dropdown.js
@@ -7,8 +7,13 @@ import Button from '../../ui/button';
import * as actions from '../../../store/actions';
import { openAlert as displayInvalidCustomNetworkAlert } from '../../../ducks/alerts/invalid-custom-network';
import {
+ BUILT_IN_NETWORKS,
+ CHAIN_ID_TO_RPC_URL_MAP,
+ LINEA_TESTNET_RPC_URL,
LOCALHOST_RPC_URL,
+ NETWORK_TO_NAME_MAP,
NETWORK_TYPES,
+ SHOULD_SHOW_LINEA_TESTNET_NETWORK,
} from '../../../../shared/constants/network';
import { isPrefixedFormattedHexString } from '../../../../shared/modules/network.utils';
@@ -57,8 +62,12 @@ function mapDispatchToProps(dispatch) {
setProviderType: (type) => {
dispatch(actions.setProviderType(type));
},
- setRpcTarget: (target, chainId, ticker, nickname) => {
- dispatch(actions.setRpcTarget(target, chainId, ticker, nickname));
+ setRpcTarget: (target, chainId, ticker, nickname, { blockExplorerUrl }) => {
+ dispatch(
+ actions.setRpcTarget(target, chainId, ticker, nickname, {
+ blockExplorerUrl,
+ }),
+ );
},
hideNetworkDropdown: () => dispatch(actions.hideNetworkDropdown()),
displayInvalidCustomNetworkAlert: (networkName) => {
@@ -224,6 +233,8 @@ class NetworkDropdown extends Component {
return t('goerli');
case NETWORK_TYPES.SEPOLIA:
return t('sepolia');
+ case NETWORK_TYPES.LINEA_TESTNET:
+ return t('lineatestnet');
case NETWORK_TYPES.LOCALHOST:
return t('localhost');
default:
@@ -268,6 +279,55 @@ class NetworkDropdown extends Component {
);
}
+ renderNonInfuraDefaultNetwork(network) {
+ const {
+ provider: { type: providerType },
+ setRpcTarget,
+ } = this.props;
+
+ const isCurrentRpcTarget = providerType === NETWORK_TYPES.RPC;
+ return (
+ {
+ const { chainId, ticker, blockExplorerUrl } =
+ BUILT_IN_NETWORKS[network];
+ const networkName = NETWORK_TO_NAME_MAP[network];
+
+ const rpcUrl = CHAIN_ID_TO_RPC_URL_MAP[chainId];
+ await setRpcTarget(rpcUrl, chainId, ticker, networkName, {
+ blockExplorerUrl,
+ });
+ }}
+ style={DROP_DOWN_MENU_ITEM_STYLE}
+ >
+ {isCurrentRpcTarget ? (
+
+ ) : (
+ ✓
+ )}
+
+
+ {this.context.t(network)}
+
+
+ );
+ }
+
render() {
const {
history,
@@ -277,9 +337,12 @@ class NetworkDropdown extends Component {
showTestnetMessageInDropdown,
hideTestNetMessage,
} = this.props;
+
const rpcListDetail = this.props.frequentRpcListDetail;
- const rpcListDetailWithoutLocalHost = rpcListDetail.filter(
- (rpc) => rpc.rpcUrl !== LOCALHOST_RPC_URL,
+ const rpcListDetailWithoutLocalHostAndLinea = rpcListDetail.filter(
+ (rpc) =>
+ rpc.rpcUrl !== LOCALHOST_RPC_URL &&
+ rpc.rpcUrl !== LINEA_TESTNET_RPC_URL,
);
const rpcListDetailForLocalHost = rpcListDetail.filter(
(rpc) => rpc.rpcUrl === LOCALHOST_RPC_URL,
@@ -352,7 +415,7 @@ class NetworkDropdown extends Component {
{this.renderNetworkEntry(NETWORK_TYPES.MAINNET)}
{this.renderCustomRpcList(
- rpcListDetailWithoutLocalHost,
+ rpcListDetailWithoutLocalHostAndLinea,
this.props.provider,
)}
@@ -360,6 +423,13 @@ class NetworkDropdown extends Component {
<>
{this.renderNetworkEntry(NETWORK_TYPES.GOERLI)}
{this.renderNetworkEntry(NETWORK_TYPES.SEPOLIA)}
+ {SHOULD_SHOW_LINEA_TESTNET_NETWORK && (
+ <>
+ {this.renderNonInfuraDefaultNetwork(
+ NETWORK_TYPES.LINEA_TESTNET,
+ )}
+ >
+ )}
{this.renderCustomRpcList(
rpcListDetailForLocalHost,
this.props.provider,
diff --git a/ui/components/app/dropdowns/network-dropdown.test.js b/ui/components/app/dropdowns/network-dropdown.test.js
index 727b8fadc..e02804fa3 100644
--- a/ui/components/app/dropdowns/network-dropdown.test.js
+++ b/ui/components/app/dropdowns/network-dropdown.test.js
@@ -6,6 +6,15 @@ import { renderWithProvider } from '../../../../test/lib/render-helpers';
import { LOCALHOST_RPC_URL } from '../../../../shared/constants/network';
import NetworkDropdown from './network-dropdown';
+// Mock linea test network feature toggle
+jest.mock('../../../../shared/constants/network', () => {
+ const constants = jest.requireActual('../../../../shared/constants/network');
+ return {
+ ...constants,
+ SHOULD_SHOW_LINEA_TESTNET_NETWORK: true,
+ };
+});
+
describe('Network Dropdown', () => {
const createMockStore = configureMockStore([thunk]);
@@ -97,6 +106,13 @@ describe('Network Dropdown', () => {
expect(localhostColorIndicator).toBeInTheDocument();
});
+ it('checks background color for seventh ColorIndicator', () => {
+ const lineaColorIndicator = screen.queryByTestId(
+ 'color-icon-lineatestnet',
+ );
+ expect(lineaColorIndicator).toBeInTheDocument();
+ });
+
it('checks that Add Network button is rendered', () => {
const addNetworkButton = screen.queryByText('Add network');
expect(addNetworkButton).toBeInTheDocument();
@@ -104,8 +120,7 @@ describe('Network Dropdown', () => {
it('shows test networks in the dropdown', () => {
const networkItems = screen.queryAllByTestId(/network-item/u);
-
- expect(networkItems).toHaveLength(6);
+ expect(networkItems).toHaveLength(7);
});
});
diff --git a/ui/components/app/loading-network-screen/loading-network-screen.component.js b/ui/components/app/loading-network-screen/loading-network-screen.component.js
index bf241cfce..9a258557d 100644
--- a/ui/components/app/loading-network-screen/loading-network-screen.component.js
+++ b/ui/components/app/loading-network-screen/loading-network-screen.component.js
@@ -49,6 +49,8 @@ export default class LoadingNetworkScreen extends PureComponent {
return t('connectingToGoerli');
case NETWORK_TYPES.SEPOLIA:
return t('connectingToSepolia');
+ case NETWORK_TYPES.LINEA_TESTNET:
+ return t('connectingToLineaTestnet');
default:
return t('connectingTo', [providerId]);
}
diff --git a/ui/components/app/signature-request-original/signature-request-original.component.js b/ui/components/app/signature-request-original/signature-request-original.component.js
index 6e5fd5313..9c3039de4 100644
--- a/ui/components/app/signature-request-original/signature-request-original.component.js
+++ b/ui/components/app/signature-request-original/signature-request-original.component.js
@@ -72,6 +72,8 @@ export default class SignatureRequestOriginal extends Component {
return t('goerli');
case NETWORK_TYPES.SEPOLIA:
return t('sepolia');
+ case NETWORK_TYPES.LINEA_TESTNET:
+ return t('lineatestnet');
case NETWORK_TYPES.LOCALHOST:
return t('localhost');
default:
diff --git a/ui/components/app/signature-request/signature-request.component.js b/ui/components/app/signature-request/signature-request.component.js
index d9cf0f88c..86b631a64 100644
--- a/ui/components/app/signature-request/signature-request.component.js
+++ b/ui/components/app/signature-request/signature-request.component.js
@@ -113,6 +113,8 @@ export default class SignatureRequest extends PureComponent {
return t('goerli');
case NETWORK_TYPES.SEPOLIA:
return t('sepolia');
+ case NETWORK_TYPES.LINEA_TESTNET:
+ return t('lineatestnet');
case NETWORK_TYPES.LOCALHOST:
return t('localhost');
default:
diff --git a/ui/components/ui/typography/typography.js b/ui/components/ui/typography/typography.js
index 19cbabccb..5557c325b 100644
--- a/ui/components/ui/typography/typography.js
+++ b/ui/components/ui/typography/typography.js
@@ -32,6 +32,8 @@ export const ValidColors = [
Color.sepolia,
Color.goerli,
Color.sepoliaInverse,
+ Color.lineaTestnet,
+ Color.lineaTestnetInverse,
];
export const ValidTags = [
diff --git a/ui/css/design-system/colors.scss b/ui/css/design-system/colors.scss
index 55c3a6811..0b3e330bf 100644
--- a/ui/css/design-system/colors.scss
+++ b/ui/css/design-system/colors.scss
@@ -41,6 +41,8 @@ $color-map: (
'sepolia': --color-network-sepolia-default,
'goerli-inverse':--color-network-goerli-inverse,
'sepolia-inverse': --color-network-sepolia-inverse,
+ 'lineatestnet': --color-network-linea-testnet-default,
+ 'lineatestnet-inverse': --color-network-linea-testnet-inverse,
'localhost': --color-network-localhost-default,
'transparent': --transparent,
'flask-purple': --color-flask-default,
diff --git a/ui/css/itcss/components/network.scss b/ui/css/itcss/components/network.scss
index c89f93d55..f7baf1a07 100644
--- a/ui/css/itcss/components/network.scss
+++ b/ui/css/itcss/components/network.scss
@@ -25,6 +25,10 @@
background-color: rgba(207, 181, 240, 0.7) !important;
}
+ &.linea-test-network .menu-icon-circle div {
+ background-color: rgba(0, 0, 0, 0.7) !important;
+ }
+
&.localhost-network .menu-icon-circle div {
background-color: rgba(3, 135, 137, 0.7) !important;
}
diff --git a/ui/css/utilities/colors.scss b/ui/css/utilities/colors.scss
index 221786dcf..7d2e8e7c8 100644
--- a/ui/css/utilities/colors.scss
+++ b/ui/css/utilities/colors.scss
@@ -4,6 +4,8 @@
--mainnet: #29b6af;
--inherit: inherit;
--transparent: transparent;
+ --color-network-linea-testnet-default: #000;
+ --color-network-linea-testnet-inverse: #fcfcfc;
// DO NOT CHANGE
// Required for the QR reader to work properly
--qr-code-white-background: #fff;
diff --git a/ui/helpers/constants/design-system.ts b/ui/helpers/constants/design-system.ts
index a73831274..f2490be01 100644
--- a/ui/helpers/constants/design-system.ts
+++ b/ui/helpers/constants/design-system.ts
@@ -46,6 +46,8 @@ export enum Color {
mainnet = 'mainnet',
goerli = 'goerli',
sepolia = 'sepolia',
+ lineaTestnet = 'lineatestnet',
+ lineaTestnetInverse = 'lineatestnet-inverse',
transparent = 'transparent',
localhost = 'localhost',
inherit = 'inherit',
@@ -75,6 +77,7 @@ export enum BackgroundColor {
mainnet = 'mainnet',
goerli = 'goerli',
sepolia = 'sepolia',
+ lineaTestnet = 'lineatestnet',
transparent = 'transparent',
localhost = 'localhost',
}
@@ -100,6 +103,7 @@ export enum BorderColor {
mainnet = 'mainnet',
goerli = 'goerli',
sepolia = 'sepolia',
+ lineaTestnet = 'lineatestnet',
transparent = 'transparent',
localhost = 'localhost',
}
@@ -121,6 +125,8 @@ export enum TextColor {
inherit = 'inherit',
goerli = 'goerli',
sepolia = 'sepolia',
+ lineaTestnet = 'lineatestnet',
+ lineaTestnetInverse = 'lineatestnet-inverse',
goerliInverse = 'goerli-inverse',
sepoliaInverse = 'sepolia-inverse',
}
@@ -143,6 +149,8 @@ export enum IconColor {
inherit = 'inherit',
goerli = 'goerli',
sepolia = 'sepolia',
+ lineaTestnet = 'lineatestnet',
+ lineaTestnetInverse = 'lineatestnet-inverse',
goerliInverse = 'goerli-inverse',
sepoliaInverse = 'sepolia-inverse',
}
diff --git a/ui/helpers/constants/settings.js b/ui/helpers/constants/settings.js
index bbbfd5812..391bfd4c7 100644
--- a/ui/helpers/constants/settings.js
+++ b/ui/helpers/constants/settings.js
@@ -254,6 +254,13 @@ export const SETTINGS_CONSTANTS = [
route: `${NETWORKS_ROUTE}#networks-sepolia`,
icon: 'fa fa-plug',
},
+ {
+ tabMessage: (t) => t('networks'),
+ sectionMessage: (t) => t('lineatestnet'),
+ descriptionMessage: (t) => t('lineatestnet'),
+ route: `${NETWORKS_ROUTE}#networks-lineatestnet`,
+ icon: 'fa fa-plug',
+ },
{
tabMessage: (t) => t('networks'),
sectionMessage: (t) => t('localhost'),
diff --git a/ui/helpers/utils/settings-search.test.js b/ui/helpers/utils/settings-search.test.js
index 74c2c08b4..f78c498b5 100644
--- a/ui/helpers/utils/settings-search.test.js
+++ b/ui/helpers/utils/settings-search.test.js
@@ -177,7 +177,7 @@ describe('Settings Search Utils', () => {
});
it('should get good network section number', () => {
- expect(getNumberOfSettingsInSection(t, t('networks'))).toStrictEqual(4);
+ expect(getNumberOfSettingsInSection(t, t('networks'))).toStrictEqual(5);
});
it('should get good experimental section number', () => {
diff --git a/ui/helpers/utils/util.js b/ui/helpers/utils/util.js
index f6804c1f1..95c841bd5 100644
--- a/ui/helpers/utils/util.js
+++ b/ui/helpers/utils/util.js
@@ -56,6 +56,7 @@ export function isDefaultMetaMaskChain(chainId) {
chainId === CHAIN_IDS.MAINNET ||
chainId === CHAIN_IDS.GOERLI ||
chainId === CHAIN_IDS.SEPOLIA ||
+ chainId === CHAIN_IDS.LINEA_TESTNET ||
chainId === CHAIN_IDS.LOCALHOST
) {
return true;
diff --git a/ui/helpers/utils/util.test.js b/ui/helpers/utils/util.test.js
index e4d152658..36fa14b43 100644
--- a/ui/helpers/utils/util.test.js
+++ b/ui/helpers/utils/util.test.js
@@ -1,5 +1,6 @@
import Bowser from 'bowser';
import { BN } from 'ethereumjs-util';
+import { CHAIN_IDS } from '../../../shared/constants/network';
import { addHexPrefixToObjectValues } from '../../../shared/lib/swaps-utils';
import { toPrecisionWithoutTrailingZeros } from '../../../shared/lib/transactions-controller-utils';
import * as util from './util';
@@ -589,4 +590,14 @@ describe('util', () => {
).toStrictEqual('The Quick Brown \\u202EFox Jumps Over The Lazy Dog');
});
});
+
+ describe('isDefaultMetaMaskChain()', () => {
+ it('should return true if the provided chainId is a default MetaMask chain', () => {
+ expect(util.isDefaultMetaMaskChain(CHAIN_IDS.GOERLI)).toBeTruthy();
+ });
+
+ it('should return false if the provided chainId is a not default MetaMask chain', () => {
+ expect(util.isDefaultMetaMaskChain(CHAIN_IDS.CELO)).toBeFalsy();
+ });
+ });
});
diff --git a/ui/pages/routes/routes.component.js b/ui/pages/routes/routes.component.js
index cca891231..2d8ccfbe5 100644
--- a/ui/pages/routes/routes.component.js
+++ b/ui/pages/routes/routes.component.js
@@ -472,6 +472,8 @@ export default class Routes extends Component {
return t('connectingToGoerli');
case NETWORK_TYPES.SEPOLIA:
return t('connectingToSepolia');
+ case NETWORK_TYPES.LINEA_TESTNET:
+ return t('connectingToLineaTestnet');
default:
return t('connectingTo', [providerId]);
}
diff --git a/ui/pages/settings/networks-tab/networks-tab.constants.js b/ui/pages/settings/networks-tab/networks-tab.constants.js
index 088d8a991..ef34723b9 100644
--- a/ui/pages/settings/networks-tab/networks-tab.constants.js
+++ b/ui/pages/settings/networks-tab/networks-tab.constants.js
@@ -4,6 +4,7 @@ import {
CURRENCY_SYMBOLS,
CHAIN_IDS,
NETWORK_TYPES,
+ LINEA_TESTNET_RPC_URL,
} from '../../../../shared/constants/network';
const defaultNetworksData = [
@@ -43,6 +44,15 @@ const defaultNetworksData = [
ticker: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.SEPOLIA],
blockExplorerUrl: 'https://sepolia.etherscan.io',
},
+ {
+ labelKey: NETWORK_TYPES.LINEA_TESTNET,
+ iconColor: '#234FD5',
+ providerType: NETWORK_TYPES.LINEA_TESTNET,
+ rpcUrl: LINEA_TESTNET_RPC_URL,
+ chainId: CHAIN_IDS.LINEA_TESTNET,
+ ticker: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.LINEA_TESTNET],
+ blockExplorerUrl: 'https://explorer.goerli.linea.build',
+ },
];
export { defaultNetworksData };
diff --git a/ui/pages/settings/networks-tab/networks-tab.js b/ui/pages/settings/networks-tab/networks-tab.js
index 287b187df..785cbcf32 100644
--- a/ui/pages/settings/networks-tab/networks-tab.js
+++ b/ui/pages/settings/networks-tab/networks-tab.js
@@ -20,7 +20,9 @@ import {
getProvider,
} from '../../../selectors';
import {
+ CHAIN_IDS,
NETWORK_TYPES,
+ SHOULD_SHOW_LINEA_TESTNET_NETWORK,
TEST_CHAINS,
} from '../../../../shared/constants/network';
import { defaultNetworksData } from './networks-tab.constants';
@@ -51,23 +53,29 @@ const NetworksTab = ({ addNewNetwork }) => {
const provider = useSelector(getProvider);
const networksTabSelectedRpcUrl = useSelector(getNetworksTabSelectedRpcUrl);
- const frequentRpcNetworkListDetails = frequentRpcListDetail.map((rpc) => {
- return {
- label: rpc.nickname,
- iconColor: 'var(--color-icon-alternative)',
- providerType: NETWORK_TYPES.RPC,
- rpcUrl: rpc.rpcUrl,
- chainId: rpc.chainId,
- ticker: rpc.ticker,
- blockExplorerUrl: rpc.rpcPrefs?.blockExplorerUrl || '',
- isATestNetwork: TEST_CHAINS.includes(rpc.chainId),
- };
- });
+ const frequentRpcNetworkListDetails = frequentRpcListDetail
+ .map((rpc) => {
+ return {
+ label: rpc.nickname,
+ iconColor: 'var(--color-icon-alternative)',
+ providerType: NETWORK_TYPES.RPC,
+ rpcUrl: rpc.rpcUrl,
+ chainId: rpc.chainId,
+ ticker: rpc.ticker,
+ blockExplorerUrl: rpc.rpcPrefs?.blockExplorerUrl || '',
+ isATestNetwork: TEST_CHAINS.includes(rpc.chainId),
+ };
+ })
+ .filter((network) => network.chainId !== CHAIN_IDS.LINEA_TESTNET);
+
+ let networksToRender = [...defaultNetworks, ...frequentRpcNetworkListDetails];
+
+ if (!SHOULD_SHOW_LINEA_TESTNET_NETWORK) {
+ networksToRender = networksToRender.filter(
+ (network) => network.chainId !== CHAIN_IDS.LINEA_TESTNET,
+ );
+ }
- const networksToRender = [
- ...defaultNetworks,
- ...frequentRpcNetworkListDetails,
- ];
let selectedNetwork =
networksToRender.find(
(network) => network.rpcUrl === networksTabSelectedRpcUrl,
diff --git a/ui/store/actions.ts b/ui/store/actions.ts
index de453b6b1..50fa81bf3 100644
--- a/ui/store/actions.ts
+++ b/ui/store/actions.ts
@@ -2512,6 +2512,7 @@ export function setRpcTarget(
chainId: string,
ticker?: EtherDenomination,
nickname?: string,
+ rpcPrefs?: object,
): ThunkAction {
return async (dispatch) => {
log.debug(
@@ -2524,6 +2525,7 @@ export function setRpcTarget(
chainId,
ticker ?? EtherDenomination.ETH,
nickname || newRpcUrl,
+ rpcPrefs,
]);
} catch (error) {
logErrorWithMessage(error);
From 98ed05c7c0200eee4a068ab25164ba0231b72bc3 Mon Sep 17 00:00:00 2001
From: MetaMask Bot
Date: Tue, 21 Mar 2023 17:21:00 +0000
Subject: [PATCH 06/10] Version v10.27.0
---
CHANGELOG.md | 7 ++++++-
package.json | 2 +-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index aca89dc0d..82be5abce 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
+## [10.27.0]
+### Uncategorized
+- feat: add the ConsenSys zkEVM (Linea) as a default network ([#17875](https://github.com/MetaMask/metamask-extension/pull/17875))
+
## [10.26.2]
### Changed
- Sign in with Ethereum: re-enable warning UI for mismatched domains / disable domain binding ([#18200](https://github.com/MetaMask/metamask-extension/pull/18200))
@@ -3536,7 +3540,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Uncategorized
- Added the ability to restore accounts from seed words.
-[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.26.2...HEAD
+[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.27.0...HEAD
+[10.27.0]: https://github.com/MetaMask/metamask-extension/compare/v10.26.2...v10.27.0
[10.26.2]: https://github.com/MetaMask/metamask-extension/compare/v10.26.1...v10.26.2
[10.26.1]: https://github.com/MetaMask/metamask-extension/compare/v10.26.0...v10.26.1
[10.26.0]: https://github.com/MetaMask/metamask-extension/compare/v10.25.0...v10.26.0
diff --git a/package.json b/package.json
index a29887794..fea8dd021 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "metamask-crx",
- "version": "10.26.2",
+ "version": "10.27.0",
"private": true,
"repository": {
"type": "git",
From 1dc09c027c4073f7b118511e570dcfbb013e0460 Mon Sep 17 00:00:00 2001
From: Dan J Miller
Date: Thu, 23 Mar 2023 09:07:28 -0700
Subject: [PATCH 07/10] Fixes to the Linea Goerli implementation (#18290)
* Ensure that NonInfuraDefaultNetworks are only selected in the dropdown if they are the currently selected network
* Ensure Linea Goerli network appears in network settings tab if added manually
---
.../app/dropdowns/network-dropdown.js | 19 ++++------
.../settings/networks-tab/networks-tab.js | 38 +++++++++----------
2 files changed, 27 insertions(+), 30 deletions(-)
diff --git a/ui/components/app/dropdowns/network-dropdown.js b/ui/components/app/dropdowns/network-dropdown.js
index 0e1884441..c3606a314 100644
--- a/ui/components/app/dropdowns/network-dropdown.js
+++ b/ui/components/app/dropdowns/network-dropdown.js
@@ -280,22 +280,19 @@ class NetworkDropdown extends Component {
}
renderNonInfuraDefaultNetwork(network) {
- const {
- provider: { type: providerType },
- setRpcTarget,
- } = this.props;
+ const { provider, setRpcTarget } = this.props;
- const isCurrentRpcTarget = providerType === NETWORK_TYPES.RPC;
+ const { chainId, ticker, blockExplorerUrl } = BUILT_IN_NETWORKS[network];
+ const networkName = NETWORK_TO_NAME_MAP[network];
+ const rpcUrl = CHAIN_ID_TO_RPC_URL_MAP[chainId];
+
+ const isCurrentRpcTarget =
+ provider.type === NETWORK_TYPES.RPC && rpcUrl === provider.rpcUrl;
return (
{
- const { chainId, ticker, blockExplorerUrl } =
- BUILT_IN_NETWORKS[network];
- const networkName = NETWORK_TO_NAME_MAP[network];
-
- const rpcUrl = CHAIN_ID_TO_RPC_URL_MAP[chainId];
await setRpcTarget(rpcUrl, chainId, ticker, networkName, {
blockExplorerUrl,
});
@@ -317,7 +314,7 @@ class NetworkDropdown extends Component {
data-testid={`${network}-network-item`}
style={{
color:
- providerType === network
+ provider.type === network
? 'var(--color-text-default)'
: 'var(--color-text-alternative)',
}}
diff --git a/ui/pages/settings/networks-tab/networks-tab.js b/ui/pages/settings/networks-tab/networks-tab.js
index 785cbcf32..5aa9cc27e 100644
--- a/ui/pages/settings/networks-tab/networks-tab.js
+++ b/ui/pages/settings/networks-tab/networks-tab.js
@@ -30,11 +30,13 @@ import NetworksTabContent from './networks-tab-content';
import NetworksForm from './networks-form';
import NetworksFormSubheader from './networks-tab-subheader';
-const defaultNetworks = defaultNetworksData.map((network) => ({
- ...network,
- viewOnly: true,
- isATestNetwork: TEST_CHAINS.includes(network.chainId),
-}));
+const defaultNetworks = defaultNetworksData
+ .map((network) => ({
+ ...network,
+ viewOnly: true,
+ isATestNetwork: TEST_CHAINS.includes(network.chainId),
+ }))
+ .filter((network) => network.chainId !== CHAIN_IDS.LINEA_TESTNET);
const NetworksTab = ({ addNewNetwork }) => {
const t = useI18nContext();
@@ -53,20 +55,18 @@ const NetworksTab = ({ addNewNetwork }) => {
const provider = useSelector(getProvider);
const networksTabSelectedRpcUrl = useSelector(getNetworksTabSelectedRpcUrl);
- const frequentRpcNetworkListDetails = frequentRpcListDetail
- .map((rpc) => {
- return {
- label: rpc.nickname,
- iconColor: 'var(--color-icon-alternative)',
- providerType: NETWORK_TYPES.RPC,
- rpcUrl: rpc.rpcUrl,
- chainId: rpc.chainId,
- ticker: rpc.ticker,
- blockExplorerUrl: rpc.rpcPrefs?.blockExplorerUrl || '',
- isATestNetwork: TEST_CHAINS.includes(rpc.chainId),
- };
- })
- .filter((network) => network.chainId !== CHAIN_IDS.LINEA_TESTNET);
+ const frequentRpcNetworkListDetails = frequentRpcListDetail.map((rpc) => {
+ return {
+ label: rpc.nickname,
+ iconColor: 'var(--color-icon-alternative)',
+ providerType: NETWORK_TYPES.RPC,
+ rpcUrl: rpc.rpcUrl,
+ chainId: rpc.chainId,
+ ticker: rpc.ticker,
+ blockExplorerUrl: rpc.rpcPrefs?.blockExplorerUrl || '',
+ isATestNetwork: TEST_CHAINS.includes(rpc.chainId),
+ };
+ });
let networksToRender = [...defaultNetworks, ...frequentRpcNetworkListDetails];
From 50d6e0abc0364cb27ffc2c621e0db50a8e5e4b3c Mon Sep 17 00:00:00 2001
From: Dan Miller
Date: Thu, 23 Mar 2023 13:49:17 -0230
Subject: [PATCH 08/10] Update changelog for v10.27.0
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 82be5abce..4a7eab980 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [10.27.0]
-### Uncategorized
+### Added
- feat: add the ConsenSys zkEVM (Linea) as a default network ([#17875](https://github.com/MetaMask/metamask-extension/pull/17875))
## [10.26.2]
From 129535095ac85ece970d6bdca4568241a1198afe Mon Sep 17 00:00:00 2001
From: Dan J Miller
Date: Thu, 23 Mar 2023 15:00:19 -0230
Subject: [PATCH 09/10] Fix error in code written to handle merge conflicts in
3552941323
---
ui/components/app/dropdowns/network-dropdown.js | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/ui/components/app/dropdowns/network-dropdown.js b/ui/components/app/dropdowns/network-dropdown.js
index c3606a314..72205a42b 100644
--- a/ui/components/app/dropdowns/network-dropdown.js
+++ b/ui/components/app/dropdowns/network-dropdown.js
@@ -62,7 +62,13 @@ function mapDispatchToProps(dispatch) {
setProviderType: (type) => {
dispatch(actions.setProviderType(type));
},
- setRpcTarget: (target, chainId, ticker, nickname, { blockExplorerUrl }) => {
+ setRpcTarget: (
+ target,
+ chainId,
+ ticker,
+ nickname,
+ { blockExplorerUrl } = {},
+ ) => {
dispatch(
actions.setRpcTarget(target, chainId, ticker, nickname, {
blockExplorerUrl,
From 3e2361a3fcf0db0312213952eda067c54832e520 Mon Sep 17 00:00:00 2001
From: Victorien Gauch <85494462+VGau@users.noreply.github.com>
Date: Thu, 23 Mar 2023 20:56:07 +0100
Subject: [PATCH 10/10] fix: update zkevm feature toggle date (#18307)
---
shared/constants/network.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/shared/constants/network.ts b/shared/constants/network.ts
index a11db2b5e..8f9bf7e46 100644
--- a/shared/constants/network.ts
+++ b/shared/constants/network.ts
@@ -1008,4 +1008,4 @@ export const FEATURED_RPCS: RPCDefinition[] = [
];
export const SHOULD_SHOW_LINEA_TESTNET_NETWORK =
- new Date().getTime() > Date.UTC(2023, 2, 28);
+ new Date().getTime() > Date.UTC(2023, 2, 28, 8);