diff --git a/app/scripts/controllers/transactions.js b/app/scripts/controllers/transactions.js index 0b78d62f1..336b0d8f7 100644 --- a/app/scripts/controllers/transactions.js +++ b/app/scripts/controllers/transactions.js @@ -185,10 +185,10 @@ module.exports = class TransactionController extends EventEmitter { async addUnapprovedTransaction (txParams) { // validate - this._validateTxParams(txParams) - this._normalizeTxParams(txParams) + const normalizedTxParams = this._normalizeTxParams(txParams) + this._validateTxParams(normalizedTxParams) // construct txMeta - let txMeta = this.txStateManager.generateTxMeta({txParams}) + let txMeta = this.txStateManager.generateTxMeta({ txParams: normalizedTxParams }) this.addTx(txMeta) this.emit('newUnapprovedTx', txMeta) // add default tx params @@ -315,37 +315,24 @@ module.exports = class TransactionController extends EventEmitter { // _normalizeTxParams (txParams) { - const acceptableKeys = [ - 'from', - 'to', - 'nonce', - 'value', - 'data', - 'gas', - 'gasPrice', - ] - Object.keys(txParams).forEach((key) => { - if (!acceptableKeys.includes(key)) delete txParams[key] - }) - delete txParams.chainId - - if ( !txParams.to ) { - delete txParams.to - } else { - txParams.to = ethUtil.addHexPrefix(txParams.to) + // 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), } - txParams.from = ethUtil.addHexPrefix(txParams.from).toLowerCase() - if (!txParams.data) { - delete txParams.data - } else { - txParams.data = ethUtil.addHexPrefix(txParams.data) - } - - if (txParams.value) txParams.value = ethUtil.addHexPrefix(txParams.value) + // apply only keys in the whiteList + const normalizedTxParams = {} + Object.keys(whiteList).forEach((key) => { + if (txParams[key]) normalizedTxParams[key] = whiteList[key](txParams[key]) + }) - if (txParams.gas) txParams.gas = ethUtil.addHexPrefix(txParams.gas) - if (txParams.gasPrice) txParams.gas = ethUtil.addHexPrefix(txParams.gas) + return normalizedTxParams } _validateTxParams (txParams) { diff --git a/test/unit/tx-controller-test.js b/test/unit/tx-controller-test.js index e552464cf..824574ff2 100644 --- a/test/unit/tx-controller-test.js +++ b/test/unit/tx-controller-test.js @@ -242,17 +242,17 @@ describe('Transaction Controller', function () { random: 'hello world', } - txController._normalizeTxParams(txParams) + let normalizedTxParams = txController._normalizeTxParams(txParams) - assert(!txParams.chainId, 'their should be no chainId') - assert(!txParams.to, 'their should be no to address if null') - assert.equal(txParams.from.slice(0, 2), '0x', 'from should be hexPrefixd') - assert.equal(txParams.data.slice(0, 2), '0x', 'data should be hexPrefixd') - assert(!('random' in txParams), 'their should be no random key in txParams') - txParams.to = 'a7df1beDBF813f57096dF77FCd515f0B3900e402' + assert(!normalizedTxParams.chainId, 'their should be no chainId') + assert(!normalizedTxParams.to, 'their should be no to address if null') + assert.equal(normalizedTxParams.from.slice(0, 2), '0x', 'from should be hexPrefixd') + assert.equal(normalizedTxParams.data.slice(0, 2), '0x', 'data should be hexPrefixd') + assert(!('random' in normalizedTxParams), 'their should be no random key in normalizedTxParams') - txController._normalizeTxParams(txParams) - assert.equal(txParams.to.slice(0, 2), '0x', 'to should be hexPrefixd') + txParams.to = 'a7df1beDBF813f57096dF77FCd515f0B3900e402' + normalizedTxParams = txController._normalizeTxParams(txParams) + assert.equal(normalizedTxParams.to.slice(0, 2), '0x', 'to should be hexPrefixd') }) })