mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-23 10:30:04 +01:00
c54f9b3097
* Draft methods to brak updateTransaction into smaller more targeted methods. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * This is a combination of 76 commits. normalize and validate tx params. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Method to normalize tx and check if it's unapproved. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Move the methods to controllers/transactions/index.js Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Flesh out the methods to update transaction with custom notes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> enforce that only the properties for the specific methid can be updated via the method. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Test update gas fees Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Update swap approval transaction Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> use lodash to remove undefined properties update swap transaction tests Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Updates transaction user settings. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Lint fixes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Add more parameters to updateSwapTransaction approvalTxId estimatedBaseFee Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Add Update Transaction Metrics Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Update transaction gas fees actions.js Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Lint fixes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Update EIP 1559 Params. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Lint Fixes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Documentations. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Remove metrics from this PR Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Lint fixes: Removed unused variables Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Add more params to updateTransactionGasFees. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Update eip1559 method to editableParams. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> lint fixes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Fix Mocha tests Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> add gasPrice to updateEditableParams Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Remove duplicated Params in notes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> A few more tests to cover if transaction status is not unapproved transaction is passed more parameters than it requires. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Update Transaction Gas Fees. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Update gas fees in edit-gas-popover. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Remove metrics. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Update gas settings and user settings. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Lint fixes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Fix unit tests. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Lint fixes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Draft methods to brak updateTransaction into smaller more targeted methods. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> normalize and validate tx params. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Method to normalize tx and check if it's unapproved. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Move the methods to controllers/transactions/index.js Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Flesh out the methods to update transaction with custom notes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Test update gas fees Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Update swap approval transaction Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> use lodash to remove undefined properties update swap transaction tests Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Updates transaction user settings. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Lint fixes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Add Update Transaction Metrics Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Update transaction gas fees actions.js Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Lint fixes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Update EIP 1559 Params. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Lint Fixes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Documentations. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Remove metrics from this PR Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Lint fixes: Removed unused variables Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Add more params to updateTransactionGasFees. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Update eip1559 method to editableParams. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> lint fixes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Fix Mocha tests Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> add gasPrice to updateEditableParams Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Remove duplicated Params in notes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> A few more tests to cover if transaction status is not unapproved transaction is passed more parameters than it requires. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Update Transaction Gas Fees. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Remove metrics. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Update gas settings and user settings. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Lint fixes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Fix unit tests. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Lint fixes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Remove dup;icated method from rebase. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> unrelated change Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Force re-run workflow Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Lint fix Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Do not hideLoading since we're not showing it. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> UpdateTransaction should be renamed to updateGasFees Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> updateGasFees in gas-modal-page-container. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> fix: update previous gas params update method add types to the jsdoc comments. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> updateTransactionGasFees should have been updatePreviousGasParams Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Previous gas fees can be updated for confirmed transactions. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> add updatePreviousGasParams to mocked functions. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Lint fixes Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * we need to await the first dispatch before we call the second Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * update values to make tests pass Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * More changes to make e2e pass Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Need to wait a bit after save for changes to take effect. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Remove merge comments. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Await one dispatch before calling another Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * We don't need goHome anymore. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Tests must use async...await syntax too since we have await in the useTranasctionFunction Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Add delay after button click for values to update Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Wait a moment after clicking save for values to update Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Wait after clicking save... Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Merge update transaction gas fees and transaction user settings Show loading indicator on edit gas popover Fix tests. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Lint fixes Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Fix JSDoc Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * updatePreviousGasParams should also return updated transaction meta. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com>
189 lines
5.2 KiB
JavaScript
189 lines
5.2 KiB
JavaScript
import { useCallback } from 'react';
|
|
import { useDispatch } from 'react-redux';
|
|
|
|
import { EDIT_GAS_MODES, PRIORITY_LEVELS } from '../../../shared/constants/gas';
|
|
import {
|
|
decimalToHex,
|
|
decGWEIToHexWEI,
|
|
} from '../../helpers/utils/conversions.util';
|
|
import { addTenPercentAndRound } from '../../helpers/utils/gas';
|
|
import {
|
|
createCancelTransaction,
|
|
createSpeedUpTransaction,
|
|
updateCustomSwapsEIP1559GasParams,
|
|
updatePreviousGasParams,
|
|
updateSwapsUserFeeLevel,
|
|
updateTransactionGasFees,
|
|
} from '../../store/actions';
|
|
|
|
export const useTransactionFunctions = ({
|
|
defaultEstimateToUse,
|
|
editGasMode,
|
|
estimatedBaseFee,
|
|
gasFeeEstimates,
|
|
gasLimit: gasLimitValue,
|
|
maxPriorityFeePerGas: maxPriorityFeePerGasValue,
|
|
transaction,
|
|
}) => {
|
|
const dispatch = useDispatch();
|
|
|
|
const getTxMeta = useCallback(() => {
|
|
if (
|
|
(editGasMode !== EDIT_GAS_MODES.CANCEL &&
|
|
editGasMode !== EDIT_GAS_MODES.SPEED_UP) ||
|
|
transaction.previousGas
|
|
) {
|
|
return {};
|
|
}
|
|
const {
|
|
maxFeePerGas,
|
|
maxPriorityFeePerGas,
|
|
gasLimit,
|
|
} = transaction?.txParams;
|
|
return {
|
|
previousGas: {
|
|
maxFeePerGas,
|
|
maxPriorityFeePerGas,
|
|
gasLimit,
|
|
},
|
|
};
|
|
}, [editGasMode, transaction?.previousGas, transaction?.txParams]);
|
|
|
|
const updateTransaction = useCallback(
|
|
async ({
|
|
estimateUsed,
|
|
gasLimit,
|
|
maxFeePerGas,
|
|
maxPriorityFeePerGas,
|
|
estimateSuggested,
|
|
}) => {
|
|
const newGasSettings = {
|
|
gas: decimalToHex(gasLimit || gasLimitValue),
|
|
gasLimit: decimalToHex(gasLimit || gasLimitValue),
|
|
estimateSuggested: estimateSuggested || defaultEstimateToUse,
|
|
estimateUsed,
|
|
};
|
|
if (maxFeePerGas) {
|
|
newGasSettings.maxFeePerGas = maxFeePerGas;
|
|
}
|
|
if (maxPriorityFeePerGas) {
|
|
newGasSettings.maxPriorityFeePerGas =
|
|
maxPriorityFeePerGas || decGWEIToHexWEI(maxPriorityFeePerGasValue);
|
|
}
|
|
const txMeta = getTxMeta();
|
|
|
|
const updatedTxMeta = {
|
|
...transaction,
|
|
userFeeLevel: estimateUsed || PRIORITY_LEVELS.CUSTOM,
|
|
txParams: {
|
|
...transaction.txParams,
|
|
...newGasSettings,
|
|
},
|
|
...txMeta,
|
|
};
|
|
|
|
if (editGasMode === EDIT_GAS_MODES.SWAPS) {
|
|
dispatch(
|
|
updateSwapsUserFeeLevel(estimateUsed || PRIORITY_LEVELS.CUSTOM),
|
|
);
|
|
dispatch(updateCustomSwapsEIP1559GasParams(newGasSettings));
|
|
} else {
|
|
newGasSettings.userEditedGasLimit = updatedTxMeta.userEditedGasLimit;
|
|
newGasSettings.userFeeLevel = updatedTxMeta.userFeeLevel;
|
|
|
|
if (txMeta && txMeta.previousGas) {
|
|
await dispatch(
|
|
updatePreviousGasParams(updatedTxMeta.id, txMeta.previousGas),
|
|
);
|
|
}
|
|
|
|
await dispatch(
|
|
updateTransactionGasFees(updatedTxMeta.id, newGasSettings),
|
|
);
|
|
}
|
|
},
|
|
[
|
|
defaultEstimateToUse,
|
|
dispatch,
|
|
editGasMode,
|
|
gasLimitValue,
|
|
getTxMeta,
|
|
maxPriorityFeePerGasValue,
|
|
transaction,
|
|
],
|
|
);
|
|
|
|
const cancelTransaction = useCallback(() => {
|
|
dispatch(
|
|
createCancelTransaction(transaction.id, transaction.txParams, {
|
|
estimatedBaseFee,
|
|
}),
|
|
);
|
|
}, [dispatch, estimatedBaseFee, transaction]);
|
|
|
|
const speedUpTransaction = useCallback(() => {
|
|
dispatch(
|
|
createSpeedUpTransaction(transaction.id, transaction.txParams, {
|
|
estimatedBaseFee,
|
|
}),
|
|
);
|
|
}, [dispatch, estimatedBaseFee, transaction]);
|
|
|
|
const updateTransactionToTenPercentIncreasedGasFee = useCallback(
|
|
(initTransaction = false) => {
|
|
const { gas: gasLimit, maxFeePerGas, maxPriorityFeePerGas } =
|
|
transaction.previousGas || transaction.txParams;
|
|
|
|
updateTransaction({
|
|
estimateSuggested: initTransaction
|
|
? defaultEstimateToUse
|
|
: PRIORITY_LEVELS.TEN_PERCENT_INCREASED,
|
|
estimateUsed: PRIORITY_LEVELS.TEN_PERCENT_INCREASED,
|
|
gasLimit,
|
|
maxFeePerGas: addTenPercentAndRound(maxFeePerGas),
|
|
maxPriorityFeePerGas: addTenPercentAndRound(maxPriorityFeePerGas),
|
|
});
|
|
},
|
|
[defaultEstimateToUse, transaction, updateTransaction],
|
|
);
|
|
|
|
const updateTransactionUsingEstimate = useCallback(
|
|
(gasFeeEstimateToUse) => {
|
|
if (!gasFeeEstimates[gasFeeEstimateToUse]) {
|
|
return;
|
|
}
|
|
const {
|
|
suggestedMaxFeePerGas,
|
|
suggestedMaxPriorityFeePerGas,
|
|
} = gasFeeEstimates[gasFeeEstimateToUse];
|
|
updateTransaction({
|
|
estimateUsed: gasFeeEstimateToUse,
|
|
maxFeePerGas: decGWEIToHexWEI(suggestedMaxFeePerGas),
|
|
maxPriorityFeePerGas: decGWEIToHexWEI(suggestedMaxPriorityFeePerGas),
|
|
});
|
|
},
|
|
[gasFeeEstimates, updateTransaction],
|
|
);
|
|
|
|
const updateTransactionUsingDAPPSuggestedValues = useCallback(() => {
|
|
const {
|
|
maxFeePerGas,
|
|
maxPriorityFeePerGas,
|
|
} = transaction?.dappSuggestedGasFees;
|
|
updateTransaction({
|
|
estimateUsed: PRIORITY_LEVELS.DAPP_SUGGESTED,
|
|
maxFeePerGas,
|
|
maxPriorityFeePerGas,
|
|
});
|
|
}, [transaction, updateTransaction]);
|
|
|
|
return {
|
|
cancelTransaction,
|
|
speedUpTransaction,
|
|
updateTransaction,
|
|
updateTransactionToTenPercentIncreasedGasFee,
|
|
updateTransactionUsingDAPPSuggestedValues,
|
|
updateTransactionUsingEstimate,
|
|
};
|
|
};
|