aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/migrations/025.js
blob: fd4faa782cf987982df07d53bd5f91ecd960179d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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: () => 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
}