|
|
|
@ -8,7 +8,12 @@ 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 t = require('../../../i18n') |
|
|
|
|
|
|
|
|
|
const { MIN_GAS_PRICE_HEX } = require('../send/send-constants') |
|
|
|
@ -44,6 +49,7 @@ function mapDispatchToProps (dispatch) { |
|
|
|
|
to, |
|
|
|
|
value: amount, |
|
|
|
|
} = txParams |
|
|
|
|
|
|
|
|
|
dispatch(actions.updateSend({ |
|
|
|
|
gasLimit, |
|
|
|
|
gasPrice, |
|
|
|
@ -56,6 +62,29 @@ function mapDispatchToProps (dispatch) { |
|
|
|
|
dispatch(actions.showSendPage()) |
|
|
|
|
}, |
|
|
|
|
cancelTransaction: ({ id }) => dispatch(actions.cancelTx({ id })), |
|
|
|
|
showCustomizeGasModal: (txMeta, sendGasLimit, sendGasPrice, sendGasTotal) => { |
|
|
|
|
const { id, txParams, lastGasPrice } = txMeta |
|
|
|
|
const { gas: txGasLimit, gasPrice: txGasPrice } = txParams |
|
|
|
|
|
|
|
|
|
let forceGasMin |
|
|
|
|
if (lastGasPrice) { |
|
|
|
|
forceGasMin = ethUtil.addHexPrefix(multiplyCurrencies(lastGasPrice, 1.1, { |
|
|
|
|
multiplicandBase: 16, |
|
|
|
|
multiplierBase: 10, |
|
|
|
|
toNumericBase: 'hex', |
|
|
|
|
fromDenomination: 'WEI', |
|
|
|
|
})) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
dispatch(actions.updateSend({ |
|
|
|
|
gasLimit: sendGasLimit || txGasLimit, |
|
|
|
|
gasPrice: sendGasPrice || txGasPrice, |
|
|
|
|
editingTransactionId: id, |
|
|
|
|
gasTotal: sendGasTotal, |
|
|
|
|
forceGasMin, |
|
|
|
|
})) |
|
|
|
|
dispatch(actions.showModal({ name: 'CUSTOMIZE_GAS' })) |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -140,6 +169,7 @@ ConfirmSendEther.prototype.getGasFee = function () { |
|
|
|
|
return { |
|
|
|
|
FIAT, |
|
|
|
|
ETH, |
|
|
|
|
gasFeeInHex: txFeeBn.toString(16), |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -147,7 +177,7 @@ ConfirmSendEther.prototype.getData = function () { |
|
|
|
|
const { identities } = this.props |
|
|
|
|
const txMeta = this.gatherTxMeta() |
|
|
|
|
const txParams = txMeta.txParams || {} |
|
|
|
|
const { FIAT: gasFeeInFIAT, ETH: gasFeeInETH } = this.getGasFee() |
|
|
|
|
const { FIAT: gasFeeInFIAT, ETH: gasFeeInETH, gasFeeInHex } = this.getGasFee() |
|
|
|
|
const { FIAT: amountInFIAT, ETH: amountInETH } = this.getAmount() |
|
|
|
|
|
|
|
|
|
const totalInFIAT = addCurrencies(gasFeeInFIAT, amountInFIAT, { |
|
|
|
@ -175,11 +205,20 @@ ConfirmSendEther.prototype.getData = function () { |
|
|
|
|
amountInETH, |
|
|
|
|
totalInFIAT, |
|
|
|
|
totalInETH, |
|
|
|
|
gasFeeInHex, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ConfirmSendEther.prototype.render = function () { |
|
|
|
|
const { editTransaction, currentCurrency, clearSend } = this.props |
|
|
|
|
const { |
|
|
|
|
editTransaction, |
|
|
|
|
currentCurrency, |
|
|
|
|
clearSend, |
|
|
|
|
conversionRate, |
|
|
|
|
currentCurrency: convertedCurrency, |
|
|
|
|
showCustomizeGasModal, |
|
|
|
|
send: { gasTotal, gasLimit: sendGasLimit, gasPrice: sendGasPrice }, |
|
|
|
|
} = this.props |
|
|
|
|
const txMeta = this.gatherTxMeta() |
|
|
|
|
const txParams = txMeta.txParams || {} |
|
|
|
|
|
|
|
|
@ -193,13 +232,17 @@ ConfirmSendEther.prototype.render = function () { |
|
|
|
|
name: toName, |
|
|
|
|
}, |
|
|
|
|
memo, |
|
|
|
|
gasFeeInFIAT, |
|
|
|
|
gasFeeInETH, |
|
|
|
|
gasFeeInHex, |
|
|
|
|
amountInFIAT, |
|
|
|
|
totalInFIAT, |
|
|
|
|
totalInETH, |
|
|
|
|
} = this.getData() |
|
|
|
|
|
|
|
|
|
const title = txMeta.lastGasPrice ? 'Reprice Transaction' : 'Confirm' |
|
|
|
|
const subtitle = txMeta.lastGasPrice |
|
|
|
|
? 'Increase your gas fee to attempt to overwrite and speed up your transaction' |
|
|
|
|
: 'Please review your transaction.' |
|
|
|
|
|
|
|
|
|
// This is from the latest master
|
|
|
|
|
// It handles some of the errors that we are not currently handling
|
|
|
|
|
// Leaving as comments fo reference
|
|
|
|
@ -218,11 +261,11 @@ ConfirmSendEther.prototype.render = function () { |
|
|
|
|
// Main Send token Card
|
|
|
|
|
h('div.page-container', [ |
|
|
|
|
h('div.page-container__header', [ |
|
|
|
|
h('button.confirm-screen-back-button', { |
|
|
|
|
!txMeta.lastGasPrice && h('button.confirm-screen-back-button', { |
|
|
|
|
onClick: () => editTransaction(txMeta), |
|
|
|
|
}, 'Edit'), |
|
|
|
|
h('div.page-container__title', 'Confirm'), |
|
|
|
|
h('div.page-container__subtitle', `Please review your transaction.`), |
|
|
|
|
h('div.page-container__title', title), |
|
|
|
|
h('div.page-container__subtitle', subtitle), |
|
|
|
|
]), |
|
|
|
|
h('.page-container__content', [ |
|
|
|
|
h('div.flex-row.flex-center.confirm-screen-identicons', [ |
|
|
|
@ -286,13 +329,15 @@ ConfirmSendEther.prototype.render = function () { |
|
|
|
|
h('section.flex-row.flex-center.confirm-screen-row', [ |
|
|
|
|
h('span.confirm-screen-label.confirm-screen-section-column', [ t('gasFee') ]), |
|
|
|
|
h('div.confirm-screen-section-column', [ |
|
|
|
|
h('div.confirm-screen-row-info', `${gasFeeInFIAT} ${currentCurrency.toUpperCase()}`), |
|
|
|
|
|
|
|
|
|
h('div.confirm-screen-row-detail', `${gasFeeInETH} ETH`), |
|
|
|
|
h(GasFeeDisplay, { |
|
|
|
|
gasTotal: gasTotal || gasFeeInHex, |
|
|
|
|
conversionRate, |
|
|
|
|
convertedCurrency, |
|
|
|
|
onClick: () => showCustomizeGasModal(txMeta, sendGasLimit, sendGasPrice, gasTotal), |
|
|
|
|
}), |
|
|
|
|
]), |
|
|
|
|
]), |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
h('section.flex-row.flex-center.confirm-screen-row.confirm-screen-total-box ', [ |
|
|
|
|
h('div.confirm-screen-section-column', [ |
|
|
|
|
h('span.confirm-screen-label', [ t('total') + ' ' ]), |
|
|
|
@ -450,6 +495,27 @@ ConfirmSendEther.prototype.gatherTxMeta = function () { |
|
|
|
|
const state = this.state |
|
|
|
|
const txData = clone(state.txData) || clone(props.txData) |
|
|
|
|
|
|
|
|
|
const { gasPrice: sendGasPrice, gas: sendGasLimit } = props.send |
|
|
|
|
const { |
|
|
|
|
lastGasPrice, |
|
|
|
|
txParams: { |
|
|
|
|
gasPrice: txGasPrice, |
|
|
|
|
gas: txGasLimit, |
|
|
|
|
}, |
|
|
|
|
} = txData |
|
|
|
|
|
|
|
|
|
let forceGasMin |
|
|
|
|
if (lastGasPrice) { |
|
|
|
|
forceGasMin = ethUtil.addHexPrefix(multiplyCurrencies(lastGasPrice, 1.1, { |
|
|
|
|
multiplicandBase: 16, |
|
|
|
|
multiplierBase: 10, |
|
|
|
|
toNumericBase: 'hex', |
|
|
|
|
})) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
txData.txParams.gasPrice = sendGasPrice || forceGasMin || txGasPrice |
|
|
|
|
txData.txParams.gas = sendGasLimit || txGasLimit |
|
|
|
|
|
|
|
|
|
// log.debug(`UI has defaulted to tx meta ${JSON.stringify(txData)}`)
|
|
|
|
|
return txData |
|
|
|
|
} |
|
|
|
|