1 | "use strict";
|
2 | import { Logger } from "@ethersproject/logger";
|
3 | import { version } from "./_version";
|
4 | const logger = new Logger(version);
|
5 | ;
|
6 | function isRenetworkable(value) {
|
7 | return (value && typeof (value.renetwork) === "function");
|
8 | }
|
9 | function 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 |
|
35 |
|
36 |
|
37 |
|
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 | }
|
79 | function 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 | }
|
91 | const homestead = {
|
92 | chainId: 1,
|
93 | ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
|
94 | name: "homestead",
|
95 | _defaultProvider: ethDefaultProvider("homestead")
|
96 | };
|
97 | const ropsten = {
|
98 | chainId: 3,
|
99 | ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
|
100 | name: "ropsten",
|
101 | _defaultProvider: ethDefaultProvider("ropsten")
|
102 | };
|
103 | const classicMordor = {
|
104 | chainId: 63,
|
105 | name: "classicMordor",
|
106 | _defaultProvider: etcDefaultProvider("https://www.ethercluster.com/mordor", "classicMordor")
|
107 | };
|
108 |
|
109 | const 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 |
|
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 |
|
161 |
|
162 |
|
163 |
|
164 |
|
165 | export function getNetwork(network) {
|
166 |
|
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 |
|
201 | if (!standard) {
|
202 | if (typeof (network.chainId) !== "number") {
|
203 | logger.throwArgumentError("invalid network chainId", "network", network);
|
204 | }
|
205 | return network;
|
206 | }
|
207 |
|
208 | if (network.chainId !== 0 && network.chainId !== standard.chainId) {
|
209 | logger.throwArgumentError("network chainId mismatch", "network", network);
|
210 | }
|
211 |
|
212 |
|
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 |
|
223 | return {
|
224 | name: network.name,
|
225 | chainId: standard.chainId,
|
226 | ensAddress: (network.ensAddress || standard.ensAddress || null),
|
227 | _defaultProvider: defaultProvider
|
228 | };
|
229 | }
|
230 |
|
\ | No newline at end of file |