index.js 7.8 KB

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