2020-01-09 04:34:58 +01:00
|
|
|
import ethAbi from 'ethereumjs-abi'
|
|
|
|
import ethUtil from 'ethereumjs-util'
|
|
|
|
import { TOKEN_TRANSFER_FUNCTION_SIGNATURE } from '../send.constants'
|
2018-04-26 18:38:38 +02:00
|
|
|
|
2020-01-09 04:34:58 +01:00
|
|
|
export function addHexPrefixToObjectValues (obj) {
|
2018-04-26 18:38:38 +02:00
|
|
|
return Object.keys(obj).reduce((newObj, key) => {
|
|
|
|
return { ...newObj, [key]: ethUtil.addHexPrefix(obj[key]) }
|
|
|
|
}, {})
|
|
|
|
}
|
|
|
|
|
2020-05-29 19:46:10 +02:00
|
|
|
export function constructTxParams ({ sendToken, 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,
|
|
|
|
}
|
|
|
|
|
2020-05-29 19:46:10 +02:00
|
|
|
if (!sendToken) {
|
2018-04-26 18:38:38 +02:00
|
|
|
txParams.value = amount
|
|
|
|
txParams.to = to
|
|
|
|
}
|
|
|
|
|
2018-07-17 17:11:43 +02:00
|
|
|
return addHexPrefixToObjectValues(txParams)
|
2018-04-26 18:38:38 +02:00
|
|
|
}
|
|
|
|
|
2020-01-09 04:34:58 +01:00
|
|
|
export function constructUpdatedTx ({
|
2018-04-26 18:38:38 +02:00
|
|
|
amount,
|
2018-07-17 00:50:26 +02:00
|
|
|
data,
|
2018-04-26 18:38:38 +02:00
|
|
|
editingTransactionId,
|
|
|
|
from,
|
|
|
|
gas,
|
|
|
|
gasPrice,
|
2020-05-29 19:46:10 +02:00
|
|
|
sendToken,
|
2018-04-26 18:38:38 +02:00
|
|
|
to,
|
|
|
|
unapprovedTxs,
|
|
|
|
}) {
|
2018-07-17 00:50:26 +02:00
|
|
|
const unapprovedTx = unapprovedTxs[editingTransactionId]
|
|
|
|
const txParamsData = unapprovedTx.txParams.data ? unapprovedTx.txParams.data : data
|
2019-04-17 21:15:13 +02:00
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2020-05-29 19:46:10 +02:00
|
|
|
if (sendToken) {
|
2018-04-26 18:38:38 +02:00
|
|
|
const data = TOKEN_TRANSFER_FUNCTION_SIGNATURE + Array.prototype.map.call(
|
|
|
|
ethAbi.rawEncode(['address', 'uint256'], [to, ethUtil.addHexPrefix(amount)]),
|
2020-02-15 21:34:12 +01:00
|
|
|
(x) => ('00' + x.toString(16)).slice(-2)
|
2018-04-26 18:38:38 +02:00
|
|
|
).join('')
|
|
|
|
|
|
|
|
Object.assign(editingTx.txParams, addHexPrefixToObjectValues({
|
|
|
|
value: '0',
|
2020-05-29 19:46:10 +02:00
|
|
|
to: sendToken.address,
|
2018-04-26 18:38:38 +02:00
|
|
|
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
|
|
|
}
|
2018-05-05 17:11:53 +02:00
|
|
|
|
|
|
|
return editingTx
|
2018-04-26 18:38:38 +02:00
|
|
|
}
|
|
|
|
|
2020-01-09 04:34:58 +01:00
|
|
|
export function addressIsNew (toAccounts, newAddress) {
|
2019-03-29 06:34:49 +01:00
|
|
|
const newAddressNormalized = newAddress.toLowerCase()
|
2019-08-03 01:00:50 +02:00
|
|
|
const foundMatching = toAccounts.some(({ address }) => address.toLowerCase() === newAddressNormalized)
|
2019-03-29 06:34:49 +01:00
|
|
|
return !foundMatching
|
2018-04-26 18:38:38 +02:00
|
|
|
}
|