From 7cf4a16a63e20729f2548d6cfaa7d7224a3b456f Mon Sep 17 00:00:00 2001 From: Niranjana Binoy <43930900+NiranjanaBinoy@users.noreply.github.com> Date: Thu, 11 Nov 2021 14:18:50 -0500 Subject: [PATCH] EIP-1559 V2 : Adding advancedGasFee property to Preference Controller (#12577) --- app/scripts/controllers/preferences.js | 11 ++++++++++ app/scripts/controllers/preferences.test.js | 24 +++++++++++++++++++++ app/scripts/metamask-controller.js | 4 ++++ test/data/mock-state.json | 4 ++++ ui/selectors/selectors.js | 20 +++++++++++++++++ ui/selectors/selectors.test.js | 13 +++++++++++ ui/store/actions.js | 13 +++++++++++ 7 files changed, 89 insertions(+) diff --git a/app/scripts/controllers/preferences.js b/app/scripts/controllers/preferences.js index d67d4efe5..a53cf8993 100644 --- a/app/scripts/controllers/preferences.js +++ b/app/scripts/controllers/preferences.js @@ -37,6 +37,7 @@ export default class PreferencesController { // set to true means the dynamic list from the API is being used // set to false will be using the static list from contract-metadata useTokenDetection: false, + advancedGasFee: null, // WARNING: Do not use feature flags for security-sensitive things. // Feature flag toggling is available in the global namespace @@ -129,6 +130,16 @@ export default class PreferencesController { this.store.updateState({ useTokenDetection: val }); } + /** + * Setter for the `advancedGasFee` property + * + * @param {object} val - holds the maxBaseFee and PriorityFee that the user set as default advanced settings. + * + */ + setAdvancedGasFee(val) { + this.store.updateState({ advancedGasFee: val }); + } + /** * Add new methodData to state, to avoid requesting this information again through Infura * diff --git a/app/scripts/controllers/preferences.test.js b/app/scripts/controllers/preferences.test.js index 51277bce2..bce64e1a9 100644 --- a/app/scripts/controllers/preferences.test.js +++ b/app/scripts/controllers/preferences.test.js @@ -266,4 +266,28 @@ describe('preferences controller', function () { ); }); }); + + describe('setAdvancedGasFee', function () { + it('should default to null', function () { + const state = preferencesController.store.getState(); + assert.equal(state.advancedGasFee, null); + }); + + it('should set the setAdvancedGasFee property in state', function () { + const state = preferencesController.store.getState(); + assert.equal(state.advancedGasFee, null); + preferencesController.setAdvancedGasFee({ + maxBaseFee: '1.5', + priorityFee: '2', + }); + assert.equal( + preferencesController.store.getState().advancedGasFee.maxBaseFee, + '1.5', + ); + assert.equal( + preferencesController.store.getState().advancedGasFee.priorityFee, + '2', + ); + }); + }); }); diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 8d776bf8a..fe37aaea1 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -924,6 +924,10 @@ export default class MetamaskController extends EventEmitter { this.preferencesController.setDismissSeedBackUpReminder, this.preferencesController, ), + setAdvancedGasFee: nodeify( + preferencesController.setAdvancedGasFee, + preferencesController, + ), // AddressController setAddressBook: nodeify( diff --git a/test/data/mock-state.json b/test/data/mock-state.json index e8c979fd1..9adeaea9b 100644 --- a/test/data/mock-state.json +++ b/test/data/mock-state.json @@ -160,6 +160,10 @@ "toNickname": "" }, "useTokenDetection": true, + "advancedGasFee": { + "maxBaseFee": "1.5", + "priorityFee": "2" + }, "tokenList": { "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599": { "address": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", diff --git a/ui/selectors/selectors.js b/ui/selectors/selectors.js index 12a01b3c2..cc8283262 100644 --- a/ui/selectors/selectors.js +++ b/ui/selectors/selectors.js @@ -718,3 +718,23 @@ export function getNetworkSupportsSettingGasPrice(state) { export function getIsMultiLayerFeeNetwork(state) { return getIsOptimism(state); } +/** + * To retrieve the maxBaseFee and priotitFee teh user has set as default + * @param {*} state + * @returns Boolean + */ +export function getAdvancedGasFeeValues(state) { + return state.metamask.advancedGasFee; +} + +/** + * To check if the user has set advanced gas fee settings as default with a non empty maxBaseFee and priotityFee. + * @param {*} state + * @returns Boolean + */ +export function getIsAdvancedGasFeeDefault(state) { + const { advancedGasFee } = state.metamask; + return ( + Boolean(advancedGasFee?.maxBaseFee) && Boolean(advancedGasFee?.priorityFee) + ); +} diff --git a/ui/selectors/selectors.test.js b/ui/selectors/selectors.test.js index 798ef8680..9b587dc91 100644 --- a/ui/selectors/selectors.test.js +++ b/ui/selectors/selectors.test.js @@ -245,4 +245,17 @@ describe('Selectors', () => { }, }); }); + it('#getAdvancedGasFeeValues', () => { + const advancedGasFee = selectors.getAdvancedGasFeeValues(mockState); + expect(advancedGasFee).toStrictEqual({ + maxBaseFee: '1.5', + priorityFee: '2', + }); + }); + it('#getIsAdvancedGasFeeDefault', () => { + const isAdvancedGasFeeDefault = selectors.getIsAdvancedGasFeeDefault( + mockState, + ); + expect(isAdvancedGasFeeDefault).toStrictEqual(true); + }); }); diff --git a/ui/store/actions.js b/ui/store/actions.js index c12b0072f..d78703278 100644 --- a/ui/store/actions.js +++ b/ui/store/actions.js @@ -2090,6 +2090,19 @@ export function setUseTokenDetection(val) { }; } +export function setAdvancedGasFee(val) { + return (dispatch) => { + dispatch(showLoadingIndication()); + log.debug(`background.setAdvancedGasFee`); + background.setAdvancedGasFee(val, (err) => { + dispatch(hideLoadingIndication()); + if (err) { + dispatch(displayWarning(err.message)); + } + }); + }; +} + export function setIpfsGateway(val) { return (dispatch) => { dispatch(showLoadingIndication());