From f39bb48227dbf98eaca1520608f67075ee368fcb Mon Sep 17 00:00:00 2001 From: Daniel <80175477+dan437@users.noreply.github.com> Date: Fri, 18 Feb 2022 15:24:47 +0100 Subject: [PATCH 1/8] Enable Avalanche for Swaps (#13653) --- app/_locales/en/messages.json | 3 +++ app/images/avax-token.png | Bin 0 -> 7817 bytes shared/constants/network.js | 2 ++ shared/constants/swaps.js | 28 +++++++++++++++++++++++++++- ui/pages/swaps/fee-card/fee-card.js | 3 +++ ui/pages/swaps/swaps.util.js | 4 ++++ ui/pages/swaps/swaps.util.test.js | 6 ++++++ 7 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 app/images/avax-token.png diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 7dfa29c22..56ea0a187 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -1835,6 +1835,9 @@ "networkName": { "message": "Network Name" }, + "networkNameAvalanche": { + "message": "Avalanche" + }, "networkNameBSC": { "message": "BSC" }, diff --git a/app/images/avax-token.png b/app/images/avax-token.png new file mode 100644 index 0000000000000000000000000000000000000000..d3afcba0c7bb44bdca99610e259240f98db89454 GIT binary patch literal 7817 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 literal 0 HcmV?d00001 diff --git a/shared/constants/network.js b/shared/constants/network.js index a678dd270..9a3ad6029 100644 --- a/shared/constants/network.js +++ b/shared/constants/network.js @@ -64,6 +64,7 @@ export const ETH_TOKEN_IMAGE_URL = './images/eth_logo.svg'; export const TEST_ETH_TOKEN_IMAGE_URL = './images/black-eth-logo.svg'; export const BNB_TOKEN_IMAGE_URL = './images/bnb.png'; export const MATIC_TOKEN_IMAGE_URL = './images/matic-token.png'; +export const AVAX_TOKEN_IMAGE_URL = './images/avax-token.png'; export const INFURA_PROVIDER_TYPES = [ROPSTEN, RINKEBY, KOVAN, MAINNET, GOERLI]; @@ -138,6 +139,7 @@ export const NATIVE_CURRENCY_TOKEN_IMAGE_MAP = { [TEST_ETH_SYMBOL]: TEST_ETH_TOKEN_IMAGE_URL, [BNB_SYMBOL]: BNB_TOKEN_IMAGE_URL, [MATIC_SYMBOL]: MATIC_TOKEN_IMAGE_URL, + [AVALANCHE_SYMBOL]: AVAX_TOKEN_IMAGE_URL, }; export const INFURA_BLOCKED_KEY = 'countryBlocked'; diff --git a/shared/constants/swaps.js b/shared/constants/swaps.js index 2518a7079..5af39669a 100644 --- a/shared/constants/swaps.js +++ b/shared/constants/swaps.js @@ -10,6 +10,9 @@ import { MATIC_SYMBOL, MATIC_TOKEN_IMAGE_URL, RINKEBY_CHAIN_ID, + AVALANCHE_CHAIN_ID, + AVALANCHE_SYMBOL, + AVAX_TOKEN_IMAGE_URL, } from './network'; export const QUOTES_EXPIRED_ERROR = 'quotes-expired'; @@ -47,6 +50,14 @@ export const MATIC_SWAPS_TOKEN_OBJECT = { iconUrl: MATIC_TOKEN_IMAGE_URL, }; +export const AVAX_SWAPS_TOKEN_OBJECT = { + symbol: AVALANCHE_SYMBOL, + name: 'Avalanche', + address: DEFAULT_TOKEN_ADDRESS, + decimals: 18, + iconUrl: AVAX_TOKEN_IMAGE_URL, +}; + export const TEST_ETH_SWAPS_TOKEN_OBJECT = { symbol: TEST_ETH_SYMBOL, name: 'Test Ether', @@ -75,6 +86,8 @@ const BSC_CONTRACT_ADDRESS = '0x1a1ec25dc08e98e5e93f1104b5e5cdd298707d31'; // It's the same as we use for BSC. const POLYGON_CONTRACT_ADDRESS = '0x1a1ec25dc08e98e5e93f1104b5e5cdd298707d31'; +const AVALANCHE_CONTRACT_ADDRESS = '0x1a1ec25dc08e98e5e93f1104b5e5cdd298707d31'; + export const WETH_CONTRACT_ADDRESS = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'; export const WETH_RINKEBY_CONTRACT_ADDRESS = @@ -83,12 +96,14 @@ export const WBNB_CONTRACT_ADDRESS = '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c'; export const WMATIC_CONTRACT_ADDRESS = '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270'; +export const WAVAX_CONTRACT_ADDRESS = + '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7'; const SWAPS_TESTNET_CHAIN_ID = '0x539'; export const SWAPS_API_V2_BASE_URL = 'https://api2.metaswap.codefi.network'; export const SWAPS_DEV_API_V2_BASE_URL = - 'https://api2.metaswap-dev.codefi.network'; + 'https://swap.metaswap-dev.codefi.network'; export const GAS_API_BASE_URL = 'https://gas-api.metaswap.codefi.network'; export const GAS_DEV_API_BASE_URL = 'https://gas-api.metaswap-dev.codefi.network'; @@ -97,6 +112,7 @@ const BSC_DEFAULT_BLOCK_EXPLORER_URL = 'https://bscscan.com/'; const MAINNET_DEFAULT_BLOCK_EXPLORER_URL = 'https://etherscan.io/'; const RINKEBY_DEFAULT_BLOCK_EXPLORER_URL = 'https://rinkeby.etherscan.io/'; const POLYGON_DEFAULT_BLOCK_EXPLORER_URL = 'https://polygonscan.com/'; +const AVALANCHE_DEFAULT_BLOCK_EXPLORER_URL = 'https://snowtrace.io/'; export const ALLOWED_SWAPS_CHAIN_IDS = { [MAINNET_CHAIN_ID]: true, @@ -104,6 +120,7 @@ export const ALLOWED_SWAPS_CHAIN_IDS = { [BSC_CHAIN_ID]: true, [POLYGON_CHAIN_ID]: true, [RINKEBY_CHAIN_ID]: true, + [AVALANCHE_CHAIN_ID]: true, }; export const SWAPS_CHAINID_CONTRACT_ADDRESS_MAP = { @@ -112,6 +129,7 @@ export const SWAPS_CHAINID_CONTRACT_ADDRESS_MAP = { [BSC_CHAIN_ID]: BSC_CONTRACT_ADDRESS, [POLYGON_CHAIN_ID]: POLYGON_CONTRACT_ADDRESS, [RINKEBY_CHAIN_ID]: TESTNET_CONTRACT_ADDRESS, + [AVALANCHE_CHAIN_ID]: AVALANCHE_CONTRACT_ADDRESS, }; export const SWAPS_WRAPPED_TOKENS_ADDRESSES = { @@ -120,6 +138,7 @@ export const SWAPS_WRAPPED_TOKENS_ADDRESSES = { [BSC_CHAIN_ID]: WBNB_CONTRACT_ADDRESS, [POLYGON_CHAIN_ID]: WMATIC_CONTRACT_ADDRESS, [RINKEBY_CHAIN_ID]: WETH_RINKEBY_CONTRACT_ADDRESS, + [AVALANCHE_CHAIN_ID]: WAVAX_CONTRACT_ADDRESS, }; export const ALLOWED_CONTRACT_ADDRESSES = { @@ -143,6 +162,10 @@ export const ALLOWED_CONTRACT_ADDRESSES = { SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[POLYGON_CHAIN_ID], SWAPS_WRAPPED_TOKENS_ADDRESSES[POLYGON_CHAIN_ID], ], + [AVALANCHE_CHAIN_ID]: [ + SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[AVALANCHE_CHAIN_ID], + SWAPS_WRAPPED_TOKENS_ADDRESSES[AVALANCHE_CHAIN_ID], + ], }; export const SWAPS_CHAINID_DEFAULT_TOKEN_MAP = { @@ -151,6 +174,7 @@ export const SWAPS_CHAINID_DEFAULT_TOKEN_MAP = { [BSC_CHAIN_ID]: BNB_SWAPS_TOKEN_OBJECT, [POLYGON_CHAIN_ID]: MATIC_SWAPS_TOKEN_OBJECT, [RINKEBY_CHAIN_ID]: RINKEBY_SWAPS_TOKEN_OBJECT, + [AVALANCHE_CHAIN_ID]: AVAX_SWAPS_TOKEN_OBJECT, }; export const SWAPS_CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP = { @@ -158,11 +182,13 @@ export const SWAPS_CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP = { [MAINNET_CHAIN_ID]: MAINNET_DEFAULT_BLOCK_EXPLORER_URL, [POLYGON_CHAIN_ID]: POLYGON_DEFAULT_BLOCK_EXPLORER_URL, [RINKEBY_CHAIN_ID]: RINKEBY_DEFAULT_BLOCK_EXPLORER_URL, + [AVALANCHE_CHAIN_ID]: AVALANCHE_DEFAULT_BLOCK_EXPLORER_URL, }; export const ETHEREUM = 'ethereum'; export const POLYGON = 'polygon'; export const BSC = 'bsc'; export const RINKEBY = 'rinkeby'; +export const AVALANCHE = 'avalanche'; export const SWAPS_CLIENT_ID = 'extension'; diff --git a/ui/pages/swaps/fee-card/fee-card.js b/ui/pages/swaps/fee-card/fee-card.js index fd1acd538..c7638893c 100644 --- a/ui/pages/swaps/fee-card/fee-card.js +++ b/ui/pages/swaps/fee-card/fee-card.js @@ -9,6 +9,7 @@ import { LOCALHOST_CHAIN_ID, POLYGON_CHAIN_ID, RINKEBY_CHAIN_ID, + AVALANCHE_CHAIN_ID, } from '../../../../shared/constants/network'; import TransactionDetail from '../../../components/app/transaction-detail/transaction-detail.component'; import TransactionDetailItem from '../../../components/app/transaction-detail-item/transaction-detail-item.component'; @@ -51,6 +52,8 @@ export default function FeeCard({ return t('networkNameTestnet'); case RINKEBY_CHAIN_ID: return t('networkNameRinkeby'); + case AVALANCHE_CHAIN_ID: + return t('networkNameAvalanche'); default: throw new Error('This network is not supported for token swaps'); } diff --git a/ui/pages/swaps/swaps.util.js b/ui/pages/swaps/swaps.util.js index 976cf5cc4..e35a2486a 100644 --- a/ui/pages/swaps/swaps.util.js +++ b/ui/pages/swaps/swaps.util.js @@ -9,6 +9,7 @@ import { POLYGON, BSC, RINKEBY, + AVALANCHE, SWAPS_API_V2_BASE_URL, SWAPS_DEV_API_V2_BASE_URL, GAS_API_BASE_URL, @@ -26,6 +27,7 @@ import { POLYGON_CHAIN_ID, LOCALHOST_CHAIN_ID, RINKEBY_CHAIN_ID, + AVALANCHE_CHAIN_ID, } from '../../../shared/constants/network'; import { SECOND } from '../../../shared/constants/time'; import { @@ -793,6 +795,8 @@ export const getNetworkNameByChainId = (chainId) => { return POLYGON; case RINKEBY_CHAIN_ID: return RINKEBY; + case AVALANCHE_CHAIN_ID: + return AVALANCHE; default: return ''; } diff --git a/ui/pages/swaps/swaps.util.test.js b/ui/pages/swaps/swaps.util.test.js index 041744e8c..7815ce08e 100644 --- a/ui/pages/swaps/swaps.util.test.js +++ b/ui/pages/swaps/swaps.util.test.js @@ -7,6 +7,7 @@ import { LOCALHOST_CHAIN_ID, RINKEBY_CHAIN_ID, KOVAN_CHAIN_ID, + AVALANCHE_CHAIN_ID, } from '../../../shared/constants/network'; import { SWAPS_CHAINID_CONTRACT_ADDRESS_MAP, @@ -18,6 +19,7 @@ import { POLYGON, BSC, RINKEBY, + AVALANCHE, } from '../../../shared/constants/swaps'; import { TOKENS, @@ -318,6 +320,10 @@ describe('Swaps Util', () => { expect(getNetworkNameByChainId(RINKEBY_CHAIN_ID)).toBe(RINKEBY); }); + it('returns "avalanche" for Avalanche chain ID', () => { + expect(getNetworkNameByChainId(AVALANCHE_CHAIN_ID)).toBe(AVALANCHE); + }); + it('returns an empty string for an unsupported network', () => { expect(getNetworkNameByChainId(KOVAN_CHAIN_ID)).toBe(''); }); From e6ea66ad4dd17f151a15ebbb42f3366538882138 Mon Sep 17 00:00:00 2001 From: MetaMask Bot Date: Wed, 23 Feb 2022 13:11:35 +0000 Subject: [PATCH 2/8] Version v10.10.1 --- CHANGELOG.md | 8 +++++++- package.json | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 31faba3db..00ac547af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [10.10.1] +### Uncategorized +- [GridPlus] Updates SDK to v0.9.10 (hotfix) ([#13691](https://github.com/MetaMask/metamask-extension/pull/13691)) +- Enable Avalanche for Swaps ([#13653](https://github.com/MetaMask/metamask-extension/pull/13653)) + ## [10.10.0] ### Added - Enable toggle to turn on the new gas fee customization UI ([#13481](https://github.com/MetaMask/metamask-extension/pull/13481)) @@ -2731,7 +2736,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.10.0...HEAD +[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.10.1...HEAD +[10.10.1]: https://github.com/MetaMask/metamask-extension/compare/v10.10.0...v10.10.1 [10.10.0]: https://github.com/MetaMask/metamask-extension/compare/v10.9.3...v10.10.0 [10.9.3]: https://github.com/MetaMask/metamask-extension/compare/v10.9.2...v10.9.3 [10.9.2]: https://github.com/MetaMask/metamask-extension/compare/v10.9.1...v10.9.2 diff --git a/package.json b/package.json index 1c8fd9617..8339d6d0a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "metamask-crx", - "version": "10.10.0", + "version": "10.10.1", "private": true, "repository": { "type": "git", From 6dcaa0dd9713233feb6ab664173f70700f0f9604 Mon Sep 17 00:00:00 2001 From: Alex Miller Date: Wed, 9 Feb 2022 15:07:22 -0600 Subject: [PATCH 3/8] [GridPlus] Updates corresponding to Lattice firmware v0.13.2 (#13455) This updates `eth-lattice-keyring`, which itself updates `gridplus-sdk`. These changes are backwards compatible but do unlock functionality in Lattice firmware v0.13.2 Underlying Changes: * `gridplus-sdk`: https://github.com/GridPlus/gridplus-sdk/compare/v0.9.2...v0.9.7 * `eth-lattice-keyring`: https://github.com/GridPlus/eth-lattice-keyring/compare/v0.4.0...v0.4.9 --- lavamoat/browserify/beta/policy.json | 18 ++++++----- lavamoat/browserify/flask/policy.json | 18 ++++++----- lavamoat/browserify/main/policy.json | 18 ++++++----- yarn.lock | 45 ++++++++++++++------------- 4 files changed, 57 insertions(+), 42 deletions(-) diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index 0b8705b65..ad02b495f 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -1793,6 +1793,16 @@ "safe-event-emitter": true } }, + "eth-eip712-util-browser": { + "globals": { + "intToBuffer": true + }, + "packages": { + "bn.js": true, + "buffer": true, + "js-sha3": true + } + }, "eth-ens-namehash": { "globals": { "name": "write" @@ -2047,11 +2057,6 @@ "@ethersproject/wordlists": true } }, - "ethers-eip712": { - "packages": { - "ethers": true - } - }, "ethjs": { "globals": { "clearInterval": true, @@ -2268,8 +2273,7 @@ "buffer": true, "crc-32": true, "elliptic": true, - "ethers": true, - "ethers-eip712": true, + "eth-eip712-util-browser": true, "js-sha3": true, "rlp-browser": true, "secp256k1": true, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index 0b8705b65..ad02b495f 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -1793,6 +1793,16 @@ "safe-event-emitter": true } }, + "eth-eip712-util-browser": { + "globals": { + "intToBuffer": true + }, + "packages": { + "bn.js": true, + "buffer": true, + "js-sha3": true + } + }, "eth-ens-namehash": { "globals": { "name": "write" @@ -2047,11 +2057,6 @@ "@ethersproject/wordlists": true } }, - "ethers-eip712": { - "packages": { - "ethers": true - } - }, "ethjs": { "globals": { "clearInterval": true, @@ -2268,8 +2273,7 @@ "buffer": true, "crc-32": true, "elliptic": true, - "ethers": true, - "ethers-eip712": true, + "eth-eip712-util-browser": true, "js-sha3": true, "rlp-browser": true, "secp256k1": true, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index 0b8705b65..ad02b495f 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -1793,6 +1793,16 @@ "safe-event-emitter": true } }, + "eth-eip712-util-browser": { + "globals": { + "intToBuffer": true + }, + "packages": { + "bn.js": true, + "buffer": true, + "js-sha3": true + } + }, "eth-ens-namehash": { "globals": { "name": "write" @@ -2047,11 +2057,6 @@ "@ethersproject/wordlists": true } }, - "ethers-eip712": { - "packages": { - "ethers": true - } - }, "ethjs": { "globals": { "clearInterval": true, @@ -2268,8 +2273,7 @@ "buffer": true, "crc-32": true, "elliptic": true, - "ethers": true, - "ethers-eip712": true, + "eth-eip712-util-browser": true, "js-sha3": true, "rlp-browser": true, "secp256k1": true, diff --git a/yarn.lock b/yarn.lock index 5c563d37a..01ed3a374 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6626,6 +6626,11 @@ bn.js@=2.0.4: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-2.0.4.tgz#220a7cd677f7f1bfa93627ff4193776fe7819480" integrity sha1-Igp81nf38b+pNif/QZN3b+eBlIA= +bn.js@>4.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + bn.js@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-1.3.0.tgz#0db4cbf96f8f23b742f5bcb9d1aa7a9994a05e83" @@ -6636,11 +6641,6 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4 resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== -bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - bo-selector@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/bo-selector/-/bo-selector-0.0.10.tgz#9816dcb00adf374ea87941a863b2acfc026afa3e" @@ -10789,6 +10789,15 @@ eth-block-tracker@^5.0.1: json-rpc-random-id "^1.0.1" pify "^3.0.0" +eth-eip712-util-browser@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/eth-eip712-util-browser/-/eth-eip712-util-browser-0.0.3.tgz#334143d76d0a502b456e2ee5f1ce20f678a39fd3" + integrity sha512-RUXQ6Hjl0wEjm/ObWgYKjzMfO1segqcPFGnMPtBkkwGaHGbXXh6WFAn5vZfReK9WWujs35uIW2+kgJmh3FXtww== + dependencies: + bn.js ">4.0.0" + buffer "^6.0.3" + js-sha3 "^0.8.0" + eth-ens-namehash@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-1.0.2.tgz#05ecdd6bac2d7fd7bc5ca84a993c6bad9da4edb9" @@ -10886,15 +10895,15 @@ eth-keyring-controller@^6.2.0, eth-keyring-controller@^6.2.1: obs-store "^4.0.3" eth-lattice-keyring@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/eth-lattice-keyring/-/eth-lattice-keyring-0.4.0.tgz#0afab94fe1c9b13377e1c78660a725c9bc0639a0" - integrity sha512-AB+FzgnyqapcZmdLeVMUDGZqA09yRQZxoVm/qZaT3kb5e4jhWon4BGRo/g65JuNagC8SltIQY6fpDh/q5gXNTQ== + version "0.4.9" + resolved "https://registry.yarnpkg.com/eth-lattice-keyring/-/eth-lattice-keyring-0.4.9.tgz#327a41fa25ef28dfc9fe87f2ce11e95139adfd67" + integrity sha512-ZflOgYrbuGJGPSDWgDA6PndCIlYRS2M+/bxKsJupbPgz/O8XwQdTGttszp0mHwOqPdvUULUmW08QCqd8trnuVg== dependencies: "@ethereumjs/common" "^2.4.0" "@ethereumjs/tx" "^3.1.1" bignumber.js "^9.0.1" ethereumjs-util "^7.0.10" - gridplus-sdk "^0.9.0" + gridplus-sdk "^0.9.7" eth-lib@0.2.8: version "0.2.8" @@ -11190,11 +11199,6 @@ ethereumjs-wallet@^1.0.1: utf8 "^3.0.0" uuid "^3.3.2" -ethers-eip712@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ethers-eip712/-/ethers-eip712-0.2.0.tgz#52973b3a9a22638f7357283bf66624994c6e91ed" - integrity sha512-fgS196gCIXeiLwhsWycJJuxI9nL/AoUPGSQ+yvd+8wdWR+43G+J1n69LmWVWvAON0M6qNaf2BF4/M159U8fujQ== - ethers@^4.0.20, ethers@^4.0.28: version "4.0.48" resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.48.tgz#330c65b8133e112b0613156e57e92d9009d8fbbe" @@ -11210,7 +11214,7 @@ ethers@^4.0.20, ethers@^4.0.28: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.0.8, ethers@^5.4.0, ethers@^5.4.1, ethers@^5.4.2, ethers@^5.4.5: +ethers@^5.0.8, ethers@^5.4.0, ethers@^5.4.1, ethers@^5.4.5: version "5.5.1" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.1.tgz#d3259a95a42557844aa543906c537106c0406fbf" integrity sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw== @@ -13239,10 +13243,10 @@ graphql-request@^1.8.2: dependencies: cross-fetch "2.2.2" -gridplus-sdk@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/gridplus-sdk/-/gridplus-sdk-0.9.0.tgz#6ed207e83dd0a607e472309a3d785ee2cf20c3cc" - integrity sha512-uhxYZ8xiZ5RwLdfZyRCE571I4tdQxsTRU0miaY7A/r+1UW6xS4xSYPYu3azEl0ZJ8sO5awfdDylrim6LMkHe+g== +gridplus-sdk@^0.9.7: + version "0.9.7" + resolved "https://registry.yarnpkg.com/gridplus-sdk/-/gridplus-sdk-0.9.7.tgz#fefa45c4373d02e351ea18059b49429b903d6cf5" + integrity sha512-n6dG93XYGplDctUaBMyDsBQzi9kWMB+/2XBzNr2uaHVBpXv8SFPSbYD+uPRUwbjIb8xcRsN0RzHL9QqMO+2vOQ== dependencies: aes-js "^3.1.1" bech32 "^2.0.0" @@ -13253,8 +13257,7 @@ gridplus-sdk@^0.9.0: buffer "^5.6.0" crc-32 "^1.2.0" elliptic "6.5.4" - ethers "^5.4.2" - ethers-eip712 "^0.2.0" + eth-eip712-util-browser "^0.0.3" js-sha3 "^0.8.0" rlp-browser "^1.0.1" secp256k1 "4.0.2" From 9d92b20222f85a2779dab2b9512a7571ebeac0b8 Mon Sep 17 00:00:00 2001 From: Alex Miller Date: Mon, 21 Feb 2022 19:33:48 -0600 Subject: [PATCH 4/8] [GridPlus] Updates SDK to v0.9.10 (hotfix) (#13691) See: https://github.com/GridPlus/gridplus-sdk/releases/tag/v0.9.10-hotfix --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 01ed3a374..fb1eb804a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13244,9 +13244,9 @@ graphql-request@^1.8.2: cross-fetch "2.2.2" gridplus-sdk@^0.9.7: - version "0.9.7" - resolved "https://registry.yarnpkg.com/gridplus-sdk/-/gridplus-sdk-0.9.7.tgz#fefa45c4373d02e351ea18059b49429b903d6cf5" - integrity sha512-n6dG93XYGplDctUaBMyDsBQzi9kWMB+/2XBzNr2uaHVBpXv8SFPSbYD+uPRUwbjIb8xcRsN0RzHL9QqMO+2vOQ== + version "0.9.10" + resolved "https://registry.yarnpkg.com/gridplus-sdk/-/gridplus-sdk-0.9.10.tgz#8835e8bc9a2ca7ae163520ddcc0b313350e67dd2" + integrity sha512-CNvhyaz3F8UvlHqihFJlOt+FenmFkb2dFrbBTyRth/nlzD8Tm0HjW+uyY1W0ekDp45Exz9l0VY0EmdvjphBe1w== dependencies: aes-js "^3.1.1" bech32 "^2.0.0" From a87068860ffbf9c27efe736ca26bd9d20cf1e11c Mon Sep 17 00:00:00 2001 From: ryanml Date: Wed, 23 Feb 2022 06:44:53 -0700 Subject: [PATCH 5/8] Updating changelog --- CHANGELOG.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00ac547af..1454b1667 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,9 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ## [10.10.1] -### Uncategorized -- [GridPlus] Updates SDK to v0.9.10 (hotfix) ([#13691](https://github.com/MetaMask/metamask-extension/pull/13691)) -- Enable Avalanche for Swaps ([#13653](https://github.com/MetaMask/metamask-extension/pull/13653)) +### Added +- Swaps: Enable Avalanche ([#13653](https://github.com/MetaMask/metamask-extension/pull/13653)) + +### Fixed +- Ensure Lattice hardware wallet can correctly sign all EIP-712 messages ([#13691](https://github.com/MetaMask/metamask-extension/pull/13691)) ## [10.10.0] ### Added From 676507a51839095a3fadc19f58a97e4968a416bf Mon Sep 17 00:00:00 2001 From: Dan Miller Date: Wed, 23 Feb 2022 19:56:51 -0330 Subject: [PATCH 6/8] Run yarn lavamoat:auto --- lavamoat/browserify/beta/policy.json | 1 - lavamoat/browserify/flask/policy.json | 1 - lavamoat/browserify/main/policy.json | 1 - 3 files changed, 3 deletions(-) diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index ad02b495f..e60b3f2ee 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -1889,7 +1889,6 @@ "addEventListener": true, "browser": true, "clearInterval": true, - "console.warn": true, "open": true, "setInterval": true }, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index ad02b495f..e60b3f2ee 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -1889,7 +1889,6 @@ "addEventListener": true, "browser": true, "clearInterval": true, - "console.warn": true, "open": true, "setInterval": true }, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index ad02b495f..e60b3f2ee 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -1889,7 +1889,6 @@ "addEventListener": true, "browser": true, "clearInterval": true, - "console.warn": true, "open": true, "setInterval": true }, From e937d9c8e380673bb4d8e431ebc359ff4ddc1897 Mon Sep 17 00:00:00 2001 From: Daniel <80175477+dan437@users.noreply.github.com> Date: Wed, 23 Feb 2022 22:10:28 +0100 Subject: [PATCH 7/8] Small fixes for Swaps (#13732) * Fix: Insufficient number of substitutions for key "stxSuccessDescription" * Only calculate "approvalGas" if the "approvalNeeded" param is truthy in a quote * "Swap from" has to be set to enable "Review Swap", set a default token for "Swap from" * Fix: Unable to find value of key "undefined" for locale * Use array destructuring --- app/scripts/controllers/swaps.js | 6 ++++-- .../transaction-status/transaction-status.component.js | 2 +- ui/pages/swaps/awaiting-swap/awaiting-swap.js | 8 ++++++-- ui/pages/swaps/build-quote/build-quote.js | 1 + 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/scripts/controllers/swaps.js b/app/scripts/controllers/swaps.js index e3d0198e4..a8063bdce 100644 --- a/app/scripts/controllers/swaps.js +++ b/app/scripts/controllers/swaps.js @@ -270,14 +270,16 @@ export default class SwapsController { fetchParams.fromAddress, chainId, ); + const [firstQuote] = Object.values(newQuotes); // For a user to be able to swap a token, they need to have approved the MetaSwap contract to withdraw that token. // _getERC20Allowance() returns the amount of the token they have approved for withdrawal. If that amount is greater // than 0, it means that approval has already occurred and is not needed. Otherwise, for tokens to be swapped, a new // call of the ERC-20 approve method is required. approvalRequired = + firstQuote.approvalNeeded && allowance.eq(0) && - Object.values(newQuotes)[0].aggregator !== 'wrappedNative'; + firstQuote.aggregator !== 'wrappedNative'; if (!approvalRequired) { newQuotes = mapValues(newQuotes, (quote) => ({ ...quote, @@ -285,7 +287,7 @@ export default class SwapsController { })); } else if (!isPolledRequest) { const { gasLimit: approvalGas } = await this.timedoutGasReturn( - Object.values(newQuotes)[0].approvalNeeded, + firstQuote.approvalNeeded, ); newQuotes = mapValues(newQuotes, (quote) => ({ diff --git a/ui/components/app/transaction-status/transaction-status.component.js b/ui/components/app/transaction-status/transaction-status.component.js index 584989adb..000c84a28 100644 --- a/ui/components/app/transaction-status/transaction-status.component.js +++ b/ui/components/app/transaction-status/transaction-status.component.js @@ -57,7 +57,7 @@ export default function TransactionStatus({ const statusText = statusKey === TRANSACTION_STATUSES.CONFIRMED && !statusOnly ? date - : t(statusKey); + : statusKey && t(statusKey); return ( { + onClick={async () => { makeAnotherSwapEvent(); - dispatch(navigateBackToBuildQuote(history)); + await dispatch(navigateBackToBuildQuote(history)); + dispatch(setSwapsFromToken(defaultSwapsToken)); }} > {t('makeAnotherSwap')} diff --git a/ui/pages/swaps/build-quote/build-quote.js b/ui/pages/swaps/build-quote/build-quote.js index 04fb4553a..a0ac92318 100644 --- a/ui/pages/swaps/build-quote/build-quote.js +++ b/ui/pages/swaps/build-quote/build-quote.js @@ -454,6 +454,7 @@ export default function BuildQuote({ !isFeatureFlagLoaded || !Number(fromTokenInputValue) || !selectedToToken?.address || + !fromTokenAddress || Number(maxSlippage) < 0 || Number(maxSlippage) > MAX_ALLOWED_SLIPPAGE || (toTokenIsNotDefault && occurrences < 2 && !verificationClicked); From bbe441f98a25f48aa51c97213f5fb01811459081 Mon Sep 17 00:00:00 2001 From: ryanml Date: Thu, 24 Feb 2022 13:31:11 -0700 Subject: [PATCH 8/8] Updating changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1454b1667..c8e58ddb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Ensure Lattice hardware wallet can correctly sign all EIP-712 messages ([#13691](https://github.com/MetaMask/metamask-extension/pull/13691)) +- Fix occasional errors when fetching swaps quotes ([#13732](https://github.com/MetaMask/metamask-extension/pull/13732)) ## [10.10.0] ### Added