mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Refactor analyzeGasUsage
to return results (#8487)
`analyzeGasUsage` now returns the results of the analysis rather than setting them directly on `txMeta`. The caller is now responsible for mutating `txMeta` instead. Functionally this should be identical to before.
This commit is contained in:
parent
157cc98c3a
commit
c2b588975c
@ -300,7 +300,14 @@ export default class TransactionController extends EventEmitter {
|
||||
txMeta.gasLimitSpecified = Boolean(txParams.gas)
|
||||
return txMeta
|
||||
}
|
||||
return await this.txGasUtil.analyzeGasUsage(txMeta)
|
||||
|
||||
const { blockGasLimit, estimatedGasHex, simulationFails } = await this.txGasUtil.analyzeGasUsage(txMeta)
|
||||
if (simulationFails) {
|
||||
txMeta.simulationFails = simulationFails
|
||||
} else {
|
||||
this.txGasUtil.setTxGas(txMeta, blockGasLimit, estimatedGasHex)
|
||||
}
|
||||
return txMeta
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3,6 +3,15 @@ import { hexToBn, BnMultiplyByFraction, bnToHex } from '../../lib/util'
|
||||
import log from 'loglevel'
|
||||
import { addHexPrefix } from 'ethereumjs-util'
|
||||
|
||||
/**
|
||||
* Result of gas analysis, including either a gas estimate for a successful analysis, or
|
||||
* debug information for a failed analysis.
|
||||
* @typedef {Object} GasAnalysisResult
|
||||
* @property {string} blockGasLimit - The gas limit of the block used for the analysis
|
||||
* @property {string} estimatedGasHex - The estimated gas, in hexidecimal
|
||||
* @property {Object} simulationFails - Debug information about why an analysis failed
|
||||
*/
|
||||
|
||||
/**
|
||||
tx-gas-utils are gas utility methods for Transaction manager
|
||||
its passed ethquery
|
||||
@ -18,25 +27,24 @@ export default class TxGasUtil {
|
||||
|
||||
/**
|
||||
@param {Object} txMeta - the txMeta object
|
||||
@returns {Object} - the txMeta object with the gas written to the txParams
|
||||
@returns {GasAnalysisResult} The result of the gas analysis
|
||||
*/
|
||||
async analyzeGasUsage (txMeta) {
|
||||
const block = await this.query.getBlockByNumber('latest', false)
|
||||
let estimatedGasHex
|
||||
let simulationFails
|
||||
try {
|
||||
estimatedGasHex = await this.estimateTxGas(txMeta, block.gasLimit)
|
||||
} catch (err) {
|
||||
log.warn(err)
|
||||
txMeta.simulationFails = {
|
||||
simulationFails = {
|
||||
reason: err.message,
|
||||
errorKey: err.errorKey,
|
||||
debug: { blockNumber: block.number, blockGasLimit: block.gasLimit },
|
||||
}
|
||||
|
||||
return txMeta
|
||||
}
|
||||
this.setTxGas(txMeta, block.gasLimit, estimatedGasHex)
|
||||
return txMeta
|
||||
|
||||
return { blockGasLimit: block.gasLimit, estimatedGasHex, simulationFails }
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user