From 33fd7876ff403e64db43f4cbb4c5733548c826f7 Mon Sep 17 00:00:00 2001 From: MetaMask Bot <37885440+metamaskbot@users.noreply.github.com> Date: Fri, 12 May 2023 16:49:37 -0230 Subject: [PATCH 1/8] Version v10.30.2 RC (#19109) * Version v10.30.2 * Ensure the GasDetailsItem component can handle a tx with a maxPriorityFee of 0 (#19102) * Ensure the GasDetailsItem component can handle a tx with a maxPriorityFee of 0 * Clean up code * Update ui/components/app/gas-details-item/gas-details-item.js Co-authored-by: Mark Stacey --------- Co-authored-by: Mark Stacey * Backport the `@metamask/message-manager` update to v5 (#19110) The `@metamask/message-manager` update to v5 has been backported to the v10.30.x release branch. This update includes three breaking changes, but two (bump in minimum supported Node.js version, and change in type from `Map` to `Record`) don't affect this project. The only breaking change requiring changes was the addition of the `getCurrentChainId` constructor parameter for the TypedMessageManger. * Update changelog --------- Co-authored-by: MetaMask Bot Co-authored-by: Dan J Miller Co-authored-by: Mark Stacey --- CHANGELOG.md | 10 +- app/scripts/controllers/sign.ts | 5 + app/scripts/metamask-controller.js | 2 + lavamoat/browserify/beta/policy.json | 265 +++++++++++------- lavamoat/browserify/desktop/policy.json | 265 +++++++++++------- lavamoat/browserify/flask/policy.json | 265 +++++++++++------- lavamoat/browserify/main/policy.json | 265 +++++++++++------- package.json | 4 +- .../app/gas-details-item/gas-details-item.js | 20 +- .../gas-details-item/gas-details-item.test.js | 39 +++ yarn.lock | 171 +++++++---- 11 files changed, 863 insertions(+), 448 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff018c396..4cb1030ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [10.30.2] +### Changed +- Improve `eth_signTypedData_v4` validation ([#19110](https://github.com/MetaMask/metamask-extension/pull/19110)) + +### Fixed +- Fix crash when confirming an approval where the `maxPriorityFeePerGas` is zero ([#19102](https://github.com/MetaMask/metamask-extension/pull/19102)) + ## [10.30.1] ### Fixed - Disable Flask RPC test to fix failing build ([#19011](https://github.com/MetaMask/metamask-extension/pull/19011)) @@ -3711,7 +3718,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.30.1...HEAD +[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.30.2...HEAD +[10.30.2]: https://github.com/MetaMask/metamask-extension/compare/v10.30.1...v10.30.2 [10.30.1]: https://github.com/MetaMask/metamask-extension/compare/v10.30.0...v10.30.1 [10.30.0]: https://github.com/MetaMask/metamask-extension/compare/v10.29.0...v10.30.0 [10.29.0]: https://github.com/MetaMask/metamask-extension/compare/v10.28.3...v10.29.0 diff --git a/app/scripts/controllers/sign.ts b/app/scripts/controllers/sign.ts index 70c65596d..1ee5e7faa 100644 --- a/app/scripts/controllers/sign.ts +++ b/app/scripts/controllers/sign.ts @@ -110,6 +110,7 @@ export type SignControllerOptions = { getState: () => any; metricsEvent: (payload: any, options?: any) => void; securityProviderRequest: SecurityProviderRequest; + getCurrentChainId: () => string; }; /** @@ -152,6 +153,7 @@ export default class SignController extends BaseControllerV2< * @param options.getState - Callback to retrieve all user state. * @param options.metricsEvent - A function for emitting a metric event. * @param options.securityProviderRequest - A function for verifying a message, whether it is malicious or not. + * @param options.getCurrentChainId - Returns the chain ID of the current selected network. */ constructor({ messenger, @@ -160,6 +162,7 @@ export default class SignController extends BaseControllerV2< getState, metricsEvent, securityProviderRequest, + getCurrentChainId, }: SignControllerOptions) { super({ name: controllerName, @@ -188,6 +191,8 @@ export default class SignController extends BaseControllerV2< undefined, undefined, securityProviderRequest, + undefined, + getCurrentChainId, ); this._messageManagers = [ diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 0517828fa..996add4d7 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -1185,6 +1185,8 @@ export default class MetamaskController extends EventEmitter { metricsEvent: this.metaMetricsController.trackEvent.bind( this.metaMetricsController, ), + getCurrentChainId: () => + this.networkController.store.getState().provider.chainId, }); this.swapsController = new SwapsController({ diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index 41d9cfc47..22ffda882 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -761,13 +761,14 @@ }, "@metamask/controller-utils": { "globals": { + "URL": true, "console.error": true, "fetch": true, "setTimeout": true }, "packages": { - "@metamask/controller-utils>@metamask/utils": true, "@metamask/controller-utils>@spruceid/siwe-parser": true, + "@metamask/utils": true, "browserify>buffer": true, "eslint>fast-deep-equal": true, "eth-ens-namehash": true, @@ -775,18 +776,6 @@ "ethjs>ethjs-unit": true } }, - "@metamask/controller-utils>@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "@metamask/utils>superstruct": true, - "browserify>buffer": true, - "nock>debug": true, - "semver": true - } - }, "@metamask/controller-utils>@spruceid/siwe-parser": { "globals": { "console.error": true, @@ -918,17 +907,54 @@ "TextEncoder": true }, "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": true, "@metamask/eth-keyring-controller>@metamask/eth-sig-util": true, "@metamask/scure-bip39": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, "browserify>buffer": true, "eth-lattice-keyring>@ethereumjs/util": true } }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/hashes": true, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/secp256k1": { + "globals": { + "crypto": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32": { + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/secp256k1": true, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip39>@noble/hashes": true, + "@metamask/key-tree>@scure/base": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip39>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, "@metamask/eth-keyring-controller>@metamask/eth-sig-util": { "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography": true, "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethjs-util": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, "bn.js": true, "browserify>buffer": true, "eth-lattice-keyring>@ethereumjs/util": true, @@ -936,6 +962,21 @@ "eth-sig-util>tweetnacl-util": true } }, + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography>@noble/hashes": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -946,13 +987,28 @@ "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring": { "packages": { "@metamask/eth-keyring-controller>@metamask/eth-sig-util": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": true, "browserify>buffer": true, "browserify>events": true, "eth-lattice-keyring>@ethereumjs/util": true, "ethereumjs-wallet>randombytes": true } }, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography>@noble/hashes": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, "@metamask/eth-keyring-controller>obs-store": { "packages": { "@metamask/eth-token-tracker>safe-event-emitter": true, @@ -988,25 +1044,17 @@ }, "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util": { "packages": { - "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethereum-cryptography": true, "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethjs-util": true, "bn.js": true, "browserify>assert": true, "browserify>buffer": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, "ethereumjs-wallet>safe-buffer": true, "ganache>secp256k1>elliptic": true } }, - "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -1374,8 +1422,14 @@ "TextEncoder": true }, "packages": { - "@metamask/key-tree>@noble/hashes": true, - "@metamask/key-tree>@scure/base": true + "@metamask/key-tree>@scure/base": true, + "@metamask/scure-bip39>@noble/hashes": true + } + }, + "@metamask/scure-bip39>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true } }, "@metamask/smart-transactions-controller": { @@ -1474,8 +1528,6 @@ "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz": { "packages": { "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz>@chainsafe/persistent-merkle-tree": true, - "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz>case": true, - "browserify": true, "browserify>buffer": true } }, @@ -1484,7 +1536,8 @@ "WeakRef": true }, "packages": { - "browserify": true + "@metamask/key-tree>@noble/hashes": true, + "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz>@chainsafe/as-sha256": true } }, "@metamask/utils>@ethereumjs/tx>@ethereumjs/rlp": { @@ -1492,44 +1545,12 @@ "TextEncoder": true } }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": { + "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/curves": { "globals": { - "TextDecoder": true, - "crypto": true + "TextEncoder": true }, "packages": { - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/hashes": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/secp256k1": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/hashes": { - "globals": { - "TextEncoder": true, - "crypto": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32": { - "packages": { - "@metamask/key-tree>@noble/hashes": true, - "@metamask/key-tree>@scure/base": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32>@noble/secp256k1": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true + "@metamask/key-tree>@noble/hashes": true } }, "@ngraveio/bc-ur": { @@ -2329,6 +2350,16 @@ "ethjs-query>babel-runtime>core-js": true } }, + "browserify>browserify-zlib": { + "packages": { + "browserify>assert": true, + "browserify>browserify-zlib>pako": true, + "browserify>buffer": true, + "browserify>process": true, + "browserify>stream-browserify": true, + "browserify>util": true + } + }, "browserify>buffer": { "globals": { "console": true @@ -2495,6 +2526,12 @@ "browserify>has>function-bind": true } }, + "browserify>https-browserify": { + "packages": { + "browserify>stream-http": true, + "browserify>url": true + } + }, "browserify>os-browserify": { "globals": { "location": true, @@ -2524,6 +2561,41 @@ "readable-stream": true } }, + "browserify>stream-http": { + "globals": { + "AbortController": true, + "Blob": true, + "MSStreamReader": true, + "ReadableStream": true, + "WritableStream": true, + "XDomainRequest": true, + "XMLHttpRequest": true, + "clearTimeout": true, + "fetch": true, + "location.protocol.search": true, + "setTimeout": true + }, + "packages": { + "browserify>buffer": true, + "browserify>process": true, + "browserify>stream-http>builtin-status-codes": true, + "browserify>stream-http>readable-stream": true, + "browserify>url": true, + "pumpify>inherits": true, + "watchify>xtend": true + } + }, + "browserify>stream-http>readable-stream": { + "packages": { + "@storybook/api>util-deprecate": true, + "browserify>browser-resolve": true, + "browserify>buffer": true, + "browserify>events": true, + "browserify>process": true, + "browserify>string_decoder": true, + "pumpify>inherits": true + } + }, "browserify>string_decoder": { "packages": { "ethereumjs-wallet>safe-buffer": true @@ -2770,10 +2842,39 @@ "packages": { "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz": true, "@metamask/utils>@ethereumjs/tx>@ethereumjs/rlp": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, "browserify>buffer": true, "browserify>events": true, - "browserify>insert-module-globals>is-buffer": true + "browserify>insert-module-globals>is-buffer": true, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": true, + "eth-lattice-keyring>@ethereumjs/util>micro-ftch": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/key-tree>@noble/hashes": true, + "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/curves": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>micro-ftch": { + "globals": { + "Headers": true, + "TextDecoder": true, + "URL": true, + "btoa": true, + "fetch": true + }, + "packages": { + "browserify>browserify-zlib": true, + "browserify>buffer": true, + "browserify>https-browserify": true, + "browserify>process": true, + "browserify>stream-http": true, + "browserify>url": true, + "browserify>util": true } }, "eth-lattice-keyring>bn.js": { @@ -2974,22 +3075,14 @@ "bn.js": true, "browserify>assert": true, "browserify>buffer": true, - "eth-sig-util>ethereumjs-util>ethereum-cryptography": true, "eth-sig-util>ethereumjs-util>ethjs-util": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, "ethereumjs-wallet>safe-buffer": true, "ganache>secp256k1>elliptic": true } }, - "eth-sig-util>ethereumjs-util>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "eth-sig-util>ethereumjs-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -3109,21 +3202,13 @@ "bn.js": true, "browserify>assert": true, "browserify>buffer": true, - "ethereumjs-abi>ethereumjs-util>ethereum-cryptography": true, "ethereumjs-abi>ethereumjs-util>ethjs-util": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, "ganache>secp256k1>elliptic": true } }, - "ethereumjs-abi>ethereumjs-util>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "ethereumjs-abi>ethereumjs-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -3308,22 +3393,14 @@ "ethereumjs-wallet>safe-buffer": true } }, - "ethereumjs-wallet>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "ethereumjs-wallet>ethereumjs-util": { "packages": { "bn.js": true, "browserify>assert": true, "browserify>buffer": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, - "ethereumjs-wallet>ethereum-cryptography": true, "ethereumjs-wallet>ethereumjs-util>ethjs-util": true, "ganache>secp256k1>elliptic": true } diff --git a/lavamoat/browserify/desktop/policy.json b/lavamoat/browserify/desktop/policy.json index 140cf85f0..8bd6ef8be 100644 --- a/lavamoat/browserify/desktop/policy.json +++ b/lavamoat/browserify/desktop/policy.json @@ -761,13 +761,14 @@ }, "@metamask/controller-utils": { "globals": { + "URL": true, "console.error": true, "fetch": true, "setTimeout": true }, "packages": { - "@metamask/controller-utils>@metamask/utils": true, "@metamask/controller-utils>@spruceid/siwe-parser": true, + "@metamask/utils": true, "browserify>buffer": true, "eslint>fast-deep-equal": true, "eth-ens-namehash": true, @@ -775,18 +776,6 @@ "ethjs>ethjs-unit": true } }, - "@metamask/controller-utils>@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "@metamask/utils>superstruct": true, - "browserify>buffer": true, - "nock>debug": true, - "semver": true - } - }, "@metamask/controller-utils>@spruceid/siwe-parser": { "globals": { "console.error": true, @@ -990,17 +979,54 @@ "TextEncoder": true }, "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": true, "@metamask/eth-keyring-controller>@metamask/eth-sig-util": true, "@metamask/scure-bip39": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, "browserify>buffer": true, "eth-lattice-keyring>@ethereumjs/util": true } }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/hashes": true, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/secp256k1": { + "globals": { + "crypto": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32": { + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/secp256k1": true, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip39>@noble/hashes": true, + "@metamask/key-tree>@scure/base": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip39>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, "@metamask/eth-keyring-controller>@metamask/eth-sig-util": { "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography": true, "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethjs-util": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, "bn.js": true, "browserify>buffer": true, "eth-lattice-keyring>@ethereumjs/util": true, @@ -1008,6 +1034,21 @@ "eth-sig-util>tweetnacl-util": true } }, + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography>@noble/hashes": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -1018,13 +1059,28 @@ "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring": { "packages": { "@metamask/eth-keyring-controller>@metamask/eth-sig-util": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": true, "browserify>buffer": true, "browserify>events": true, "eth-lattice-keyring>@ethereumjs/util": true, "ethereumjs-wallet>randombytes": true } }, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography>@noble/hashes": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, "@metamask/eth-keyring-controller>obs-store": { "packages": { "@metamask/eth-token-tracker>safe-event-emitter": true, @@ -1060,25 +1116,17 @@ }, "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util": { "packages": { - "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethereum-cryptography": true, "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethjs-util": true, "bn.js": true, "browserify>assert": true, "browserify>buffer": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, "ethereumjs-wallet>safe-buffer": true, "ganache>secp256k1>elliptic": true } }, - "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -1537,8 +1585,14 @@ "TextEncoder": true }, "packages": { - "@metamask/key-tree>@noble/hashes": true, - "@metamask/key-tree>@scure/base": true + "@metamask/key-tree>@scure/base": true, + "@metamask/scure-bip39>@noble/hashes": true + } + }, + "@metamask/scure-bip39>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true } }, "@metamask/smart-transactions-controller": { @@ -1867,8 +1921,6 @@ "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz": { "packages": { "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz>@chainsafe/persistent-merkle-tree": true, - "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz>case": true, - "browserify": true, "browserify>buffer": true } }, @@ -1877,7 +1929,8 @@ "WeakRef": true }, "packages": { - "browserify": true + "@metamask/key-tree>@noble/hashes": true, + "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz>@chainsafe/as-sha256": true } }, "@metamask/utils>@ethereumjs/tx>@ethereumjs/rlp": { @@ -1885,44 +1938,12 @@ "TextEncoder": true } }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": { + "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/curves": { "globals": { - "TextDecoder": true, - "crypto": true + "TextEncoder": true }, "packages": { - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/hashes": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/secp256k1": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/hashes": { - "globals": { - "TextEncoder": true, - "crypto": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32": { - "packages": { - "@metamask/key-tree>@noble/hashes": true, - "@metamask/key-tree>@scure/base": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32>@noble/secp256k1": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true + "@metamask/key-tree>@noble/hashes": true } }, "@ngraveio/bc-ur": { @@ -2722,6 +2743,16 @@ "ethjs-query>babel-runtime>core-js": true } }, + "browserify>browserify-zlib": { + "packages": { + "browserify>assert": true, + "browserify>browserify-zlib>pako": true, + "browserify>buffer": true, + "browserify>process": true, + "browserify>stream-browserify": true, + "browserify>util": true + } + }, "browserify>buffer": { "globals": { "console": true @@ -2888,6 +2919,12 @@ "browserify>has>function-bind": true } }, + "browserify>https-browserify": { + "packages": { + "browserify>stream-http": true, + "browserify>url": true + } + }, "browserify>os-browserify": { "globals": { "location": true, @@ -2917,6 +2954,41 @@ "readable-stream": true } }, + "browserify>stream-http": { + "globals": { + "AbortController": true, + "Blob": true, + "MSStreamReader": true, + "ReadableStream": true, + "WritableStream": true, + "XDomainRequest": true, + "XMLHttpRequest": true, + "clearTimeout": true, + "fetch": true, + "location.protocol.search": true, + "setTimeout": true + }, + "packages": { + "browserify>buffer": true, + "browserify>process": true, + "browserify>stream-http>builtin-status-codes": true, + "browserify>stream-http>readable-stream": true, + "browserify>url": true, + "pumpify>inherits": true, + "watchify>xtend": true + } + }, + "browserify>stream-http>readable-stream": { + "packages": { + "@storybook/api>util-deprecate": true, + "browserify>browser-resolve": true, + "browserify>buffer": true, + "browserify>events": true, + "browserify>process": true, + "browserify>string_decoder": true, + "pumpify>inherits": true + } + }, "browserify>string_decoder": { "packages": { "ethereumjs-wallet>safe-buffer": true @@ -3163,10 +3235,39 @@ "packages": { "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz": true, "@metamask/utils>@ethereumjs/tx>@ethereumjs/rlp": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, "browserify>buffer": true, "browserify>events": true, - "browserify>insert-module-globals>is-buffer": true + "browserify>insert-module-globals>is-buffer": true, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": true, + "eth-lattice-keyring>@ethereumjs/util>micro-ftch": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/key-tree>@noble/hashes": true, + "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/curves": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>micro-ftch": { + "globals": { + "Headers": true, + "TextDecoder": true, + "URL": true, + "btoa": true, + "fetch": true + }, + "packages": { + "browserify>browserify-zlib": true, + "browserify>buffer": true, + "browserify>https-browserify": true, + "browserify>process": true, + "browserify>stream-http": true, + "browserify>url": true, + "browserify>util": true } }, "eth-lattice-keyring>bn.js": { @@ -3367,22 +3468,14 @@ "bn.js": true, "browserify>assert": true, "browserify>buffer": true, - "eth-sig-util>ethereumjs-util>ethereum-cryptography": true, "eth-sig-util>ethereumjs-util>ethjs-util": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, "ethereumjs-wallet>safe-buffer": true, "ganache>secp256k1>elliptic": true } }, - "eth-sig-util>ethereumjs-util>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "eth-sig-util>ethereumjs-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -3502,21 +3595,13 @@ "bn.js": true, "browserify>assert": true, "browserify>buffer": true, - "ethereumjs-abi>ethereumjs-util>ethereum-cryptography": true, "ethereumjs-abi>ethereumjs-util>ethjs-util": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, "ganache>secp256k1>elliptic": true } }, - "ethereumjs-abi>ethereumjs-util>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "ethereumjs-abi>ethereumjs-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -3701,22 +3786,14 @@ "ethereumjs-wallet>safe-buffer": true } }, - "ethereumjs-wallet>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "ethereumjs-wallet>ethereumjs-util": { "packages": { "bn.js": true, "browserify>assert": true, "browserify>buffer": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, - "ethereumjs-wallet>ethereum-cryptography": true, "ethereumjs-wallet>ethereumjs-util>ethjs-util": true, "ganache>secp256k1>elliptic": true } diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index 140cf85f0..8bd6ef8be 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -761,13 +761,14 @@ }, "@metamask/controller-utils": { "globals": { + "URL": true, "console.error": true, "fetch": true, "setTimeout": true }, "packages": { - "@metamask/controller-utils>@metamask/utils": true, "@metamask/controller-utils>@spruceid/siwe-parser": true, + "@metamask/utils": true, "browserify>buffer": true, "eslint>fast-deep-equal": true, "eth-ens-namehash": true, @@ -775,18 +776,6 @@ "ethjs>ethjs-unit": true } }, - "@metamask/controller-utils>@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "@metamask/utils>superstruct": true, - "browserify>buffer": true, - "nock>debug": true, - "semver": true - } - }, "@metamask/controller-utils>@spruceid/siwe-parser": { "globals": { "console.error": true, @@ -990,17 +979,54 @@ "TextEncoder": true }, "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": true, "@metamask/eth-keyring-controller>@metamask/eth-sig-util": true, "@metamask/scure-bip39": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, "browserify>buffer": true, "eth-lattice-keyring>@ethereumjs/util": true } }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/hashes": true, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/secp256k1": { + "globals": { + "crypto": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32": { + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/secp256k1": true, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip39>@noble/hashes": true, + "@metamask/key-tree>@scure/base": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip39>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, "@metamask/eth-keyring-controller>@metamask/eth-sig-util": { "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography": true, "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethjs-util": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, "bn.js": true, "browserify>buffer": true, "eth-lattice-keyring>@ethereumjs/util": true, @@ -1008,6 +1034,21 @@ "eth-sig-util>tweetnacl-util": true } }, + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography>@noble/hashes": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -1018,13 +1059,28 @@ "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring": { "packages": { "@metamask/eth-keyring-controller>@metamask/eth-sig-util": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": true, "browserify>buffer": true, "browserify>events": true, "eth-lattice-keyring>@ethereumjs/util": true, "ethereumjs-wallet>randombytes": true } }, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography>@noble/hashes": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, "@metamask/eth-keyring-controller>obs-store": { "packages": { "@metamask/eth-token-tracker>safe-event-emitter": true, @@ -1060,25 +1116,17 @@ }, "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util": { "packages": { - "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethereum-cryptography": true, "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethjs-util": true, "bn.js": true, "browserify>assert": true, "browserify>buffer": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, "ethereumjs-wallet>safe-buffer": true, "ganache>secp256k1>elliptic": true } }, - "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -1537,8 +1585,14 @@ "TextEncoder": true }, "packages": { - "@metamask/key-tree>@noble/hashes": true, - "@metamask/key-tree>@scure/base": true + "@metamask/key-tree>@scure/base": true, + "@metamask/scure-bip39>@noble/hashes": true + } + }, + "@metamask/scure-bip39>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true } }, "@metamask/smart-transactions-controller": { @@ -1867,8 +1921,6 @@ "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz": { "packages": { "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz>@chainsafe/persistent-merkle-tree": true, - "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz>case": true, - "browserify": true, "browserify>buffer": true } }, @@ -1877,7 +1929,8 @@ "WeakRef": true }, "packages": { - "browserify": true + "@metamask/key-tree>@noble/hashes": true, + "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz>@chainsafe/as-sha256": true } }, "@metamask/utils>@ethereumjs/tx>@ethereumjs/rlp": { @@ -1885,44 +1938,12 @@ "TextEncoder": true } }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": { + "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/curves": { "globals": { - "TextDecoder": true, - "crypto": true + "TextEncoder": true }, "packages": { - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/hashes": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/secp256k1": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/hashes": { - "globals": { - "TextEncoder": true, - "crypto": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32": { - "packages": { - "@metamask/key-tree>@noble/hashes": true, - "@metamask/key-tree>@scure/base": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32>@noble/secp256k1": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true + "@metamask/key-tree>@noble/hashes": true } }, "@ngraveio/bc-ur": { @@ -2722,6 +2743,16 @@ "ethjs-query>babel-runtime>core-js": true } }, + "browserify>browserify-zlib": { + "packages": { + "browserify>assert": true, + "browserify>browserify-zlib>pako": true, + "browserify>buffer": true, + "browserify>process": true, + "browserify>stream-browserify": true, + "browserify>util": true + } + }, "browserify>buffer": { "globals": { "console": true @@ -2888,6 +2919,12 @@ "browserify>has>function-bind": true } }, + "browserify>https-browserify": { + "packages": { + "browserify>stream-http": true, + "browserify>url": true + } + }, "browserify>os-browserify": { "globals": { "location": true, @@ -2917,6 +2954,41 @@ "readable-stream": true } }, + "browserify>stream-http": { + "globals": { + "AbortController": true, + "Blob": true, + "MSStreamReader": true, + "ReadableStream": true, + "WritableStream": true, + "XDomainRequest": true, + "XMLHttpRequest": true, + "clearTimeout": true, + "fetch": true, + "location.protocol.search": true, + "setTimeout": true + }, + "packages": { + "browserify>buffer": true, + "browserify>process": true, + "browserify>stream-http>builtin-status-codes": true, + "browserify>stream-http>readable-stream": true, + "browserify>url": true, + "pumpify>inherits": true, + "watchify>xtend": true + } + }, + "browserify>stream-http>readable-stream": { + "packages": { + "@storybook/api>util-deprecate": true, + "browserify>browser-resolve": true, + "browserify>buffer": true, + "browserify>events": true, + "browserify>process": true, + "browserify>string_decoder": true, + "pumpify>inherits": true + } + }, "browserify>string_decoder": { "packages": { "ethereumjs-wallet>safe-buffer": true @@ -3163,10 +3235,39 @@ "packages": { "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz": true, "@metamask/utils>@ethereumjs/tx>@ethereumjs/rlp": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, "browserify>buffer": true, "browserify>events": true, - "browserify>insert-module-globals>is-buffer": true + "browserify>insert-module-globals>is-buffer": true, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": true, + "eth-lattice-keyring>@ethereumjs/util>micro-ftch": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/key-tree>@noble/hashes": true, + "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/curves": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>micro-ftch": { + "globals": { + "Headers": true, + "TextDecoder": true, + "URL": true, + "btoa": true, + "fetch": true + }, + "packages": { + "browserify>browserify-zlib": true, + "browserify>buffer": true, + "browserify>https-browserify": true, + "browserify>process": true, + "browserify>stream-http": true, + "browserify>url": true, + "browserify>util": true } }, "eth-lattice-keyring>bn.js": { @@ -3367,22 +3468,14 @@ "bn.js": true, "browserify>assert": true, "browserify>buffer": true, - "eth-sig-util>ethereumjs-util>ethereum-cryptography": true, "eth-sig-util>ethereumjs-util>ethjs-util": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, "ethereumjs-wallet>safe-buffer": true, "ganache>secp256k1>elliptic": true } }, - "eth-sig-util>ethereumjs-util>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "eth-sig-util>ethereumjs-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -3502,21 +3595,13 @@ "bn.js": true, "browserify>assert": true, "browserify>buffer": true, - "ethereumjs-abi>ethereumjs-util>ethereum-cryptography": true, "ethereumjs-abi>ethereumjs-util>ethjs-util": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, "ganache>secp256k1>elliptic": true } }, - "ethereumjs-abi>ethereumjs-util>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "ethereumjs-abi>ethereumjs-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -3701,22 +3786,14 @@ "ethereumjs-wallet>safe-buffer": true } }, - "ethereumjs-wallet>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "ethereumjs-wallet>ethereumjs-util": { "packages": { "bn.js": true, "browserify>assert": true, "browserify>buffer": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, - "ethereumjs-wallet>ethereum-cryptography": true, "ethereumjs-wallet>ethereumjs-util>ethjs-util": true, "ganache>secp256k1>elliptic": true } diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index 41d9cfc47..22ffda882 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -761,13 +761,14 @@ }, "@metamask/controller-utils": { "globals": { + "URL": true, "console.error": true, "fetch": true, "setTimeout": true }, "packages": { - "@metamask/controller-utils>@metamask/utils": true, "@metamask/controller-utils>@spruceid/siwe-parser": true, + "@metamask/utils": true, "browserify>buffer": true, "eslint>fast-deep-equal": true, "eth-ens-namehash": true, @@ -775,18 +776,6 @@ "ethjs>ethjs-unit": true } }, - "@metamask/controller-utils>@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "@metamask/utils>superstruct": true, - "browserify>buffer": true, - "nock>debug": true, - "semver": true - } - }, "@metamask/controller-utils>@spruceid/siwe-parser": { "globals": { "console.error": true, @@ -918,17 +907,54 @@ "TextEncoder": true }, "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": true, "@metamask/eth-keyring-controller>@metamask/eth-sig-util": true, "@metamask/scure-bip39": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, "browserify>buffer": true, "eth-lattice-keyring>@ethereumjs/util": true } }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/hashes": true, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/secp256k1": { + "globals": { + "crypto": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32": { + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/secp256k1": true, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip39>@noble/hashes": true, + "@metamask/key-tree>@scure/base": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip39>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, "@metamask/eth-keyring-controller>@metamask/eth-sig-util": { "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography": true, "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethjs-util": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, "bn.js": true, "browserify>buffer": true, "eth-lattice-keyring>@ethereumjs/util": true, @@ -936,6 +962,21 @@ "eth-sig-util>tweetnacl-util": true } }, + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography>@noble/hashes": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -946,13 +987,28 @@ "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring": { "packages": { "@metamask/eth-keyring-controller>@metamask/eth-sig-util": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": true, "browserify>buffer": true, "browserify>events": true, "eth-lattice-keyring>@ethereumjs/util": true, "ethereumjs-wallet>randombytes": true } }, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography>@noble/hashes": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, "@metamask/eth-keyring-controller>obs-store": { "packages": { "@metamask/eth-token-tracker>safe-event-emitter": true, @@ -988,25 +1044,17 @@ }, "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util": { "packages": { - "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethereum-cryptography": true, "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethjs-util": true, "bn.js": true, "browserify>assert": true, "browserify>buffer": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, "ethereumjs-wallet>safe-buffer": true, "ganache>secp256k1>elliptic": true } }, - "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -1374,8 +1422,14 @@ "TextEncoder": true }, "packages": { - "@metamask/key-tree>@noble/hashes": true, - "@metamask/key-tree>@scure/base": true + "@metamask/key-tree>@scure/base": true, + "@metamask/scure-bip39>@noble/hashes": true + } + }, + "@metamask/scure-bip39>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true } }, "@metamask/smart-transactions-controller": { @@ -1474,8 +1528,6 @@ "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz": { "packages": { "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz>@chainsafe/persistent-merkle-tree": true, - "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz>case": true, - "browserify": true, "browserify>buffer": true } }, @@ -1484,7 +1536,8 @@ "WeakRef": true }, "packages": { - "browserify": true + "@metamask/key-tree>@noble/hashes": true, + "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz>@chainsafe/as-sha256": true } }, "@metamask/utils>@ethereumjs/tx>@ethereumjs/rlp": { @@ -1492,44 +1545,12 @@ "TextEncoder": true } }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": { + "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/curves": { "globals": { - "TextDecoder": true, - "crypto": true + "TextEncoder": true }, "packages": { - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/hashes": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/secp256k1": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/hashes": { - "globals": { - "TextEncoder": true, - "crypto": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32": { - "packages": { - "@metamask/key-tree>@noble/hashes": true, - "@metamask/key-tree>@scure/base": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32>@noble/secp256k1": true - } - }, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@scure/bip32>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true + "@metamask/key-tree>@noble/hashes": true } }, "@ngraveio/bc-ur": { @@ -2329,6 +2350,16 @@ "ethjs-query>babel-runtime>core-js": true } }, + "browserify>browserify-zlib": { + "packages": { + "browserify>assert": true, + "browserify>browserify-zlib>pako": true, + "browserify>buffer": true, + "browserify>process": true, + "browserify>stream-browserify": true, + "browserify>util": true + } + }, "browserify>buffer": { "globals": { "console": true @@ -2495,6 +2526,12 @@ "browserify>has>function-bind": true } }, + "browserify>https-browserify": { + "packages": { + "browserify>stream-http": true, + "browserify>url": true + } + }, "browserify>os-browserify": { "globals": { "location": true, @@ -2524,6 +2561,41 @@ "readable-stream": true } }, + "browserify>stream-http": { + "globals": { + "AbortController": true, + "Blob": true, + "MSStreamReader": true, + "ReadableStream": true, + "WritableStream": true, + "XDomainRequest": true, + "XMLHttpRequest": true, + "clearTimeout": true, + "fetch": true, + "location.protocol.search": true, + "setTimeout": true + }, + "packages": { + "browserify>buffer": true, + "browserify>process": true, + "browserify>stream-http>builtin-status-codes": true, + "browserify>stream-http>readable-stream": true, + "browserify>url": true, + "pumpify>inherits": true, + "watchify>xtend": true + } + }, + "browserify>stream-http>readable-stream": { + "packages": { + "@storybook/api>util-deprecate": true, + "browserify>browser-resolve": true, + "browserify>buffer": true, + "browserify>events": true, + "browserify>process": true, + "browserify>string_decoder": true, + "pumpify>inherits": true + } + }, "browserify>string_decoder": { "packages": { "ethereumjs-wallet>safe-buffer": true @@ -2770,10 +2842,39 @@ "packages": { "@metamask/utils>@ethereumjs/tx>@chainsafe/ssz": true, "@metamask/utils>@ethereumjs/tx>@ethereumjs/rlp": true, - "@metamask/utils>@ethereumjs/tx>ethereum-cryptography": true, "browserify>buffer": true, "browserify>events": true, - "browserify>insert-module-globals>is-buffer": true + "browserify>insert-module-globals>is-buffer": true, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": true, + "eth-lattice-keyring>@ethereumjs/util>micro-ftch": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/key-tree>@noble/hashes": true, + "@metamask/utils>@ethereumjs/tx>ethereum-cryptography>@noble/curves": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>micro-ftch": { + "globals": { + "Headers": true, + "TextDecoder": true, + "URL": true, + "btoa": true, + "fetch": true + }, + "packages": { + "browserify>browserify-zlib": true, + "browserify>buffer": true, + "browserify>https-browserify": true, + "browserify>process": true, + "browserify>stream-http": true, + "browserify>url": true, + "browserify>util": true } }, "eth-lattice-keyring>bn.js": { @@ -2974,22 +3075,14 @@ "bn.js": true, "browserify>assert": true, "browserify>buffer": true, - "eth-sig-util>ethereumjs-util>ethereum-cryptography": true, "eth-sig-util>ethereumjs-util>ethjs-util": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, "ethereumjs-wallet>safe-buffer": true, "ganache>secp256k1>elliptic": true } }, - "eth-sig-util>ethereumjs-util>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "eth-sig-util>ethereumjs-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -3109,21 +3202,13 @@ "bn.js": true, "browserify>assert": true, "browserify>buffer": true, - "ethereumjs-abi>ethereumjs-util>ethereum-cryptography": true, "ethereumjs-abi>ethereumjs-util>ethjs-util": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, "ganache>secp256k1>elliptic": true } }, - "ethereumjs-abi>ethereumjs-util>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "ethereumjs-abi>ethereumjs-util>ethjs-util": { "packages": { "browserify>buffer": true, @@ -3308,22 +3393,14 @@ "ethereumjs-wallet>safe-buffer": true } }, - "ethereumjs-wallet>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, "ethereumjs-wallet>ethereumjs-util": { "packages": { "bn.js": true, "browserify>assert": true, "browserify>buffer": true, "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, "ethereumjs-util>rlp": true, - "ethereumjs-wallet>ethereum-cryptography": true, "ethereumjs-wallet>ethereumjs-util>ethjs-util": true, "ganache>secp256k1>elliptic": true } diff --git a/package.json b/package.json index 365642414..6c76ea42c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "metamask-crx", - "version": "10.30.1", + "version": "10.30.2", "private": true, "repository": { "type": "git", @@ -243,7 +243,7 @@ "@metamask/jazzicon": "^2.0.0", "@metamask/key-tree": "^7.0.0", "@metamask/logo": "^3.1.1", - "@metamask/message-manager": "^3.0.0", + "@metamask/message-manager": "^5.0.0", "@metamask/metamask-eth-abis": "^3.0.0", "@metamask/notification-controller": "^2.0.0", "@metamask/obs-store": "^8.1.0", diff --git a/ui/components/app/gas-details-item/gas-details-item.js b/ui/components/app/gas-details-item/gas-details-item.js index 98550d17c..a9420e1a2 100644 --- a/ui/components/app/gas-details-item/gas-details-item.js +++ b/ui/components/app/gas-details-item/gas-details-item.js @@ -50,6 +50,16 @@ const GasDetailsItem = ({ userAcknowledgedGasMissing = false }) => { return null; } + const maxPriorityFeePerGasToRender = ( + maxPriorityFeePerGas ?? + hexWEIToDecGWEI(transactionData.txParams?.maxPriorityFeePerGas ?? '0x0') + ).toString(); + + const maxFeePerGasToRender = ( + maxFeePerGas ?? + hexWEIToDecGWEI(transactionData.txParams?.maxFeePerGas ?? '0x0') + ).toString(); + return ( { } subTitle={ } /> diff --git a/ui/components/app/gas-details-item/gas-details-item.test.js b/ui/components/app/gas-details-item/gas-details-item.test.js index 4885f9068..9b61c28ce 100644 --- a/ui/components/app/gas-details-item/gas-details-item.test.js +++ b/ui/components/app/gas-details-item/gas-details-item.test.js @@ -110,4 +110,43 @@ describe('GasDetailsItem', () => { expect(screen.queryAllByText('ETH').length).toBeGreaterThan(0); }); }); + + it('should render gas fee details if maxPriorityFeePerGas is 0', async () => { + render({ + contextProps: { + transaction: { + txParams: { + gas: '0x5208', + maxFeePerGas: '0x59682f10', + maxPriorityFeePerGas: '0', + }, + simulationFails: false, + userFeeLevel: 'low', + }, + }, + }); + await waitFor(() => { + expect(screen.queryAllByTitle('0.0000315 ETH').length).toBeGreaterThan(0); + expect(screen.queryAllByText('ETH').length).toBeGreaterThan(0); + }); + }); + + it('should render gas fee details if maxPriorityFeePerGas is undefined', async () => { + render({ + contextProps: { + transaction: { + txParams: { + gas: '0x5208', + maxFeePerGas: '0x59682f10', + }, + simulationFails: false, + userFeeLevel: 'low', + }, + }, + }); + await waitFor(() => { + expect(screen.queryAllByTitle('0.0000315 ETH').length).toBeGreaterThan(0); + expect(screen.queryAllByText('ETH').length).toBeGreaterThan(0); + }); + }); }); diff --git a/yarn.lock b/yarn.lock index ffb221c14..162e6693b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1680,30 +1680,30 @@ __metadata: languageName: node linkType: hard -"@chainsafe/as-sha256@npm:^0.3.1": - version: 0.3.1 - resolution: "@chainsafe/as-sha256@npm:0.3.1" - checksum: 58ea733be1657b0e31dbf48b0dba862da0833df34a81c1460c7352f04ce90874f70003cbf34d0afb9e5e53a33ee2d63a261a8b12462be85b2ba0a6f7f13d6150 +"@chainsafe/as-sha256@npm:^0.4.1": + version: 0.4.1 + resolution: "@chainsafe/as-sha256@npm:0.4.1" + checksum: 6d86975e648ecdafd366802278ac15b392b252e967f3681412ec48b5a3518b936cc5e977517499882b084991446d25787d98f8f585891943688cc81549a44e9a languageName: node linkType: hard -"@chainsafe/persistent-merkle-tree@npm:^0.4.2": - version: 0.4.2 - resolution: "@chainsafe/persistent-merkle-tree@npm:0.4.2" +"@chainsafe/persistent-merkle-tree@npm:^0.6.1": + version: 0.6.1 + resolution: "@chainsafe/persistent-merkle-tree@npm:0.6.1" dependencies: - "@chainsafe/as-sha256": ^0.3.1 - checksum: f9cfcb2132a243992709715dbd28186ab48c7c0c696f29d30857693cca5526bf753974a505ef68ffd5623bbdbcaa10f9083f4dd40bf99eb6408e451cc26a1a9e + "@chainsafe/as-sha256": ^0.4.1 + "@noble/hashes": ^1.3.0 + checksum: 74614b8d40970dc930d5bf741619498b0bbbde5ff24ce45fce6ad122143aa77bf57249a28175b1b972cf56bff57d529a4258b7222ab4e60c1261119b5986c51b languageName: node linkType: hard -"@chainsafe/ssz@npm:0.9.4": - version: 0.9.4 - resolution: "@chainsafe/ssz@npm:0.9.4" +"@chainsafe/ssz@npm:^0.11.1": + version: 0.11.1 + resolution: "@chainsafe/ssz@npm:0.11.1" dependencies: - "@chainsafe/as-sha256": ^0.3.1 - "@chainsafe/persistent-merkle-tree": ^0.4.2 - case: ^1.6.3 - checksum: c6eaedeae9e5618b3c666ff4507a27647f665a8dcf17d5ca86da4ed4788c5a93868f256d0005467d184fdf35ec03f323517ec2e55ec42492d769540a2ec396bc + "@chainsafe/as-sha256": ^0.4.1 + "@chainsafe/persistent-merkle-tree": ^0.6.1 + checksum: e3c2928f9ab4a0544e645f0302b9535046d1e6e1d4b3bd1c3dd6bc8e6302fddad6036d65e7900d1446f285f496051da05fa14c1bde590b511d03033907175c8f languageName: node linkType: hard @@ -2026,13 +2026,13 @@ __metadata: languageName: node linkType: hard -"@ethereumjs/common@npm:^3.1.1": - version: 3.1.1 - resolution: "@ethereumjs/common@npm:3.1.1" +"@ethereumjs/common@npm:^3.1.2": + version: 3.1.2 + resolution: "@ethereumjs/common@npm:3.1.2" dependencies: - "@ethereumjs/util": ^8.0.5 + "@ethereumjs/util": ^8.0.6 crc-32: ^1.2.0 - checksum: 58602dee9fbcf691dca111b4fd7fd5770f5e86d68012ce48fba396c7038afdca4fca273a9cf39f88cf6ea7b256603a4bd214e94e9d01361efbcd060460b78952 + checksum: e80a8bc86476f1ce878bacb1915d91681671bb5303291cdcece26e456ac13a6158f0f59625cb02a1cfbdd7c9a7dc8b175f8d8f0fee596b3eb9dfb965465ad43d languageName: node linkType: hard @@ -2065,33 +2065,33 @@ __metadata: languageName: node linkType: hard -"@ethereumjs/tx@npm:^4.1.1": - version: 4.1.1 - resolution: "@ethereumjs/tx@npm:4.1.1" +"@ethereumjs/tx@npm:^4.1.2": + version: 4.1.2 + resolution: "@ethereumjs/tx@npm:4.1.2" dependencies: - "@chainsafe/ssz": 0.9.4 - "@ethereumjs/common": ^3.1.1 + "@chainsafe/ssz": ^0.11.1 + "@ethereumjs/common": ^3.1.2 "@ethereumjs/rlp": ^4.0.1 - "@ethereumjs/util": ^8.0.5 - "@ethersproject/providers": ^5.7.2 - ethereum-cryptography: ^1.1.2 + "@ethereumjs/util": ^8.0.6 + ethereum-cryptography: ^2.0.0 peerDependencies: c-kzg: ^1.0.8 peerDependenciesMeta: c-kzg: optional: true - checksum: 98897e79adf03ee90ed98c6a543e15e0b4e127bc5bc381d70cdcc76b111574205b94869c29d925ea9e30a98e5ef8b0f5597914359deb9db552017b2e78ef17a8 + checksum: ad2fb692c3746cd5935b01c98b6b54046ae2a1fccff57ad2209e10446f3b279a204d7477accf05b27078445b14379314077769662142ac07117c45a5a1ea427f languageName: node linkType: hard -"@ethereumjs/util@npm:^8.0.0, @ethereumjs/util@npm:^8.0.2, @ethereumjs/util@npm:^8.0.5": - version: 8.0.5 - resolution: "@ethereumjs/util@npm:8.0.5" +"@ethereumjs/util@npm:^8.0.0, @ethereumjs/util@npm:^8.0.2, @ethereumjs/util@npm:^8.0.6": + version: 8.0.6 + resolution: "@ethereumjs/util@npm:8.0.6" dependencies: - "@chainsafe/ssz": 0.9.4 + "@chainsafe/ssz": ^0.11.1 "@ethereumjs/rlp": ^4.0.1 - ethereum-cryptography: ^1.1.2 - checksum: 318386785295b4584289b1aa576d2621392b3a918d127890db62d3f74184f3377694dd9e951e19bfb9ab80e8dc9e38e180236cac2651dead26097d10963731f9 + ethereum-cryptography: ^2.0.0 + micro-ftch: ^0.3.1 + checksum: 034e06cddec27417318434a1a7cd7a9dc0f0b447c1f54423c515d8809c9697386eee6429d0a1c13517a85c696e6fdba570b243d882e65764c274859606027015 languageName: node linkType: hard @@ -3723,18 +3723,18 @@ __metadata: languageName: node linkType: hard -"@metamask/controller-utils@npm:^3.0.0, @metamask/controller-utils@npm:^3.1.0": - version: 3.1.0 - resolution: "@metamask/controller-utils@npm:3.1.0" +"@metamask/controller-utils@npm:^3.0.0, @metamask/controller-utils@npm:^3.1.0, @metamask/controller-utils@npm:^3.4.0": + version: 3.4.0 + resolution: "@metamask/controller-utils@npm:3.4.0" dependencies: - "@metamask/utils": ^3.3.1 + "@metamask/utils": ^5.0.1 "@spruceid/siwe-parser": 1.1.3 eth-ens-namehash: ^2.0.8 - eth-rpc-errors: ^4.0.0 + eth-rpc-errors: ^4.0.2 ethereumjs-util: ^7.0.10 ethjs-unit: ^0.1.6 fast-deep-equal: ^3.1.3 - checksum: 811fc4b9da98ca406a0e002c87933687e745d20f802305bb2af0affcdad454189c705caae9389444da1f5f88f2d10269b3ae8354aa1f600a11ddb9315cfa5718 + checksum: c483a56a062118ad0b740ca65ec05810226af069bdcd7ff92adc250a9a4e8b9abf347876476ecd005f7890770b5bbf2f621a90b5a3698fdd059127d4337d7c6b languageName: node linkType: hard @@ -4022,18 +4022,18 @@ __metadata: languageName: node linkType: hard -"@metamask/message-manager@npm:^3.0.0": - version: 3.0.0 - resolution: "@metamask/message-manager@npm:3.0.0" +"@metamask/message-manager@npm:^5.0.0": + version: 5.0.0 + resolution: "@metamask/message-manager@npm:5.0.0" dependencies: "@metamask/base-controller": ^2.0.0 - "@metamask/controller-utils": ^3.1.0 + "@metamask/controller-utils": ^3.4.0 "@types/uuid": ^8.3.0 eth-sig-util: ^3.0.0 ethereumjs-util: ^7.0.10 jsonschema: ^1.2.4 uuid: ^8.3.2 - checksum: 14e0a4a398d95ce720e515bd1f35aee7b7b9f5f59367210a9125fe66fb561b630ae51b61f32048767f0bb30dd4a2e442e47c8d850de78f820feda7f72e4dc05e + checksum: 078c7eeca03975c3a899dcaa7485ce7aaff6d97b53c2a8e8563ec4e17791b836914fbc0f57a64cbf263be231609e0ffc77eabbe9a98fdcc1240af09a733ba574 languageName: node linkType: hard @@ -4452,16 +4452,16 @@ __metadata: languageName: node linkType: hard -"@metamask/utils@npm:^5.0.0": - version: 5.0.0 - resolution: "@metamask/utils@npm:5.0.0" +"@metamask/utils@npm:^5.0.0, @metamask/utils@npm:^5.0.1": + version: 5.0.2 + resolution: "@metamask/utils@npm:5.0.2" dependencies: - "@ethereumjs/tx": ^4.1.1 + "@ethereumjs/tx": ^4.1.2 "@types/debug": ^4.1.7 debug: ^4.3.4 semver: ^7.3.8 superstruct: ^1.0.3 - checksum: 34e39fc0bf28db5fe92676753de3291b05a517f8c81dbe332a4b6002739a58450a89fb2bddd85922a4f420affb1674604e6ad4627cdf052459e5371361ef7dd2 + checksum: eca82e42911b2840deb4f32f0f215c5ffd14d22d68afbbe92d3180e920e509e310777b15eab29def3448f3535b66596ceb4c23666ec846adacc8e1bb093ff882 languageName: node linkType: hard @@ -4497,6 +4497,15 @@ __metadata: languageName: node linkType: hard +"@noble/curves@npm:1.0.0, @noble/curves@npm:~1.0.0": + version: 1.0.0 + resolution: "@noble/curves@npm:1.0.0" + dependencies: + "@noble/hashes": 1.3.0 + checksum: 6bcef44d626c640dc8961819d68dd67dffb907e3b973b7c27efe0ecdd9a5c6ce62c7b9e3dfc930c66605dced7f1ec0514d191c09a2ce98d6d52b66e3315ffa79 + languageName: node + linkType: hard + "@noble/ed25519@npm:^1.6.0": version: 1.6.0 resolution: "@noble/ed25519@npm:1.6.0" @@ -4511,7 +4520,14 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:^1.0.0, @noble/hashes@npm:^1.1.3, @noble/hashes@npm:~1.1.1": +"@noble/hashes@npm:1.3.0, @noble/hashes@npm:^1.0.0, @noble/hashes@npm:^1.1.3, @noble/hashes@npm:^1.3.0, @noble/hashes@npm:~1.3.0": + version: 1.3.0 + resolution: "@noble/hashes@npm:1.3.0" + checksum: d7ddb6d7c60f1ce1f87facbbef5b724cdea536fc9e7f59ae96e0fc9de96c8f1a2ae2bdedbce10f7dcc621338dfef8533daa73c873f2b5c87fa1a4e05a95c2e2e + languageName: node + linkType: hard + +"@noble/hashes@npm:~1.1.1": version: 1.1.3 resolution: "@noble/hashes@npm:1.1.3" checksum: a6f9783d2a33fc528c8709532b1c26cc3f5866f79c66256e881b28c61a1585be3899b008aa4e5e2b4e01b95c713722f52591cbb18ec51aa0ec63e7eaece1b89c @@ -4839,6 +4855,17 @@ __metadata: languageName: node linkType: hard +"@scure/bip32@npm:1.3.0": + version: 1.3.0 + resolution: "@scure/bip32@npm:1.3.0" + dependencies: + "@noble/curves": ~1.0.0 + "@noble/hashes": ~1.3.0 + "@scure/base": ~1.1.0 + checksum: 6eae997f9bdf41fe848134898960ac48e645fa10e63d579be965ca331afd0b7c1b8ebac170770d237ab4099dafc35e5a82995384510025ccf2abe669f85e8918 + languageName: node + linkType: hard + "@scure/bip39@npm:1.1.0": version: 1.1.0 resolution: "@scure/bip39@npm:1.1.0" @@ -4849,6 +4876,16 @@ __metadata: languageName: node linkType: hard +"@scure/bip39@npm:1.2.0": + version: 1.2.0 + resolution: "@scure/bip39@npm:1.2.0" + dependencies: + "@noble/hashes": ~1.3.0 + "@scure/base": ~1.1.0 + checksum: 980d761f53e63de04a9e4db840eb13bfb1bd1b664ecb04a71824c12c190f4972fd84146f3ed89b2a8e4c6bd2c17c15f8b592b7ac029e903323b0f9e2dae6916b + languageName: node + linkType: hard + "@segment/loosely-validate-event@npm:^2.0.0": version: 2.0.0 resolution: "@segment/loosely-validate-event@npm:2.0.0" @@ -11633,13 +11670,6 @@ __metadata: languageName: node linkType: hard -"case@npm:^1.6.3": - version: 1.6.3 - resolution: "case@npm:1.6.3" - checksum: febe73278f910b0d28aab7efd6f51c235f9aa9e296148edb56dfb83fd58faa88308c30ce9a0122b6e53e0362c44f4407105bd5ef89c46860fc2b184e540fd68d - languageName: node - linkType: hard - "caseless@npm:~0.12.0": version: 0.12.0 resolution: "caseless@npm:0.12.0" @@ -15785,6 +15815,18 @@ __metadata: languageName: node linkType: hard +"ethereum-cryptography@npm:^2.0.0": + version: 2.0.0 + resolution: "ethereum-cryptography@npm:2.0.0" + dependencies: + "@noble/curves": 1.0.0 + "@noble/hashes": 1.3.0 + "@scure/bip32": 1.3.0 + "@scure/bip39": 1.2.0 + checksum: 958f8aab2d1b32aa759fb27a27877b3647410e8bb9aca7d65d1d477db4864cf7fc46b918eb52a1e246c25e98ee0a35a632c88b496aeaefa13469ee767a76c8db + languageName: node + linkType: hard + "ethereum-ens-network-map@npm:^1.0.2": version: 1.0.2 resolution: "ethereum-ens-network-map@npm:1.0.2" @@ -24172,7 +24214,7 @@ __metadata: "@metamask/jazzicon": ^2.0.0 "@metamask/key-tree": ^7.0.0 "@metamask/logo": ^3.1.1 - "@metamask/message-manager": ^3.0.0 + "@metamask/message-manager": ^5.0.0 "@metamask/metamask-eth-abis": ^3.0.0 "@metamask/notification-controller": ^2.0.0 "@metamask/obs-store": ^8.1.0 @@ -24460,6 +24502,13 @@ __metadata: languageName: node linkType: hard +"micro-ftch@npm:^0.3.1": + version: 0.3.1 + resolution: "micro-ftch@npm:0.3.1" + checksum: 0e496547253a36e98a83fb00c628c53c3fb540fa5aaeaf718438873785afd193244988c09d219bb1802984ff227d04938d9571ef90fe82b48bd282262586aaff + languageName: node + linkType: hard + "microevent.ts@npm:~0.1.1": version: 0.1.1 resolution: "microevent.ts@npm:0.1.1" From 2897607288733b23dea9a7a83d8fc6b52031b5c3 Mon Sep 17 00:00:00 2001 From: MetaMask Bot Date: Mon, 15 May 2023 21:04:04 +0000 Subject: [PATCH 2/8] Version v10.30.3 --- CHANGELOG.md | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cb1030ee..3583a0161 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [10.30.3] + ## [10.30.2] ### Changed - Improve `eth_signTypedData_v4` validation ([#19110](https://github.com/MetaMask/metamask-extension/pull/19110)) @@ -3718,7 +3720,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.30.2...HEAD +[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.30.3...HEAD +[10.30.3]: https://github.com/MetaMask/metamask-extension/compare/v10.30.2...v10.30.3 [10.30.2]: https://github.com/MetaMask/metamask-extension/compare/v10.30.1...v10.30.2 [10.30.1]: https://github.com/MetaMask/metamask-extension/compare/v10.30.0...v10.30.1 [10.30.0]: https://github.com/MetaMask/metamask-extension/compare/v10.29.0...v10.30.0 diff --git a/package.json b/package.json index 6c76ea42c..90993f68a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "metamask-crx", - "version": "10.30.2", + "version": "10.30.3", "private": true, "repository": { "type": "git", From 77ef06ac5794394bfd0ca645d76585db865ff4dd Mon Sep 17 00:00:00 2001 From: Mark Stacey Date: Mon, 15 May 2023 17:52:07 -0230 Subject: [PATCH 3/8] Support hex and number `net_version` responses Hex and number responses from the `net_version` request are now accepted. While most chains return decimal strings for this request, some chains were returning hex responses instead and failing our validation for this request (which was added in v10.30.0). This resolves that problem. Support for number responses was added because it likely worked in older versions as well, so support is maintained to avoid similar problems. Fixes #19151 --- .../controllers/network/network-controller.ts | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/app/scripts/controllers/network/network-controller.ts b/app/scripts/controllers/network/network-controller.ts index 545e47ccc..2d44435f6 100644 --- a/app/scripts/controllers/network/network-controller.ts +++ b/app/scripts/controllers/network/network-controller.ts @@ -10,10 +10,11 @@ import { import EthQuery from 'eth-query'; import { RestrictedControllerMessenger } from '@metamask/base-controller'; import { v4 as uuid } from 'uuid'; -import { Hex, isPlainObject } from '@metamask/utils'; +import { Hex, isPlainObject, isStrictHexString } from '@metamask/utils'; import { errorCodes } from 'eth-rpc-errors'; import { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider'; import { PollingBlockTracker } from 'eth-block-tracker'; +import { hexToDecimal } from '../../../../shared/modules/conversion.utils'; import { INFURA_PROVIDER_TYPES, INFURA_BLOCKED_KEY, @@ -301,16 +302,22 @@ function isErrorWithCode(error: unknown): error is { code: string | number } { } /** - * Asserts that the given value is a network ID, i.e., that it is a decimal - * number represented as a string. + * Convert the given value into a valid network ID. The ID is accepted + * as either a number, a decimal string, or a 0x-prefixed hex string. * - * @param value - The value to check. + * @param value - The network ID to convert, in an unknown format. + * @returns A valid network ID (as a decimal string) + * @throws If the given value cannot be safely parsed. */ -function assertNetworkId(value: any): asserts value is NetworkId { - assert( - /^\d+$/u.test(value) && !Number.isNaN(Number(value)), - 'value is not a number', - ); +function convertNetworkId(value: unknown): NetworkId { + if (typeof value === 'number' && !Number.isNaN(value)) { + return `${value}`; + } else if (isStrictHexString(value)) { + return hexToDecimal(value) as NetworkId; + } else if (typeof value === 'string' && /^\d+$/u.test(value)) { + return value as NetworkId; + } + throw new Error(`Cannot parse as a valid network ID: '${value}'`); } /** @@ -619,8 +626,7 @@ export class NetworkController extends EventEmitter { this.#determineEIP1559Compatibility(provider), ]); const possibleNetworkId = results[0]; - assertNetworkId(possibleNetworkId); - networkId = possibleNetworkId; + networkId = convertNetworkId(possibleNetworkId); supportsEIP1559 = results[1]; networkStatus = NetworkStatus.Available; } catch (error) { From a98b40089b56c64b20a1c315adaf37938e60b5b3 Mon Sep 17 00:00:00 2001 From: Mark Stacey Date: Mon, 15 May 2023 18:44:27 -0230 Subject: [PATCH 4/8] Update the changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3583a0161..ab508a326 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ## [10.30.3] +### Fixed +- Restore support for chains that return hex or number responses to `net_version` ([#19156](https://github.com/MetaMask/metamask-extension/pull/19156)) ## [10.30.2] ### Changed From f74befc8ba329e3ca29d7659a9c146ef4aba11a5 Mon Sep 17 00:00:00 2001 From: Mark Stacey Date: Mon, 15 May 2023 19:27:00 -0230 Subject: [PATCH 5/8] Add unit test coverage for `lookupNetwork` The changes to network ID validation are now covered by unit tests. Test cases for the invalid network ID case have been added as well, since that is covered on `develop` but not here. --- .../network/network-controller.test.ts | 518 +++++++++++++++--- 1 file changed, 427 insertions(+), 91 deletions(-) diff --git a/app/scripts/controllers/network/network-controller.test.ts b/app/scripts/controllers/network/network-controller.test.ts index c3360c140..bc977a05a 100644 --- a/app/scripts/controllers/network/network-controller.test.ts +++ b/app/scripts/controllers/network/network-controller.test.ts @@ -3,6 +3,7 @@ import assert from 'assert'; import { get } from 'lodash'; import { v4 } from 'uuid'; import nock from 'nock'; +import { toHex } from '@metamask/controller-utils'; import { ControllerMessenger } from '@metamask/base-controller'; import { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider'; import { when, resetAllWhenMocks } from 'jest-when'; @@ -2558,109 +2559,118 @@ describe('NetworkController', () => { describe('when the type in the provider configuration is "rpc"', () => { describe('if both net_version and eth_getBlockByNumber respond successfully', () => { - it('stores the fact the network is available', async () => { - await withController( - { - state: { - provider: { - type: 'rpc', - rpcUrl: 'https://mock-rpc-url', - chainId: '0x1337', - }, - }, - }, - async ({ controller }) => { - const fakeProvider = buildFakeProvider([ + const validNetworkIds = [12345, '12345', toHex(12345)]; + for (const networkId of validNetworkIds) { + describe(`with a network id of '${networkId}'`, () => { + it('stores the fact the network is available', async () => { + await withController( { - request: { - method: 'net_version', + state: { + provider: { + type: 'rpc', + rpcUrl: 'https://mock-rpc-url', + chainId: '0x1337', + }, }, - response: SUCCESSFUL_NET_VERSION_RESPONSE, }, - { - request: { - method: 'eth_getBlockByNumber', - }, - response: SUCCESSFUL_ETH_GET_BLOCK_BY_NUMBER_RESPONSE, - }, - ]); - const fakeNetworkClient = buildFakeClient(fakeProvider); - mockCreateNetworkClient().mockReturnValue(fakeNetworkClient); - await withoutCallingLookupNetwork({ - controller, - operation: async () => { - await controller.initializeProvider(); - }, - }); - expect(controller.store.getState().networkStatus).toBe('unknown'); + async ({ controller }) => { + const fakeProvider = buildFakeProvider([ + { + request: { + method: 'net_version', + }, + response: { + result: networkId, + }, + }, + { + request: { + method: 'eth_getBlockByNumber', + }, + response: SUCCESSFUL_ETH_GET_BLOCK_BY_NUMBER_RESPONSE, + }, + ]); + const fakeNetworkClient = buildFakeClient(fakeProvider); + mockCreateNetworkClient().mockReturnValue(fakeNetworkClient); + await withoutCallingLookupNetwork({ + controller, + operation: async () => { + await controller.initializeProvider(); + }, + }); + expect(controller.store.getState().networkStatus).toBe( + 'unknown', + ); - await waitForStateChanges({ - controller, - propertyPath: ['networkStatus'], - operation: async () => { - await controller.lookupNetwork(); - }, - }); + await waitForStateChanges({ + controller, + propertyPath: ['networkStatus'], + operation: async () => { + await controller.lookupNetwork(); + }, + }); - expect(controller.store.getState().networkStatus).toBe( - 'available', + expect(controller.store.getState().networkStatus).toBe( + 'available', + ); + }, ); - }, - ); - }); + }); - it('stores the ID of the network', async () => { - await withController( - { - state: { - provider: { - type: 'rpc', - rpcUrl: 'https://mock-rpc-url', - chainId: '0x1337', - }, - }, - }, - async ({ controller }) => { - const fakeProvider = buildFakeProvider([ + it('stores the ID of the network', async () => { + await withController( { - request: { - method: 'net_version', - }, - response: { - result: '42', + state: { + provider: { + type: 'rpc', + rpcUrl: 'https://mock-rpc-url', + chainId: '0x1337', + }, }, }, - { - request: { - method: 'eth_getBlockByNumber', - }, - response: { - result: POST_1559_BLOCK, - }, - }, - ]); - const fakeNetworkClient = buildFakeClient(fakeProvider); - mockCreateNetworkClient().mockReturnValue(fakeNetworkClient); - await withoutCallingLookupNetwork({ - controller, - operation: async () => { - await controller.initializeProvider(); - }, - }); - expect(controller.store.getState().networkId).toBe(null); + async ({ controller }) => { + const fakeProvider = buildFakeProvider([ + { + request: { + method: 'net_version', + }, + response: { + result: networkId, + }, + }, + { + request: { + method: 'eth_getBlockByNumber', + }, + response: { + result: POST_1559_BLOCK, + }, + }, + ]); + const fakeNetworkClient = buildFakeClient(fakeProvider); + mockCreateNetworkClient().mockReturnValue(fakeNetworkClient); + await withoutCallingLookupNetwork({ + controller, + operation: async () => { + await controller.initializeProvider(); + }, + }); + expect(controller.store.getState().networkId).toBe(null); - await waitForStateChanges({ - controller, - propertyPath: ['networkId'], - operation: async () => { - await controller.lookupNetwork(); - }, - }); + await waitForStateChanges({ + controller, + propertyPath: ['networkId'], + operation: async () => { + await controller.lookupNetwork(); + }, + }); - expect(controller.store.getState().networkId).toBe('42'); - }, - ); - }); + expect(controller.store.getState().networkId).toBe('12345'); + }, + ); + }); + }); + } it('stores the fact that the network supports EIP-1559 when baseFeePerGas is in the block header', async () => { await withController( @@ -3203,6 +3213,332 @@ describe('NetworkController', () => { }); }); + describe('if the request for eth_getBlockByNumber responds successfully, but the request for net_version returns an invalid network ID', () => { + it('stores the network status as unknown', async () => { + await withController( + { + state: { + provider: { + type: 'rpc', + rpcUrl: 'https://mock-rpc-url', + chainId: '0x1337', + }, + }, + }, + async ({ controller }) => { + const fakeProvider = buildFakeProvider([ + { + request: { + method: 'net_version', + }, + response: SUCCESSFUL_NET_VERSION_RESPONSE, + }, + { + request: { + method: 'eth_getBlockByNumber', + }, + response: SUCCESSFUL_ETH_GET_BLOCK_BY_NUMBER_RESPONSE, + }, + { + request: { + method: 'net_version', + }, + response: { + result: 'invalid', + }, + }, + { + request: { + method: 'eth_getBlockByNumber', + }, + response: SUCCESSFUL_ETH_GET_BLOCK_BY_NUMBER_RESPONSE, + }, + ]); + const fakeNetworkClient = buildFakeClient(fakeProvider); + mockCreateNetworkClient().mockReturnValue(fakeNetworkClient); + await waitForStateChanges({ + controller, + propertyPath: ['networkStatus'], + operation: async () => { + await controller.initializeProvider(); + }, + }); + expect(controller.store.getState().networkStatus).toBe( + 'available', + ); + + await waitForStateChanges({ + controller, + propertyPath: ['networkStatus'], + operation: async () => { + await controller.lookupNetwork(); + }, + }); + + expect(controller.store.getState().networkStatus).toBe('unknown'); + }, + ); + }); + + it('clears the ID of the network from state', async () => { + await withController( + { + state: { + provider: { + type: 'rpc', + rpcUrl: 'https://mock-rpc-url', + chainId: '0x1337', + }, + }, + }, + async ({ controller }) => { + const fakeProvider = buildFakeProvider([ + { + request: { + method: 'net_version', + }, + response: { + result: '42', + }, + }, + { + request: { + method: 'eth_getBlockByNumber', + }, + response: SUCCESSFUL_ETH_GET_BLOCK_BY_NUMBER_RESPONSE, + }, + { + request: { + method: 'net_version', + }, + response: { + result: 'invalid', + }, + }, + { + request: { + method: 'eth_getBlockByNumber', + }, + response: SUCCESSFUL_ETH_GET_BLOCK_BY_NUMBER_RESPONSE, + }, + ]); + const fakeNetworkClient = buildFakeClient(fakeProvider); + mockCreateNetworkClient().mockReturnValue(fakeNetworkClient); + await waitForStateChanges({ + controller, + propertyPath: ['networkStatus'], + operation: async () => { + await controller.initializeProvider(); + }, + }); + expect(controller.store.getState().networkId).toBe('42'); + + await waitForStateChanges({ + controller, + propertyPath: ['networkId'], + operation: async () => { + await controller.lookupNetwork(); + }, + }); + + expect(controller.store.getState().networkId).toBeNull(); + }, + ); + }); + + it('clears whether the network supports EIP-1559 from state along with any other network details', async () => { + await withController( + { + state: { + provider: { + type: 'rpc', + rpcUrl: 'https://mock-rpc-url', + chainId: '0x1337', + }, + networkDetails: { + EIPS: { + 1559: true, + }, + other: 'details', + }, + }, + }, + async ({ controller }) => { + const fakeProvider = buildFakeProvider([ + { + request: { + method: 'net_version', + }, + response: SUCCESSFUL_NET_VERSION_RESPONSE, + }, + { + request: { + method: 'eth_getBlockByNumber', + }, + response: { + result: PRE_1559_BLOCK, + }, + }, + { + request: { + method: 'net_version', + }, + response: { + result: 'invalid', + }, + }, + { + request: { + method: 'eth_getBlockByNumber', + }, + response: { + result: POST_1559_BLOCK, + }, + }, + ]); + const fakeNetworkClient = buildFakeClient(fakeProvider); + mockCreateNetworkClient().mockReturnValue(fakeNetworkClient); + await waitForStateChanges({ + controller, + propertyPath: ['networkStatus'], + operation: async () => { + await controller.initializeProvider(); + }, + }); + expect(controller.store.getState().networkDetails).toStrictEqual({ + EIPS: { + 1559: false, + }, + other: 'details', + }); + + await waitForStateChanges({ + controller, + propertyPath: ['networkDetails'], + operation: async () => { + await controller.lookupNetwork(); + }, + }); + + expect(controller.store.getState().networkDetails).toStrictEqual({ + EIPS: { + 1559: undefined, + }, + }); + }, + ); + }); + + it('does not emit infuraIsBlocked', async () => { + const { unrestrictedMessenger, restrictedMessenger } = + buildMessengerGroup(); + + await withController( + { + messenger: restrictedMessenger, + state: { + provider: { + type: 'rpc', + rpcUrl: 'https://mock-rpc-url', + chainId: '0x1337', + }, + }, + }, + async ({ controller }) => { + const fakeProvider = buildFakeProvider([ + { + request: { + method: 'net_version', + }, + response: { + result: 'invalid', + }, + }, + { + request: { + method: 'eth_getBlockByNumber', + }, + response: SUCCESSFUL_ETH_GET_BLOCK_BY_NUMBER_RESPONSE, + }, + ]); + const fakeNetworkClient = buildFakeClient(fakeProvider); + mockCreateNetworkClient().mockReturnValue(fakeNetworkClient); + await withoutCallingLookupNetwork({ + controller, + operation: async () => { + await controller.initializeProvider(); + }, + }); + + const promiseForNoInfuraIsBlockedEvents = waitForPublishedEvents({ + messenger: unrestrictedMessenger, + eventType: NetworkControllerEventType.InfuraIsBlocked, + count: 0, + operation: async () => { + await controller.lookupNetwork(); + }, + }); + + expect(await promiseForNoInfuraIsBlockedEvents).toBeTruthy(); + }, + ); + }); + + it('emits infuraIsUnblocked', async () => { + const { unrestrictedMessenger, restrictedMessenger } = + buildMessengerGroup(); + + await withController( + { + messenger: restrictedMessenger, + state: { + provider: { + type: 'rpc', + rpcUrl: 'https://mock-rpc-url', + chainId: '0x1337', + }, + }, + }, + async ({ controller }) => { + const fakeProvider = buildFakeProvider([ + { + request: { + method: 'net_version', + }, + response: { + result: 'invalid', + }, + }, + { + request: { + method: 'eth_getBlockByNumber', + }, + response: SUCCESSFUL_ETH_GET_BLOCK_BY_NUMBER_RESPONSE, + }, + ]); + const fakeNetworkClient = buildFakeClient(fakeProvider); + mockCreateNetworkClient().mockReturnValue(fakeNetworkClient); + await withoutCallingLookupNetwork({ + controller, + operation: async () => { + await controller.initializeProvider(); + }, + }); + + const infuraIsUnblocked = await waitForPublishedEvents({ + messenger: unrestrictedMessenger, + eventType: NetworkControllerEventType.InfuraIsUnblocked, + operation: async () => { + await controller.lookupNetwork(); + }, + }); + + expect(infuraIsUnblocked).toBeTruthy(); + }, + ); + }); + }); + describe('if the request for net_version responds successfully, but the request for eth_getBlockByNumber responds with a generic error', () => { it('stores the fact that the network is unavailable', async () => { await withController( From 1f5ab1e714208208aa543e224703fb2ee942f8e2 Mon Sep 17 00:00:00 2001 From: MetaMask Bot Date: Tue, 16 May 2023 01:45:21 +0000 Subject: [PATCH 6/8] Version v10.30.4 --- CHANGELOG.md | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab508a326..287ed7d7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [10.30.4] + ## [10.30.3] ### Fixed - Restore support for chains that return hex or number responses to `net_version` ([#19156](https://github.com/MetaMask/metamask-extension/pull/19156)) @@ -3722,7 +3724,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.30.3...HEAD +[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.30.4...HEAD +[10.30.4]: https://github.com/MetaMask/metamask-extension/compare/v10.30.3...v10.30.4 [10.30.3]: https://github.com/MetaMask/metamask-extension/compare/v10.30.2...v10.30.3 [10.30.2]: https://github.com/MetaMask/metamask-extension/compare/v10.30.1...v10.30.2 [10.30.1]: https://github.com/MetaMask/metamask-extension/compare/v10.30.0...v10.30.1 diff --git a/package.json b/package.json index 90993f68a..d6cc1cb99 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "metamask-crx", - "version": "10.30.3", + "version": "10.30.4", "private": true, "repository": { "type": "git", From ebc6f4d0aa3be476df453ae7400fc4ee011ed97b Mon Sep 17 00:00:00 2001 From: Vinicius Stevam <45455812+vinistevam@users.noreply.github.com> Date: Mon, 8 May 2023 11:09:46 +0100 Subject: [PATCH 7/8] Fix fail to reject multiple approval requests (#19050) --- app/scripts/metamask-controller.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 996add4d7..2f9498f30 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -62,6 +62,7 @@ import { } from '@metamask/snaps-controllers'; ///: END:ONLY_INCLUDE_IN +import { ApprovalType } from '@metamask/controller-utils'; import { AssetType, TransactionStatus, @@ -94,7 +95,6 @@ import { stripHexPrefix } from '../../shared/modules/hexstring-utils'; import { MILLISECOND, SECOND } from '../../shared/constants/time'; import { ORIGIN_METAMASK, - MESSAGE_TYPE, ///: BEGIN:ONLY_INCLUDE_IN(flask) SNAP_DIALOG_TYPES, ///: END:ONLY_INCLUDE_IN @@ -258,9 +258,13 @@ export default class MetamaskController extends EventEmitter { }), showApprovalRequest: opts.showUserConfirmation, typesExcludedFromRateLimiting: [ - MESSAGE_TYPE.ETH_SIGN, - MESSAGE_TYPE.PERSONAL_SIGN, - MESSAGE_TYPE.ETH_SIGN_TYPED_DATA, + ApprovalType.EthSign, + ApprovalType.PersonalSign, + ApprovalType.EthSignTypedData, + ApprovalType.Transaction, + ApprovalType.WatchAsset, + ApprovalType.EthGetEncryptionPublicKey, + ApprovalType.EthDecrypt, ], }); From 7ed2e5be690a1509f27d4973848f5c7d9e1a966d Mon Sep 17 00:00:00 2001 From: Mark Stacey Date: Mon, 15 May 2023 23:18:45 -0230 Subject: [PATCH 8/8] Update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 287ed7d7c..05ca52093 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ## [10.30.4] +### Fixed +- Fix error upon submitting multiple requests that require approval ([#19050](https://github.com/MetaMask/metamask-extension/pull/19050)) + - The affected requests were `eth_sendTransaction`, `wallet_watchAsset`, `eth_getEncryptionPublicKey`, and `eth_decrypt` ## [10.30.3] ### Fixed