Convert png/gif/svg to data:image/* uris (#8941)

* Convert png/gif/svg to data:image/* uris

* Ensure ui{Color, Logo} expands from EndpointOption -> LinkOption

* Dedupe shared options

* Apply uiColor & uiLogo

* Convert statemine/statemint/westmine to ui*

* Add script

* Adjustments

* Adjust logos

* Additional

* Additional

* Additional

* Additional

* Additional

* Additional

* Additional

* Additional

* Adjust

* Additional

* Additional

* Additional

* Additional

* Additional

* Additional

* Additional
This commit is contained in:
Jaco 2023-02-06 11:27:14 +02:00 committed by GitHub
parent aa0cb681bd
commit 07651f72f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
46 changed files with 857 additions and 770 deletions

View File

@ -33,8 +33,9 @@
"build:electron": "yarn clean:electronBuild && yarn build:electronMain && yarn build:electronRenderer",
"build:electronMain": "cd packages/apps-electron && NODE_ENV=production yarn polkadot-exec-webpack --config webpack.main.cjs",
"build:electronRenderer": "cd packages/apps-electron && NODE_ENV=production yarn polkadot-exec-webpack --config webpack.renderer.cjs",
"build:extra": "yarn run test:one packages/apps-config/src/api/typesBundle.spec.ts",
"build:extra": "yarn build:images && yarn run test:one packages/apps-config/src/api/typesBundle.spec.ts",
"build:i18n": "i18next-scanner --config i18next-scanner.config.cjs && node ./scripts/i18nSort.cjs",
"build:images": "node scripts/imgConvert.mjs",
"build:release:electron": "yarn build && yarn build:electron && yarn postinstall:electron",
"build:release:ghpages": "yarn polkadot-ci-ghact-docs",
"build:release:ipfs": "node scripts/ipfsUpload.mjs",

View File

@ -37,6 +37,7 @@
"@polkadot/networks": "^10.3.1",
"@polkadot/types": "^9.13.6",
"@polkadot/util": "^10.3.1",
"@polkadot/wasm-util": "^6.4.1",
"@polkadot/x-fetch": "^10.3.1",
"@polymathnetwork/polymesh-types": "0.0.2",
"@snowfork/snowbridge-types": "0.2.7",

View File

@ -19,21 +19,24 @@ export const prodChains: EndpointOption[] = [
providers: {
'3dpass': 'wss://rpc2.3dpass.org'
},
text: '3DPass'
text: '3DPass',
uiColor: '#323232'
},
{
info: 'aleph',
providers: {
'Aleph Zero Foundation': 'wss://ws.azero.dev'
},
text: 'Aleph Zero'
text: 'Aleph Zero',
uiColor: '#00CCAB'
},
{
info: 'Ares Odyssey',
providers: {
'Ares Protocol': 'wss://odyssey.aresprotocol.io'
},
text: 'Ares Odyssey'
text: 'Ares Odyssey',
uiColor: '#1295F0'
},
{
info: 'automata',
@ -41,14 +44,16 @@ export const prodChains: EndpointOption[] = [
'Automata Network': 'wss://api.ata.network',
OnFinality: 'wss://automata.api.onfinality.io/public-ws'
},
text: 'Automata'
text: 'Automata',
uiColor: '#EC7032'
},
{
info: 'bittensor',
providers: {
'Opentensor Fdn (Archive)': 'wss://archivelb.nakamoto.opentensor.ai:9943'
},
text: 'Bittensor'
text: 'Bittensor',
uiColor: '#252525'
},
{
info: 'centrifuge',
@ -62,28 +67,32 @@ export const prodChains: EndpointOption[] = [
providers: {
ChainX: 'wss://mainnet.chainx.org/ws'
},
text: 'ChainX'
text: 'ChainX',
uiColor: '#F6C94A'
},
{
info: 'competitors-club',
providers: {
// 'Competitors Club': 'wss://node0.competitors.club/wss' // https://github.com/polkadot-js/apps/issues/8263
},
text: 'Competitors Club'
text: 'Competitors Club',
uiColor: '#213830'
},
{
info: 'creditcoin',
providers: {
'Creditcoin Foundation': 'wss://rpc.mainnet.creditcoin.network/ws'
},
text: 'Creditcoin'
text: 'Creditcoin',
uiColor: '#2D353F'
},
{
info: 'crown-sterling',
providers: {
'Crown Sterling': 'wss://blockchain.crownsterling.io'
},
text: 'Crown Sterling'
text: 'Crown Sterling',
uiColor: '#13264b'
},
{
info: 'crust',
@ -115,7 +124,8 @@ export const prodChains: EndpointOption[] = [
providers: {
DeBio: 'wss://ws-rpc.debio.network'
},
text: 'DeBio'
text: 'DeBio',
uiColor: '#FF56E0'
},
{
info: 'dock-pos-mainnet',
@ -131,14 +141,16 @@ export const prodChains: EndpointOption[] = [
JelliedOwl: 'wss://edgeware.jelliedowl.net'
// OnFinality: 'wss://edgeware.api.onfinality.io/public-ws', // https://github.com/polkadot-js/apps/issues/8768
},
text: 'Edgeware'
text: 'Edgeware',
uiColor: '#111111'
},
{
info: 'efinity',
providers: {
// Efinity: 'wss://rpc.efinity.io' // https://github.com/polkadot-js/apps/pull/6761
},
text: 'Efinity'
text: 'Efinity',
uiColor: '#496ddb'
},
{
info: 'equilibrium',
@ -159,7 +171,8 @@ export const prodChains: EndpointOption[] = [
providers: {
// Hanonycash: 'wss://rpc.hanonycash.com' // https://github.com/polkadot-js/apps/runs/2755409009?check_suite_focus=true
},
text: 'Hanonycash'
text: 'Hanonycash',
uiColor: '#0099CC'
},
{
info: 'joystream',
@ -173,7 +186,8 @@ export const prodChains: EndpointOption[] = [
providers: {
Kulupu: 'wss://rpc.kulupu.corepaper.org/ws'
},
text: 'Kulupu'
text: 'Kulupu',
uiColor: '#003366'
},
{
info: 'kusari',
@ -187,7 +201,8 @@ export const prodChains: EndpointOption[] = [
providers: {
Logion: 'wss://rpc01.logion.network'
},
text: 'logion Standalone'
text: 'logion Standalone',
uiColor: 'rgb(21, 38, 101)'
},
{
info: 'mathchain',
@ -202,7 +217,8 @@ export const prodChains: EndpointOption[] = [
providers: {
// ChainX: 'wss://minichain-mainnet.coming.chat/ws' // https://github.com/polkadot-js/apps/issues/7182
},
text: 'MiniX'
text: 'MiniX',
uiColor: '#5152f7'
},
{
info: 'myriad',
@ -231,7 +247,8 @@ export const prodChains: EndpointOption[] = [
// Nodle: 'wss://main3.nodleprotocol.io', // https://github.com/polkadot-js/apps/issues/7652
// OnFinality: 'wss://nodle.api.onfinality.io/public-ws' // https://github.com/polkadot-js/apps/issues/8013
},
text: 'Nodle'
text: 'Nodle',
uiColor: '#1ab394'
},
{
info: 'polkadex',
@ -239,7 +256,8 @@ export const prodChains: EndpointOption[] = [
OnFinality: 'wss://polkadex.api.onfinality.io/public-ws',
'Polkadex Team': 'wss://mainnet.polkadex.trade'
},
text: 'Polkadex'
text: 'Polkadex',
uiColor: '#7C30DD'
},
{
info: 'polymesh',
@ -267,7 +285,8 @@ export const prodChains: EndpointOption[] = [
providers: {
ChainX: 'wss://mainnet.sherpax.io'
},
text: 'SherpaX'
text: 'SherpaX',
uiColor: '#6bbee8'
},
{
info: 'sora-substrate',
@ -277,14 +296,16 @@ export const prodChains: EndpointOption[] = [
'SORA Parliament Ministry of Finance #2': 'wss://mof2.sora.org',
'SORA Parliament Ministry of Finance #3': 'wss://mof3.sora.org'
},
text: 'SORA'
text: 'SORA',
uiColor: '#2D2926'
},
{
info: 'spanner',
providers: {
// Spanner: 'wss://wss.spannerprotocol.com' // https://github.com/polkadot-js/apps/issues/6547
},
text: 'Spanner'
text: 'Spanner',
uiColor: '#EC3D3D'
},
{
info: 'stafi',
@ -292,14 +313,16 @@ export const prodChains: EndpointOption[] = [
providers: {
'Stafi Foundation': 'wss://mainnet-rpc.stafi.io'
},
text: 'Stafi'
text: 'Stafi',
uiColor: '#00F3AB'
},
{
info: 'subgame',
providers: {
SubGame: 'wss://mainnet.subgame.org/'
},
text: 'SubGame'
text: 'SubGame',
uiColor: '#EB027D'
},
{
info: 'subsocial',
@ -313,14 +336,16 @@ export const prodChains: EndpointOption[] = [
providers: {
Swapdex: 'wss://ws.swapdex.network'
},
text: 'Swapdex'
text: 'Swapdex',
uiColor: '#E94082'
},
{
info: 'ternoa',
providers: {
CapsuleCorp: 'wss://mainnet.ternoa.network'
},
text: 'Ternoa'
text: 'Ternoa',
uiColor: '#d622ff'
},
{
info: 'thebifrost-mainnet',
@ -349,6 +374,7 @@ export const prodChains: EndpointOption[] = [
providers: {
// DataHighway: 'wss://westlake.datahighway.com' // https://github.com/polkadot-js/apps/issues/7293
},
text: 'Westlake'
text: 'Westlake',
uiColor: 'linear-gradient(-90deg, #9400D3 0%, #5A5CA9 50%, #00BFFF 100%)'
}
];

View File

@ -4,6 +4,8 @@
import type { EndpointOption } from './types';
import { KUSAMA_GENESIS } from '../api/constants';
import { chainsAbandPNG, chainsKusamaSVG, chainsTinkerPNG, chainsTuringPNG } from '../ui/logos/chains';
import { nodesAjunaPNG, nodesBridgeHubBlackSVG, nodesStatemineSVG, nodesZeitgeistPNG } from '../ui/logos/nodes';
import { getTeleports } from './util';
// The available endpoints that will show in the dropdown. For the most part (with the exception of
@ -21,7 +23,9 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
'Aband DAO': 'wss://rpc-parachain.a.band'
},
text: 'Aband'
text: 'Aband',
uiColor: '#7358ff',
uiLogo: chainsAbandPNG
},
{
homepage: 'https://centrifuge.io/altair',
@ -31,7 +35,8 @@ export const prodParasKusama: EndpointOption[] = [
Centrifuge: 'wss://fullnode.altair.centrifuge.io',
OnFinality: 'wss://altair.api.onfinality.io/public-ws'
},
text: 'Altair'
text: 'Altair',
uiColor: '#ffb700'
},
{
homepage: 'https://pendulumchain.org/amplitude',
@ -41,7 +46,8 @@ export const prodParasKusama: EndpointOption[] = [
Dwellir: 'wss://amplitude-rpc.dwellir.com',
PendulumChain: 'wss://rpc-amplitude.pendulumchain.tech'
},
text: 'Amplitude'
text: 'Amplitude',
uiColor: '#5DEFA7'
},
{
homepage: 'https://ajuna.io',
@ -52,7 +58,9 @@ export const prodParasKusama: EndpointOption[] = [
Dwellir: 'wss://bajun-rpc.dwellir.com',
OnFinality: 'wss://bajun.api.onfinality.io/public-ws'
},
text: 'Bajun Network'
text: 'Bajun Network',
uiColor: '#161212',
uiLogo: nodesAjunaPNG
},
{
homepage: 'https://app.basilisk.cloud',
@ -62,7 +70,8 @@ export const prodParasKusama: EndpointOption[] = [
Basilisk: 'wss://rpc.basilisk.cloud',
Dwellir: 'wss://basilisk-rpc.dwellir.com'
},
text: 'Basilisk'
text: 'Basilisk',
uiColor: '#49E49F'
},
{
homepage: 'https://ksm.vtoken.io/?ref=polkadotjs',
@ -82,7 +91,8 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
OnFinality: 'wss://pioneer.api.onfinality.io/public-ws'
},
text: 'Bit.Country Pioneer'
text: 'Bit.Country Pioneer',
uiColor: '#000000'
},
{
homepage: 'https://www.calamari.network/',
@ -91,7 +101,8 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
'Manta Network': 'wss://ws.calamari.systems/'
},
text: 'Calamari'
text: 'Calamari',
uiColor: '#000000'
},
{
homepage: 'https://crust.network/',
@ -172,7 +183,8 @@ export const prodParasKusama: EndpointOption[] = [
'bLd Nodes': 'wss://ws.gm.bldnodes.org',
'light client': 'light://substrate-connect/kusama/gm'
},
text: 'GM'
text: 'GM',
uiColor: '#f47b36'
},
{
homepage: 'https://imbue.network',
@ -202,7 +214,9 @@ export const prodParasKusama: EndpointOption[] = [
OnFinality: 'wss://invarch-tinkernet.api.onfinality.io/public-ws',
'light client': 'light://substrate-connect/kusama/tinkernet'
},
text: 'InvArch Tinkernet'
text: 'InvArch Tinkernet',
uiColor: '#161616',
uiLogo: chainsTinkerPNG
},
{
homepage: 'https://kabocha.network',
@ -211,7 +225,8 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
JelliedOwl: 'wss://kabocha.jelliedowl.net'
},
text: 'Kabocha'
text: 'Kabocha',
uiColor: 'repeating-radial-gradient(black, black 4px, yellow 5px)'
},
{
homepage: 'https://acala.network/karura/join-karura',
@ -226,7 +241,8 @@ export const prodParasKusama: EndpointOption[] = [
OnFinality: 'wss://karura.api.onfinality.io/public-ws',
'Polkawallet 0': 'wss://karura.polkawallet.io'
},
text: 'Karura'
text: 'Karura',
uiColor: '#ff4c3b'
},
{
homepage: 'https://phala.network/',
@ -238,7 +254,8 @@ export const prodParasKusama: EndpointOption[] = [
Phala: 'wss://khala-api.phala.network/ws',
Pinknode: 'wss://public-rpc.pinknode.io/khala'
},
text: 'Khala Network'
text: 'Khala Network',
uiColor: '#03f3f3'
},
{
homepage: 'https://dico.io/',
@ -249,7 +266,8 @@ export const prodParasKusama: EndpointOption[] = [
// 'DICO Foundation 2': 'wss://rpc.api.kico.dico.io' // https://github.com/polkadot-js/apps/issues/8203
},
text: 'KICO'
text: 'KICO',
uiColor: '#29B58D'
},
{
homepage: 'https://dico.io/',
@ -258,7 +276,8 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
// 'DICO Foundation': 'wss://rpc.kico2.dico.io' // https://github.com/polkadot-js/apps/issues/8415
},
text: 'KICO 2'
text: 'KICO 2',
uiColor: '#29B58D'
},
{
homepage: 'https://kintsugi.interlay.io/',
@ -278,7 +297,8 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
Kpron: 'wss://kusama-kpron-rpc.apron.network/'
},
text: 'Kpron'
text: 'Kpron',
uiColor: 'linear-gradient(45deg, #0099F7 0%, #2E49EB 100%)'
},
{
homepage: 'https://listen.io/',
@ -288,7 +308,8 @@ export const prodParasKusama: EndpointOption[] = [
'Listen Foundation 1': 'wss://rpc.mainnet.listen.io',
'Listen Foundation 2': 'wss://wss.mainnet.listen.io'
},
text: 'Listen Network'
text: 'Listen Network',
uiColor: '#FFAD0A'
},
{
homepage: 'https://kusama-crowdloan.litentry.com',
@ -318,7 +339,8 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
'Hashed Systems': 'wss://c1.luhn.network'
},
text: 'Luhn Network'
text: 'Luhn Network',
uiColor: '#2F8E85'
},
{
homepage: 'https://mangata.finance',
@ -328,7 +350,8 @@ export const prodParasKusama: EndpointOption[] = [
Mangata: 'wss://prod-kusama-collator-01.mangatafinance.cloud',
OnFinality: 'wss://mangata-x.api.onfinality.io/public-ws'
},
text: 'Mangata'
text: 'Mangata',
uiColor: '#030408'
},
{
homepage: 'https://www.aresprotocol.io/mars',
@ -377,7 +400,8 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
Composable: 'wss://rpc.composablenodes.tech'
},
text: 'Picasso'
text: 'Picasso',
uiColor: '#000000'
},
{
homepage: 'https://kylin.network/',
@ -408,7 +432,8 @@ export const prodParasKusama: EndpointOption[] = [
'Unique Asia': 'wss://asia-ws-quartz.unique.network',
'Unique Europe': 'wss://eu-ws-quartz.unique.network'
},
text: 'QUARTZ by UNIQUE'
text: 'QUARTZ by UNIQUE',
uiColor: '#FF4D6A'
},
{
homepage: 'https://riodefi.com',
@ -417,7 +442,8 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
RioProtocol: 'wss://rio-kusama.riocorenetwork.com'
},
text: 'RioDeFi'
text: 'RioDeFi',
uiColor: '#4E7AED'
},
{
homepage: 'http://robonomics.network/',
@ -452,7 +478,8 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
Clover: 'wss://api-sakura.clover.finance'
},
text: 'Sakura'
text: 'Sakura',
uiColor: '#ff5995'
},
{
homepage: 'https://shiden.astar.network/',
@ -476,7 +503,8 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
StakeTechnologies: 'wss://rpc.shiden.astar.network'
},
text: 'Shiden Crowdloan 2'
text: 'Shiden Crowdloan 2',
uiColor: '#1b6dc1d9'
},
{
homepage: 'https://icenetwork.io/snow',
@ -495,7 +523,8 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
Soramitsu: 'wss://ws.parachain-collator-1.c1.sora2.soramitsu.co.jp'
},
text: 'SORA'
text: 'SORA',
uiColor: '#2D2926'
},
{
homepage: 'http://subgame.org/',
@ -505,7 +534,8 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
SubGame: 'wss://gamma.subgame.org/'
},
text: 'SubGame Gamma'
text: 'SubGame Gamma',
uiColor: '#EB027D'
},
{
homepage: 'https://subsocial.network/',
@ -523,7 +553,8 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
ZeroNetwork: 'wss://rpc-1.kusama.node.zero.io'
},
text: 'subzero'
text: 'subzero',
uiColor: '#000000'
},
{
homepage: 'https://www.datahighway.com/',
@ -532,7 +563,8 @@ export const prodParasKusama: EndpointOption[] = [
providers: {
DataHighway: 'wss://tanganika.datahighway.com'
},
text: 'Tanganika'
text: 'Tanganika',
uiColor: 'linear-gradient(-90deg, #9400D3 0%, #5A5CA9 50%, #00BFFF 100%)'
},
{
homepage: 'https://trustbase.network/',
@ -550,7 +582,9 @@ export const prodParasKusama: EndpointOption[] = [
Dwellir: 'wss://turing-rpc.dwellir.com',
OAK: 'wss://rpc.turing.oak.tech'
},
text: 'Turing Network'
text: 'Turing Network',
uiColor: '#A8278C',
uiLogo: chainsTuringPNG
},
{
homepage: 'https://standard.tech/',
@ -570,7 +604,9 @@ export const prodParasKusama: EndpointOption[] = [
Dwellir: 'wss://zeitgeist-rpc.dwellir.com',
OnFinality: 'wss://zeitgeist.api.onfinality.io/public-ws'
},
text: 'Zeitgeist'
text: 'Zeitgeist',
uiColor: 'linear-gradient(180deg, rgba(32,90,172,1) 0%, rgba(26,72,138,1) 50%, rgba(13,36,69,1) 100%)',
uiLogo: nodesZeitgeistPNG
}
];
@ -587,7 +623,9 @@ export const prodParasKusamaCommon: EndpointOption[] = [
RadiumBlock: 'wss://statemine.public.curie.radiumblock.co/ws'
},
teleport: [-1],
text: 'Statemine'
text: 'Statemine',
uiColor: '#113911',
uiLogo: nodesStatemineSVG
},
{
homepage: 'https://encointer.org/',
@ -606,7 +644,8 @@ export const prodParasKusamaCommon: EndpointOption[] = [
providers: {
Parity: 'wss://kusama-bridge-hub-rpc.polkadot.io'
},
text: 'BridgeHub'
text: 'BridgeHub',
uiLogo: nodesBridgeHubBlackSVG
}
];
@ -631,5 +670,7 @@ export const prodRelayKusama: EndpointOption = {
'light client': 'light://substrate-connect/kusama'
},
teleport: getTeleports(prodParasKusamaCommon),
text: 'Kusama'
text: 'Kusama',
uiColor: '#000',
uiLogo: chainsKusamaSVG
};

View File

@ -4,6 +4,8 @@
import type { EndpointOption } from './types';
import { POLKADOT_GENESIS } from '../api/constants';
import { chainsOakPNG, chainsPolkadotCircleSVG } from '../ui/logos/chains';
import { nodesAjunaPNG, nodesStatemineSVG } from '../ui/logos/nodes';
import { getTeleports } from './util';
// The available endpoints that will show in the dropdown. For the most part (with the exception of
@ -28,7 +30,8 @@ export const prodParasPolkadot: EndpointOption[] = [
OnFinality: 'wss://acala-polkadot.api.onfinality.io/public-ws',
'Polkawallet 0': 'wss://acala.polkawallet.io'
},
text: 'Acala'
text: 'Acala',
uiColor: '#645AFF'
},
{
homepage: 'https://ajuna.io',
@ -38,7 +41,9 @@ export const prodParasPolkadot: EndpointOption[] = [
AjunaNetwork: 'wss://rpc-parachain.ajuna.network',
RadiumBlock: 'wss://ajuna.public.curie.radiumblock.co/ws'
},
text: 'Ajuna Network'
text: 'Ajuna Network',
uiColor: '#161212',
uiLogo: nodesAjunaPNG
},
{
homepage: 'https://www.aresprotocol.io/',
@ -47,7 +52,8 @@ export const prodParasPolkadot: EndpointOption[] = [
providers: {
AresProtocol: 'wss://wss.odyssey.aresprotocol.io'
},
text: 'Ares Odyssey'
text: 'Ares Odyssey',
uiColor: '#1295F0'
},
{
homepage: 'https://astar.network',
@ -63,7 +69,8 @@ export const prodParasPolkadot: EndpointOption[] = [
RadiumBlock: 'wss://astar.public.curie.radiumblock.co/ws',
'light client': 'light://substrate-connect/polkadot/astar'
},
text: 'Astar'
text: 'Astar',
uiColor: '#1b6dc1d9'
},
{
homepage: 'https://www.aventus.io/',
@ -89,7 +96,8 @@ export const prodParasPolkadot: EndpointOption[] = [
providers: {
Bitgreen: 'wss://mainnet.bitgreen.org'
},
text: 'Bitgreen'
text: 'Bitgreen',
uiColor: '#224851'
},
{
homepage: 'https://centrifuge.io',
@ -109,19 +117,18 @@ export const prodParasPolkadot: EndpointOption[] = [
Clover: 'wss://rpc-para.clover.finance',
OnFinality: 'wss://clover.api.onfinality.io/public-ws' // https://github.com/polkadot-js/apps/issues/8355, then enabled in https://github.com/polkadot-js/apps/pull/8413, then broken in https://github.com/polkadot-js/apps/issues/8421, renenabled for PolkadotJS
},
text: 'Clover'
text: 'Clover',
uiColor: 'linear-gradient(to right, #52ad75, #7cc773)'
},
{
homepage: 'http://www.coinversation.io/',
info: 'coinversation',
// this is also a duplicate as a Live and Testing network -
// it is either/or, not and
isUnreachable: true,
paraId: 2027,
providers: {
// Coinversation: 'wss://rpc.coinversation.io/' // https://github.com/polkadot-js/apps/issues/6635
},
text: 'Coinversation'
text: 'Coinversation',
uiColor: '#e6017a'
},
{
homepage: 'https://composable.finance/',
@ -131,7 +138,8 @@ export const prodParasPolkadot: EndpointOption[] = [
Composable: 'wss://rpc.composable.finance',
OnFinality: 'wss://composable.api.onfinality.io/public-ws'
},
text: 'Composable Finance'
text: 'Composable Finance',
uiColor: '#C90E8A'
},
{
homepage: 'https://crust.network',
@ -169,7 +177,8 @@ export const prodParasPolkadot: EndpointOption[] = [
Efinity: 'wss://rpc.efinity.io',
OnFinality: 'wss://efinity.api.onfinality.io/public-ws'
},
text: 'Efinity'
text: 'Efinity',
uiColor: '#496ddb'
},
{
homepage: 'https://equilibrium.io/',
@ -189,7 +198,8 @@ export const prodParasPolkadot: EndpointOption[] = [
'Frequency 0': 'wss://0.rpc.frequency.xyz',
'Frequency 1': 'wss://1.rpc.frequency.xyz'
},
text: 'Frequency'
text: 'Frequency',
uiColor: '#4b64ff'
},
{
homepage: 'https://geminis.network/',
@ -208,7 +218,8 @@ export const prodParasPolkadot: EndpointOption[] = [
providers: {
'Hashed Systems': 'wss://c1.hashed.network'
},
text: 'Hashed Network'
text: 'Hashed Network',
uiColor: '#9199A9'
},
{
homepage: 'https://hydradx.io/',
@ -277,7 +288,8 @@ export const prodParasPolkadot: EndpointOption[] = [
Dwellir: 'wss://litentry-rpc.dwellir.com',
Litentry: 'wss://rpc.litentry-parachain.litentry.io'
},
text: 'Litentry'
text: 'Litentry',
uiColor: 'linear-gradient(45deg, #5cc27c 0%, #6de98f 100%)'
},
{
homepage: 'https://manta.network',
@ -289,7 +301,8 @@ export const prodParasPolkadot: EndpointOption[] = [
// 'Manta Munkiana': 'wss://munkiana.manta.systems', // https://github.com/polkadot-js/apps/issues/6871
// 'Manta Pectinata': 'wss://pectinata.manta.systems' // https://github.com/polkadot-js/apps/issues/7018
},
text: 'Manta'
text: 'Manta',
uiColor: '#2070a6'
},
{
homepage: 'https://moonbeam.network/networks/moonbeam/',
@ -313,7 +326,8 @@ export const prodParasPolkadot: EndpointOption[] = [
OnFinality: 'wss://nodle-parachain.api.onfinality.io/public-ws',
Pinknode: 'wss://public-rpc.pinknode.io/nodle'
},
text: 'Nodle'
text: 'Nodle',
uiColor: '#1ab394'
},
{
homepage: 'https://oak.tech',
@ -323,7 +337,8 @@ export const prodParasPolkadot: EndpointOption[] = [
providers: {
OAK: 'wss://rpc.oak.tech'
},
text: 'OAK Network'
text: 'OAK Network',
uiLogo: chainsOakPNG
},
{
homepage: 'https://www.omnibtc.finance',
@ -342,7 +357,8 @@ export const prodParasPolkadot: EndpointOption[] = [
providers: {
TraceLabs: 'wss://parachain-rpc.origin-trail.network'
},
text: 'OriginTrail'
text: 'OriginTrail',
uiColor: '#FB5DEB'
},
{
homepage: 'https://parallel.fi',
@ -384,7 +400,8 @@ export const prodParasPolkadot: EndpointOption[] = [
// 'Polkadex Team': 'wss://mainnet.polkadex.trade/', // https://github.com/polkadot-js/apps/issues/7620
// OnFinality: 'wss://polkadex.api.onfinality.io/public-ws' // https://github.com/polkadot-js/apps/issues/7620
},
text: 'Polkadex'
text: 'Polkadex',
uiColor: '#7C30DD'
},
{
homepage: 'https://subdao.network/',
@ -394,15 +411,18 @@ export const prodParasPolkadot: EndpointOption[] = [
providers: {
SubDAO: 'wss://parachain-rpc.subdao.org'
},
text: 'SubDAO'
text: 'SubDAO',
uiColor: 'linear-gradient(50deg, #F20092 0%, #FF4D5D 100%)'
},
{
homepage: 'http://subgame.org/',
info: 'subgame',
paraId: 2017,
providers: {// SubGame: 'wss://gamma.subgame.org/' // https://github.com/polkadot-js/apps/pull/6761
providers: {
// SubGame: 'wss://gamma.subgame.org/' // https://github.com/polkadot-js/apps/pull/6761
},
text: 'SubGame Gamma'
text: 'SubGame Gamma',
uiColor: '#EB027D'
},
{
homepage: 'https://unique.network/',
@ -431,7 +451,9 @@ export const prodParasPolkadotCommon: EndpointOption[] = [
RadiumBlock: 'wss://statemint.public.curie.radiumblock.co/ws'
},
teleport: [-1],
text: 'Statemint'
text: 'Statemint',
uiColor: '#86e62a',
uiLogo: nodesStatemineSVG
},
{
info: 'polkadotCollectives',
@ -441,7 +463,8 @@ export const prodParasPolkadotCommon: EndpointOption[] = [
Parity: 'wss://polkadot-collectives-rpc.polkadot.io'
},
teleport: [-1],
text: 'Collectives'
text: 'Collectives',
uiColor: '#e6777a'
}
];
@ -466,5 +489,7 @@ export const prodRelayPolkadot: EndpointOption = {
'light client': 'light://substrate-connect/polkadot'
},
teleport: getTeleports(prodParasPolkadotCommon),
text: 'Polkadot'
text: 'Polkadot',
uiColor: '#e6007a',
uiLogo: chainsPolkadotCircleSVG
};

View File

@ -3,6 +3,8 @@
import type { EndpointOption } from './types';
import { nodesAjunaPNG, nodesZeitgeistPNG } from '../ui/logos/nodes';
export * from './testingRelayRococo';
export * from './testingRelayWestend';
@ -19,14 +21,17 @@ export const testChains: EndpointOption[] = [
providers: {
'3dpass': 'wss://test-rpc.3dpass.org'
},
text: '3DPass Testnet'
text: '3DPass Testnet',
uiColor: '#323232'
},
{
info: 'ajuna',
providers: {
'Ajuna Network': 'wss://rpc-test.ajuna.network'
},
text: 'Ajuna Testnet'
text: 'Ajuna Testnet',
uiColor: '#161212',
uiLogo: nodesAjunaPNG
},
{
info: 'aleph',
@ -34,14 +39,16 @@ export const testChains: EndpointOption[] = [
'Aleph Zero Foundation': 'wss://ws.test.azero.dev',
Dwellir: 'wss://aleph-zero-testnet-rpc.dwellir.com'
},
text: 'Aleph Zero Testnet'
text: 'Aleph Zero Testnet',
uiColor: '#00CCAB'
},
{
info: 'nodle',
providers: {
// Nodle: 'wss://arcadia1.nodleprotocol.io' // https://github.com/polkadot-js/apps/issues/7652
},
text: 'Arcadia'
text: 'Arcadia',
uiColor: '#1ab394'
},
{
info: 'arctic',
@ -55,7 +62,8 @@ export const testChains: EndpointOption[] = [
providers: {
'Ares Protocol': 'wss://gladios.aresprotocol.io'
},
text: 'Ares Gladios'
text: 'Ares Gladios',
uiColor: '#1295F0'
},
{
info: 'jaz',
@ -70,7 +78,8 @@ export const testChains: EndpointOption[] = [
'Automata Network': 'wss://cf-api.ata.network',
OnFinality: 'wss://contextfree.api.onfinality.io/public-ws'
},
text: 'Automata ContextFree'
text: 'Automata ContextFree',
uiColor: '#EC7032'
},
{
info: 'edgeware',
@ -98,31 +107,24 @@ export const testChains: EndpointOption[] = [
providers: {
CESS: 'wss://testnet-rpc0.cess.cloud/ws/'
},
text: 'CESS Testnet'
text: 'CESS Testnet',
uiColor: '#2269a9'
},
{
info: 'clover',
providers: {
// Clover: 'wss://api.clover.finance/' // Cannot construct unknown type BridgeNetworks
},
text: 'Clover'
},
{
// this is also a duplicate as a parachain under Polkadot and live under production -
// it is either/or, not and
info: 'coinversation',
isDisabled: true, // https://github.com/polkadot-js/apps/issues/6635
providers: {
Coinversation: 'wss://rpc.coinversation.io/'
},
text: 'Coinversation'
text: 'Clover',
uiColor: 'linear-gradient(to right, #52ad75, #7cc773)'
},
{
info: 'creditcoin-testnet',
providers: {
'Creditcoin Foundation': 'wss://rpc.testnet.creditcoin.network/ws'
},
text: 'Creditcoin Testnet'
text: 'Creditcoin Testnet',
uiColor: '#00DF83'
},
{
info: 'Crust Maxwell',
@ -146,7 +148,8 @@ export const testChains: EndpointOption[] = [
providers: {
DeBio: 'wss://ws-rpc.testnet.debio.network'
},
text: 'DeBio Testnet'
text: 'DeBio Testnet',
uiColor: '#FF56E0'
},
{
info: 'dock-testnet',
@ -160,14 +163,16 @@ export const testChains: EndpointOption[] = [
providers: {
// 'Dolphin Testnet': 'wss://trillian.dolphin.red' // https://github.com/polkadot-js/apps/issues/7439
},
text: 'Dolphin Testnet'
text: 'Dolphin Testnet',
uiColor: '#000000'
},
{
info: 'dotmog',
providers: {
// DOTMog: 'wss://mogiway-01.dotmog.com' // https://github.com/polkadot-js/apps/issues/8895
},
text: 'DOTMog'
text: 'DOTMog',
uiColor: '#020609'
},
{
info: 'encointer',
@ -188,14 +193,16 @@ export const testChains: EndpointOption[] = [
providers: {
// FantourDev: 'wss://test-ws.fantour.io' // https://github.com/polkadot-js/apps/issues/6519
},
text: 'Fantour'
text: 'Fantour',
uiColor: '#5a189a'
},
{
info: 'ferrum',
providers: {
Ferrum: 'wss://testnet.dev.svcs.ferrumnetwork.io'
},
text: 'Ferrum Testnet'
text: 'Ferrum Testnet',
uiColor: '#b37700'
},
{
info: 'substrate',
@ -224,14 +231,16 @@ export const testChains: EndpointOption[] = [
providers: {
// GamePower: 'wss://gamepower.io' // https://github.com/polkadot-js/apps/issues/7223
},
text: 'GamePower'
text: 'GamePower',
uiColor: '#5d21a5'
},
{
info: 'geek',
providers: {
// 'Geek Team': 'wss://testnet.geekcash.org' // https://github.com/polkadot-js/apps/issues/8361
},
text: 'GeekCash'
text: 'GeekCash',
uiColor: '#4f46e5'
},
{
info: 'halongbay',
@ -252,7 +261,8 @@ export const testChains: EndpointOption[] = [
providers: {
// 'InvArch Team': 'wss://brainstorm.invarch.network/' // https://github.com/polkadot-js/apps/issues/8020
},
text: 'InvArch Brainstorm Testnet'
text: 'InvArch Brainstorm Testnet',
uiColor: '#161616'
},
{
info: 'ipse',
@ -262,21 +272,24 @@ export const testChains: EndpointOption[] = [
'IPSE Europe': 'wss://testnet-europe.ipse.io',
'IPSE USA': 'wss://testnet-usa.ipse.io'
},
text: 'IPSE'
text: 'IPSE',
uiColor: '#08a1e8'
},
{
info: 'jupiter',
providers: {
// Patract: 'wss://ws.jupiter-poa.patract.cn' // https://github.com/polkadot-js/apps/issues/7765
},
text: 'Jupiter'
text: 'Jupiter',
uiColor: '#7143ff'
},
{
info: 'khala',
providers: {
// 'Phala Network': 'wss://pc-test-3.phala.network/khala/ws' // https://github.com/polkadot-js/apps/issues/6930
},
text: 'Khala (Para 3)'
text: 'Khala (Para 3)',
uiColor: '#03f3f3'
},
{
info: 'kilt',
@ -290,7 +303,8 @@ export const testChains: EndpointOption[] = [
providers: {
'KILT Protocol': 'wss://peregrine.kilt.io/parachain-public-ws/'
},
text: 'KILT Peregrine'
text: 'KILT Peregrine',
uiColor: 'linear-gradient(45deg, #f05a27 0%, #8c145a 100%)'
},
{
info: 'kintsugi-testnet',
@ -304,7 +318,8 @@ export const testChains: EndpointOption[] = [
providers: {
// 'Klug Dossier': 'wss://klugdossier.net/' // https://github.com/polkadot-js/apps/issues/8081
},
text: 'Klug Dossier'
text: 'Klug Dossier',
uiColor: '#663399'
},
{
info: 'kylin',
@ -318,21 +333,24 @@ export const testChains: EndpointOption[] = [
providers: {
Litentry: 'wss://testnet.litentry.io'
},
text: 'Litentry Testnet'
text: 'Litentry Testnet',
uiColor: 'linear-gradient(45deg, #5cc27c 0%, #6de98f 100%)'
},
{
info: 'logion',
providers: {
Logion: 'wss://chimay.logion.network'
},
text: 'logion Para Testnet'
text: 'logion Para Testnet',
uiColor: 'rgb(21, 38, 101)'
},
{
info: 'logion',
providers: {
Logion: 'wss://test-rpc01.logion.network'
},
text: 'logion Standalone Testnet'
text: 'logion Standalone Testnet',
uiColor: 'rgb(21, 38, 101)'
},
{
info: 'acala',
@ -347,14 +365,16 @@ export const testChains: EndpointOption[] = [
providers: {
// 'Manta Testnet': 'wss://ws.f1.testnet.manta.network' // https://github.com/polkadot-js/apps/issues/6384
},
text: 'Manta Testnet'
text: 'Manta Testnet',
uiColor: '#2070a6'
},
{
info: 'minix',
providers: {
// Chainx: 'wss://minichain.coming.chat/ws' // https://github.com/polkadot-js/apps/issues/8132
},
text: 'MiniX Testnet'
text: 'MiniX Testnet',
uiColor: '#5152f7'
},
{
info: 'moonbaseAlpha',
@ -364,14 +384,16 @@ export const testChains: EndpointOption[] = [
OnFinality: 'wss://moonbeam-alpha.api.onfinality.io/public-ws',
UnitedBloc: 'wss://moonbase.unitedbloc.com:1001'
},
text: 'Moonbase Alpha'
text: 'Moonbase Alpha',
uiColor: '#F45B5B'
},
{
info: 'mybank',
providers: {
// MYBANK: 'wss://mybank.network/substrate' // https://github.com/polkadot-js/apps/issues/5845
},
text: 'mybank.network'
text: 'mybank.network',
uiColor: '#282736'
},
{
info: 'myriad-tesnet',
@ -396,7 +418,8 @@ export const testChains: EndpointOption[] = [
'Geo Load Balancer': 'wss://ws-opal.unique.network',
'North America': 'wss://us-ws-opal.unique.network'
},
text: 'OPAL by UNIQUE'
text: 'OPAL by UNIQUE',
uiColor: '#3B9C9D'
},
{
info: 'opportunity',
@ -431,7 +454,8 @@ export const testChains: EndpointOption[] = [
providers: {
// 'phoenix Protocol': 'wss://phoenix-ws.coinid.pro/' // https://github.com/polkadot-js/apps/issues/6181
},
text: 'Phoenix Mashnet'
text: 'Phoenix Mashnet',
uiColor: '#d42181'
},
{
info: 'pichiu',
@ -445,7 +469,8 @@ export const testChains: EndpointOption[] = [
providers: {
'Polkadex Team': 'wss://blockchain.polkadex.trade'
},
text: 'Polkadex'
text: 'Polkadex',
uiColor: '#7C30DD'
},
{
info: 'polymesh',
@ -466,14 +491,16 @@ export const testChains: EndpointOption[] = [
providers: {
// Prism: 'wss://testnet.psm.link' // https://github.com/polkadot-js/apps/issues/7340
},
text: 'Prism'
text: 'Prism',
uiColor: 'linear-gradient(45deg, rgba(63,94,251,1) 0%, rgba(252,70,107,1) 100%)'
},
{
info: 'realis',
providers: {
// 'Realis.Network': 'wss://rpc.realis.network/' // https://github.com/polkadot-js/apps/issues/7982
},
text: 'Realis.Network'
text: 'Realis.Network',
uiColor: '#000000'
},
{
info: 'riochain',
@ -487,7 +514,8 @@ export const testChains: EndpointOption[] = [
providers: {
Chainx: 'wss://sherpax-testnet.chainx.org'
},
text: 'Sherpax Testnet'
text: 'Sherpax Testnet',
uiColor: '#6bbee8'
},
{
info: 'shibuya',
@ -495,7 +523,8 @@ export const testChains: EndpointOption[] = [
Dwellir: 'wss://shibuya-rpc.dwellir.com',
StakeTechnologies: 'wss://rpc.shibuya.astar.network'
},
text: 'Shibuya'
text: 'Shibuya',
uiColor: '#1b6dc1d9'
},
{
info: 'skyekiwi',
@ -519,56 +548,64 @@ export const testChains: EndpointOption[] = [
'Soramitsu #3': 'wss://ws.framenode-3.s2.stg1.sora2.soramitsu.co.jp',
'Soramitsu #4': 'wss://ws.framenode-4.s2.stg1.sora2.soramitsu.co.jp'
},
text: 'SORA-staging'
text: 'SORA-staging',
uiColor: '#2D2926'
},
{
info: 'subdao',
providers: {
// SubDAO: 'wss://alpha.subdao.org' // https://github.com/polkadot-js/apps/issues/7473
},
text: 'SubDAO Staging'
text: 'SubDAO Staging',
uiColor: 'linear-gradient(50deg, #F20092 0%, #FF4D5D 100%)'
},
{
info: 'subgame',
providers: {
// SubGame: 'wss://staging.subgame.org' // https://github.com/polkadot-js/apps/issues/7982
},
text: 'SubGame Staging'
text: 'SubGame Staging',
uiColor: '#EB027D'
},
{
info: 'subspace-farmnet',
providers: {
// 'Subspace Network': 'wss://farm-rpc.subspace.network/ws' // https://github.com/polkadot-js/apps/issues/8135
},
text: 'Subspace Farmnet'
text: 'Subspace Farmnet',
uiColor: '#562b8e'
},
{
info: 'subspace-gemini-1',
providers: {
Europe: 'wss://eu.gemini-1b.subspace.network/ws'
},
text: 'Subspace Gemini 1'
text: 'Subspace Gemini 1',
uiColor: '#562b8e'
},
{
info: 'subspace-gemini-2a',
providers: {
Europe: 'wss://eu-0.gemini-2a.subspace.network/ws'
},
text: 'Subspace Gemini 2a'
text: 'Subspace Gemini 2a',
uiColor: '#562b8e'
},
{
info: 'subspace',
providers: {
// 'Subspace Network': 'wss://test-rpc.subspace.network' // https://github.com/polkadot-js/apps/issues/8598
},
text: 'Subspace Testnet'
text: 'Subspace Testnet',
uiColor: '#562b8e'
},
{
info: 'tangle',
providers: {
Webb: 'wss://tangle-archive.webb.tools'
},
text: 'Tangle Alpha'
text: 'Tangle Alpha',
uiColor: '#0099ff'
},
{
info: 'ternoa-alphanet',
@ -582,7 +619,8 @@ export const testChains: EndpointOption[] = [
providers: {
CapsuleCorp: 'wss://testnet.ternoa.com/'
},
text: 'Ternoa Testnet'
text: 'Ternoa Testnet',
uiColor: '#d622ff'
},
{
info: 'thebifrost-testnet',
@ -597,7 +635,8 @@ export const testChains: EndpointOption[] = [
providers: {
// Laminar: 'wss://testnet-node-1.laminar-chain.laminar.one/ws' // https://github.com/polkadot-js/apps/issues/8060
},
text: 'Turbulence'
text: 'Turbulence',
uiColor: '#004FFF'
},
{
info: 'uniarts',
@ -625,7 +664,8 @@ export const testChains: EndpointOption[] = [
providers: {
'Gear Tech': 'wss://rpc.vara-network.io'
},
text: 'Vara'
text: 'Vara',
uiColor: '#32e37d'
},
{
info: 'vodka',
@ -646,20 +686,24 @@ export const testChains: EndpointOption[] = [
providers: {
// 'zCloak Network': 'wss://test1.zcloak.network' // https://github.com/polkadot-js/apps/issues/7408
},
text: 'zCloak-network'
text: 'zCloak-network',
uiColor: 'linear-gradient(to right, #E89A76 0%, #C5B8CC 50%, #B0B4D7 100%)'
},
{
info: 'zeitgeist',
providers: {
Zeitgeist: 'wss://bsr.zeitgeist.pm'
},
text: 'Zeitgeist Battery Station'
text: 'Zeitgeist Battery Station',
uiColor: 'linear-gradient(180deg, rgba(32,90,172,1) 0%, rgba(26,72,138,1) 50%, rgba(13,36,69,1) 100%)',
uiLogo: nodesZeitgeistPNG
},
{
info: 'zero',
providers: {
// ZERO: 'wss://alphaville.zero.io' // https://github.com/polkadot-js/apps/issues/8263
},
text: 'Zero Alphaville'
text: 'Zero Alphaville',
uiColor: '#000000'
}
];

View File

@ -4,6 +4,8 @@
import type { EndpointOption } from './types';
import { ROCOCO_GENESIS } from '../api/constants';
import { chainsT0rnPNG, chainsTinkerPNG, chainsTuringPNG, chainsVirtoPNG, chainsWatrPNG } from '../ui/logos/chains';
import { nodesAjunaPNG, nodesBasiliskRococoBgPNG, nodesBridgeHubBlackSVG, nodesStatemineSVG, nodesZeitgeistPNG } from '../ui/logos/nodes';
import { getTeleports } from './util';
// The available endpoints that will show in the dropdown. For the most part (with the exception of
@ -20,7 +22,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
Acurast: 'wss://ws.acurast-rococo.diamond.papers.tech'
},
text: 'Acurast Testnet'
text: 'Acurast Testnet',
uiColor: '#000000'
},
{
info: 'rococoAmplitude',
@ -28,7 +31,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
PendulumChain: 'wss://rpc-foucoco.pendulumchain.tech'
},
text: 'Amplitude testnet (Foucoco)'
text: 'Amplitude testnet (Foucoco)',
uiColor: '#5DEFA7'
},
{
info: 'arctic',
@ -51,7 +55,9 @@ export const testParasRococo: EndpointOption[] = [
providers: {
AjunaNetwork: 'wss://rpc-rococo.bajun.network'
},
text: 'Bajun Network'
text: 'Bajun Network',
uiColor: '#161212',
uiLogo: nodesAjunaPNG
},
{
info: 'rococoBasilisk',
@ -59,7 +65,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
'Galactic Council': 'wss://rococo-basilisk-rpc.hydration.dev'
},
text: 'Basilisk'
text: 'Basilisk',
uiColor: `url(${nodesBasiliskRococoBgPNG}) #000`
},
{
info: 'rococoBifrost',
@ -75,7 +82,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
Bitgreen: 'wss://staging.bitgreen.org'
},
text: 'Bitgreen'
text: 'Bitgreen',
uiColor: '#224851'
},
{
info: 'rococoCatalyst',
@ -107,7 +115,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
// Composable: 'wss://rpc.composablefinance.ninja' // https://github.com/polkadot-js/apps/issues/8867
},
text: 'Dali'
text: 'Dali',
uiColor: '#000000'
},
{
info: 'rococoDolphin',
@ -123,7 +132,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
Jur: 'wss://ethos.jur.io'
},
text: 'Ethos'
text: 'Ethos',
uiColor: '#203050'
},
{
info: 'rococoFrequency',
@ -131,7 +141,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
Frequency: 'wss://rpc.rococo.frequency.xyz'
},
text: 'Frequency'
text: 'Frequency',
uiColor: '#29fd47'
},
{
info: 'rococoGenshiro',
@ -179,7 +190,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
JelliedOwl: 'wss://kabsoup1.jelliedowl.com'
},
text: 'Kabocha (kabsoup)'
text: 'Kabocha (kabsoup)',
uiColor: 'repeating-radial-gradient(black, black 4px, yellow 5px)'
},
{
info: 'rococoLitentry',
@ -187,7 +199,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
Litentry: 'wss://rpc.rococo-parachain-sg.litentry.io'
},
text: 'Litentry'
text: 'Litentry',
uiColor: '#0a6a08'
},
{
info: 'rococoMangata',
@ -195,7 +208,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
Mangata: 'wss://roccoco-testnet-collator-01.mangatafinance.cloud'
},
text: 'Mangata'
text: 'Mangata',
uiColor: '#030408'
},
{
info: 'rococoMd5',
@ -203,7 +217,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
'Hashed Systems': 'wss://c1.md5.network'
},
text: 'MD5 Network'
text: 'MD5 Network',
uiColor: '#175bae'
},
{
info: 'rococoMoonsama',
@ -211,7 +226,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
// Moonsama: 'wss://moonsama-testnet-rpc.moonsama.com' // https://github.com/polkadot-js/apps/issues/7526
},
text: 'Moonsama'
text: 'Moonsama',
uiColor: '#000000'
},
{
info: 'rococoNodle',
@ -219,7 +235,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
OnFinality: 'wss://nodle-paradis.api.onfinality.io/public-ws'
},
text: 'Nodle'
text: 'Nodle',
uiColor: '#1ab394'
},
{
homepage: 'https://www.my-oli.com/en/',
@ -235,7 +252,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
TraceLabs: 'wss://parachain-testnet-rpc.origin-trail.network/'
},
text: 'OriginTrail Testnet'
text: 'OriginTrail Testnet',
uiColor: '#0C0C0C'
},
{
info: 'rococoPangolin',
@ -251,7 +269,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
'KILT Protocol': 'wss://rococo.kilt.io'
},
text: 'RILT'
text: 'RILT',
uiColor: 'linear-gradient(45deg, #8c145a 0%, #f05a27 100%)'
},
{
homepage: 'http://robonomics.network/',
@ -268,7 +287,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
Efinity: 'wss://rpc.rococo.efinity.io'
},
text: 'Rocfinity'
text: 'Rocfinity',
uiColor: '#496ddb'
},
{
info: 'snowbridge',
@ -292,7 +312,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
Soramitsu: 'wss://ws.parachain-collator-1.c1.stg1.sora2.soramitsu.co.jp'
},
text: 'SORA'
text: 'SORA',
uiColor: '#2D2926'
},
{
info: 'rococoSpreehafen',
@ -300,7 +321,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
DataHighway: 'wss://spreehafen.datahighway.com'
},
text: 'Spreehafen'
text: 'Spreehafen',
uiColor: 'linear-gradient(-90deg, #9400D3 0%, #5A5CA9 50%, #00BFFF 100%)'
},
{
homepage: 'https://totemaccounting.com/',
@ -325,7 +347,9 @@ export const testParasRococo: EndpointOption[] = [
providers: {
t3rn: 'wss://ws.t0rn.io'
},
text: 't0rn'
text: 't0rn',
uiColor: '#212322',
uiLogo: chainsT0rnPNG
},
{
info: 'tangle',
@ -333,7 +357,8 @@ export const testParasRococo: EndpointOption[] = [
providers: {
Webb: 'wss://arana-alpha-1.webb.tools'
},
text: 'Tangle'
text: 'Tangle',
uiColor: '#483d8b'
},
{
info: 'rococoTinkernet',
@ -341,7 +366,9 @@ export const testParasRococo: EndpointOption[] = [
providers: {
// 'InvArch Team': 'wss://rococo.invarch.network' // https://github.com/polkadot-js/apps/issues/8266
},
text: 'Tinkernet'
text: 'Tinkernet',
uiColor: 'linear-gradient(90deg, rgba(253,52,166,1) 0%, rgba(22,213,239,1) 100%)',
uiLogo: chainsTinkerPNG
},
{
info: 'rococoTuring',
@ -349,7 +376,9 @@ export const testParasRococo: EndpointOption[] = [
providers: {
OAK: 'wss://rpc.turing-staging.oak.tech'
},
text: 'Turing Network (Staging)'
text: 'Turing Network (Staging)',
uiColor: '#A8278C',
uiLogo: chainsTuringPNG
},
{
info: 'rococoUnitNetwork',
@ -365,7 +394,9 @@ export const testParasRococo: EndpointOption[] = [
providers: {
// VirtoNetwork: 'wss://rococo.virtonetwork.xyz' // https://github.com/polkadot-js/apps/issues/8024
},
text: 'Virto'
text: 'Virto',
uiColor: '#063970',
uiLogo: chainsVirtoPNG
},
{
info: 'rococoWatr',
@ -373,7 +404,9 @@ export const testParasRococo: EndpointOption[] = [
providers: {
Watr: 'wss://rpc.dev.watr.org'
},
text: 'Watr Network'
text: 'Watr Network',
uiColor: '#373b39',
uiLogo: chainsWatrPNG
},
{
info: 'rococoZeitgeist',
@ -381,7 +414,9 @@ export const testParasRococo: EndpointOption[] = [
providers: {
Zeitgeist: 'wss://roc.zeitgeist.pm'
},
text: 'Zeitgeist Battery Station'
text: 'Zeitgeist Battery Station',
uiColor: 'linear-gradient(180deg, rgba(32,90,172,1) 0%, rgba(26,72,138,1) 50%, rgba(13,36,69,1) 100%)',
uiLogo: nodesZeitgeistPNG
}
];
@ -393,7 +428,9 @@ export const testParasRococoCommon: EndpointOption[] = [
Parity: 'wss://rococo-rockmine-rpc.polkadot.io'
},
teleport: [-1],
text: 'Rockmine'
text: 'Rockmine',
uiColor: '#77bb77',
uiLogo: nodesStatemineSVG
},
{
info: 'rococoContracts',
@ -402,7 +439,8 @@ export const testParasRococoCommon: EndpointOption[] = [
Parity: 'wss://rococo-contracts-rpc.polkadot.io'
},
teleport: [-1],
text: 'Contracts'
text: 'Contracts',
uiColor: '#000000'
},
{
homepage: 'https://encointer.org/',
@ -421,7 +459,8 @@ export const testParasRococoCommon: EndpointOption[] = [
Parity: 'wss://rococo-bridge-hub-rpc.polkadot.io'
},
teleport: [-1],
text: 'Bridgehub'
text: 'Bridgehub',
uiLogo: nodesBridgeHubBlackSVG
}
];
@ -441,5 +480,6 @@ export const testRelayRococo: EndpointOption = {
'light client': 'light://substrate-connect/rococo'
},
teleport: getTeleports(testParasRococoCommon),
text: 'Rococo'
text: 'Rococo',
uiColor: '#6f36dc'
};

View File

@ -4,6 +4,7 @@
import type { EndpointOption } from './types';
import { WESTEND_GENESIS } from '../api/constants';
import { nodesBridgeHubBlackSVG, nodesStatemineSVG } from '../ui/logos/nodes';
import { getTeleports } from './util';
// The available endpoints that will show in the dropdown. For the most part (with the exception of
@ -86,7 +87,8 @@ export const testParasWestend: EndpointOption[] = [
providers: {
// Phala: 'wss://whala.phala.network/ws' // https://github.com/polkadot-js/apps/issues/6181
},
text: 'Whala'
text: 'Whala',
uiColor: '#03f3f3'
},
{
homepage: 'https://www.kilt.io/',
@ -95,7 +97,8 @@ export const testParasWestend: EndpointOption[] = [
providers: {
'KILT Protocol': 'wss://westend.kilt.io:9977'
},
text: 'WILT'
text: 'WILT',
uiColor: '#8c145a'
}
];
@ -109,7 +112,9 @@ export const testParasWestendCommon: EndpointOption[] = [
Parity: 'wss://westmint-rpc.polkadot.io'
},
teleport: [-1],
text: 'Westmint'
text: 'Westmint',
uiColor: '#77bb77',
uiLogo: nodesStatemineSVG
},
{
info: 'westendCollectives',
@ -118,7 +123,8 @@ export const testParasWestendCommon: EndpointOption[] = [
Parity: 'wss://westend-collectives-rpc.polkadot.io'
},
teleport: [-1],
text: 'Collectives'
text: 'Collectives',
uiColor: '#e6777a'
},
{
info: 'westendBridgeHub',
@ -126,7 +132,8 @@ export const testParasWestendCommon: EndpointOption[] = [
providers: {
Parity: 'wss://westend-bridge-hub-rpc.polkadot.io'
},
text: 'BridgeHub'
text: 'BridgeHub',
uiLogo: nodesBridgeHubBlackSVG
}
];
@ -149,5 +156,6 @@ export const testRelayWestend: EndpointOption = {
'light client': 'light://substrate-connect/westend'
},
teleport: getTeleports(testParasWestendCommon),
text: 'Westend'
text: 'Westend',
uiColor: '#da68a7'
};

View File

@ -3,30 +3,30 @@
import type { Option } from '../settings/types';
export interface EndpointOption {
interface BaseOption {
dnslink?: string;
genesisHash?: string;
homepage?: string;
paraId?: number;
summary?: string;
teleport?: number[];
uiColor?: string;
uiLogo?: string;
}
export interface EndpointOption extends BaseOption {
isChild?: boolean;
isDevelopment?: boolean;
isDisabled?: boolean;
isUnreachable?: boolean;
linked?: EndpointOption[];
info?: string;
paraId?: number;
providers: Record<string, string>;
summary?: string;
teleport?: number[];
text: string;
uiColor?: string;
uiLogo?: string;
}
export interface LinkOption extends Option {
dnslink?: string;
genesisHash?: string;
export interface LinkOption extends BaseOption, Option {
genesisHashRelay?: string;
homepage?: string;
isChild?: boolean;
isDevelopment?: boolean;
isLightClient?: boolean;
@ -34,9 +34,6 @@ export interface LinkOption extends Option {
isUnreachable?: boolean;
isSpaced?: boolean;
linked?: LinkOption[];
paraId?: number;
summary?: string;
teleport?: number[];
textBy: string;
textRelay?: React.ReactNode;
value: string;

View File

@ -45,7 +45,7 @@ function expandLinked (input: LinkOption[]): LinkOption[] {
}, []);
}
function expandEndpoint (t: TFunction, { dnslink, genesisHash, homepage, info, isChild, isDisabled, isUnreachable, linked, paraId, providers, teleport, text }: EndpointOption, firstOnly: boolean, withSort: boolean): LinkOption[] {
function expandEndpoint (t: TFunction, { dnslink, genesisHash, homepage, info, isChild, isDisabled, isUnreachable, linked, paraId, providers, teleport, text, uiColor, uiLogo }: EndpointOption, firstOnly: boolean, withSort: boolean): LinkOption[] {
const hasProviders = Object.keys(providers).length !== 0;
const base = {
genesisHash,
@ -56,7 +56,9 @@ function expandEndpoint (t: TFunction, { dnslink, genesisHash, homepage, info, i
isUnreachable: isUnreachable || !hasProviders,
paraId,
teleport,
text
text,
uiColor,
uiLogo
};
const result = Object

View File

@ -1,6 +1,8 @@
// Copyright 2017-2023 @polkadot/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { extensionsPolkadotJsSVG } from '../ui/logos/extensions';
type Browser = 'chrome' | 'firefox';
interface Extension {
@ -13,27 +15,31 @@ interface Known {
all: Record<Browser, string>;
desc: string;
name: string;
uiLogo: string;
}
// The list of known extensions including the links to tem on the store. This is used when
// no extensions are actually available, promoting the user to install one or more
// (Any known extension can and should be added here)
const known: Known[] = [
{
export const knownExtensions: Record<string, Known> = {
'polksdot-js': {
all: {
chrome: 'https://chrome.google.com/webstore/detail/polkadot%7Bjs%7D-extension/mopnmbcafieddcagagdcbnhejhlodfdd',
firefox: 'https://addons.mozilla.org/en-US/firefox/addon/polkadot-js-extension/'
},
desc: 'Basic account injection and signer',
name: 'polkadot-js extension'
name: 'polkadot-js extension',
uiLogo: extensionsPolkadotJsSVG
}
];
};
export const availableExtensions = known.reduce<Record<Browser, Extension[]>>((available, { all, desc, name }) => {
Object.entries(all).forEach(([browser, link]): void => {
available[browser as Browser].push({ desc, link, name });
});
export const availableExtensions = Object
.values(knownExtensions)
.reduce((available: Record<Browser, Extension[]>, { all, desc, name }) => {
Object.entries(all).forEach(([browser, link]): void => {
available[browser as Browser].push({ desc, link, name });
});
return available;
}, { chrome: [], firefox: [] });
return available;
}, { chrome: [], firefox: [] });

View File

@ -4,7 +4,7 @@
import type { BN } from '@polkadot/util';
import type { ExternalDef } from './types';
import { externalLogos } from '../ui/logos';
import { externalCommonwealthPNG } from '../ui/logos/external';
const HASH_PATHS = ['proposal/councilmotion'];
@ -25,5 +25,5 @@ export const Commonwealth: ExternalDef = {
democracyReferendum: 'proposal/referendum',
treasury: 'proposal/treasuryproposal'
},
uiLogo: externalLogos.commonwealth as string
uiLogo: externalCommonwealthPNG
};

View File

@ -4,7 +4,7 @@
import type { BN } from '@polkadot/util';
import type { ExternalDef } from './types';
import { externalLogos } from '../ui/logos';
import { externalDotreasurySVG } from '../ui/logos/external';
export const Dotreasury: ExternalDef = {
chains: {
@ -20,5 +20,5 @@ export const Dotreasury: ExternalDef = {
tip: 'tips',
treasury: 'proposals'
},
uiLogo: externalLogos.dotreasury as string
uiLogo: externalDotreasurySVG
};

View File

@ -4,7 +4,7 @@
import type { BN } from '@polkadot/util';
import type { ExternalDef } from './types';
import { externalLogos } from '../ui/logos';
import { externalDotscannerPNG } from '../ui/logos/external';
export const DotScanner: ExternalDef = {
chains: {
@ -19,5 +19,5 @@ export const DotScanner: ExternalDef = {
address: 'account',
block: 'block'
},
uiLogo: externalLogos.dotscanner as string
uiLogo: externalDotscannerPNG
};

View File

@ -4,7 +4,7 @@
import type { BN } from '@polkadot/util';
import type { ExternalDef } from './types';
import { externalLogos } from '../ui/logos';
import { externalKodadotPNG } from '../ui/logos/external';
const getNetwork = (_chain: string) => {
const chain = _chain === 'kusama' ? 'rmrk' : _chain;
@ -26,5 +26,5 @@ export const KodaDot: ExternalDef = {
paths: {
address: 'account'
},
uiLogo: externalLogos.kodadot as string
uiLogo: externalKodadotPNG
};

View File

@ -4,7 +4,7 @@
import type { BN } from '@polkadot/util';
import type { ExternalDef } from './types';
import { externalLogos } from '../ui/logos';
import { externalPolkaholicPNG } from '../ui/logos/external';
export const Polkaholic: ExternalDef = {
chains: {
@ -67,5 +67,5 @@ export const Polkaholic: ExternalDef = {
block: 'blockhash',
extrinsic: 'tx'
},
uiLogo: externalLogos.polkaholic as string
uiLogo: externalPolkaholicPNG
};

View File

@ -4,7 +4,7 @@
import type { BN } from '@polkadot/util';
import type { ExternalDef } from './types';
import { externalLogos } from '../ui/logos';
import { externalPolkascanPNG } from '../ui/logos/external';
export const Polkascan: ExternalDef = {
chains: {
@ -27,5 +27,5 @@ export const Polkascan: ExternalDef = {
techcomm: 'techcomm/proposal',
treasury: 'treasury/proposal'
},
uiLogo: externalLogos.polkascan as string
uiLogo: externalPolkascanPNG
};

View File

@ -4,7 +4,7 @@
import type { BN } from '@polkadot/util';
import type { ExternalDef } from './types';
import { externalLogos } from '../ui/logos';
import { externalPolkassemblyPNG } from '../ui/logos/external';
export const PolkassemblyIo: ExternalDef = {
chains: {
@ -38,7 +38,7 @@ export const PolkassemblyIo: ExternalDef = {
tip: 'tip',
treasury: 'treasury'
},
uiLogo: externalLogos.polkassembly as string
uiLogo: externalPolkassemblyPNG
};
export const PolkassemblyNetwork: ExternalDef = {

View File

@ -4,7 +4,7 @@
import type { BN } from '@polkadot/util';
import type { ExternalDef } from './types';
import { externalLogos } from '../ui/logos';
import { externalPolkastatsPNG } from '../ui/logos/external';
// NOTE Not maintained, see breakage reports in
// https://github.com/polkadot-js/apps/issues/8903
@ -25,5 +25,5 @@ export const Polkastats: ExternalDef = {
extrinsic: 'extrinsic',
validator: 'validator'
},
uiLogo: externalLogos.polkastats as string
uiLogo: externalPolkastatsPNG
};

View File

@ -4,7 +4,7 @@
import type { BN } from '@polkadot/util';
import type { ExternalDef } from './types';
import { externalLogos } from '../ui/logos';
import { externalSingularSVG } from '../ui/logos/external';
const getNetwork = (_chain: string) => {
switch (_chain) {
@ -27,5 +27,5 @@ export const Singular: ExternalDef = {
paths: {
address: 'account'
},
uiLogo: externalLogos.singular as string
uiLogo: externalSingularSVG
};

View File

@ -4,7 +4,7 @@
import type { BN } from '@polkadot/util';
import type { ExternalDef } from './types';
import { externalLogos } from '../ui/logos';
import { externalStatescanSVG } from '../ui/logos/external';
export const Statescan: ExternalDef = {
chains: {
@ -20,5 +20,5 @@ export const Statescan: ExternalDef = {
address: 'account',
block: 'block'
},
uiLogo: externalLogos.statescan as string
uiLogo: externalStatescanSVG
};

View File

@ -4,7 +4,7 @@
import type { BN } from '@polkadot/util';
import type { ExternalDef } from './types';
import { externalLogos } from '../ui/logos';
import { externalSubidSVG } from '../ui/logos/external';
export const SubId: ExternalDef = {
chains: {
@ -31,5 +31,5 @@ export const SubId: ExternalDef = {
paths: {
address: 'account'
},
uiLogo: externalLogos.subid as string
uiLogo: externalSubidSVG
};

View File

@ -4,7 +4,7 @@
import type { BN } from '@polkadot/util';
import type { ExternalDef } from './types';
import { externalLogos } from '../ui/logos';
import { externalSubscanPNG } from '../ui/logos/external';
export const Subscan: ExternalDef = {
chains: {
@ -100,5 +100,5 @@ export const Subscan: ExternalDef = {
treasury: 'treasury',
validator: 'validator'
},
uiLogo: externalLogos.subscan as string
uiLogo: externalSubscanPNG
};

View File

@ -4,7 +4,7 @@
import type { BN } from '@polkadot/util';
import type { ExternalDef } from './types';
import { externalLogos } from '../ui/logos';
import { externalSubsquareSVG } from '../ui/logos/external';
export const Subsquare: ExternalDef = {
chains: {
@ -43,5 +43,5 @@ export const Subsquare: ExternalDef = {
tip: 'treasury/tip',
treasury: 'treasury/proposal'
},
uiLogo: externalLogos.subsquare as string
uiLogo: externalSubsquareSVG
};

View File

@ -3,208 +3,81 @@
/* eslint sort-keys: ["error", "asc", { caseSensitive: false }] */
import nodeBasiliskRococo from './logos/nodes/basilisk-rococo-bg.png';
import { sanitize } from './util';
// The mapping here is done on the actual chain name (system.chain RPC) or
// the actual RPC node it is corrected to (system.name RPC)
// defaults
const emptyColor = '#99999';
// based on chain name
// alphabetical
const chainSherpax = '#6bbee8';
const chain3dpass = '#323232';
const chainAband = '#7358ff';
const chainAcala = '#645AFF';
const chainAcurastRococoTestnet = '#000000';
const chainAjuna = '#161212';
const chainAleph = '#00CCAB';
const chainAltair = '#ffb700';
const chainAmplitude = '#5DEFA7';
const chainAmplitudeRococo = '#5DEFA7';
const chainApron = 'linear-gradient(45deg, #0099F7 0%, #2E49EB 100%)';
const chainAstar = '#1b6dc1d9';
const chainTangle = '#483d8b';
const chainTangleDev = '#0099ff';
const chainAutomata = '#EC7032';
const chainAutomataContextFree = '#EC7032';
const chainBajun = '#161212';
const chainBitCountry = '#191a2e';
const chainBittensor = '#252525';
const chainBitCountryPioneer = '#000000';
const chainBasiliskTestnet = `url(${String(nodeBasiliskRococo)}) #000`;
const chainBeastEave = '#900048';
const chainBitgreen = '#224851';
const chainBrainstorm = '#161616';
const chainCalamari = '#000000';
const chainCoinversation = '#e6017a';
const chainCollectives = '#e6777a'; // '#dfcdfc';
const chainCompetitorsClub = '#213830';
const chainComposableFinance = '#C90E8A';
const chainCrab = '#512DBC';
const chainCreditcoin = '#2D353F';
const chainCreditcoinTestnet = '#00DF83';
const chainCrownSterling = '#13264b';
const chainCrust = '#ff8812';
const chainCrustMaxwell = '#2E333B';
const chainClover = 'linear-gradient(to right, #52ad75, #7cc773)';
const chainChainx = '#F6C94A';
const chainDarwinia = '#FF0083';
const chainDali = '#000000';
const chainDeBio = '#FF56E0';
const chainDolphin = '#000000';
const chainDorafactory = '#FF761C';
const chainDotMog = '#020609';
const chainEfinity = '#496ddb';
const chainEquilibrium = '#1792ff';
const chainEthos = '#203050';
const chainFantour = '#5a189a';
const chainFerrum = '#b37700';
const chainFrequency = '#4b64ff';
const chainFrequencyRococo = '#29fd47';
const chainGalital = '#00063F';
const chainGalois = '#000000';
const chainGamePower = '#5d21a5';
const chainGenshiro = '#e8662d';
const chainGM = '#f47b36';
const chainHanonycash = '#0099CC';
const chainHashed = '#9199A9';
const chainHeiko = '#42d5de';
const chainHydrate = '#000000';
const chainIdavoll = '#ff43ff';
const chainImbue = '#baff36';
const chainInterbtc = '#1a0a2d';
const chainInterlay = '#3E96FF';
const chainIpse = '#08a1e8';
const chainKabocha = 'repeating-radial-gradient(black, black 4px, yellow 5px)';
const chainJupiter = '#7143ff';
const chainKarura = '#ff4c3b';
const chainKhala = '#03f3f3';
const chainKintsugi = '#1a0a2d';
const chainKlug = '#000000';
const chainKulupu = '#003366';
const chainKico = '#29B58D';
const chainKico2 = '#29B58D';
const chainKilt = '#8c145a';
const chainKiltDev = '#f05a27';
const chainKiltPeregrine = `linear-gradient(45deg, ${chainKiltDev} 0%, ${chainKilt} 100%)`;
const chainKiltRilt = `linear-gradient(45deg, ${chainKilt} 0%, ${chainKiltDev} 100%)`;
const chainKonomi = '#007aff';
const chainKusama = '#000000';
const chainKusamaDataHighway = 'linear-gradient(-90deg, #9400D3 0%, #5A5CA9 50%, #00BFFF 100%)';
const chainKusari = '#b8860b';
const chainKylin = '#ed007e';
const chainListen = '#FFAD0A';
const chainLitentry = 'linear-gradient(45deg, #5cc27c 0%, #6de98f 100%)';
const chainLitentryRococo = '#0a6a08';
const chainLitmus = '#6822fb';
const chainLogion = 'rgb(21, 38, 101)';
const chainLuhn = '#2F8E85';
const chainMinix = '#5152f7';
const chainManta = '#2070a6';
const chainMangata = '#030408';
const chainMd5 = '#3584e4';
const chainMoonrock = '#3d1d5a';
const chainMoonsama = '#000000';
const chainMybank = '#282736';
const chainMyriad = '#7342CC';
const chainNFTMart = '#815287';
const chainNodle = '#1ab394';
const chainOAK = '#A8278C';
const chainOLI = '#8CC63F';
const chainOmniBTC = '#6759E9';
const chainOpal = '#3B9C9D';
const chainOriginTrail = '#FB5DEB';
const chainOriginTrailTestnet = '#0C0C0C';
const chainPangolin = '#4B30DD';
const chainPangoro = '#4B30DD';
const chainParallel = '#ef18ac';
const chainParami = '#ee06e2';
const chainPendulum = '#49E2FD';
const chainPicasso = '#000000';
const chainPichiu = '#ed007e';
const chainPhala = '#c6fa4c';
const chainPhoenix = '#d42181';
const chainPolkadex = '#7C30DD';
const chainPolkadot = '#e6007a';
const chainPolkaFoundry = '#ff527c';
const chainPolkaSmith = '#0DDDFB';
const chainPontem = '#A92FAC';
const chainPrism = 'linear-gradient(45deg, rgba(63,94,251,1) 0%, rgba(252,70,107,1) 100%)';
const chainQuartz = '#FF4D6A';
const chainRocco = '#6f36dc';
const chainRoccoMandala = '#173DC9';
const chainRoccoAres = '#70FF8B';
const chainAresGladios = '#1295F0';
const chainRoccoBifrost = '#5a25f0';
const chainRococoContracts = '#000000';
const chainRoccoDarwinia = '#FF0083';
const chainRoccoDataHighway = 'linear-gradient(-90deg, #9400D3 0%, #5A5CA9 50%, #00BFFF 100%)';
const chainRococoEave = '#900048';
const chainRococoLaminar = '#004FFF';
const chainRoccoTick = '#22bb22';
const chainRoccoTrack = '#bb2222';
const chainRoccoTrick = '#2222bb';
const chainRiochain = '#4d87f6';
const chainSakura = '#ff5995';
const chainShadow = '#ffa940';
const chainShiden = '#5923B2';
const chainSkyeKiwi = '#6667ab';
const chainSnakenet = '#f653a2';
const chainSora = '#2D2926';
const chainSpanner = '#EC3D3D';
const chainStandard = 'background: radial-gradient(circle, rgba(255,255,255,1) 0%, rgba(42,170,244,1) 35%, rgba(10,10,10,1) 100%)';
const chainSwapdex = '#E94082';
const chainSubDAO = 'linear-gradient(50deg, #F20092 0%, #FF4D5D 100%)';
const chainTinker = '#161616';
const chainTinkerRococo = 'linear-gradient(90deg, rgba(253,52,166,1) 0%, rgba(22,213,239,1) 100%)';
const chainTotem = 'linear-gradient(158deg, rgba(226,157,0,1) 0%, rgba(234,55,203,1) 100%)';
const chainTrustBase = '#ff43aa';
const chainTuring = '#A8278C';
const chainT0rn = '#212322';
const chainUniarts = 'linear-gradient(150deg, #333ef7 0%, #55adff 100%)';
const chainUnique = '#40BCFF';
const chainUnitNetwork = '#a351ef';
const chainUnitv = '#1452F0';
const chainUnorthodox = 'radial-gradient(circle, rgba(255,255,255,1) 0%, rgba(42,244,187,1) 35%, rgba(10,10,10,1) 100%)';
const chainVara = '#32e37d';
const chainVirto = '#063970';
const chainVln = '#33cc33';
const chainWatr = '#373b39';
const chainWeb3games = '#000000';
const chainWestend = '#da68a7';
const chainWestlake = 'linear-gradient(-90deg, #9400D3 0%, #5A5CA9 50%, #00BFFF 100%)';
const chainWhala = '#03f3f3';
const chainZero = '#000000';
const chainZenlink = 'linear-gradient(45deg, #F20082 0%, #FF4D4D 100%)';
const chainCESS = '#2269a9';
const chainRiodefi = '#4E7AED';
// based on node name
// alphabetical
const nodeAjuna = '#161212';
const nodeApron = 'linear-gradient(45deg, #0099F7 0%, #2E49EB 100%)';
const nodeAres = '#E56239';
const nodeAstar = '#1b6dc1d9';
const nodeAutomata = '#EC7032';
const nodeAutomataContextFree = '#EC7032';
const nodeBasilisk = '#49E49F';
const nodeBajun = '#161212';
const nodeBitCountry = '#191a2e';
const nodeBifrost = '#5a25f0';
const nodeCentrifuge = '#fcc367';
const nodeCoinversation = '#e6017a';
const nodeCompetitorsClub = '#213830';
const nodeCrownSterling = '#13264b';
const nodeDotMog = '#020609';
const nodeEdgeware = '#111111';
const nodeEfinity = '#496ddb';
const nodeEncointer = '#0000cc';
const nodeFantour = '#5a189a';
const nodeGalital = '#00063F;';
const nodeGamePower = '#5d21a5';
const nodeGeek = '#4f46e5';
const nodeHashed = '#59EAF6';
const nodeHeiko = '#42d5de';
const nodeImbue = '#baff36';
@ -213,24 +86,18 @@ const nodeIpse = '#08a1e8';
const nodeJaz = '#121212';
const nodeJoystream = '#4038FF';
const nodeJupiter = '#7143ff';
const nodeKabocha = 'repeating-radial-gradient(black, black 4px, yellow 5px)';
const nodeKonomi = '#007aff';
const nodeKpron = 'linear-gradient(45deg, #0099F7 0%, #2E49EB 100%)';
const nodeKylin = '#ed007e';
const nodeKlug = '#663399';
const nodeKusari = '#b8860b';
const nodeLitentry = 'linear-gradient(45deg, #5cc27c 0%, #6de98f 100%)';
const nodeLuhn = '#2DCE89';
const nodeManta = '#2070a6';
const nodeMathChain = '#000000';
const nodeMd5 = '#175bae';
const nodeMoonbeam = '#53cbc9';
const nodeMoonbase = '#F45B5B';
const nodeMoonriver = '#0E132E';
const nodeMybank = '#282736';
const nodeNFTMart = '#307182';
const nodeNodle = '#1ab394';
const nodeOdyssey = '#1295F0';
const nodeOmniBTC = '#6759E9';
const nodeOpportunity = '#6143bc';
const nodePangolin = '#4B30DD';
@ -238,69 +105,21 @@ const nodePangoro = '#4B30DD';
const nodeParallel = '#ef18ac';
const nodeParami = '#ee06e2';
const nodePichiu = '#ed007e';
const nodePolkadex = '#7C30DD';
const nodePolymesh = '#1348e4';
const nodePontem = '#A92FAC';
const nodePrism = 'linear-gradient(45deg, rgba(63,94,251,1) 0%, rgba(252,70,107,1) 100%)';
const nodeRealis = '#000000';
const nodeRiochain = '#1A3BB3';
const nodeRobonomics = '#2949d3';
const nodeSora = '#2D2926';
const nodeStafi = '#00F3AB';
const nodeSubDAO = 'linear-gradient(50deg, #F20092 0%, #FF4D5D 100%)';
const nodeSubsocial = '#b9018c';
const nodeSubsocialX = '#69058C';
const nodeSubspace = '#562b8e';
const nodeSwapdex = '#E94082';
const nodeTernoa = '#d622ff';
const nodeUniarts = chainUniarts;
const nodeUnitNetwork = '#a351ef';
const nodeUnique = chainUnique;
const nodeOpal = chainOpal;
const nodeWeb3games = '#000000';
const nodeWestlake = chainWestlake;
const nodeZeitgeist = 'linear-gradient(180deg, rgba(32,90,172,1) 0%, rgba(26,72,138,1) 50%, rgba(13,36,69,1) 100%)';
const nodeZero = '#0099cc';
const nodeZenlink = 'linear-gradient(45deg, #F20082 0%, #FF4D4D 100%)';
const nodeSubGame = '#EB027D';
const nodeZCloak = 'linear-gradient(to right, #E89A76 0%, #C5B8CC 50%, #B0B4D7 100%)';
const nodeCESS = '#2269a9';
// based on the spec name
const specShell = '#2e86ab'; // '#0596FC';
const specStatemine = '#113911';
const specStatemint = '#86e62a';
const specWestmint = '#77bb77';
export { emptyColor };
// Alphabetical overrides based on the actual matched chain name
// NOTE: This is as retrieved via the system.chain RPC
export const chainColors: Record<string, string> = Object.entries({
'3DP testnet': chain3dpass,
'3dpass - The Ledger of Things': chain3dpass,
Aband: chainAband,
Acala: chainAcala,
'Acala Dev': chainAcala,
'acala mandala pc1': chainRoccoMandala,
'acala mandala pc2': chainRoccoMandala,
'Acurast Rococo Testnet': chainAcurastRococoTestnet,
'Ajuna Testnet': chainAjuna,
'Aleph Zero': chainAleph,
'Aleph Zero Testnet': chainAleph,
Altair: chainAltair,
Amplitude: chainAmplitude,
'Amplitude Testnet': chainAmplitudeRococo,
'Apron PC1': chainApron,
'Ares Gladios': chainAresGladios,
'Ares Odyssey': nodeOdyssey,
'Ares PC1': chainRoccoAres,
Astar: chainAstar,
Automata: chainAutomata,
'Automata ContextFree': chainAutomataContextFree,
'Bajun Testnet': chainBajun,
'Basilisk testnet': chainBasiliskTestnet,
'Beast Developer': chainBeastEave,
bifrost: chainRoccoBifrost,
'Bifrost Asgard CC4': chainRoccoBifrost,
'Bifrost K Rococo': chainRoccoBifrost,
@ -308,67 +127,28 @@ export const chainColors: Record<string, string> = Object.entries({
'Bifrost PC1': chainRoccoBifrost,
'Bifrost Polkadot': chainRoccoBifrost,
'Bifrost Stage Testnet': chainRoccoBifrost,
'Bit.Country Tewai Chain': chainBitCountry,
Bitgreen: chainBitgreen,
BitgreenRococo: chainBitgreen,
Bittensor: chainBittensor,
'Bittensor Testnet': chainBittensor,
'Calamari Parachain': chainCalamari,
'Calamari Parachain Development': chainCalamari,
'Calamari Parachain Local': chainCalamari,
'Calamari Parachain Testnet': chainCalamari,
Centrifuge: nodeCentrifuge,
'CESS Testnet': chainCESS,
ChainOLI: chainOLI,
ChainX: chainChainx,
Clover: chainClover,
Coinversation: chainCoinversation,
Collectives: chainCollectives,
'Competitors Club': chainCompetitorsClub,
'Composable Finance': chainComposableFinance,
'Contracts on Rococo': chainRococoContracts,
'Crab Parachain': chainCrab,
Creditcoin: chainCreditcoin,
'Creditcoin Testnet': chainCreditcoinTestnet,
'Crown Sterling': chainCrownSterling,
crust: chainCrust,
'crust maxwell': chainCrustMaxwell,
'Crust PC1': chainCrust,
'Crust Testnet': chainCrust,
'Dali Rococo': chainDali,
'Dali Westend': chainDali,
Darwinia: chainDarwinia,
'darwinia cc1': chainDarwinia,
'Darwinia Crab': chainCrab,
'Darwinia Crab Redirect': chainCrab,
'Darwinia Parachain': chainDarwinia,
'Darwinia PC2': chainRoccoDarwinia,
'DataHighway Spreehafen Rococo Parachain Testnet': chainRoccoDataHighway,
'DataHighway Tanganika Kusama Parachain': chainKusamaDataHighway,
DeBio: chainDeBio,
'DeBio Testnet': chainDeBio,
Dolphin: chainDolphin,
'Dolphin Testnet': chainDolphin,
'Dora Factory': chainDorafactory,
'DOTMog.com NET': chainDotMog,
Efinity: chainEfinity,
Equilibrium: chainEquilibrium,
'Equilibrium parachain': chainEquilibrium,
EquilibriumTestnet: chainGenshiro,
'Ethos Testnet': chainEthos,
'Fantour Development': chainFantour,
'Ferrum Testnet': chainFerrum,
Frequency: chainFrequency,
'Frequency Rococo': chainFrequencyRococo,
Galital: chainGalital,
'Galois-PoC-1': chainGalois,
'GamePower Network': chainGamePower,
Genshiro: chainGenshiro,
'Genshiro Rococo Testnet': chainGenshiro,
'GM Parachain': chainGM,
'Halongbay PC1': chainPolkaFoundry,
hanonycash: chainHanonycash,
'Hashed Network': chainHashed,
HydraDX: chainSnakenet,
'HydraDX testnet': chainHydrate,
Idavoll: chainIdavoll,
@ -376,77 +156,33 @@ export const chainColors: Record<string, string> = Object.entries({
InterBTC: chainInterbtc,
'InterBTC Staging': chainInterbtc,
Interlay: chainInterlay,
'InvArch Brainstorm Testnet': chainBrainstorm,
'InvArch Tinker Network': chainTinker,
IpseTestnet: chainIpse,
'Jupiter A1': chainJupiter,
'Jupiter PC1': chainJupiter,
Kabocha: chainKabocha,
'Kabocha (kabsoup)': nodeKabocha,
Kapex: chainTotem,
Karura: chainKarura,
Khala: chainKhala,
KICO: chainKico,
KICO2: chainKico2,
KILT: chainKilt,
'KILT Local': chainKiltDev,
'KILT Peregrine': chainKiltPeregrine,
'KILT Peregrine Stagenet': chainKiltDev,
'KILT Spiritnet': chainKilt,
'KILT Spiritnet Development': chainKiltDev,
'KILT Testnet': chainKiltDev,
Kintsugi: chainKintsugi,
'KLUGDOSSIER.NET': chainKlug,
Konomi: chainKonomi,
Kpron: nodeKpron,
Kulupu: chainKulupu,
Kusama: chainKusama,
'Kusama CC1': chainKusama,
'Kusama CC2': chainKusama,
'Kusama CC3': chainKusama,
kusari: chainKusari,
'Kylin Testnet': chainKylin,
'laminar turbulence pc1': chainRococoLaminar,
'Listen Network': chainListen,
Litentry: chainLitentry,
'Litentry-rococo': chainLitentryRococo,
Litmus: chainLitmus,
'Luhn Network': chainLuhn,
'Mangata Kusama Mainnet': chainMangata,
'Mangata Public Testnet': chainMangata,
'Manta Parachain': chainManta,
'Manta Parachain Development': chainManta,
'Manta Parachain Local': chainManta,
'Manta Parachain Testnet': chainManta,
Mars: nodeAres,
MathChain: nodeMathChain,
'MathChain PC1': chainGalois,
'MD5 Network': chainMd5,
Minix: chainMinix,
'Minix Testnet': chainMinix,
'Moonbase Alpha': nodeMoonbase,
'Moonbase Development Testnet': nodeMoonbase,
'Moonbase Stage': nodeMoonbase,
Moonbeam: nodeMoonbeam,
Moonriver: nodeMoonriver,
Moonrock: chainMoonrock,
'Moonsama Development': chainMoonsama,
Moonshadow: nodeMoonbeam,
'mybank.network Testnet': chainMybank,
Myriad: chainMyriad,
'Myriad Testnet': chainMyriad,
'Nakamoto Bittensor Mainnet': chainBittensor,
'NFTMart Staging': chainNFTMart,
'NFTMart Testnet': chainNFTMart,
'Nodle Parachain': chainNodle,
'Nodle Testing Parachain': chainNodle,
'OAK Network': chainOAK,
Odyssey: nodeOdyssey,
'OLI Parachain': chainOLI,
OmniBTC: chainOmniBTC,
'Opal Node': chainOpal,
'OriginTrail Parachain': chainOriginTrail,
'OriginTrail Parachain Testnet': chainOriginTrailTestnet,
Pangolin: chainPangolin,
'Pangolin Parachain': chainPangolin,
Pangoro: chainPangoro,
@ -455,82 +191,30 @@ export const chainColors: Record<string, string> = Object.entries({
'Parami PC2': chainParami,
Pendulum: chainPendulum,
Phala: chainPhala,
PHOENIX: chainPhoenix,
Picasso: chainPicasso,
'Pichiu Testnet': chainPichiu,
'Pioneer Network': chainBitCountryPioneer,
PolkaBTC: chainInterbtc,
'Polkadex Testnet': chainPolkadex,
Polkadot: chainPolkadot,
'Polkadot CC1': chainPolkadot,
PolkaSmith: chainPolkaSmith,
'Pontem Testnet': chainPontem,
'Prism PC1': chainPrism,
'Prism Testnet': chainPrism,
'QUARTZ by UNIQUE': chainQuartz,
'ReAlis Network': nodeRealis,
RILT: chainKiltRilt,
'RioChain CC-1': chainRiochain,
'Riochain Staging': chainRiochain,
Riodefi: chainRiodefi,
Robonomics: nodeRobonomics,
Rococo: chainRocco,
Sakura: chainSakura,
Shadow: chainShadow,
Sherpax: chainSherpax,
'Sherpax Testnet': chainSherpax,
Shiden: chainShiden,
'SkyeKiwi Testnet Alpha': chainSkyeKiwi,
'SORA Kusama': chainSora,
'SORA Rococo': chainSora,
Spanner: chainSpanner,
Stagex: chainTotem,
Standard: chainStandard,
'Standard Kusama Parachain': chainUnorthodox,
Statemine: specStatemine,
'Statemine Test': specStatemine,
Statemint: specStatemint,
'Statemint Test': specStatemint,
'Steam PC': chainRococoEave,
SubDAO: chainSubDAO,
'SubDAO PC1': chainSubDAO,
'SubDAO Staging': chainSubDAO,
subgame: nodeSubGame,
'SubGame Gamma': nodeSubGame,
'SubGame Staging': nodeSubGame,
Subspace: nodeSubspace,
Subzero: chainZero,
swapdex: chainSwapdex,
t0rn: chainT0rn,
'Tangle Rococo': chainTangle,
'Tangle Testnet': chainTangleDev,
Tick: chainRoccoTick,
'Tinkernet Rococo Testnet': chainTinkerRococo,
Track: chainRoccoTrack,
Trick: chainRoccoTrick,
'TrustBase PC1': chainTrustBase,
'Turing Network': chainTuring,
'Turing Network (Staging)': chainTuring,
'uni arts staging network': chainUniarts,
'UniArts Mainnet': chainUniarts,
'Unique Node': chainUnique,
UNIT: chainUnitv,
UnitNetwork: chainUnitNetwork,
'Vara Network': chainVara,
VirtoRococo: chainVirto,
'VLN PC': chainVln,
Wapex: chainTotem,
'Watr Network': chainWatr,
'Web3Games Plum': chainWeb3games,
Westend: chainWestend,
Westlake: chainWestlake,
Westmint: specWestmint,
'Westmint Test': specWestmint,
Whala: chainWhala,
WILT: chainKilt,
'zcloak poc1': nodeZCloak,
'Zenlink PC1': chainZenlink,
'ZERO.IO': chainZero
'Zenlink PC1': chainZenlink
}).reduce<Record<string, string>>((colors, [chain, color]) => ({
...colors,
[sanitize(chain)]: color
@ -539,76 +223,41 @@ export const chainColors: Record<string, string> = Object.entries({
// Alphabetical overrides based on the actual software node type
// NOTE: This is as retrieved via the system.name RPC
export const nodeColors = Object.entries({
Aband: chainAband,
'Ajuna Node': nodeAjuna,
'Apron Node': nodeApron,
Astar: nodeAstar,
'Automata ContextFree Node': nodeAutomataContextFree,
'Automata Node': nodeAutomata,
'Bajun Node': nodeBajun,
Basilisk: nodeBasilisk,
'Bifrost Node': nodeBifrost,
'Bifrost Stage Testnet': nodeBifrost,
'Bit.Country Node': nodeBitCountry,
'Bitgreen Node': chainBitgreen,
centrifuge: nodeCentrifuge,
'centrifuge chain': nodeCentrifuge,
'Centrifuge Chain Node': nodeCentrifuge,
'CESS Testnet': nodeCESS,
'Circuit Collator': chainT0rn,
Coinversation: nodeCoinversation,
'Competitors Club': nodeCompetitorsClub,
'Crown Sterling': nodeCrownSterling,
'DataHighway Spreehafen Rococo Parachain Testnet': chainRoccoDataHighway,
'DataHighway Tanganika Kusama Parachain': chainKusamaDataHighway,
DeBio: chainDeBio,
'Dora Factory': chainDorafactory,
'DOTMog Node': nodeDotMog,
'edgeware node': nodeEdgeware,
Efinity: nodeEfinity,
'Encointer collator': nodeEncointer,
'Encointer Node noTEE': nodeEncointer,
'Fantour Development': nodeFantour,
Galital: nodeGalital,
'Galital Parachain Collator': nodeGalital,
'GamePower Node': nodeGamePower,
GEEK: nodeGeek,
'GM Collator': chainGM,
'Hashed Network': nodeHashed,
'Imbue Parachain Collator': nodeImbue,
'Integritee Collator': nodeIntegritee,
'Integritee Node': nodeIntegritee,
'InvArch Brainstorm Node': chainBrainstorm,
'InvArch Tinkernet Node': chainTinker,
IpseTestnet: nodeIpse,
'Jaz Node': nodeJaz,
'Joystream Node': nodeJoystream,
Kabocha: chainKabocha,
'Kabocha (kabsoup)': nodeKabocha,
KICO: chainKico,
KICO2: chainKico2,
'Klug Dossier Node': nodeKlug,
'Konomi Collator': nodeKonomi,
'Kpron Collator': nodeKpron,
kusari: nodeKusari,
'Kylin Parachain Collator': nodeKylin,
'Listen Network': chainListen,
'Litentry node': nodeLitentry,
'logion Collator': chainLogion,
'Logion Node': chainLogion,
'Luhn Collator': nodeLuhn,
'Manta Collator': nodeManta,
'Manta Node': nodeManta,
MathChain: nodeMathChain,
'MD5 Collator': nodeMd5,
'Moonsama Development': chainMoonsama,
'mybank.network node': nodeMybank,
Myriad: chainMyriad,
'NFTMart Staging': nodeNFTMart,
'NFTMart Testnet': nodeNFTMart,
'nodle chain node': nodeNodle,
OmniBTC: nodeOmniBTC,
'Opal Node': nodeOpal,
'Opportunity Standalone Testnet': nodeOpportunity,
Pangolin: nodePangolin,
'Pangolin Parachain': nodePangolin,
@ -618,56 +267,20 @@ export const nodeColors = Object.entries({
'Parami Collator': nodeParami,
'Patract Node': nodeJupiter,
'Pichiu Parachain Collator': nodePichiu,
'Polkadex Node': nodePolkadex,
'Polymesh Node': nodePolymesh,
'Pontem Node': nodePontem,
'Prism Collator': nodePrism,
'Prism Node': nodePrism,
'ReAlis Network': nodeRealis,
'Rio Defi Chain Node': nodeRiochain,
'Riochain Staging': nodeRiochain,
'Shiden Collator': chainShiden,
SORA: nodeSora,
'Stafi node': nodeStafi,
'Statemine Collator': specStatemint,
'Statemint Collator': specStatemint,
SubDAO: nodeSubDAO,
'SubDAO Collator': nodeSubDAO,
'SubDAO Staging': nodeSubDAO,
subgame: nodeSubGame,
'SubGame Gamma': nodeSubGame,
'SubGame Staging': nodeSubGame,
'Subsocial Collator': nodeSubsocialX,
'subsocial node': nodeSubsocial,
Subspace: nodeSubspace,
'subzero node': nodeZero,
swapdex: nodeSwapdex,
'Tangle Parachain': chainTangle,
'Ternoa Node': nodeTernoa,
'uni arts node': nodeUniarts,
'UniArts Node': nodeUniarts,
'Unique Node': nodeUnique,
'UnitNetwork Node': nodeUnitNetwork,
'Web3Games Node': nodeWeb3games,
Westlake: nodeWestlake,
'Westmint Collator': specWestmint,
'zcloak node': nodeZCloak,
'Zeitgeist Collator': nodeZeitgeist,
'Zeitgeist Node': nodeZeitgeist,
'Zenlink Collator': nodeZenlink
}).reduce<Record<string, string>>((colors, [node, color]) => ({
...colors,
[sanitize(node)]: color
}), {});
// Alphabetical overrides based on the actual software node type
// NOTE: This is as retrieved via the system.name RPC
export const specColors = Object.entries({
shell: specShell,
statemine: specStatemine,
statemint: specStatemint,
westmint: specWestmint
}).reduce<Record<string, string>>((colors, [spec, color]) => ({
...colors,
[sanitize(spec)]: color
}), {});

View File

@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { chainColors, nodeColors, specColors } from './colors';
import { chainColors, nodeColors } from './colors';
import { identityNodes, identitySpec } from './identityIcons';
import { sanitize } from './util';
@ -15,10 +15,9 @@ export function getSystemIcon (systemName: string, specName: string): 'beachball
) as 'substrate';
}
export function getSystemColor (systemChain: string, systemName: string, specName: string): string | undefined {
export function getSystemColor (systemChain: string, systemName: string): string | undefined {
return (
chainColors[sanitize(systemChain)] ||
nodeColors[sanitize(systemName)] ||
specColors[sanitize(specName)]
nodeColors[sanitize(systemName)]
);
}

File diff suppressed because one or more lines are too long

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,12 @@
// Copyright 2017-2023 @polkadot/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
// do not edit
// auto-generated by scripts/imgConvert.mjs
export const extensionsPolkadotJsSVG = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9InllcyI/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIxNSAxNSAxNDAgMTQwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxNzAgMTcwO3pvb206IDE7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5iZzB7ZmlsbDojRkY4QzAwfQoJLnN0MHtmaWxsOiNGRkZGRkY7fQo8L3N0eWxlPgo8Zz4KCTxjaXJjbGUgY2xhc3M9ImJnMCIgY3g9Ijg1IiBjeT0iODUiIHI9IjcwIi8+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNODUsMzQuN2MtMjAuOCwwLTM3LjgsMTYuOS0zNy44LDM3LjhjMCw0LjIsMC43LDguMywyLDEyLjNjMC45LDIuNywzLjksNC4yLDYuNywzLjNjMi43LTAuOSw0LjItMy45LDMuMy02LjcgYy0xLjEtMy4xLTEuNi02LjQtMS41LTkuN0M1OC4xLDU3LjYsNjkuNSw0Niw4My42LDQ1LjNjMTUuNy0wLjgsMjguNywxMS43LDI4LjcsMjcuMmMwLDE0LjUtMTEuNCwyNi40LTI1LjcsMjcuMiBjMCwwLTUuMywwLjMtNy45LDAuN2MtMS4zLDAuMi0yLjMsMC40LTMsMC41Yy0wLjMsMC4xLTAuNi0wLjItMC41LTAuNWwwLjktNC40TDgxLDczLjRjMC42LTIuOC0xLjItNS42LTQtNi4yIGMtMi44LTAuNi01LjYsMS4yLTYuMiw0YzAsMC0xMS44LDU1LTExLjksNTUuNmMtMC42LDIuOCwxLjIsNS42LDQsNi4yYzIuOCwwLjYsNS42LTEuMiw2LjItNGMwLjEtMC42LDEuNy03LjksMS43LTcuOSBjMS4yLTUuNiw1LjgtOS43LDExLjItMTAuNGMxLjItMC4yLDUuOS0wLjUsNS45LTAuNWMxOS41LTEuNSwzNC45LTE3LjgsMzQuOS0zNy43QzEyMi44LDUxLjYsMTA1LjgsMzQuNyw4NSwzNC43eiBNODcuNywxMjEuNyBjLTMuNC0wLjctNi44LDEuNC03LjUsNC45Yy0wLjcsMy40LDEuNCw2LjgsNC45LDcuNWMzLjQsMC43LDYuOC0xLjQsNy41LTQuOUM5My4zLDEyNS43LDkxLjIsMTIyLjQsODcuNywxMjEuN3oiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K';
// preload all
[extensionsPolkadotJsSVG].forEach((src): void => {
new Image().src = src;
});

View File

Before

Width:  |  Height:  |  Size: 377 B

After

Width:  |  Height:  |  Size: 377 B

File diff suppressed because one or more lines are too long

View File

@ -46,7 +46,6 @@ import chainKabocha from './chains/kabocha.svg';
import chainKarura from './chains/karura.svg';
import chainKico from './chains/kico.png';
import chainKintsugi from './chains/kintsugi.png';
import chainKusama from './chains/kusama.svg';
import chainListen from './chains/listen.png';
import chainLogion from './chains/logion.png';
import chainLuhn from './chains/luhn.png';
@ -76,32 +75,12 @@ import chainSnakenet from './chains/snakenet.svg';
import chainSnowbridge from './chains/snowbridge.png';
import chainSpanner from './chains/spanner.png';
import chainStandard from './chains/standard.png';
import chainT0rn from './chains/t0rn.png';
import chainKusamaDataHighway from './chains/tanganika.png';
import chainTangle from './chains/tangle.png';
import chainTinker from './chains/tinker.png';
import nodeTotem from './chains/totem.svg';
import chainTuring from './chains/turing.png';
import chainUnique from './chains/unique.svg';
import chainUnorthodox from './chains/unorthodox.png';
import chainVara from './chains/vara.svg';
import chainVirto from './chains/virto.png';
import chainWatr from './chains/watr.png';
import extensionPolkadotJs from './extensions/polkadot-js.svg';
import externalCommonwealth from './external/commonwealth.png';
import externalDotreasury from './external/dotreasury.svg';
import externalDotScanner from './external/dotscanner.png';
import externalKodaDot from './external/kodadot.png';
import externalPolkaholic from './external/polkaholic.png';
import externalPolkascan from './external/polkascan.png';
import externalPolkassembly from './external/polkassembly.png';
import externalPolkastats from './external/polkastats.png';
import externalSingular from './external/singular.svg';
import externalStatescan from './external/statescan.svg';
import externalSubId from './external/subid.svg';
import externalSubscan from './external/subscan.png';
import externalSubsquare from './external/subsquare.svg';
import nodeAjuna from './nodes/ajuna.png';
import nodeApron from './nodes/apron.png';
import nodeArctic from './nodes/arctic.png';
import nodeAres from './nodes/ares.png';
@ -116,7 +95,6 @@ import nodeBasilisk from './nodes/basilisk.png';
import nodeBeast from './nodes/beast.svg';
import nodeBifrost from './nodes/bifrost.svg';
import nodeBitCountry from './nodes/bitcountry.png';
import nodeBridgeHubBlack from './nodes/BridgeHubBlack.svg';
import nodeCalamari from './nodes/calamari.png';
import nodeCentrifuge from './nodes/centrifuge.png';
import nodeCESS from './nodes/cess.png';
@ -195,8 +173,6 @@ import nodePhoenix from './nodes/phoenix.png';
import nodePichiu from './nodes/pichiu.png';
import nodePioneerNetwork from './nodes/pioneer.png';
import nodePolkadex from './nodes/polkadex.svg';
import nodePolkadot from './nodes/polkadot-circle.svg';
import nodePolkadotJs from './nodes/polkadot-js.svg';
import nodePolkaFoundry from './nodes/polkafoundry.svg';
import nodePolkaSmith from './nodes/polkasmith.svg';
import nodePolymesh from './nodes/polymesh.svg';
@ -209,7 +185,6 @@ import nodeRobonomics from './nodes/robonomics.svg';
import nodeRocfinity from './nodes/rocfinity.svg';
import nodeSakura from './nodes/sakura.svg';
import nodeShadow from './nodes/shadow.svg';
import nodeShell from './nodes/shell.svg';
import nodeSherpax from './nodes/sherpax.png';
import nodeSingLavender from './nodes/singlavender.svg';
import nodeSnow from './nodes/snow.png';
@ -217,7 +192,6 @@ import nodeSoonsocial from './nodes/soonsocial.png';
import nodeSoonsocialX from './nodes/soonsocialX.png';
import nodeSora from './nodes/sora-substrate.svg';
import nodeStafi from './nodes/stafi.png';
import nodeStatemine from './nodes/statemine.svg';
import nodeSubDAO from './nodes/subdao.png';
import nodeSubGame from './nodes/subgame.svg';
import nodeSubsocial from './nodes/subsocial.svg';
@ -240,11 +214,9 @@ import nodeWestend from './nodes/westend_colour.svg';
import nodeWestlake from './nodes/westlake.png';
import nodeWhala from './nodes/whala.svg';
import nodeZCloak from './nodes/zCloak.svg';
import nodeZeitgeist from './nodes/zeitgeist.png';
import nodeZenlink from './nodes/zenlink.svg';
import nodeZero from './nodes/zero.svg';
import emptyLogo from './empty.svg';
// last-resort fallback, just something empty
import { externalEmptySVG } from './external';
const chainWestendCollectives = { fa: 'people-group' };
@ -253,7 +225,6 @@ const chainWestendCollectives = { fa: 'people-group' };
export const chainLogos = Object.entries({
Aband: chainAband,
'Acurast Rococo Testnet': chainAcurast,
'Ajuna Testnet': nodeAjuna,
'Aleph Zero': chainAleph,
'Aleph Zero Testnet': chainAleph,
Altair: chainAltair,
@ -338,7 +309,6 @@ export const chainLogos = Object.entries({
'InterBTC Staging': nodeInterBTC,
Interlay: chainInterlay,
'InvArch Brainstorm Testnet': chainBrainstorm,
'InvArch Tinker Network': chainTinker,
ipci: nodeIPCI,
IpseTestnet: nodeIpse,
'Jupiter A1': nodeJupiter,
@ -360,11 +330,6 @@ export const chainLogos = Object.entries({
KlugDossier: nodeKlug,
Konomi: nodeKonomi,
Kpron: nodeApron,
Kusama: chainKusama, // new name after CC3
'Kusama BridgeHub': nodeBridgeHubBlack,
'Kusama CC1': chainKusama,
'Kusama CC2': chainKusama,
'Kusama CC3': chainKusama,
kusari: nodeKusari,
'Kylin Testnet': nodeKylin,
'Listen Network': chainListen,
@ -402,7 +367,6 @@ export const chainLogos = Object.entries({
NFTMart: nodeNFTMart,
'NFTMart Staging': nodeNFTMart,
'NFTMart Testnet': nodeNFTMart,
'OAK Network': chainOAK,
Odyssey: nodeAresOdyssey,
'OLI Parachain': chainOLI,
OmniBTC: chainOmniBTC,
@ -437,7 +401,6 @@ export const chainLogos = Object.entries({
Robonomics: nodeRobonomics,
Rocfinity: chainRocfinity,
Rococo: chainRococo,
'Rococo Bridgehub': nodeBridgeHubBlack,
Sherpax: nodeSherpax,
'Sherpax Testnet': nodeSherpax,
Shiden: chainShiden,
@ -451,9 +414,6 @@ export const chainLogos = Object.entries({
'SORA Rococo': nodeSora,
Spanner: chainSpanner,
Stagex: nodeTotem,
Statemine: nodeStatemine,
'Statemine Test': nodeStatemine,
'Statemint Test': nodeStatemine,
'Steam PC': nodeEave,
subdao: nodeSubDAO,
'SubDAO PC1': nodeSubDAO,
@ -466,7 +426,6 @@ export const chainLogos = Object.entries({
subspace: nodeSubspace,
Subzero: nodeZero,
swapdex: nodeSwapdex,
t0rn: chainT0rn,
'Tangle Rococo': chainTangle,
'Tangle Testnet': chainTangle,
Tick: chainRococoTick,
@ -474,7 +433,6 @@ export const chainLogos = Object.entries({
Trick: chainRococoTrick,
trustbase: nodeTrustBase,
'TrustBase PC1': nodeTrustBase,
turing: chainTuring,
'uni arts staging network': nodeUniarts,
'UniArts Mainnet': nodeUniarts,
Unique: chainUnique,
@ -483,23 +441,18 @@ export const chainLogos = Object.entries({
'Unitv Network': nodeUnitv,
Unorthodox: chainUnorthodox,
'Vara Network': chainVara,
VirtoRococo: chainVirto,
Vln: nodeVln,
'VLN PC': nodeVln,
Wapex: nodeTotem,
'Watr Network': chainWatr,
'Web3Games Plum': nodeWeb3games,
Westend: nodeWestend,
'Westend BridgeHub': nodeBridgeHubBlack,
'Westend Collectives': chainWestendCollectives,
Westlake: nodeWestlake,
Westmint: nodeStatemine,
'Westmint Test': nodeStatemine,
WILT: nodeKilt,
'zcloak poc1': nodeZCloak
}).reduce<Record<string, unknown>>((logos, [chain, logo]) => ({
}).reduce<Record<string, unknown>>((logos, [chain, external]) => ({
...logos,
[sanitize(chain)]: logo
[sanitize(chain)]: external
}), {});
// Alphabetical overrides based on the actual software node type
@ -508,7 +461,6 @@ export const nodeLogos = Object.entries({
Aband: chainAband,
'Acala Node': chainAcala,
'Acurast Parachain Collator': chainAcurast,
'Ajuna Node': nodeAjuna,
Amplitude: chainAmplitude,
'Apron Node': nodeApron,
'Apron Parachain Collator': nodeApron,
@ -583,7 +535,6 @@ export const nodeLogos = Object.entries({
'Integritee Node': nodeIntegritee,
Interlay: chainInterlay,
'InvArch Brainstorm Node': chainBrainstorm,
'InvArch Tinkernet Node': chainTinker,
IpseTestnet: nodeIpse,
'Jaz Node': nodeJaz,
'Joystream Node': nodeJoystream,
@ -637,7 +588,6 @@ export const nodeLogos = Object.entries({
'Parallel Heiko': nodeParallel,
'Parallel Heiko Dev': nodeParallel,
Parami: nodeParami,
'parity-polkadot': nodePolkadot,
'Patract Node': nodeJupiter,
Pendulum: chainPendulum,
Phala: nodePhala,
@ -649,7 +599,6 @@ export const nodeLogos = Object.entries({
'Pichiu Node': nodePichiu,
'Pioneer Network Collator Node': nodePioneerNetwork,
'Polkadex Node': nodePolkadex,
'polkadot-js': nodePolkadotJs,
'PolkaFoundry Node': nodePolkaFoundry,
'PolkaFoundry Parachain Collator': nodePolkaFoundry,
'PolkaSmith Parachain Collator': nodePolkaSmith,
@ -672,8 +621,6 @@ export const nodeLogos = Object.entries({
Sora: nodeSora,
Stafi: nodeStafi,
'Stafi Node': nodeStafi,
'Statemine Collator': nodeStatemine,
'Statemint Collator': nodeStatemine,
subdao: nodeSubDAO,
'SubDAO Collator': nodeSubDAO,
'SubDAO Staging': nodeSubDAO,
@ -685,7 +632,6 @@ export const nodeLogos = Object.entries({
'substrate-node': nodeSubstrate,
'subzero node': nodeZero,
swapdex: nodeSwapdex,
t0rn: chainT0rn,
'Ternoa Node': nodeTernoa,
'Totem Parachain Collator': nodeTotem,
'TrustBase Collator': nodeTrustBase,
@ -704,34 +650,18 @@ export const nodeLogos = Object.entries({
'Web3Games Node': nodeWeb3games,
Westend: nodeWestend,
Westlake: nodeWestlake,
'Westmint Collator': nodeStatemine,
Whala: nodeWhala,
'Whala Node': nodeWhala,
WILT: nodeKilt,
'zcloak node': nodeZCloak,
'Zeitgeist Collator': nodeZeitgeist,
'Zeitgeist Node': nodeZeitgeist,
Zenlink: nodeZenlink,
'Zenlink Collator': nodeZenlink
}).reduce<Record<string, unknown>>((logos, [node, logo]) => ({
}).reduce<Record<string, unknown>>((logos, [node, external]) => ({
...logos,
[sanitize(node)]: logo
[sanitize(node)]: external
}), {});
// Alphabetical overrides based on the actual specName
export const specLogos = Object.entries({
oak: chainOAK,
shell: nodeShell,
statemine: nodeStatemine,
statemint: nodeStatemine,
turing: chainTuring,
westmint: nodeStatemine
}).reduce<Record<string, unknown>>((logos, [spec, logo]) => ({
...logos,
[sanitize(spec)]: logo
}), {});
// Alphabetical overrides when we pass an explicit logo name
// Alphabetical overrides when we pass an explicit external name
// NOTE: Matches with what is defined as "info" in settings/endpoints.ts
// (Generally would be the 'network' key in the known ss58 as per
// https://github.com/polkadot-js/common/blob/master/packages/networks/src/index.ts)
@ -740,9 +670,7 @@ export const namedLogos: Record<string, unknown> = {
'3dpass-testnet': chain3dpass,
aband: chainAband,
acala: chainAcala,
ajuna: nodeAjuna,
aleph: chainAleph,
alexander: nodePolkadot,
altair: chainAltair,
amplitude: chainAmplitude,
arctic: nodeArctic,
@ -795,7 +723,7 @@ export const namedLogos: Record<string, unknown> = {
eave: nodeEave,
edgeware: nodeEdgeware,
efinity: nodeEfinity,
empty: emptyLogo,
empty: externalEmptySVG,
encointer: nodeEncointer,
equilibrium: chainEquilibrium,
fantour: nodeFantour,
@ -838,8 +766,6 @@ export const namedLogos: Record<string, unknown> = {
klugdossier: nodeKlug,
kpron: nodeApron,
kulupu: nodeKulupu,
kusama: chainKusama,
kusamaBridgeHub: nodeBridgeHubBlack,
kusari: nodeKusari,
kylin: nodeKylin,
laminar: nodeLaminar,
@ -879,7 +805,6 @@ export const namedLogos: Record<string, unknown> = {
picasso: chainPicasso,
pichiu: nodePichiu,
polkadex: nodePolkadex,
polkadot: nodePolkadot,
polkadotCollectives: chainWestendCollectives,
polkafoundry: nodePolkaFoundry,
polkasmith: nodePolkaSmith,
@ -905,7 +830,6 @@ export const namedLogos: Record<string, unknown> = {
rococoBifrost: nodeBifrost,
rococoBitCountry: nodeBitCountry,
rococoBitgreen: chainBitgreen,
rococoBridgehub: nodeBridgeHubBlack,
rococoCatalyst: nodeCentrifuge,
rococoChainX: nodeChainx,
rococoClover: nodeClover,
@ -954,26 +878,19 @@ export const namedLogos: Record<string, unknown> = {
rococoSora: nodeSora,
rococoSpreehafen: chainRoccoDataHighway,
rococoStandard: chainStandard,
rococoStatemint: nodeStatemine,
rococoSubDAO: nodeSubDAO,
rococoSubsocial: nodeSoonsocialX,
rococoSubzero: nodeZero,
rococoTick: chainRococoTick,
rococoTinkernet: chainTinker,
rococoTrack: chainRococoTrack,
rococoTrick: chainRococoTrick,
rococoTrustBase: nodeTrustBase,
rococoTuring: chainTuring,
rococoUnitNetwork: nodeUnitNetwork,
rococoUnitv: nodeUnitv,
rococoVirto: chainVirto,
rococoVln: nodeVln,
rococoWatr: chainWatr,
rococoZeitgeist: nodeZeitgeist,
rococoZenlink: nodeZenlink,
sakura: nodeSakura,
shadow: nodeShadow,
shell: nodeShell,
sherpax: nodeSherpax,
shibuya: chainShiden,
shiden: chainShiden,
@ -989,8 +906,6 @@ export const namedLogos: Record<string, unknown> = {
spanner: chainSpanner,
stafi: nodeStafi,
stagex: nodeTotem,
statemine: nodeStatemine,
statemint: nodeStatemine,
subdao: nodeSubDAO,
'SubDAO PC1': nodeSubDAO,
'SubDAO Staging': nodeSubDAO,
@ -1006,7 +921,6 @@ export const namedLogos: Record<string, unknown> = {
substrate: nodeSubstrate,
substrateContractsNode: nodeSubstrateContractsNode,
swapdex: nodeSwapdex,
t0rn: chainT0rn,
tanganika: chainKusamaDataHighway,
tangle: chainTangle,
ternoa: nodeTernoa,
@ -1014,10 +928,8 @@ export const namedLogos: Record<string, unknown> = {
'ternoa-testnet': nodeTernoa,
'thebifrost-mainnet': nodeTheBifrost,
'thebifrost-testnet': nodeTheBifrost,
tinker: chainTinker,
'totem-parachain': nodeTotem,
trustbase: nodeTrustBase,
turing: chainTuring,
uniarts: nodeUniarts,
unique: nodeUnique,
unitnetwork: nodeUnitNetwork,
@ -1028,47 +940,17 @@ export const namedLogos: Record<string, unknown> = {
vln: nodeVln,
web3games: nodeWeb3games,
westend: nodeWestend,
westendBridgeHub: nodeBridgeHubBlack,
westendCollectives: chainWestendCollectives,
westendPichiu: nodePichiu,
westendStandard: chainStandard,
westlake: nodeWestlake,
westmint: nodeStatemine,
whala: nodeWhala,
zCloak: nodeZCloak,
zeitgeist: nodeZeitgeist,
zero: nodeZero
};
// extension logos
export const extensionLogos: Record<string, unknown> = {
'polkadot-js': extensionPolkadotJs
};
// external logos, i.e. for explorers
export const externalLogos: Record<string, unknown> = {
commonwealth: externalCommonwealth,
dotreasury: externalDotreasury,
dotscanner: externalDotScanner,
kodadot: externalKodaDot,
polkaholic: externalPolkaholic,
polkascan: externalPolkascan,
polkassembly: externalPolkassembly,
polkastats: externalPolkastats,
singular: externalSingular,
statescan: externalStatescan,
subid: externalSubId,
subscan: externalSubscan,
subsquare: externalSubsquare
};
// empty logos
export const emptyLogos: Record<string, unknown> = {
empty: emptyLogo
};
// preload all
[chainLogos, extensionLogos, externalLogos, namedLogos, nodeLogos, emptyLogos].forEach((imageSet): void => {
[chainLogos, namedLogos, nodeLogos].forEach((imageSet): void => {
Object.values(imageSet).forEach((src): void => {
new Image().src = src as string;
});

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,12 @@
// Copyright 2017-2023 @polkadot/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { TOptions } from './types';
import type { TOptions } from './types';
import { u8aToString } from '@polkadot/util';
import { base64Decode, unzlibSync } from '@polkadot/wasm-util';
const HDR = ';base64,';
export function defaultT (keyOrText: string, text?: string, options?: TOptions): string {
return (
@ -14,3 +19,15 @@ export function defaultT (keyOrText: string, text?: string, options?: TOptions):
keyOrText
);
}
export function unz (base64: string, lenIn: number, lenOut: number): string {
return u8aToString(
unzlibSync(
base64Decode(
base64.substring(HDR.length),
new Uint8Array(lenIn)
),
new Uint8Array(lenOut)
)
);
}

View File

@ -21,13 +21,13 @@ export const PORTAL_ID = 'portals';
function Apps ({ className = '' }: Props): React.ReactElement<Props> {
const { themeClassName } = useTheme();
const { isDevelopment, specName, systemChain, systemName } = useApi();
const { apiEndpoint, isDevelopment, systemChain, systemName } = useApi();
const uiHighlight = useMemo(
() => isDevelopment
? undefined
: getSystemColor(systemChain, systemName, specName),
[isDevelopment, specName, systemChain, systemName]
: apiEndpoint?.uiColor || getSystemColor(systemChain, systemName),
[apiEndpoint, isDevelopment, systemChain, systemName]
);
return (

View File

@ -19,7 +19,7 @@ interface Props {
value: Network;
}
function NetworkDisplay ({ apiUrl, className = '', setApiUrl, value: { icon, isChild, isRelay, isUnreachable, name, nameRelay: relay, paraId, providers } }: Props): React.ReactElement<Props> {
function NetworkDisplay ({ apiUrl, className = '', setApiUrl, value: { icon, isChild, isRelay, isUnreachable, name, nameRelay: relay, paraId, providers, uiLogo } }: Props): React.ReactElement<Props> {
const { t } = useTranslation();
const isSelected = useMemo(
() => providers.some(({ url }) => url === apiUrl),
@ -49,7 +49,7 @@ function NetworkDisplay ({ apiUrl, className = '', setApiUrl, value: { icon, isC
<ChainImg
className='endpointIcon'
isInline
logo={icon === 'local' ? 'empty' : (icon || 'empty')}
logo={uiLogo || (icon === 'local' ? 'empty' : (icon || 'empty'))}
withoutHl
/>
<div className='endpointValue'>

View File

@ -60,7 +60,9 @@ function combineEndpoints (endpoints: LinkOption[]): Group[] {
name: e.text as string,
nameRelay: e.textRelay as string,
paraId: e.paraId,
providers: [prov]
providers: [prov],
uiColor: e.uiColor,
uiLogo: e.uiLogo
});
}
}

View File

@ -15,7 +15,9 @@ export interface Network {
providers: {
name: string;
url: string;
}[]
}[];
uiColor?: string;
uiLogo?: string;
}
export interface Group {

View File

@ -6,7 +6,8 @@ import type { ChainInfo } from '../types';
import React, { useCallback, useMemo, useRef, useState } from 'react';
import styled from 'styled-components';
import { emptyLogos, extensionLogos } from '@polkadot/apps-config';
import { knownExtensions } from '@polkadot/apps-config';
import { externalEmptySVG } from '@polkadot/apps-config/ui/logos/external';
import { Button, Dropdown, Spinner, Table } from '@polkadot/react-components';
import { useToggle } from '@polkadot/react-hooks';
@ -26,7 +27,7 @@ function Extensions ({ chainInfo, className }: Props): React.ReactElement<Props>
const [isBusy, toggleBusy] = useToggle();
const options = useMemo(
() => (extensions || []).map(({ extension: { name, version } }, value) =>
iconOption(`${name} ${version}`, value, extensionLogos[name] || emptyLogos.empty)),
iconOption(`${name} ${version}`, value, (knownExtensions[name]?.uiLogo) || externalEmptySVG)),
[extensions]
);
const _updateMeta = useCallback(

View File

@ -13,7 +13,7 @@ import { formatBalance, isNumber } from '@polkadot/util';
import { base64Encode } from '@polkadot/util-crypto';
function useChainInfoImpl (): ChainInfo | null {
const { api, isApiReady, isEthereum, specName, systemChain, systemName } = useApi();
const { api, apiEndpoint, isApiReady, isEthereum, specName, systemChain, systemName } = useApi();
return useMemo(
() => isApiReady
@ -22,7 +22,7 @@ function useChainInfoImpl (): ChainInfo | null {
chainType: isEthereum
? 'ethereum'
: 'substrate',
color: getSystemColor(systemChain, systemName, specName),
color: apiEndpoint?.uiColor || getSystemColor(systemChain, systemName),
genesisHash: api.genesisHash.toHex(),
icon: getSystemIcon(systemName, specName),
metaCalls: base64Encode(api.runtimeMetadata.asCallsOnly.toU8a()),
@ -35,7 +35,7 @@ function useChainInfoImpl (): ChainInfo | null {
types: getSpecTypes(api.registry, systemChain, api.runtimeVersion.specName, api.runtimeVersion.specVersion) as unknown as Record<string, string>
}
: null,
[api, isApiReady, specName, systemChain, systemName, isEthereum]
[api, apiEndpoint, isApiReady, specName, systemChain, systemName, isEthereum]
);
}

View File

@ -6,7 +6,8 @@ import type { IconName } from '@fortawesome/fontawesome-svg-core';
import React, { useMemo } from 'react';
import styled from 'styled-components';
import { chainLogos, emptyLogos, namedLogos, nodeLogos, specLogos } from '@polkadot/apps-config';
import { chainLogos, namedLogos, nodeLogos } from '@polkadot/apps-config';
import { externalEmptySVG } from '@polkadot/apps-config/ui/logos/external';
import { useApi } from '@polkadot/react-hooks';
import Icon from './Icon';
@ -24,19 +25,21 @@ function sanitize (value?: string): string {
}
function ChainImg ({ className = '', isInline, logo, onClick, withoutHl }: Props): React.ReactElement<Props> {
const { specName, systemChain, systemName } = useApi();
const { apiEndpoint, systemChain, systemName } = useApi();
const [isEmpty, img, isFa] = useMemo((): [boolean, unknown, boolean] => {
const found = logo && logo !== 'empty'
? namedLogos[logo]
: chainLogos[sanitize(systemChain)] || nodeLogos[sanitize(systemName)] || specLogos[sanitize(specName)];
const imgBase = found || emptyLogos.empty;
? logo.startsWith('data:image/')
? logo
: namedLogos[logo]
: apiEndpoint?.uiLogo || chainLogos[sanitize(systemChain)] || nodeLogos[sanitize(systemName)];
const imgBase = found || externalEmptySVG;
const isFa = !!((imgBase as Record<string, string>).fa);
const img = isFa
? (imgBase as Record<string, string>).fa
: imgBase;
return [!found || logo === 'empty', img, isFa];
}, [logo, specName, systemChain, systemName]);
}, [apiEndpoint, logo, systemChain, systemName]);
const iconClassName = `${className} ui--ChainImg ${(isEmpty && !withoutHl) ? 'highlight--bg' : ''} ${isInline ? 'isInline' : ''}`;

69
scripts/imgConvert.mjs Normal file
View File

@ -0,0 +1,69 @@
// Copyright 2017-2023 @polkadot/apps authors & contributors
// SPDX-License-Identifier: Apache-2.0
import fs from 'node:fs';
import path from 'node:path';
import { zlibSync } from 'fflate/node';
import { stringCamelCase } from '@polkadot/util';
const WITH_ZLIB = false;
const DIRS = ['extensions', 'external', 'chains', 'nodes'];
const MIME = {
gif: 'image/gif',
png: 'image/png',
svg: 'image/svg+xml'
}
for (let dir of DIRS) {
const sub = path.join('packages/apps-config/src/ui/logos', dir);
const result = {};
fs
.readdirSync(sub)
.forEach((file) => {
const full = path.join(sub, file);
if (file !== 'index.ts' && fs.lstatSync(full).isFile()) {
const parts = file.split('.');
const ext = parts[parts.length - 1];
const mime = MIME[ext];
if (!mime) {
console.error(`Unable to determine mime for ${f}`);
} else {
const data = `data:${mime};base64,${fs.readFileSync(full).toString('base64')}`;
const compressed = Buffer.from(zlibSync(Buffer.from(data), { level: 9 }));
const base64 = compressed.toString('base64');
result[`${stringCamelCase(`${dir}_${parts.slice(0, parts.length - 1).join('_')}`)}${ext.toUpperCase()}`] = WITH_ZLIB
? `unz(';base64,${base64}', ${compressed.length}, ${data.length})`
: `'${data}'`;
}
}
});
if (Object.keys(result).length) {
fs.writeFileSync(path.join(sub, 'index.ts'), `// Copyright 2017-2023 @polkadot/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
// do not edit
// auto-generated by scripts/imgConvert.mjs
${
WITH_ZLIB
? "\nimport { unz } from '../../../util';\n"
: ''
}
${Object.keys(result).sort().map((k) => `export const ${k} = ${result[k]};`).join('\n')}
// preload all
[${Object.keys(result).sort().join(', ')}].forEach((src): void => {
new Image().src = src;
});
`);
}
}

View File

@ -3269,6 +3269,7 @@ __metadata:
"@polkadot/networks": ^10.3.1
"@polkadot/types": ^9.13.6
"@polkadot/util": ^10.3.1
"@polkadot/wasm-util": ^6.4.1
"@polkadot/x-fetch": ^10.3.1
"@polymathnetwork/polymesh-types": 0.0.2
"@snowfork/snowbridge-types": 0.2.7
@ -4024,7 +4025,7 @@ __metadata:
languageName: node
linkType: hard
"@polkadot/wasm-util@npm:6.4.1":
"@polkadot/wasm-util@npm:6.4.1, @polkadot/wasm-util@npm:^6.4.1":
version: 6.4.1
resolution: "@polkadot/wasm-util@npm:6.4.1"
dependencies: