From 1b4504e2331cd390b917fdadce10547df7994fb3 Mon Sep 17 00:00:00 2001 From: Brad Decker Date: Mon, 22 Mar 2021 10:21:52 -0500 Subject: [PATCH] make migration more safe (#10689) --- app/scripts/migrations/055.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/scripts/migrations/055.js b/app/scripts/migrations/055.js index 22a06b3ce..98676bc63 100644 --- a/app/scripts/migrations/055.js +++ b/app/scripts/migrations/055.js @@ -17,14 +17,25 @@ export default { }, }; +const UNKNOWN_CHAIN_ID_KEY = 'UNKNOWN'; + function transformState(state) { if ( state?.IncomingTransactionsController?.incomingTxLastFetchedBlocksByNetwork ) { state.IncomingTransactionsController.incomingTxLastFetchedBlockByChainId = mapKeys( state.IncomingTransactionsController.incomingTxLastFetchedBlocksByNetwork, - (_, key) => NETWORK_TYPE_TO_ID_MAP[key].chainId, + // using optional chaining in case user's state has fetched blocks for + // RPC network types (which don't map to a single chainId). This should + // not be possible, but it's safer + (_, key) => NETWORK_TYPE_TO_ID_MAP[key]?.chainId ?? UNKNOWN_CHAIN_ID_KEY, ); + // Now that mainnet and test net last fetched blocks are keyed by their + // respective chainIds, we can safely delete anything we had for custom + // networks. Any custom network that shares a chainId with one of the + // aforementioned networks will use the value stored by chainId. + delete state.IncomingTransactionsController + .incomingTxLastFetchedBlockByChainId[UNKNOWN_CHAIN_ID_KEY]; delete state.IncomingTransactionsController .incomingTxLastFetchedBlocksByNetwork; }