I#5956 fix 1 (#6026)
* prevent invalid chainId's when adding cusstom rpcs * migration 30 removes invalid chaids from preferences and networkController for custom rpcsfeature/default_network_editable
parent
de0ac53008
commit
0ad7797076
@ -0,0 +1,47 @@ |
||||
// next version number
|
||||
const version = 30 |
||||
|
||||
/* |
||||
|
||||
removes invalid chaids from preferences and networkController for custom rpcs |
||||
|
||||
*/ |
||||
|
||||
const clone = require('clone') |
||||
|
||||
module.exports = { |
||||
version, |
||||
|
||||
migrate: async function (originalVersionedData) { |
||||
const versionedData = clone(originalVersionedData) |
||||
versionedData.meta.version = version |
||||
const state = versionedData.data |
||||
const newState = transformState(state) |
||||
versionedData.data = newState |
||||
return versionedData |
||||
}, |
||||
} |
||||
|
||||
function transformState (state) { |
||||
const newState = state |
||||
|
||||
const frequentRpcListDetail = newState.PreferencesController.frequentRpcListDetail |
||||
if (frequentRpcListDetail) { |
||||
frequentRpcListDetail.forEach((rpc, index) => { |
||||
if (!!rpc.chainId && Number.isNaN(parseInt(rpc.chainId))) { |
||||
delete frequentRpcListDetail[index].chainId |
||||
} |
||||
}) |
||||
newState.PreferencesController.frequentRpcListDetail = frequentRpcListDetail |
||||
} |
||||
|
||||
if (newState.NetworkController.network && Number.isNaN(parseInt(newState.NetworkController.network))) { |
||||
delete newState.NetworkController.network |
||||
} |
||||
|
||||
if (newState.NetworkController.provider && newState.NetworkController.provider.chainId && Number.isNaN(parseInt(newState.NetworkController.provider.chainId))) { |
||||
delete newState.NetworkController.provider.chainId |
||||
} |
||||
|
||||
return newState |
||||
} |
@ -0,0 +1,37 @@ |
||||
const assert = require('assert') |
||||
const migrationTemplate = require('../../../app/scripts/migrations/030.js') |
||||
const storage = { |
||||
meta: {}, |
||||
data: { |
||||
NetworkController: { |
||||
network: 'fail', |
||||
provider: { |
||||
chainId: 'fail', |
||||
nickname: '', |
||||
rpcTarget: 'https://api.myetherwallet.com/eth', |
||||
ticker: 'ETH', |
||||
type: 'rinkeby', |
||||
}, |
||||
}, |
||||
PreferencesController: { |
||||
frequentRpcListDetail: [ |
||||
{chainId: 'fail', nickname: '', rpcUrl: 'http://127.0.0.1:8545', ticker: ''}, |
||||
{chainId: '1', nickname: '', rpcUrl: 'https://api.myetherwallet.com/eth', ticker: 'ETH'}, |
||||
], |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
describe('storage is migrated successfully', () => { |
||||
it('should work', (done) => { |
||||
migrationTemplate.migrate(storage) |
||||
.then((migratedData) => { |
||||
assert.equal(migratedData.meta.version, 30) |
||||
assert.equal(migratedData.data.PreferencesController.frequentRpcListDetail[0].chainId, undefined) |
||||
assert.equal(migratedData.data.PreferencesController.frequentRpcListDetail[1].chainId, '1') |
||||
assert.equal(migratedData.data.NetworkController.provider.chainId, undefined) |
||||
assert.equal(migratedData.data.NetworkController.network, undefined) |
||||
done() |
||||
}).catch(done) |
||||
}) |
||||
}) |
Loading…
Reference in new issue