Added modern networks, updated third-party backend URLs and added QuickNode (#3935, #4010).

This commit is contained in:
Richard Moore 2024-02-22 17:40:57 -05:00
parent f05c847398
commit f7c813d313
6 changed files with 132 additions and 1 deletions

View File

@ -74,6 +74,12 @@ function ethDefaultProvider(network: string | Network): Renetworkable {
} catch(error) { } } catch(error) { }
} }
if (providers.QuickNodeProvider && options.quicknode !== "-") {
try {
providerList.push(new providers.QuickNodeProvider(network, options.quicknode));
} catch(error) { }
}
if (providerList.length === 0) { return null; } if (providerList.length === 0) { return null; }
if (providers.FallbackProvider) { if (providers.FallbackProvider) {
@ -172,6 +178,11 @@ const networks: { [name: string]: Network } = {
_defaultProvider: ethDefaultProvider("sepolia") _defaultProvider: ethDefaultProvider("sepolia")
}, },
holesky: {
chainId: 17000,
name: "holesky",
_defaultProvider: ethDefaultProvider("holesky")
},
// ETC (See: #351) // ETC (See: #351)
classic: { classic: {
@ -198,7 +209,11 @@ const networks: { [name: string]: Network } = {
name: "matic", name: "matic",
_defaultProvider: ethDefaultProvider("matic") _defaultProvider: ethDefaultProvider("matic")
}, },
maticmum: { chainId: 80001, name: "maticmum" }, maticmum: {
chainId: 80001,
name: "maticmum",
_defaultProvider: ethDefaultProvider("maticmum")
},
optimism: { optimism: {
chainId: 10, chainId: 10,
@ -207,10 +222,12 @@ const networks: { [name: string]: Network } = {
}, },
"optimism-kovan": { chainId: 69, name: "optimism-kovan" }, "optimism-kovan": { chainId: 69, name: "optimism-kovan" },
"optimism-goerli": { chainId: 420, name: "optimism-goerli" }, "optimism-goerli": { chainId: 420, name: "optimism-goerli" },
"optimism-sepolia": { chainId: 11155420, name: "optimism-sepolia" },
arbitrum: { chainId: 42161, name: "arbitrum" }, arbitrum: { chainId: 42161, name: "arbitrum" },
"arbitrum-rinkeby": { chainId: 421611, name: "arbitrum-rinkeby" }, "arbitrum-rinkeby": { chainId: 421611, name: "arbitrum-rinkeby" },
"arbitrum-goerli": { chainId: 421613, name: "arbitrum-goerli" }, "arbitrum-goerli": { chainId: 421613, name: "arbitrum-goerli" },
"arbitrum-sepolia": { chainId: 421614, name: "arbitrum-sepolia" },
bnb: { chainId: 56, name: "bnb" }, bnb: { chainId: 56, name: "bnb" },
bnbt: { chainId: 97, name: "bnbt" }, bnbt: { chainId: 97, name: "bnbt" },

View File

@ -61,6 +61,9 @@ export class AlchemyProvider extends UrlJsonRpcProvider {
case "goerli": case "goerli":
host = "eth-goerli.g.alchemy.com/v2/"; host = "eth-goerli.g.alchemy.com/v2/";
break; break;
case "sepolia":
host = "eth-sepolia.g.alchemy.com/v2/";
break;
case "matic": case "matic":
host = "polygon-mainnet.g.alchemy.com/v2/"; host = "polygon-mainnet.g.alchemy.com/v2/";
break; break;
@ -73,12 +76,18 @@ export class AlchemyProvider extends UrlJsonRpcProvider {
case "arbitrum-goerli": case "arbitrum-goerli":
host = "arb-goerli.g.alchemy.com/v2/"; host = "arb-goerli.g.alchemy.com/v2/";
break; break;
case "arbitrum-sepolia":
host = "arb-sepolia.g.alchemy.com/v2/";
break;
case "optimism": case "optimism":
host = "opt-mainnet.g.alchemy.com/v2/"; host = "opt-mainnet.g.alchemy.com/v2/";
break; break;
case "optimism-goerli": case "optimism-goerli":
host = "opt-goerli.g.alchemy.com/v2/" host = "opt-goerli.g.alchemy.com/v2/"
break; break;
case "optimism-sepolia":
host = "opt-sepolia.g.alchemy.com/v2/"
break;
default: default:
logger.throwArgumentError("unsupported network", "network", arguments[0]); logger.throwArgumentError("unsupported network", "network", arguments[0]);
} }

View File

@ -23,9 +23,20 @@ function getHost(name: string): string {
return "rpc.ankr.com/eth_rinkeby/"; return "rpc.ankr.com/eth_rinkeby/";
case "goerli": case "goerli":
return "rpc.ankr.com/eth_goerli/"; return "rpc.ankr.com/eth_goerli/";
case "sepolia":
return "rpc.ankr.com/eth_sepolia/";
case "matic": case "matic":
return "rpc.ankr.com/polygon/"; return "rpc.ankr.com/polygon/";
case "maticmum":
return "rpc.ankr.com/polygon_mumbai/";
case "optimism":
return "rpc.ankr.com/optimism/";
case "optimism-goerli":
return "rpc.ankr.com/optimism_testnet/";
case "optimism-sepolia":
return "rpc.ankr.com/optimism_sepolia/";
case "arbitrum": case "arbitrum":
return "rpc.ankr.com/arbitrum/"; return "rpc.ankr.com/arbitrum/";

View File

@ -30,6 +30,7 @@ import { JsonRpcProvider, JsonRpcSigner } from "./json-rpc-provider";
import { JsonRpcBatchProvider } from "./json-rpc-batch-provider"; import { JsonRpcBatchProvider } from "./json-rpc-batch-provider";
import { NodesmithProvider } from "./nodesmith-provider"; import { NodesmithProvider } from "./nodesmith-provider";
import { PocketProvider } from "./pocket-provider"; import { PocketProvider } from "./pocket-provider";
import { QuickNodeProvider } from "./quicknode-provider";
import { StaticJsonRpcProvider, UrlJsonRpcProvider } from "./url-json-rpc-provider"; import { StaticJsonRpcProvider, UrlJsonRpcProvider } from "./url-json-rpc-provider";
import { Web3Provider } from "./web3-provider"; import { Web3Provider } from "./web3-provider";
import { WebSocketProvider } from "./websocket-provider"; import { WebSocketProvider } from "./websocket-provider";
@ -84,6 +85,7 @@ function getDefaultProvider(network?: Networkish, options?: any): BaseProvider {
JsonRpcProvider, JsonRpcProvider,
NodesmithProvider, NodesmithProvider,
PocketProvider, PocketProvider,
QuickNodeProvider,
Web3Provider, Web3Provider,
IpcProvider, IpcProvider,
@ -119,6 +121,7 @@ export {
JsonRpcBatchProvider, JsonRpcBatchProvider,
NodesmithProvider, NodesmithProvider,
PocketProvider, PocketProvider,
QuickNodeProvider,
StaticJsonRpcProvider, StaticJsonRpcProvider,
Web3Provider, Web3Provider,
WebSocketProvider, WebSocketProvider,

View File

@ -105,12 +105,18 @@ export class InfuraProvider extends UrlJsonRpcProvider {
case "optimism-goerli": case "optimism-goerli":
host = "optimism-goerli.infura.io"; host = "optimism-goerli.infura.io";
break; break;
case "optimism-sepolia":
host = "optimism-sepolia.infura.io";
break;
case "arbitrum": case "arbitrum":
host = "arbitrum-mainnet.infura.io"; host = "arbitrum-mainnet.infura.io";
break; break;
case "arbitrum-goerli": case "arbitrum-goerli":
host = "arbitrum-goerli.infura.io"; host = "arbitrum-goerli.infura.io";
break; break;
case "arbitrum-sepolia":
host = "arbitrum-sepolia.infura.io";
break;
default: default:
logger.throwError("unsupported network", Logger.errors.INVALID_ARGUMENT, { logger.throwError("unsupported network", Logger.errors.INVALID_ARGUMENT, {
argument: "network", argument: "network",

View File

@ -0,0 +1,85 @@
"use strict";
import { Network } from "@ethersproject/networks";
import { UrlJsonRpcProvider } from "./url-json-rpc-provider";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
// Special API key provided by Quicknode for ethers.js
const defaultApiKey = "919b412a057b5e9c9b6dce193c5a60242d6efadb";
export class QuickNodeProvider extends UrlJsonRpcProvider {
static getApiKey(apiKey: any): any {
if (apiKey && typeof(apiKey) !== "string") {
logger.throwArgumentError("invalid apiKey", "apiKey", apiKey);
}
return apiKey || defaultApiKey;
}
static getUrl(network: Network, apiKey?: any): string {
let host = null;
switch (network.name) {
case "homestead":
host = "ethers.quiknode.pro";
break;
case "goerli":
host = "ethers.ethereum-goerli.quiknode.pro";
break;
case "sepolia":
host = "ethers.ethereum-sepolia.quiknode.pro";
break;
case "holesky":
host = "ethers.ethereum-holesky.quiknode.pro";
break;
case "arbitrum":
host = "ethers.arbitrum-mainnet.quiknode.pro";
break;
case "arbitrum-goerli":
host = "ethers.arbitrum-goerli.quiknode.pro";
break;
case "arbitrum-sepolia":
host = "ethers.arbitrum-sepolia.quiknode.pro";
break;
case "base":
host = "ethers.base-mainnet.quiknode.pro";
break;
case "base-goerli":
host = "ethers.base-goerli.quiknode.pro";
break;
case "base-spolia":
host = "ethers.base-sepolia.quiknode.pro";
break;
case "bnb":
host = "ethers.bsc.quiknode.pro";
break;
case "bnbt":
host = "ethers.bsc-testnet.quiknode.pro";
break;
case "matic":
host = "ethers.matic.quiknode.pro";
break;
case "maticmum":
host = "ethers.matic-testnet.quiknode.pro";
break;
case "optimism":
host = "ethers.optimism.quiknode.pro";
break;
case "optimism-goerli":
host = "ethers.optimism-goerli.quiknode.pro";
break;
case "optimism-sepolia":
host = "ethers.optimism-sepolia.quiknode.pro";
break;
case "xdai":
host = "ethers.xdai.quiknode.pro";
break;
default:
logger.throwArgumentError("unsupported network", "network", arguments[0]);
}
return ("https:/" + "/" + host + "/" + apiKey);
}
}