diff --git a/src/app/ui/sendTxCallbacks.js b/src/app/ui/sendTxCallbacks.js new file mode 100644 index 0000000000..47fe861ec5 --- /dev/null +++ b/src/app/ui/sendTxCallbacks.js @@ -0,0 +1,102 @@ +const yo = require('yo-yo') +const confirmDialog = require('./confirmDialog') +const modalCustom = require('./modal-dialog-custom') +const modalDialog = require('./modaldialog') +const typeConversion = remixLib.execution.typeConversion +const Web3 = require('web3') + +UniversalDAppUI.prototype.confirmationCb = function (executionContext, udapp, network, tx, gasEstimation, continueTxExecution, cancelCb) { + let self = this + if (network.name !== 'Main') { + return continueTxExecution(null) + } + var amount = Web3.utils.fromWei(typeConversion.toInt(tx.value), 'ether') + var content = confirmDialog(tx, amount, gasEstimation, self.udapp, + (gasPrice, cb) => { + let txFeeText, priceStatus + // TODO: this try catch feels like an anti pattern, can/should be + // removed, but for now keeping the original logic + try { + var fee = Web3.utils.toBN(tx.gas).mul(Web3.utils.toBN(Web3.utils.toWei(gasPrice.toString(10), 'gwei'))) + txFeeText = ' ' + Web3.utils.fromWei(fee.toString(10), 'ether') + ' Ether' + priceStatus = true + } catch (e) { + txFeeText = ' Please fix this issue before sending any transaction. ' + e.message + priceStatus = false + } + cb(txFeeText, priceStatus) + }, + (cb) => { + self.executionContext.web3().eth.getGasPrice((error, gasPrice) => { + const warnMessage = ' Please fix this issue before sending any transaction. ' + if (error) { + return cb('Unable to retrieve the current network gas price.' + warnMessage + error) + } + try { + var gasPriceValue = Web3.utils.fromWei(gasPrice.toString(10), 'gwei') + cb(null, gasPriceValue) + } catch (e) { + cb(warnMessage + e.message, null, false) + } + }) + } + ) + modalDialog( + 'Confirm transaction', + content, + { label: 'Confirm', + fn: () => { + self.udapp.config.setUnpersistedProperty( + 'doNotShowTransactionConfirmationAgain', + content.querySelector('input#confirmsetting').checked + ) + // TODO: check if this is check is still valid given the refactor + if (!content.gasPriceStatus) { + cancelCb('Given gas price is not correct') + } else { + var gasPrice = Web3.utils.toWei(content.querySelector('#gasprice').value, 'gwei') + continueTxExecution(gasPrice) + } + } + }, + { + label: 'Cancel', + fn: () => { + return cancelCb('Transaction canceled by user.') + } + } + ) +} + +module.exports = confirmationCb + +const continueCb = (error, continueTxExecution, cancelCb) => { + if (error) { + const msg = typeof error !== 'string' ? error.message : error + modalDialog( + 'Gas estimation failed', + yo` +