Merge pull request #4321 from MetaMask/testing
MM controller tests and reorganizing test filesfeature/default_network_editable
commit
cee55b47d0
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const ComposableObservableStore = require('../../app/scripts/lib/ComposableObservableStore') |
const ComposableObservableStore = require('../../../app/scripts/lib/ComposableObservableStore') |
||||||
const ObservableStore = require('obs-store') |
const ObservableStore = require('obs-store') |
||||||
|
|
||||||
describe('ComposableObservableStore', () => { |
describe('ComposableObservableStore', () => { |
@ -0,0 +1,31 @@ |
|||||||
|
const assert = require('assert') |
||||||
|
const path = require('path') |
||||||
|
const accountImporter = require('../../../app/scripts/account-import-strategies/index') |
||||||
|
const ethUtil = require('ethereumjs-util') |
||||||
|
|
||||||
|
describe('Account Import Strategies', function () { |
||||||
|
const privkey = '0x4cfd3e90fc78b0f86bf7524722150bb8da9c60cd532564d7ff43f5716514f553' |
||||||
|
const json = '{"version":3,"id":"dbb54385-0a99-437f-83c0-647de9f244c3","address":"a7f92ce3fba24196cf6f4bd2e1eb3db282ba998c","Crypto":{"ciphertext":"bde13d9ade5c82df80281ca363320ce254a8a3a06535bbf6ffdeaf0726b1312c","cipherparams":{"iv":"fbf93718a57f26051b292f072f2e5b41"},"cipher":"aes-128-ctr","kdf":"scrypt","kdfparams":{"dklen":32,"salt":"7ffe00488319dec48e4c49a120ca49c6afbde9272854c64d9541c83fc6acdffe","n":8192,"r":8,"p":1},"mac":"2adfd9c4bc1cdac4c85bddfb31d9e21a684e0e050247a70c5698facf6b7d4681"}}' |
||||||
|
|
||||||
|
it('imports a private key and strips 0x prefix', async function () { |
||||||
|
const importPrivKey = await accountImporter.importAccount('Private Key', [ privkey ]) |
||||||
|
assert.equal(importPrivKey, ethUtil.stripHexPrefix(privkey)) |
||||||
|
}) |
||||||
|
|
||||||
|
it('fails when password is incorrect for keystore', async function () { |
||||||
|
const wrongPassword = 'password2' |
||||||
|
|
||||||
|
try { |
||||||
|
await accountImporter.importAccount('JSON File', [ json, wrongPassword]) |
||||||
|
} catch (error) { |
||||||
|
assert.equal(error.message, 'Key derivation failed - possibly wrong passphrase') |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
it('imports json string and password to return a private key', async function () { |
||||||
|
const fileContentsPassword = 'password1' |
||||||
|
const importJson = await accountImporter.importAccount('JSON File', [ json, fileContentsPassword]) |
||||||
|
assert.equal(importJson, '0x5733876abe94146069ce8bcbabbde2677f2e35fa33e875e92041ed2ac87e5bc7') |
||||||
|
}) |
||||||
|
|
||||||
|
}) |
@ -0,0 +1,48 @@ |
|||||||
|
const assert = require('assert') |
||||||
|
const getBuyEthUrl = require('../../../app/scripts/lib/buy-eth-url') |
||||||
|
|
||||||
|
describe('', function () { |
||||||
|
const mainnet = { |
||||||
|
network: '1', |
||||||
|
amount: 5, |
||||||
|
address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc', |
||||||
|
} |
||||||
|
const ropsten = { |
||||||
|
network: '3', |
||||||
|
} |
||||||
|
const rinkeby = { |
||||||
|
network: '4', |
||||||
|
} |
||||||
|
const kovan = { |
||||||
|
network: '42', |
||||||
|
} |
||||||
|
|
||||||
|
it('returns coinbase url with amount and address for network 1', function () { |
||||||
|
const coinbaseUrl = getBuyEthUrl(mainnet) |
||||||
|
const coinbase = coinbaseUrl.match(/(https:\/\/buy.coinbase.com)/) |
||||||
|
const amount = coinbaseUrl.match(/(amount)\D\d/) |
||||||
|
const address = coinbaseUrl.match(/(address)(.*)(?=&)/) |
||||||
|
|
||||||
|
assert.equal(coinbase[0], 'https://buy.coinbase.com') |
||||||
|
assert.equal(amount[0], 'amount=5') |
||||||
|
assert.equal(address[0], 'address=0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc') |
||||||
|
|
||||||
|
}) |
||||||
|
|
||||||
|
it('returns metamask ropsten faucet for network 3', function () { |
||||||
|
const ropstenUrl = getBuyEthUrl(ropsten) |
||||||
|
assert.equal(ropstenUrl, 'https://faucet.metamask.io/') |
||||||
|
}) |
||||||
|
|
||||||
|
it('returns rinkeby dapp for network 4', function () { |
||||||
|
const rinkebyUrl = getBuyEthUrl(rinkeby) |
||||||
|
assert.equal(rinkebyUrl, 'https://www.rinkeby.io/') |
||||||
|
}) |
||||||
|
|
||||||
|
it('returns kovan github test faucet for network 42', function () { |
||||||
|
const kovanUrl = getBuyEthUrl(kovan) |
||||||
|
assert.equal(kovanUrl, 'https://github.com/kovan-testnet/faucet') |
||||||
|
}) |
||||||
|
|
||||||
|
}) |
||||||
|
|
@ -1,5 +1,5 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const AddressBookController = require('../../app/scripts/controllers/address-book') |
const AddressBookController = require('../../../../app/scripts/controllers/address-book') |
||||||
|
|
||||||
const stubPreferencesStore = { |
const stubPreferencesStore = { |
||||||
getState: function () { |
getState: function () { |
@ -1,5 +1,5 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const BlacklistController = require('../../app/scripts/controllers/blacklist') |
const BlacklistController = require('../../../../app/scripts/controllers/blacklist') |
||||||
|
|
||||||
describe('blacklist controller', function () { |
describe('blacklist controller', function () { |
||||||
let blacklistController |
let blacklistController |
@ -0,0 +1,550 @@ |
|||||||
|
const assert = require('assert') |
||||||
|
const sinon = require('sinon') |
||||||
|
const clone = require('clone') |
||||||
|
const nock = require('nock') |
||||||
|
const createThoughStream = require('through2').obj |
||||||
|
const MetaMaskController = require('../../../../app/scripts/metamask-controller') |
||||||
|
const blacklistJSON = require('eth-phishing-detect/src/config') |
||||||
|
const firstTimeState = require('../../../../app/scripts/first-time-state') |
||||||
|
|
||||||
|
const currentNetworkId = 42 |
||||||
|
const DEFAULT_LABEL = 'Account 1' |
||||||
|
const TEST_SEED = 'debris dizzy just program just float decrease vacant alarm reduce speak stadium' |
||||||
|
const TEST_ADDRESS = '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc' |
||||||
|
const TEST_SEED_ALT = 'setup olympic issue mobile velvet surge alcohol burger horse view reopen gentle' |
||||||
|
const TEST_ADDRESS_ALT = '0xc42edfcc21ed14dda456aa0756c153f7985d8813' |
||||||
|
|
||||||
|
describe('MetaMaskController', function () { |
||||||
|
let metamaskController |
||||||
|
const sandbox = sinon.createSandbox() |
||||||
|
const noop = () => {} |
||||||
|
|
||||||
|
beforeEach(function () { |
||||||
|
|
||||||
|
nock('https://api.infura.io') |
||||||
|
.persist() |
||||||
|
.get('/v2/blacklist') |
||||||
|
.reply(200, blacklistJSON) |
||||||
|
|
||||||
|
nock('https://api.infura.io') |
||||||
|
.get('/v1/ticker/ethusd') |
||||||
|
.reply(200, '{"base": "ETH", "quote": "USD", "bid": 288.45, "ask": 288.46, "volume": 112888.17569277, "exchange": "bitfinex", "total_volume": 272175.00106721005, "num_exchanges": 8, "timestamp": 1506444677}') |
||||||
|
|
||||||
|
nock('https://api.infura.io') |
||||||
|
.get('/v1/ticker/ethjpy') |
||||||
|
.reply(200, '{"base": "ETH", "quote": "JPY", "bid": 32300.0, "ask": 32400.0, "volume": 247.4616071, "exchange": "kraken", "total_volume": 247.4616071, "num_exchanges": 1, "timestamp": 1506444676}') |
||||||
|
|
||||||
|
nock('https://api.infura.io') |
||||||
|
.persist() |
||||||
|
.get(/.*/) |
||||||
|
.reply(200) |
||||||
|
|
||||||
|
metamaskController = new MetaMaskController({ |
||||||
|
showUnapprovedTx: noop, |
||||||
|
showUnconfirmedMessage: noop, |
||||||
|
encryptor: { |
||||||
|
encrypt: function (password, object) { |
||||||
|
this.object = object |
||||||
|
return Promise.resolve() |
||||||
|
}, |
||||||
|
decrypt: function () { |
||||||
|
return Promise.resolve(this.object) |
||||||
|
}, |
||||||
|
}, |
||||||
|
initState: clone(firstTimeState), |
||||||
|
}) |
||||||
|
sandbox.spy(metamaskController.keyringController, 'createNewVaultAndKeychain') |
||||||
|
sandbox.spy(metamaskController.keyringController, 'createNewVaultAndRestore') |
||||||
|
}) |
||||||
|
|
||||||
|
afterEach(function () { |
||||||
|
nock.cleanAll() |
||||||
|
sandbox.restore() |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#getGasPrice', function () { |
||||||
|
|
||||||
|
it('gives the 50th percentile lowest accepted gas price from recentBlocksController', async function () { |
||||||
|
const realRecentBlocksController = metamaskController.recentBlocksController |
||||||
|
metamaskController.recentBlocksController = { |
||||||
|
store: { |
||||||
|
getState: () => { |
||||||
|
return { |
||||||
|
recentBlocks: [ |
||||||
|
{ gasPrices: [ '0x3b9aca00', '0x174876e800'] }, |
||||||
|
{ gasPrices: [ '0x3b9aca00', '0x174876e800'] }, |
||||||
|
{ gasPrices: [ '0x174876e800', '0x174876e800' ]}, |
||||||
|
{ gasPrices: [ '0x174876e800', '0x174876e800' ]}, |
||||||
|
], |
||||||
|
} |
||||||
|
}, |
||||||
|
}, |
||||||
|
} |
||||||
|
|
||||||
|
const gasPrice = metamaskController.getGasPrice() |
||||||
|
assert.equal(gasPrice, '0x3b9aca00', 'accurately estimates 50th percentile accepted gas price') |
||||||
|
|
||||||
|
metamaskController.recentBlocksController = realRecentBlocksController |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#createNewVaultAndKeychain', function () { |
||||||
|
it('can only create new vault on keyringController once', async function () { |
||||||
|
const selectStub = sandbox.stub(metamaskController, 'selectFirstIdentity') |
||||||
|
|
||||||
|
const password = 'a-fake-password' |
||||||
|
|
||||||
|
await metamaskController.createNewVaultAndKeychain(password) |
||||||
|
await metamaskController.createNewVaultAndKeychain(password) |
||||||
|
|
||||||
|
assert(metamaskController.keyringController.createNewVaultAndKeychain.calledOnce) |
||||||
|
|
||||||
|
selectStub.reset() |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#createNewVaultAndRestore', function () { |
||||||
|
it('should be able to call newVaultAndRestore despite a mistake.', async function () { |
||||||
|
const password = 'what-what-what' |
||||||
|
await metamaskController.createNewVaultAndRestore(password, TEST_SEED.slice(0, -1)).catch((e) => null) |
||||||
|
await metamaskController.createNewVaultAndRestore(password, TEST_SEED) |
||||||
|
|
||||||
|
assert(metamaskController.keyringController.createNewVaultAndRestore.calledTwice) |
||||||
|
}) |
||||||
|
|
||||||
|
it('should clear previous identities after vault restoration', async () => { |
||||||
|
await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED) |
||||||
|
assert.deepEqual(metamaskController.getState().identities, { |
||||||
|
[TEST_ADDRESS]: { address: TEST_ADDRESS, name: DEFAULT_LABEL }, |
||||||
|
}) |
||||||
|
|
||||||
|
await metamaskController.preferencesController.setAccountLabel(TEST_ADDRESS, 'Account Foo') |
||||||
|
assert.deepEqual(metamaskController.getState().identities, { |
||||||
|
[TEST_ADDRESS]: { address: TEST_ADDRESS, name: 'Account Foo' }, |
||||||
|
}) |
||||||
|
|
||||||
|
await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED_ALT) |
||||||
|
assert.deepEqual(metamaskController.getState().identities, { |
||||||
|
[TEST_ADDRESS_ALT]: { address: TEST_ADDRESS_ALT, name: DEFAULT_LABEL }, |
||||||
|
}) |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#getApi', function () { |
||||||
|
let getApi, state |
||||||
|
|
||||||
|
beforeEach(function () { |
||||||
|
getApi = metamaskController.getApi() |
||||||
|
}) |
||||||
|
|
||||||
|
it('getState', function (done) { |
||||||
|
getApi.getState((err, res) => { |
||||||
|
if (err) { |
||||||
|
done(err) |
||||||
|
} else { |
||||||
|
state = res |
||||||
|
} |
||||||
|
}) |
||||||
|
assert.deepEqual(state, metamaskController.getState()) |
||||||
|
done() |
||||||
|
}) |
||||||
|
|
||||||
|
}) |
||||||
|
|
||||||
|
describe('preferencesController', function () { |
||||||
|
|
||||||
|
it('defaults useBlockie to false', function () { |
||||||
|
assert.equal(metamaskController.preferencesController.store.getState().useBlockie, false) |
||||||
|
}) |
||||||
|
|
||||||
|
it('setUseBlockie to true', function () { |
||||||
|
metamaskController.setUseBlockie(true, noop) |
||||||
|
assert.equal(metamaskController.preferencesController.store.getState().useBlockie, true) |
||||||
|
}) |
||||||
|
|
||||||
|
}) |
||||||
|
|
||||||
|
describe('#selectFirstIdentity', function () { |
||||||
|
let identities, address |
||||||
|
|
||||||
|
beforeEach(function () { |
||||||
|
address = '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc' |
||||||
|
identities = { |
||||||
|
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': { |
||||||
|
'address': address, |
||||||
|
'name': 'Account 1', |
||||||
|
}, |
||||||
|
'0xc42edfcc21ed14dda456aa0756c153f7985d8813': { |
||||||
|
'address': '0xc42edfcc21ed14dda456aa0756c153f7985d8813', |
||||||
|
'name': 'Account 2', |
||||||
|
}, |
||||||
|
} |
||||||
|
metamaskController.preferencesController.store.updateState({ identities }) |
||||||
|
metamaskController.selectFirstIdentity() |
||||||
|
}) |
||||||
|
|
||||||
|
it('changes preferences controller select address', function () { |
||||||
|
const preferenceControllerState = metamaskController.preferencesController.store.getState() |
||||||
|
assert.equal(preferenceControllerState.selectedAddress, address) |
||||||
|
}) |
||||||
|
|
||||||
|
it('changes metamask controller selected address', function () { |
||||||
|
const metamaskState = metamaskController.getState() |
||||||
|
assert.equal(metamaskState.selectedAddress, address) |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#setCustomRpc', function () { |
||||||
|
const customRPC = 'https://custom.rpc/' |
||||||
|
let rpcTarget |
||||||
|
|
||||||
|
beforeEach(function () { |
||||||
|
|
||||||
|
nock('https://custom.rpc') |
||||||
|
.post('/') |
||||||
|
.reply(200) |
||||||
|
|
||||||
|
rpcTarget = metamaskController.setCustomRpc(customRPC) |
||||||
|
}) |
||||||
|
|
||||||
|
afterEach(function () { |
||||||
|
nock.cleanAll() |
||||||
|
}) |
||||||
|
|
||||||
|
it('returns custom RPC that when called', async function () { |
||||||
|
assert.equal(await rpcTarget, customRPC) |
||||||
|
}) |
||||||
|
|
||||||
|
it('changes the network controller rpc', function () { |
||||||
|
const networkControllerState = metamaskController.networkController.store.getState() |
||||||
|
assert.equal(networkControllerState.provider.rpcTarget, customRPC) |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#setCurrentCurrency', function () { |
||||||
|
let defaultMetaMaskCurrency |
||||||
|
|
||||||
|
beforeEach(function () { |
||||||
|
defaultMetaMaskCurrency = metamaskController.currencyController.getCurrentCurrency() |
||||||
|
}) |
||||||
|
|
||||||
|
it('defaults to usd', function () { |
||||||
|
assert.equal(defaultMetaMaskCurrency, 'usd') |
||||||
|
}) |
||||||
|
|
||||||
|
it('sets currency to JPY', function () { |
||||||
|
metamaskController.setCurrentCurrency('JPY', noop) |
||||||
|
assert.equal(metamaskController.currencyController.getCurrentCurrency(), 'JPY') |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#createShapeshifttx', function () { |
||||||
|
let depositAddress, depositType, shapeShiftTxList |
||||||
|
|
||||||
|
beforeEach(function () { |
||||||
|
nock('https://shapeshift.io') |
||||||
|
.get('/txStat/3EevLFfB4H4XMWQwYCgjLie1qCAGpd2WBc') |
||||||
|
.reply(200, '{"status": "no_deposits", "address": "3EevLFfB4H4XMWQwYCgjLie1qCAGpd2WBc"}') |
||||||
|
|
||||||
|
depositAddress = '3EevLFfB4H4XMWQwYCgjLie1qCAGpd2WBc' |
||||||
|
depositType = 'ETH' |
||||||
|
shapeShiftTxList = metamaskController.shapeshiftController.store.getState().shapeShiftTxList |
||||||
|
}) |
||||||
|
|
||||||
|
it('creates a shapeshift tx', async function () { |
||||||
|
metamaskController.createShapeShiftTx(depositAddress, depositType) |
||||||
|
assert.equal(shapeShiftTxList[0].depositAddress, depositAddress) |
||||||
|
}) |
||||||
|
|
||||||
|
}) |
||||||
|
|
||||||
|
describe('#addNewAccount', function () { |
||||||
|
let addNewAccount |
||||||
|
|
||||||
|
beforeEach(function () { |
||||||
|
addNewAccount = metamaskController.addNewAccount() |
||||||
|
}) |
||||||
|
|
||||||
|
it('errors when an primary keyring is does not exist', async function () { |
||||||
|
try { |
||||||
|
await addNewAccount |
||||||
|
assert.equal(1 === 0) |
||||||
|
} catch (e) { |
||||||
|
assert.equal(e.message, 'MetamaskController - No HD Key Tree found') |
||||||
|
} |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#verifyseedPhrase', function () { |
||||||
|
let seedPhrase, getConfigSeed |
||||||
|
|
||||||
|
it('errors when no keying is provided', async function () { |
||||||
|
try { |
||||||
|
await metamaskController.verifySeedPhrase() |
||||||
|
} catch (error) { |
||||||
|
assert.equal(error.message, 'MetamaskController - No HD Key Tree found') |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
beforeEach(async function () { |
||||||
|
await metamaskController.createNewVaultAndKeychain('password') |
||||||
|
seedPhrase = await metamaskController.verifySeedPhrase() |
||||||
|
}) |
||||||
|
|
||||||
|
it('#placeSeedWords should match the initially created vault seed', function () { |
||||||
|
|
||||||
|
metamaskController.placeSeedWords((err, result) => { |
||||||
|
if (err) { |
||||||
|
console.log(err) |
||||||
|
} else { |
||||||
|
getConfigSeed = metamaskController.configManager.getSeedWords() |
||||||
|
assert.equal(result, seedPhrase) |
||||||
|
assert.equal(result, getConfigSeed) |
||||||
|
} |
||||||
|
}) |
||||||
|
assert.equal(getConfigSeed, undefined) |
||||||
|
}) |
||||||
|
|
||||||
|
it('#addNewAccount', async function () { |
||||||
|
await metamaskController.addNewAccount() |
||||||
|
const getAccounts = await metamaskController.keyringController.getAccounts() |
||||||
|
assert.equal(getAccounts.length, 2) |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#resetAccount', function () { |
||||||
|
|
||||||
|
beforeEach(function () { |
||||||
|
const selectedAddressStub = sinon.stub(metamaskController.preferencesController, 'getSelectedAddress') |
||||||
|
const getNetworkstub = sinon.stub(metamaskController.txController.txStateManager, 'getNetwork') |
||||||
|
|
||||||
|
selectedAddressStub.returns('0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc') |
||||||
|
getNetworkstub.returns(42) |
||||||
|
|
||||||
|
metamaskController.txController.txStateManager._saveTxList([ |
||||||
|
{ id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {from: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc'} }, |
||||||
|
{ id: 2, status: 'rejected', metamaskNetworkId: 32, txParams: {} }, |
||||||
|
{ id: 3, status: 'submitted', metamaskNetworkId: currentNetworkId, txParams: {from: '0xB09d8505E1F4EF1CeA089D47094f5DD3464083d4'} }, |
||||||
|
]) |
||||||
|
}) |
||||||
|
|
||||||
|
it('wipes transactions from only the correct network id and with the selected address', async function () { |
||||||
|
await metamaskController.resetAccount() |
||||||
|
assert.equal(metamaskController.txController.txStateManager.getTx(1), undefined) |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#clearSeedWordCache', function () { |
||||||
|
|
||||||
|
it('should have set seed words', function () { |
||||||
|
metamaskController.configManager.setSeedWords('test words') |
||||||
|
const getConfigSeed = metamaskController.configManager.getSeedWords() |
||||||
|
assert.equal(getConfigSeed, 'test words') |
||||||
|
}) |
||||||
|
|
||||||
|
it('should clear config seed phrase', function () { |
||||||
|
metamaskController.configManager.setSeedWords('test words') |
||||||
|
metamaskController.clearSeedWordCache((err, result) => { |
||||||
|
if (err) console.log(err) |
||||||
|
}) |
||||||
|
const getConfigSeed = metamaskController.configManager.getSeedWords() |
||||||
|
assert.equal(getConfigSeed, null) |
||||||
|
}) |
||||||
|
|
||||||
|
}) |
||||||
|
|
||||||
|
describe('#setCurrentLocale', function () { |
||||||
|
|
||||||
|
it('checks the default currentLocale', function () { |
||||||
|
const preferenceCurrentLocale = metamaskController.preferencesController.store.getState().currentLocale |
||||||
|
assert.equal(preferenceCurrentLocale, undefined) |
||||||
|
}) |
||||||
|
|
||||||
|
it('sets current locale in preferences controller', function () { |
||||||
|
metamaskController.setCurrentLocale('ja', noop) |
||||||
|
const preferenceCurrentLocale = metamaskController.preferencesController.store.getState().currentLocale |
||||||
|
assert.equal(preferenceCurrentLocale, 'ja') |
||||||
|
}) |
||||||
|
|
||||||
|
}) |
||||||
|
|
||||||
|
describe('#newUnsignedMessage', function () { |
||||||
|
|
||||||
|
let msgParams, metamaskMsgs, messages, msgId |
||||||
|
|
||||||
|
const address = '0xc42edfcc21ed14dda456aa0756c153f7985d8813' |
||||||
|
const data = '0x43727970746f6b697474696573' |
||||||
|
|
||||||
|
beforeEach(async function () { |
||||||
|
|
||||||
|
await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED_ALT) |
||||||
|
|
||||||
|
msgParams = { |
||||||
|
'from': address, |
||||||
|
'data': data, |
||||||
|
} |
||||||
|
|
||||||
|
metamaskController.newUnsignedMessage(msgParams, noop) |
||||||
|
metamaskMsgs = metamaskController.messageManager.getUnapprovedMsgs() |
||||||
|
messages = metamaskController.messageManager.messages |
||||||
|
msgId = Object.keys(metamaskMsgs)[0] |
||||||
|
messages[0].msgParams.metamaskId = parseInt(msgId) |
||||||
|
}) |
||||||
|
|
||||||
|
it('persists address from msg params', function () { |
||||||
|
assert.equal(metamaskMsgs[msgId].msgParams.from, address) |
||||||
|
}) |
||||||
|
|
||||||
|
it('persists data from msg params', function () { |
||||||
|
assert.equal(metamaskMsgs[msgId].msgParams.data, data) |
||||||
|
}) |
||||||
|
|
||||||
|
it('sets the status to unapproved', function () { |
||||||
|
assert.equal(metamaskMsgs[msgId].status, 'unapproved') |
||||||
|
}) |
||||||
|
|
||||||
|
it('sets the type to eth_sign', function () { |
||||||
|
assert.equal(metamaskMsgs[msgId].type, 'eth_sign') |
||||||
|
}) |
||||||
|
|
||||||
|
it('rejects the message', function () { |
||||||
|
const msgIdInt = parseInt(msgId) |
||||||
|
metamaskController.cancelMessage(msgIdInt, noop) |
||||||
|
assert.equal(messages[0].status, 'rejected') |
||||||
|
}) |
||||||
|
|
||||||
|
it('errors when signing a message', async function () { |
||||||
|
try { |
||||||
|
await metamaskController.signMessage(messages[0].msgParams) |
||||||
|
} catch (error) { |
||||||
|
assert.equal(error.message, 'message length is invalid') |
||||||
|
} |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#newUnsignedPersonalMessage', function () { |
||||||
|
|
||||||
|
it('errors with no from in msgParams', function () { |
||||||
|
const msgParams = { |
||||||
|
'data': data, |
||||||
|
} |
||||||
|
metamaskController.newUnsignedPersonalMessage(msgParams, function (error) { |
||||||
|
assert.equal(error.message, 'MetaMask Message Signature: from field is required.') |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
let msgParams, metamaskPersonalMsgs, personalMessages, msgId |
||||||
|
|
||||||
|
const address = '0xc42edfcc21ed14dda456aa0756c153f7985d8813' |
||||||
|
const data = '0x43727970746f6b697474696573' |
||||||
|
|
||||||
|
beforeEach(async function () { |
||||||
|
|
||||||
|
await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED_ALT) |
||||||
|
|
||||||
|
msgParams = { |
||||||
|
'from': address, |
||||||
|
'data': data, |
||||||
|
} |
||||||
|
|
||||||
|
metamaskController.newUnsignedPersonalMessage(msgParams, noop) |
||||||
|
metamaskPersonalMsgs = metamaskController.personalMessageManager.getUnapprovedMsgs() |
||||||
|
personalMessages = metamaskController.personalMessageManager.messages |
||||||
|
msgId = Object.keys(metamaskPersonalMsgs)[0] |
||||||
|
personalMessages[0].msgParams.metamaskId = parseInt(msgId) |
||||||
|
}) |
||||||
|
|
||||||
|
it('persists address from msg params', function () { |
||||||
|
assert.equal(metamaskPersonalMsgs[msgId].msgParams.from, address) |
||||||
|
}) |
||||||
|
|
||||||
|
it('persists data from msg params', function () { |
||||||
|
assert.equal(metamaskPersonalMsgs[msgId].msgParams.data, data) |
||||||
|
}) |
||||||
|
|
||||||
|
it('sets the status to unapproved', function () { |
||||||
|
assert.equal(metamaskPersonalMsgs[msgId].status, 'unapproved') |
||||||
|
}) |
||||||
|
|
||||||
|
it('sets the type to personal_sign', function () { |
||||||
|
assert.equal(metamaskPersonalMsgs[msgId].type, 'personal_sign') |
||||||
|
}) |
||||||
|
|
||||||
|
it('rejects the message', function () { |
||||||
|
const msgIdInt = parseInt(msgId) |
||||||
|
metamaskController.cancelPersonalMessage(msgIdInt, noop) |
||||||
|
assert.equal(personalMessages[0].status, 'rejected') |
||||||
|
}) |
||||||
|
|
||||||
|
it('errors when signing a message', async function () { |
||||||
|
await metamaskController.signPersonalMessage(personalMessages[0].msgParams) |
||||||
|
assert.equal(metamaskPersonalMsgs[msgId].status, 'signed') |
||||||
|
assert.equal(metamaskPersonalMsgs[msgId].rawSig, '0x6a1b65e2b8ed53cf398a769fad24738f9fbe29841fe6854e226953542c4b6a173473cb152b6b1ae5f06d601d45dd699a129b0a8ca84e78b423031db5baa734741b')
|
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#setupUntrustedCommunication', function () { |
||||||
|
let streamTest |
||||||
|
|
||||||
|
const phishingUrl = 'decentral.market' |
||||||
|
|
||||||
|
afterEach(function () { |
||||||
|
streamTest.end() |
||||||
|
}) |
||||||
|
|
||||||
|
it('sets up phishing stream for untrusted communication ', async function () { |
||||||
|
await metamaskController.blacklistController.updatePhishingList() |
||||||
|
|
||||||
|
streamTest = createThoughStream((chunk, enc, cb) => { |
||||||
|
assert.equal(chunk.name, 'phishing') |
||||||
|
assert.equal(chunk.data.hostname, phishingUrl) |
||||||
|
cb() |
||||||
|
}) |
||||||
|
// console.log(streamTest)
|
||||||
|
metamaskController.setupUntrustedCommunication(streamTest, phishingUrl) |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#setupTrustedCommunication', function () { |
||||||
|
let streamTest |
||||||
|
|
||||||
|
afterEach(function () { |
||||||
|
streamTest.end() |
||||||
|
}) |
||||||
|
|
||||||
|
it('sets up controller dnode api for trusted communication', function (done) { |
||||||
|
streamTest = createThoughStream((chunk, enc, cb) => {
|
||||||
|
assert.equal(chunk.name, 'controller') |
||||||
|
cb() |
||||||
|
done() |
||||||
|
}) |
||||||
|
|
||||||
|
metamaskController.setupTrustedCommunication(streamTest, 'mycrypto.com') |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#markAccountsFound', function () { |
||||||
|
it('adds lost accounts to config manager data', function () { |
||||||
|
metamaskController.markAccountsFound(noop) |
||||||
|
const configManagerData = metamaskController.configManager.getData() |
||||||
|
assert.deepEqual(configManagerData.lostAccounts, []) |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#markPasswordForgotten', function () { |
||||||
|
it('adds and sets forgottenPassword to config data to true', function () { |
||||||
|
metamaskController.markPasswordForgotten(noop) |
||||||
|
const configManagerData = metamaskController.configManager.getData() |
||||||
|
assert.equal(configManagerData.forgottenPassword, true) |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
describe('#unMarkPasswordForgotten', function () { |
||||||
|
it('adds and sets forgottenPassword to config data to false', function () { |
||||||
|
metamaskController.unMarkPasswordForgotten(noop) |
||||||
|
const configManagerData = metamaskController.configManager.getData() |
||||||
|
assert.equal(configManagerData.forgottenPassword, false) |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
}) |
@ -1,11 +1,11 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const nock = require('nock') |
const nock = require('nock') |
||||||
const NetworkController = require('../../app/scripts/controllers/network') |
const NetworkController = require('../../../../app/scripts/controllers/network') |
||||||
const { |
const { |
||||||
getNetworkDisplayName, |
getNetworkDisplayName, |
||||||
} = require('../../app/scripts/controllers/network/util') |
} = require('../../../../app/scripts/controllers/network/util') |
||||||
|
|
||||||
const { createTestProviderTools } = require('../stub/provider') |
const { createTestProviderTools } = require('../../../stub/provider') |
||||||
const providerResultStub = {} |
const providerResultStub = {} |
||||||
|
|
||||||
describe('# Network Controller', function () { |
describe('# Network Controller', function () { |
@ -1,6 +1,6 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const configManagerGen = require('../lib/mock-config-manager') |
const configManagerGen = require('../../../lib/mock-config-manager') |
||||||
const NoticeController = require('../../app/scripts/notice-controller') |
const NoticeController = require('../../../../app/scripts/notice-controller') |
||||||
|
|
||||||
describe('notice-controller', function () { |
describe('notice-controller', function () { |
||||||
var noticeController |
var noticeController |
@ -1,5 +1,5 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const PreferencesController = require('../../app/scripts/controllers/preferences') |
const PreferencesController = require('../../../../app/scripts/controllers/preferences') |
||||||
|
|
||||||
describe('preferences controller', function () { |
describe('preferences controller', function () { |
||||||
let preferencesController |
let preferencesController |
@ -1,6 +1,6 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const sinon = require('sinon') |
const sinon = require('sinon') |
||||||
const TokenRatesController = require('../../app/scripts/controllers/token-rates') |
const TokenRatesController = require('../../../../app/scripts/controllers/token-rates') |
||||||
const ObservableStore = require('obs-store') |
const ObservableStore = require('obs-store') |
||||||
|
|
||||||
describe('TokenRatesController', () => { |
describe('TokenRatesController', () => { |
@ -1,6 +1,6 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const NonceTracker = require('../../app/scripts/controllers/transactions/nonce-tracker') |
const NonceTracker = require('../../../../../app/scripts/controllers/transactions/nonce-tracker') |
||||||
const MockTxGen = require('../lib/mock-tx-gen') |
const MockTxGen = require('../../../../lib/mock-tx-gen') |
||||||
let providerResultStub = {} |
let providerResultStub = {} |
||||||
|
|
||||||
describe('Nonce Tracker', function () { |
describe('Nonce Tracker', function () { |
@ -1,5 +1,5 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const txHelper = require('../../ui/lib/tx-helper') |
const txHelper = require('../../../../../ui/lib/tx-helper') |
||||||
|
|
||||||
describe('txHelper', function () { |
describe('txHelper', function () { |
||||||
it('always shows the oldest tx first', function () { |
it('always shows the oldest tx first', function () { |
@ -1,6 +1,6 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const txStateHistoryHelper = require('../../app/scripts/controllers/transactions/lib/tx-state-history-helper') |
const txStateHistoryHelper = require('../../../../../app/scripts/controllers/transactions/lib/tx-state-history-helper') |
||||||
const testVault = require('../data/v17-long-history.json') |
const testVault = require('../../../../data/v17-long-history.json') |
||||||
|
|
||||||
describe ('Transaction state history helper', function () { |
describe ('Transaction state history helper', function () { |
||||||
|
|
@ -1,8 +1,8 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const clone = require('clone') |
const clone = require('clone') |
||||||
const ObservableStore = require('obs-store') |
const ObservableStore = require('obs-store') |
||||||
const TxStateManager = require('../../app/scripts/controllers/transactions/tx-state-manager') |
const TxStateManager = require('../../../../../app/scripts/controllers/transactions/tx-state-manager') |
||||||
const txStateHistoryHelper = require('../../app/scripts/controllers/transactions/lib/tx-state-history-helper') |
const txStateHistoryHelper = require('../../../../../app/scripts/controllers/transactions/lib/tx-state-history-helper') |
||||||
const noop = () => true |
const noop = () => true |
||||||
|
|
||||||
describe('TransactionStateManager', function () { |
describe('TransactionStateManager', function () { |
@ -1,5 +1,5 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const txUtils = require('../../app/scripts/controllers/transactions/lib/util') |
const txUtils = require('../../../../../app/scripts/controllers/transactions/lib/util') |
||||||
|
|
||||||
|
|
||||||
describe('txUtils', function () { |
describe('txUtils', function () { |
@ -1,6 +1,6 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
|
|
||||||
const EdgeEncryptor = require('../../app/scripts/edge-encryptor') |
const EdgeEncryptor = require('../../../app/scripts/edge-encryptor') |
||||||
|
|
||||||
var password = 'passw0rd1' |
var password = 'passw0rd1' |
||||||
var data = 'some random data' |
var data = 'some random data' |
@ -1,5 +1,5 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const MessageManager = require('../../app/scripts/lib/message-manager') |
const MessageManager = require('../../../app/scripts/lib/message-manager') |
||||||
|
|
||||||
describe('Message Manager', function () { |
describe('Message Manager', function () { |
||||||
let messageManager |
let messageManager |
@ -1,5 +1,5 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const nodeify = require('../../app/scripts/lib/nodeify') |
const nodeify = require('../../../app/scripts/lib/nodeify') |
||||||
|
|
||||||
describe('nodeify', function () { |
describe('nodeify', function () { |
||||||
var obj = { |
var obj = { |
@ -1,6 +1,6 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const PendingBalanceCalculator = require('../../app/scripts/lib/pending-balance-calculator') |
const PendingBalanceCalculator = require('../../../app/scripts/lib/pending-balance-calculator') |
||||||
const MockTxGen = require('../lib/mock-tx-gen') |
const MockTxGen = require('../../lib/mock-tx-gen') |
||||||
const BN = require('ethereumjs-util').BN |
const BN = require('ethereumjs-util').BN |
||||||
let providerResultStub = {} |
let providerResultStub = {} |
||||||
|
|
@ -1,6 +1,6 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
|
|
||||||
const PersonalMessageManager = require('../../app/scripts/lib/personal-message-manager') |
const PersonalMessageManager = require('../../../app/scripts/lib/personal-message-manager') |
||||||
|
|
||||||
describe('Personal Message Manager', function () { |
describe('Personal Message Manager', function () { |
||||||
let messageManager |
let messageManager |
@ -1,9 +1,9 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const clone = require('clone') |
const clone = require('clone') |
||||||
const KeyringController = require('eth-keyring-controller') |
const KeyringController = require('eth-keyring-controller') |
||||||
const firstTimeState = require('../../app/scripts/first-time-state') |
const firstTimeState = require('../../../app/scripts/first-time-state') |
||||||
const seedPhraseVerifier = require('../../app/scripts/lib/seed-phrase-verifier') |
const seedPhraseVerifier = require('../../../app/scripts/lib/seed-phrase-verifier') |
||||||
const mockEncryptor = require('../lib/mock-encryptor') |
const mockEncryptor = require('../../lib/mock-encryptor') |
||||||
|
|
||||||
describe('SeedPhraseVerifier', function () { |
describe('SeedPhraseVerifier', function () { |
||||||
|
|
@ -1,5 +1,5 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const { sufficientBalance } = require('../../app/scripts/lib/util') |
const { sufficientBalance } = require('../../../app/scripts/lib/util') |
||||||
|
|
||||||
|
|
||||||
describe('SufficientBalance', function () { |
describe('SufficientBalance', function () { |
@ -1,120 +0,0 @@ |
|||||||
const assert = require('assert') |
|
||||||
const sinon = require('sinon') |
|
||||||
const clone = require('clone') |
|
||||||
const nock = require('nock') |
|
||||||
const MetaMaskController = require('../../app/scripts/metamask-controller') |
|
||||||
const blacklistJSON = require('../stub/blacklist') |
|
||||||
const firstTimeState = require('../../app/scripts/first-time-state') |
|
||||||
|
|
||||||
const DEFAULT_LABEL = 'Account 1' |
|
||||||
const TEST_SEED = 'debris dizzy just program just float decrease vacant alarm reduce speak stadium' |
|
||||||
const TEST_ADDRESS = '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc' |
|
||||||
const TEST_SEED_ALT = 'setup olympic issue mobile velvet surge alcohol burger horse view reopen gentle' |
|
||||||
const TEST_ADDRESS_ALT = '0xc42edfcc21ed14dda456aa0756c153f7985d8813' |
|
||||||
|
|
||||||
describe('MetaMaskController', function () { |
|
||||||
let metamaskController |
|
||||||
const sandbox = sinon.sandbox.create() |
|
||||||
const noop = () => { } |
|
||||||
|
|
||||||
beforeEach(function () { |
|
||||||
|
|
||||||
nock('https://api.infura.io') |
|
||||||
.persist() |
|
||||||
.get('/v2/blacklist') |
|
||||||
.reply(200, blacklistJSON) |
|
||||||
|
|
||||||
nock('https://api.infura.io') |
|
||||||
.persist() |
|
||||||
.get(/.*/) |
|
||||||
.reply(200) |
|
||||||
|
|
||||||
metamaskController = new MetaMaskController({ |
|
||||||
showUnapprovedTx: noop, |
|
||||||
encryptor: { |
|
||||||
encrypt: function (password, object) { |
|
||||||
this.object = object |
|
||||||
return Promise.resolve() |
|
||||||
}, |
|
||||||
decrypt: function () { |
|
||||||
return Promise.resolve(this.object) |
|
||||||
}, |
|
||||||
}, |
|
||||||
initState: clone(firstTimeState), |
|
||||||
}) |
|
||||||
sandbox.spy(metamaskController.keyringController, 'createNewVaultAndKeychain') |
|
||||||
sandbox.spy(metamaskController.keyringController, 'createNewVaultAndRestore') |
|
||||||
}) |
|
||||||
|
|
||||||
afterEach(function () { |
|
||||||
nock.cleanAll() |
|
||||||
sandbox.restore() |
|
||||||
}) |
|
||||||
|
|
||||||
describe('#getGasPrice', function () { |
|
||||||
it('gives the 50th percentile lowest accepted gas price from recentBlocksController', async function () { |
|
||||||
const realRecentBlocksController = metamaskController.recentBlocksController |
|
||||||
metamaskController.recentBlocksController = { |
|
||||||
store: { |
|
||||||
getState: () => { |
|
||||||
return { |
|
||||||
recentBlocks: [ |
|
||||||
{ gasPrices: [ '0x3b9aca00', '0x174876e800'] }, |
|
||||||
{ gasPrices: [ '0x3b9aca00', '0x174876e800'] }, |
|
||||||
{ gasPrices: [ '0x174876e800', '0x174876e800' ]}, |
|
||||||
{ gasPrices: [ '0x174876e800', '0x174876e800' ]}, |
|
||||||
], |
|
||||||
} |
|
||||||
}, |
|
||||||
}, |
|
||||||
} |
|
||||||
|
|
||||||
const gasPrice = metamaskController.getGasPrice() |
|
||||||
assert.equal(gasPrice, '0x3b9aca00', 'accurately estimates 50th percentile accepted gas price') |
|
||||||
|
|
||||||
metamaskController.recentBlocksController = realRecentBlocksController |
|
||||||
}) |
|
||||||
}) |
|
||||||
|
|
||||||
describe('#createNewVaultAndKeychain', function () { |
|
||||||
it('can only create new vault on keyringController once', async function () { |
|
||||||
const selectStub = sandbox.stub(metamaskController, 'selectFirstIdentity') |
|
||||||
|
|
||||||
const password = 'a-fake-password' |
|
||||||
|
|
||||||
await metamaskController.createNewVaultAndKeychain(password) |
|
||||||
await metamaskController.createNewVaultAndKeychain(password) |
|
||||||
|
|
||||||
assert(metamaskController.keyringController.createNewVaultAndKeychain.calledOnce) |
|
||||||
|
|
||||||
selectStub.reset() |
|
||||||
}) |
|
||||||
}) |
|
||||||
|
|
||||||
describe('#createNewVaultAndRestore', function () { |
|
||||||
it('should be able to call newVaultAndRestore despite a mistake.', async function () { |
|
||||||
const password = 'what-what-what' |
|
||||||
await metamaskController.createNewVaultAndRestore(password, TEST_SEED.slice(0, -1)).catch((e) => null) |
|
||||||
await metamaskController.createNewVaultAndRestore(password, TEST_SEED) |
|
||||||
|
|
||||||
assert(metamaskController.keyringController.createNewVaultAndRestore.calledTwice) |
|
||||||
}) |
|
||||||
|
|
||||||
it('should clear previous identities after vault restoration', async () => { |
|
||||||
await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED) |
|
||||||
assert.deepEqual(metamaskController.getState().identities, { |
|
||||||
[TEST_ADDRESS]: { address: TEST_ADDRESS, name: DEFAULT_LABEL }, |
|
||||||
}) |
|
||||||
|
|
||||||
await metamaskController.preferencesController.setAccountLabel(TEST_ADDRESS, 'Account Foo') |
|
||||||
assert.deepEqual(metamaskController.getState().identities, { |
|
||||||
[TEST_ADDRESS]: { address: TEST_ADDRESS, name: 'Account Foo' }, |
|
||||||
}) |
|
||||||
|
|
||||||
await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED_ALT) |
|
||||||
assert.deepEqual(metamaskController.getState().identities, { |
|
||||||
[TEST_ADDRESS_ALT]: { address: TEST_ADDRESS_ALT, name: DEFAULT_LABEL }, |
|
||||||
}) |
|
||||||
}) |
|
||||||
}) |
|
||||||
}) |
|
@ -1,22 +1,22 @@ |
|||||||
const assert = require('assert') |
const assert = require('assert') |
||||||
const path = require('path') |
const path = require('path') |
||||||
|
|
||||||
const wallet1 = require(path.join('..', 'lib', 'migrations', '001.json')) |
const wallet1 = require(path.join('..', '..', 'lib', 'migrations', '001.json')) |
||||||
const vault4 = require(path.join('..', 'lib', 'migrations', '004.json')) |
const vault4 = require(path.join('..', '..', 'lib', 'migrations', '004.json')) |
||||||
let vault5, vault6, vault7, vault8, vault9 // vault10, vault11
|
let vault5, vault6, vault7, vault8, vault9 // vault10, vault11
|
||||||
|
|
||||||
const migration2 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '002')) |
const migration2 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '002')) |
||||||
const migration3 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '003')) |
const migration3 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '003')) |
||||||
const migration4 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '004')) |
const migration4 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '004')) |
||||||
const migration5 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '005')) |
const migration5 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '005')) |
||||||
const migration6 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '006')) |
const migration6 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '006')) |
||||||
const migration7 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '007')) |
const migration7 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '007')) |
||||||
const migration8 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '008')) |
const migration8 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '008')) |
||||||
const migration9 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '009')) |
const migration9 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '009')) |
||||||
const migration10 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '010')) |
const migration10 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '010')) |
||||||
const migration11 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '011')) |
const migration11 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '011')) |
||||||
const migration12 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '012')) |
const migration12 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '012')) |
||||||
const migration13 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '013')) |
const migration13 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '013')) |
||||||
|
|
||||||
|
|
||||||
const oldTestRpc = 'https://rawtestrpc.metamask.io/' |
const oldTestRpc = 'https://rawtestrpc.metamask.io/' |
Loading…
Reference in new issue