A Metamask fork with Infura removed and default networks editable
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ciphermask/ui/app/components/send_/send-footer/send-footer.utils.js

89 lines
2.1 KiB

const ethAbi = require('ethereumjs-abi')
const ethUtil = require('ethereumjs-util')
const { TOKEN_TRANSFER_FUNCTION_SIGNATURE } = require('../send.constants')
function formShouldBeDisabled ({ inError, selectedToken, tokenBalance, gasTotal }) {
const missingTokenBalance = selectedToken && !tokenBalance
return inError || !gasTotal || missingTokenBalance
}
function addHexPrefixToObjectValues (obj) {
return Object.keys(obj).reduce((newObj, key) => {
return { ...newObj, [key]: ethUtil.addHexPrefix(obj[key]) }
}, {})
}
function constructTxParams ({ selectedToken, to, amount, from, gas, gasPrice }) {
const txParams = {
from,
value: '0',
gas,
gasPrice,
}
if (!selectedToken) {
txParams.value = amount
txParams.to = to
}
const hexPrefixedTxParams = addHexPrefixToObjectValues(txParams)
return hexPrefixedTxParams
}
function constructUpdatedTx ({
amount,
editingTransactionId,
from,
gas,
gasPrice,
selectedToken,
to,
unapprovedTxs,
}) {
const editingTx = {
...unapprovedTxs[editingTransactionId],
txParams: addHexPrefixToObjectValues({ from, gas, gasPrice }),
}
if (selectedToken) {
console.log(`ethAbi.rawEncode`, ethAbi.rawEncode)
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,
}))
} else {
const { data } = unapprovedTxs[editingTransactionId].txParams
Object.assign(editingTx.txParams, addHexPrefixToObjectValues({
value: amount,
to,
data,
}))
if (typeof editingTx.txParams.data === 'undefined') {
delete editingTx.txParams.data
}
}
return editingTx
}
function addressIsNew (toAccounts, newAddress) {
return !toAccounts.find(({ address }) => newAddress === address)
}
module.exports = {
addressIsNew,
formShouldBeDisabled,
constructTxParams,
constructUpdatedTx,
addHexPrefixToObjectValues,
}