parent
a08db5f122
commit
4a46ed9fa2
@ -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` |
||||
<div>Gas estimation errored with the following message (see below). |
||||
The transaction execution will likely fail. Do you want to force sending? <br>${msg}</div> |
||||
`,
|
||||
{ |
||||
label: 'Send Transaction', |
||||
fn: () => continueTxExecution() |
||||
}, |
||||
{ |
||||
label: 'Cancel Transaction', |
||||
fn: () => cancelCb() |
||||
} |
||||
) |
||||
} else { |
||||
continueTxExecution() |
||||
} |
||||
} |
||||
|
||||
module.exports = continueCb |
||||
|
||||
const promptCb = (okCb, cancelCb) => { |
||||
modalCustom.promptPassphrase('Passphrase requested', 'Personal mode is enabled. Please provide passphrase of account', '', okCb, cancelCb) |
||||
} |
||||
|
||||
module.exports = promptCb |
Loading…
Reference in new issue