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

Fix gas calculation and nonce / forceGasMin state setting errors; retry button shows on correct tx.

This commit is contained in:
Dan 2018-03-13 02:31:35 -02:30
parent c1ff927fa0
commit f805a2eb73
3 changed files with 39 additions and 25 deletions

View File

@ -117,9 +117,9 @@ CustomizeGasModal.prototype.save = function (gasPrice, gasLimit, gasTotal) {
updateSendAmount(maxAmount)
}
updateGasPrice(gasPrice)
updateGasLimit(gasLimit)
updateGasTotal(gasTotal)
updateGasPrice(ethUtil.addHexPrefix(gasPrice))
updateGasLimit(ethUtil.addHexPrefix(gasLimit))
updateGasTotal(ethUtil.addHexPrefix(gasTotal))
hideModal()
}

View File

@ -8,7 +8,11 @@ const Identicon = require('../identicon')
const ethUtil = require('ethereumjs-util')
const BN = ethUtil.BN
const hexToBn = require('../../../../app/scripts/lib/hex-to-bn')
const { conversionUtil, addCurrencies } = require('../../conversion-util')
const {
conversionUtil,
addCurrencies,
multiplyCurrencies
} = require('../../conversion-util')
const GasFeeDisplay = require('../send/gas-fee-display-v2')
const { MIN_GAS_PRICE_HEX } = require('../send/send-constants')
@ -37,7 +41,7 @@ function mapDispatchToProps (dispatch) {
return {
clearSend: () => dispatch(actions.clearSend()),
editTransaction: txMeta => {
const { id, txParams, lastGasPrice } = txMeta
const { id, txParams } = txMeta
const {
gas: gasLimit,
gasPrice,
@ -45,21 +49,6 @@ function mapDispatchToProps (dispatch) {
value: amount,
} = txParams
let forceGasMin
let nonce
if (lastGasPrice) {
const stripped = ethUtil.stripHexPrefix(lastGasPrice)
forceGasMin = ethUtil.addHexPrefix(addCurrencies(stripped, MIN_GAS_PRICE_HEX, {
aBase: 16,
bBase: 16,
toNumericBase: 'hex',
fromDenomination: 'WEI',
toDenomination: 'GWEI',
}))
nonce = txParams.nonce
}
dispatch(actions.updateSend({
gasLimit,
gasPrice,
@ -68,21 +57,36 @@ function mapDispatchToProps (dispatch) {
amount,
errors: { to: null, amount: null },
editingTransactionId: id,
forceGasMin,
nonce,
}))
dispatch(actions.showSendPage())
},
cancelTransaction: ({ id }) => dispatch(actions.cancelTx({ id })),
showCustomizeGasModal: (txMeta, sendGasLimit, sendGasPrice, sendGasTotal) => {
const { id, txParams } = txMeta
const { id, txParams, lastGasPrice } = txMeta
const { gas: txGasLimit, gasPrice: txGasPrice } = txParams
let forceGasMin
let nonce
if (lastGasPrice) {
const stripped = ethUtil.stripHexPrefix(lastGasPrice)
forceGasMin = ethUtil.addHexPrefix(multiplyCurrencies(stripped, 1.1, {
multiplicandBase: 16,
multiplierBase: 10,
toNumericBase: 'hex',
fromDenomination: 'WEI',
toDenomination: 'GWEI',
}))
nonce = txParams.nonce
}
dispatch(actions.updateSend({
gasLimit: sendGasLimit || txGasLimit,
gasPrice: sendGasPrice || txGasPrice,
editingTransactionId: id,
gasTotal: sendGasTotal,
forceGasMin,
nonce,
}))
dispatch(actions.showModal({ name: 'CUSTOMIZE_GAS' }))
},
@ -493,6 +497,14 @@ ConfirmSendEther.prototype.gatherTxMeta = function () {
const state = this.state
const txData = clone(state.txData) || clone(props.txData)
if (txData.lastGasPrice) {
const { gasPrice: sendGasPrice, gas: sendGasLimit } = props.send
const { gasPrice: txGasPrice, gas: txGasLimit } = txData.txParams
txData.txParams.gasPrice = sendGasPrice || txGasPrice
txData.txParams.gas = sendGasLimit || txGasLimit
}
// log.debug(`UI has defaulted to tx meta ${JSON.stringify(txData)}`)
return txData
}

View File

@ -185,9 +185,11 @@ TxListItem.prototype.showRetryButton = function () {
} = this.props
const currentNonce = txParams.nonce
const currentNonceTxs = selectedAddressTxList.filter(tx => tx.txParams.nonce === currentNonce)
const isLastWithNonce = currentNonceTxs[currentNonceTxs.length - 1].id === transactionId
const currentStatusNonceTx = currentNonceTxs.filter(tx =>
tx.status !== 'rejected' && tx.status !== 'failed')
const isLastPassingWithNonce = currentStatusNonceTx[currentStatusNonceTx.length - 1].id === transactionId
return transactionStatus === 'submitted' && isLastWithNonce && Date.now() - transactionTime > 5000
return transactionStatus === 'submitted' && isLastPassingWithNonce && Date.now() - transactionTime > 30000
}
TxListItem.prototype.resubmit = function () {