diff --git a/packages/apps-config/src/api/constants.ts b/packages/apps-config/src/api/constants.ts index 1c835b30c0..bf4a11cdd7 100644 --- a/packages/apps-config/src/api/constants.ts +++ b/packages/apps-config/src/api/constants.ts @@ -1,5 +1,6 @@ // Copyright 2017-2026 @polkadot/apps-config authors & contributors // SPDX-License-Identifier: Apache-2.0 +// GHOST Edit **added CAPSER Hash import type { HexString } from '@polkadot/util/types'; @@ -46,3 +47,5 @@ export const JOYSTREAM_GENESIS = '0x6b5e488e0fa8f9821110d5c13f4c468abcd43ce5e297 export const ZKVERIFY_GENESIS = '0x060e3dd3fa2904d031206bb913c954687a2bcc350e5a83d33d9e273ad21460f1'; export const ZKVERIFY_VOLTA_GENESIS = '0xff7fe5a610f15fe7a0c52f94f86313fb7db7d3786e7f8acf2b66c11d5be7c242'; + +export const CASPER_TESTNET_GENESIS = '0xcaf9c5ddccc7ba6f96149a6b8a81c26a3641742795cd5e7e0aee79bf3f4e77b7'; diff --git a/packages/apps-config/src/endpoints/casperTestnet.ts b/packages/apps-config/src/endpoints/casperTestnet.ts new file mode 100644 index 0000000000..28229f1b08 --- /dev/null +++ b/packages/apps-config/src/endpoints/casperTestnet.ts @@ -0,0 +1,29 @@ +// Copyright 2017-2026 @polkadot/apps-config authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { EndpointOption } from './types.js'; + +import { CASPER_TESTNET_GENESIS } from '../api/constants.js'; +import { chainsCasperTestnetSVG } from '../ui/logos/chains/index.js'; + +// The available endpoints that will show in the dropdown. For the most part (with the exception of +// Polkadot) we try to keep this to live chains only, with RPCs hosted by the community/chain vendor +// info: The chain logo name as defined in ../ui/logos/index.ts in namedLogos (this also needs to align with @polkadot/networks) +// text: The text to display on the dropdown +// providers: The actual hosted secure websocket endpoint +// +// IMPORTANT: Alphabetical based on text +export const casperTestnet: Omit[] = [ + { + genesisHash: CASPER_TESTNET_GENESIS, + info: 'casper-testnet', + providers: { + CASPER: 'wss://casper-rpc.ghostchain.io' as unknown as `wss://${string}` + }, + text: 'CASPER Testnet', + ui: { + color: '#F2E370', + logo: chainsCasperTestnetSVG + } + } +]; \ No newline at end of file diff --git a/packages/apps-config/src/endpoints/index.ts b/packages/apps-config/src/endpoints/index.ts index 4e9f641d84..4f81848f14 100644 --- a/packages/apps-config/src/endpoints/index.ts +++ b/packages/apps-config/src/endpoints/index.ts @@ -9,6 +9,7 @@ import { prodChains, prodRelayKusama, prodRelayPolkadot } from './production.js' import { testChains, testRelayWestend } from './testing.js'; import { testRelayPaseo } from './testingRelayPaseo.js'; import { expandEndpoints } from './util.js'; +import { casperTestnet } from './casperTestnet.js'; export { CUSTOM_ENDPOINT_KEY } from './development.js'; export * from './production.js'; @@ -30,7 +31,8 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w testRelayWestend, testRelayPaseo, ...prodChains, - ...testChains + ...testChains, + ...casperTestnet ]; return [ @@ -46,7 +48,7 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w }, { isDisabled: false, - isHeader: true, + isHeader: false, isSpaced: true, text: t('rpc.header.polkadot.relay', 'Polkadot & parachains', { ns: 'apps-config' }), textBy: '', @@ -56,7 +58,7 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w ...expandEndpoints(t, [prodRelayPolkadot], firstOnly, withSort), { isDisabled: false, - isHeader: true, + isHeader: false, isSpaced: true, text: t('rpc.header.kusama.relay', 'Kusama & parachains', { ns: 'apps-config' }), textBy: '', @@ -66,7 +68,7 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w ...expandEndpoints(t, [prodRelayKusama], firstOnly, withSort), { isDisabled: false, - isHeader: true, + isHeader: false, isSpaced: true, text: t('rpc.header.westend.relay', 'Test Westend & parachains', { ns: 'apps-config' }), textBy: '', @@ -76,7 +78,7 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w ...expandEndpoints(t, [testRelayWestend], firstOnly, withSort), { isDisabled: false, - isHeader: true, + isHeader: false, isSpaced: true, text: t('rpc.header.paseo.relay', 'Test Paseo & parachains', { ns: 'apps-config' }), textBy: '', @@ -86,7 +88,7 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w ...expandEndpoints(t, [testRelayPaseo], firstOnly, withSort), { isDisabled: false, - isHeader: true, + isHeader: false, isSpaced: true, text: t('rpc.header.live', 'Live networks', { ns: 'apps-config' }), textBy: '', @@ -96,7 +98,7 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w ...expandEndpoints(t, prodChains, firstOnly, withSort), { isDisabled: false, - isHeader: true, + isHeader: false, isSpaced: true, text: t('rpc.header.test', 'Test networks', { ns: 'apps-config' }), textBy: '', @@ -104,6 +106,26 @@ export function createWsEndpoints (t: TFunction = defaultT, firstOnly = false, w value: '' }, ...expandEndpoints(t, testChains, firstOnly, withSort), + { + isDisabled: false, + isHeader: true, + isSpaced: true, + text: t('rpc.header.ghost', 'GHOST Mainnet', { ns: 'apps-config' }), + textBy: '', + ui: {}, + value: '' + }, + // nothing here — no expandEndpoints call + { + isDisabled: false, + isHeader: true, + isSpaced: true, + text: t('rpc.header.casper', 'CASPER Testnet', { ns: 'apps-config' }), + textBy: '', + ui: {}, + value: '' + }, + ...expandEndpoints(t, casperTestnet, firstOnly, withSort), { isDevelopment: true, isDisabled: false, diff --git a/packages/apps-config/src/endpoints/testing.ts b/packages/apps-config/src/endpoints/testing.ts index 92f432ea6f..bc21dc91b1 100644 --- a/packages/apps-config/src/endpoints/testing.ts +++ b/packages/apps-config/src/endpoints/testing.ts @@ -3,8 +3,8 @@ import type { EndpointOption } from './types.js'; -import { ZKVERIFY_VOLTA_GENESIS } from '../api/constants.js'; -import { chains3dpassSVG, chainsAcalaSVG, chainsAlephSVG, chainsAllfeatSVG, chainsAnalogSVG, chainsArgonSVG, chainsBrainstormPNG, chainsChainflipPNG, chainsCreditcoinTestPNG, chainsDebioSVG, chainsEquilibriumSVG, chainsFerrumPNG, chainsFragnovaPNG, chainsJurPNG, chainsKintsugiPNG, chainsLiberlandPNG, chainsLogionPNG, chainsMyriadPNG, chainsQfNetworkPNG, chainsSkyekiwiPNG, chainsTanglePNG, chainsVaraTestnetPNG } from '../ui/logos/chains/index.js'; +import { CASPER_TESTNET_GENESIS, ZKVERIFY_VOLTA_GENESIS } from '../api/constants.js'; +import { chainsCasperTestnetSVG, chains3dpassSVG, chainsAcalaSVG, chainsAlephSVG, chainsAllfeatSVG, chainsAnalogSVG, chainsArgonSVG, chainsBrainstormPNG, chainsChainflipPNG, chainsCreditcoinTestPNG, chainsDebioSVG, chainsEquilibriumSVG, chainsFerrumPNG, chainsFragnovaPNG, chainsJurPNG, chainsKintsugiPNG, chainsLiberlandPNG, chainsLogionPNG, chainsMyriadPNG, chainsQfNetworkPNG, chainsSkyekiwiPNG, chainsTanglePNG, chainsVaraTestnetPNG } from '../ui/logos/chains/index.js'; import { nodesArcticPNG, nodesAresGladiosSVG, nodesAutonomysPNG, nodesBifrostSVG, nodesBitcountryPNG, nodesCereSVG, nodesCessPNG, nodesCloverSVG, nodesCrustMaxwellSVG, nodesCurioSVG, nodesDancelightSVG, nodesDatahighwayPNG, nodesDockPNG, nodesDolphinSVG, nodesDotmogSVG, nodesEdgewareWhitePNG, nodesEncointerBlueSVG, nodesFantourPNG, nodesGalitalLogoPNG, nodesGamepowerSVG, nodesGeekSVG, nodesInterlaySVG, nodesIpsePNG, nodesJazPNG, nodesJupiterSVG, nodesKarmachainSVG, nodesKhalaSVG, nodesKlugPNG, nodesKylinPNG, nodesLaminarCircleSVG, nodesMantaPNG, nodesMathSVG, nodesMinixPNG, nodesMoonbaseAlphaSVG, nodesMybankPNG, nodesNftmartPNG, nodesNodleSVG, nodesOpportunityPNG, nodesPhalaSVG, nodesPhoenixPNG, nodesPhykenNetworkPNG, nodesPichiuPNG, nodesPolkadexSVG, nodesPolkafoundrySVG, nodesPolymeshSVG, nodesPontemSVG, nodesPrismPNG, nodesRealisPNG, nodesRiochainSVG, nodesSherpaxPNG, nodesSoonsocialPNG, nodesSoraSubstrateSVG, nodesSubdaoPNG, nodesSubgameSVG, nodesSubspacePNG, nodesSubstrateHexagonSVG, nodesTernoaSVG, nodesThebifrostPNG, nodesUniartsPNG, nodesUniqueSVG, nodesUnitnetworkPNG, nodesVFlowPNG, nodesWeb3gamesSVG, nodesZCloakSVG, nodesZeroSVG, nodesZkVerifyPNG } from '../ui/logos/nodes/index.js'; export * from './testingRelayPaseo.js'; @@ -1136,5 +1136,18 @@ export const testChains: Omit[] = [ color: '#15AA6A', logo: nodesZkVerifyPNG } + }, + // GHOST Edit **Added CASPER + { + genesisHash: CASPER_TESTNET_GENESIS, + info: 'casper-testnet', + providers: { + CASPER: 'wss://casper-rpc.ghostchain.io' + }, + text: 'CASPER Testnet', + ui: { + color: '#F2E370', + logo: chainsCasperTestnetSVG + } } -]; +]; \ No newline at end of file diff --git a/packages/apps-config/src/ui/logos/chains/CasperTestnet.svg b/packages/apps-config/src/ui/logos/chains/CasperTestnet.svg new file mode 100644 index 0000000000..92eb4d8abd --- /dev/null +++ b/packages/apps-config/src/ui/logos/chains/CasperTestnet.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/apps-config/src/ui/logos/chains/generated/CasperTestnetSVG.ts b/packages/apps-config/src/ui/logos/chains/generated/CasperTestnetSVG.ts new file mode 100644 index 0000000000..4ab882785c --- /dev/null +++ b/packages/apps-config/src/ui/logos/chains/generated/CasperTestnetSVG.ts @@ -0,0 +1,6 @@ +// Copyright 2017-2026 @polkadot/apps authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +// Do not edit. Auto-generated via node scripts/imgConvert.mjs + +export const chainsCasperTestnetSVG = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0idXVpZC05ZjlkMTRjMy0wNmQyLTRiYTMtOTE4YS02MWQ0NzM1MDJjODkiIGRhdGEtbmFtZT0iTGF5ZXIgMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjUwIDI1MCI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC51dWlkLWNlOGI1ZDY2LTA1NTEtNDYwYi05YjU1LTYzOTA0MDMzMTg1NCB7CiAgICAgICAgZmlsbDogI2ZmZjsKICAgICAgfQoKICAgICAgLnV1aWQtZjY1MTM4M2UtNzI5Yy00NTQzLTgyZWQtNWNlYTU2NjIzMDdkIHsKICAgICAgICBmaWxsOiAjMzQ1Yjg3OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8ZyBpZD0idXVpZC01N2Y3NDhkOS01YjNlLTRmMzktYjNmNC04N2Y2NzBhMDdhNDkiIGRhdGEtbmFtZT0idXVpZC0yYTJlZDRkZC0xMjY2LTRiNDQtYjFjMi1mNDU2ZTZlYzZmNDkiPgogICAgPGcgaWQ9InV1aWQtNDJmMWM4NWYtMjJkNC00MWQxLTgxM2UtMWNmYjAwZWI5YzJjIiBkYXRhLW5hbWU9InV1aWQtZmI4NGY5ODUtYWNjNi00NTI5LTg4NjAtYTdkMTdlNDNmNTMzIj4KICAgICAgPGc+CiAgICAgICAgPGNpcmNsZSBjbGFzcz0idXVpZC1jZThiNWQ2Ni0wNTUxLTQ2MGItOWI1NS02MzkwNDAzMzE4NTQiIGN4PSIxMjUiIGN5PSIxMjUiIHI9IjEyMi41Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InV1aWQtZjY1MTM4M2UtNzI5Yy00NTQzLTgyZWQtNWNlYTU2NjIzMDdkIiBkPSJtMTI1LDVjMzIuMDUsMCw2Mi4xOSwxMi40OCw4NC44NSwzNS4xNXMzNS4xNSw1Mi44LDM1LjE1LDg0Ljg1LTEyLjQ4LDYyLjE5LTM1LjE1LDg0Ljg1Yy0yMi42NywyMi42Ny01Mi44LDM1LjE1LTg0Ljg1LDM1LjE1cy02Mi4xOS0xMi40OC04NC44NS0zNS4xNUMxNy40OCwxODcuMTksNSwxNTcuMDUsNSwxMjVzMTIuNDgtNjIuMTksMzUuMTUtODQuODVDNjIuODEsMTcuNDgsOTIuOTUsNSwxMjUsNW0wLTVDNTUuOTYsMCwwLDU1Ljk2LDAsMTI1czU1Ljk2LDEyNSwxMjUsMTI1LDEyNS01NS45NiwxMjUtMTI1UzE5NC4wNCwwLDEyNSwwaDBaIi8+CiAgICAgIDwvZz4KICAgICAgPGcgaWQ9InV1aWQtOWUxMWMxMGYtMmQ2Ny00Y2FmLWE4NWMtNjRmOGE4YWJkYWM0IiBkYXRhLW5hbWU9InV1aWQtMWE5M2ZjNzItZGVkMS00MWFmLThlN2MtMDEwMjczYzM1NjY3Ij4KICAgICAgICA8cGF0aCBjbGFzcz0idXVpZC1mNjUxMzgzZS03MjljLTQ1NDMtODJlZC01Y2VhNTY2MjMwN2QiIGQ9Im0xMzUuNjUsNjguNTRjLjExLDAsLjIyLDAsLjMzLjAybC4yMi4wNCw0LjQ4LDEuMDUsMS40My40MmMuMzQuMS42Ny4yLDEsLjMuNjUuMTksMS4yOS4zOCwxLjkzLjU5bDIuODYsMS4wNGM0LjIyLDEuNjcsNy44NCwzLjUsMTEuMTQsNS42Myw3LjEzLDQuNjUsMTMuMSwxMC45LDE3LjI2LDE4LjA4LDQuMTEsNy4wNCw2Ljc1LDE1LjI4LDcuNjMsMjMuODMuNDUsNC40NC40NCw4LjY5LDAsMTIuNjUtLjQ3LDQuMDktMS4yOCw3LjYxLTIuNDksMTAuNzctLjQxLDEuMDctMS4yNSwxLjkyLTIuMzIsMi4zNHMtMi4yNy4zOC0zLjMtLjEyYy0xLjk1LS45NS0yLjgyLTMuMjUtMS45OS01LjI1LDEuMDMtMi40NywxLjgtNS40MSwyLjI3LTguNzMuNDktMy40LjYtNy4xLjMyLTExLS41Ni03LjU0LTIuNjYtMTQuODUtNi4wOS0yMS4xMy0zLjQ2LTYuNC04LjU1LTEyLjA0LTE0LjcxLTE2LjMyLTIuODktMS45OS02LjEyLTMuNzQtOS44Ny01LjM0bC0yLjY3LTEuMDZjLS41LS4xOS0xLjA3LS4zNy0xLjY0LS41NS0uMzQtLjExLS42OS0uMjItMS4wMy0uMzRsLTEuMzItLjQzLTQuMzEtMS4xNGMtMS4xLS4zNS0yLjA3LTEuNTItMS43OS0zLjEuMjYtMS40NywxLjUtMi4yNiwyLjY1LTIuMjZoLjAxWiIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJ1dWlkLWY2NTEzODNlLTcyOWMtNDU0My04MmVkLTVjZWE1NjYyMzA3ZCIgZD0ibTgzLjA5LDE1My42YzEuMzcsMCwyLjY5LjY5LDMuNDYsMS45MiwxLjY0LDIuNjMsMy43Miw1LjA5LDYuMTcsNy4yOSwyLjc4LDIuNTMsNS45NSw0Ljc4LDkuNDIsNi43MSw2Ljg0LDMuOCwxNC41Myw2LjA4LDIyLjIzLDYuNTgsMy45MS4yNSw3LjgyLjA0LDExLjYyLS42NCwzLjc4LS42OCw3LjUyLTEuODYsMTEuMTItMy40OSwzLjQ1LTEuNTcsNi44NS0zLjYsMTAuMTMtNi4wNiwyLjkzLTIuMjcsNS44LTQuOTQsOC43NC04LjE0bC4xOS0uMThjLjg3LS43NiwyLjM4LS45NywzLjU3LjExLDEuMTUsMS4wNCwxLjE0LDIuNTIuNTQsMy40NWwtLjIuMjZjLTMuMDYsMy41Mi02LjA4LDYuNDktOS4yNCw5LjA4LTMuNTcsMi44NC03LjI5LDUuMi0xMS4wOSw3LjA1LTQuMDIsMS45Ni04LjIzLDMuNDEtMTIuNTEsNC4zMS00LjMxLjg5LTguNzUsMS4yNi0xMy4yMiwxLjA5LTguNzUtLjM0LTE3LjU1LTIuNjgtMjUuNDUtNi43OC00LjA1LTIuMS03Ljc4LTQuNjEtMTEuMDgtNy40NC0zLjA3LTIuNjItNS43MS01LjU3LTcuODMtOC43Ni0uNjMtLjk1LS44NC0yLjE0LS41Ny0zLjI1czEtMi4wNiwyLTIuNjFjLjYzLS4zNSwxLjMxLS41MSwxLjk4LS41MWguMDJaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9InV1aWQtZjY1MTM4M2UtNzI5Yy00NTQzLTgyZWQtNWNlYTU2NjIzMDdkIiBkPSJtMTEzLjk0LDY3LjQ3Yy43NiwwLDEuNTEuMjEsMi4xNi42MS45NS41OSwxLjYzLDEuNTUsMS44NiwyLjY0LjQ1LDIuMTYtLjkyLDQuMzItMy4wNSw0LjgyLTYuMDcsMS40Mi0xMi4xMSw0LjA4LTE3LjQ5LDcuNjgtNS45MiwzLjk3LTExLjAyLDkuMDUtMTQuNzUsMTQuNjktMy44Niw1LjgxLTYuNDEsMTIuNTItNy4zOCwxOS40MS0uOTYsNi40Ny0uNTMsMTMuNTcsMS4yNywyMS4xMmwuMDQuMThjLjE4LDEuMTUtLjQzLDIuNTUtMS45NSwzLTEuNDguNDMtMi43Ni0uMzktMy4yNS0xLjQzbC0uMDktLjE5LS4wNS0uMmMtMi4yMy04LjItMi45My0xNi4wMy0yLjA5LTIzLjI3Ljg2LTcuODQsMy41My0xNS41Nyw3LjcyLTIyLjMyLDQuMDQtNi41NSw5LjY2LTEyLjUsMTYuMjMtMTcuMiw2LjEtNC4zNiwxMi43NS03LjUyLDE5Ljc2LTkuNC4zNS0uMDkuNzEtLjE0LDEuMDYtLjE0WiIvPgogICAgICA8L2c+CiAgICAgIDxnIGlkPSJ1dWlkLTJiMTQ1ZDIzLWM0OTItNDcxYS1iMjQ2LWYyZTc1YWYxNTAyMCIgZGF0YS1uYW1lPSJ1dWlkLTk3N2FiZjc5LWI2MjMtNDA1My1hYjdiLWE2MTdkODM0ZDZjZiI+CiAgICAgICAgPHBhdGggY2xhc3M9InV1aWQtZjY1MTM4M2UtNzI5Yy00NTQzLTgyZWQtNWNlYTU2NjIzMDdkIiBkPSJtMTc4Ljk3LDgzLjAyYzEuNTcsMy45Myw0LjU3LDcuMDEsOC40Niw4LjY4LDIuODksMS4yNCw1Ljk1LDEuNTUsOC44NCwxLjA2LDMuMjUsNi42LDUuNjIsMTMuODEsNi45OCwyMS4zOSwyLjMsMTIuNzQsMS42MiwyNS42OC0xLjk3LDM3LjQtMS44NSw2LjA1LTQuNDgsMTEuODItNy44MiwxNy4xMy0zLjMsNS4yNy03LjM3LDEwLjE4LTEyLjA4LDE0LjYxLTQuNDUsNC4xOS05LjYzLDguMDgtMTUuMzQsMTEuNTItNS4zLDMuMDgtMTEuMDgsNS44Mi0xNy42OCw4LjM4bC0uNTIuMi0uNDMuMzVjLTEuNCwxLjEyLTEuOTMsMy4wMS0xLjMyLDQuNzEuNzEsMS45NSwyLjc1LDMuMDgsNC43NCwyLjYxbC4zOC0uMTFjNy4xMS0yLjUsMTMuMzktNS4yNCwxOS4yNS04LjM5LDYuNDQtMy42LDEyLjI4LTcuNzEsMTcuMzctMTIuMTksNS40OC00LjgyLDEwLjI2LTEwLjI0LDE0LjItMTYuMTEsNC4wMi01Ljk2LDcuMjUtMTIuNDcsOS41OS0xOS4zNSw0LjU0LTEzLjMsNS44LTI4LjA3LDMuNjQtNDIuNzItMS4zOC05LjQyLTQuMTQtMTguNDUtOC4xMS0yNi43MS40MS0uNjYuNzctMS4zNSwxLjA4LTIuMDgsMy40NS04LjAzLS4yOC0xNy4zNi04LjMxLTIwLjgxLTEuODgtLjgxLTMuODItMS4yMi01Ljc1LTEuMjgtNi4zMi0uMTktMTIuNDIsMy40My0xNS4wNiw5LjU4LTEuNjcsMy44OS0xLjczLDguMTktLjE2LDEyLjEyaC4wMloiLz4KICAgICAgICA8cGF0aCBjbGFzcz0idXVpZC1mNjUxMzgzZS03MjljLTQ1NDMtODJlZC01Y2VhNTY2MjMwN2QiIGQ9Im01NC43Myw5OC41MWM4Ljc0LjA4LDE1LjkxLTYuOTYsMTUuOTktMTUuNy4wMy0zLjEyLS44Ni02LjA1LTIuNC04LjUyLDMuOTUtNC42Miw4LjQxLTguODUsMTMuMjUtMTIuNTEsOC45MS02Ljc2LDE5LjI1LTExLjU4LDI5LjkzLTEzLjkzLDEwLjctMi4zOCwyMi4xNi0yLjI0LDMzLjE2LjM5LDEwLjA5LDIuMzQsMjAuNDksNy4wNiwzMC45MSwxNC4wMmwuMDkuMDZjMS44MiwxLjE0LDQuMjQuNjMsNS41MS0xLjE1LDEuMjktMS44MS45NC00LjI4LS43OC01LjYxbC0uMS0uMDdjLTExLjAyLTcuOTYtMjIuMjItMTMuNTItMzMuMjYtMTYuNTEtNy4yLTIuMDEtMTQuNjUtMy4wNS0yMi4wNS0zLjEyLTUuMjctLjA1LTEwLjUxLjQtMTUuNjMsMS4zNC0xMi4zNCwyLjI1LTI0LjQzLDcuMzUtMzQuOTQsMTQuNzQtNi4xNyw0LjMyLTExLjg3LDkuNDMtMTYuOSwxNS4xLS44MS0uMTQtMS42NC0uMjEtMi40OS0uMjItOC43NC0uMDgtMTUuOTEsNi45Ni0xNS45OSwxNS43czYuOTYsMTUuOTEsMTUuNywxNS45OVoiLz4KICAgICAgICA8cGF0aCBjbGFzcz0idXVpZC1mNjUxMzgzZS03MjljLTQ1NDMtODJlZC01Y2VhNTY2MjMwN2QiIGQ9Im0xMjkuNjQsMTkxLjk1Yy0xLjI4LS4zNS0yLjU3LS41NC0zLjg3LS41Ny0yLjgzLS4wNi01LjY0LjY0LTguMTcsMi4wOC0yLjU5LDEuNDctNC42NSwzLjYtNi4wNCw2LjE1LTYuNDEtMS4zMi0xMi43OS0zLjQ1LTE4LjkyLTYuMzYtMTAuNzYtNS4xNS0yMC4zNS0xMi41NC0yNy43My0yMS4zNi03LjU2LTguOTktMTIuOTctMTkuODItMTUuNjctMzEuMzQtMi41OS0xMC42OS0yLjg1LTIyLjcxLS43Ny0zNS43MWwuMDQtLjQ2Yy4wNi0yLjA1LTEuNDMtMy44My0zLjQ2LTQuMTYtLjItLjAzLS4zOS0uMDUtLjU4LS4wNS0xLjYyLS4wNC0zLjExLjg1LTMuODMsMi4zM2wtLjIxLjQzLS4wOS40N2MtMi43NSwxNC4wNi0yLjksMjcuMjYtLjQ0LDM5LjIxLDIuNTksMTMuMTEsOC4zMSwyNS42LDE2LjU2LDM2LjEyLDguMDUsMTAuMzMsMTguNjgsMTkuMTIsMzAuNzUsMjUuNDIsNy40OCwzLjg3LDE1LjM3LDYuNzIsMjMuMzUsOC40OC4zLjgzLjY3LDEuNjUsMS4xMiwyLjQ0LDIuMSwzLjY4LDUuNSw2LjMyLDkuNTgsNy40NHM4LjM1LjU4LDEyLjAzLTEuNTFjMy42OC0yLjEsNi4zMi01LjUsNy40NC05LjU4cy41OC04LjM1LTEuNTEtMTIuMDNjLTIuMS0zLjY4LTUuNS02LjMyLTkuNTgtNy40NGgwWiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4='; diff --git a/packages/apps/public/ghost-favicon.ico b/packages/apps/public/ghost-favicon.ico new file mode 100644 index 0000000000..99ff8b8608 Binary files /dev/null and b/packages/apps/public/ghost-favicon.ico differ diff --git a/packages/apps/src/Apps.tsx b/packages/apps/src/Apps.tsx index d4de692efb..37f2666d72 100644 --- a/packages/apps/src/Apps.tsx +++ b/packages/apps/src/Apps.tsx @@ -65,9 +65,9 @@ const StyledDiv = styled.div` } @keyframes greyAnim${n} { - 0% { background: #a6a6a6; } - 50% { background: darkorange; } - 100% { background: #a6a6a6; } + 0% { background: var(--grey-anim-start); } + 50% { background: var(--grey-anim-middle); } + 100% { background: var(--grey-anim-start); } } `).join('')} `; diff --git a/packages/apps/src/Root.tsx b/packages/apps/src/Root.tsx index ecea995dcc..5a8d99f13c 100644 --- a/packages/apps/src/Root.tsx +++ b/packages/apps/src/Root.tsx @@ -1,6 +1,5 @@ // Copyright 2017-2026 @polkadot/apps authors & contributors // SPDX-License-Identifier: Apache-2.0 - import type { ThemeDef } from '@polkadot/react-components/types'; import type { KeyringStore } from '@polkadot/ui-keyring/types'; @@ -15,18 +14,16 @@ import { settings } from '@polkadot/ui-settings'; import BeforeApiInit from './overlays/BeforeInit.js'; import Apps from './Apps.js'; +const CASPER_RPC_URL = 'wss://casper-rpc.ghostchain.io'; + interface Props { isElectron: boolean; store?: KeyringStore; } -function createTheme ({ uiTheme }: { uiTheme: string }): ThemeDef { - const theme = uiTheme === 'dark' - ? 'dark' - : 'light'; - +function createTheme (_settings: { uiTheme: string }): ThemeDef { + const theme = 'dark'; document?.documentElement?.setAttribute('data-theme', theme); - return { theme }; } @@ -44,7 +41,7 @@ function Root ({ isElectron, store }: Props): React.ReactElement { } isElectron={isElectron} store={store} diff --git a/packages/page-settings/src/General.tsx b/packages/page-settings/src/General.tsx index ff975b075c..3962bb0694 100644 --- a/packages/page-settings/src/General.tsx +++ b/packages/page-settings/src/General.tsx @@ -32,7 +32,7 @@ function General ({ className = '' }: Props): React.ReactElement { const [state, setSettings] = useState((): SettingsStruct => { const values = settings.get(); - return { ...values, uiTheme: values.uiTheme === 'dark' ? 'dark' : 'light' }; + return { ...values, uiTheme: 'dark' as SettingsStruct['uiTheme'] }; }); const ledgerConnOptions = useMemo( @@ -73,14 +73,6 @@ function General ({ className = '' }: Props): React.ReactElement { [t] ); - const themeOptions = useMemo( - () => [ - { text: t('Light theme'), value: 'light' }, - { text: t('Dark theme'), value: 'dark' } - ], - [t] - ); - const translateLanguages = useMemo( () => createLanguages(t), [t] @@ -128,14 +120,6 @@ function General ({ className = '' }: Props): React.ReactElement { options={iconOptions} /> -
- -