UNPKG

8.07 kBJavaScriptView Raw
1"use strict";
2import { Logger } from "@ethersproject/logger";
3import { version } from "./_version";
4const logger = new Logger(version);
5;
6function isRenetworkable(value) {
7 return (value && typeof (value.renetwork) === "function");
8}
9function ethDefaultProvider(network) {
10 const func = function (providers, options) {
11 if (options == null) {
12 options = {};
13 }
14 const providerList = [];
15 if (providers.InfuraProvider && options.infura !== "-") {
16 try {
17 providerList.push(new providers.InfuraProvider(network, options.infura));
18 }
19 catch (error) { }
20 }
21 if (providers.EtherscanProvider && options.etherscan !== "-") {
22 try {
23 providerList.push(new providers.EtherscanProvider(network, options.etherscan));
24 }
25 catch (error) { }
26 }
27 if (providers.AlchemyProvider && options.alchemy !== "-") {
28 try {
29 providerList.push(new providers.AlchemyProvider(network, options.alchemy));
30 }
31 catch (error) { }
32 }
33 if (providers.PocketProvider && options.pocket !== "-") {
34 // These networks are currently faulty on Pocket as their
35 // network does not handle the Berlin hardfork, which is
36 // live on these ones.
37 // @TODO: This goes away once Pocket has upgraded their nodes
38 const skip = ["goerli", "ropsten", "rinkeby"];
39 try {
40 const provider = new providers.PocketProvider(network, options.pocket);
41 if (provider.network && skip.indexOf(provider.network.name) === -1) {
42 providerList.push(provider);
43 }
44 }
45 catch (error) { }
46 }
47 if (providers.CloudflareProvider && options.cloudflare !== "-") {
48 try {
49 providerList.push(new providers.CloudflareProvider(network));
50 }
51 catch (error) { }
52 }
53 if (providers.AnkrProvider && options.ankr !== "-") {
54 try {
55 providerList.push(new providers.AnkrProvider(network, options.ankr));
56 }
57 catch (error) { }
58 }
59 if (providerList.length === 0) {
60 return null;
61 }
62 if (providers.FallbackProvider) {
63 let quorum = 1;
64 if (options.quorum != null) {
65 quorum = options.quorum;
66 }
67 else if (network === "homestead") {
68 quorum = 2;
69 }
70 return new providers.FallbackProvider(providerList, quorum);
71 }
72 return providerList[0];
73 };
74 func.renetwork = function (network) {
75 return ethDefaultProvider(network);
76 };
77 return func;
78}
79function etcDefaultProvider(url, network) {
80 const func = function (providers, options) {
81 if (providers.JsonRpcProvider) {
82 return new providers.JsonRpcProvider(url, network);
83 }
84 return null;
85 };
86 func.renetwork = function (network) {
87 return etcDefaultProvider(url, network);
88 };
89 return func;
90}
91const homestead = {
92 chainId: 1,
93 ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
94 name: "homestead",
95 _defaultProvider: ethDefaultProvider("homestead")
96};
97const ropsten = {
98 chainId: 3,
99 ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
100 name: "ropsten",
101 _defaultProvider: ethDefaultProvider("ropsten")
102};
103const classicMordor = {
104 chainId: 63,
105 name: "classicMordor",
106 _defaultProvider: etcDefaultProvider("https://www.ethercluster.com/mordor", "classicMordor")
107};
108// See: https://chainlist.org
109const networks = {
110 unspecified: { chainId: 0, name: "unspecified" },
111 homestead: homestead,
112 mainnet: homestead,
113 morden: { chainId: 2, name: "morden" },
114 ropsten: ropsten,
115 testnet: ropsten,
116 rinkeby: {
117 chainId: 4,
118 ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
119 name: "rinkeby",
120 _defaultProvider: ethDefaultProvider("rinkeby")
121 },
122 kovan: {
123 chainId: 42,
124 name: "kovan",
125 _defaultProvider: ethDefaultProvider("kovan")
126 },
127 goerli: {
128 chainId: 5,
129 ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
130 name: "goerli",
131 _defaultProvider: ethDefaultProvider("goerli")
132 },
133 kintsugi: { chainId: 1337702, name: "kintsugi" },
134 // ETC (See: #351)
135 classic: {
136 chainId: 61,
137 name: "classic",
138 _defaultProvider: etcDefaultProvider("https:/\/www.ethercluster.com/etc", "classic")
139 },
140 classicMorden: { chainId: 62, name: "classicMorden" },
141 classicMordor: classicMordor,
142 classicTestnet: classicMordor,
143 classicKotti: {
144 chainId: 6,
145 name: "classicKotti",
146 _defaultProvider: etcDefaultProvider("https:/\/www.ethercluster.com/kotti", "classicKotti")
147 },
148 xdai: { chainId: 100, name: "xdai" },
149 matic: { chainId: 137, name: "matic" },
150 maticmum: { chainId: 80001, name: "maticmum" },
151 optimism: { chainId: 10, name: "optimism" },
152 "optimism-kovan": { chainId: 69, name: "optimism-kovan" },
153 "optimism-goerli": { chainId: 420, name: "optimism-goerli" },
154 arbitrum: { chainId: 42161, name: "arbitrum" },
155 "arbitrum-rinkeby": { chainId: 421611, name: "arbitrum-rinkeby" },
156 bnb: { chainId: 56, name: "bnb" },
157 bnbt: { chainId: 97, name: "bnbt" },
158};
159/**
160 * getNetwork
161 *
162 * Converts a named common networks or chain ID (network ID) to a Network
163 * and verifies a network is a valid Network..
164 */
165export function getNetwork(network) {
166 // No network (null)
167 if (network == null) {
168 return null;
169 }
170 if (typeof (network) === "number") {
171 for (const name in networks) {
172 const standard = networks[name];
173 if (standard.chainId === network) {
174 return {
175 name: standard.name,
176 chainId: standard.chainId,
177 ensAddress: (standard.ensAddress || null),
178 _defaultProvider: (standard._defaultProvider || null)
179 };
180 }
181 }
182 return {
183 chainId: network,
184 name: "unknown"
185 };
186 }
187 if (typeof (network) === "string") {
188 const standard = networks[network];
189 if (standard == null) {
190 return null;
191 }
192 return {
193 name: standard.name,
194 chainId: standard.chainId,
195 ensAddress: standard.ensAddress,
196 _defaultProvider: (standard._defaultProvider || null)
197 };
198 }
199 const standard = networks[network.name];
200 // Not a standard network; check that it is a valid network in general
201 if (!standard) {
202 if (typeof (network.chainId) !== "number") {
203 logger.throwArgumentError("invalid network chainId", "network", network);
204 }
205 return network;
206 }
207 // Make sure the chainId matches the expected network chainId (or is 0; disable EIP-155)
208 if (network.chainId !== 0 && network.chainId !== standard.chainId) {
209 logger.throwArgumentError("network chainId mismatch", "network", network);
210 }
211 // @TODO: In the next major version add an attach function to a defaultProvider
212 // class and move the _defaultProvider internal to this file (extend Network)
213 let defaultProvider = network._defaultProvider || null;
214 if (defaultProvider == null && standard._defaultProvider) {
215 if (isRenetworkable(standard._defaultProvider)) {
216 defaultProvider = standard._defaultProvider.renetwork(network);
217 }
218 else {
219 defaultProvider = standard._defaultProvider;
220 }
221 }
222 // Standard Network (allow overriding the ENS address)
223 return {
224 name: network.name,
225 chainId: standard.chainId,
226 ensAddress: (network.ensAddress || standard.ensAddress || null),
227 _defaultProvider: defaultProvider
228 };
229}
230//# sourceMappingURL=index.js.map
\No newline at end of file