diff --git a/app/_locales/cs/messages.json b/app/_locales/cs/messages.json index 76757f0c62e4..69f96d4cd94c 100644 --- a/app/_locales/cs/messages.json +++ b/app/_locales/cs/messages.json @@ -643,6 +643,9 @@ "rinkeby": { "message": "Rinkeby Test Network" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Ropsten Test Network" }, @@ -661,6 +664,9 @@ "connectingToRinkeby": { "message": "Připojuji se k Rinkeby Test Network" }, + "connectingToPOA": { + "message": "[Not translated]" + }, "connectingToUnknown": { "message": "Připojuji se k neznámé síti" }, diff --git a/app/_locales/de/messages.json b/app/_locales/de/messages.json index a0ba615daa3e..69f3286c65fe 100644 --- a/app/_locales/de/messages.json +++ b/app/_locales/de/messages.json @@ -384,7 +384,7 @@ "infoHelp": { "message": "Info & Hilfe" }, - "insufficientFunds": { + "insufficientFunds": { "message": "Nicht genügend Guthaben." }, "insufficientTokens": { @@ -572,7 +572,7 @@ "description": "Wähle diesen Dateityp um damit einen Account zu importieren" }, "privateKeyWarning": { - "message": "Warnung: Niemals jemanden deinen Private Key mitteilen. Jeder der im Besitz deines Private Keys ist, kann jegliches Guthaben deines Accounts stehlen." + "message": "Warnung: Niemals jemanden deinen Private Key mitteilen. Jeder der im Besitz deines Private Keys ist, kann jegliches Guthaben deines Accounts stehlen." }, "privateNetwork": { "message": "Privates Netzwerk" @@ -631,6 +631,9 @@ "rinkeby": { "message": "Rinkeby Testnetzwerk" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Ropsten Testnetzwerk" }, @@ -649,6 +652,9 @@ "connectingToRinkeby": { "message": " Verbinde zum Rinkeby Testnetzwerk" }, + "connectingToPOA": { + "message": "[Not translated]" + }, "connectingToUnknown": { "message": "Verbinde zu einem unbekanntem Netzwerk" }, diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 1453fd3c0df4..010388db3083 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -736,6 +736,9 @@ "ropsten": { "message": "Ropsten Test Network" }, + "poa": { + "message": "POA Network" + }, "rpc": { "message": "Custom RPC" }, @@ -754,6 +757,9 @@ "connectingToRinkeby": { "message": "Connecting to Rinkeby Test Network" }, + "connectingToPOA": { + "message": "Connecting to POA Network" + }, "connectingToUnknown": { "message": "Connecting to Unknown Network" }, diff --git a/app/_locales/es/messages.json b/app/_locales/es/messages.json index 07558cf1c418..8bd1912e5dec 100644 --- a/app/_locales/es/messages.json +++ b/app/_locales/es/messages.json @@ -122,6 +122,9 @@ "connectingToRinkeby": { "message": "Conectando a la red de test Rinkeby" }, + "connectingToPOA": { + "message": "Conectando a la red POA" + }, "connectingToUnknown": { "message": "Conectando a una red desconocida" }, @@ -655,6 +658,9 @@ "rinkeby": { "message": "Red privada Rinkeby" }, + "poa": { + "message": "Red POA" + }, "ropsten": { "message": "Red privada Ropsten" }, diff --git a/app/_locales/fr/messages.json b/app/_locales/fr/messages.json index 82c1f6918249..40eb38c20b9b 100644 --- a/app/_locales/fr/messages.json +++ b/app/_locales/fr/messages.json @@ -472,6 +472,9 @@ "rinkeby": { "message": "Réseau de test Rinkeby" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Réseau de test Ropsten" }, diff --git a/app/_locales/hn/messages.json b/app/_locales/hn/messages.json index b869560e583a..5824088f850f 100644 --- a/app/_locales/hn/messages.json +++ b/app/_locales/hn/messages.json @@ -173,7 +173,7 @@ }, "decimal": { "message": "दशमलव परिशुद्धता" - }, + }, "defaultNetwork": { "message": "ईथर लेनदेन के लिए डिफ़ॉल्ट नेटवर्क मुख्य नेट है।" }, @@ -601,6 +601,9 @@ "rinkeby": { "message": "रिचीव टेस्ट नेटवर्क" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "रॉप्स्टेन टेस्ट नेटवर्क" }, @@ -800,7 +803,7 @@ }, "visitWebSite": { "message": "हमारी वेब साइट पर जाएं" - }, + }, "warning": { "message": "चेतावनी" }, diff --git a/app/_locales/it/messages.json b/app/_locales/it/messages.json index 55bc872bf31b..51c44962c9a1 100644 --- a/app/_locales/it/messages.json +++ b/app/_locales/it/messages.json @@ -601,6 +601,9 @@ "rinkeby": { "message": "Rete di test Rinkeby" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Rete di test Ropsten" }, @@ -816,4 +819,4 @@ "youSign": { "message": "Ti stai connettendo" } -} \ No newline at end of file +} diff --git a/app/_locales/ja/messages.json b/app/_locales/ja/messages.json index e462c3a06ab7..0ae9ce078581 100644 --- a/app/_locales/ja/messages.json +++ b/app/_locales/ja/messages.json @@ -16,7 +16,7 @@ }, "addCustomToken": { "message": "カスタムトークンを追加" - }, + }, "addToken": { "message": "トークンを追加" }, @@ -161,7 +161,7 @@ }, "decimal": { "message": "小数点桁数" - }, + }, "defaultNetwork": { "message": "デフォルトのEther送受信ネットワークはメインネットです。" }, @@ -553,6 +553,9 @@ "rinkeby": { "message": "Rinkebyテストネットワーク" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Ropstenテストネットワーク" }, diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json index 482679f199c7..44b8f42c50c6 100644 --- a/app/_locales/ko/messages.json +++ b/app/_locales/ko/messages.json @@ -472,6 +472,9 @@ "rinkeby": { "message": "Rinkeby 테스트넷" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Ropsten 테스트넷" }, diff --git a/app/_locales/nl/messages.json b/app/_locales/nl/messages.json index f13d5df8911e..80fccc233fcb 100644 --- a/app/_locales/nl/messages.json +++ b/app/_locales/nl/messages.json @@ -601,6 +601,9 @@ "rinkeby": { "message": "Rinkeby testnetwerk" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Ropsten testnetwerk" }, diff --git a/app/_locales/ph/messages.json b/app/_locales/ph/messages.json index 7593ff4463ac..afac3e8e5d61 100644 --- a/app/_locales/ph/messages.json +++ b/app/_locales/ph/messages.json @@ -268,7 +268,7 @@ "message": "i-click ito", "description": "tulad ng -i-click dito- para sa mas maraming impormasyon (kasama ng troubleTokenBalances)" }, - "hide": { + "hide": { "message": "Itago" }, "hideToken": { @@ -472,6 +472,9 @@ "rinkeby": { "message": "Rinkeby Test Network" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Ropsten Test Network" }, diff --git a/app/_locales/pt/messages.json b/app/_locales/pt/messages.json index d9ea9b0cf1e2..b28c73826a6b 100644 --- a/app/_locales/pt/messages.json +++ b/app/_locales/pt/messages.json @@ -173,7 +173,7 @@ }, "decimal": { "message": "Precisão em Decimais" - }, + }, "defaultNetwork": { "message": "A rede pré definida para transações em Ether é a Main Net." }, @@ -601,6 +601,9 @@ "rinkeby": { "message": "Rede de Teste Rinkeby" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Rede de Teste Ropsten" }, @@ -800,7 +803,7 @@ }, "visitWebSite": { "message": "Visite o nosso site" - }, + }, "warning": { "message": "Aviso" }, diff --git a/app/_locales/ru/messages.json b/app/_locales/ru/messages.json index d7e8c1d0619d..db48f5d21561 100644 --- a/app/_locales/ru/messages.json +++ b/app/_locales/ru/messages.json @@ -637,6 +637,9 @@ "rinkeby": { "message": "Тестовая сеть Rinkeby" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Тестовая сеть Ropsten" }, @@ -655,6 +658,9 @@ "connectingToRinkeby": { "message": "Соединение с тестовой сетью Rinkeby" }, + "connectingToPOA": { + "message": "[Not translated]" + }, "connectingToUnknown": { "message": "Соединение с неизвестной сетью" }, diff --git a/app/_locales/sl/messages.json b/app/_locales/sl/messages.json index 9bfe5c88573e..628c55a9e837 100644 --- a/app/_locales/sl/messages.json +++ b/app/_locales/sl/messages.json @@ -173,7 +173,7 @@ }, "decimal": { "message": "Decimalke natančnosti" - }, + }, "defaultNetwork": { "message": "Privzeto omrežje za transakcije je Main Net." }, @@ -601,6 +601,9 @@ "rinkeby": { "message": "Testno omrežje Rinkeby" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Testno omrežje Ropsten" }, @@ -800,7 +803,7 @@ }, "visitWebSite": { "message": "Obiščite našo spletno stran" - }, + }, "warning": { "message": "Opozorilo" }, diff --git a/app/_locales/th/messages.json b/app/_locales/th/messages.json index 096c51eb6715..78ee24f67076 100644 --- a/app/_locales/th/messages.json +++ b/app/_locales/th/messages.json @@ -601,6 +601,9 @@ "rinkeby": { "message": "เครือข่ายทดสอบ Rinkeby" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "เครือข่ายทดสอบ Ropsten" }, diff --git a/app/_locales/tml/messages.json b/app/_locales/tml/messages.json index fcc418bac670..8961de5a27f4 100644 --- a/app/_locales/tml/messages.json +++ b/app/_locales/tml/messages.json @@ -643,6 +643,9 @@ "rinkeby": { "message": "ரிங்கெப்ய டெஸ்ட் நெட்வொர்க்" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "ரொப்ஸ்டென் டெஸ்ட் நெட்வொர்க்" }, @@ -661,6 +664,9 @@ "connectingToRinkeby": { "message": "ரிங்கெப்ய டெஸ்ட் நெட்வொர்க்குடன் இணைக்கிறது" }, + "connectingToPOA": { + "message": "[Not translated]" + }, "connectingToUnknown": { "message": "தெரியாத நெட்வொர்க்குடன் இணைக்கிறது" }, diff --git a/app/_locales/tr/messages.json b/app/_locales/tr/messages.json index 2cdf6ac44f55..7bb2d27c9e87 100644 --- a/app/_locales/tr/messages.json +++ b/app/_locales/tr/messages.json @@ -643,6 +643,9 @@ "rinkeby": { "message": "Rinkeby Test Ağı" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Ropsten Test Ağı" }, @@ -661,6 +664,9 @@ "connectingToRinkeby": { "message": "Rinkeby Test Ağına bağlanıyor" }, + "connectingToPOA": { + "message": "[Not translated]" + }, "connectingToUnknown": { "message": "Bilinmeyen Ağa bağlanıyor" }, @@ -909,4 +915,4 @@ "youSign": { "message": "İmzalıyorsunuz" } -} \ No newline at end of file +} diff --git a/app/_locales/vi/messages.json b/app/_locales/vi/messages.json index d3e41e03a65c..085ab10240bd 100644 --- a/app/_locales/vi/messages.json +++ b/app/_locales/vi/messages.json @@ -472,6 +472,9 @@ "rinkeby": { "message": "Mạng thử nghiệm Rinkeby" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Mạng thử nghiệm Ropsten" }, diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json index f2b01e760371..5da9806a0c11 100644 --- a/app/_locales/zh_CN/messages.json +++ b/app/_locales/zh_CN/messages.json @@ -667,6 +667,9 @@ "rinkeby": { "message": "Rinkeby 测试网络" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Ropsten 测试网络" }, @@ -685,6 +688,9 @@ "connectingToRinkeby": { "message": "正在连接到Rinkeby测试网络" }, + "connectingToPOA": { + "message": "[Not translated]" + }, "connectingToUnknown": { "message": "正在连接到未知网络" }, diff --git a/app/_locales/zh_TW/messages.json b/app/_locales/zh_TW/messages.json index 01aa2fb9794c..113c9280df39 100644 --- a/app/_locales/zh_TW/messages.json +++ b/app/_locales/zh_TW/messages.json @@ -643,6 +643,9 @@ "rinkeby": { "message": "Rinkeby 測試網路" }, + "poa": { + "message": "[Not translated]" + }, "ropsten": { "message": "Ropsten 測試網路" }, @@ -661,6 +664,9 @@ "connectingToRinkeby": { "message": "連線到 Rinkeby 測試網路" }, + "connectingToPOA": { + "message": "[Not translated]" + }, "connectingToUnknown": { "message": "連線到未知網路" }, diff --git a/app/scripts/controllers/network/enums.js b/app/scripts/controllers/network/enums.js index 861d18dbc086..30ace716aacd 100644 --- a/app/scripts/controllers/network/enums.js +++ b/app/scripts/controllers/network/enums.js @@ -2,19 +2,22 @@ const ROPSTEN = 'ropsten' const RINKEBY = 'rinkeby' const KOVAN = 'kovan' const MAINNET = 'mainnet' -const LOCALHOST = 'localhost' const POA_SOKOL = 'sokol' +const POA = 'poa' +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 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 MAINNET_DISPLAY_NAME = 'Main Ethereum Network' module.exports = { @@ -22,16 +25,19 @@ module.exports = { RINKEBY, KOVAN, MAINNET, - LOCALHOST, POA_SOKOL, + POA, + LOCALHOST, MAINNET_CODE, ROPSTEN_CODE, RINKEYBY_CODE, KOVAN_CODE, POA_SOKOL_CODE, + POA_CODE, ROPSTEN_DISPLAY_NAME, RINKEBY_DISPLAY_NAME, KOVAN_DISPLAY_NAME, MAINNET_DISPLAY_NAME, POA_SOKOL_DISPLAY_NAME, + POA_DISPLAY_NAME, } diff --git a/app/scripts/controllers/network/network.js b/app/scripts/controllers/network/network.js index 068abb86dc9c..1ab2ddc54f30 100644 --- a/app/scripts/controllers/network/network.js +++ b/app/scripts/controllers/network/network.js @@ -16,8 +16,10 @@ const { MAINNET, LOCALHOST, POA_SOKOL, + POA, } = require('./enums') const LOCALHOST_RPC_URL = 'http://localhost:8545' +const POA_RPC_URL = 'https://core.poa.network' const SOKOL_RPC_URL = 'https://sokol.poa.network' const INFURA_PROVIDER_TYPES = [ROPSTEN, RINKEBY, KOVAN, MAINNET] @@ -26,7 +28,7 @@ const METAMASK_DEBUG = process.env.METAMASK_DEBUG const testMode = (METAMASK_DEBUG || env === 'test') const defaultProviderConfig = { - type: testMode ? POA_SOKOL : MAINNET, + type: testMode ? POA_SOKOL : POA, } module.exports = class NetworkController extends EventEmitter { @@ -96,7 +98,7 @@ 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, `NetworkController - Unknown rpc type "${type}"`) + assert(INFURA_PROVIDER_TYPES.includes(type) || type === LOCALHOST || type === POA_SOKOL || type === POA, `NetworkController - Unknown rpc type "${type}"`) const providerConfig = { type } this.providerConfig = providerConfig } @@ -131,11 +133,13 @@ module.exports = class NetworkController extends EventEmitter { if (isInfura) { this._configureInfuraProvider(opts) // other type-based rpc endpoints + } else if (type === POA) { + this._configureStandardProvider({ rpcUrl: POA_RPC_URL }) + } else if (type === POA_SOKOL) { + this._configureStandardProvider({ rpcUrl: SOKOL_RPC_URL }) } else if (type === LOCALHOST) { this._configureStandardProvider({ rpcUrl: LOCALHOST_RPC_URL }) // url-based rpc endpoints - } else if (type === POA_SOKOL) { - this._configureStandardProvider({ rpcUrl: SOKOL_RPC_URL }) } else if (type === 'rpc') { this._configureStandardProvider({ rpcUrl: rpcTarget }) } else { diff --git a/app/scripts/controllers/network/util.js b/app/scripts/controllers/network/util.js index ed0eabcfb9f5..414e1feb86bb 100644 --- a/app/scripts/controllers/network/util.js +++ b/app/scripts/controllers/network/util.js @@ -1,5 +1,6 @@ const { POA_SOKOL, + POA, ROPSTEN, RINKEBY, KOVAN, @@ -8,15 +9,18 @@ const { ROPSTEN_CODE, RINKEYBY_CODE, KOVAN_CODE, + POA_CODE, POA_SOKOL_DISPLAY_NAME, ROPSTEN_DISPLAY_NAME, RINKEBY_DISPLAY_NAME, KOVAN_DISPLAY_NAME, MAINNET_DISPLAY_NAME, + POA_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, @@ -25,6 +29,7 @@ const networkToNameMap = { [ROPSTEN_CODE]: ROPSTEN_DISPLAY_NAME, [RINKEYBY_CODE]: RINKEBY_DISPLAY_NAME, [KOVAN_CODE]: KOVAN_DISPLAY_NAME, + [POA_CODE]: POA_DISPLAY_NAME, } const getNetworkDisplayName = key => networkToNameMap[key] diff --git a/app/scripts/lib/buy-eth-url.js b/app/scripts/lib/buy-eth-url.js index 4f8e1447566e..697a1a76e308 100644 --- a/app/scripts/lib/buy-eth-url.js +++ b/app/scripts/lib/buy-eth-url.js @@ -33,6 +33,10 @@ function getBuyEthUrl ({ network, amount, address }) { case '77': url = 'https://faucet-sokol.herokuapp.com/' break + + case '99': + url = 'https://poa.network/' + break } return url } diff --git a/app/scripts/lib/config-manager.js b/app/scripts/lib/config-manager.js index 800c4e0f1e9a..8dacd037def0 100644 --- a/app/scripts/lib/config-manager.js +++ b/app/scripts/lib/config-manager.js @@ -6,6 +6,7 @@ const { KOVAN_RPC_URL, RINKEBY_RPC_URL, POA_SOKOL_RPC_URL, + POA_RPC_URL, } = require('../controllers/network/enums') /* The config-manager is a convenience object @@ -156,9 +157,6 @@ ConfigManager.prototype.getCurrentRpcAddress = function () { case 'mainnet': return MAINNET_RPC_URL - case 'sokol': - return POA_SOKOL_RPC_URL - case 'ropsten': return ROPSTEN_RPC_URL @@ -168,6 +166,12 @@ ConfigManager.prototype.getCurrentRpcAddress = function () { case 'rinkeby': return RINKEBY_RPC_URL + case 'sokol': + return POA_SOKOL_RPC_URL + + case 'poa': + return POA_RPC_URL + default: return provider && provider.rpcTarget ? provider.rpcTarget : POA_SOKOL_RPC_URL } diff --git a/old-ui/app/app.js b/old-ui/app/app.js index 802e85fe04b7..73d3c3e0e40d 100644 --- a/old-ui/app/app.js +++ b/old-ui/app/app.js @@ -260,17 +260,17 @@ App.prototype.renderNetworkDropdown = function () { h( DropdownMenuItem, { - key: 'main', + key: 'poa', closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }), - onClick: () => props.dispatch(actions.setProviderType('mainnet')), + onClick: () => props.dispatch(actions.setProviderType('poa')), style: { fontSize: '18px', }, }, [ - h('.menu-icon.diamond'), - 'Main Ethereum Network', - providerType === 'mainnet' ? h('.check', '✓') : null, + h('.menu-icon.purple-square'), + 'POA Network', + providerType === 'poa' ? h('.check', '✓') : null, ] ), @@ -291,6 +291,23 @@ App.prototype.renderNetworkDropdown = function () { ] ), + h( + DropdownMenuItem, + { + key: 'main', + closeMenu: () => this.setState({ isNetworkMenuOpen: !isOpen }), + onClick: () => props.dispatch(actions.setProviderType('mainnet')), + style: { + fontSize: '18px', + }, + }, + [ + h('.menu-icon.diamond'), + 'Main Ethereum Network', + providerType === 'mainnet' ? h('.check', '✓') : null, + ] + ), + h( DropdownMenuItem, { @@ -669,6 +686,8 @@ App.prototype.getNetworkName = function () { name = 'Kovan Test Network' } else if (providerName === 'rinkeby') { name = 'Rinkeby Test Network' + } else if (providerName === 'poa') { + name = 'POA Network' } else { name = 'Unknown Private Network' } diff --git a/old-ui/app/components/account-dropdowns.js b/old-ui/app/components/account-dropdowns.js index a14b8af7852b..34f711ded5af 100644 --- a/old-ui/app/components/account-dropdowns.js +++ b/old-ui/app/components/account-dropdowns.js @@ -164,9 +164,13 @@ class AccountDropdowns extends Component { genPOAEplorerAccountLink (selected, network) { const isSokol = parseInt(network) === 77 + const isPOA = parseInt(network) === 99 if (isSokol) { return `https://sokol.poaexplorer.com/address/search/${selected}` } + if (isPOA) { + return `https://poaexplorer.com/address/search/${selected}` + } return '' } @@ -176,7 +180,8 @@ class AccountDropdowns extends Component { const { optionsMenuActive } = this.state const isSokol = parseInt(network) === 77 - const explorerStr = isSokol ? 'POA explorer' : 'Etherscan' + const isPOA = parseInt(network) === 99 + const explorerStr = (isSokol || isPOA) ? 'POA explorer' : 'Etherscan' return h( Dropdown, @@ -201,7 +206,7 @@ class AccountDropdowns extends Component { closeMenu: () => {}, onClick: () => { const { selected, network } = this.props - const url = isSokol ? this.genPOAEplorerAccountLink(selected, network) : genAccountLink(selected, network) + const url = (isSokol || isPOA) ? this.genPOAEplorerAccountLink(selected, network) : genAccountLink(selected, network) global.platform.openWindow({ url }) }, }, diff --git a/old-ui/app/components/buy-button-subview.js b/old-ui/app/components/buy-button-subview.js index fa144344cf5f..45f807d32493 100644 --- a/old-ui/app/components/buy-button-subview.js +++ b/old-ui/app/components/buy-button-subview.js @@ -48,7 +48,8 @@ BuyButtonSubview.prototype.headerSubview = function () { const { network } = props const isLoading = props.isSubLoading const isSokol = parseInt(network) === 77 - const coinName = isSokol ? 'SPOA' : 'ETH' + const isPOA = parseInt(network) === 99 + const coinName = isPOA ? 'POA' : isSokol ? 'SPOA' : 'ETH' return ( h('.flex-column', { @@ -142,13 +143,14 @@ BuyButtonSubview.prototype.primarySubview = function () { case '1': return this.mainnetSubview() - // Ropsten, Rinkeby, Kovan + // Ropsten, Rinkeby, Kovan, Sokol, POA case '3': case '4': case '42': case '77': + case '99': const networkName = getNetworkDisplayName(network) - const label = `${networkName} Test Faucet` + const label = network === '99' ? 'POA Network' : `${networkName} Test Faucet` return ( h('div.flex-column', { style: { diff --git a/old-ui/app/components/network.js b/old-ui/app/components/network.js index 142b90a6622e..6f0e828b2f20 100644 --- a/old-ui/app/components/network.js +++ b/old-ui/app/components/network.js @@ -58,6 +58,9 @@ Network.prototype.render = function () { } else if (providerName === 'rinkeby') { hoverText = 'Rinkeby Test Network' iconName = 'rinkeby-test-network' + } else if (providerName === 'poa') { + hoverText = 'POA Network' + iconName = 'poa-network' } else { hoverText = 'Unknown Private Network' iconName = 'unknown-private-network' @@ -122,6 +125,16 @@ Network.prototype.render = function () { 'Rinkeby Test Net'), props.onClick && h('i.fa.fa-caret-down.fa-lg'), ]) + case 'poa-network': + return h('.network-indicator', [ + h('.menu-icon.purple-square'), + h('.network-name', { + style: { + color: '#5c34a2', + }}, + 'POA Network'), + props.onClick && h('i.fa.fa-caret-down.fa-lg'), + ]) default: return h('.network-indicator', [ h('i.fa.fa-question-circle.fa-lg', { diff --git a/old-ui/app/components/transaction-list-item.js b/old-ui/app/components/transaction-list-item.js index bc2936882a7d..1fc60d570805 100644 --- a/old-ui/app/components/transaction-list-item.js +++ b/old-ui/app/components/transaction-list-item.js @@ -48,9 +48,13 @@ TransactionListItem.prototype.showRetryButton = function () { const poaExplorerTxLink = (hash, network) => { const isSokol = network === 77 + const isPOA = network === 99 if (isSokol) { return `https://sokol.poaexplorer.com/txid/search/${hash}` } + if (isPOA) { + return `https://poaexplorer.com/txid/search/${hash}` + } return '' } @@ -65,7 +69,7 @@ TransactionListItem.prototype.render = function () { let isLinkable = false const numericNet = parseInt(network) - isLinkable = numericNet === 1 || numericNet === 3 || numericNet === 4 || numericNet === 42 || numericNet === 77 + isLinkable = numericNet === 1 || numericNet === 3 || numericNet === 4 || numericNet === 42 || numericNet === 77 || numericNet === 99 var isMsg = ('msgParams' in transaction) var isTx = ('txParams' in transaction) @@ -89,8 +93,9 @@ TransactionListItem.prototype.render = function () { event.stopPropagation() if (!transaction.hash || !isLinkable) return const isSokol = numericNet === 77 + const isPOA = numericNet === 99 let url - if (isSokol) { + if (isSokol || isPOA) { url = poaExplorerTxLink(transaction.hash, numericNet) } else { url = explorerLink(transaction.hash, numericNet) diff --git a/old-ui/app/config.js b/old-ui/app/config.js index e8aac7a78c67..607f01947e0f 100644 --- a/old-ui/app/config.js +++ b/old-ui/app/config.js @@ -254,6 +254,11 @@ function currentProviderDisplay (metamaskState) { value = 'Rinkeby Test Network' break + case 'poa': + title = 'Current Network' + value = 'POA Network' + break + default: title = 'Current RPC' value = metamaskState.provider.rpcTarget diff --git a/old-ui/app/css/lib.css b/old-ui/app/css/lib.css index 7ade710eca99..f4e2f59e5e2a 100644 --- a/old-ui/app/css/lib.css +++ b/old-ui/app/css/lib.css @@ -199,6 +199,10 @@ hr.horizontal-line { background: #EBB33F; } +.purple-square { + background: #5c34a2; +} + .pending-dot { background: red; left: 14px; diff --git a/old-ui/app/css/output/index.css b/old-ui/app/css/output/index.css index bed689ecb1fc..5306af6e00eb 100644 --- a/old-ui/app/css/output/index.css +++ b/old-ui/app/css/output/index.css @@ -662,6 +662,9 @@ hr.horizontal-line { .golden-square { background: #ebb33f; } +.purple-square { + background: #5c34a2; } + .pending-dot { background: #f00; left: 14px; @@ -1184,6 +1187,10 @@ h2.page-subtitle { border-color: #ebb33f; } .network-component.pointer.rinkeby-test-network .menu-icon-circle div { background-color: rgba(235, 179, 63, 0.7) !important; } + .network-component.pointer.poa-network { + border-color: #5c34a2; } + .network-component.pointer.poa-network .menu-icon-circle div { + background-color: #5c34a2 !important; } .dropdown-menu-item .menu-icon-circle, .dropdown-menu-item .menu-icon-circle--active { diff --git a/old-ui/app/util.js b/old-ui/app/util.js index 64e445b98194..036dbed85635 100644 --- a/old-ui/app/util.js +++ b/old-ui/app/util.js @@ -104,7 +104,8 @@ function parseBalance (balance) { // Its "formatted" property is what we generally use to render values. function formatBalance (balance, decimalsToKeep, needsParse = true, network) { const isSokol = parseInt(network) === 77 - const coinName = isSokol ? 'SPOA' : 'ETH' + const isPOA = parseInt(network) === 99 + const coinName = isPOA ? 'POA' : isSokol ? 'SPOA' : 'ETH' var parsed = needsParse ? parseBalance(balance) : balance.split('.') var beforeDecimal = parsed[0] var afterDecimal = parsed[1] diff --git a/old-ui/lib/etherscan-prefix-for-network.js b/old-ui/lib/etherscan-prefix-for-network.js index 2c1904f1c4b5..f8414e285f48 100644 --- a/old-ui/lib/etherscan-prefix-for-network.js +++ b/old-ui/lib/etherscan-prefix-for-network.js @@ -14,6 +14,10 @@ module.exports = function (network) { case 42: // kovan test net prefix = 'kovan.' break + case 99: // poa net + console.warn('Do not use etherscan for POA Network') + prefix = '' + break default: prefix = '' } diff --git a/ui/app/app.js b/ui/app/app.js index a00692df0d3f..8be50631edf0 100644 --- a/ui/app/app.js +++ b/ui/app/app.js @@ -231,6 +231,8 @@ class App extends Component { name = this.context.t('connectingToRopsten') } else if (providerName === 'rinkeby') { name = this.context.t('connectingToRinkeby') + } else if (providerName === 'poa') { + name = this.context.t('connectingToPOA') } else { name = this.context.t('connectingToUnknown') } @@ -252,6 +254,8 @@ class App extends Component { name = this.context.t('kovan') } else if (providerName === 'rinkeby') { name = this.context.t('rinkeby') + } else if (providerName === 'poa') { + name = this.context.t('poa') } else { name = this.context.t('unknownNetwork') } diff --git a/ui/app/components/buy-button-subview.js b/ui/app/components/buy-button-subview.js index c6957d2aaa3e..01d0221812c4 100644 --- a/ui/app/components/buy-button-subview.js +++ b/ui/app/components/buy-button-subview.js @@ -144,10 +144,11 @@ BuyButtonSubview.prototype.primarySubview = function () { case '1': return this.mainnetSubview() - // Ropsten, Rinkeby, Kovan + // Ropsten, Rinkeby, Kovan, POA case '3': case '4': case '42': + case '99': const networkName = getNetworkDisplayName(network) const label = `${networkName} ${this.context.t('testFaucet')}` return ( diff --git a/ui/app/components/dropdowns/network-dropdown.js b/ui/app/components/dropdowns/network-dropdown.js index dcd6b4370406..89da029a7480 100644 --- a/ui/app/components/dropdowns/network-dropdown.js +++ b/ui/app/components/dropdowns/network-dropdown.js @@ -200,6 +200,28 @@ NetworkDropdown.prototype.render = function () { ] ), + h( + DropdownMenuItem, + { + key: 'poa', + closeMenu: () => this.props.hideNetworkDropdown(), + onClick: () => props.setProviderType('poa'), + style: dropdownMenuItemStyle, + }, + [ + providerType === 'poa' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'), + h(NetworkDropdownIcon, { + backgroundColor: '#5c34a2', // $saffron + isSelected: providerType === 'poa', + }), + h('span.network-name-item', { + style: { + color: providerType === 'poa' ? '#ffffff' : '#9b9b9b', + }, + }, this.context.t('poa')), + ] + ), + h( DropdownMenuItem, { @@ -264,6 +286,8 @@ NetworkDropdown.prototype.getNetworkName = function () { name = this.context.t('kovan') } else if (providerName === 'rinkeby') { name = this.context.t('rinkeby') + } else if (providerName === 'poa') { + name = this.context.t('poa') } else { name = this.context.t('unknownNetwork') } diff --git a/ui/app/components/network-display/index.scss b/ui/app/components/network-display/index.scss index 2085cff67cc3..57cbf6265a77 100644 --- a/ui/app/components/network-display/index.scss +++ b/ui/app/components/network-display/index.scss @@ -23,6 +23,10 @@ &--rinkeby { background-color: lighten($tulip-tree, 35%); } + + &--poa { + background-color: lighten(#5c34a2, 45%); + } } &__name { @@ -50,5 +54,9 @@ &--rinkeby { background-color: $tulip-tree; } + + &--poa { + background-color: #5c34a2; + } } } diff --git a/ui/app/components/network-display/network-display.component.js b/ui/app/components/network-display/network-display.component.js index 38626af20667..f4b4abeb713f 100644 --- a/ui/app/components/network-display/network-display.component.js +++ b/ui/app/components/network-display/network-display.component.js @@ -6,6 +6,7 @@ import { ROPSTEN_CODE, RINKEYBY_CODE, KOVAN_CODE, + POA_CODE, } from '../../../../app/scripts/controllers/network/enums' const networkToClassHash = { @@ -13,6 +14,7 @@ const networkToClassHash = { [ROPSTEN_CODE]: 'ropsten', [RINKEYBY_CODE]: 'rinkeby', [KOVAN_CODE]: 'kovan', + [POA_CODE]: 'poa', } export default class NetworkDisplay extends Component { diff --git a/ui/app/components/network.js b/ui/app/components/network.js index 83297c4f2251..7ae342d8ee0e 100644 --- a/ui/app/components/network.js +++ b/ui/app/components/network.js @@ -63,6 +63,9 @@ Network.prototype.render = function () { } else if (providerName === 'rinkeby') { hoverText = context.t('rinkeby') iconName = 'rinkeby-test-network' + } else if (providerName === 'poa') { + hoverText = context.t('poa') + iconName = 'poa-network' } else { hoverText = context.t('unknownNetwork') iconName = 'unknown-private-network' @@ -76,6 +79,7 @@ Network.prototype.render = function () { 'ropsten-test-network': providerName === 'ropsten' || parseInt(networkNumber) === 3, 'kovan-test-network': providerName === 'kovan', 'rinkeby-test-network': providerName === 'rinkeby', + 'poa-network': providerName === 'poa', }), title: hoverText, onClick: (event) => { @@ -122,6 +126,15 @@ Network.prototype.render = function () { h('.network-name', context.t('rinkeby')), h('i.fa.fa-chevron-down.fa-lg.network-caret'), ]) + case 'poa-network': + return h('.network-indicator', [ + h(NetworkDropdownIcon, { + backgroundColor: '#5c34a2', // $tulip-tree + nonSelectBackgroundColor: '#5c34a2', + }), + h('.network-name', context.t('poa')), + h('i.fa.fa-chevron-down.fa-lg.network-caret'), + ]) default: return h('.network-indicator', [ h('i.fa.fa-question-circle.fa-lg', { diff --git a/ui/app/components/pages/settings/settings.js b/ui/app/components/pages/settings/settings.js index c8f28c28ab04..a8945f22b3e2 100644 --- a/ui/app/components/pages/settings/settings.js +++ b/ui/app/components/pages/settings/settings.js @@ -142,6 +142,12 @@ class Settings extends Component { color = '#ebb33f' break + case 'poa': + title = this.context.t('currentNetwork') + value = this.context.t('poa') + color = '#5c34a2' + break + default: title = this.context.t('currentRpc') value = provider.rpcTarget diff --git a/ui/app/css/itcss/components/network.scss b/ui/app/css/itcss/components/network.scss index 545a2a940abd..4733f2f3ad2f 100644 --- a/ui/app/css/itcss/components/network.scss +++ b/ui/app/css/itcss/components/network.scss @@ -29,6 +29,10 @@ &.rinkeby-test-network .menu-icon-circle div { background-color: rgba(235, 179, 63, .7) !important; } + + &.poa-network .menu-icon-circle div { + background-color: #5c34a2 !important; + } } .dropdown-menu-item { diff --git a/ui/app/css/itcss/tools/utilities.scss b/ui/app/css/itcss/tools/utilities.scss index 209614c6bc78..b3b96d90bf0e 100644 --- a/ui/app/css/itcss/tools/utilities.scss +++ b/ui/app/css/itcss/tools/utilities.scss @@ -213,6 +213,10 @@ hr.horizontal-line { background: #ebb33f; } +.purple-square { + background: #5c34a2; +} + .pending-dot { background: $red; left: 14px; diff --git a/ui/lib/account-link.js b/ui/lib/account-link.js index 037d990fa223..9008aab167b8 100644 --- a/ui/lib/account-link.js +++ b/ui/lib/account-link.js @@ -17,6 +17,12 @@ module.exports = function (address, network) { case 42: // kovan test net link = `https://kovan.etherscan.io/address/${address}` break + case 77: // sokol test net + link = `https://sokol.poaexplorer.com/account/${address}` + break + case 99: // poa net + link = `https://poaexplorer.com/account/${address}` + break default: link = '' break diff --git a/ui/lib/etherscan-prefix-for-network.js b/ui/lib/etherscan-prefix-for-network.js index 2c1904f1c4b5..9290c8abbb76 100644 --- a/ui/lib/etherscan-prefix-for-network.js +++ b/ui/lib/etherscan-prefix-for-network.js @@ -14,6 +14,10 @@ module.exports = function (network) { case 42: // kovan test net prefix = 'kovan.' break + case 99: // poa net + console.warn('Do not use etherscan for POA Netowrk') + prefix = '' + break default: prefix = '' }