1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Promisify gas estimation (#8387)

The `estimateGasMethod` function passed to `estimateGas` is now an
async function. It is now invoked using `async/await` rather than a
Promise constructor.

This was done as part of a broader effort to use Promises rather than
callbacks when interacting with the background.
This commit is contained in:
Mark Stacey 2020-04-23 15:01:38 -03:00 committed by GitHub
parent 0d6dc380b4
commit 4d76f5b7ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 25 deletions

View File

@ -256,24 +256,22 @@ async function estimateGas ({
}))
// run tx
return new Promise((resolve, reject) => {
return estimateGasMethod(paramsForGasEstimate, (err, estimatedGas) => {
if (err) {
const simulationFailed = (
err.message.includes('Transaction execution error.') ||
err.message.includes('gas required exceeds allowance or always failing transaction')
)
if (simulationFailed) {
const estimateWithBuffer = addGasBuffer(paramsForGasEstimate.gas, blockGasLimit, 1.5)
return resolve(ethUtil.addHexPrefix(estimateWithBuffer))
} else {
return reject(err)
}
}
const estimateWithBuffer = addGasBuffer(estimatedGas.toString(16), blockGasLimit, 1.5)
return resolve(ethUtil.addHexPrefix(estimateWithBuffer))
})
})
try {
const estimatedGas = await estimateGasMethod(paramsForGasEstimate)
const estimateWithBuffer = addGasBuffer(estimatedGas.toString(16), blockGasLimit, 1.5)
return ethUtil.addHexPrefix(estimateWithBuffer)
} catch (error) {
const simulationFailed = (
error.message.includes('Transaction execution error.') ||
error.message.includes('gas required exceeds allowance or always failing transaction')
)
if (simulationFailed) {
const estimateWithBuffer = addGasBuffer(paramsForGasEstimate.gas, blockGasLimit, 1.5)
return ethUtil.addHexPrefix(estimateWithBuffer)
} else {
throw error
}
}
}
function addGasBuffer (initialGasLimitHex, blockGasLimitHex, bufferMultiplier = 1.5) {

View File

@ -301,12 +301,11 @@ describe('send utils', function () {
selectedAddress: 'mockAddress',
to: '0xisContract',
estimateGasMethod: sinon.stub().callsFake(
({ to }, cb) => {
const err = typeof to === 'string' && to.match(/willFailBecauseOf:/)
? new Error(to.match(/:(.+)$/)[1])
: null
const result = { toString: (n) => `0xabc${n}` }
return cb(err, result)
({ to }) => {
if (typeof to === 'string' && to.match(/willFailBecauseOf:/)) {
throw new Error(to.match(/:(.+)$/)[1])
}
return { toString: (n) => `0xabc${n}` }
}
),
}

View File

@ -653,7 +653,7 @@ export function updateGasData ({
return (dispatch) => {
dispatch(gasLoadingStarted())
return estimateGas({
estimateGasMethod: background.estimateGas,
estimateGasMethod: promisifiedBackground.estimateGas,
blockGasLimit,
selectedAddress,
selectedToken,