1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-22 17:33:23 +01:00

Ensure that editing a tx from a transfer to a simple send resets data and updates type (#15248)

* Ensure that editing a transaction from a transfer to a simple send properly resets data and updates type

* Handle case where there are no unapproved txes

* Improve comment in updateSendAsset

* Remove unnecessary code in send transaction edit function

* Fix

* Ensure hex data is properly reset when changing from a safe transfer from tx to native send
This commit is contained in:
Dan J Miller 2022-07-20 20:33:23 -02:30 committed by ryanml
parent 930f5e8558
commit 11374ec4d7
3 changed files with 27 additions and 4 deletions

View File

@ -462,7 +462,10 @@ export default class TransactionController extends EventEmitter {
};
// only update what is defined
editableParams.txParams = pickBy(editableParams.txParams);
editableParams.txParams = pickBy(
editableParams.txParams,
(prop) => prop !== undefined,
);
// update transaction type in case it has changes
const transactionBeforeEdit = this._getTransaction(txId);

View File

@ -941,6 +941,7 @@ const slice = createSlice({
draftTransaction.asset.type = action.payload.type;
draftTransaction.asset.balance = action.payload.balance;
draftTransaction.asset.error = action.payload.error;
if (
draftTransaction.asset.type === ASSET_TYPES.TOKEN ||
draftTransaction.asset.type === ASSET_TYPES.COLLECTIBLE
@ -1961,6 +1962,9 @@ export function updateSendAsset(
getSelectedAddress(state);
const account = getTargetAccount(state, sendingAddress);
if (type === ASSET_TYPES.NATIVE) {
const unapprovedTxs = getUnapprovedTxs(state);
const unapprovedTx = unapprovedTxs?.[draftTransaction.id];
await dispatch(
addHistoryEntry(
`sendFlow - user set asset of type ${
@ -1976,6 +1980,20 @@ export function updateSendAsset(
error: null,
}),
);
// This is meant to handle cases where we are editing an unapprovedTx from the background state
// and its type is a token method. In such a case, the hex data will be the necessary hex data
// for calling the contract transfer method.
// Now that we are updating the transaction to be a send of a native asset type, we should
// set the hex data of the transaction being editing to be empty.
// then the user will not want to send any hex data now that they have change the
if (
unapprovedTx?.type === TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER_FROM ||
unapprovedTx?.type === TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER ||
unapprovedTx?.type === TRANSACTION_TYPES.TOKEN_METHOD_SAFE_TRANSFER_FROM
) {
await dispatch(actions.updateUserInputHexData(''));
}
} else {
await dispatch(showLoadingIndication());
const details = {
@ -2211,8 +2229,10 @@ export function signTransaction() {
draftTransaction.history,
),
);
dispatch(updateEditableParams(draftTransaction.id, editingTx.txParams));
dispatch(
await dispatch(
updateEditableParams(draftTransaction.id, editingTx.txParams),
);
await dispatch(
updateTransactionGasFees(draftTransaction.id, editingTx.txParams),
);
} else {

View File

@ -745,7 +745,7 @@ export function updateEditableParams(txId, editableParams) {
log.error(error.message);
throw error;
}
await forceUpdateMetamaskState(dispatch);
return updatedTransaction;
};
}