Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
| ---------- | ----------- | ------ | ------- |
Expand Down
14 changes: 9 additions & 5 deletions docs/ADDING_COSMOS_CHAIN.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions scripts/sync-chain-registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
9 changes: 7 additions & 2 deletions src/lib/networks/cosmos-endpoints.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 = [
Expand Down Expand Up @@ -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(
Expand Down
12 changes: 9 additions & 3 deletions src/lib/networks/cosmos-registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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'
Expand Down
4 changes: 2 additions & 2 deletions src/lib/networks/supported-catalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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':
Expand Down
2 changes: 1 addition & 1 deletion src/web/main.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ const WebAppFrame: React.FC<{ children: React.ReactNode }> = ({ children }) => (
<Text fontSize="xs" color="gray.400">
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.
</Text>
</Box>
</Flex>
Expand Down
34 changes: 31 additions & 3 deletions tests/lib/networks/cosmos-endpoints.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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([
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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',
]);
});

Expand Down
6 changes: 6 additions & 0 deletions tests/lib/networks/supported-catalog.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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\)/
);
Expand Down
2 changes: 2 additions & 0 deletions tests/popup/SupportedNetworksPanel.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
Loading