mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-26 12:29:06 +01:00
Fix 9874 - Improve gas maximum estimation (#10043)
This commit is contained in:
parent
62b00f62db
commit
b801ccdb35
@ -39,7 +39,6 @@ import { calcGasTotal } from '../../pages/send/send.utils'
|
||||
import {
|
||||
decimalToHex,
|
||||
getValueFromWeiHex,
|
||||
hexMax,
|
||||
decGWEIToHexWEI,
|
||||
hexToDecimal,
|
||||
hexWEIToDecGWEI,
|
||||
@ -67,6 +66,8 @@ const GAS_PRICES_LOADING_STATES = {
|
||||
COMPLETED: 'COMPLETED',
|
||||
}
|
||||
|
||||
export const FALLBACK_GAS_MULTIPLIER = 1.5
|
||||
|
||||
const initialState = {
|
||||
aggregatorMetadata: null,
|
||||
approveTxId: null,
|
||||
@ -593,20 +594,16 @@ export const signAndSendTransactions = (history, metaMetricsEvent) => {
|
||||
const usedQuote = getUsedQuote(state)
|
||||
const usedTradeTxParams = usedQuote.trade
|
||||
|
||||
const estimatedGasLimit = new BigNumber(
|
||||
usedQuote?.gasEstimate || decimalToHex(usedQuote?.averageGas || 0),
|
||||
16,
|
||||
)
|
||||
const estimatedGasLimit = new BigNumber(usedQuote?.gasEstimate || `0x0`, 16)
|
||||
const estimatedGasLimitWithMultiplier = estimatedGasLimit
|
||||
.times(1.4, 10)
|
||||
.times(usedQuote?.gasMultiplier || FALLBACK_GAS_MULTIPLIER, 10)
|
||||
.round(0)
|
||||
.toString(16)
|
||||
const maxGasLimit =
|
||||
customSwapsGas ||
|
||||
hexMax(
|
||||
`0x${decimalToHex(usedQuote?.maxGas || 0)}`,
|
||||
estimatedGasLimitWithMultiplier,
|
||||
)
|
||||
(usedQuote?.gasEstimate
|
||||
? estimatedGasLimitWithMultiplier
|
||||
: usedQuote?.maxGas)
|
||||
|
||||
const usedGasPrice = getUsedSwapsGasPrice(state)
|
||||
usedTradeTxParams.gas = maxGasLimit
|
||||
|
@ -1,4 +1,3 @@
|
||||
import BigNumber from 'bignumber.js'
|
||||
import { ETH, GWEI, WEI } from '../constants/common'
|
||||
import { addHexPrefix } from '../../../../app/scripts/lib/util'
|
||||
import {
|
||||
@ -163,16 +162,6 @@ export function hexWEIToDecETH(hexWEI) {
|
||||
})
|
||||
}
|
||||
|
||||
export function hexMax(...hexNumbers) {
|
||||
let max = hexNumbers[0]
|
||||
hexNumbers.slice(1).forEach((hexNumber) => {
|
||||
if (new BigNumber(hexNumber, 16).gt(max, 16)) {
|
||||
max = hexNumber
|
||||
}
|
||||
})
|
||||
return max
|
||||
}
|
||||
|
||||
export function addHexes(aHexWEI, bHexWEI) {
|
||||
return addCurrencies(aHexWEI, bHexWEI, {
|
||||
aBase: 16,
|
||||
|
@ -112,6 +112,11 @@ const QUOTE_VALIDATORS = [
|
||||
property: 'maxGas',
|
||||
type: 'number',
|
||||
},
|
||||
{
|
||||
property: 'gasEstimate',
|
||||
type: 'number|undefined',
|
||||
validator: (gasEstimate) => gasEstimate === undefined || gasEstimate > 0,
|
||||
},
|
||||
]
|
||||
|
||||
const TOKEN_VALIDATORS = [
|
||||
|
@ -12,6 +12,7 @@ import { useSwapsEthToken } from '../../../hooks/useSwapsEthToken'
|
||||
import { MetaMetricsContext } from '../../../contexts/metametrics.new'
|
||||
import FeeCard from '../fee-card'
|
||||
import {
|
||||
FALLBACK_GAS_MULTIPLIER,
|
||||
getQuotes,
|
||||
getSelectedQuote,
|
||||
getApproveTxParams,
|
||||
@ -57,7 +58,6 @@ import {
|
||||
} from '../../../helpers/utils/token-util'
|
||||
import {
|
||||
decimalToHex,
|
||||
hexMax,
|
||||
hexToDecimal,
|
||||
getValueFromWeiHex,
|
||||
} from '../../../helpers/utils/conversions.util'
|
||||
@ -123,18 +123,16 @@ export default function ViewQuote() {
|
||||
usedQuote?.gasEstimateWithRefund ||
|
||||
`0x${decimalToHex(usedQuote?.averageGas || 0)}`
|
||||
|
||||
const gasLimitForMax =
|
||||
usedQuote?.gasEstimate || `0x${decimalToHex(usedQuote?.averageGas || 0)}`
|
||||
const gasLimitForMax = usedQuote?.gasEstimate || `0x0`
|
||||
|
||||
const usedGasLimitWithMultiplier = new BigNumber(gasLimitForMax, 16)
|
||||
.times(1.4, 10)
|
||||
.times(usedQuote?.gasMultiplier || FALLBACK_GAS_MULTIPLIER, 10)
|
||||
.round(0)
|
||||
.toString(16)
|
||||
|
||||
const nonCustomMaxGasLimit = hexMax(
|
||||
`0x${decimalToHex(usedQuote?.maxGas || 0)}`,
|
||||
usedGasLimitWithMultiplier,
|
||||
)
|
||||
const nonCustomMaxGasLimit = usedQuote?.gasEstimate
|
||||
? usedGasLimitWithMultiplier
|
||||
: `0x${decimalToHex(usedQuote?.maxGas || 0)}`
|
||||
const maxGasLimit = customMaxGas || nonCustomMaxGasLimit
|
||||
|
||||
const gasTotalInWeiHex = calcGasTotal(maxGasLimit, gasPrice)
|
||||
|
Loading…
Reference in New Issue
Block a user