mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
e0953d9f68
wip Documentation improvements for send slice support of EIP1559 Remove console.log in send duck Property lookup safety improvement in selectors/confirm-transaction Add code accidentally removed in rebase Update addTxGasDefaults and _getDefaultGasFees to work with new estimate types, and ensure we correctly handle gas price estimates when on EIP1559 networks (#11615) * Fix typo Remove console.log in send duck * Update addTxGasDefaults and _getDefaultGasFees to work correctly with all new gas fee estimate types * Don't show gas timing support when not on eip1559 compatible network * Hide gas timing component on transaction screen when on a non-1559 network * Improve comments, tests and edge case handling * Ensure eip1559 fees are applied and updated correctly when eip1559 estimate api fails * Lint fix Co-authored-by: Brad Decker <git@braddecker.dev> Remove console.log Handle possible gasEstimateType undefined Remove unnecessary nonce field position change in confirm-page-container-content__details
62 lines
2.2 KiB
JavaScript
62 lines
2.2 KiB
JavaScript
import { useSelector } from 'react-redux';
|
|
import { GAS_ESTIMATE_TYPES } from '../../shared/constants/gas';
|
|
import {
|
|
getEstimatedGasFeeTimeBounds,
|
|
getGasEstimateType,
|
|
getGasFeeEstimates,
|
|
isEIP1559Network,
|
|
} from '../ducks/metamask/metamask';
|
|
import { useSafeGasEstimatePolling } from './useSafeGasEstimatePolling';
|
|
|
|
/**
|
|
* @typedef {keyof typeof GAS_ESTIMATE_TYPES} GasEstimateTypes
|
|
*/
|
|
|
|
/**
|
|
* @typedef {object} GasEstimates
|
|
* @property {GasEstimateTypes} gasEstimateType - The type of estimate provided
|
|
* @property {import(
|
|
* '@metamask/controllers'
|
|
* ).GasFeeState['gasFeeEstimates']} gasFeeEstimates - The estimate object
|
|
* @property {import(
|
|
* '@metamask/controllers'
|
|
* ).GasFeeState['estimatedGasFeeTimeBounds']} [estimatedGasFeeTimeBounds] -
|
|
* estimated time boundaries for fee-market type estimates
|
|
* @property {boolean} isGasEstimateLoading - indicates whether the gas
|
|
* estimates are currently loading.
|
|
*/
|
|
|
|
/**
|
|
* Gets the current gasFeeEstimates from state and begins polling for new
|
|
* estimates. When this hook is removed from the tree it will signal to the
|
|
* GasFeeController that it is done requiring new gas estimates. Also checks
|
|
* the returned gas estimate for validity on the current network.
|
|
*
|
|
* @returns {GasFeeEstimates} - GasFeeEstimates object
|
|
*/
|
|
export function useGasFeeEstimates() {
|
|
const supportsEIP1559 = useSelector(isEIP1559Network);
|
|
const gasEstimateType = useSelector(getGasEstimateType);
|
|
const gasFeeEstimates = useSelector(getGasFeeEstimates);
|
|
const estimatedGasFeeTimeBounds = useSelector(getEstimatedGasFeeTimeBounds);
|
|
useSafeGasEstimatePolling();
|
|
|
|
// We consider the gas estimate to be loading if the gasEstimateType is
|
|
// 'NONE' or if the current gasEstimateType cannot be supported by the current
|
|
// network
|
|
const isEIP1559TolerableEstimateType =
|
|
gasEstimateType === GAS_ESTIMATE_TYPES.FEE_MARKET ||
|
|
gasEstimateType === GAS_ESTIMATE_TYPES.ETH_GASPRICE;
|
|
const isGasEstimatesLoading =
|
|
gasEstimateType === GAS_ESTIMATE_TYPES.NONE ||
|
|
(supportsEIP1559 && !isEIP1559TolerableEstimateType) ||
|
|
(!supportsEIP1559 && gasEstimateType === GAS_ESTIMATE_TYPES.FEE_MARKET);
|
|
|
|
return {
|
|
gasFeeEstimates,
|
|
gasEstimateType,
|
|
estimatedGasFeeTimeBounds,
|
|
isGasEstimatesLoading,
|
|
};
|
|
}
|