aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/scripts/controllers/transactions/index.js4
-rw-r--r--app/scripts/controllers/transactions/lib/recipient-blacklist-checker.js6
-rw-r--r--test/unit/app/controllers/transactions/recipient-blacklist-checker-test.js78
3 files changed, 83 insertions, 5 deletions
diff --git a/app/scripts/controllers/transactions/index.js b/app/scripts/controllers/transactions/index.js
index 3d6f5beb5..16f7291d6 100644
--- a/app/scripts/controllers/transactions/index.js
+++ b/app/scripts/controllers/transactions/index.js
@@ -10,7 +10,7 @@ const NonceTracker = require('./nonce-tracker')
const txUtils = require('./lib/util')
const cleanErrorStack = require('../../lib/cleanErrorStack')
const log = require('loglevel')
-const recipientBlackListChecker = require('./lib/recipient-blacklist-checker')
+const recipientBlacklistChecker = require('./lib/recipient-blacklist-checker')
/**
Transaction Controller is an aggregate of sub-controllers and trackers
@@ -161,7 +161,7 @@ class TransactionController extends EventEmitter {
try {
// check whether recipient account is public
- await recipientBlackListChecker.checkAccount(txMeta.metamaskNetworkId, normalizedTxParams.to)
+ await recipientBlacklistChecker.checkAccount(txMeta.metamaskNetworkId, normalizedTxParams.to)
// add default tx params
txMeta = await this.addTxGasDefaults(txMeta)
} catch (error) {
diff --git a/app/scripts/controllers/transactions/lib/recipient-blacklist-checker.js b/app/scripts/controllers/transactions/lib/recipient-blacklist-checker.js
index c52e58863..414302d12 100644
--- a/app/scripts/controllers/transactions/lib/recipient-blacklist-checker.js
+++ b/app/scripts/controllers/transactions/lib/recipient-blacklist-checker.js
@@ -12,8 +12,8 @@ module.exports = {
*/
async function checkAccount (networkId, account) {
- // mainnet's network id === 1
- if (networkId !== 1) {
+ const mainnetId = 1
+ if (networkId !== mainnetId) {
return
}
@@ -33,4 +33,4 @@ async function checkAccount (networkId, account) {
throw new Error('Recipient is a public account')
}
}
-} \ No newline at end of file
+}
diff --git a/test/unit/app/controllers/transactions/recipient-blacklist-checker-test.js b/test/unit/app/controllers/transactions/recipient-blacklist-checker-test.js
new file mode 100644
index 000000000..b55894684
--- /dev/null
+++ b/test/unit/app/controllers/transactions/recipient-blacklist-checker-test.js
@@ -0,0 +1,78 @@
+const assert = require('assert')
+const recipientBlackListChecker = require('../../../../../app/scripts/controllers/transactions/lib/recipient-blacklist-checker')
+const {
+ ROPSTEN_CODE,
+ RINKEYBY_CODE,
+ KOVAN_CODE,
+} = require('../../../../../app/scripts/controllers/network/enums')
+
+const KeyringController = require('eth-keyring-controller')
+
+describe('Recipient Blacklist Checker', function () {
+
+ let publicAccounts
+
+ before(async function () {
+ const damnedMnemonic = 'candy maple cake sugar pudding cream honey rich smooth crumble sweet treat'
+ const keyringController = new KeyringController({})
+ const Keyring = keyringController.getKeyringClassForType('HD Key Tree')
+ const opts = {
+ mnemonic: damnedMnemonic,
+ numberOfAccounts: 10,
+ }
+ const keyring = new Keyring(opts)
+ publicAccounts = await keyring.getAccounts()
+ })
+
+ describe('#checkAccount', function () {
+ it('does not fail on test networks', async function () {
+ let callCount = 0
+ const networks = [ROPSTEN_CODE, RINKEYBY_CODE, KOVAN_CODE]
+ for (let networkId in networks) {
+ await Promise.all(publicAccounts.map(async (account) => {
+ await recipientBlackListChecker.checkAccount(networkId, account)
+ callCount++
+ })
+ )
+ }
+ assert.equal(callCount, 30)
+ })
+
+ it('fails on mainnet', async function () {
+ const mainnetId = 1
+ let callCount = 0
+ await Promise.all(publicAccounts.map(async (account) => {
+ try {
+ await recipientBlackListChecker.checkAccount(mainnetId, account)
+ assert.fail('function should have thrown an error')
+ } catch (err) {
+ assert.equal(err.message, 'Recipient is a public account')
+ }
+ callCount++
+ }))
+ assert.equal(callCount, 10)
+ })
+
+ it('fails for public account - uppercase', async function () {
+ const mainnetId = 1
+ const publicAccount = '0X0D1D4E623D10F9FBA5DB95830F7D3839406C6AF2'
+ try {
+ await recipientBlackListChecker.checkAccount(mainnetId, publicAccount)
+ assert.fail('function should have thrown an error')
+ } catch (err) {
+ assert.equal(err.message, 'Recipient is a public account')
+ }
+ })
+
+ it('fails for public account - lowercase', async function () {
+ const mainnetId = 1
+ const publicAccount = '0x0d1d4e623d10f9fba5db95830f7d3839406c6af2'
+ try {
+ await recipientBlackListChecker.checkAccount(mainnetId, publicAccount)
+ assert.fail('function should have thrown an error')
+ } catch (err) {
+ assert.equal(err.message, 'Recipient is a public account')
+ }
+ })
+ })
+})