Add RSK testnet/mainnet to the list of networks

This commit is contained in:
Victor Baranov 2019-01-10 19:59:43 +03:00
parent 6c57580b6d
commit 47a7866509
23 changed files with 381 additions and 314 deletions

View File

@ -1,64 +1,80 @@
const POA = 'poa'
const DAI = 'dai'
const POA_SOKOL = 'sokol'
const MAINNET = 'mainnet'
const ROPSTEN = 'ropsten'
const RINKEBY = 'rinkeby'
const KOVAN = 'kovan'
const MAINNET = 'mainnet'
const POA_SOKOL = 'sokol'
const POA = 'poa'
const DAI = 'dai'
const RSK = 'rsk'
const RSK_TESTNET = 'rsk_testnet'
const LOCALHOST = 'localhost'
const MAINNET_CODE = 1
const ROPSTEN_CODE = 3
const RINKEYBY_CODE = 4
const KOVAN_CODE = 42
const POA_SOKOL_CODE = 77
const POA_CODE = 99
const DAI_CODE = 100
const POA_SOKOL_CODE = 77
const MAINNET_CODE = 1
const ROPSTEN_CODE = 3
const RINKEBY_CODE = 4
const KOVAN_CODE = 42
const RSK_CODE = 30
const RSK_TESTNET_CODE = 31
const POA_DISPLAY_NAME = 'POA Network'
const DAI_DISPLAY_NAME = 'xDai Chain'
const POA_SOKOL_DISPLAY_NAME = 'Sokol'
const MAINNET_DISPLAY_NAME = 'Main Ethereum Network'
const ROPSTEN_DISPLAY_NAME = 'Ropsten'
const RINKEBY_DISPLAY_NAME = 'Rinkeby'
const KOVAN_DISPLAY_NAME = 'Kovan'
const POA_SOKOL_DISPLAY_NAME = 'Sokol'
const POA_DISPLAY_NAME = 'POA Network'
const DAI_DISPLAY_NAME = 'xDai Chain'
const MAINNET_DISPLAY_NAME = 'Main Ethereum Network'
const RSK_DISPLAY_NAME = 'RSK Mainnet'
const RSK_TESTNET_DISPLAY_NAME = 'RSK Testnet'
const DROPDOWN_POA_DISPLAY_NAME = POA_DISPLAY_NAME
const DROPDOWN_DAI_DISPLAY_NAME = DAI_DISPLAY_NAME
const DROPDOWN_POA_SOKOL_DISPLAY_NAME = 'Sokol Network'
const DROPDOWN_MAINNET_DISPLAY_NAME = 'Main Network'
const DROPDOWN_ROPSTEN_DISPLAY_NAME = 'Ropsten Test Net'
const DROPDOWN_RINKEBY_DISPLAY_NAME = 'Rinkeby Test Net'
const DROPDOWN_KOVAN_DISPLAY_NAME = 'Kovan Test Net'
const DROPDOWN_POA_SOKOL_DISPLAY_NAME = 'Sokol Network'
const DROPDOWN_POA_DISPLAY_NAME = POA_DISPLAY_NAME
const DROPDOWN_DAI_DISPLAY_NAME = DAI_DISPLAY_NAME
const DROPDOWN_MAINNET_DISPLAY_NAME = 'Main Network'
const DROPDOWN_RSK_DISPLAY_NAME = 'RSK Main Net'
const DROPDOWN_RSK_TESTNET_DISPLAY_NAME = 'RSK Test Net'
module.exports = {
POA,
DAI,
POA_SOKOL,
MAINNET,
ROPSTEN,
RINKEBY,
KOVAN,
MAINNET,
POA_SOKOL,
POA,
DAI,
RSK,
RSK_TESTNET,
LOCALHOST,
MAINNET_CODE,
ROPSTEN_CODE,
RINKEYBY_CODE,
KOVAN_CODE,
POA_SOKOL_CODE,
POA_CODE,
DAI_CODE,
POA_SOKOL_CODE,
MAINNET_CODE,
ROPSTEN_CODE,
RINKEBY_CODE,
KOVAN_CODE,
RSK_CODE,
RSK_TESTNET_CODE,
POA_DISPLAY_NAME,
DAI_DISPLAY_NAME,
POA_SOKOL_DISPLAY_NAME,
MAINNET_DISPLAY_NAME,
ROPSTEN_DISPLAY_NAME,
RINKEBY_DISPLAY_NAME,
KOVAN_DISPLAY_NAME,
MAINNET_DISPLAY_NAME,
POA_SOKOL_DISPLAY_NAME,
POA_DISPLAY_NAME,
DAI_DISPLAY_NAME,
RSK_DISPLAY_NAME,
RSK_TESTNET_DISPLAY_NAME,
DROPDOWN_POA_DISPLAY_NAME,
DROPDOWN_DAI_DISPLAY_NAME,
DROPDOWN_POA_SOKOL_DISPLAY_NAME,
DROPDOWN_MAINNET_DISPLAY_NAME,
DROPDOWN_ROPSTEN_DISPLAY_NAME,
DROPDOWN_RINKEBY_DISPLAY_NAME,
DROPDOWN_KOVAN_DISPLAY_NAME,
DROPDOWN_POA_SOKOL_DISPLAY_NAME,
DROPDOWN_POA_DISPLAY_NAME,
DROPDOWN_DAI_DISPLAY_NAME,
DROPDOWN_MAINNET_DISPLAY_NAME,
DROPDOWN_RSK_DISPLAY_NAME,
DROPDOWN_RSK_TESTNET_DISPLAY_NAME,
}

View File

@ -11,6 +11,7 @@ const createInfuraClient = require('./createInfuraClient')
const createJsonRpcClient = require('./createJsonRpcClient')
const createLocalhostClient = require('./createLocalhostClient')
const { createSwappableProxy, createEventEmitterProxy } = require('swappable-obj-proxy')
const ethNetProps = require('eth-net-props')
const {
ROPSTEN,
@ -21,10 +22,14 @@ const {
POA_SOKOL,
POA,
DAI,
RSK,
RSK_TESTNET,
POA_CODE,
DAI_CODE,
POA_SOKOL_CODE,
RSK_CODE,
RSK_TESTNET_CODE,
} = require('./enums')
const POA_RPC_URL = 'https://core.poa.network'
const DAI_RPC_URL = 'https://dai.poa.network'
const SOKOL_RPC_URL = 'https://sokol.poa.network'
const INFURA_PROVIDER_TYPES = [ROPSTEN, RINKEBY, KOVAN, MAINNET]
const env = process.env.METAMASK_ENV
@ -109,7 +114,14 @@ module.exports = class NetworkController extends EventEmitter {
async setProviderType (type) {
assert.notEqual(type, 'rpc', `NetworkController - cannot call "setProviderType" with type 'rpc'. use "setRpcTarget"`)
assert(INFURA_PROVIDER_TYPES.includes(type) || type === LOCALHOST || type === POA_SOKOL || type === POA || type === DAI, `NetworkController - Unknown rpc type "${type}"`)
assert(INFURA_PROVIDER_TYPES.includes(type) ||
type === LOCALHOST ||
type === POA_SOKOL ||
type === POA ||
type === DAI ||
type === RSK ||
type === RSK_TESTNET
, `NetworkController - Unknown rpc type "${type}"`)
const providerConfig = { type }
this.providerConfig = providerConfig
}
@ -145,11 +157,15 @@ module.exports = class NetworkController extends EventEmitter {
this._configureInfuraProvider(opts)
// other type-based rpc endpoints
} else if (type === POA) {
this._configureStandardProvider({ rpcUrl: POA_RPC_URL })
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(POA_CODE)[0] })
} else if (type === DAI) {
this._configureStandardProvider({ rpcUrl: DAI_RPC_URL })
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(DAI_CODE)[0] })
} else if (type === POA_SOKOL) {
this._configureStandardProvider({ rpcUrl: SOKOL_RPC_URL })
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(POA_SOKOL_CODE)[0] })
} else if (type === RSK) {
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(RSK_CODE)[0] })
} else if (type === RSK_TESTNET) {
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(RSK_TESTNET_CODE)[0] })
} else if (type === LOCALHOST) {
this._configureLocalhostProvider()
// url-based rpc endpoints

View File

@ -1,39 +1,137 @@
const {
POA_SOKOL,
POA,
DAI,
POA_SOKOL,
MAINNET,
ROPSTEN,
RINKEBY,
KOVAN,
MAINNET,
POA_SOKOL_CODE,
ROPSTEN_CODE,
RINKEYBY_CODE,
KOVAN_CODE,
RSK,
RSK_TESTNET,
POA_CODE,
DAI_CODE,
POA_SOKOL_CODE,
MAINNET_CODE,
ROPSTEN_CODE,
RINKEBY_CODE,
KOVAN_CODE,
RSK_CODE,
RSK_TESTNET_CODE,
POA_DISPLAY_NAME,
DAI_DISPLAY_NAME,
POA_SOKOL_DISPLAY_NAME,
MAINNET_DISPLAY_NAME,
ROPSTEN_DISPLAY_NAME,
RINKEBY_DISPLAY_NAME,
KOVAN_DISPLAY_NAME,
MAINNET_DISPLAY_NAME,
POA_DISPLAY_NAME,
RSK_DISPLAY_NAME,
RSK_TESTNET_DISPLAY_NAME,
DROPDOWN_POA_DISPLAY_NAME,
DROPDOWN_DAI_DISPLAY_NAME,
DROPDOWN_POA_SOKOL_DISPLAY_NAME,
DROPDOWN_MAINNET_DISPLAY_NAME,
DROPDOWN_ROPSTEN_DISPLAY_NAME,
DROPDOWN_RINKEBY_DISPLAY_NAME,
DROPDOWN_KOVAN_DISPLAY_NAME,
DROPDOWN_RSK_DISPLAY_NAME,
DROPDOWN_RSK_TESTNET_DISPLAY_NAME,
} = require('./enums')
const networkToNameMap = {
[POA_SOKOL]: POA_SOKOL_DISPLAY_NAME,
[POA]: POA_SOKOL_DISPLAY_NAME,
[ROPSTEN]: ROPSTEN_DISPLAY_NAME,
[RINKEBY]: RINKEBY_DISPLAY_NAME,
[KOVAN]: KOVAN_DISPLAY_NAME,
[MAINNET]: MAINNET_DISPLAY_NAME,
[POA_SOKOL_CODE]: POA_SOKOL_DISPLAY_NAME,
[ROPSTEN_CODE]: ROPSTEN_DISPLAY_NAME,
[RINKEYBY_CODE]: RINKEBY_DISPLAY_NAME,
[KOVAN_CODE]: KOVAN_DISPLAY_NAME,
[POA_CODE]: POA_DISPLAY_NAME,
}
const networks = {}
const getNetworkDisplayName = key => networkToNameMap[key]
const POA_OBJ = {
order: 1,
providerName: POA,
networkID: POA_CODE,
displayName: POA_DISPLAY_NAME,
displayNameDropdown: DROPDOWN_POA_DISPLAY_NAME,
}
networks[POA_CODE] = POA_OBJ
networks[POA] = POA_OBJ
const DAI_OBJ = {
order: 2,
providerName: DAI,
networkID: DAI_CODE,
displayName: DAI_DISPLAY_NAME,
displayNameDropdown: DROPDOWN_DAI_DISPLAY_NAME,
}
networks[DAI_CODE] = DAI_OBJ
networks[DAI] = DAI_OBJ
const POA_SOKOL_OBJ = {
order: 3,
providerName: POA_SOKOL,
networkID: POA_SOKOL_CODE,
displayName: POA_SOKOL_DISPLAY_NAME,
displayNameDropdown: DROPDOWN_POA_SOKOL_DISPLAY_NAME,
}
networks[POA_SOKOL_CODE] = POA_SOKOL_OBJ
networks[POA_SOKOL] = POA_SOKOL_OBJ
const MAINNET_OBJ = {
order: 4,
providerName: MAINNET,
networkID: MAINNET_CODE,
displayName: MAINNET_DISPLAY_NAME,
displayNameDropdown: DROPDOWN_MAINNET_DISPLAY_NAME,
}
networks[MAINNET_CODE] = MAINNET_OBJ
networks[MAINNET] = MAINNET_OBJ
const ROPSTEN_OBJ = {
order: 5,
providerName: ROPSTEN,
networkID: ROPSTEN_CODE,
displayName: ROPSTEN_DISPLAY_NAME,
displayNameDropdown: DROPDOWN_ROPSTEN_DISPLAY_NAME,
}
networks[ROPSTEN_CODE] = ROPSTEN_OBJ
networks[ROPSTEN] = ROPSTEN_OBJ
const KOVAN_OBJ = {
order: 6,
providerName: KOVAN,
networkID: KOVAN_CODE,
displayName: KOVAN_DISPLAY_NAME,
displayNameDropdown: DROPDOWN_KOVAN_DISPLAY_NAME,
}
networks[KOVAN_CODE] = KOVAN_OBJ
networks[KOVAN] = KOVAN_OBJ
const RINKEBY_OBJ = {
order: 7,
providerName: RINKEBY,
networkID: RINKEBY_CODE,
displayName: RINKEBY_DISPLAY_NAME,
displayNameDropdown: DROPDOWN_RINKEBY_DISPLAY_NAME,
}
networks[RINKEBY_CODE] = RINKEBY_OBJ
networks[RINKEBY] = RINKEBY_OBJ
const RSK_OBJ = {
order: 8,
providerName: RSK,
networkID: RSK_CODE,
displayName: RSK_DISPLAY_NAME,
displayNameDropdown: DROPDOWN_RSK_DISPLAY_NAME,
}
networks[RSK_CODE] = RSK_OBJ
networks[RSK] = RSK_OBJ
const RSK_TESTNET_OBJ = {
order: 9,
providerName: RSK_TESTNET,
networkID: RSK_TESTNET_CODE,
displayName: RSK_TESTNET_DISPLAY_NAME,
displayNameDropdown: DROPDOWN_RSK_TESTNET_DISPLAY_NAME,
}
networks[RSK_TESTNET_CODE] = RSK_TESTNET_OBJ
networks[RSK_TESTNET] = RSK_TESTNET_OBJ
const getNetworkDisplayName = key => networks[key].displayName
module.exports = {
networks,
getNetworkDisplayName,
}

View File

@ -5,6 +5,16 @@ module.exports = {
}
const ethNetProps = require('eth-net-props')
const { POA_CODE,
DAI_CODE,
POA_SOKOL_CODE,
MAINNET_CODE,
ROPSTEN_CODE,
RINKEBY_CODE,
KOVAN_CODE,
RSK_CODE,
RSK_TESTNET_CODE } = require('../controllers/network/enums')
/**
* Gives the caller a url at which the user can acquire coin, depending on the network they are in
*
@ -19,16 +29,18 @@ const ethNetProps = require('eth-net-props')
*/
function getBuyEthUrl ({ network, amount, address, ind }) {
let url
switch (network) {
case '1':
case '99':
case '100':
switch (Number(network)) {
case MAINNET_CODE:
case POA_CODE:
case DAI_CODE:
case RSK_CODE:
url = getExchanges({network, amount, address})[ind].link
break
case '3':
case '4':
case '42':
case '77':
case ROPSTEN_CODE:
case RINKEBY_CODE:
case KOVAN_CODE:
case POA_SOKOL_CODE:
case RSK_TESTNET_CODE:
url = getFaucets(network)[ind]
break
}
@ -85,5 +97,7 @@ function getExchanges ({network, amount, address}) {
link: 'https://dai-bridge.poa.network/',
},
]
default:
return []
}
}

View File

@ -52,6 +52,10 @@ const EthQuery = require('eth-query')
const ethUtil = require('ethereumjs-util')
const sigUtil = require('eth-sig-util')
const { POA_CODE,
DAI_CODE,
POA_SOKOL_CODE } = require('./controllers/network/enums')
module.exports = class MetamaskController extends EventEmitter {
/**
@ -1390,7 +1394,7 @@ module.exports = class MetamaskController extends EventEmitter {
const networkIdStr = networkController.store.getState().network
const networkId = parseInt(networkIdStr)
const isPOA = networkId === 77 || networkId === 99
const isPOA = networkId === POA_SOKOL_CODE || networkId === POA_CODE || networkId === DAI_CODE
// Return 1 gwei if using a POA network of if there are no blocks have been observed:
if (isPOA || recentBlocks.length === 0) {

View File

@ -1,6 +1,9 @@
const extension = require('extensionizer')
const explorerLinks = require('eth-net-props').explorerLinks
const { capitalizeFirstLetter } = require('../lib/util')
const { POA_CODE,
DAI_CODE,
POA_SOKOL_CODE } = require('../controllers/network/enums')
class ExtensionPlatform {
@ -125,7 +128,10 @@ class ExtensionPlatform {
_getExplorer (hash, networkId) {
let explorerName
if (networkId === 99 || networkId === 100 || networkId === 77) {
if (networkId === POA_CODE ||
networkId === DAI_CODE ||
networkId === POA_SOKOL_CODE
) {
explorerName = 'BlockScout'
} else {
explorerName = 'Etherscan'

View File

@ -6,6 +6,14 @@ import Web3 from 'web3'
import log from 'loglevel'
import copyToClipboard from 'copy-to-clipboard'
import { POA_CODE,
DAI_CODE,
POA_SOKOL_CODE,
MAINNET_CODE,
ROPSTEN_CODE,
RINKEBY_CODE,
KOVAN_CODE } from '../../../../app/scripts/controllers/network/enums'
class ContractImportView extends Component {
constructor (props) {
super(props)
@ -186,19 +194,19 @@ class ContractImportView extends Component {
getBlockscoutApiNetworkSuffix () {
const { network } = this.props
switch (Number(network)) {
case 1:
case MAINNET_CODE:
return 'mainnet'
case 99:
case POA_CODE:
return 'core'
case 77:
case POA_SOKOL_CODE:
return 'sokol'
case 100:
case DAI_CODE:
return 'dai'
case 42:
case KOVAN_CODE:
return 'kovan'
case 3:
case ROPSTEN_CODE:
return 'ropsten'
case 4:
case RINKEBY_CODE:
return 'rinkeby'
default:
return ''

View File

@ -18,6 +18,8 @@ const emptyAddr = '0x0000000000000000000000000000000000000000'
const SEARCH_TAB = 'SEARCH'
const CUSTOM_TOKEN_TAB = 'CUSTOM_TOKEN'
const { POA_CODE, MAINNET_CODE } = require('../../../../app/scripts/controllers/network/enums')
class AddTokenScreen extends Component {
static contextTypes = {
@ -93,8 +95,9 @@ class AddTokenScreen extends Component {
const { network } = this.props
const networkID = parseInt(network)
let views = []
const isProdNetwork = networkID === 1 || networkID === 99
isProdNetwork ? views = [h(TabBar, {
const isProdNetworkWithKnownTokens = networkID === MAINNET_CODE ||
networkID === POA_CODE
isProdNetworkWithKnownTokens ? views = [h(TabBar, {
style: {
paddingTop: '0px',
},

View File

@ -9,6 +9,9 @@ const NetworkIndicator = require('./network')
const {AccountDropdowns} = require('./account-dropdowns')
const ethNetProps = require('eth-net-props')
const { LOCALHOST } = require('../../../app/scripts/controllers/network/enums')
const { networks } = require('../../../app/scripts/controllers/network/util')
const LOCALHOST_RPC_URL = 'http://localhost:8545'
module.exports = class AppBar extends Component {
@ -243,6 +246,35 @@ module.exports = class AppBar extends Component {
const state = this.state || {}
const isOpen = state.isNetworkMenuOpen
const networkDropdownItems = Object.keys(networks)
.filter((networkID) => {
return !isNaN(networkID)
})
.sort((networkID1, networkID2) => {
const networkObj1 = networks[networkID1]
const networkObj2 = networks[networkID2]
return networkObj1.order - networkObj2.order
})
.map((networkID) => {
const networkObj = networks[networkID]
return h(
DropdownMenuItem,
{
key: networkObj.providerName,
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType(networkObj.providerName)),
style: {
paddingLeft: '20px',
fontSize: '16px',
color: providerType === networkObj.providerName ? 'white' : '',
},
},
[h(providerType === networkObj.providerName ? 'div.selected-network' : ''),
ethNetProps.props.getNetworkDisplayName(networkID),
]
)
})
return h(Dropdown, {
useCssTransition: true,
isOpen,
@ -272,124 +304,7 @@ module.exports = class AppBar extends Component {
},
}, [
h(
DropdownMenuItem,
{
key: 'poa',
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType('poa')),
style: {
paddingLeft: '20px',
fontSize: '16px',
color: providerType === 'poa' ? 'white' : '',
},
},
[h(providerType === 'poa' ? 'div.selected-network' : ''),
ethNetProps.props.getNetworkDisplayName(99),
]
),
h(
DropdownMenuItem,
{
key: 'dai',
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType('dai')),
style: {
paddingLeft: '20px',
fontSize: '16px',
color: providerType === 'dai' ? 'white' : '',
},
},
[h(providerType === 'dai' ? 'div.selected-network' : ''),
ethNetProps.props.getNetworkDisplayName(100),
]
),
h(
DropdownMenuItem,
{
key: 'sokol',
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType('sokol')),
style: {
paddingLeft: '20px',
fontSize: '16px',
color: providerType === 'sokol' ? 'white' : '',
},
},
[h(providerType === 'sokol' ? 'div.selected-network' : ''),
ethNetProps.props.getNetworkDisplayName(77),
]
),
h(
DropdownMenuItem,
{
key: 'main',
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType('mainnet')),
style: {
paddingLeft: '20px',
fontSize: '16px',
color: providerType === 'mainnet' ? 'white' : '',
},
},
[h(providerType === 'mainnet' ? 'div.selected-network' : ''),
ethNetProps.props.getNetworkDisplayName(1),
]
),
h(
DropdownMenuItem,
{
key: 'ropsten',
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType('ropsten')),
style: {
paddingLeft: '20px',
fontSize: '16px',
color: providerType === 'ropsten' ? 'white' : '',
},
},
[h(providerType === 'ropsten' ? 'div.selected-network' : ''),
ethNetProps.props.getNetworkDisplayName(3),
]
),
h(
DropdownMenuItem,
{
key: 'kovan',
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType('kovan')),
style: {
paddingLeft: '20px',
fontSize: '16px',
color: providerType === 'kovan' ? 'white' : '',
},
},
[h(providerType === 'kovan' ? 'div.selected-network' : ''),
ethNetProps.props.getNetworkDisplayName(42),
]
),
h(
DropdownMenuItem,
{
key: 'rinkeby',
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => props.dispatch(actions.setProviderType('rinkeby')),
style: {
paddingLeft: '20px',
fontSize: '16px',
color: providerType === 'rinkeby' ? 'white' : '',
},
},
[h(providerType === 'rinkeby' ? 'div.selected-network' : ''),
ethNetProps.props.getNetworkDisplayName(4),
]
),
...networkDropdownItems,
h(
DropdownMenuItem,
@ -398,15 +313,15 @@ module.exports = class AppBar extends Component {
closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }),
onClick: () => {
props.dispatch(actions.setRpcTarget('http://localhost:8545'))
props.dispatch(actions.setProviderType('localhost'))
props.dispatch(actions.setProviderType(LOCALHOST))
},
style: {
paddingLeft: '20px',
fontSize: '16px',
color: providerType === 'localhost' ? 'white' : '',
color: providerType === LOCALHOST ? 'white' : '',
},
},
[h(providerType === 'localhost' ? 'div.selected-network' : ''),
[h(providerType === LOCALHOST ? 'div.selected-network' : ''),
'Localhost 8545',
]
),

View File

@ -8,6 +8,7 @@ import AccountPanel from './account-panel'
import RadioList from './custom-radio-list'
import { getNetworkDisplayName } from '../../../app/scripts/controllers/network/util'
import { getFaucets, getExchanges } from '../../../app/scripts/lib/buy-eth-url'
import { MAINNET_CODE } from '../../../app/scripts/controllers/network/enums'
import ethNetProps from 'eth-net-props'
import PropTypes from 'prop-types'
@ -157,8 +158,8 @@ class BuyButtonSubview extends Component {
}
formVersionSubview () {
const network = this.props.network
if (network === '1') {
const { network } = this.props
if (Number(network) === MAINNET_CODE) {
if (this.props.buyView.formView.coinbase) {
return <CoinbaseForm { ...this.props } />
} else if (this.props.buyView.formView.shapeshift) {

View File

@ -1,14 +1,15 @@
import React, { Component } from 'react'
import { formatBalance, countSignificantDecimals } from '../util'
import PropTypes from 'prop-types'
import { DAI_CODE, POA_SOKOL_CODE } from '../../../app/scripts/controllers/network/enums'
class FiatValue extends Component {
render = () => {
const props = this.props
let { conversionRate } = props
const { currentCurrency, network } = props
const isSokol = parseInt(network) === 77
const isDai = parseInt(network) === 100
const isSokol = parseInt(network) === POA_SOKOL_CODE
const isDai = parseInt(network) === DAI_CODE
if (isSokol) {
conversionRate = 0
} else if (isDai) {

View File

@ -2,15 +2,7 @@ const Component = require('react').Component
const h = require('react-hyperscript')
const inherits = require('util').inherits
const ethNetProps = require('eth-net-props')
const {
DROPDOWN_ROPSTEN_DISPLAY_NAME,
DROPDOWN_RINKEBY_DISPLAY_NAME,
DROPDOWN_KOVAN_DISPLAY_NAME,
DROPDOWN_POA_SOKOL_DISPLAY_NAME,
DROPDOWN_POA_DISPLAY_NAME,
DROPDOWN_DAI_DISPLAY_NAME,
DROPDOWN_MAINNET_DISPLAY_NAME,
} = require('../../../app/scripts/controllers/network/enums')
const { networks } = require('../../../app/scripts/controllers/network/util')
module.exports = Network
@ -23,12 +15,6 @@ function Network () {
Network.prototype.render = function () {
const props = this.props
const { provider, network: networkNumber } = props
let providerName
try {
providerName = provider.type
} catch (e) {
providerName = null
}
let displayName, hoverText
if (networkNumber === 'loading') {
@ -51,26 +37,8 @@ Network.prototype.render = function () {
h('i.fa.fa-caret-down'),
])
} else {
if (providerName === 'mainnet' || parseInt(networkNumber) === 1) {
displayName = DROPDOWN_MAINNET_DISPLAY_NAME
hoverText = ethNetProps.props.getNetworkDisplayName(networkNumber)
} else if (providerName === 'ropsten' || parseInt(networkNumber) === 3) {
displayName = DROPDOWN_ROPSTEN_DISPLAY_NAME
hoverText = ethNetProps.props.getNetworkDisplayName(networkNumber)
} else if (providerName === 'sokol' || parseInt(networkNumber) === 77) {
displayName = DROPDOWN_POA_SOKOL_DISPLAY_NAME
hoverText = ethNetProps.props.getNetworkDisplayName(networkNumber)
} else if (providerName === 'kovan' || parseInt(networkNumber) === 42) {
displayName = DROPDOWN_KOVAN_DISPLAY_NAME
hoverText = ethNetProps.props.getNetworkDisplayName(networkNumber)
} else if (providerName === 'rinkeby' || parseInt(networkNumber) === 4) {
displayName = DROPDOWN_RINKEBY_DISPLAY_NAME
hoverText = ethNetProps.props.getNetworkDisplayName(networkNumber)
} else if (providerName === 'poa' || parseInt(networkNumber) === 99) {
displayName = DROPDOWN_POA_DISPLAY_NAME
hoverText = ethNetProps.props.getNetworkDisplayName(networkNumber)
} else if (providerName === 'dai' || parseInt(networkNumber) === 100) {
displayName = DROPDOWN_DAI_DISPLAY_NAME
if (networkNumber && networks[networkNumber]) {
displayName = networks[networkNumber].displayNameDropdown
hoverText = ethNetProps.props.getNetworkDisplayName(networkNumber)
} else {
displayName = 'Private Network'

View File

@ -387,7 +387,6 @@ class SendTransactionScreen extends PersistentForm {
}
setOutputValue = (val, type) => {
console.log(val)
if (!type) {
return val || ''
}

View File

@ -9,6 +9,7 @@ const ethUtil = require('ethereumjs-util')
const copyToClipboard = require('copy-to-clipboard')
const actions = require('../../../ui/app/actions')
const connect = require('react-redux').connect
const { MAINNET_CODE } = require('../../../app/scripts/controllers/network/enums')
import { countSignificantDecimals } from '../util'
const tokenCellDropDownPrefix = 'token-cell_dropdown_'
@ -33,7 +34,7 @@ TokenCell.prototype.render = function () {
return (
h(`li#token-cell_${ind}.token-cell`, {
style: {
cursor: network === '1' ? 'pointer' : 'default',
cursor: Number(network) === MAINNET_CODE ? 'pointer' : 'default',
borderBottom: isLastTokenCell ? 'none' : '1px solid #e2e2e2',
padding: '20px 0',
margin: '0 30px',

View File

@ -15,6 +15,16 @@ const ethNetProps = require('eth-net-props')
const TransactionIcon = require('./transaction-list-item-icon')
const ShiftListItem = require('./shift-list-item')
const { POA_CODE,
DAI_CODE,
POA_SOKOL_CODE,
MAINNET_CODE,
ROPSTEN_CODE,
RINKEBY_CODE,
KOVAN_CODE,
RSK_CODE,
RSK_TESTNET_CODE } = require('../../../app/scripts/controllers/network/enums')
const mapDispatchToProps = dispatch => {
return {
retryTransaction: transactionId => dispatch(actions.retryTransaction(transactionId)),
@ -59,13 +69,21 @@ TransactionListItem.prototype.render = function () {
const { transaction, network, conversionRate, currentCurrency } = this.props
const { status } = transaction
if (transaction.key === 'shapeshift') {
if (network === '1') return h(ShiftListItem, transaction)
if (Number(network) === MAINNET_CODE) return h(ShiftListItem, transaction)
}
var date = formatDate(transaction.time)
let isLinkable = false
const numericNet = parseInt(network)
isLinkable = numericNet === 1 || numericNet === 3 || numericNet === 4 || numericNet === 42 || numericNet === 77 || numericNet === 99 || numericNet === 100
isLinkable = numericNet === MAINNET_CODE ||
numericNet === ROPSTEN_CODE ||
numericNet === RINKEBY_CODE ||
numericNet === KOVAN_CODE ||
numericNet === POA_SOKOL_CODE ||
numericNet === POA_CODE ||
numericNet === DAI_CODE ||
numericNet === RSK_CODE ||
numericNet === RSK_TESTNET_CODE
var isMsg = ('msgParams' in transaction)
var isTx = ('txParams' in transaction)

View File

@ -3,6 +3,7 @@ const h = require('react-hyperscript')
const inherits = require('util').inherits
const TransactionListItem = require('./transaction-list-item')
const { MAINNET_CODE } = require('../../../app/scripts/controllers/network/enums')
module.exports = TransactionList
@ -16,7 +17,7 @@ TransactionList.prototype.render = function () {
const { transactions, network, unapprovedMsgs, conversionRate } = this.props
var shapeShiftTxList
if (network === '1') {
if (Number(network) === MAINNET_CODE) {
shapeShiftTxList = this.props.shapeShiftTxList
}
const txsToRender = !shapeShiftTxList ? transactions.concat(unapprovedMsgs) : transactions.concat(unapprovedMsgs, shapeShiftTxList)

View File

@ -13,6 +13,7 @@ import PendingMsg from './components/pending-msg'
import PendingPersonalMsg from './components/pending-personal-msg'
import PendingTypedMsg from './components/pending-typed-msg'
const Loading = require('./components/loading')
const { DAI_CODE, POA_SOKOL_CODE } = require('../../app/scripts/controllers/network/enums')
module.exports = connect(mapStateToProps)(ConfirmTxScreen)
@ -55,8 +56,8 @@ ConfirmTxScreen.prototype.render = function () {
unapprovedMsgs, unapprovedPersonalMsgs, unapprovedTypedMessages, blockGasLimit } = props
let { conversionRate } = props
const isSokol = parseInt(network) === 77
const isDai = parseInt(network) === 100
const isSokol = parseInt(network) === POA_SOKOL_CODE
const isDai = parseInt(network) === DAI_CODE
if (isSokol) {
conversionRate = 0
} else if (isDai) {

View File

@ -12,6 +12,7 @@ const validUrl = require('valid-url')
const exportAsFile = require('./util').exportAsFile
const Modal = require('../../ui/app/components/modals/index').Modal
const ethNetProps = require('eth-net-props')
const { networks } = require('../../app/scripts/controllers/network/util')
module.exports = connect(mapStateToProps)(ConfigScreen)
@ -290,46 +291,12 @@ function currentProviderDisplay (metamaskState, state) {
const provider = metamaskState.provider
let title, value
switch (provider.type) {
case 'mainnet':
title = 'Current Network'
value = ethNetProps.props.getNetworkDisplayName(1)
break
case 'sokol':
title = 'Current Network'
value = ethNetProps.props.getNetworkDisplayName(77)
break
case 'ropsten':
title = 'Current Network'
value = ethNetProps.props.getNetworkDisplayName(3)
break
case 'kovan':
title = 'Current Network'
value = ethNetProps.props.getNetworkDisplayName(42)
break
case 'rinkeby':
title = 'Current Network'
value = ethNetProps.props.getNetworkDisplayName(4)
break
case 'poa':
title = 'Current Network'
value = ethNetProps.props.getNetworkDisplayName(99)
break
case 'dai':
title = 'Current Network'
value = ethNetProps.props.getNetworkDisplayName(100)
break
default:
title = 'Current RPC'
value = metamaskState.provider.rpcTarget
if (networks[provider.type]) {
title = 'Current Network'
value = ethNetProps.props.getNetworkDisplayName(networks[provider.type].networkID)
} else {
title = 'Current RPC'
value = metamaskState.provider.rpcTarget
}
return h('div', [

62
package-lock.json generated
View File

@ -10540,6 +10540,7 @@
"resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz",
"integrity": "sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=",
"requires": {
"ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git#2863c40e0982acfc0b7163f0285d4c56427c7799",
"ethereumjs-util": "^5.1.1"
}
},
@ -10713,9 +10714,9 @@
}
},
"eth-net-props": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/eth-net-props/-/eth-net-props-1.0.10.tgz",
"integrity": "sha512-sCKttmHUFficRcyx95CWUW2AuvQ6rEboy4XcoR49HU7UNMxOdRti3rFyGrkVepRozn1bLLjet/doPKnj8rDG7g==",
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/eth-net-props/-/eth-net-props-1.0.11.tgz",
"integrity": "sha512-D5BJCoRAf0Q40X4tb0IN8goZTddYwtKqRBYklglS36iPd0qXu183NktYJ63e+1dLzeBG5vvkqN9LXW9CbLxhOQ==",
"requires": {
"chai": "^4.1.2"
}
@ -14994,7 +14995,8 @@
"bindings": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz",
"integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw=="
"integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==",
"dev": true
},
"bip39": {
"version": "2.5.0",
@ -15013,6 +15015,7 @@
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz",
"integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=",
"dev": true,
"requires": {
"safe-buffer": "^5.0.1"
}
@ -15047,7 +15050,8 @@
"bn.js": {
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
"integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
"integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
"dev": true
},
"body-parser": {
"version": "1.18.3",
@ -15090,12 +15094,14 @@
"brorand": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
"dev": true
},
"browserify-aes": {
"version": "1.2.0",
"resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
"integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
"dev": true,
"requires": {
"buffer-xor": "^1.0.3",
"cipher-base": "^1.0.0",
@ -15252,7 +15258,8 @@
"buffer-xor": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
"dev": true
},
"builtin-modules": {
"version": "1.1.1",
@ -15350,6 +15357,7 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
"dev": true,
"requires": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
@ -15509,6 +15517,7 @@
"version": "1.2.0",
"resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
"integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
"dev": true,
"requires": {
"cipher-base": "^1.0.1",
"inherits": "^2.0.1",
@ -15521,6 +15530,7 @@
"version": "1.1.7",
"resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
"integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
"dev": true,
"requires": {
"cipher-base": "^1.0.3",
"create-hash": "^1.1.0",
@ -15820,6 +15830,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz",
"integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=",
"dev": true,
"requires": {
"browserify-aes": "^1.0.6",
"create-hash": "^1.1.2",
@ -15858,6 +15869,7 @@
"version": "6.4.1",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
"integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
"dev": true,
"requires": {
"bn.js": "^4.4.0",
"brorand": "^1.0.1",
@ -16169,14 +16181,6 @@
"integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==",
"dev": true
},
"ethereumjs-abi": {
"version": "git+https://github.com/ethereumjs/ethereumjs-abi.git#2863c40e0982acfc0b7163f0285d4c56427c7799",
"from": "git+https://github.com/ethereumjs/ethereumjs-abi.git#2863c40e0982acfc0b7163f0285d4c56427c7799",
"requires": {
"bn.js": "^4.10.0",
"ethereumjs-util": "^5.0.0"
}
},
"ethereumjs-block": {
"version": "1.7.1",
"resolved": "http://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz",
@ -16366,6 +16370,7 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz",
"integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==",
"dev": true,
"requires": {
"bn.js": "^4.11.0",
"create-hash": "^1.1.2",
@ -16455,6 +16460,7 @@
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz",
"integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==",
"dev": true,
"requires": {
"is-hex-prefixed": "1.0.0",
"strip-hex-prefix": "1.0.0"
@ -16476,6 +16482,7 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
"integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
"dev": true,
"requires": {
"md5.js": "^1.3.4",
"safe-buffer": "^5.1.1"
@ -16886,6 +16893,7 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
"integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
"dev": true,
"requires": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
@ -16895,6 +16903,7 @@
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz",
"integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==",
"dev": true,
"requires": {
"inherits": "^2.0.3",
"minimalistic-assert": "^1.0.1"
@ -16922,6 +16931,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
"integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
"dev": true,
"requires": {
"hash.js": "^1.0.3",
"minimalistic-assert": "^1.0.0",
@ -17089,7 +17099,8 @@
"is-hex-prefixed": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz",
"integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ="
"integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=",
"dev": true
},
"is-natural-number": {
"version": "4.0.1",
@ -17290,6 +17301,7 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz",
"integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==",
"dev": true,
"requires": {
"bindings": "^1.2.1",
"inherits": "^2.0.3",
@ -17589,6 +17601,7 @@
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
"integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
"dev": true,
"requires": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1",
@ -17748,12 +17761,14 @@
"minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
"integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
"integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
"dev": true
},
"minimalistic-crypto-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
"integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
"integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
"dev": true
},
"minimatch": {
"version": "3.0.4",
@ -17823,7 +17838,8 @@
"nan": {
"version": "2.10.0",
"resolved": "http://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
"integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA=="
"integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
"dev": true
},
"nano-json-stream-parser": {
"version": "0.1.2",
@ -18490,6 +18506,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
"integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
"dev": true,
"requires": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1"
@ -18499,6 +18516,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/rlp/-/rlp-2.1.0.tgz",
"integrity": "sha512-93U7IKH5j7nmXFVg19MeNBGzQW5uXW1pmCuKY8veeKIhYTE32C2d0mOegfiIAfXcHOKJjjPlJisn8iHDF5AezA==",
"dev": true,
"requires": {
"safe-buffer": "^5.1.1"
}
@ -18512,7 +18530,8 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
"safe-event-emitter": {
"version": "1.0.1",
@ -18564,6 +18583,7 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.2.tgz",
"integrity": "sha512-iin3kojdybY6NArd+UFsoTuapOF7bnJNf2UbcWXaY3z+E1sJDipl60vtzB5hbO/uquBu7z0fd4VC4Irp+xoFVQ==",
"dev": true,
"requires": {
"bindings": "^1.2.1",
"bip66": "^1.1.3",
@ -18695,6 +18715,7 @@
"version": "2.4.11",
"resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"dev": true,
"requires": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
@ -18905,6 +18926,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz",
"integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=",
"dev": true,
"requires": {
"is-hex-prefixed": "1.0.0"
}

View File

@ -118,7 +118,7 @@
"eth-keychain-controller": "github:vbaranov/KeyringController#simple-address",
"eth-ledger-bridge-keyring": "^0.1.0",
"eth-method-registry": "^1.0.0",
"eth-net-props": "^1.0.10",
"eth-net-props": "^1.0.11",
"eth-phishing-detect": "^1.1.4",
"eth-query": "^2.1.2",
"eth-sig-util": "^2.0.2",

View File

@ -382,6 +382,8 @@ module.exports = {
ROPSTEN: 'ropsten',
KOVAN: 'kovan',
RINKEBY: 'rinkeby',
RSK: 'rsk',
RSK_TESTNET: 'rsk_testnet',
LOCALHOST: 'localhost',
CUSTOM: 'http://test.com',
},

View File

@ -132,14 +132,20 @@ class Functions {
case NETWORKS.RINKEBY:
counter = 6
break
case NETWORKS.LOCALHOST:
case NETWORKS.RSK:
counter = 7
break
case NETWORKS.CUSTOM:
case NETWORKS.RSK_TESTNET:
counter = 8
break
case NETWORKS.LOCALHOST:
counter = 9
break
case NETWORKS.CUSTOM:
counter = 10
break
default:
counter = 7
counter = 9
}
await this.driver.executeScript("document.getElementsByClassName('dropdown-menu-item')[" + counter + '].click();')
}

View File

@ -2420,7 +2420,7 @@ describe('Metamask popup page', async function () {
await f.clearField(fieldRpc)
await fieldRpc.sendKeys(correctRpcUrl + 0)
await driver.findElement(screens.settings.buttonSave).click()
await f.delay(10000)
await f.delay(20000)
const customUrlElement = await f.waitUntilShowUp(screens.settings.currentNetwork)
assert.equal(await customUrlElement.getText(), correctRpcUrl + 0, 'Added Url doesn\'t match')
})