mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-22 18:00:18 +01:00
Hook up shared TokenRatesController (#12066)
This commit is contained in:
parent
cf569161fb
commit
9d968bae1e
@ -580,8 +580,7 @@ export default class SwapsController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async _findTopQuoteAndCalculateSavings(quotes = {}) {
|
async _findTopQuoteAndCalculateSavings(quotes = {}) {
|
||||||
const tokenConversionRates = this.tokenRatesStore.getState()
|
const tokenConversionRates = this.tokenRatesStore.contractExchangeRates;
|
||||||
.contractExchangeRates;
|
|
||||||
const {
|
const {
|
||||||
swapsState: { customGasPrice, customMaxPriorityFeePerGas },
|
swapsState: { customGasPrice, customMaxPriorityFeePerGas },
|
||||||
} = this.store.getState();
|
} = this.store.getState();
|
||||||
|
@ -4,7 +4,6 @@ import sinon from 'sinon';
|
|||||||
import { ethers } from 'ethers';
|
import { ethers } from 'ethers';
|
||||||
import { mapValues } from 'lodash';
|
import { mapValues } from 'lodash';
|
||||||
import BigNumber from 'bignumber.js';
|
import BigNumber from 'bignumber.js';
|
||||||
import { ObservableStore } from '@metamask/obs-store';
|
|
||||||
import {
|
import {
|
||||||
ROPSTEN_NETWORK_ID,
|
ROPSTEN_NETWORK_ID,
|
||||||
MAINNET_NETWORK_ID,
|
MAINNET_NETWORK_ID,
|
||||||
@ -83,12 +82,12 @@ const MOCK_FETCH_METADATA = {
|
|||||||
chainId: MAINNET_CHAIN_ID,
|
chainId: MAINNET_CHAIN_ID,
|
||||||
};
|
};
|
||||||
|
|
||||||
const MOCK_TOKEN_RATES_STORE = new ObservableStore({
|
const MOCK_TOKEN_RATES_STORE = {
|
||||||
contractExchangeRates: {
|
contractExchangeRates: {
|
||||||
'0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': 2,
|
'0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': 2,
|
||||||
'0x1111111111111111111111111111111111111111': 0.1,
|
'0x1111111111111111111111111111111111111111': 0.1,
|
||||||
},
|
},
|
||||||
});
|
};
|
||||||
|
|
||||||
const MOCK_GET_PROVIDER_CONFIG = () => ({ type: 'FAKE_NETWORK' });
|
const MOCK_GET_PROVIDER_CONFIG = () => ({ type: 'FAKE_NETWORK' });
|
||||||
|
|
||||||
@ -816,9 +815,9 @@ describe('SwapsController', function () {
|
|||||||
.stub(swapsController, '_getERC20Allowance')
|
.stub(swapsController, '_getERC20Allowance')
|
||||||
.resolves(ethers.BigNumber.from(1));
|
.resolves(ethers.BigNumber.from(1));
|
||||||
|
|
||||||
swapsController.tokenRatesStore.updateState({
|
swapsController.tokenRatesStore = {
|
||||||
contractExchangeRates: {},
|
contractExchangeRates: {},
|
||||||
});
|
};
|
||||||
const [newQuotes, topAggId] = await swapsController.fetchAndSetQuotes(
|
const [newQuotes, topAggId] = await swapsController.fetchAndSetQuotes(
|
||||||
MOCK_FETCH_PARAMS,
|
MOCK_FETCH_PARAMS,
|
||||||
MOCK_FETCH_METADATA,
|
MOCK_FETCH_METADATA,
|
||||||
|
@ -26,6 +26,7 @@ import {
|
|||||||
GasFeeController,
|
GasFeeController,
|
||||||
TokenListController,
|
TokenListController,
|
||||||
TokensController,
|
TokensController,
|
||||||
|
TokenRatesController,
|
||||||
} from '@metamask/controllers';
|
} from '@metamask/controllers';
|
||||||
import { TRANSACTION_STATUSES } from '../../shared/constants/transaction';
|
import { TRANSACTION_STATUSES } from '../../shared/constants/transaction';
|
||||||
import {
|
import {
|
||||||
@ -66,7 +67,6 @@ import TransactionController from './controllers/transactions';
|
|||||||
import DetectTokensController from './controllers/detect-tokens';
|
import DetectTokensController from './controllers/detect-tokens';
|
||||||
import SwapsController from './controllers/swaps';
|
import SwapsController from './controllers/swaps';
|
||||||
import { PermissionsController } from './controllers/permissions';
|
import { PermissionsController } from './controllers/permissions';
|
||||||
import TokenRatesController from './controllers/token-rates';
|
|
||||||
import { NOTIFICATION_NAMES } from './controllers/permissions/enums';
|
import { NOTIFICATION_NAMES } from './controllers/permissions/enums';
|
||||||
import getRestrictedMethods from './controllers/permissions/restrictedMethods';
|
import getRestrictedMethods from './controllers/permissions/restrictedMethods';
|
||||||
import nodeify from './lib/nodeify';
|
import nodeify from './lib/nodeify';
|
||||||
@ -282,12 +282,26 @@ export default class MetamaskController extends EventEmitter {
|
|||||||
initState.NotificationController,
|
initState.NotificationController,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// token exchange rate tracker
|
||||||
this.tokenRatesController = new TokenRatesController({
|
this.tokenRatesController = new TokenRatesController({
|
||||||
tokensController: this.tokensController,
|
onTokensStateChange: (listener) =>
|
||||||
getNativeCurrency: () => {
|
this.tokensController.subscribe(listener),
|
||||||
const { ticker } = this.networkController.getProviderConfig();
|
onCurrencyRateStateChange: (listener) =>
|
||||||
return ticker ?? 'ETH';
|
this.controllerMessenger.subscribe(
|
||||||
|
`${this.currencyRateController.name}:stateChange`,
|
||||||
|
listener,
|
||||||
|
),
|
||||||
|
onNetworkStateChange: (cb) =>
|
||||||
|
this.networkController.store.subscribe((networkState) => {
|
||||||
|
const modifiedNetworkState = {
|
||||||
|
...networkState,
|
||||||
|
provider: {
|
||||||
|
...networkState.provider,
|
||||||
|
chainId: hexToDecimal(networkState.provider.chainId),
|
||||||
},
|
},
|
||||||
|
};
|
||||||
|
return cb(modifiedNetworkState);
|
||||||
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
this.ensController = new EnsController({
|
this.ensController = new EnsController({
|
||||||
@ -328,13 +342,11 @@ export default class MetamaskController extends EventEmitter {
|
|||||||
if (activeControllerConnections > 0) {
|
if (activeControllerConnections > 0) {
|
||||||
this.accountTracker.start();
|
this.accountTracker.start();
|
||||||
this.incomingTransactionsController.start();
|
this.incomingTransactionsController.start();
|
||||||
this.tokenRatesController.start();
|
|
||||||
this.currencyRateController.start();
|
this.currencyRateController.start();
|
||||||
this.tokenListController.start();
|
this.tokenListController.start();
|
||||||
} else {
|
} else {
|
||||||
this.accountTracker.stop();
|
this.accountTracker.stop();
|
||||||
this.incomingTransactionsController.stop();
|
this.incomingTransactionsController.stop();
|
||||||
this.tokenRatesController.stop();
|
|
||||||
this.currencyRateController.stop();
|
this.currencyRateController.stop();
|
||||||
this.tokenListController.stop();
|
this.tokenListController.stop();
|
||||||
}
|
}
|
||||||
@ -525,7 +537,7 @@ export default class MetamaskController extends EventEmitter {
|
|||||||
getProviderConfig: this.networkController.getProviderConfig.bind(
|
getProviderConfig: this.networkController.getProviderConfig.bind(
|
||||||
this.networkController,
|
this.networkController,
|
||||||
),
|
),
|
||||||
tokenRatesStore: this.tokenRatesController.store,
|
tokenRatesStore: this.tokenRatesController.state,
|
||||||
getCurrentChainId: this.networkController.getCurrentChainId.bind(
|
getCurrentChainId: this.networkController.getCurrentChainId.bind(
|
||||||
this.networkController,
|
this.networkController,
|
||||||
),
|
),
|
||||||
@ -581,7 +593,7 @@ export default class MetamaskController extends EventEmitter {
|
|||||||
AccountTracker: this.accountTracker.store,
|
AccountTracker: this.accountTracker.store,
|
||||||
TxController: this.txController.memStore,
|
TxController: this.txController.memStore,
|
||||||
CachedBalancesController: this.cachedBalancesController.store,
|
CachedBalancesController: this.cachedBalancesController.store,
|
||||||
TokenRatesController: this.tokenRatesController.store,
|
TokenRatesController: this.tokenRatesController,
|
||||||
MessageManager: this.messageManager.memStore,
|
MessageManager: this.messageManager.memStore,
|
||||||
PersonalMessageManager: this.personalMessageManager.memStore,
|
PersonalMessageManager: this.personalMessageManager.memStore,
|
||||||
DecryptMessageManager: this.decryptMessageManager.memStore,
|
DecryptMessageManager: this.decryptMessageManager.memStore,
|
||||||
|
@ -22,6 +22,7 @@ import {
|
|||||||
getMaximumGasTotalInHexWei,
|
getMaximumGasTotalInHexWei,
|
||||||
getMinimumGasTotalInHexWei,
|
getMinimumGasTotalInHexWei,
|
||||||
} from '../../shared/modules/gas.utils';
|
} from '../../shared/modules/gas.utils';
|
||||||
|
import { isEqualCaseInsensitive } from '../helpers/utils/util';
|
||||||
import { getAveragePriceEstimateInHexWEI } from './custom-gas';
|
import { getAveragePriceEstimateInHexWEI } from './custom-gas';
|
||||||
import { getCurrentChainId, deprecatedGetCurrentNetworkId } from './selectors';
|
import { getCurrentChainId, deprecatedGetCurrentNetworkId } from './selectors';
|
||||||
import { checkNetworkAndAccountSupports1559 } from '.';
|
import { checkNetworkAndAccountSupports1559 } from '.';
|
||||||
@ -222,7 +223,12 @@ export const sendTokenTokenAmountAndToAddressSelector = createSelector(
|
|||||||
export const contractExchangeRateSelector = createSelector(
|
export const contractExchangeRateSelector = createSelector(
|
||||||
contractExchangeRatesSelector,
|
contractExchangeRatesSelector,
|
||||||
tokenAddressSelector,
|
tokenAddressSelector,
|
||||||
(contractExchangeRates, tokenAddress) => contractExchangeRates[tokenAddress],
|
(contractExchangeRates, tokenAddress) =>
|
||||||
|
contractExchangeRates[
|
||||||
|
Object.keys(contractExchangeRates).find((address) =>
|
||||||
|
isEqualCaseInsensitive(address, tokenAddress),
|
||||||
|
)
|
||||||
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
export const transactionFeeSelector = function (state, txData) {
|
export const transactionFeeSelector = function (state, txData) {
|
||||||
|
Loading…
Reference in New Issue
Block a user