diff --git a/README.md b/README.md index f26c79c..a6a2705 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Available as: ### Cosmos SDK Chains -Cosmos networks are sourced from the [Cosmos Chain Registry](https://github.com/cosmos/chain-registry). Advertised Cosmos networks load balances through current public RPC and LCD hosts (CryptoCrew, Lavender.Five, Polkachu, PublicNode, and official chain endpoints). Retired leftover Injective Polkachu hops (timeout) were removed. Earlier leftover Kujira and Stargaze hops, Autostake 404 hops, Evmos, official Neutron, ezstaking.dev, itastakers.com, and setten.io hops stay denylisted. Explorer links use current hosts (Mintscan, ATOMScan, BeeZee Explorer). Retired leftover explorers such as ezstaking.app, finder.kujira.app, and explorers.guru were removed. +Cosmos networks are sourced from the [Cosmos Chain Registry](https://github.com/cosmos/chain-registry). Advertised Cosmos networks load balances through current public RPC and LCD hosts (CryptoCrew, Lavender.Five, Polkachu, PublicNode, and official chain endpoints). Retired leftover dYdX Polkachu dao hosts (dydx-dao-rpc.polkachu.com / dydx-dao-api.polkachu.com) were replaced with current dydx-rpc.polkachu.com hops. Earlier leftover Injective Polkachu hops (timeout), leftover Kujira and Stargaze hops, Autostake 404 hops, Evmos, official Neutron, ezstaking.dev, itastakers.com, and setten.io hops stay denylisted. Explorer links use current hosts (Mintscan, ATOMScan, BeeZee Explorer). Retired leftover explorers such as ezstaking.app, finder.kujira.app, and explorers.guru were removed. | Network | Chain ID | Symbol | Status | | ---------- | ----------- | ------ | ------- | diff --git a/docs/ADDING_COSMOS_CHAIN.md b/docs/ADDING_COSMOS_CHAIN.md index bc10f5f..ef12e10 100644 --- a/docs/ADDING_COSMOS_CHAIN.md +++ b/docs/ADDING_COSMOS_CHAIN.md @@ -137,10 +137,11 @@ The dynamic client: - Caches results in `browser.storage.local` for 24 hours - Works for any chain in the registry - Filters out retired public hosts (QuickApi, Lava public RPC, Whispernode, - Notional cosmosia, leftover Injective Polkachu RPC/LCD hops, leftover - Kujira / Stargaze RPC/LCD hops, leftover Evmos RPC/LCD hops, leftover - official Neutron RPC/LCD hops, leftover ezstaking.dev / itastakers / - setten.io hops, and others). See `src/lib/networks/cosmos-endpoints.ts`. + Notional cosmosia, leftover dYdX Polkachu dao hosts, leftover Injective + Polkachu RPC/LCD hops, leftover Kujira / Stargaze RPC/LCD hops, leftover + Evmos RPC/LCD hops, leftover official Neutron RPC/LCD hops, leftover + ezstaking.dev / itastakers / setten.io hops, and others). See + `src/lib/networks/cosmos-endpoints.ts`. ## Method 3: Manual Configuration (Legacy) @@ -249,7 +250,10 @@ The wallet automatically handles endpoint failover: The sync script and runtime client both drop retired public hosts listed in `src/lib/networks/cosmos-endpoints.ts` so a later registry pull does not reintroduce QuickApi, Lava public RPC, Whispernode, Notional cosmosia, -leftover Injective Polkachu hops (`injective-rpc.polkachu.com` / +leftover dYdX Polkachu dao hosts (`dydx-dao-rpc.polkachu.com` / +`dydx-dao-api.polkachu.com`; official registry now lists +`dydx-rpc.polkachu.com` / `dydx-api.polkachu.com`), leftover Injective +Polkachu hops (`injective-rpc.polkachu.com` / `injective-api.polkachu.com` timeout), leftover Kujira hops (`lavenderfive.com:443/kujira` 503; Kleomedes 525; Polkachu DNS-dead), leftover Stargaze hops (chain-registry kill; diff --git a/scripts/sync-chain-registry.ts b/scripts/sync-chain-registry.ts index 88e401c..8ebb1c4 100644 --- a/scripts/sync-chain-registry.ts +++ b/scripts/sync-chain-registry.ts @@ -79,6 +79,8 @@ const DEPRECATED_COSMOS_ENDPOINT_HOSTS = [ 'theamsolutions.info', 'injective-rpc.polkachu.com', 'injective-api.polkachu.com', + 'dydx-dao-rpc.polkachu.com', + 'dydx-dao-api.polkachu.com', ] as const; // Default chains to include in the bundle (most popular by TVL/usage) diff --git a/src/lib/networks/cosmos-endpoints.ts b/src/lib/networks/cosmos-endpoints.ts index ea72e24..f0ca9bc 100644 --- a/src/lib/networks/cosmos-endpoints.ts +++ b/src/lib/networks/cosmos-endpoints.ts @@ -15,8 +15,11 @@ * Lavender.Five now 503s both, Stargaze is killed (Kleomedes empty 200, * official/Polkachu DNS-dead), and Autostake public hops 404. Leftover * Injective Polkachu hops then lingered: injective-rpc.polkachu.com and - * injective-api.polkachu.com now time out. Keep those hosts out of - * advertised lists so the first hop can succeed. + * injective-api.polkachu.com now time out. Leftover dYdX Polkachu dao + * hosts then lingered: dydx-dao-rpc.polkachu.com and + * dydx-dao-api.polkachu.com after the official registry moved to + * dydx-rpc.polkachu.com / dydx-api.polkachu.com. Keep those hosts out + * of advertised lists so the first hop can succeed. */ export const DEPRECATED_COSMOS_ENDPOINT_HOSTS = [ @@ -73,6 +76,8 @@ export const DEPRECATED_COSMOS_ENDPOINT_HOSTS = [ 'theamsolutions.info', 'injective-rpc.polkachu.com', 'injective-api.polkachu.com', + 'dydx-dao-rpc.polkachu.com', + 'dydx-dao-api.polkachu.com', ] as const; export function cosmosEndpointHaystack( diff --git a/src/lib/networks/cosmos-registry.ts b/src/lib/networks/cosmos-registry.ts index f970bd4..513a2d8 100644 --- a/src/lib/networks/cosmos-registry.ts +++ b/src/lib/networks/cosmos-registry.ts @@ -26,6 +26,10 @@ * Leftover Injective Polkachu hops refreshed 2026-09-20 after * injective-rpc.polkachu.com and injective-api.polkachu.com started * timing out. Highstakes, Lavender.Five, and PublicNode remain public. + * Leftover dYdX Polkachu dao hosts refreshed 2026-09-20 after the + * official registry moved to dydx-rpc.polkachu.com / dydx-api.polkachu.com + * (old dydx-dao-* names are leftover). Kingnodes, Lavender.Five, and + * PublicNode remain public. */ import { CosmosNetworkConfig } from './types'; @@ -159,15 +163,17 @@ export const COSMOS_REGISTRY_CHAINS: CosmosRegistryConfig[] = [ symbol: 'ADYDX', decimals: 6, coinType: 118, - // dydx-mainnet-rpc.autostake.com now 404s. PublicNode remains public. + // dydx-mainnet-rpc.autostake.com now 404s. Leftover dydx-dao-* + // Polkachu hostnames were dropped after the official registry + // moved to dydx-rpc.polkachu.com / dydx-api.polkachu.com. rpc: [ 'https://dydx-rpc.kingnodes.com:443', - 'https://dydx-dao-rpc.polkachu.com', + 'https://dydx-rpc.polkachu.com:443', 'https://rpc.lavenderfive.com:443/dydx', 'https://dydx-rpc.publicnode.com:443' ], rest: [ - 'https://dydx-dao-api.polkachu.com', + 'https://dydx-api.polkachu.com', 'https://dydx-rest.kingnodes.com:443', 'https://rest.lavenderfive.com:443/dydx', 'https://dydx-rest.publicnode.com' diff --git a/src/lib/networks/supported-catalog.ts b/src/lib/networks/supported-catalog.ts index b6708c6..05e61d6 100644 --- a/src/lib/networks/supported-catalog.ts +++ b/src/lib/networks/supported-catalog.ts @@ -4,7 +4,7 @@ * The live registry can include additional auto-synced chains. This list is the * curated set shown in Settings and kept in sync with README.md. * - * Last reviewed: 2026-09-20 (leftover Sepolia 1RPC public hop refresh). + * Last reviewed: 2026-09-20 (leftover dYdX Polkachu dao host refresh). */ export { DEPRECATED_SVM_ENDPOINT_HOSTS } from './svm-endpoints'; @@ -66,7 +66,7 @@ export function getSupportedNetworkFamilyLabel(family: SupportedNetworkFamily): export function getSupportedNetworkFamilySummary(family: SupportedNetworkFamily): string { switch (family) { case 'cosmos': - return 'Staking, IBC transfers, and Cosmos assets load through current public RPC and LCD hosts. Retired leftover Injective Polkachu hops (timeout) were removed. Earlier leftover Kujira and Stargaze hops, Autostake 404 hops, Evmos, official Neutron, ezstaking.dev, itastakers.com, and setten.io hops stay denylisted. Explorer links use current hosts (Mintscan, ATOMScan, BeeZee Explorer); retired leftover explorers such as ezstaking.app, finder.kujira.app, and explorers.guru were removed.'; + return 'Staking, IBC transfers, and Cosmos assets load through current public RPC and LCD hosts. Retired leftover dYdX Polkachu dao hosts (dydx-dao-rpc.polkachu.com / dydx-dao-api.polkachu.com) were replaced with current dydx-rpc.polkachu.com hops. Earlier leftover Injective Polkachu hops (timeout), leftover Kujira and Stargaze hops, Autostake 404 hops, Evmos, official Neutron, ezstaking.dev, itastakers.com, and setten.io hops stay denylisted. Explorer links use current hosts (Mintscan, ATOMScan, BeeZee Explorer); retired leftover explorers such as ezstaking.app, finder.kujira.app, and explorers.guru were removed.'; case 'utxo': return 'Bitcoin and Litecoin can load balances today. Other Bitcoin-like networks still show your address. Explorer links use current hosts (CipherScan, Ravencoin Explorer, OKLink, Flux Blockbook); retired sites such as dogechain.info, explorer.runonflux.io, and explorer.nosocoin.com were removed.'; case 'evm': diff --git a/src/web/main.tsx b/src/web/main.tsx index 2a6cf9d..d143a45 100644 --- a/src/web/main.tsx +++ b/src/web/main.tsx @@ -111,7 +111,7 @@ const WebAppFrame: React.FC<{ children: React.ReactNode }> = ({ children }) => ( Vidulum is a cross-chain wallet for Cosmos, Bitcoin-like, EVM, and Solana networks. Use Vidulum for IBC transfers, multi-chain swaps, and asset management across supported - networks. Leftover Sepolia 1RPC hosts last checked in September 2026. + networks. Leftover dYdX Polkachu dao hosts last checked in September 2026. diff --git a/tests/lib/networks/cosmos-endpoints.test.ts b/tests/lib/networks/cosmos-endpoints.test.ts index 5505211..0bf6a06 100644 --- a/tests/lib/networks/cosmos-endpoints.test.ts +++ b/tests/lib/networks/cosmos-endpoints.test.ts @@ -11,7 +11,9 @@ * (DNS-dead) hops. Leftover Kujira and Stargaze hops then lingered * (Lavender.Five 503; Stargaze killed / Kleomedes empty 200; Autostake * 404). Leftover Injective Polkachu hops then lingered (RPC/LCD - * timeout). This keeps those lists honest. + * timeout). Leftover dYdX Polkachu dao hosts then lingered after the + * official registry moved to dydx-rpc.polkachu.com. This keeps those + * lists honest. */ import { @@ -306,18 +308,37 @@ describe('Cosmos endpoint freshness', () => { expect(dydx?.rpc.concat(dydx?.rest ?? []).join(' ')).not.toContain('autostake.com'); expect(dydx?.rpc).toEqual([ 'https://dydx-rpc.kingnodes.com:443', - 'https://dydx-dao-rpc.polkachu.com', + 'https://dydx-rpc.polkachu.com:443', 'https://rpc.lavenderfive.com:443/dydx', 'https://dydx-rpc.publicnode.com:443', ]); expect(dydx?.rest).toEqual([ - 'https://dydx-dao-api.polkachu.com', + 'https://dydx-api.polkachu.com', 'https://dydx-rest.kingnodes.com:443', 'https://rest.lavenderfive.com:443/dydx', 'https://dydx-rest.publicnode.com', ]); }); + it('replaces leftover dYdX Polkachu dao hosts with current Polkachu hops', () => { + const dydx = getChainById('dydx-mainnet-1'); + expect(dydx?.rpc).toEqual([ + 'https://dydx-rpc.kingnodes.com:443', + 'https://dydx-rpc.polkachu.com:443', + 'https://rpc.lavenderfive.com:443/dydx', + 'https://dydx-rpc.publicnode.com:443', + ]); + expect(dydx?.rest).toEqual([ + 'https://dydx-api.polkachu.com', + 'https://dydx-rest.kingnodes.com:443', + 'https://rest.lavenderfive.com:443/dydx', + 'https://dydx-rest.publicnode.com', + ]); + expect(dydx?.rpc.concat(dydx?.rest ?? []).join(' ')).not.toMatch( + /dydx-dao-rpc\.polkachu\.com|dydx-dao-api\.polkachu\.com/ + ); + }); + it('replaces leftover official Neutron RPC/LCD hops with current public hops', () => { const neutron = getChainById('neutron-1'); expect(neutron?.rpc).toEqual([ @@ -448,6 +469,10 @@ describe('Cosmos endpoint freshness', () => { expect(usesDeprecatedCosmosHost('https://kujira-rpc.theamsolutions.info')).toBe(true); expect(usesDeprecatedCosmosHost('https://injective-rpc.polkachu.com')).toBe(true); expect(usesDeprecatedCosmosHost('https://injective-api.polkachu.com')).toBe(true); + expect(usesDeprecatedCosmosHost('https://dydx-dao-rpc.polkachu.com')).toBe(true); + expect(usesDeprecatedCosmosHost('https://dydx-dao-api.polkachu.com')).toBe(true); + expect(usesDeprecatedCosmosHost('https://dydx-rpc.polkachu.com:443')).toBe(false); + expect(usesDeprecatedCosmosHost('https://dydx-api.polkachu.com')).toBe(false); expect(usesDeprecatedCosmosHost('https://noble-rpc.polkachu.com')).toBe(false); expect(usesDeprecatedCosmosHost('https://rpc.lavenderfive.com:443/neutron')).toBe(false); expect(usesDeprecatedCosmosHost('https://juno-rpc.kleomedes.network')).toBe(false); @@ -480,10 +505,13 @@ describe('Cosmos endpoint freshness', () => { 'https://stargaze-rpc.kleomedes.network', 'https://kujira-rpc.theamsolutions.info', 'https://injective-rpc.polkachu.com', + 'https://dydx-dao-rpc.polkachu.com', + 'https://dydx-rpc.polkachu.com:443', ]) ).toEqual([ 'https://rpc.lavenderfive.com:443/cosmoshub', 'https://cosmos-rpc.polkachu.com', + 'https://dydx-rpc.polkachu.com:443', ]); }); diff --git a/tests/lib/networks/supported-catalog.test.ts b/tests/lib/networks/supported-catalog.test.ts index 05e84db..b58a80e 100644 --- a/tests/lib/networks/supported-catalog.test.ts +++ b/tests/lib/networks/supported-catalog.test.ts @@ -67,6 +67,12 @@ describe('Supported network catalog', () => { expect(getSupportedNetworkFamilySummary('cosmos')).toMatch( /current public RPC and LCD/ ); + expect(getSupportedNetworkFamilySummary('cosmos')).toMatch( + /leftover dYdX Polkachu dao hosts/ + ); + expect(getSupportedNetworkFamilySummary('cosmos')).toMatch( + /dydx-dao-rpc\.polkachu\.com/ + ); expect(getSupportedNetworkFamilySummary('cosmos')).toMatch( /leftover Injective Polkachu hops \(timeout\)/ ); diff --git a/tests/popup/SupportedNetworksPanel.test.tsx b/tests/popup/SupportedNetworksPanel.test.tsx index ccc13a1..0de1a2b 100644 --- a/tests/popup/SupportedNetworksPanel.test.tsx +++ b/tests/popup/SupportedNetworksPanel.test.tsx @@ -38,6 +38,8 @@ describe('SupportedNetworksPanel', () => { expect(screen.getByText(/BeeZee, Osmosis, AtomOne, Cosmos Hub/)).toBeInTheDocument(); expect(screen.getByText(/current public RPC and LCD/)).toBeInTheDocument(); + expect(screen.getByText(/leftover dYdX Polkachu dao hosts/)).toBeInTheDocument(); + expect(screen.getByText(/dydx-dao-rpc\.polkachu\.com/)).toBeInTheDocument(); expect(screen.getByText(/leftover Injective Polkachu hops/)).toBeInTheDocument(); expect(screen.getByText(/Kujira and Stargaze hops/)).toBeInTheDocument(); expect(