From baf049afb846f4d5a032841907286b306b5866ef Mon Sep 17 00:00:00 2001 From: MetaMask Bot Date: Wed, 24 Nov 2021 17:44:02 +0000 Subject: [PATCH 01/12] Version v10.6.3 --- CHANGELOG.md | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f31e9855..0dfd3ae63 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.6.3] + ## [10.6.2] ### Fixed - [#12770](https://github.com/MetaMask/metamask-extension/pull/12770): Fixed display of best quote in swaps quotes modal @@ -2603,7 +2605,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.6.2...HEAD +[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.6.3...HEAD +[10.6.3]: https://github.com/MetaMask/metamask-extension/compare/v10.6.2...v10.6.3 [10.6.2]: https://github.com/MetaMask/metamask-extension/compare/v10.6.1...v10.6.2 [10.6.1]: https://github.com/MetaMask/metamask-extension/compare/v10.6.0...v10.6.1 [10.6.0]: https://github.com/MetaMask/metamask-extension/compare/v10.5.2...v10.6.0 diff --git a/package.json b/package.json index 6638b8d18..fdc4b2408 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "metamask-crx", - "version": "10.6.2", + "version": "10.6.3", "private": true, "repository": { "type": "git", From 61e0526d58b44aece02e4803260f627585bc445a Mon Sep 17 00:00:00 2001 From: Daniel <80175477+dan437@users.noreply.github.com> Date: Tue, 23 Nov 2021 17:33:32 +0100 Subject: [PATCH 02/12] Fix "BigNumber Error: times() number type has more than 15 significant digits:" (#12802) --- app/scripts/controllers/swaps.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/scripts/controllers/swaps.js b/app/scripts/controllers/swaps.js index df29bc365..d57558fcc 100644 --- a/app/scripts/controllers/swaps.js +++ b/app/scripts/controllers/swaps.js @@ -746,7 +746,7 @@ export default class SwapsController { const conversionRateForSorting = tokenConversionRate || 1; const ethValueOfTokens = decimalAdjustedDestinationAmount.times( - conversionRateForSorting, + conversionRateForSorting.toString(10), 10, ); @@ -768,7 +768,7 @@ export default class SwapsController { quote.ethValueOfTokens = ethValueOfTokens.toString(10); quote.overallValueOfQuote = overallValueOfQuoteForSorting.toString(10); quote.metaMaskFeeInEth = metaMaskFeeInTokens - .times(conversionRateForCalculations) + .times(conversionRateForCalculations.toString(10)) .toString(10); } From 28cf6ec2ab0b32e969d4c4c6fcd0e4bc9fc67fce Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Wed, 24 Nov 2021 12:46:01 -0330 Subject: [PATCH 03/12] Bump @metmamask/logo to v3.1.1 (#12822) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index fdc4b2408..3db83b990 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,7 @@ "@metamask/eth-token-tracker": "^3.0.1", "@metamask/etherscan-link": "^2.1.0", "@metamask/jazzicon": "^2.0.0", - "@metamask/logo": "^3.1.0", + "@metamask/logo": "^3.1.1", "@metamask/obs-store": "^5.0.0", "@metamask/post-message-stream": "^4.0.0", "@metamask/providers": "^8.1.1", diff --git a/yarn.lock b/yarn.lock index 37fae01dd..13164c9b1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3999,10 +3999,10 @@ color "^0.11.3" mersenne-twister "^1.1.0" -"@metamask/logo@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@metamask/logo/-/logo-3.1.0.tgz#6b7b9b90b6d846583558de855511d34796735855" - integrity sha512-W0FBwIaG1pC4Vk/ZdUJYv7PDjnAbQJro3yhEXN7WXEdz8kyVcxFb6dj0Dpe6ytaveYiqIL6+iDDWMevzU2MpVw== +"@metamask/logo@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@metamask/logo/-/logo-3.1.1.tgz#0a40bcfc462a70aa2110efc737767ca7ba188fa3" + integrity sha512-8/ObOWyBtwbe3/r9QbXMs+aKK2EgcYp2NiF4fm1xIO/c3aBMN5wBc2zUnl1lpHU71l70/OH5cxHbyDYoEgdMoA== dependencies: gl-mat4 "1.1.4" gl-vec3 "1.0.3" From c06935b8b8b72dab158de61dc0e06658dd6c0030 Mon Sep 17 00:00:00 2001 From: Dan Miller Date: Wed, 24 Nov 2021 14:25:04 -0330 Subject: [PATCH 04/12] Update changelog for v10.6.3 --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0dfd3ae63..d7b919f75 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.6.3] +### Fixed +- [##12822](https://github.com/MetaMask/metamask-extension/pull/#12822): Fix `replaceChildren` and `function.prototype.apply` errors that could make the app unusable on older browsers due to a bug in our logo component. +- [#61e0526d5](https://github.com/MetaMask/metamask-extension/pull/61e0526d5): Fix requesting of swaps quotes for token pairs that have highly precise exchange rates. ## [10.6.2] ### Fixed From bed7c787e936c1b2516b4092b7b41667f3fc0fd3 Mon Sep 17 00:00:00 2001 From: Olusegun Akintayo Date: Thu, 11 Nov 2021 22:16:28 +0400 Subject: [PATCH 05/12] We shouldn't be changing decimal places as user type, we should do that on blur. (#12631) * We shouldn't be changing decimal places as user type, we should do that on blur. Signed-off-by: Akintayo A. Olusegun * Lint fixes. Signed-off-by: Akintayo A. Olusegun * Refactor code. Signed-off-by: Akintayo A. Olusegun * Linter fixes. Signed-off-by: Akintayo A. Olusegun --- ui/components/ui/token-input/token-input.component.js | 10 ++++++++-- ui/components/ui/unit-input/unit-input.component.js | 3 +++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ui/components/ui/token-input/token-input.component.js b/ui/components/ui/token-input/token-input.component.js index 60665ac20..763bc5824 100644 --- a/ui/components/ui/token-input/token-input.component.js +++ b/ui/components/ui/token-input/token-input.component.js @@ -75,11 +75,12 @@ export default class TokenInput extends PureComponent { return Number(decimalValueString) ? decimalValueString : ''; } - handleChange = (decimalValue) => { + handleChange = (decimalValue, applyDecimals = false) => { const { token: { decimals } = {}, onChange } = this.props; let newDecimalValue = decimalValue; - if (decimals) { + + if (decimals && applyDecimals) { newDecimalValue = parseFloat(decimalValue).toFixed(decimals); } @@ -94,6 +95,10 @@ export default class TokenInput extends PureComponent { onChange(hexValue); }; + handleBlur = (decimalValue) => { + this.handleChange(decimalValue, true); + }; + renderConversionComponent() { const { tokenExchangeRates, @@ -155,6 +160,7 @@ export default class TokenInput extends PureComponent { {...restProps} suffix={token.symbol} onChange={this.handleChange} + onBlur={this.handleBlur} value={decimalValue} > {this.renderConversionComponent()} diff --git a/ui/components/ui/unit-input/unit-input.component.js b/ui/components/ui/unit-input/unit-input.component.js index 8802519fb..10e14b12f 100644 --- a/ui/components/ui/unit-input/unit-input.component.js +++ b/ui/components/ui/unit-input/unit-input.component.js @@ -17,6 +17,7 @@ export default class UnitInput extends PureComponent { actionComponent: PropTypes.node, error: PropTypes.bool, onChange: PropTypes.func, + onBlur: PropTypes.func, placeholder: PropTypes.string, suffix: PropTypes.string, value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), @@ -55,6 +56,8 @@ export default class UnitInput extends PureComponent { if (value === '') { this.setState({ value: '0' }); } + + this.props.onBlur && this.props.onBlur(value); }; handleChange = (event) => { From 90017d28a886151ea95092fe70d0d511d9684d08 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Wed, 24 Nov 2021 12:08:23 -0600 Subject: [PATCH 06/12] Convert token input to BigNumber to handle decimals. (#12773) * Fixes #12762 Adds a decimal length check for inputs and drops excess fractional part. Another edgecase not accounted for is when a token's decimal precision is 0 and attempting sending decimals will result in omitting the fractional part. * Change spies from sinon to jest and change onChange value to string. * Adjust * Remove sinon * Add test for issue case * DRY * Simplify logic by using BigNumber Co-authored-by: Dan Miller --- .../ui/token-input/token-input.component.js | 4 +- .../token-input/token-input.component.test.js | 109 +++++++++++++++--- 2 files changed, 95 insertions(+), 18 deletions(-) diff --git a/ui/components/ui/token-input/token-input.component.js b/ui/components/ui/token-input/token-input.component.js index 763bc5824..a3bc88bf5 100644 --- a/ui/components/ui/token-input/token-input.component.js +++ b/ui/components/ui/token-input/token-input.component.js @@ -1,5 +1,6 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; +import BigNumber from 'bignumber.js'; import UnitInput from '../unit-input'; import CurrencyDisplay from '../currency-display'; import { getWeiHexFromDecimalValue } from '../../../helpers/utils/conversions.util'; @@ -7,6 +8,7 @@ import { conversionUtil, multiplyCurrencies, } from '../../../../shared/modules/conversion.utils'; + import { ETH } from '../../../helpers/constants/common'; import { addHexPrefix } from '../../../../app/scripts/lib/util'; @@ -81,7 +83,7 @@ export default class TokenInput extends PureComponent { let newDecimalValue = decimalValue; if (decimals && applyDecimals) { - newDecimalValue = parseFloat(decimalValue).toFixed(decimals); + newDecimalValue = new BigNumber(decimalValue, 10).toFixed(decimals); } const multiplier = Math.pow(10, Number(decimals || 0)); diff --git a/ui/components/ui/token-input/token-input.component.test.js b/ui/components/ui/token-input/token-input.component.test.js index febb08ba9..ac8d55fe8 100644 --- a/ui/components/ui/token-input/token-input.component.test.js +++ b/ui/components/ui/token-input/token-input.component.test.js @@ -1,7 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import { shallow, mount } from 'enzyme'; -import sinon from 'sinon'; import { Provider } from 'react-redux'; import configureMockStore from 'redux-mock-store'; import UnitInput from '../unit-input'; @@ -207,12 +206,10 @@ describe('TokenInput Component', () => { }); describe('handling actions', () => { - const handleChangeSpy = sinon.spy(); - const handleBlurSpy = sinon.spy(); + const handleChangeSpy = jest.fn(); afterEach(() => { - handleChangeSpy.resetHistory(); - handleBlurSpy.resetHistory(); + handleChangeSpy.mockClear(); }); it('should call onChange on input changes with the hex value for ETH', () => { @@ -238,8 +235,7 @@ describe('TokenInput Component', () => { ); expect(wrapper).toHaveLength(1); - expect(handleChangeSpy.callCount).toStrictEqual(0); - expect(handleBlurSpy.callCount).toStrictEqual(0); + expect(handleChangeSpy.mock.calls).toHaveLength(0); const tokenInputInstance = wrapper.find(TokenInput).at(0).instance(); expect(tokenInputInstance.state.decimalValue).toStrictEqual(0); @@ -250,13 +246,13 @@ describe('TokenInput Component', () => { const input = wrapper.find('input'); expect(input.props().value).toStrictEqual(0); - input.simulate('change', { target: { value: 1 } }); - expect(handleChangeSpy.callCount).toStrictEqual(1); - expect(handleChangeSpy.calledWith('2710')).toStrictEqual(true); + input.simulate('change', { target: { value: '1' } }); + expect(handleChangeSpy.mock.calls).toHaveLength(1); + expect(handleChangeSpy.mock.calls[0][0]).toStrictEqual('2710'); expect(wrapper.find('.currency-display-component').text()).toStrictEqual( '2ETH', ); - expect(tokenInputInstance.state.decimalValue).toStrictEqual(1); + expect(tokenInputInstance.state.decimalValue).toStrictEqual('1'); expect(tokenInputInstance.state.hexValue).toStrictEqual('2710'); }); @@ -285,8 +281,7 @@ describe('TokenInput Component', () => { ); expect(wrapper).toHaveLength(1); - expect(handleChangeSpy.callCount).toStrictEqual(0); - expect(handleBlurSpy.callCount).toStrictEqual(0); + expect(handleChangeSpy.mock.calls).toHaveLength(0); const tokenInputInstance = wrapper.find(TokenInput).at(0).instance(); expect(tokenInputInstance.state.decimalValue).toStrictEqual(0); @@ -297,13 +292,13 @@ describe('TokenInput Component', () => { const input = wrapper.find('input'); expect(input.props().value).toStrictEqual(0); - input.simulate('change', { target: { value: 1 } }); - expect(handleChangeSpy.callCount).toStrictEqual(1); - expect(handleChangeSpy.calledWith('2710')).toStrictEqual(true); + input.simulate('change', { target: { value: '1' } }); + expect(handleChangeSpy.mock.calls).toHaveLength(1); + expect(handleChangeSpy.mock.calls[0][0]).toStrictEqual('2710'); expect(wrapper.find('.currency-display-component').text()).toStrictEqual( '$462.12USD', ); - expect(tokenInputInstance.state.decimalValue).toStrictEqual(1); + expect(tokenInputInstance.state.decimalValue).toStrictEqual('1'); expect(tokenInputInstance.state.hexValue).toStrictEqual('2710'); }); @@ -345,4 +340,84 @@ describe('TokenInput Component', () => { ); }); }); + + describe('Token Input Decimals Check', () => { + const handleChangeSpy = jest.fn(); + + afterEach(() => { + handleChangeSpy.mockClear(); + }); + + it('should render incorrect hex onChange when input decimals is more than token decimals', () => { + const mockStore = { + metamask: { + currentCurrency: 'usd', + conversionRate: 231.06, + }, + }; + const store = configureMockStore()(mockStore); + const wrapper = mount( + + + , + ); + + expect(wrapper).toHaveLength(1); + expect(handleChangeSpy.mock.calls).toHaveLength(0); + + const input = wrapper.find('input'); + expect(input.props().value).toStrictEqual(0); + + input.simulate('change', { target: { value: '1.11111' } }); + expect(handleChangeSpy.mock.calls).toHaveLength(1); + + expect(handleChangeSpy.mock.calls[0][0]).toStrictEqual( + '2b67.1999999999999999999a', + ); + }); + + it('should render correct hex onChange when input decimals is more than token decimals by omitting excess fractional part on blur', () => { + const mockStore = { + metamask: { + currentCurrency: 'usd', + conversionRate: 231.06, + }, + }; + const store = configureMockStore()(mockStore); + + const wrapper = mount( + + + , + ); + expect(wrapper).toHaveLength(1); + + const input = wrapper.find('input'); + + input.simulate('blur', { target: { value: '1.11111' } }); + + expect(handleChangeSpy.mock.calls).toHaveLength(1); + expect(handleChangeSpy.mock.calls[0][0]).toStrictEqual('2b67'); + }); + }); }); From 53d12135adfe6b3569ef435dc174776c869a4780 Mon Sep 17 00:00:00 2001 From: Dan Miller Date: Wed, 24 Nov 2021 15:03:38 -0330 Subject: [PATCH 07/12] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7b919f75..5f6eaabe0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - [##12822](https://github.com/MetaMask/metamask-extension/pull/#12822): Fix `replaceChildren` and `function.prototype.apply` errors that could make the app unusable on older browsers due to a bug in our logo component. - [#61e0526d5](https://github.com/MetaMask/metamask-extension/pull/61e0526d5): Fix requesting of swaps quotes for token pairs that have highly precise exchange rates. +- [##12773](https://github.com/MetaMask/metamask-extension/pull/#12773): Prevent token input in send flow from adding arbitary trailing decimal values to input ## [10.6.2] ### Fixed From 21a7b961d7f807370579b181a73ce965b78207ff Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Wed, 24 Nov 2021 16:40:13 -0330 Subject: [PATCH 08/12] Ensure that handleChange in token-input.component handles empty values (#12835) --- ui/components/ui/token-input/token-input.component.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/components/ui/token-input/token-input.component.js b/ui/components/ui/token-input/token-input.component.js index a3bc88bf5..3b8d2eefb 100644 --- a/ui/components/ui/token-input/token-input.component.js +++ b/ui/components/ui/token-input/token-input.component.js @@ -82,7 +82,7 @@ export default class TokenInput extends PureComponent { let newDecimalValue = decimalValue; - if (decimals && applyDecimals) { + if (decimals && decimalValue && applyDecimals) { newDecimalValue = new BigNumber(decimalValue, 10).toFixed(decimals); } From fd86ae9ff35f0985bb5b3f3d2a5a08f23b6d0cbd Mon Sep 17 00:00:00 2001 From: MetaMask Bot Date: Thu, 25 Nov 2021 12:34:07 +0000 Subject: [PATCH 09/12] Version v10.6.4 --- CHANGELOG.md | 15 ++++++++++++++- package.json | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f6eaabe0..837d8a3e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [10.6.4] +### Uncategorized +- Version v10.6.3 RC ([#12830](https://github.com/MetaMask/metamask-extension/pull/12830)) +- Ensure that handleChange in token-input.component handles empty values ([#12835](https://github.com/MetaMask/metamask-extension/pull/12835)) +- Update changelog +- Convert token input to BigNumber to handle decimals. ([#12773](https://github.com/MetaMask/metamask-extension/pull/12773)) +- We shouldn't be changing decimal places as user type, we should do that on blur. ([#12631](https://github.com/MetaMask/metamask-extension/pull/12631)) +- Update changelog for v10.6.3 +- Bump @metmamask/logo to v3.1.1 ([#12822](https://github.com/MetaMask/metamask-extension/pull/12822)) +- Fix "BigNumber Error: times() number type has more than 15 significant digits:" ([#12802](https://github.com/MetaMask/metamask-extension/pull/12802)) +- Version v10.6.3 + ## [10.6.3] ### Fixed - [##12822](https://github.com/MetaMask/metamask-extension/pull/#12822): Fix `replaceChildren` and `function.prototype.apply` errors that could make the app unusable on older browsers due to a bug in our logo component. @@ -2609,7 +2621,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.6.3...HEAD +[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.6.4...HEAD +[10.6.4]: https://github.com/MetaMask/metamask-extension/compare/v10.6.3...v10.6.4 [10.6.3]: https://github.com/MetaMask/metamask-extension/compare/v10.6.2...v10.6.3 [10.6.2]: https://github.com/MetaMask/metamask-extension/compare/v10.6.1...v10.6.2 [10.6.1]: https://github.com/MetaMask/metamask-extension/compare/v10.6.0...v10.6.1 diff --git a/package.json b/package.json index 3db83b990..80af3249a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "metamask-crx", - "version": "10.6.3", + "version": "10.6.4", "private": true, "repository": { "type": "git", From e0d497031db6f91b7725caa43dbd8c5017efd5ca Mon Sep 17 00:00:00 2001 From: Mingliang Liu Date: Thu, 25 Nov 2021 02:48:01 +0800 Subject: [PATCH 10/12] update scams and network security risks link (#12752) --- ui/pages/confirmation/templates/add-ethereum-chain.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/pages/confirmation/templates/add-ethereum-chain.js b/ui/pages/confirmation/templates/add-ethereum-chain.js index a9c85c53d..a56565692 100644 --- a/ui/pages/confirmation/templates/add-ethereum-chain.js +++ b/ui/pages/confirmation/templates/add-ethereum-chain.js @@ -153,7 +153,7 @@ function getValues(pendingApproval, t, actions) { key: 'addEthereumChainConfirmationRisksLearnMoreLink', props: { href: - 'https://metamask.zendesk.com/hc/en-us/articles/360056196151', + 'https://metamask.zendesk.com/hc/en-us/articles/4404424659995', target: '__blank', }, }, From b6470bfab9c773d4737b85c41fe9c63fc28b369c Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Thu, 25 Nov 2021 05:47:33 -0600 Subject: [PATCH 11/12] Ignore sentry server errors in e2e tests (#12843) * Ignore sentry server errors in e2e tests * Update test/e2e/webdriver/driver.js Co-authored-by: Mark Stacey Co-authored-by: Dan J Miller Co-authored-by: Mark Stacey --- test/e2e/webdriver/driver.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/e2e/webdriver/driver.js b/test/e2e/webdriver/driver.js index 501feeaef..0b6cfef4d 100644 --- a/test/e2e/webdriver/driver.js +++ b/test/e2e/webdriver/driver.js @@ -351,6 +351,8 @@ class Driver { const ignoredErrorMessages = [ // Third-party Favicon 404s show up as errors 'favicon.ico - Failed to load resource: the server responded with a status of 404 (Not Found)', + // Sentry rate limiting + 'Failed to load resource: the server responded with a status of 429', ]; const browserLogs = await this.driver.manage().logs().get('browser'); const errorEntries = browserLogs.filter( From 3210340a9728cb29fb47c680ae3ccc65a6fc559d Mon Sep 17 00:00:00 2001 From: Dan Miller Date: Thu, 25 Nov 2021 09:42:08 -0330 Subject: [PATCH 12/12] Update changelog for v10.6.4 --- CHANGELOG.md | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 837d8a3e0..95c6dbee3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,16 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ## [10.6.4] -### Uncategorized -- Version v10.6.3 RC ([#12830](https://github.com/MetaMask/metamask-extension/pull/12830)) -- Ensure that handleChange in token-input.component handles empty values ([#12835](https://github.com/MetaMask/metamask-extension/pull/12835)) -- Update changelog -- Convert token input to BigNumber to handle decimals. ([#12773](https://github.com/MetaMask/metamask-extension/pull/12773)) -- We shouldn't be changing decimal places as user type, we should do that on blur. ([#12631](https://github.com/MetaMask/metamask-extension/pull/12631)) -- Update changelog for v10.6.3 -- Bump @metmamask/logo to v3.1.1 ([#12822](https://github.com/MetaMask/metamask-extension/pull/12822)) -- Fix "BigNumber Error: times() number type has more than 15 significant digits:" ([#12802](https://github.com/MetaMask/metamask-extension/pull/12802)) -- Version v10.6.3 +### Changed +- [#12752](https://github.com/MetaMask/metamask-extension/pull/12752): Update link, in the add network flow, to the article with information about network security risks ## [10.6.3] ### Fixed