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

Readjust gas fees when switching networks on the send screen

This commit is contained in:
Alexander Tseung 2018-01-16 16:08:42 -08:00 committed by Chi Kei Chan
parent 668aab11d1
commit ccb80594be
2 changed files with 44 additions and 22 deletions

View File

@ -51,6 +51,7 @@ function mapStateToProps (state) {
amountConversionRate: selectedToken ? tokenToFiatRate : conversionRate, amountConversionRate: selectedToken ? tokenToFiatRate : conversionRate,
tokenContract: getSelectedTokenContract(state), tokenContract: getSelectedTokenContract(state),
unapprovedTxs: state.metamask.unapprovedTxs, unapprovedTxs: state.metamask.unapprovedTxs,
network: state.metamask.network,
} }
} }

View File

@ -85,6 +85,20 @@ SendTransactionScreen.prototype.componentWillMount = function () {
const { const {
updateTokenExchangeRate, updateTokenExchangeRate,
selectedToken = {}, selectedToken = {},
} = this.props
const { symbol } = selectedToken || {}
if (symbol) {
updateTokenExchangeRate(symbol)
}
this.updateGas()
}
SendTransactionScreen.prototype.updateGas = function () {
const {
selectedToken = {},
getGasPrice, getGasPrice,
estimateGas, estimateGas,
selectedAddress, selectedAddress,
@ -96,17 +110,16 @@ SendTransactionScreen.prototype.componentWillMount = function () {
gasPrice, gasPrice,
gasLimit, gasLimit,
} = this.props } = this.props
const { symbol } = selectedToken || {} const { symbol } = selectedToken || {}
if (symbol) { const tokenBalancePromise = tokenContract
updateTokenExchangeRate(symbol) ? tokenContract.balanceOf(from.address)
} : Promise.resolve()
const estimateGasParams = getParamsForGasEstimate(selectedAddress, symbol, data)
const tokenBalancePromise = tokenContract && tokenContract.balanceOf(from.address)
let newGasTotal
if (!editingTransactionId) { if (!editingTransactionId) {
const estimateGasParams = getParamsForGasEstimate(selectedAddress, symbol, data)
Promise Promise
.all([ .all([
getGasPrice(), getGasPrice(),
@ -114,27 +127,26 @@ SendTransactionScreen.prototype.componentWillMount = function () {
tokenBalancePromise, tokenBalancePromise,
]) ])
.then(([gasPrice, gas, usersToken]) => { .then(([gasPrice, gas, usersToken]) => {
const newGasTotal = this.getGasTotal(gas, gasPrice)
const newGasTotal = multiplyCurrencies(gas, gasPrice, {
toNumericBase: 'hex',
multiplicandBase: 16,
multiplierBase: 16,
})
updateGasTotal(newGasTotal) updateGasTotal(newGasTotal)
this.updateSendTokenBalance(usersToken) this.updateSendTokenBalance(usersToken)
}) })
} else { } else {
newGasTotal = multiplyCurrencies(gasLimit, gasPrice, { const newGasTotal = this.getGasTotal(gasLimit, gasPrice)
toNumericBase: 'hex',
multiplicandBase: 16,
multiplierBase: 16,
})
updateGasTotal(newGasTotal) updateGasTotal(newGasTotal)
tokenBalancePromise && tokenBalancePromise.then( tokenBalancePromise
usersToken => this.updateSendTokenBalance(usersToken)) .then(usersToken => this.updateSendTokenBalance(usersToken))
} }
} }
SendTransactionScreen.prototype.getGasTotal = function (gasLimit, gasPrice) {
return multiplyCurrencies(gasLimit, gasPrice, {
toNumericBase: 'hex',
multiplicandBase: 16,
multiplierBase: 16,
})
}
SendTransactionScreen.prototype.componentDidUpdate = function (prevProps) { SendTransactionScreen.prototype.componentDidUpdate = function (prevProps) {
const { const {
from: { balance }, from: { balance },
@ -142,11 +154,14 @@ SendTransactionScreen.prototype.componentDidUpdate = function (prevProps) {
tokenBalance, tokenBalance,
amount, amount,
selectedToken, selectedToken,
network,
} = this.props } = this.props
const { const {
from: { balance: prevBalance }, from: { balance: prevBalance },
gasTotal: prevGasTotal, gasTotal: prevGasTotal,
tokenBalance: prevTokenBalance, tokenBalance: prevTokenBalance,
network: prevNetwork,
} = prevProps } = prevProps
const notFirstRender = [prevBalance, prevGasTotal].every(n => n !== null) const notFirstRender = [prevBalance, prevGasTotal].every(n => n !== null)
@ -156,8 +171,14 @@ SendTransactionScreen.prototype.componentDidUpdate = function (prevProps) {
const tokenBalanceHasChanged = selectedToken && tokenBalance !== prevTokenBalance const tokenBalanceHasChanged = selectedToken && tokenBalance !== prevTokenBalance
const amountValidationChange = balanceHasChanged || gasTotalHasChange || tokenBalanceHasChanged const amountValidationChange = balanceHasChanged || gasTotalHasChange || tokenBalanceHasChanged
if (notFirstRender && amountValidationChange) { if (notFirstRender) {
this.validateAmount(amount) if (amountValidationChange) {
this.validateAmount(amount)
}
if (network !== prevNetwork && network !== 'loading') {
this.updateGas()
}
} }
} }