import ethAbi from 'ethereumjs-abi'; import { TOKEN_TRANSFER_FUNCTION_SIGNATURE } from '../send.constants'; import { addHexPrefix } from '../../../../app/scripts/lib/util'; import { addHexPrefixToObjectValues } from '../../../helpers/utils/util'; export function constructTxParams({ sendToken, data, to, amount, from, gas, gasPrice, }) { const txParams = { data, from, value: '0', gas, gasPrice, }; if (!sendToken) { txParams.value = amount; txParams.to = to; } return addHexPrefixToObjectValues(txParams); } export function constructUpdatedTx({ amount, data, editingTransactionId, from, gas, gasPrice, sendToken, to, unapprovedTxs, }) { const unapprovedTx = unapprovedTxs[editingTransactionId]; const txParamsData = unapprovedTx.txParams.data ? unapprovedTx.txParams.data : data; const editingTx = { ...unapprovedTx, txParams: Object.assign( unapprovedTx.txParams, addHexPrefixToObjectValues({ data: txParamsData, to, from, gas, gasPrice, value: amount, }), ), }; if (sendToken) { Object.assign( editingTx.txParams, addHexPrefixToObjectValues({ value: '0', to: sendToken.address, data: TOKEN_TRANSFER_FUNCTION_SIGNATURE + Array.prototype.map .call( ethAbi.rawEncode( ['address', 'uint256'], [to, addHexPrefix(amount)], ), (x) => `00${x.toString(16)}`.slice(-2), ) .join(''), }), ); } if (typeof editingTx.txParams.data === 'undefined') { delete editingTx.txParams.data; } return editingTx; } export function addressIsNew(toAccounts, newAddress) { const newAddressNormalized = newAddress.toLowerCase(); const foundMatching = toAccounts.some( ({ address }) => address.toLowerCase() === newAddressNormalized, ); return !foundMatching; }