From f4539e5675f19aab07c493ea7ece1e0c1572b8a5 Mon Sep 17 00:00:00 2001 From: Richard Moore Date: Thu, 20 Oct 2022 04:51:42 -0400 Subject: [PATCH] Inject common networks in main Network object to allow sync access to Network at the top-level. --- src.ts/providers/index.ts | 4 +- src.ts/providers/network.ts | 96 +++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 1 deletion(-) diff --git a/src.ts/providers/index.ts b/src.ts/providers/index.ts index 9f7fea645..7580bb150 100644 --- a/src.ts/providers/index.ts +++ b/src.ts/providers/index.ts @@ -22,7 +22,7 @@ export { getDefaultProvider } from "./default-provider.js"; export { EnsResolver } from "./ens-resolver.js"; */ -export { Network } from "./common-networks.js"; +export { Network } from "./network.js"; export { NetworkPlugin, @@ -47,6 +47,8 @@ export { export { FallbackProvider } from "./provider-fallback.js"; export { JsonRpcApiProvider, JsonRpcProvider, JsonRpcSigner } from "./provider-jsonrpc.js" +export { BrowserProvider } from "./provider-browser.js"; + export { AlchemyProvider } from "./provider-alchemy.js"; export { AnkrProvider } from "./provider-ankr.js"; export { CloudflareProvider } from "./provider-cloudflare.js"; diff --git a/src.ts/providers/network.ts b/src.ts/providers/network.ts index 6b5ef44a7..9cbefaeac 100644 --- a/src.ts/providers/network.ts +++ b/src.ts/providers/network.ts @@ -4,12 +4,14 @@ import { } from "../utils/index.js"; import { EnsPlugin, GasCostPlugin } from "./plugins-network.js"; +//import { EtherscanPlugin } from "./provider-etherscan-base.js"; import type { BigNumberish } from "../utils/index.js"; import type { TransactionLike } from "../transaction/index.js"; import type { NetworkPlugin } from "./plugins-network.js"; + /** * A Networkish can be used to allude to a Network, by specifing: * - a [[Network]] object @@ -176,6 +178,8 @@ export class Network { * Returns a new Network for the %%network%% name or chainId. */ static from(network?: Networkish): Network { + injectCommonNetworks(); + // Default network if (network == null) { return Network.from("mainnet"); } @@ -234,3 +238,95 @@ export class Network { Networks.set(nameOrChainId, networkFunc); } } + + +type Options = { + ensNetwork?: number; + priorityFee?: number + altNames?: Array; + etherscan?: { url: string, apiKey: string }; +}; + +// See: https://chainlist.org +let injected = false; +function injectCommonNetworks(): void { + if (injected) { return; } + injected = true; + + /// Register popular Ethereum networks + function registerEth(name: string, chainId: number, options: Options): void { + const func = function() { + const network = new Network(name, chainId); + + // We use 0 to disable ENS + if (options.ensNetwork != null) { + network.attachPlugin(new EnsPlugin(null, options.ensNetwork)); + } + + if (options.priorityFee) { +// network.attachPlugin(new MaxPriorityFeePlugin(options.priorityFee)); + } +/* + if (options.etherscan) { + const { url, apiKey } = options.etherscan; + network.attachPlugin(new EtherscanPlugin(url, apiKey)); + } +*/ + network.attachPlugin(new GasCostPlugin()); + + return network; + }; + + // Register the network by name and chain ID + Network.register(name, func); + Network.register(chainId, func); + + if (options.altNames) { + options.altNames.forEach((name) => { + Network.register(name, func); + }); + } + } + + registerEth("mainnet", 1, { ensNetwork: 1, altNames: [ "homestead" ] }); + registerEth("ropsten", 3, { ensNetwork: 3 }); + registerEth("rinkeby", 4, { ensNetwork: 4 }); + registerEth("goerli", 5, { ensNetwork: 5 }); + registerEth("kovan", 42, { ensNetwork: 42 }); + + registerEth("classic", 61, { }); + registerEth("classicKotti", 6, { }); + + registerEth("xdai", 100, { ensNetwork: 1 }); + + // Polygon has a 35 gwei maxPriorityFee requirement + registerEth("matic", 137, { + ensNetwork: 1, +// priorityFee: 35000000000, + etherscan: { + apiKey: "W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7", + url: "https:/\/api.polygonscan.com/" + } + }); + registerEth("maticMumbai", 80001, { +// priorityFee: 35000000000, + etherscan: { + apiKey: "W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7", + url: "https:/\/api-testnet.polygonscan.com/" + } + }); + + registerEth("bnb", 56, { + ensNetwork: 1, + etherscan: { + apiKey: "EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9", + url: "http:/\/api.bscscan.com" + } + }); + registerEth("bnbt", 97, { + etherscan: { + apiKey: "EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9", + url: "http:/\/api-testnet.bscscan.com" + } + }); +}