|
|
|
@ -2,6 +2,7 @@ const { inherits } = require('util') |
|
|
|
|
const PersistentForm = require('../lib/persistent-form') |
|
|
|
|
const h = require('react-hyperscript') |
|
|
|
|
|
|
|
|
|
const ethAbi = require('ethereumjs-abi') |
|
|
|
|
const ethUtil = require('ethereumjs-util') |
|
|
|
|
|
|
|
|
|
const Identicon = require('./components/identicon') |
|
|
|
@ -13,6 +14,7 @@ const GasFeeDisplay = require('./components/send/gas-fee-display-v2') |
|
|
|
|
|
|
|
|
|
const { |
|
|
|
|
MIN_GAS_TOTAL, |
|
|
|
|
TOKEN_TRANSFER_FUNCTION_SIGNATURE, |
|
|
|
|
} = require('./components/send/send-constants') |
|
|
|
|
|
|
|
|
|
const { |
|
|
|
@ -552,6 +554,48 @@ SendTransactionScreen.prototype.addToAddressBookIfNew = function (newAddress) { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
SendTransactionScreen.prototype.getEditedTx = function () { |
|
|
|
|
const { |
|
|
|
|
from: {address: from}, |
|
|
|
|
to, |
|
|
|
|
amount, |
|
|
|
|
gasLimit: gas, |
|
|
|
|
gasPrice, |
|
|
|
|
selectedToken, |
|
|
|
|
editingTransactionId, |
|
|
|
|
unapprovedTxs, |
|
|
|
|
} = this.props |
|
|
|
|
|
|
|
|
|
const editingTx = { |
|
|
|
|
...unapprovedTxs[editingTransactionId], |
|
|
|
|
txParams: { |
|
|
|
|
from: ethUtil.addHexPrefix(from), |
|
|
|
|
gas: ethUtil.addHexPrefix(gas), |
|
|
|
|
gasPrice: ethUtil.addHexPrefix(gasPrice), |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (selectedToken) { |
|
|
|
|
const data = TOKEN_TRANSFER_FUNCTION_SIGNATURE + Array.prototype.map.call( |
|
|
|
|
ethAbi.rawEncode(['address', 'uint256'], [to, ethUtil.addHexPrefix(amount)]), |
|
|
|
|
x => ('00' + x.toString(16)).slice(-2) |
|
|
|
|
).join('') |
|
|
|
|
|
|
|
|
|
Object.assign(editingTx.txParams, { |
|
|
|
|
value: ethUtil.addHexPrefix('0'), |
|
|
|
|
to: ethUtil.addHexPrefix(selectedToken.address), |
|
|
|
|
data, |
|
|
|
|
}) |
|
|
|
|
} else { |
|
|
|
|
Object.assign(editingTx.txParams, { |
|
|
|
|
value: ethUtil.addHexPrefix(amount), |
|
|
|
|
to: ethUtil.addHexPrefix(to), |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return editingTx |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
SendTransactionScreen.prototype.onSubmit = function (event) { |
|
|
|
|
event.preventDefault() |
|
|
|
|
const { |
|
|
|
@ -562,10 +606,10 @@ SendTransactionScreen.prototype.onSubmit = function (event) { |
|
|
|
|
gasPrice, |
|
|
|
|
signTokenTx, |
|
|
|
|
signTx, |
|
|
|
|
updateTx, |
|
|
|
|
selectedToken, |
|
|
|
|
editingTransactionId, |
|
|
|
|
errors: { amount: amountError, to: toError }, |
|
|
|
|
backToConfirmScreen, |
|
|
|
|
} = this.props |
|
|
|
|
|
|
|
|
|
const noErrors = !amountError && toError === null |
|
|
|
@ -577,23 +621,25 @@ SendTransactionScreen.prototype.onSubmit = function (event) { |
|
|
|
|
this.addToAddressBookIfNew(to) |
|
|
|
|
|
|
|
|
|
if (editingTransactionId) { |
|
|
|
|
backToConfirmScreen(editingTransactionId) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
const editedTx = this.getEditedTx() |
|
|
|
|
|
|
|
|
|
const txParams = { |
|
|
|
|
from, |
|
|
|
|
value: '0', |
|
|
|
|
gas, |
|
|
|
|
gasPrice, |
|
|
|
|
} |
|
|
|
|
updateTx(editedTx) |
|
|
|
|
} else { |
|
|
|
|
|
|
|
|
|
if (!selectedToken) { |
|
|
|
|
txParams.value = amount |
|
|
|
|
txParams.to = to |
|
|
|
|
} |
|
|
|
|
const txParams = { |
|
|
|
|
from, |
|
|
|
|
value: '0', |
|
|
|
|
gas, |
|
|
|
|
gasPrice, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
selectedToken |
|
|
|
|
? signTokenTx(selectedToken.address, to, amount, txParams) |
|
|
|
|
: signTx(txParams) |
|
|
|
|
if (!selectedToken) { |
|
|
|
|
txParams.value = amount |
|
|
|
|
txParams.to = to |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
selectedToken |
|
|
|
|
? signTokenTx(selectedToken.address, to, amount, txParams) |
|
|
|
|
: signTx(txParams) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|