mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 01:39:44 +01:00
commit
77486a2365
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('./023'),
|
||||
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)
|
||||
})
|
||||
})
|
@ -1,7 +1,8 @@
|
||||
const assert = require('assert')
|
||||
const clone = require('clone')
|
||||
const Migrator = require('../../app/scripts/lib/migrator/')
|
||||
const migrations = [
|
||||
const liveMigrations = require('../../app/scripts/migrations/')
|
||||
const stubMigrations = [
|
||||
{
|
||||
version: 1,
|
||||
migrate: (data) => {
|
||||
@ -29,13 +30,31 @@ const migrations = [
|
||||
},
|
||||
]
|
||||
const versionedData = {meta: {version: 0}, data: {hello: 'world'}}
|
||||
|
||||
const firstTimeState = {
|
||||
meta: { version: 0 },
|
||||
data: require('../../app/scripts/first-time-state'),
|
||||
}
|
||||
|
||||
describe('Migrator', () => {
|
||||
const migrator = new Migrator({ migrations })
|
||||
const migrator = new Migrator({ migrations: stubMigrations })
|
||||
it('migratedData version should be version 3', (done) => {
|
||||
migrator.migrateData(versionedData)
|
||||
.then((migratedData) => {
|
||||
assert.equal(migratedData.meta.version, migrations[2].version)
|
||||
assert.equal(migratedData.meta.version, stubMigrations[2].version)
|
||||
done()
|
||||
}).catch(done)
|
||||
})
|
||||
|
||||
it('should match the last version in live migrations', (done) => {
|
||||
const migrator = new Migrator({ migrations: liveMigrations })
|
||||
migrator.migrateData(firstTimeState)
|
||||
.then((migratedData) => {
|
||||
console.log(migratedData)
|
||||
const last = liveMigrations.length - 1
|
||||
assert.equal(migratedData.meta.version, liveMigrations[last].version)
|
||||
done()
|
||||
}).catch(done)
|
||||
})
|
||||
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user