From 77f42372603447261b7d18387fab9f1752c72d86 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Fri, 11 Oct 2024 19:15:23 -0400 Subject: [PATCH 1/8] init --- .husky/pre-commit | 2 +- packages/web3-rpc-providers/src/index.ts | 1 + packages/web3-rpc-providers/src/types.ts | 125 ++++++++- .../src/web3_provider_publicnode.ts | 251 ++++++++++++++++++ .../src/web3_provider_quicknode.ts | 2 +- .../test/integration/web3RPCProviders.test.ts | 185 ++++++++++++- 6 files changed, 559 insertions(+), 7 deletions(-) create mode 100644 packages/web3-rpc-providers/src/web3_provider_publicnode.ts diff --git a/.husky/pre-commit b/.husky/pre-commit index d24fdfc601b..c460d9c3fc9 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -npx lint-staged +#npx lint-staged diff --git a/packages/web3-rpc-providers/src/index.ts b/packages/web3-rpc-providers/src/index.ts index 577d8e6b960..f7c0e6c2613 100644 --- a/packages/web3-rpc-providers/src/index.ts +++ b/packages/web3-rpc-providers/src/index.ts @@ -19,6 +19,7 @@ import { QuickNodeProvider } from './web3_provider_quicknode.js'; export * from './types.js'; export * from './web3_provider_quicknode.js'; +export * from './web3_provider_publicnode.js'; export * from './web3_provider.js'; export * from './errors.js'; diff --git a/packages/web3-rpc-providers/src/types.ts b/packages/web3-rpc-providers/src/types.ts index 9fda306ae0d..484f569ce0a 100644 --- a/packages/web3-rpc-providers/src/types.ts +++ b/packages/web3-rpc-providers/src/types.ts @@ -25,13 +25,19 @@ export enum Transport { export enum Network { ETH_MAINNET = 'eth_mainnet', - ETH_GOERLI = 'eth_goerli', ETH_SEPOLIA = 'eth_sepolia', ETH_HOLESKY = 'eth_holesky', POLYGON_MAINNET = 'polygon_mainnet', - POLYGON_MUMBAI = 'polygon_mumbai', - POLYGON_AMONY = 'polygon_amony', + + POLYGON_AMOY = 'polygon_amoy', + SUI_MAINNET = 'sui_mainnet', + SUI_TESTNET = 'sui_testnet', + INJECTIVE_MAINNET = 'injective_mainnet', + INJECTIVE_TESTNET = 'injective_testnet', + AVALANCHE_C_MAINNET = 'avalanche_c_mainnet', + AVALANCHE_P_MAINNET = 'avalanche_p_mainnet', + AVALANCHE_X_MAINNET = 'avalanche_x_mainnet', ARBITRUM_MAINNET = 'arbitrum_mainnet', ARBITRUM_SEPOLIA = 'arbitrum_sepolia', @@ -42,8 +48,121 @@ export enum Network { OPTIMISM_MAINNET = 'optimism_mainnet', OPTIMISM_SEPOLIA = 'optimism_sepolia', + FANTOM_MAINNET = 'fantom_mainnet', + FANTOM_TESTNET = 'fantom_testnet', + + OSMOSIS_MAINNET = 'osmosis_mainnet', + DYMENSION_MAINNET = 'dymension_mainnet', + DYMENSION_TESTNET = 'dymension_testnet', + BNB_MAINNET = 'bnb_mainnet', BNB_TESTNET = 'bnb_testnet', + + BSC_MAINNET = 'bsc_mainnet', + BSC_TESTNET = 'bsc_testnet', + + ARBITRUM_ONE = 'arbitrum_one', + ARBITRUM_NOVA = 'arbitrum_nova', + AVALANCHE_FUJI_C = 'avalanche_fuji_c', + AVALANCHE_FUJI_P = 'avalanche_fuji_p', + AVALANCHE_FUJI_X = 'avalanche_fuji_x', + TERRA_CLASSIC_MAINNET = 'terra classic_mainnet', + BLAST_MAINNET = 'blast_mainnet', + KUJIRA_MAINNET = 'kujira_mainnet', + OPBNB_MAINNET = 'opbnb_mainnet', + OPBNB_TESTNET = 'opbnb_testnet', + SEI_MAINNET = 'sei_mainnet', + DYDX_MAINNET = 'dydx_mainnet', + ORAICHAIN_MAINNET = 'oraichain_mainnet', + GNOSIS_MAINNET = 'gnosis_mainnet', + GNOSIS_CHIADO = 'gnosis_chiado', + SOLANA_MAINNET = 'solana_mainnet', + PULSECHAIN_MAINNET = 'pulsechain_mainnet', + PULSECHAIN_TESTNET = 'pulsechain_testnet', + COSMOS_MAINNET = 'cosmos_mainnet', + KAVA_MAINNET = 'kava_mainnet', + CRONOS_MAINNET = 'cronos_mainnet', + MANTLE_MAINNET = 'mantle_mainnet', + POLKADOT_MAINNET = 'polkadot_mainnet', + TERRA_MAINNET = 'terra_mainnet', + NEUTRON_MAINNET = 'neutron_mainnet', + HAQQ_MAINNET = 'haqq_mainnet', + CHILIZ_MAINNET = 'chiliz_mainnet', + CHILIZ_SPICY = 'chiliz_spicy', + MOONBEAM_MAINNET = 'moonbeam_mainnet', + TAIKO_MAINNET = 'taiko_mainnet', + TAIKO_HEKLA = 'taiko_hekla', + EVMOS_MAINNET = 'evmos_mainnet', + EVMOS_TESTNET = 'evmos_testnet', + CELESTIA_MAINNET = 'celestia_mainnet', + CELESTIA_MOCHA = 'celestia_mocha', + BERACHAIN_TESTNET = 'berachain_testnet', + LINEA_MAINNET = 'linea_mainnet', + LINEA_SEPOLIA = 'linea_sepolia', + JUNO_MAINNET = 'juno_mainnet', + BAHAMUT_MAINNET = 'bahamut_mainnet', + SCROLL_MAINNET = 'scroll_mainnet', + SCROLL_SEPOLIA = 'scroll_sepolia', + TRON_MAINNET = 'tron_mainnet', + CRONOS_POS_CHAIN_MAINNET = 'cronos pos chain_mainnet', + AKASH_NETWORK_MAINNET = 'akash network_mainnet', + SYSCOIN_MAINNET = 'syscoin_mainnet', + SYSCOIN_TANENBAUM = 'syscoin_tanenbaum', + MOONRIVER_MAINNET = 'moonriver_mainnet', + COREUM_MAINNET = 'coreum_mainnet', + STRIDE_MAINNET = 'stride_mainnet', + REGEN_MAINNET = 'regen_mainnet', + SENTINEL_MAINNET = 'sentinel_mainnet', + STARGAZE_MAINNET = 'stargaze_mainnet', + ASSETMANTLE_MAINNET = 'assetmantle_mainnet', + TENET_EVM_MAINNET = 'tenet_evm_mainnet', + TENET_MAINNET = 'tenet_mainnet', + CHIHUAHUA_MAINNET = 'chihuahua_mainnet', + FETCH_AI_MAINNET = 'fetch_ai_mainnet', + ELYS_NETWORK_TESTNET = 'elys_network_testnet', + TERITORI_MAINNET = 'teritori_mainnet', + NOLUS_MAINNET = 'nolus_mainnet', + IRISNET_EVM_MAINNET = 'irisnet_evm_mainnet', + IRISNET_MAINNET = 'irisnet_mainnet', + QUASAR_MAINNET = 'quasar_mainnet', + REBUS_MAINNET = 'rebus_mainnet', + SIFCHAIN_MAINNET = 'sifchain_mainnet', + SAGA_MAINNET = 'saga_mainnet', + COMDEX_MAINNET = 'comdex_mainnet', + MARS_PROTOCOL_MAINNET = 'mars_protocol_mainnet', + PERSISTENCE_MAINNET = 'persistence_mainnet', + QUICKSILVER_MAINNET = 'quicksilver_mainnet', + KUSAMA_MAINNET = 'kusama_mainnet', + MANTRA_TESTNET = 'mantra_testnet', + NIBIRU_MAINNET = 'nibiru_mainnet', + SHENTU_MAINNET = 'shentu_mainnet', + BITCOIN_MAINNET = 'bitcoin_mainnet', + BITCOIN_TESTNET = 'bitcoin_testnet', + BITCANNA_MAINNET = 'bitcanna_mainnet', + LAVA_NETWORK_MAINNET = 'lava_network_mainnet', + AXELAR_MAINNET = 'axelar_mainnet', + PASSAGE_MAINNET = 'passage_mainnet', + RIZON_MAINNET = 'rizon_mainnet', + XPLA_EVM_MAINNET = 'xpla_evm_mainnet', + XPLA_MAINNET = 'xpla_mainnet', + OMNIFLIX_NETWORK_MAINNET = 'omniflix_network_mainnet', + MIGALOO_MAINNET = 'migaloo_mainnet', + CELER_NETWORK_MAINNET = 'celer_network_mainnet', + CUDOS_MAINNET = 'cudos_mainnet', + DORA_FACTORY_MAINNET = 'dora_factory_mainnet', + GOVGEN_MAINNET = 'govgen_mainnet', + CHEQD_MAINNET = 'cheqd_mainnet', + AVAIL_MAINNET = 'avail_mainnet', + AVAIL_TURING = 'avail_turing', + MEDIBLOC_MAINNET = 'medibloc_mainnet', + DASH_MAINNET = 'dash_mainnet', + PIVX_MAINNET = 'pivx_mainnet', + FIRO_MAINNET = 'firo_mainnet', + MANTA_ATLANTIC = 'manta_atlantic', + CROWN_MAINNET = 'crown_mainnet', + DEFICHAIN_MAINNET = 'defichain_mainnet', + PAC_PROTOCOL_MAINNET = 'pac_protocol_mainnet', + WAGERR_MAINNET = 'wagerr_mainnet', } // Combining the ws types diff --git a/packages/web3-rpc-providers/src/web3_provider_publicnode.ts b/packages/web3-rpc-providers/src/web3_provider_publicnode.ts new file mode 100644 index 00000000000..d102b20d874 --- /dev/null +++ b/packages/web3-rpc-providers/src/web3_provider_publicnode.ts @@ -0,0 +1,251 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { EthExecutionAPI, Web3APISpec } from 'web3-types'; +import { HttpProviderOptions } from 'web3-providers-http'; +import { Network, SocketOptions, Transport } from './types.js'; +import { Web3ExternalProvider } from './web3_provider.js'; + +const isValid = (str: string) => str !== undefined && str.trim().length > 0; + +const websocketExclusions = [ + Network.DYMENSION_MAINNET, + Network.DYMENSION_TESTNET, + // Network.INJECTIVE_MAINNET, + // Network.INJECTIVE_TESTNET, + // Network.OSMOSIS_MAINNET, + // Network.SUI_MAINNET, + // Network.TERRA_CLASSIC_MAINNET, + // Network.KUJIRA_MAINNET, + // Network.SEI_MAINNET, + // Network.DYDX_MAINNET, + // Network.ORAICHAIN_MAINNET, + // Network.COSMOS_MAINNET, + Network.KAVA_MAINNET, + Network.CRONOS_MAINNET, + // Network.TERRA_MAINNET, + // Network.NEUTRON_MAINNET, + // Network.HAQQ_MAINNET, + // Network.EVMOS_MAINNET, + // Network.EVMOS_TESTNET, + // Network.CELESTIA_MAINNET, + // Network.CELESTIA_MOCHA, + // Network.BERACHAIN_TESTNET, + // Network.JUNO_MAINNET, + // Network.CRONOS_POS_CHAIN_MAINNET, + // Network.AKASH_NETWORK_MAINNET, + // Network.COREUM_MAINNET, + // Network.STRIDE_MAINNET, + // Network.REGEN_MAINNET, + // Network.SENTINEL_MAINNET, + // Network.STARGAZE_MAINNET, + // Network.ASSETMANTLE_MAINNET, + // Network.TENET_MAINNET, + // Network.CHIHUAHUA_MAINNET, + // Network.FETCH_AI_MAINNET, + // Network.ELYS_NETWORK_TESTNET, + // Network.TERITORI_MAINNET, + // Network.NOLUS_MAINNET, + // Network.IRISNET_MAINNET, + // Network.QUASAR_MAINNET, + // Network.REBUS_MAINNET, + // Network.SIFCHAIN_MAINNET, + // Network.SAGA_MAINNET, + // Network.COMDEX_MAINNET, + // Network.MARS_PROTOCOL_MAINNET, + // Network.PERSISTENCE_MAINNET, + // Network.QUICKSILVER_MAINNET, + // Network.MANTRA_TESTNET, + // Network.NIBIRU_MAINNET, + // Network.SHENTU_MAINNET, + // Network.BITCANNA_MAINNET, + // Network.LAVA_NETWORK_MAINNET, + // Network.AXELAR_MAINNET, + // Network.PASSAGE_MAINNET, + // Network.RIZON_MAINNET, + // Network.XPLA_MAINNET, + // Network.OMNIFLIX_NETWORK_MAINNET, + // Network.MIGALOO_MAINNET, + // Network.CELER_NETWORK_MAINNET, + // Network.CUDOS_MAINNET, + // Network.DORA_FACTORY_MAINNET, + // Network.GOVGEN_MAINNET, + // Network.CHEQD_MAINNET, + // Network.MEDIBLOC_MAINNET, + // deprecated + Network.POLYGON_MAINNET, + // Network.SUI_TESTNET, +]; + +export class PublicNodeProvider< + API extends Web3APISpec = EthExecutionAPI, +> extends Web3ExternalProvider { + // eslint-disable-next-line default-param-last + public constructor( + network: Network = Network.ETH_MAINNET, + transport: Transport = Transport.HTTPS, + token = '', + host = '', + providerConfigOptions?: HttpProviderOptions | SocketOptions, + ) { + super(network, transport, token, host, providerConfigOptions); + } + public static readonly networkHostMap: { [key: string]: string } = { + [Network.POLYGON_AMOY]: 'polygon-amoy-bor-rpc.publicnode.com', + // [Network.POLYGON_HEIMDALL_AMONY]: 'polygon-amoy-heimdall-rpc.publicnode.com:443', + [Network.DYMENSION_MAINNET]: 'dymension-evm-rpc.publicnode.com', + [Network.DYMENSION_TESTNET]: 'dymension-testnet-evm-rpc.publicnode.com', + // [Network.INJECTIVE_MAINNET]: 'injective-rpc.publicnode.com:443', + // [Network.INJECTIVE_TESTNET]: 'injective-testnet-rpc.publicnode.com:443', + // [Network.OSMOSIS_MAINNET]: 'osmosis-rpc.publicnode.com:443', + // [Network.SUI_MAINNET]: 'sui-rpc.publicnode.com', + // [Network.TERRA_CLASSIC_MAINNET]: 'terra-classic-rpc.publicnode.com:443', + [Network.BLAST_MAINNET]: 'blast-rpc.publicnode.com', + // [Network.KUJIRA_MAINNET]: 'kujira-rpc.publicnode.com:443', + // [Network.SEI_MAINNET]: 'sei-rpc.publicnode.com:443', + // [Network.DYDX_MAINNET]: 'dydx-rpc.publicnode.com:443', + // [Network.ORAICHAIN_MAINNET]: 'oraichain-rpc.publicnode.com:443', + [Network.GNOSIS_MAINNET]: 'gnosis-rpc.publicnode.com', + [Network.PULSECHAIN_MAINNET]: 'pulsechain-rpc.publicnode.com', + [Network.PULSECHAIN_TESTNET]: 'pulsechain-testnet-rpc.publicnode.com', + // [Network.COSMOS_MAINNET]: 'cosmos-rpc.publicnode.com:443', + [Network.KAVA_MAINNET]: 'kava-evm-rpc.publicnode.com', + [Network.CRONOS_MAINNET]: 'cronos-evm-rpc.publicnode.com', + [Network.MANTLE_MAINNET]: 'mantle-rpc.publicnode.com', + // [Network.TERRA_MAINNET]: 'terra-rpc.publicnode.com:443', + // [Network.NEUTRON_MAINNET]: 'neutron-rpc.publicnode.com:443', + // [Network.HAQQ_MAINNET]: 'haqq-evm-rpc.publicnode.com', + [Network.TAIKO_MAINNET]: 'taiko-rpc.publicnode.com', + [Network.TAIKO_HEKLA]: 'taiko-hekla-rpc.publicnode.com', + // [Network.EVMOS_MAINNET]: 'evmos-evm-rpc.publicnode.com', + // [Network.EVMOS_TESTNET]: 'evmos-testnet-evm-rpc.publicnode.com', + // [Network.CELESTIA_MAINNET]: 'celestia-rpc.publicnode.com:443', + // [Network.CELESTIA_MOCHA]: 'celestia-mocha-rpc.publicnode.com:443', + // [Network.BERACHAIN_TESTNET]: 'berachain-testnet-evm-rpc.publicnode.com', + [Network.LINEA_MAINNET]: 'linea-rpc.publicnode.com', + [Network.LINEA_SEPOLIA]: 'linea-sepolia-rpc.publicnode.com', + // [Network.JUNO_MAINNET]: 'juno-rpc.publicnode.com:443', + [Network.SCROLL_MAINNET]: 'scroll-rpc.publicnode.com', + [Network.SCROLL_SEPOLIA]: 'scroll-sepolia-rpc.publicnode.com', + // [Network.CRONOS_POS_CHAIN_MAINNET]: 'cronos-pos-rpc.publicnode.com:443', + // [Network.AKASH_NETWORK_MAINNET]: 'akash-rpc.publicnode.com:443', + [Network.SYSCOIN_MAINNET]: 'syscoin-evm-rpc.publicnode.com', + [Network.SYSCOIN_TANENBAUM]: 'syscoin-tanenbaum-evm-rpc.publicnode.com', + // [Network.COREUM_MAINNET]: 'coreum-rpc.publicnode.com:443', + // [Network.STRIDE_MAINNET]: 'stride-rpc.publicnode.com:443', + // [Network.REGEN_MAINNET]: 'regen-rpc.publicnode.com:443', + // [Network.SENTINEL_MAINNET]: 'sentinel-rpc.publicnode.com:443', + // [Network.STARGAZE_MAINNET]: 'stargaze-rpc.publicnode.com:443', + // [Network.ASSETMANTLE_MAINNET]: 'asset-mantle-rpc.publicnode.com:443', + // [Network.TENET_EVM_MAINNET]: 'tenet-evm-rpc.publicnode.com', + // [Network.TENET_MAINNET]: 'tenet-rpc.publicnode.com:443', + // [Network.CHIHUAHUA_MAINNET]: 'chihuahua-rpc.publicnode.com:443', + // [Network.FETCH_AI_MAINNET]: 'fetch-rpc.publicnode.com:443', + // [Network.ELYS_NETWORK_TESTNET]: 'elys-testnet-rpc.publicnode.com:443', + // [Network.TERITORI_MAINNET]: 'teritori-rpc.publicnode.com:443', + // [Network.NOLUS_MAINNET]: 'nolus-rpc.publicnode.com:443', + // [Network.IRISNET_EVM_MAINNET]: 'iris-evm-rpc.publicnode.com', + // [Network.IRISNET_MAINNET]: 'iris-rpc.publicnode.com:443', + // [Network.QUASAR_MAINNET]: 'quasar-rpc.publicnode.com:443', + // [Network.REBUS_MAINNET]: 'rebus-rpc.publicnode.com:443', + // [Network.SIFCHAIN_MAINNET]: 'sifchain-rpc.publicnode.com:443', + // [Network.SAGA_MAINNET]: 'saga-rpc.publicnode.com:443', + // [Network.COMDEX_MAINNET]: 'comdex-rpc.publicnode.com:443', + // [Network.MARS_PROTOCOL_MAINNET]: 'mars-rpc.publicnode.com:443', + // [Network.PERSISTENCE_MAINNET]: 'persistence-rpc.publicnode.com:443', + // [Network.QUICKSILVER_MAINNET]: 'quicksilver-rpc.publicnode.com:443', + // [Network.MANTRA_TESTNET]: 'mantra-testnet-rpc.publicnode.com:443', + // [Network.NIBIRU_MAINNET]: 'nibiru-rpc.publicnode.com:443', + // [Network.SHENTU_MAINNET]: 'shentu-rpc.publicnode.com:443', + // [Network.BITCOIN_MAINNET]: 'bitcoin-rpc.publicnode.com', + // [Network.BITCOIN_TESTNET]: 'bitcoin-testnet-rpc.publicnode.com', + // [Network.BITCANNA_MAINNET]: 'bitcanna-rpc.publicnode.com:443', + // [Network.LAVA_NETWORK_MAINNET]: 'lava-rpc.publicnode.com:443', + // [Network.AXELAR_MAINNET]: 'axelar-rpc.publicnode.com:443', + // [Network.PASSAGE_MAINNET]: 'passage-rpc.publicnode.com:443', + // [Network.RIZON_MAINNET]: 'rizon-rpc.publicnode.com:443', + // [Network.XPLA_EVM_MAINNET]: 'xpla-evm-rpc.publicnode.com', + // [Network.XPLA_MAINNET]: 'xpla-rpc.publicnode.com:443', + // [Network.OMNIFLIX_NETWORK_MAINNET]: 'omniflix-rpc.publicnode.com:443', + // [Network.MIGALOO_MAINNET]: 'migaloo-rpc.publicnode.com:443', + // [Network.CELER_NETWORK_MAINNET]: 'celer-rpc.publicnode.com:443', + // [Network.CUDOS_MAINNET]: 'cudos-rpc.publicnode.com:443', + // [Network.DORA_FACTORY_MAINNET]: 'dora-rpc.publicnode.com:443', + // [Network.GOVGEN_MAINNET]: 'govgen-rpc.publicnode.com:443', + // [Network.CHEQD_MAINNET]: 'cheqd-rpc.publicnode.com:443', + // [Network.AVAIL_MAINNET]: 'avail-rpc.publicnode.com', + // [Network.AVAIL_TURING]: 'avail-turing-rpc.publicnode.com', + // [Network.MEDIBLOC_MAINNET]: 'medibloc-rpc.publicnode.com:443', + // [Network.DASH_MAINNET]: 'dash-rpc.publicnode.com', + // [Network.PIVX_MAINNET]: 'pivx-rpc.publicnode.com', + // [Network.FIRO_MAINNET]: 'firo-rpc.publicnode.com', + + // [Network.MANTA_ATLANTIC]: 'manta-atlantic-rpc.publicnode.com', + // [Network.CROWN_MAINNET]: 'crown-rpc.publicnode.com', + // [Network.DEFICHAIN_MAINNET]: 'defichain-rpc.publicnode.com', + // [Network.PAC_PROTOCOL_MAINNET]: 'pacprotocol-rpc.publicnode.com', + // [Network.WAGERR_MAINNET]: 'wagerr-rpc.publicnode.com', + //deprecated + [Network.ETH_MAINNET]: 'ethereum-rpc.publicnode.com', + [Network.ETH_SEPOLIA]: 'ethereum-sepolia-rpc.publicnode.com', + [Network.ETH_HOLESKY]: 'ethereum-holesky-rpc.publicnode.com', + [Network.BSC_MAINNET]: 'bsc-rpc.publicnode.com', + [Network.BSC_TESTNET]: 'bsc-testnet-rpc.publicnode.com', + [Network.POLYGON_MAINNET]: 'polygon-bor-rpc.publicnode.com', + // [Network.POLYGON_HEIMDALL_MAINNET]: 'polygon-heimdall-rpc.publicnode.com:443', + [Network.BASE_MAINNET]: 'base-rpc.publicnode.com', + [Network.BASE_SEPOLIA]: 'base-sepolia-rpc.publicnode.com', + [Network.ARBITRUM_ONE]: 'arbitrum-one-rpc.publicnode.com', + [Network.ARBITRUM_NOVA]: 'arbitrum-nova-rpc.publicnode.com', + [Network.ARBITRUM_SEPOLIA]: 'arbitrum-sepolia-rpc.publicnode.com', + [Network.AVALANCHE_C_MAINNET]: 'avalanche-c-chain-rpc.publicnode.com', + [Network.AVALANCHE_P_MAINNET]: 'avalanche-p-chain-rpc.publicnode.com', + [Network.AVALANCHE_X_MAINNET]: 'avalanche-x-chain-rpc.publicnode.com', + [Network.AVALANCHE_FUJI_C]: 'avalanche-fuji-c-chain-rpc.publicnode.com', + [Network.AVALANCHE_FUJI_P]: 'avalanche-fuji-p-chain-rpc.publicnode.com', + [Network.AVALANCHE_FUJI_X]: 'avalanche-fuji-x-chain-rpc.publicnode.com', + [Network.OPTIMISM_MAINNET]: 'optimism-rpc.publicnode.com', + [Network.OPTIMISM_SEPOLIA]: 'optimism-sepolia-rpc.publicnode.com', + [Network.FANTOM_MAINNET]: 'fantom-rpc.publicnode.com', + [Network.FANTOM_TESTNET]: 'fantom-testnet-rpc.publicnode.com', + // [Network.SUI_TESTNET]: 'sui-testnet-rpc.publicnode.com', + [Network.OPBNB_MAINNET]: 'opbnb-rpc.publicnode.com', + [Network.OPBNB_TESTNET]: 'opbnb-testnet-rpc.publicnode.com', + [Network.GNOSIS_CHIADO]: 'gnosis-chiado-rpc.publicnode.com', + [Network.SOLANA_MAINNET]: 'solana-rpc.publicnode.com', + [Network.POLKADOT_MAINNET]: 'polkadot-rpc.publicnode.com', + [Network.CHILIZ_MAINNET]: 'chiliz-rpc.publicnode.com', + [Network.CHILIZ_SPICY]: 'chiliz-spicy-rpc.publicnode.com', + [Network.MOONBEAM_MAINNET]: 'moonbeam-rpc.publicnode.com', + [Network.BAHAMUT_MAINNET]: 'bahamut-rpc.publicnode.com', + [Network.TRON_MAINNET]: 'tron-evm-rpc.publicnode.com', + [Network.MOONRIVER_MAINNET]: 'moonriver-rpc.publicnode.com', + // [Network.KUSAMA_MAINNET]: 'kusama-rpc.publicnode.com', + }; + // eslint-disable-next-line class-methods-use-this + public getRPCURL(network: Network, transport: Transport, _: string, _host: string) { + const defaultHost = PublicNodeProvider.networkHostMap[network]; + if (!defaultHost) { + throw new Error('Network info not avalible.'); + } + const host = isValid(_host) ? _host : defaultHost; + if (websocketExclusions.includes(network) && transport === Transport.WebSocket) { + return `${transport}://${host}/websocket`; + } + return `${transport}://${host}`; + } +} diff --git a/packages/web3-rpc-providers/src/web3_provider_quicknode.ts b/packages/web3-rpc-providers/src/web3_provider_quicknode.ts index ae74fa49860..4b6e5ae73e6 100644 --- a/packages/web3-rpc-providers/src/web3_provider_quicknode.ts +++ b/packages/web3-rpc-providers/src/web3_provider_quicknode.ts @@ -107,7 +107,7 @@ export class QuickNodeProvider< host = isValid(_host) ? _host : 'small-chaotic-moon.matic.quiknode.pro'; token = isValid(_token) ? _token : '847569f8a017e84d985e10d0f44365d965a951f1'; break; - case Network.POLYGON_AMONY: + case Network.POLYGON_AMOY: host = isValid(_host) ? _host : 'prettiest-side-shape.matic-amoy.quiknode.pro'; token = isValid(_token) ? _token : '79a9476eea661d4f82de614db1d8a895b14b881c'; break; diff --git a/packages/web3/test/integration/web3RPCProviders.test.ts b/packages/web3/test/integration/web3RPCProviders.test.ts index 1faeffad452..c9ad86b0287 100644 --- a/packages/web3/test/integration/web3RPCProviders.test.ts +++ b/packages/web3/test/integration/web3RPCProviders.test.ts @@ -15,9 +15,34 @@ You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ -import { mainnet, Network, QuickNodeProvider, Transport } from 'web3-rpc-providers'; +import { + mainnet, + Network, + QuickNodeProvider, + Transport, + PublicNodeProvider, +} from 'web3-rpc-providers'; import { Web3 } from '../../src/index'; +type SpecialMethod = (web3: Web3) => Promise; +type SpecialMethods = { [key: string]: SpecialMethod }; + +const runRpcMethod = async (web3: Web3, method: string) => + web3.requestManager.send({ + method, + }); + +const specialMethods: SpecialMethods = { + [Network.POLKADOT_MAINNET]: async (web3: Web3) => { + const res = await runRpcMethod(web3, 'chain_getBlock'); + return web3.utils.toBigInt(res.block.header.number); + }, + [Network.SOLANA_MAINNET]: async (web3: Web3) => { + const res = await runRpcMethod(web3, 'getBlockHeight'); + return web3.utils.toBigInt(res); + }, +}; + describe('Web3 RPC Provider Integration tests', () => { const transports = Object.values(Transport); const networks = [ @@ -29,7 +54,7 @@ describe('Web3 RPC Provider Integration tests', () => { Network.BNB_MAINNET, Network.BNB_TESTNET, Network.POLYGON_MAINNET, - Network.POLYGON_AMONY, + Network.POLYGON_AMOY, ]; transports.forEach(transport => { @@ -48,6 +73,162 @@ describe('Web3 RPC Provider Integration tests', () => { }); }); }); + + const publicNodeNetworks = [ + //- Network.COREUM_MAINNET, + //- Network.STRIDE_MAINNET, + //- Network.REGEN_MAINNET, + //- Network.SENTINEL_MAINNET, + //- Network.STARGAZE_MAINNET, + //- Network.ASSETMANTLE_MAINNET, + //- Network.TENET_EVM_MAINNET, + //- Network.TENET_MAINNET, + //- Network.CHIHUAHUA_MAINNET, + //- Network.FETCH_AI_MAINNET, + //- Network.ELYS_NETWORK_TESTNET, + //- Network.TERITORI_MAINNET, + //- Network.NOLUS_MAINNET, + //- Network.IRISNET_EVM_MAINNET, + //- Network.IRISNET_MAINNET, + //- Network.QUASAR_MAINNET, + //- Network.REBUS_MAINNET, + //- Network.SIFCHAIN_MAINNET, + //- Network.SAGA_MAINNET, + //- Network.COMDEX_MAINNET, + //- Network.MARS_PROTOCOL_MAINNET, + //- Network.PERSISTENCE_MAINNET, + //- Network.QUICKSILVER_MAINNET, + //- Network.MANTRA_TESTNET, + //- Network.NIBIRU_MAINNET, + //- Network.SHENTU_MAINNET, + //- Network.BITCOIN_MAINNET, + //- Network.BITCOIN_TESTNET, + //- Network.BITCANNA_MAINNET, + //- Network.LAVA_NETWORK_MAINNET, + //- Network.AXELAR_MAINNET, + //- Network.PASSAGE_MAINNET, + //- Network.RIZON_MAINNET, + //- Network.XPLA_EVM_MAINNET, + //- Network.XPLA_MAINNET, + //- Network.OMNIFLIX_NETWORK_MAINNET, + //- Network.MIGALOO_MAINNET, + //- Network.CELER_NETWORK_MAINNET, + //- Network.CUDOS_MAINNET, + //- Network.DORA_FACTORY_MAINNET, + //- Network.GOVGEN_MAINNET, + //- Network.CHEQD_MAINNET, + //- Network.AVAIL_MAINNET, + //- Network.AVAIL_TURING, + //- Network.MEDIBLOC_MAINNET, + //- Network.DASH_MAINNET, + //- Network.PIVX_MAINNET, + //- Network.FIRO_MAINNET, + //- Network.MANTA_ATLANTIC, - endpoint not working + // - Network.CROWN_MAINNET, + //- Network.DEFICHAIN_MAINNET, + //- Network.PAC_PROTOCOL_MAINNET, + //- Network.WAGERR_MAINNET, + //- Network.SUI_TESTNET, + //- Network.KUSAMA_MAINNET, + //- Network.INJECTIVE_MAINNET, + //- Network.INJECTIVE_TESTNET, + //- Network.OSMOSIS_MAINNET, + //- Network.SUI_MAINNET, + //- Network.TERRA_CLASSIC_MAINNET, + //- Network.KUJIRA_MAINNET, + //- Network.SEI_MAINNET, + //- Network.DYDX_MAINNET, + //- Network.ORAICHAIN_MAINNET, + //- Network.COSMOS_MAINNET, + //- Network.TERRA_MAINNET, + //- Network.NEUTRON_MAINNET, + //- Network.HAQQ_MAINNET, + //- Network.EVMOS_MAINNET, + //- Network.EVMOS_TESTNET, + //- Network.CELESTIA_MAINNET, + //- Network.CELESTIA_MOCHA, + //- Network.BERACHAIN_TESTNET, + //- Network.JUNO_MAINNET, + //- Network.CRONOS_POS_CHAIN_MAINNET, + //- Network.AKASH_NETWORK_MAINNET, + // Network.POLYGON_AMOY, + // Network.POLYGON_MAINNET, + // Network.DYMENSION_MAINNET, + // Network.DYMENSION_TESTNET, + // Network.BLAST_MAINNET, + // Network.GNOSIS_MAINNET, + // Network.PULSECHAIN_MAINNET, + // Network.PULSECHAIN_TESTNET, + // Network.KAVA_MAINNET, + // Network.CRONOS_MAINNET, + // Network.MANTLE_MAINNET, + // Network.HAQQ_MAINNET, + // Network.TAIKO_MAINNET, + // Network.TAIKO_HEKLA, + // Network.EVMOS_MAINNET, + // Network.EVMOS_TESTNET, + // Network.BERACHAIN_TESTNET, + // Network.LINEA_MAINNET, + // Network.LINEA_SEPOLIA, + // Network.SCROLL_MAINNET, + // Network.SCROLL_SEPOLIA, + // Network.SYSCOIN_MAINNET, + // Network.SYSCOIN_TANENBAUM, + // Network.ETH_MAINNET, + // Network.ETH_SEPOLIA, + // Network.ETH_HOLESKY, + // Network.BSC_MAINNET, + // Network.BSC_TESTNET, + // Network.BASE_MAINNET, + // Network.BASE_SEPOLIA, + // Network.ARBITRUM_ONE, + // Network.ARBITRUM_NOVA, + // Network.ARBITRUM_SEPOLIA, + // Network.AVALANCHE_C_MAINNET, + // Network.AVALANCHE_P_MAINNET, + // Network.AVALANCHE_X_MAINNET, + // Network.AVALANCHE_FUJI_C, + // Network.AVALANCHE_FUJI_P, + // Network.AVALANCHE_FUJI_X, + // Network.OPTIMISM_MAINNET, + // Network.OPTIMISM_SEPOLIA, + // Network.FANTOM_MAINNET, + // Network.FANTOM_TESTNET, + // Network.OPBNB_MAINNET, + // Network.OPBNB_TESTNET, + // Network.GNOSIS_CHIADO, + // Network.SOLANA_MAINNET, + // Network.POLKADOT_MAINNET, + // Network.CHILIZ_MAINNET, + // Network.CHILIZ_SPICY, + // Network.MOONBEAM_MAINNET, + // Network.BAHAMUT_MAINNET, + // Network.TRON_MAINNET, + // Network.MOONRIVER_MAINNET, + ]; + // transports.forEach(transport => { + [Transport.HTTPS].forEach(transport => { + publicNodeNetworks.forEach(network => { + it.only(`PublicNodeProvider should work with ${transport} transport and ${network} network`, async () => { + const provider = new PublicNodeProvider(network, transport); + const web3 = new Web3(provider); + + const specialMethod = specialMethods[network]; + + const result = await (specialMethod + ? specialMethod(web3) + : web3.eth.getBlockNumber()); + + expect(typeof result).toBe('bigint'); + expect(result > 0).toBe(true); + + if (transport === Transport.WebSocket) { + web3.provider?.disconnect(); + } + }); + }); + }); + it(`should work with mainnet provider`, async () => { const web3 = new Web3(mainnet); const result = await web3.eth.getBlockNumber(); From e7c8782eb2f488308cb336ebaa81869aec7a51ca Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Fri, 11 Oct 2024 19:43:28 -0400 Subject: [PATCH 2/8] finished --- .husky/pre-commit | 2 +- packages/web3-rpc-providers/src/types.ts | 82 +----- .../src/web3_provider_publicnode.ts | 146 +---------- .../test/integration/web3RPCProviders.test.ts | 244 ++++++------------ 4 files changed, 86 insertions(+), 388 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index c460d9c3fc9..d24fdfc601b 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -#npx lint-staged +npx lint-staged diff --git a/packages/web3-rpc-providers/src/types.ts b/packages/web3-rpc-providers/src/types.ts index 484f569ce0a..258d6411c57 100644 --- a/packages/web3-rpc-providers/src/types.ts +++ b/packages/web3-rpc-providers/src/types.ts @@ -31,10 +31,6 @@ export enum Network { POLYGON_MAINNET = 'polygon_mainnet', POLYGON_AMOY = 'polygon_amoy', - SUI_MAINNET = 'sui_mainnet', - SUI_TESTNET = 'sui_testnet', - INJECTIVE_MAINNET = 'injective_mainnet', - INJECTIVE_TESTNET = 'injective_testnet', AVALANCHE_C_MAINNET = 'avalanche_c_mainnet', AVALANCHE_P_MAINNET = 'avalanche_p_mainnet', AVALANCHE_X_MAINNET = 'avalanche_x_mainnet', @@ -51,7 +47,6 @@ export enum Network { FANTOM_MAINNET = 'fantom_mainnet', FANTOM_TESTNET = 'fantom_testnet', - OSMOSIS_MAINNET = 'osmosis_mainnet', DYMENSION_MAINNET = 'dymension_mainnet', DYMENSION_TESTNET = 'dymension_testnet', @@ -66,103 +61,34 @@ export enum Network { AVALANCHE_FUJI_C = 'avalanche_fuji_c', AVALANCHE_FUJI_P = 'avalanche_fuji_p', AVALANCHE_FUJI_X = 'avalanche_fuji_x', - TERRA_CLASSIC_MAINNET = 'terra classic_mainnet', BLAST_MAINNET = 'blast_mainnet', - KUJIRA_MAINNET = 'kujira_mainnet', OPBNB_MAINNET = 'opbnb_mainnet', OPBNB_TESTNET = 'opbnb_testnet', - SEI_MAINNET = 'sei_mainnet', - DYDX_MAINNET = 'dydx_mainnet', - ORAICHAIN_MAINNET = 'oraichain_mainnet', GNOSIS_MAINNET = 'gnosis_mainnet', GNOSIS_CHIADO = 'gnosis_chiado', - SOLANA_MAINNET = 'solana_mainnet', PULSECHAIN_MAINNET = 'pulsechain_mainnet', PULSECHAIN_TESTNET = 'pulsechain_testnet', - COSMOS_MAINNET = 'cosmos_mainnet', KAVA_MAINNET = 'kava_mainnet', CRONOS_MAINNET = 'cronos_mainnet', MANTLE_MAINNET = 'mantle_mainnet', - POLKADOT_MAINNET = 'polkadot_mainnet', - TERRA_MAINNET = 'terra_mainnet', - NEUTRON_MAINNET = 'neutron_mainnet', - HAQQ_MAINNET = 'haqq_mainnet', CHILIZ_MAINNET = 'chiliz_mainnet', CHILIZ_SPICY = 'chiliz_spicy', MOONBEAM_MAINNET = 'moonbeam_mainnet', TAIKO_MAINNET = 'taiko_mainnet', TAIKO_HEKLA = 'taiko_hekla', - EVMOS_MAINNET = 'evmos_mainnet', - EVMOS_TESTNET = 'evmos_testnet', - CELESTIA_MAINNET = 'celestia_mainnet', - CELESTIA_MOCHA = 'celestia_mocha', - BERACHAIN_TESTNET = 'berachain_testnet', LINEA_MAINNET = 'linea_mainnet', LINEA_SEPOLIA = 'linea_sepolia', - JUNO_MAINNET = 'juno_mainnet', BAHAMUT_MAINNET = 'bahamut_mainnet', SCROLL_MAINNET = 'scroll_mainnet', SCROLL_SEPOLIA = 'scroll_sepolia', TRON_MAINNET = 'tron_mainnet', - CRONOS_POS_CHAIN_MAINNET = 'cronos pos chain_mainnet', - AKASH_NETWORK_MAINNET = 'akash network_mainnet', SYSCOIN_MAINNET = 'syscoin_mainnet', SYSCOIN_TANENBAUM = 'syscoin_tanenbaum', MOONRIVER_MAINNET = 'moonriver_mainnet', - COREUM_MAINNET = 'coreum_mainnet', - STRIDE_MAINNET = 'stride_mainnet', - REGEN_MAINNET = 'regen_mainnet', - SENTINEL_MAINNET = 'sentinel_mainnet', - STARGAZE_MAINNET = 'stargaze_mainnet', - ASSETMANTLE_MAINNET = 'assetmantle_mainnet', - TENET_EVM_MAINNET = 'tenet_evm_mainnet', - TENET_MAINNET = 'tenet_mainnet', - CHIHUAHUA_MAINNET = 'chihuahua_mainnet', - FETCH_AI_MAINNET = 'fetch_ai_mainnet', - ELYS_NETWORK_TESTNET = 'elys_network_testnet', - TERITORI_MAINNET = 'teritori_mainnet', - NOLUS_MAINNET = 'nolus_mainnet', - IRISNET_EVM_MAINNET = 'irisnet_evm_mainnet', - IRISNET_MAINNET = 'irisnet_mainnet', - QUASAR_MAINNET = 'quasar_mainnet', - REBUS_MAINNET = 'rebus_mainnet', - SIFCHAIN_MAINNET = 'sifchain_mainnet', - SAGA_MAINNET = 'saga_mainnet', - COMDEX_MAINNET = 'comdex_mainnet', - MARS_PROTOCOL_MAINNET = 'mars_protocol_mainnet', - PERSISTENCE_MAINNET = 'persistence_mainnet', - QUICKSILVER_MAINNET = 'quicksilver_mainnet', - KUSAMA_MAINNET = 'kusama_mainnet', - MANTRA_TESTNET = 'mantra_testnet', - NIBIRU_MAINNET = 'nibiru_mainnet', - SHENTU_MAINNET = 'shentu_mainnet', - BITCOIN_MAINNET = 'bitcoin_mainnet', - BITCOIN_TESTNET = 'bitcoin_testnet', - BITCANNA_MAINNET = 'bitcanna_mainnet', - LAVA_NETWORK_MAINNET = 'lava_network_mainnet', - AXELAR_MAINNET = 'axelar_mainnet', - PASSAGE_MAINNET = 'passage_mainnet', - RIZON_MAINNET = 'rizon_mainnet', - XPLA_EVM_MAINNET = 'xpla_evm_mainnet', - XPLA_MAINNET = 'xpla_mainnet', - OMNIFLIX_NETWORK_MAINNET = 'omniflix_network_mainnet', - MIGALOO_MAINNET = 'migaloo_mainnet', - CELER_NETWORK_MAINNET = 'celer_network_mainnet', - CUDOS_MAINNET = 'cudos_mainnet', - DORA_FACTORY_MAINNET = 'dora_factory_mainnet', - GOVGEN_MAINNET = 'govgen_mainnet', - CHEQD_MAINNET = 'cheqd_mainnet', - AVAIL_MAINNET = 'avail_mainnet', - AVAIL_TURING = 'avail_turing', - MEDIBLOC_MAINNET = 'medibloc_mainnet', - DASH_MAINNET = 'dash_mainnet', - PIVX_MAINNET = 'pivx_mainnet', - FIRO_MAINNET = 'firo_mainnet', - MANTA_ATLANTIC = 'manta_atlantic', - CROWN_MAINNET = 'crown_mainnet', - DEFICHAIN_MAINNET = 'defichain_mainnet', - PAC_PROTOCOL_MAINNET = 'pac_protocol_mainnet', - WAGERR_MAINNET = 'wagerr_mainnet', + HAQQ_MAINNET = 'haqq_mainnet', + EVMOS_MAINNET = 'evmos_mainnet', + EVMOS_TESTNET = 'evmos_testnet', + BERACHAIN_TESTNET = 'berachain_testnet', } // Combining the ws types diff --git a/packages/web3-rpc-providers/src/web3_provider_publicnode.ts b/packages/web3-rpc-providers/src/web3_provider_publicnode.ts index d102b20d874..f0b16823e6d 100644 --- a/packages/web3-rpc-providers/src/web3_provider_publicnode.ts +++ b/packages/web3-rpc-providers/src/web3_provider_publicnode.ts @@ -25,70 +25,10 @@ const isValid = (str: string) => str !== undefined && str.trim().length > 0; const websocketExclusions = [ Network.DYMENSION_MAINNET, Network.DYMENSION_TESTNET, - // Network.INJECTIVE_MAINNET, - // Network.INJECTIVE_TESTNET, - // Network.OSMOSIS_MAINNET, - // Network.SUI_MAINNET, - // Network.TERRA_CLASSIC_MAINNET, - // Network.KUJIRA_MAINNET, - // Network.SEI_MAINNET, - // Network.DYDX_MAINNET, - // Network.ORAICHAIN_MAINNET, - // Network.COSMOS_MAINNET, Network.KAVA_MAINNET, Network.CRONOS_MAINNET, - // Network.TERRA_MAINNET, - // Network.NEUTRON_MAINNET, - // Network.HAQQ_MAINNET, - // Network.EVMOS_MAINNET, - // Network.EVMOS_TESTNET, - // Network.CELESTIA_MAINNET, - // Network.CELESTIA_MOCHA, - // Network.BERACHAIN_TESTNET, - // Network.JUNO_MAINNET, - // Network.CRONOS_POS_CHAIN_MAINNET, - // Network.AKASH_NETWORK_MAINNET, - // Network.COREUM_MAINNET, - // Network.STRIDE_MAINNET, - // Network.REGEN_MAINNET, - // Network.SENTINEL_MAINNET, - // Network.STARGAZE_MAINNET, - // Network.ASSETMANTLE_MAINNET, - // Network.TENET_MAINNET, - // Network.CHIHUAHUA_MAINNET, - // Network.FETCH_AI_MAINNET, - // Network.ELYS_NETWORK_TESTNET, - // Network.TERITORI_MAINNET, - // Network.NOLUS_MAINNET, - // Network.IRISNET_MAINNET, - // Network.QUASAR_MAINNET, - // Network.REBUS_MAINNET, - // Network.SIFCHAIN_MAINNET, - // Network.SAGA_MAINNET, - // Network.COMDEX_MAINNET, - // Network.MARS_PROTOCOL_MAINNET, - // Network.PERSISTENCE_MAINNET, - // Network.QUICKSILVER_MAINNET, - // Network.MANTRA_TESTNET, - // Network.NIBIRU_MAINNET, - // Network.SHENTU_MAINNET, - // Network.BITCANNA_MAINNET, - // Network.LAVA_NETWORK_MAINNET, - // Network.AXELAR_MAINNET, - // Network.PASSAGE_MAINNET, - // Network.RIZON_MAINNET, - // Network.XPLA_MAINNET, - // Network.OMNIFLIX_NETWORK_MAINNET, - // Network.MIGALOO_MAINNET, - // Network.CELER_NETWORK_MAINNET, - // Network.CUDOS_MAINNET, - // Network.DORA_FACTORY_MAINNET, - // Network.GOVGEN_MAINNET, - // Network.CHEQD_MAINNET, - // Network.MEDIBLOC_MAINNET, // deprecated Network.POLYGON_MAINNET, - // Network.SUI_TESTNET, ]; export class PublicNodeProvider< @@ -106,107 +46,35 @@ export class PublicNodeProvider< } public static readonly networkHostMap: { [key: string]: string } = { [Network.POLYGON_AMOY]: 'polygon-amoy-bor-rpc.publicnode.com', - // [Network.POLYGON_HEIMDALL_AMONY]: 'polygon-amoy-heimdall-rpc.publicnode.com:443', [Network.DYMENSION_MAINNET]: 'dymension-evm-rpc.publicnode.com', [Network.DYMENSION_TESTNET]: 'dymension-testnet-evm-rpc.publicnode.com', - // [Network.INJECTIVE_MAINNET]: 'injective-rpc.publicnode.com:443', - // [Network.INJECTIVE_TESTNET]: 'injective-testnet-rpc.publicnode.com:443', - // [Network.OSMOSIS_MAINNET]: 'osmosis-rpc.publicnode.com:443', - // [Network.SUI_MAINNET]: 'sui-rpc.publicnode.com', - // [Network.TERRA_CLASSIC_MAINNET]: 'terra-classic-rpc.publicnode.com:443', [Network.BLAST_MAINNET]: 'blast-rpc.publicnode.com', - // [Network.KUJIRA_MAINNET]: 'kujira-rpc.publicnode.com:443', - // [Network.SEI_MAINNET]: 'sei-rpc.publicnode.com:443', - // [Network.DYDX_MAINNET]: 'dydx-rpc.publicnode.com:443', - // [Network.ORAICHAIN_MAINNET]: 'oraichain-rpc.publicnode.com:443', [Network.GNOSIS_MAINNET]: 'gnosis-rpc.publicnode.com', [Network.PULSECHAIN_MAINNET]: 'pulsechain-rpc.publicnode.com', [Network.PULSECHAIN_TESTNET]: 'pulsechain-testnet-rpc.publicnode.com', - // [Network.COSMOS_MAINNET]: 'cosmos-rpc.publicnode.com:443', [Network.KAVA_MAINNET]: 'kava-evm-rpc.publicnode.com', [Network.CRONOS_MAINNET]: 'cronos-evm-rpc.publicnode.com', [Network.MANTLE_MAINNET]: 'mantle-rpc.publicnode.com', - // [Network.TERRA_MAINNET]: 'terra-rpc.publicnode.com:443', - // [Network.NEUTRON_MAINNET]: 'neutron-rpc.publicnode.com:443', - // [Network.HAQQ_MAINNET]: 'haqq-evm-rpc.publicnode.com', [Network.TAIKO_MAINNET]: 'taiko-rpc.publicnode.com', [Network.TAIKO_HEKLA]: 'taiko-hekla-rpc.publicnode.com', - // [Network.EVMOS_MAINNET]: 'evmos-evm-rpc.publicnode.com', - // [Network.EVMOS_TESTNET]: 'evmos-testnet-evm-rpc.publicnode.com', - // [Network.CELESTIA_MAINNET]: 'celestia-rpc.publicnode.com:443', - // [Network.CELESTIA_MOCHA]: 'celestia-mocha-rpc.publicnode.com:443', - // [Network.BERACHAIN_TESTNET]: 'berachain-testnet-evm-rpc.publicnode.com', [Network.LINEA_MAINNET]: 'linea-rpc.publicnode.com', [Network.LINEA_SEPOLIA]: 'linea-sepolia-rpc.publicnode.com', - // [Network.JUNO_MAINNET]: 'juno-rpc.publicnode.com:443', [Network.SCROLL_MAINNET]: 'scroll-rpc.publicnode.com', [Network.SCROLL_SEPOLIA]: 'scroll-sepolia-rpc.publicnode.com', - // [Network.CRONOS_POS_CHAIN_MAINNET]: 'cronos-pos-rpc.publicnode.com:443', - // [Network.AKASH_NETWORK_MAINNET]: 'akash-rpc.publicnode.com:443', [Network.SYSCOIN_MAINNET]: 'syscoin-evm-rpc.publicnode.com', [Network.SYSCOIN_TANENBAUM]: 'syscoin-tanenbaum-evm-rpc.publicnode.com', - // [Network.COREUM_MAINNET]: 'coreum-rpc.publicnode.com:443', - // [Network.STRIDE_MAINNET]: 'stride-rpc.publicnode.com:443', - // [Network.REGEN_MAINNET]: 'regen-rpc.publicnode.com:443', - // [Network.SENTINEL_MAINNET]: 'sentinel-rpc.publicnode.com:443', - // [Network.STARGAZE_MAINNET]: 'stargaze-rpc.publicnode.com:443', - // [Network.ASSETMANTLE_MAINNET]: 'asset-mantle-rpc.publicnode.com:443', - // [Network.TENET_EVM_MAINNET]: 'tenet-evm-rpc.publicnode.com', - // [Network.TENET_MAINNET]: 'tenet-rpc.publicnode.com:443', - // [Network.CHIHUAHUA_MAINNET]: 'chihuahua-rpc.publicnode.com:443', - // [Network.FETCH_AI_MAINNET]: 'fetch-rpc.publicnode.com:443', - // [Network.ELYS_NETWORK_TESTNET]: 'elys-testnet-rpc.publicnode.com:443', - // [Network.TERITORI_MAINNET]: 'teritori-rpc.publicnode.com:443', - // [Network.NOLUS_MAINNET]: 'nolus-rpc.publicnode.com:443', - // [Network.IRISNET_EVM_MAINNET]: 'iris-evm-rpc.publicnode.com', - // [Network.IRISNET_MAINNET]: 'iris-rpc.publicnode.com:443', - // [Network.QUASAR_MAINNET]: 'quasar-rpc.publicnode.com:443', - // [Network.REBUS_MAINNET]: 'rebus-rpc.publicnode.com:443', - // [Network.SIFCHAIN_MAINNET]: 'sifchain-rpc.publicnode.com:443', - // [Network.SAGA_MAINNET]: 'saga-rpc.publicnode.com:443', - // [Network.COMDEX_MAINNET]: 'comdex-rpc.publicnode.com:443', - // [Network.MARS_PROTOCOL_MAINNET]: 'mars-rpc.publicnode.com:443', - // [Network.PERSISTENCE_MAINNET]: 'persistence-rpc.publicnode.com:443', - // [Network.QUICKSILVER_MAINNET]: 'quicksilver-rpc.publicnode.com:443', - // [Network.MANTRA_TESTNET]: 'mantra-testnet-rpc.publicnode.com:443', - // [Network.NIBIRU_MAINNET]: 'nibiru-rpc.publicnode.com:443', - // [Network.SHENTU_MAINNET]: 'shentu-rpc.publicnode.com:443', - // [Network.BITCOIN_MAINNET]: 'bitcoin-rpc.publicnode.com', - // [Network.BITCOIN_TESTNET]: 'bitcoin-testnet-rpc.publicnode.com', - // [Network.BITCANNA_MAINNET]: 'bitcanna-rpc.publicnode.com:443', - // [Network.LAVA_NETWORK_MAINNET]: 'lava-rpc.publicnode.com:443', - // [Network.AXELAR_MAINNET]: 'axelar-rpc.publicnode.com:443', - // [Network.PASSAGE_MAINNET]: 'passage-rpc.publicnode.com:443', - // [Network.RIZON_MAINNET]: 'rizon-rpc.publicnode.com:443', - // [Network.XPLA_EVM_MAINNET]: 'xpla-evm-rpc.publicnode.com', - // [Network.XPLA_MAINNET]: 'xpla-rpc.publicnode.com:443', - // [Network.OMNIFLIX_NETWORK_MAINNET]: 'omniflix-rpc.publicnode.com:443', - // [Network.MIGALOO_MAINNET]: 'migaloo-rpc.publicnode.com:443', - // [Network.CELER_NETWORK_MAINNET]: 'celer-rpc.publicnode.com:443', - // [Network.CUDOS_MAINNET]: 'cudos-rpc.publicnode.com:443', - // [Network.DORA_FACTORY_MAINNET]: 'dora-rpc.publicnode.com:443', - // [Network.GOVGEN_MAINNET]: 'govgen-rpc.publicnode.com:443', - // [Network.CHEQD_MAINNET]: 'cheqd-rpc.publicnode.com:443', - // [Network.AVAIL_MAINNET]: 'avail-rpc.publicnode.com', - // [Network.AVAIL_TURING]: 'avail-turing-rpc.publicnode.com', - // [Network.MEDIBLOC_MAINNET]: 'medibloc-rpc.publicnode.com:443', - // [Network.DASH_MAINNET]: 'dash-rpc.publicnode.com', - // [Network.PIVX_MAINNET]: 'pivx-rpc.publicnode.com', - // [Network.FIRO_MAINNET]: 'firo-rpc.publicnode.com', - // [Network.MANTA_ATLANTIC]: 'manta-atlantic-rpc.publicnode.com', - // [Network.CROWN_MAINNET]: 'crown-rpc.publicnode.com', - // [Network.DEFICHAIN_MAINNET]: 'defichain-rpc.publicnode.com', - // [Network.PAC_PROTOCOL_MAINNET]: 'pacprotocol-rpc.publicnode.com', - // [Network.WAGERR_MAINNET]: 'wagerr-rpc.publicnode.com', - //deprecated + [Network.HAQQ_MAINNET]: 'haqq-evm-rpc.publicnode.com', + [Network.EVMOS_MAINNET]: 'evmos-evm-rpc.publicnode.com', + [Network.EVMOS_TESTNET]: 'evmos-testnet-evm-rpc.publicnode.com', + [Network.BERACHAIN_TESTNET]: 'berachain-testnet-evm-rpc.publicnode.com', + // deprecated [Network.ETH_MAINNET]: 'ethereum-rpc.publicnode.com', [Network.ETH_SEPOLIA]: 'ethereum-sepolia-rpc.publicnode.com', [Network.ETH_HOLESKY]: 'ethereum-holesky-rpc.publicnode.com', [Network.BSC_MAINNET]: 'bsc-rpc.publicnode.com', [Network.BSC_TESTNET]: 'bsc-testnet-rpc.publicnode.com', [Network.POLYGON_MAINNET]: 'polygon-bor-rpc.publicnode.com', - // [Network.POLYGON_HEIMDALL_MAINNET]: 'polygon-heimdall-rpc.publicnode.com:443', [Network.BASE_MAINNET]: 'base-rpc.publicnode.com', [Network.BASE_SEPOLIA]: 'base-sepolia-rpc.publicnode.com', [Network.ARBITRUM_ONE]: 'arbitrum-one-rpc.publicnode.com', @@ -222,19 +90,15 @@ export class PublicNodeProvider< [Network.OPTIMISM_SEPOLIA]: 'optimism-sepolia-rpc.publicnode.com', [Network.FANTOM_MAINNET]: 'fantom-rpc.publicnode.com', [Network.FANTOM_TESTNET]: 'fantom-testnet-rpc.publicnode.com', - // [Network.SUI_TESTNET]: 'sui-testnet-rpc.publicnode.com', [Network.OPBNB_MAINNET]: 'opbnb-rpc.publicnode.com', [Network.OPBNB_TESTNET]: 'opbnb-testnet-rpc.publicnode.com', [Network.GNOSIS_CHIADO]: 'gnosis-chiado-rpc.publicnode.com', - [Network.SOLANA_MAINNET]: 'solana-rpc.publicnode.com', - [Network.POLKADOT_MAINNET]: 'polkadot-rpc.publicnode.com', [Network.CHILIZ_MAINNET]: 'chiliz-rpc.publicnode.com', [Network.CHILIZ_SPICY]: 'chiliz-spicy-rpc.publicnode.com', [Network.MOONBEAM_MAINNET]: 'moonbeam-rpc.publicnode.com', [Network.BAHAMUT_MAINNET]: 'bahamut-rpc.publicnode.com', [Network.TRON_MAINNET]: 'tron-evm-rpc.publicnode.com', [Network.MOONRIVER_MAINNET]: 'moonriver-rpc.publicnode.com', - // [Network.KUSAMA_MAINNET]: 'kusama-rpc.publicnode.com', }; // eslint-disable-next-line class-methods-use-this public getRPCURL(network: Network, transport: Transport, _: string, _host: string) { diff --git a/packages/web3/test/integration/web3RPCProviders.test.ts b/packages/web3/test/integration/web3RPCProviders.test.ts index c9ad86b0287..6e6d2994f9c 100644 --- a/packages/web3/test/integration/web3RPCProviders.test.ts +++ b/packages/web3/test/integration/web3RPCProviders.test.ts @@ -24,25 +24,6 @@ import { } from 'web3-rpc-providers'; import { Web3 } from '../../src/index'; -type SpecialMethod = (web3: Web3) => Promise; -type SpecialMethods = { [key: string]: SpecialMethod }; - -const runRpcMethod = async (web3: Web3, method: string) => - web3.requestManager.send({ - method, - }); - -const specialMethods: SpecialMethods = { - [Network.POLKADOT_MAINNET]: async (web3: Web3) => { - const res = await runRpcMethod(web3, 'chain_getBlock'); - return web3.utils.toBigInt(res.block.header.number); - }, - [Network.SOLANA_MAINNET]: async (web3: Web3) => { - const res = await runRpcMethod(web3, 'getBlockHeight'); - return web3.utils.toBigInt(res); - }, -}; - describe('Web3 RPC Provider Integration tests', () => { const transports = Object.values(Transport); const networks = [ @@ -75,157 +56,84 @@ describe('Web3 RPC Provider Integration tests', () => { }); const publicNodeNetworks = [ - //- Network.COREUM_MAINNET, - //- Network.STRIDE_MAINNET, - //- Network.REGEN_MAINNET, - //- Network.SENTINEL_MAINNET, - //- Network.STARGAZE_MAINNET, - //- Network.ASSETMANTLE_MAINNET, - //- Network.TENET_EVM_MAINNET, - //- Network.TENET_MAINNET, - //- Network.CHIHUAHUA_MAINNET, - //- Network.FETCH_AI_MAINNET, - //- Network.ELYS_NETWORK_TESTNET, - //- Network.TERITORI_MAINNET, - //- Network.NOLUS_MAINNET, - //- Network.IRISNET_EVM_MAINNET, - //- Network.IRISNET_MAINNET, - //- Network.QUASAR_MAINNET, - //- Network.REBUS_MAINNET, - //- Network.SIFCHAIN_MAINNET, - //- Network.SAGA_MAINNET, - //- Network.COMDEX_MAINNET, - //- Network.MARS_PROTOCOL_MAINNET, - //- Network.PERSISTENCE_MAINNET, - //- Network.QUICKSILVER_MAINNET, - //- Network.MANTRA_TESTNET, - //- Network.NIBIRU_MAINNET, - //- Network.SHENTU_MAINNET, - //- Network.BITCOIN_MAINNET, - //- Network.BITCOIN_TESTNET, - //- Network.BITCANNA_MAINNET, - //- Network.LAVA_NETWORK_MAINNET, - //- Network.AXELAR_MAINNET, - //- Network.PASSAGE_MAINNET, - //- Network.RIZON_MAINNET, - //- Network.XPLA_EVM_MAINNET, - //- Network.XPLA_MAINNET, - //- Network.OMNIFLIX_NETWORK_MAINNET, - //- Network.MIGALOO_MAINNET, - //- Network.CELER_NETWORK_MAINNET, - //- Network.CUDOS_MAINNET, - //- Network.DORA_FACTORY_MAINNET, - //- Network.GOVGEN_MAINNET, - //- Network.CHEQD_MAINNET, - //- Network.AVAIL_MAINNET, - //- Network.AVAIL_TURING, - //- Network.MEDIBLOC_MAINNET, - //- Network.DASH_MAINNET, - //- Network.PIVX_MAINNET, - //- Network.FIRO_MAINNET, - //- Network.MANTA_ATLANTIC, - endpoint not working - // - Network.CROWN_MAINNET, - //- Network.DEFICHAIN_MAINNET, - //- Network.PAC_PROTOCOL_MAINNET, - //- Network.WAGERR_MAINNET, - //- Network.SUI_TESTNET, - //- Network.KUSAMA_MAINNET, - //- Network.INJECTIVE_MAINNET, - //- Network.INJECTIVE_TESTNET, - //- Network.OSMOSIS_MAINNET, - //- Network.SUI_MAINNET, - //- Network.TERRA_CLASSIC_MAINNET, - //- Network.KUJIRA_MAINNET, - //- Network.SEI_MAINNET, - //- Network.DYDX_MAINNET, - //- Network.ORAICHAIN_MAINNET, - //- Network.COSMOS_MAINNET, - //- Network.TERRA_MAINNET, - //- Network.NEUTRON_MAINNET, - //- Network.HAQQ_MAINNET, - //- Network.EVMOS_MAINNET, - //- Network.EVMOS_TESTNET, - //- Network.CELESTIA_MAINNET, - //- Network.CELESTIA_MOCHA, - //- Network.BERACHAIN_TESTNET, - //- Network.JUNO_MAINNET, - //- Network.CRONOS_POS_CHAIN_MAINNET, - //- Network.AKASH_NETWORK_MAINNET, - // Network.POLYGON_AMOY, - // Network.POLYGON_MAINNET, - // Network.DYMENSION_MAINNET, - // Network.DYMENSION_TESTNET, - // Network.BLAST_MAINNET, - // Network.GNOSIS_MAINNET, - // Network.PULSECHAIN_MAINNET, - // Network.PULSECHAIN_TESTNET, - // Network.KAVA_MAINNET, - // Network.CRONOS_MAINNET, - // Network.MANTLE_MAINNET, - // Network.HAQQ_MAINNET, - // Network.TAIKO_MAINNET, - // Network.TAIKO_HEKLA, - // Network.EVMOS_MAINNET, - // Network.EVMOS_TESTNET, - // Network.BERACHAIN_TESTNET, - // Network.LINEA_MAINNET, - // Network.LINEA_SEPOLIA, - // Network.SCROLL_MAINNET, - // Network.SCROLL_SEPOLIA, - // Network.SYSCOIN_MAINNET, - // Network.SYSCOIN_TANENBAUM, - // Network.ETH_MAINNET, - // Network.ETH_SEPOLIA, - // Network.ETH_HOLESKY, - // Network.BSC_MAINNET, - // Network.BSC_TESTNET, - // Network.BASE_MAINNET, - // Network.BASE_SEPOLIA, - // Network.ARBITRUM_ONE, - // Network.ARBITRUM_NOVA, - // Network.ARBITRUM_SEPOLIA, - // Network.AVALANCHE_C_MAINNET, - // Network.AVALANCHE_P_MAINNET, - // Network.AVALANCHE_X_MAINNET, - // Network.AVALANCHE_FUJI_C, - // Network.AVALANCHE_FUJI_P, - // Network.AVALANCHE_FUJI_X, - // Network.OPTIMISM_MAINNET, - // Network.OPTIMISM_SEPOLIA, - // Network.FANTOM_MAINNET, - // Network.FANTOM_TESTNET, - // Network.OPBNB_MAINNET, - // Network.OPBNB_TESTNET, - // Network.GNOSIS_CHIADO, - // Network.SOLANA_MAINNET, - // Network.POLKADOT_MAINNET, - // Network.CHILIZ_MAINNET, - // Network.CHILIZ_SPICY, - // Network.MOONBEAM_MAINNET, - // Network.BAHAMUT_MAINNET, - // Network.TRON_MAINNET, - // Network.MOONRIVER_MAINNET, + Network.POLYGON_AMOY, + Network.POLYGON_MAINNET, + Network.DYMENSION_MAINNET, + Network.DYMENSION_TESTNET, + Network.BLAST_MAINNET, + Network.GNOSIS_MAINNET, + Network.PULSECHAIN_MAINNET, + Network.PULSECHAIN_TESTNET, + Network.KAVA_MAINNET, + Network.CRONOS_MAINNET, + Network.MANTLE_MAINNET, + Network.HAQQ_MAINNET, + Network.TAIKO_MAINNET, + Network.TAIKO_HEKLA, + Network.EVMOS_MAINNET, + Network.EVMOS_TESTNET, + Network.BERACHAIN_TESTNET, + Network.LINEA_MAINNET, + Network.LINEA_SEPOLIA, + Network.SCROLL_MAINNET, + Network.SCROLL_SEPOLIA, + Network.SYSCOIN_MAINNET, + Network.SYSCOIN_TANENBAUM, + Network.ETH_MAINNET, + Network.ETH_SEPOLIA, + Network.ETH_HOLESKY, + Network.BSC_MAINNET, + Network.BSC_TESTNET, + Network.BASE_MAINNET, + Network.BASE_SEPOLIA, + Network.ARBITRUM_ONE, + Network.ARBITRUM_NOVA, + Network.ARBITRUM_SEPOLIA, + Network.AVALANCHE_C_MAINNET, + Network.AVALANCHE_P_MAINNET, + Network.AVALANCHE_X_MAINNET, + Network.AVALANCHE_FUJI_C, + Network.AVALANCHE_FUJI_P, + Network.AVALANCHE_FUJI_X, + Network.OPTIMISM_MAINNET, + Network.OPTIMISM_SEPOLIA, + Network.FANTOM_MAINNET, + Network.FANTOM_TESTNET, + Network.OPBNB_MAINNET, + Network.OPBNB_TESTNET, + Network.GNOSIS_CHIADO, + Network.CHILIZ_MAINNET, + Network.CHILIZ_SPICY, + Network.MOONBEAM_MAINNET, + Network.BAHAMUT_MAINNET, + Network.TRON_MAINNET, + Network.MOONRIVER_MAINNET, ]; - // transports.forEach(transport => { - [Transport.HTTPS].forEach(transport => { + transports.forEach(transport => { publicNodeNetworks.forEach(network => { - it.only(`PublicNodeProvider should work with ${transport} transport and ${network} network`, async () => { - const provider = new PublicNodeProvider(network, transport); - const web3 = new Web3(provider); - - const specialMethod = specialMethods[network]; - - const result = await (specialMethod - ? specialMethod(web3) - : web3.eth.getBlockNumber()); - - expect(typeof result).toBe('bigint'); - expect(result > 0).toBe(true); - - if (transport === Transport.WebSocket) { - web3.provider?.disconnect(); - } - }); + if ( + !( + [ + Network.AVALANCHE_P_MAINNET, + Network.AVALANCHE_X_MAINNET, + Network.AVALANCHE_FUJI_X, + Network.AVALANCHE_FUJI_P, + ].includes(network) && transport === Transport.WebSocket + ) + ) { + it(`PublicNodeProvider should work with ${transport} transport and ${network} network`, async () => { + const provider = new PublicNodeProvider(network, transport); + const web3 = new Web3(provider); + const result = await web3.eth.getBlockNumber(); + + expect(typeof result).toBe('bigint'); + expect(result > 0).toBe(true); + + if (transport === Transport.WebSocket) { + web3.provider?.disconnect(); + } + }); + } }); }); From 29e87ee668592d9c5189a9a7e6be5376a4a4a056 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Fri, 11 Oct 2024 19:48:43 -0400 Subject: [PATCH 3/8] add unit test --- .../src/web3_provider_publicnode.ts | 3 +-- .../test/unit/request.test.ts | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/packages/web3-rpc-providers/src/web3_provider_publicnode.ts b/packages/web3-rpc-providers/src/web3_provider_publicnode.ts index f0b16823e6d..645f8e354e9 100644 --- a/packages/web3-rpc-providers/src/web3_provider_publicnode.ts +++ b/packages/web3-rpc-providers/src/web3_provider_publicnode.ts @@ -38,11 +38,10 @@ export class PublicNodeProvider< public constructor( network: Network = Network.ETH_MAINNET, transport: Transport = Transport.HTTPS, - token = '', host = '', providerConfigOptions?: HttpProviderOptions | SocketOptions, ) { - super(network, transport, token, host, providerConfigOptions); + super(network, transport, '', host, providerConfigOptions); } public static readonly networkHostMap: { [key: string]: string } = { [Network.POLYGON_AMOY]: 'polygon-amoy-bor-rpc.publicnode.com', diff --git a/packages/web3-rpc-providers/test/unit/request.test.ts b/packages/web3-rpc-providers/test/unit/request.test.ts index 3de14fc0513..da07c2a578c 100644 --- a/packages/web3-rpc-providers/test/unit/request.test.ts +++ b/packages/web3-rpc-providers/test/unit/request.test.ts @@ -20,6 +20,7 @@ import { Network, Transport } from '../../src/types'; import { Web3ExternalProvider } from '../../src/web3_provider'; import { QuickNodeRateLimitError } from '../../src/errors'; import { QuickNodeProvider } from '../../src/web3_provider_quicknode'; +import { PublicNodeProvider } from '../../src/web3_provider_publicnode'; jest.mock('web3-providers-ws', () => { return { @@ -122,4 +123,27 @@ describe('Web3ExternalProvider', () => { }; await expect(provider.request(payload)).rejects.toThrow(QuickNodeRateLimitError); }); + + it('should make a request using the PublicNodeProvider provider', async () => { + const network: Network = Network.ETH_MAINNET; + const transport: Transport = Transport.HTTPS; + + const mockHttpProvider = { + request: jest.fn(), + }; + + const mockResponse = { result: 'mock-result' }; + mockHttpProvider.request.mockResolvedValue(mockResponse); + + const provider = new PublicNodeProvider(network, transport); + (provider as any).provider = mockHttpProvider; + + const payload: Web3APIPayload> = { + method: 'eth_getBalance', + params: ['0x0123456789012345678901234567890123456789', 'latest'], + }; + + const result = await provider.request(payload); + expect(result).toEqual(mockResponse); + }); }); From b7d271ceaee01859d7f4e79c3658ae8bbfbee61c Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Wed, 16 Oct 2024 18:25:01 -0400 Subject: [PATCH 4/8] add changelog --- CHANGELOG.md | 22 +++++++++++++++++-- packages/web3-rpc-providers/CHANGELOG.md | 4 ++++ .../src/web3_provider_publicnode.ts | 1 - 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0666ebd3166..268eaa92a47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2735,12 +2735,30 @@ If there are any bugs, improvements, optimizations or any new feature proposal f - `syncing` subscription now supports Besu and Nethermind payload format +#### web3-rpc-providers + +- PublicNodeProvider was added (#7322) + ### Changed +#### web3 + +- Exported EIP-6963 types are no longer under the `providers` namespace. (#7270) + #### web3-eth - Allow `getEthereumjsTxDataFrom` to return additional fields that may be passed if using a `customTransactionSchema`. -#### web3 +#### web3-types -- Exported EIP-6963 types are no longer under the `providers` namespace. (#7270) +- update the type for `baseFeePerGas` at `web3.eth.getFeeHistory` to be a number. (#7291) + +### Fixed + +#### web3-eth-abi + +- `decodeLog` , `decodeParametersWith` , `decodeParameters` and `decodeParameters` now accepts first immutable param as well (#7288) + +#### web3-utils + +- fix `padRight` validation failure on large `uint` (#7265) diff --git a/packages/web3-rpc-providers/CHANGELOG.md b/packages/web3-rpc-providers/CHANGELOG.md index a9e2c2a8b79..110b620707d 100644 --- a/packages/web3-rpc-providers/CHANGELOG.md +++ b/packages/web3-rpc-providers/CHANGELOG.md @@ -59,3 +59,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added optional `HttpProviderOptions | SocketOptions` in `Web3ExternalProvider` and `QuickNodeProvider` for provider configs ## [Unreleased] + +### Added + +- PublicNodeProvider was added (#7322) diff --git a/packages/web3-rpc-providers/src/web3_provider_publicnode.ts b/packages/web3-rpc-providers/src/web3_provider_publicnode.ts index 645f8e354e9..c4f44c2ae6f 100644 --- a/packages/web3-rpc-providers/src/web3_provider_publicnode.ts +++ b/packages/web3-rpc-providers/src/web3_provider_publicnode.ts @@ -62,7 +62,6 @@ export class PublicNodeProvider< [Network.SCROLL_SEPOLIA]: 'scroll-sepolia-rpc.publicnode.com', [Network.SYSCOIN_MAINNET]: 'syscoin-evm-rpc.publicnode.com', [Network.SYSCOIN_TANENBAUM]: 'syscoin-tanenbaum-evm-rpc.publicnode.com', - [Network.HAQQ_MAINNET]: 'haqq-evm-rpc.publicnode.com', [Network.EVMOS_MAINNET]: 'evmos-evm-rpc.publicnode.com', [Network.EVMOS_TESTNET]: 'evmos-testnet-evm-rpc.publicnode.com', From 80e2340dede7bd05c41392fe9b5a08491ac79d20 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Tue, 22 Oct 2024 10:11:57 -0400 Subject: [PATCH 5/8] Update CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a7bdee5a44..d9abf6019de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2765,3 +2765,9 @@ If there are any bugs, improvements, optimizations or any new feature proposal f - fix `padRight` validation failure on large `uint` (#7265) ## [Unreleased] + +### Added + +#### web3-rpc-providers + +- PublicNodeProvider was added (#7322) From 8a234f00b2630dac05051d3acc02589b59592a04 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Tue, 22 Oct 2024 12:41:58 -0400 Subject: [PATCH 6/8] Update web3_provider_publicnode.ts --- packages/web3-rpc-providers/src/web3_provider_publicnode.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/web3-rpc-providers/src/web3_provider_publicnode.ts b/packages/web3-rpc-providers/src/web3_provider_publicnode.ts index c4f44c2ae6f..23f14a97b06 100644 --- a/packages/web3-rpc-providers/src/web3_provider_publicnode.ts +++ b/packages/web3-rpc-providers/src/web3_provider_publicnode.ts @@ -66,7 +66,6 @@ export class PublicNodeProvider< [Network.EVMOS_MAINNET]: 'evmos-evm-rpc.publicnode.com', [Network.EVMOS_TESTNET]: 'evmos-testnet-evm-rpc.publicnode.com', [Network.BERACHAIN_TESTNET]: 'berachain-testnet-evm-rpc.publicnode.com', - // deprecated [Network.ETH_MAINNET]: 'ethereum-rpc.publicnode.com', [Network.ETH_SEPOLIA]: 'ethereum-sepolia-rpc.publicnode.com', [Network.ETH_HOLESKY]: 'ethereum-holesky-rpc.publicnode.com', From 2ea754374fb2428175ba185d524fb3a15d084bd6 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Wed, 23 Oct 2024 10:43:41 -0400 Subject: [PATCH 7/8] fix --- .../src/web3_provider_publicnode.ts | 106 +++++++++--------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/packages/web3-rpc-providers/src/web3_provider_publicnode.ts b/packages/web3-rpc-providers/src/web3_provider_publicnode.ts index 23f14a97b06..397cd001a3d 100644 --- a/packages/web3-rpc-providers/src/web3_provider_publicnode.ts +++ b/packages/web3-rpc-providers/src/web3_provider_publicnode.ts @@ -44,62 +44,62 @@ export class PublicNodeProvider< super(network, transport, '', host, providerConfigOptions); } public static readonly networkHostMap: { [key: string]: string } = { - [Network.POLYGON_AMOY]: 'polygon-amoy-bor-rpc.publicnode.com', - [Network.DYMENSION_MAINNET]: 'dymension-evm-rpc.publicnode.com', - [Network.DYMENSION_TESTNET]: 'dymension-testnet-evm-rpc.publicnode.com', - [Network.BLAST_MAINNET]: 'blast-rpc.publicnode.com', - [Network.GNOSIS_MAINNET]: 'gnosis-rpc.publicnode.com', - [Network.PULSECHAIN_MAINNET]: 'pulsechain-rpc.publicnode.com', - [Network.PULSECHAIN_TESTNET]: 'pulsechain-testnet-rpc.publicnode.com', - [Network.KAVA_MAINNET]: 'kava-evm-rpc.publicnode.com', - [Network.CRONOS_MAINNET]: 'cronos-evm-rpc.publicnode.com', - [Network.MANTLE_MAINNET]: 'mantle-rpc.publicnode.com', - [Network.TAIKO_MAINNET]: 'taiko-rpc.publicnode.com', - [Network.TAIKO_HEKLA]: 'taiko-hekla-rpc.publicnode.com', - [Network.LINEA_MAINNET]: 'linea-rpc.publicnode.com', - [Network.LINEA_SEPOLIA]: 'linea-sepolia-rpc.publicnode.com', - [Network.SCROLL_MAINNET]: 'scroll-rpc.publicnode.com', - [Network.SCROLL_SEPOLIA]: 'scroll-sepolia-rpc.publicnode.com', - [Network.SYSCOIN_MAINNET]: 'syscoin-evm-rpc.publicnode.com', - [Network.SYSCOIN_TANENBAUM]: 'syscoin-tanenbaum-evm-rpc.publicnode.com', - [Network.HAQQ_MAINNET]: 'haqq-evm-rpc.publicnode.com', - [Network.EVMOS_MAINNET]: 'evmos-evm-rpc.publicnode.com', - [Network.EVMOS_TESTNET]: 'evmos-testnet-evm-rpc.publicnode.com', - [Network.BERACHAIN_TESTNET]: 'berachain-testnet-evm-rpc.publicnode.com', - [Network.ETH_MAINNET]: 'ethereum-rpc.publicnode.com', - [Network.ETH_SEPOLIA]: 'ethereum-sepolia-rpc.publicnode.com', - [Network.ETH_HOLESKY]: 'ethereum-holesky-rpc.publicnode.com', - [Network.BSC_MAINNET]: 'bsc-rpc.publicnode.com', - [Network.BSC_TESTNET]: 'bsc-testnet-rpc.publicnode.com', - [Network.POLYGON_MAINNET]: 'polygon-bor-rpc.publicnode.com', - [Network.BASE_MAINNET]: 'base-rpc.publicnode.com', - [Network.BASE_SEPOLIA]: 'base-sepolia-rpc.publicnode.com', - [Network.ARBITRUM_ONE]: 'arbitrum-one-rpc.publicnode.com', - [Network.ARBITRUM_NOVA]: 'arbitrum-nova-rpc.publicnode.com', - [Network.ARBITRUM_SEPOLIA]: 'arbitrum-sepolia-rpc.publicnode.com', - [Network.AVALANCHE_C_MAINNET]: 'avalanche-c-chain-rpc.publicnode.com', - [Network.AVALANCHE_P_MAINNET]: 'avalanche-p-chain-rpc.publicnode.com', - [Network.AVALANCHE_X_MAINNET]: 'avalanche-x-chain-rpc.publicnode.com', - [Network.AVALANCHE_FUJI_C]: 'avalanche-fuji-c-chain-rpc.publicnode.com', - [Network.AVALANCHE_FUJI_P]: 'avalanche-fuji-p-chain-rpc.publicnode.com', - [Network.AVALANCHE_FUJI_X]: 'avalanche-fuji-x-chain-rpc.publicnode.com', - [Network.OPTIMISM_MAINNET]: 'optimism-rpc.publicnode.com', - [Network.OPTIMISM_SEPOLIA]: 'optimism-sepolia-rpc.publicnode.com', - [Network.FANTOM_MAINNET]: 'fantom-rpc.publicnode.com', - [Network.FANTOM_TESTNET]: 'fantom-testnet-rpc.publicnode.com', - [Network.OPBNB_MAINNET]: 'opbnb-rpc.publicnode.com', - [Network.OPBNB_TESTNET]: 'opbnb-testnet-rpc.publicnode.com', - [Network.GNOSIS_CHIADO]: 'gnosis-chiado-rpc.publicnode.com', - [Network.CHILIZ_MAINNET]: 'chiliz-rpc.publicnode.com', - [Network.CHILIZ_SPICY]: 'chiliz-spicy-rpc.publicnode.com', - [Network.MOONBEAM_MAINNET]: 'moonbeam-rpc.publicnode.com', - [Network.BAHAMUT_MAINNET]: 'bahamut-rpc.publicnode.com', - [Network.TRON_MAINNET]: 'tron-evm-rpc.publicnode.com', - [Network.MOONRIVER_MAINNET]: 'moonriver-rpc.publicnode.com', + [Network.POLYGON_AMOY]: 'polygon-amoy-bor-rpc', + [Network.DYMENSION_MAINNET]: 'dymension-evm-rpc', + [Network.DYMENSION_TESTNET]: 'dymension-testnet-evm-rpc', + [Network.BLAST_MAINNET]: 'blast-rpc', + [Network.GNOSIS_MAINNET]: 'gnosis-rpc', + [Network.PULSECHAIN_MAINNET]: 'pulsechain-rpc', + [Network.PULSECHAIN_TESTNET]: 'pulsechain-testnet-rpc', + [Network.KAVA_MAINNET]: 'kava-evm-rpc', + [Network.CRONOS_MAINNET]: 'cronos-evm-rpc', + [Network.MANTLE_MAINNET]: 'mantle-rpc', + [Network.TAIKO_MAINNET]: 'taiko-rpc', + [Network.TAIKO_HEKLA]: 'taiko-hekla-rpc', + [Network.LINEA_MAINNET]: 'linea-rpc', + [Network.LINEA_SEPOLIA]: 'linea-sepolia-rpc', + [Network.SCROLL_MAINNET]: 'scroll-rpc', + [Network.SCROLL_SEPOLIA]: 'scroll-sepolia-rpc', + [Network.SYSCOIN_MAINNET]: 'syscoin-evm-rpc', + [Network.SYSCOIN_TANENBAUM]: 'syscoin-tanenbaum-evm-rpc', + [Network.HAQQ_MAINNET]: 'haqq-evm-rpc', + [Network.EVMOS_MAINNET]: 'evmos-evm-rpc', + [Network.EVMOS_TESTNET]: 'evmos-testnet-evm-rpc', + [Network.BERACHAIN_TESTNET]: 'berachain-testnet-evm-rpc', + [Network.ETH_MAINNET]: 'ethereum-rpc', + [Network.ETH_SEPOLIA]: 'ethereum-sepolia-rpc', + [Network.ETH_HOLESKY]: 'ethereum-holesky-rpc', + [Network.BSC_MAINNET]: 'bsc-rpc', + [Network.BSC_TESTNET]: 'bsc-testnet-rpc', + [Network.POLYGON_MAINNET]: 'polygon-bor-rpc', + [Network.BASE_MAINNET]: 'base-rpc', + [Network.BASE_SEPOLIA]: 'base-sepolia-rpc', + [Network.ARBITRUM_ONE]: 'arbitrum-one-rpc', + [Network.ARBITRUM_NOVA]: 'arbitrum-nova-rpc', + [Network.ARBITRUM_SEPOLIA]: 'arbitrum-sepolia-rpc', + [Network.AVALANCHE_C_MAINNET]: 'avalanche-c-chain-rpc', + [Network.AVALANCHE_P_MAINNET]: 'avalanche-p-chain-rpc', + [Network.AVALANCHE_X_MAINNET]: 'avalanche-x-chain-rpc', + [Network.AVALANCHE_FUJI_C]: 'avalanche-fuji-c-chain-rpc', + [Network.AVALANCHE_FUJI_P]: 'avalanche-fuji-p-chain-rpc', + [Network.AVALANCHE_FUJI_X]: 'avalanche-fuji-x-chain-rpc', + [Network.OPTIMISM_MAINNET]: 'optimism-rpc', + [Network.OPTIMISM_SEPOLIA]: 'optimism-sepolia-rpc', + [Network.FANTOM_MAINNET]: 'fantom-rpc', + [Network.FANTOM_TESTNET]: 'fantom-testnet-rpc', + [Network.OPBNB_MAINNET]: 'opbnb-rpc', + [Network.OPBNB_TESTNET]: 'opbnb-testnet-rpc', + [Network.GNOSIS_CHIADO]: 'gnosis-chiado-rpc', + [Network.CHILIZ_MAINNET]: 'chiliz-rpc', + [Network.CHILIZ_SPICY]: 'chiliz-spicy-rpc', + [Network.MOONBEAM_MAINNET]: 'moonbeam-rpc', + [Network.BAHAMUT_MAINNET]: 'bahamut-rpc', + [Network.TRON_MAINNET]: 'tron-evm-rpc', + [Network.MOONRIVER_MAINNET]: 'moonriver-rpc', }; // eslint-disable-next-line class-methods-use-this public getRPCURL(network: Network, transport: Transport, _: string, _host: string) { - const defaultHost = PublicNodeProvider.networkHostMap[network]; + const defaultHost = `${PublicNodeProvider.networkHostMap[network]}.publicnode.com`; if (!defaultHost) { throw new Error('Network info not avalible.'); } From 85a0f06b0a3b01a4b3c32d2ea51682847933236b Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Wed, 23 Oct 2024 10:44:58 -0400 Subject: [PATCH 8/8] Update web3_provider_publicnode.ts --- packages/web3-rpc-providers/src/web3_provider_publicnode.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/web3-rpc-providers/src/web3_provider_publicnode.ts b/packages/web3-rpc-providers/src/web3_provider_publicnode.ts index 397cd001a3d..027d7a45921 100644 --- a/packages/web3-rpc-providers/src/web3_provider_publicnode.ts +++ b/packages/web3-rpc-providers/src/web3_provider_publicnode.ts @@ -99,10 +99,10 @@ export class PublicNodeProvider< }; // eslint-disable-next-line class-methods-use-this public getRPCURL(network: Network, transport: Transport, _: string, _host: string) { - const defaultHost = `${PublicNodeProvider.networkHostMap[network]}.publicnode.com`; - if (!defaultHost) { + if (!PublicNodeProvider.networkHostMap[network]) { throw new Error('Network info not avalible.'); } + const defaultHost = `${PublicNodeProvider.networkHostMap[network]}.publicnode.com`; const host = isValid(_host) ? _host : defaultHost; if (websocketExclusions.includes(network) && transport === Transport.WebSocket) { return `${transport}://${host}/websocket`;