aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/controllers/transactions.js
diff options
context:
space:
mode:
authorkumavis <kumavis@users.noreply.github.com>2018-04-05 06:12:07 +0800
committerGitHub <noreply@github.com>2018-04-05 06:12:07 +0800
commitbcb5f14b06959a9fd147361fa341e587b45baa76 (patch)
tree72dd6dbf4c97409b54bfe857bbe8cb18b6dc7849 /app/scripts/controllers/transactions.js
parente1b1da9113e6d2d7adf0096bbfbbc4a807c07613 (diff)
parent245c01bc0fed585c4ac8ed05edf7ebe1a65de80b (diff)
downloadtangerine-wallet-browser-bcb5f14b06959a9fd147361fa341e587b45baa76.tar
tangerine-wallet-browser-bcb5f14b06959a9fd147361fa341e587b45baa76.tar.gz
tangerine-wallet-browser-bcb5f14b06959a9fd147361fa341e587b45baa76.tar.bz2
tangerine-wallet-browser-bcb5f14b06959a9fd147361fa341e587b45baa76.tar.lz
tangerine-wallet-browser-bcb5f14b06959a9fd147361fa341e587b45baa76.tar.xz
tangerine-wallet-browser-bcb5f14b06959a9fd147361fa341e587b45baa76.tar.zst
tangerine-wallet-browser-bcb5f14b06959a9fd147361fa341e587b45baa76.zip
Merge pull request #3879 from MetaMask/normalize-transactions
Normalize transactions
Diffstat (limited to 'app/scripts/controllers/transactions.js')
-rw-r--r--app/scripts/controllers/transactions.js59
1 files changed, 57 insertions, 2 deletions
diff --git a/app/scripts/controllers/transactions.js b/app/scripts/controllers/transactions.js
index 31e53554d..a73a8b36d 100644
--- a/app/scripts/controllers/transactions.js
+++ b/app/scripts/controllers/transactions.js
@@ -185,7 +185,8 @@ module.exports = class TransactionController extends EventEmitter {
async addUnapprovedTransaction (txParams) {
// validate
- await this.txGasUtil.validateTxParams(txParams)
+ this._validateTxParams(txParams)
+ this._normalizeTxParams(txParams)
// construct txMeta
let txMeta = this.txStateManager.generateTxMeta({txParams})
this.addTx(txMeta)
@@ -215,7 +216,6 @@ module.exports = class TransactionController extends EventEmitter {
}
txParams.gasPrice = ethUtil.addHexPrefix(gasPrice.toString(16))
txParams.value = txParams.value || '0x0'
- if (txParams.to === null) delete txParams.to
// set gasLimit
return await this.txGasUtil.analyzeGasUsage(txMeta)
}
@@ -314,6 +314,61 @@ module.exports = class TransactionController extends EventEmitter {
// PRIVATE METHODS
//
+ _normalizeTxParams (txParams) {
+ delete txParams.chainId
+
+ if ( !txParams.to ) {
+ delete txParams.to
+ } else {
+ txParams.to = ethUtil.addHexPrefix(txParams.to)
+ }
+ 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)
+
+ if (txParams.gas) txParams.gas = ethUtil.addHexPrefix(txParams.gas)
+ if (txParams.gasPrice) txParams.gas = ethUtil.addHexPrefix(txParams.gas)
+ }
+
+ _validateTxParams (txParams) {
+ this._validateFrom(txParams)
+ this._validateRecipient(txParams)
+ if ('value' in txParams) {
+ const value = txParams.value.toString()
+ if (value.includes('-')) {
+ throw new Error(`Invalid transaction value of ${txParams.value} not a positive number.`)
+ }
+
+ if (value.includes('.')) {
+ throw new Error(`Invalid transaction value of ${txParams.value} number must be in wei`)
+ }
+ }
+ }
+
+ _validateFrom (txParams) {
+ if ( !(typeof txParams.from === 'string') ) throw new Error(`Invalid from address ${txParams.from} not a string`)
+ if (!ethUtil.isValidAddress(txParams.from)) throw new Error('Invalid from address')
+ }
+
+ _validateRecipient (txParams) {
+ if (txParams.to === '0x' || txParams.to === null ) {
+ if (txParams.data) {
+ delete txParams.to
+ } else {
+ throw new Error('Invalid recipient address')
+ }
+ } else if ( txParams.to !== undefined && !ethUtil.isValidAddress(txParams.to) ) {
+ throw new Error('Invalid recipient address')
+ }
+ return txParams
+ }
+
_markNonceDuplicatesDropped (txId) {
this.txStateManager.setTxStatusConfirmed(txId)
// get the confirmed transactions nonce and from address