1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-28 05:12:18 +01:00
metamask-extension/ui/app/pages/send/send-footer/send-footer.utils.js

89 lines
2.0 KiB
JavaScript
Raw Normal View History

const ethAbi = require('ethereumjs-abi')
const ethUtil = require('ethereumjs-util')
const { TOKEN_TRANSFER_FUNCTION_SIGNATURE } = require('../send.constants')
2018-04-26 18:38:38 +02:00
function addHexPrefixToObjectValues (obj) {
return Object.keys(obj).reduce((newObj, key) => {
return { ...newObj, [key]: ethUtil.addHexPrefix(obj[key]) }
}, {})
}
2018-07-17 00:50:26 +02:00
function constructTxParams ({ selectedToken, data, to, amount, from, gas, gasPrice }) {
2018-04-26 18:38:38 +02:00
const txParams = {
2018-07-17 00:50:26 +02:00
data,
2018-04-26 18:38:38 +02:00
from,
value: '0',
gas,
gasPrice,
}
if (!selectedToken) {
txParams.value = amount
txParams.to = to
}
return addHexPrefixToObjectValues(txParams)
2018-04-26 18:38:38 +02:00
}
function constructUpdatedTx ({
amount,
2018-07-17 00:50:26 +02:00
data,
2018-04-26 18:38:38 +02:00
editingTransactionId,
from,
gas,
gasPrice,
selectedToken,
to,
unapprovedTxs,
}) {
2018-07-17 00:50:26 +02:00
const unapprovedTx = unapprovedTxs[editingTransactionId]
const txParamsData = unapprovedTx.txParams.data ? unapprovedTx.txParams.data : data
2018-04-26 18:38:38 +02:00
const editingTx = {
2018-07-17 00:50:26 +02:00
...unapprovedTx,
txParams: Object.assign(
unapprovedTx.txParams,
addHexPrefixToObjectValues({
data: txParamsData,
to,
from,
gas,
gasPrice,
value: amount,
})
),
2018-04-26 18:38:38 +02:00
}
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, addHexPrefixToObjectValues({
value: '0',
to: selectedToken.address,
data,
}))
2018-07-17 00:50:26 +02:00
}
2018-04-26 18:38:38 +02:00
2018-07-17 00:50:26 +02:00
if (typeof editingTx.txParams.data === 'undefined') {
delete editingTx.txParams.data
2018-04-26 18:38:38 +02:00
}
return editingTx
2018-04-26 18:38:38 +02:00
}
function addressIsNew (toAccounts, newAddress) {
const newAddressNormalized = newAddress.toLowerCase()
const foundMatching = toAccounts.some(({ address }) => address === newAddressNormalized)
return !foundMatching
2018-04-26 18:38:38 +02:00
}
module.exports = {
addressIsNew,
constructTxParams,
constructUpdatedTx,
addHexPrefixToObjectValues,
2018-04-26 18:38:38 +02:00
}