A Metamask fork with Infura removed and default networks editable
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ciphermask/app/scripts/migrations/059.js

53 lines
1.3 KiB

import {
cloneDeep,
concat,
groupBy,
keyBy,
pickBy,
isPlainObject,
} from 'lodash';
import { TRANSACTION_TYPES } from '../../../shared/constants/transaction';
const version = 59;
/**
* Removes orphaned cancel and retry transactions that no longer have the
* original transaction in state, which results in bugs.
*/
export default {
version,
async migrate(originalVersionedData) {
const versionedData = cloneDeep(originalVersionedData);
versionedData.meta.version = version;
const state = versionedData.data;
versionedData.data = transformState(state);
return versionedData;
},
};
function transformState(state) {
const transactions = state?.TransactionController?.transactions;
if (isPlainObject(transactions)) {
const nonceNetworkGroupedObject = groupBy(
Object.values(transactions),
(tx) => {
return `${tx.txParams?.nonce}-${tx.chainId ?? tx.metamaskNetworkId}`;
},
);
const withoutOrphans = pickBy(nonceNetworkGroupedObject, (group) => {
return group.some(
(tx) =>
tx.type !== TRANSACTION_TYPES.CANCEL &&
tx.type !== TRANSACTION_TYPES.RETRY,
);
});
state.TransactionController.transactions = keyBy(
concat(...Object.values(withoutOrphans)),
(tx) => tx.id,
);
}
return state;
}