1
0
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:
Mark Stacey 2020-04-30 21:44:51 -03:00 committed by GitHub
parent 157cc98c3a
commit c2b588975c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 7 deletions

View File

@ -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
}
/**

View File

@ -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 }
}
/**