|
|
|
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
|
|
|
|
}
|