Skip to content
Open
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: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- added: Support multiple RPC urls for EvmRpc plugins.

## 0.2.4 (2025-11-19)

- fixed: Removed defunct Etherscan V1 servers.
Expand Down
173 changes: 142 additions & 31 deletions src/plugins/allPlugins.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,38 +7,39 @@ import { makeFakePlugin } from './fakePlugin'
function makeNowNode(opts: BlockbookOptions): AddressPlugin {
return makeBlockbook({
...opts,
safeUrl: opts.url,
url: opts.url + '/' + serverConfig.nowNodesApiKey
nowNodesApiKey: serverConfig.nowNodesApiKey
})
}

export const allPlugins = [
// Bitcoin family:
makeNowNode({
pluginId: 'bitcoin',
url: 'wss://btcbook.nownodes.io/wss'
url: 'wss://btcbook.nownodes.io/wss/{nowNodesApiKey}'
}),
makeNowNode({
pluginId: 'bitcoincash',
url: 'wss://bchbook.nownodes.io/wss'
url: 'wss://bchbook.nownodes.io/wss/{nowNodesApiKey}'
}),
makeNowNode({
pluginId: 'dogecoin',
url: 'wss://dogebook.nownodes.io/wss'
url: 'wss://dogebook.nownodes.io/wss/{nowNodesApiKey}'
}),
makeNowNode({
pluginId: 'litecoin',
url: 'wss://ltcbook.nownodes.io/wss'
url: 'wss://ltcbook.nownodes.io/wss/{nowNodesApiKey}'
}),
makeNowNode({
pluginId: 'qtum',
url: 'wss://qtum-blockbook.nownodes.io/wss'
url: 'wss://qtum-blockbook.nownodes.io/wss/{nowNodesApiKey}'
}),

// Ethereum family:
makeEvmRpc({
pluginId: 'abstract',
url: 'https://api.mainnet.abs.xyz',
urls: [
'https://abstract.api.onfinality.io/public' // yellow privacy
],
scanAdapters: [
{
type: 'etherscan-v2',
Expand All @@ -49,11 +50,23 @@ export const allPlugins = [
}),
makeEvmRpc({
pluginId: 'amoy',
url: 'https://polygon-amoy-bor-rpc.publicnode.com'
urls: [
'https://api.zan.top/polygon-amoy', // yellow privacy
'https://polygon-amoy-public.nodies.app', // yellow privacy
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's with all these privacy comments?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are from chainlist.org. They're there to verify sorting by privacy first (green).

'https://polygon-amoy.api.onfinality.io/public' // yellow privacy
]
}),
makeEvmRpc({
pluginId: 'arbitrum',
url: 'https://arbitrum.drpc.org',
urls: [
'https://arbitrum-one-rpc.publicnode.com', // green privacy
'https://arbitrum.meowrpc.com', // green privacy
'https://public-arb-mainnet.fastnode.io', // green privacy
'https://api.zan.top/arb-one', // yellow privacy
'https://arbitrum-one-public.nodies.app', // yellow privacy
'https://arbitrum.api.onfinality.io/public', // yellow privacy
'https://rpc.poolz.finance/arbitrum' // yellow privacy
],
scanAdapters: [
{
type: 'etherscan-v2',
Expand All @@ -64,7 +77,16 @@ export const allPlugins = [
}),
makeEvmRpc({
pluginId: 'avalanche',
url: 'https://avalanche-c-chain-rpc.publicnode.com',
urls: [
'https://0xrpc.io/avax', // green privacy
'https://avalanche-c-chain-rpc.publicnode.com', // green privacy
'https://avax.meowrpc.com', // green privacy
'https://endpoints.omniatech.io/v1/avax/mainnet/public', // green privacy
'https://api.zan.top/avax-mainnet/ext/bc/C/rpc', // yellow privacy
'https://avalanche-public.nodies.app/ext/bc/C/rpc', // yellow privacy
'https://avalanche.api.onfinality.io/public/ext/bc/C/rpc', // yellow privacy
'https://rpc.poolz.finance/avalanche' // yellow privacy
],
scanAdapters: [
{
type: 'etherscan-v2',
Expand All @@ -75,7 +97,15 @@ export const allPlugins = [
}),
makeEvmRpc({
pluginId: 'base',
url: 'https://base-rpc.publicnode.com',
urls: [
'https://base-rpc.publicnode.com', // green privacy
'https://base.llamarpc.com', // green privacy
'https://base.meowrpc.com', // green privacy
'https://api.zan.top/base-mainnet', // yellow privacy
'https://base-public.nodies.app', // yellow privacy
'https://base.api.onfinality.io/public', // yellow privacy
'https://rpc.poolz.finance/base' // yellow privacy
],
scanAdapters: [
{
type: 'etherscan-v2',
Expand All @@ -86,7 +116,22 @@ export const allPlugins = [
}),
makeEvmRpc({
pluginId: 'binancesmartchain',
url: 'https://bsc-rpc.publicnode.com',
urls: [
'https://binance.llamarpc.com', // green privacy
'https://bsc-rpc.publicnode.com', // green privacy
'https://bsc.blockrazor.xyz', // green privacy
'https://bsc.meowrpc.com', // green privacy
'https://endpoints.omniatech.io/v1/bsc/mainnet/public', // green privacy
'https://public-bsc-mainnet.fastnode.io', // green privacy
'https://0.48.club', // yellow privacy
'https://api-bsc-mainnet-full.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c', // yellow privacy
'https://api.zan.top/bsc-mainnet', // yellow privacy
'https://binance-smart-chain-public.nodies.app', // yellow privacy
'https://bnb.api.onfinality.io/public', // yellow privacy
'https://go.getblock.io/cc778cdbdf5c4b028ec9456e0e6c0cf3', // yellow privacy
'https://rpc-bsc.48.club', // yellow privacy
'https://rpc.poolz.finance/bsc' // yellow privacy
],
scanAdapters: [
{
type: 'etherscan-v2',
Expand All @@ -97,14 +142,14 @@ export const allPlugins = [
}),
makeEvmRpc({
pluginId: 'bobevm',
url: 'https://rpc.gobob.xyz',
urls: ['https://rpc.gobob.xyz'], // original URL - all chainlist RPCs failed
scanAdapters: [
{ type: 'etherscan-v1', urls: ['https://explorer.gobob.xyz'] }
]
}),
makeEvmRpc({
pluginId: 'botanix',
url: 'https://rpc.botanixlabs.com',
urls: ['https://rpc.ankr.com/botanix_mainnet'], // green privacy
scanAdapters: [
{
type: 'etherscan-v1',
Expand All @@ -114,7 +159,11 @@ export const allPlugins = [
}),
makeEvmRpc({
pluginId: 'celo',
url: 'https://celo-rpc.publicnode.com',
urls: [
'https://celo-json-rpc.stakely.io', // green privacy
'https://celo.api.onfinality.io/public', // yellow privacy
'https://rpc.ankr.com/celo' // yellow privacy
],
scanAdapters: [
{ type: 'etherscan-v1', urls: ['https://explorer.celo.org/mainnet'] },
{
Expand All @@ -126,7 +175,24 @@ export const allPlugins = [
}),
makeEvmRpc({
pluginId: 'ethereum',
url: 'https://ethereum-rpc.publicnode.com',
urls: [
'https://0xrpc.io/eth', // green privacy
'https://endpoints.omniatech.io/v1/eth/mainnet/public', // green privacy
'https://eth.blockrazor.xyz', // green privacy
'https://eth.llamarpc.com', // green privacy
'https://eth.meowrpc.com', // green privacy
'https://eth.merkle.io', // green privacy
'https://ethereum-json-rpc.stakely.io', // green privacy
'https://ethereum-rpc.publicnode.com', // green privacy
'https://go.getblock.io/aefd01aa907c4805ba3c00a9e5b48c6b', // green privacy
'https://rpc.flashbots.net', // green privacy
'https://rpc.mevblocker.io', // green privacy
'https://rpc.payload.de', // green privacy
'https://api.zan.top/eth-mainnet', // yellow privacy
'https://eth.api.onfinality.io/public', // yellow privacy
'https://ethereum-public.nodies.app', // yellow privacy
'https://rpc.poolz.finance/eth' // yellow privacy
],
scanAdapters: [
{
type: 'etherscan-v2',
Expand All @@ -137,31 +203,44 @@ export const allPlugins = [
}),
makeEvmRpc({
pluginId: 'ethereumclassic',
url: 'https://geth-at.etc-network.info',
urls: [
'https://0xrpc.io/etc', // green privacy
'https://etc.rivet.link', // green privacy
'https://ethereum-classic-mainnet.gateway.tatum.io' // green privacy
],
scanAdapters: [
{ type: 'etherscan-v1', urls: ['https://etc.blockscout.com'] }
]
}),
makeEvmRpc({
pluginId: 'ethereumpow',
url: 'https://mainnet.ethereumpow.org'
urls: ['https://mainnet.ethereumpow.org'] // no chainlist RPCs found, keeping original
}),
makeEvmRpc({
pluginId: 'fantom',
url: 'https://rpc.fantom.network',
urls: [
'https://endpoints.omniatech.io/v1/fantom/mainnet/public', // green privacy
'https://fantom-json-rpc.stakely.io', // green privacy
'https://api.zan.top/ftm-mainnet', // yellow privacy
'https://fantom-public.nodies.app', // yellow privacy
'https://fantom.api.onfinality.io/public' // yellow privacy
],
scanAdapters: [{ type: 'etherscan-v1', urls: ['https://ftmscout.com/'] }]
}),
makeEvmRpc({
pluginId: 'filecoinfevm',
url: 'https://rpc.ankr.com/filecoin'
urls: [
'https://filecoin.chainup.net/rpc/v1', // yellow privacy
'https://rpc.ankr.com/filecoin' // yellow privacy
]
}),
makeEvmRpc({
pluginId: 'filecoinfevmcalibration',
url: 'https://rpc.ankr.com/filecoin_testnet'
urls: ['https://rpc.ankr.com/filecoin_testnet'] // original URL - all chainlist RPCs failed
}),
makeEvmRpc({
pluginId: 'holesky',
url: 'https://ethereum-holesky-rpc.publicnode.com',
urls: ['https://ethereum-holesky-rpc.publicnode.com'], // original URL - all chainlist RPCs failed
scanAdapters: [
{
type: 'etherscan-v2',
Expand All @@ -172,7 +251,7 @@ export const allPlugins = [
}),
makeEvmRpc({
pluginId: 'hyperevm',
url: 'https://rpc.hyperliquid.xyz/evm',
urls: ['https://rpc.hyperliquid.xyz/evm'], // no chainlist RPCs found, keeping original
scanAdapters: [
{
type: 'etherscan-v1',
Expand All @@ -182,7 +261,15 @@ export const allPlugins = [
}),
makeEvmRpc({
pluginId: 'optimism',
url: 'https://optimism-rpc.publicnode.com',
urls: [
'https://0xrpc.io/op', // green privacy
'https://endpoints.omniatech.io/v1/op/mainnet/public', // green privacy
'https://optimism-rpc.publicnode.com', // green privacy
'https://public-op-mainnet.fastnode.io', // green privacy
'https://api.zan.top/opt-mainnet', // yellow privacy
'https://optimism-public.nodies.app', // yellow privacy
'https://optimism.api.onfinality.io/public' // yellow privacy
],
scanAdapters: [
{
type: 'etherscan-v2',
Expand All @@ -193,7 +280,15 @@ export const allPlugins = [
}),
makeEvmRpc({
pluginId: 'polygon',
url: 'https://polygon-bor-rpc.publicnode.com',
urls: [
'https://endpoints.omniatech.io/v1/matic/mainnet/public', // green privacy
'https://polygon-bor-rpc.publicnode.com', // green privacy
'https://polygon.meowrpc.com', // green privacy
'https://api.zan.top/polygon-mainnet', // yellow privacy
'https://polygon-public.nodies.app', // yellow privacy
'https://polygon.api.onfinality.io/public', // yellow privacy
'https://rpc.poolz.finance/polygon' // yellow privacy
],
scanAdapters: [
{
type: 'etherscan-v2',
Expand All @@ -204,21 +299,31 @@ export const allPlugins = [
}),
makeEvmRpc({
pluginId: 'pulsechain',
url: 'https://pulsechain-rpc.publicnode.com',
urls: [
'https://pulsechain-rpc.publicnode.com', // green privacy
'https://rpc.pulsechainrpc.com', // green privacy
'https://rpc.pulsechainstats.com' // yellow privacy
],
scanAdapters: [
{ type: 'etherscan-v1', urls: ['https://api.scan.pulsechain.com'] }
]
}),
makeEvmRpc({
pluginId: 'rsk',
url: 'https://public-node.rsk.co',
urls: ['https://public-node.rsk.co'], // original URL - all chainlist RPCs failed
scanAdapters: [
{ type: 'etherscan-v1', urls: ['https://rootstock.blockscout.com/'] }
]
}),
makeEvmRpc({
pluginId: 'sepolia',
url: 'https://ethereum-sepolia-rpc.publicnode.com',
urls: [
'https://0xrpc.io/sep', // green privacy
'https://ethereum-sepolia-rpc.publicnode.com', // green privacy
'https://api.zan.top/eth-sepolia', // yellow privacy
'https://eth-sepolia.api.onfinality.io/public', // yellow privacy
'https://ethereum-sepolia-public.nodies.app' // yellow privacy
],
scanAdapters: [
{
type: 'etherscan-v2',
Expand All @@ -229,7 +334,7 @@ export const allPlugins = [
}),
makeEvmRpc({
pluginId: 'sonic',
url: 'https://sonic.drpc.org',
urls: ['https://sonic-json-rpc.stakely.io'], // green privacy
scanAdapters: [
{
type: 'etherscan-v2',
Expand All @@ -240,7 +345,13 @@ export const allPlugins = [
}),
makeEvmRpc({
pluginId: 'zksync',
url: 'https://mainnet.era.zksync.io',
urls: [
'https://rpc.ankr.com/zksync_era', // green privacy
'https://zksync.meowrpc.com', // green privacy
'https://api.zan.top/zksync-mainnet', // yellow privacy
'https://go.getblock.io/f76c09905def4618a34946bf71851542', // yellow privacy
'https://zksync.api.onfinality.io/public' // yellow privacy
],
scanAdapters: [
{
type: 'etherscan-v1',
Expand Down
Loading
Loading