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 @@ -53,7 +53,7 @@ Bitcoin and Litecoin load balances through Esplora APIs (Blockstream, Mempool.sp
| Base | base-mainnet | ETH | 8453 | Enabled |
| Arbitrum One | arb1-mainnet | ETH | 42161 | Enabled |

Advertised EVM networks load balances through current public RPCs (PublicNode, DRPC, and official chain endpoints). Retired leftover hosts such as 1rpc.io/eth were removed. Earlier leftover moonriver.unitedbloc.com, Sepolia.org RPCs, zkevm.polygonscan.com, Cloudflare Ethereum, Ankr public RPC, and BlastAPI hops stay denylisted.
Advertised EVM networks load balances through current public RPCs (PublicNode, DRPC, and official chain endpoints). Retired leftover hosts such as 1rpc.io/sepolia were removed. Earlier leftover 1rpc.io/eth, moonriver.unitedbloc.com, Sepolia.org RPCs, zkevm.polygonscan.com, Cloudflare Ethereum, Ankr public RPC, and BlastAPI hops stay denylisted.

### SVM Chains (Solana-like)

Expand Down
7 changes: 5 additions & 2 deletions docs/ADDING_EVM_CHAIN.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,8 @@ The runtime client:
- Filters out deprecated chains, invalid RPC endpoints, and retired public hosts
(MyCrypto, MaticVigil, Cloudflare Ethereum, Ankr public RPC, BlastAPI, leftover
Sepolia.org RPCs, DNS-dead zkevm.polygonscan.com, leftover
moonriver.unitedbloc.com, leftover discontinued 1rpc.io/eth, and old
moonriver.unitedbloc.com, leftover discontinued 1rpc.io/eth, leftover
1rpc.io/sepolia (old public path; use public.1rpc.io/sepolia), and old
Polygon/Fantom/Moonbeam gateways). See `src/lib/networks/evm-endpoints.ts`.

## Method 3: Manual Configuration (Legacy)
Expand Down Expand Up @@ -220,7 +221,9 @@ reintroduce MyCrypto, MaticVigil, Cloudflare Ethereum, Ankr public RPC,
BlastAPI, leftover Sepolia.org RPCs (`rpc.sepolia.org` 404, `rpc2.sepolia.org`
timeout), DNS-dead `zkevm.polygonscan.com`, leftover
`moonriver.unitedbloc.com` (DNS-dead), leftover discontinued
`1rpc.io/eth` (HTTP 410), or the old Polygon/Fantom/Moonbeam
`1rpc.io/eth` (HTTP 410), leftover `1rpc.io/sepolia` (old public
path; intermittent 403 after 1RPC moved public hops to
`public.1rpc.io`), or the old Polygon/Fantom/Moonbeam
gateways.

### Pre-bundled Chains
Expand Down
1 change: 1 addition & 0 deletions scripts/sync-evm-registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ const DEPRECATED_EVM_ENDPOINT_HOSTS = [
'rpc2.sepolia.org',
'zkevm.polygonscan.com',
'1rpc.io/eth',
'https://1rpc.io/sepolia',
] as const;

const CHAINS_JSON_URL = 'https://chainid.network/chains.json';
Expand Down
7 changes: 5 additions & 2 deletions src/lib/networks/evm-endpoints.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@
* Leftover Moonriver UnitedBloc then lingered after Moonbeam UnitedBloc
* was denylisted: moonriver.unitedbloc.com no longer resolves. Leftover
* 1rpc.io/eth then lingered after 1RPC discontinued that Ethereum hop
* (HTTP 410; other 1RPC paths such as Sepolia still answer). Keep
* those hosts out of advertised lists so the first hop can succeed.
* (HTTP 410). Leftover 1rpc.io/sepolia then lingered after 1RPC moved
* public hops to public.1rpc.io (old 1rpc.io/sepolia now 403s
* intermittently; public.1rpc.io/sepolia stays public). Keep those
* hosts out of advertised lists so the first hop can succeed.
*/

export const DEPRECATED_EVM_ENDPOINT_HOSTS = [
Expand Down Expand Up @@ -41,6 +43,7 @@ export const DEPRECATED_EVM_ENDPOINT_HOSTS = [
'rpc2.sepolia.org',
'zkevm.polygonscan.com',
'1rpc.io/eth',
'https://1rpc.io/sepolia',
] as const;

export function evmEndpointHaystack(rpcUrls: readonly string[], explorerUrl?: string): string {
Expand Down
8 changes: 6 additions & 2 deletions src/lib/networks/evm-registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
* moonriver.unitedbloc.com stopped resolving.
* Leftover 1rpc.io/eth hop refreshed 2026-09-20 after 1RPC
* discontinued that Ethereum endpoint (HTTP 410).
* Leftover 1rpc.io/sepolia hop refreshed 2026-09-20 after 1RPC
* moved public hops to public.1rpc.io (old path 403s intermittently).
*/

import { EvmNetworkConfig } from './types';
Expand Down Expand Up @@ -665,11 +667,13 @@ export const EVM_REGISTRY_CHAINS: EvmRegistryConfig[] = [
chainId: 11155111,
rpcUrls: [
// sepolia.org discontinued its RPCs (rpc.sepolia.org 404,
// rpc2.sepolia.org times out). PublicNode, Tenderly, 1RPC, and
// rpc2.sepolia.org times out). Leftover 1rpc.io/sepolia is the
// old public path (intermittent 403 after 1RPC moved public hops
// to public.1rpc.io). PublicNode, Tenderly, public.1rpc.io, and
// EthPandaOps remain public.
'https://ethereum-sepolia-rpc.publicnode.com',
'https://sepolia.gateway.tenderly.co',
'https://1rpc.io/sepolia',
'https://public.1rpc.io/sepolia',
'https://rpc.sepolia.ethpandaops.io'
],
nativeCurrency: {
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 Ethereum 1RPC / Injective Polkachu refresh).
* Last reviewed: 2026-09-20 (leftover Sepolia 1RPC public hop refresh).
*/

export { DEPRECATED_SVM_ENDPOINT_HOSTS } from './svm-endpoints';
Expand Down Expand Up @@ -70,7 +70,7 @@ export function getSupportedNetworkFamilySummary(family: SupportedNetworkFamily)
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':
return 'Ethereum and compatible networks load balances through current public RPCs (PublicNode, DRPC, and official chain endpoints). Retired leftover hosts such as 1rpc.io/eth were removed. Earlier leftover moonriver.unitedbloc.com, Sepolia.org RPCs, zkevm.polygonscan.com, Cloudflare Ethereum, Ankr public RPC, and BlastAPI hops stay denylisted.';
return 'Ethereum and compatible networks load balances through current public RPCs (PublicNode, DRPC, and official chain endpoints). Retired leftover hosts such as 1rpc.io/sepolia were removed. Earlier leftover 1rpc.io/eth, moonriver.unitedbloc.com, Sepolia.org RPCs, zkevm.polygonscan.com, Cloudflare Ethereum, Ankr public RPC, and BlastAPI hops stay denylisted.';
case 'svm':
return 'Solana mainnet balances load through current public RPCs (official Solana and PublicNode). Retired or key-gated hosts such as Ankr public RPC and Solana dRPC were removed.';
default: {
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 Ethereum 1RPC and Injective Polkachu hosts last checked in September 2026.
networks. Leftover Sepolia 1RPC hosts last checked in September 2026.
</Text>
</Box>
</Flex>
Expand Down
19 changes: 14 additions & 5 deletions tests/lib/networks/evm-endpoints.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@
* (404 / timeout) and the sunset zkEVM explorer still sat in side-chain
* lists. Leftover Moonriver UnitedBloc then lingered after Moonbeam
* UnitedBloc was denylisted. Leftover 1rpc.io/eth then lingered after
* 1RPC discontinued that Ethereum hop (HTTP 410). This keeps EVM RPC
* and explorer lists honest.
* 1RPC discontinued that Ethereum hop (HTTP 410). Leftover
* 1rpc.io/sepolia then lingered after 1RPC moved public hops to
* public.1rpc.io. This keeps EVM RPC and explorer lists honest.
*/

import {
Expand Down Expand Up @@ -129,10 +130,11 @@ describe('EVM endpoint freshness', () => {
expect(sepolia?.rpcUrls).toEqual([
'https://ethereum-sepolia-rpc.publicnode.com',
'https://sepolia.gateway.tenderly.co',
'https://1rpc.io/sepolia',
'https://public.1rpc.io/sepolia',
'https://rpc.sepolia.ethpandaops.io',
]);
expect(sepolia?.rpcUrls.join(' ')).not.toMatch(/rpc\.sepolia\.org|rpc2\.sepolia\.org/);
expect(sepolia?.rpcUrls.join(' ')).not.toContain('https://1rpc.io/sepolia');
expect(sepolia?.explorerUrl).toBe('https://sepolia.etherscan.io');
});

Expand Down Expand Up @@ -176,7 +178,8 @@ describe('EVM endpoint freshness', () => {
expect(usesDeprecatedEvmHost('https://zkevm.polygonscan.com')).toBe(true);
expect(usesDeprecatedEvmHost('https://moonriver.unitedbloc.com')).toBe(true);
expect(usesDeprecatedEvmHost('https://1rpc.io/eth')).toBe(true);
expect(usesDeprecatedEvmHost('https://1rpc.io/sepolia')).toBe(false);
expect(usesDeprecatedEvmHost('https://1rpc.io/sepolia')).toBe(true);
expect(usesDeprecatedEvmHost('https://public.1rpc.io/sepolia')).toBe(false);
expect(usesDeprecatedEvmHost('https://ethereum-rpc.publicnode.com')).toBe(false);
expect(usesDeprecatedEvmHost('https://rpc.sepolia.ethpandaops.io')).toBe(false);

Expand All @@ -191,9 +194,15 @@ describe('EVM endpoint freshness', () => {
'https://rpc.ankr.com/eth',
'https://rpc.sepolia.org',
'https://1rpc.io/eth',
'https://1rpc.io/sepolia',
'https://eth.drpc.org',
'https://public.1rpc.io/sepolia',
])
).toEqual(['https://ethereum-rpc.publicnode.com', 'https://eth.drpc.org']);
).toEqual([
'https://ethereum-rpc.publicnode.com',
'https://eth.drpc.org',
'https://public.1rpc.io/sepolia',
]);

expect(
selectPublicEvmExplorer([
Expand Down
4 changes: 2 additions & 2 deletions tests/lib/networks/supported-catalog.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@ describe('Supported network catalog', () => {
/current public RPCs \(PublicNode, DRPC/
);
expect(getSupportedNetworkFamilySummary('evm')).toMatch(
/1rpc\.io\/eth/
/1rpc\.io\/sepolia/
);
expect(getSupportedNetworkFamilySummary('evm')).toMatch(
/moonriver\.unitedbloc\.com, Sepolia\.org RPCs, zkevm\.polygonscan\.com/
/1rpc\.io\/eth, moonriver\.unitedbloc\.com, Sepolia\.org RPCs, zkevm\.polygonscan\.com/
);
expect(getSupportedNetworkFamilySummary('cosmos')).toMatch(
/current public RPC and LCD/
Expand Down
4 changes: 2 additions & 2 deletions tests/popup/SupportedNetworksPanel.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ describe('SupportedNetworksPanel', () => {
expect(screen.getByText(/Ethereum, OP Mainnet, BNB Chain, Polygon, Base, Arbitrum One/)).toBeInTheDocument();
expect(screen.getByText(/Ethereum and compatible networks load balances through current public RPCs/)).toBeInTheDocument();
expect(screen.getByText(/PublicNode, DRPC, and official chain endpoints/)).toBeInTheDocument();
expect(screen.getByText(/1rpc\.io\/eth/)).toBeInTheDocument();
expect(screen.getByText(/moonriver\.unitedbloc\.com, Sepolia\.org RPCs, zkevm\.polygonscan\.com/)).toBeInTheDocument();
expect(screen.getByText(/1rpc\.io\/sepolia/)).toBeInTheDocument();
expect(screen.getByText(/1rpc\.io\/eth, moonriver\.unitedbloc\.com, Sepolia\.org RPCs, zkevm\.polygonscan\.com/)).toBeInTheDocument();
expect(screen.getByText(/^Solana$/)).toBeInTheDocument();
expect(screen.getByText(/official Solana and PublicNode/)).toBeInTheDocument();
expect(screen.getByText(/Ankr public RPC and Solana dRPC/)).toBeInTheDocument();
Expand Down
Loading