mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
create migration 25
This commit is contained in:
parent
1ba74c1566
commit
7d243aacf9
61
app/scripts/migrations/025.js
Normal file
61
app/scripts/migrations/025.js
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
// next version number
|
||||||
|
const version = 25
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
normalizes txParams on unconfirmed txs
|
||||||
|
|
||||||
|
*/
|
||||||
|
const ethUtil = require('ethereumjs-util')
|
||||||
|
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
|
||||||
|
|
||||||
|
if (newState.TransactionController) {
|
||||||
|
if (newState.TransactionController.transactions) {
|
||||||
|
const transactions = newState.TransactionController.transactions
|
||||||
|
newState.TransactionController.transactions = transactions.map((txMeta) => {
|
||||||
|
if (txMeta.status !== 'unapproved') return txMeta
|
||||||
|
txMeta.txParams = normalizeTxParams(txMeta.txParams)
|
||||||
|
return txMeta
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return newState
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeTxParams (txParams) {
|
||||||
|
// functions that handle normalizing of that key in txParams
|
||||||
|
const whiteList = {
|
||||||
|
from: from => ethUtil.addHexPrefix(from).toLowerCase(),
|
||||||
|
to: to => ethUtil.addHexPrefix(txParams.to).toLowerCase(),
|
||||||
|
nonce: nonce => ethUtil.addHexPrefix(nonce),
|
||||||
|
value: value => ethUtil.addHexPrefix(value),
|
||||||
|
data: data => ethUtil.addHexPrefix(data),
|
||||||
|
gas: gas => ethUtil.addHexPrefix(gas),
|
||||||
|
gasPrice: gasPrice => ethUtil.addHexPrefix(gasPrice),
|
||||||
|
}
|
||||||
|
|
||||||
|
// apply only keys in the whiteList
|
||||||
|
const normalizedTxParams = {}
|
||||||
|
Object.keys(whiteList).forEach((key) => {
|
||||||
|
if (txParams[key]) normalizedTxParams[key] = whiteList[key](txParams[key])
|
||||||
|
})
|
||||||
|
|
||||||
|
return normalizedTxParams
|
||||||
|
}
|
@ -35,4 +35,5 @@ module.exports = [
|
|||||||
require('./022'),
|
require('./022'),
|
||||||
require('./023'),
|
require('./023'),
|
||||||
require('./024'),
|
require('./024'),
|
||||||
|
require('./025'),
|
||||||
]
|
]
|
||||||
|
49
test/unit/migrations/025-test.js
Normal file
49
test/unit/migrations/025-test.js
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
const assert = require('assert')
|
||||||
|
const migration25 = require('../../../app/scripts/migrations/025')
|
||||||
|
const firstTimeState = {
|
||||||
|
meta: {},
|
||||||
|
data: require('../../../app/scripts/first-time-state'),
|
||||||
|
}
|
||||||
|
|
||||||
|
const storage = {
|
||||||
|
"meta": {},
|
||||||
|
"data": {
|
||||||
|
"TransactionController": {
|
||||||
|
"transactions": [
|
||||||
|
]
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const transactions = []
|
||||||
|
|
||||||
|
|
||||||
|
while (transactions.length <= 10) {
|
||||||
|
transactions.push({ txParams: { from: '0x8aCce2391c0d510a6c5E5d8f819a678f79b7e675', random: 'stuff', chainId: 2 }, status: 'unapproved' })
|
||||||
|
transactions.push({ txParams: { from: '0x8aCce2391c0d510a6c5E5d8f819a678f79b7e675' }, status: 'confirmed' })
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
storage.data.TransactionController.transactions = transactions
|
||||||
|
|
||||||
|
describe('storage is migrated successfully and the txParams.from are lowercase', () => {
|
||||||
|
it('should lowercase the from for unapproved txs', (done) => {
|
||||||
|
migration25.migrate(storage)
|
||||||
|
.then((migratedData) => {
|
||||||
|
const migratedTransactions = migratedData.data.TransactionController.transactions
|
||||||
|
migratedTransactions.forEach((tx) => {
|
||||||
|
if (tx.status === 'unapproved') assert(!tx.txParams.random)
|
||||||
|
if (tx.status === 'unapproved') assert(!tx.txParams.chainId)
|
||||||
|
})
|
||||||
|
done()
|
||||||
|
}).catch(done)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should migrate first time state', (done) => {
|
||||||
|
migration25.migrate(firstTimeState)
|
||||||
|
.then((migratedData) => {
|
||||||
|
assert.equal(migratedData.meta.version, 25)
|
||||||
|
done()
|
||||||
|
}).catch(done)
|
||||||
|
})
|
||||||
|
})
|
@ -36,10 +36,9 @@ const firstTimeState = {
|
|||||||
data: require('../../app/scripts/first-time-state'),
|
data: require('../../app/scripts/first-time-state'),
|
||||||
}
|
}
|
||||||
|
|
||||||
describe.only('Migrator', () => {
|
describe('Migrator', () => {
|
||||||
const migrator = new Migrator({ migrations: stubMigrations })
|
const migrator = new Migrator({ migrations: stubMigrations })
|
||||||
it('migratedData version should be version 3', (done) => {
|
it('migratedData version should be version 3', (done) => {
|
||||||
migrator.on('error', console.log)
|
|
||||||
migrator.migrateData(versionedData)
|
migrator.migrateData(versionedData)
|
||||||
.then((migratedData) => {
|
.then((migratedData) => {
|
||||||
assert.equal(migratedData.meta.version, stubMigrations[2].version)
|
assert.equal(migratedData.meta.version, stubMigrations[2].version)
|
||||||
@ -49,7 +48,6 @@ describe.only('Migrator', () => {
|
|||||||
|
|
||||||
it('should match the last version in live migrations', (done) => {
|
it('should match the last version in live migrations', (done) => {
|
||||||
const migrator = new Migrator({ migrations: liveMigrations })
|
const migrator = new Migrator({ migrations: liveMigrations })
|
||||||
migrator.on('error', console.log)
|
|
||||||
migrator.migrateData(firstTimeState)
|
migrator.migrateData(firstTimeState)
|
||||||
.then((migratedData) => {
|
.then((migratedData) => {
|
||||||
console.log(migratedData)
|
console.log(migratedData)
|
||||||
|
Loading…
Reference in New Issue
Block a user