aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/_locales/en/messages.json3
-rw-r--r--app/scripts/controllers/transactions/tx-gas-utils.js23
2 files changed, 19 insertions, 7 deletions
diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json
index 66f378ab8..94716a7ad 100644
--- a/app/_locales/en/messages.json
+++ b/app/_locales/en/messages.json
@@ -1154,6 +1154,9 @@
"transactionError": {
"message": "Transaction Error. Exception thrown in contract code."
},
+ "transactionErrorNoContract": {
+ "message": "Trying to call a contract function at an address that is not a contract address."
+ },
"transactionMemo": {
"message": "Transaction memo (optional)"
},
diff --git a/app/scripts/controllers/transactions/tx-gas-utils.js b/app/scripts/controllers/transactions/tx-gas-utils.js
index 3dd45507f..5ec728085 100644
--- a/app/scripts/controllers/transactions/tx-gas-utils.js
+++ b/app/scripts/controllers/transactions/tx-gas-utils.js
@@ -7,6 +7,8 @@ const {
const { addHexPrefix } = require('ethereumjs-util')
const SIMPLE_GAS_COST = '0x5208' // Hex for 21000, cost of a simple send.
+import { TRANSACTION_NO_CONTRACT_ERROR_KEY } from '../../../../ui/app/constants/error-keys'
+
/**
tx-gas-utils are gas utility methods for Transaction manager
its passed ethquery
@@ -32,6 +34,7 @@ class TxGasUtil {
} catch (err) {
txMeta.simulationFails = {
reason: err.message,
+ errorKey: err.errorKey,
}
return txMeta
}
@@ -56,16 +59,22 @@ class TxGasUtil {
return txParams.gas
}
- // if recipient has no code, gas is 21k max:
const recipient = txParams.to
const hasRecipient = Boolean(recipient)
- let code
- if (recipient) code = await this.query.getCode(recipient)
- if (hasRecipient && (!code || code === '0x')) {
- txParams.gas = SIMPLE_GAS_COST
- txMeta.simpleSend = true // Prevents buffer addition
- return SIMPLE_GAS_COST
+ if (hasRecipient) {
+ let code = await this.query.getCode(recipient)
+
+ // If there's data in the params, but there's no code, it's not a valid contract
+ // For no code, Infura will return '0x', and Ganache will return '0x0'
+ if (txParams.data && (!code || code === '0x' || code === '0x0')) {
+ throw {errorKey: TRANSACTION_NO_CONTRACT_ERROR_KEY}
+ }
+ else if (!code) {
+ txParams.gas = SIMPLE_GAS_COST // For a standard ETH send, gas is 21k max
+ txMeta.simpleSend = true // Prevents buffer addition
+ return SIMPLE_GAS_COST
+ }
}
// if not, fall back to block gasLimit