provider-quicknode.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. /**
  2. * [[link-quicknode]] provides a third-party service for connecting to
  3. * various blockchains over JSON-RPC.
  4. *
  5. * **Supported Networks**
  6. *
  7. * - Ethereum Mainnet (``mainnet``)
  8. * - Goerli Testnet (``goerli``)
  9. * - Sepolia Testnet (``sepolia``)
  10. * - Holesky Testnet (``holesky``)
  11. * - Arbitrum (``arbitrum``)
  12. * - Arbitrum Goerli Testnet (``arbitrum-goerli``)
  13. * - Arbitrum Sepolia Testnet (``arbitrum-sepolia``)
  14. * - Base Mainnet (``base``);
  15. * - Base Goerli Testnet (``base-goerli``);
  16. * - Base Sepolia Testnet (``base-sepolia``);
  17. * - BNB Smart Chain Mainnet (``bnb``)
  18. * - BNB Smart Chain Testnet (``bnbt``)
  19. * - Optimism (``optimism``)
  20. * - Optimism Goerli Testnet (``optimism-goerli``)
  21. * - Optimism Sepolia Testnet (``optimism-sepolia``)
  22. * - Polygon (``matic``)
  23. * - Polygon Mumbai Testnet (``matic-mumbai``)
  24. *
  25. * @_subsection: api/providers/thirdparty:QuickNode [providers-quicknode]
  26. */
  27. import { defineProperties, FetchRequest, assertArgument } from "../utils/index.js";
  28. import { showThrottleMessage } from "./community.js";
  29. import { Network } from "./network.js";
  30. import { JsonRpcProvider } from "./provider-jsonrpc.js";
  31. const defaultToken = "919b412a057b5e9c9b6dce193c5a60242d6efadb";
  32. function getHost(name) {
  33. switch (name) {
  34. case "mainnet":
  35. return "ethers.quiknode.pro";
  36. case "goerli":
  37. return "ethers.ethereum-goerli.quiknode.pro";
  38. case "sepolia":
  39. return "ethers.ethereum-sepolia.quiknode.pro";
  40. case "holesky":
  41. return "ethers.ethereum-holesky.quiknode.pro";
  42. case "arbitrum":
  43. return "ethers.arbitrum-mainnet.quiknode.pro";
  44. case "arbitrum-goerli":
  45. return "ethers.arbitrum-goerli.quiknode.pro";
  46. case "arbitrum-sepolia":
  47. return "ethers.arbitrum-sepolia.quiknode.pro";
  48. case "base":
  49. return "ethers.base-mainnet.quiknode.pro";
  50. case "base-goerli":
  51. return "ethers.base-goerli.quiknode.pro";
  52. case "base-spolia":
  53. return "ethers.base-sepolia.quiknode.pro";
  54. case "bnb":
  55. return "ethers.bsc.quiknode.pro";
  56. case "bnbt":
  57. return "ethers.bsc-testnet.quiknode.pro";
  58. case "matic":
  59. return "ethers.matic.quiknode.pro";
  60. case "matic-mumbai":
  61. return "ethers.matic-testnet.quiknode.pro";
  62. case "optimism":
  63. return "ethers.optimism.quiknode.pro";
  64. case "optimism-goerli":
  65. return "ethers.optimism-goerli.quiknode.pro";
  66. case "optimism-sepolia":
  67. return "ethers.optimism-sepolia.quiknode.pro";
  68. case "xdai":
  69. return "ethers.xdai.quiknode.pro";
  70. }
  71. assertArgument(false, "unsupported network", "network", name);
  72. }
  73. /*
  74. @TODO:
  75. These networks are not currently present in the Network
  76. default included networks. Research them and ensure they
  77. are EVM compatible and work with ethers
  78. http://ethers.matic-amoy.quiknode.pro
  79. http://ethers.avalanche-mainnet.quiknode.pro
  80. http://ethers.avalanche-testnet.quiknode.pro
  81. http://ethers.blast-sepolia.quiknode.pro
  82. http://ethers.celo-mainnet.quiknode.pro
  83. http://ethers.fantom.quiknode.pro
  84. http://ethers.imx-demo.quiknode.pro
  85. http://ethers.imx-mainnet.quiknode.pro
  86. http://ethers.imx-testnet.quiknode.pro
  87. http://ethers.near-mainnet.quiknode.pro
  88. http://ethers.near-testnet.quiknode.pro
  89. http://ethers.nova-mainnet.quiknode.pro
  90. http://ethers.scroll-mainnet.quiknode.pro
  91. http://ethers.scroll-testnet.quiknode.pro
  92. http://ethers.tron-mainnet.quiknode.pro
  93. http://ethers.zkevm-mainnet.quiknode.pro
  94. http://ethers.zkevm-testnet.quiknode.pro
  95. http://ethers.zksync-mainnet.quiknode.pro
  96. http://ethers.zksync-testnet.quiknode.pro
  97. */
  98. /**
  99. * The **QuickNodeProvider** connects to the [[link-quicknode]]
  100. * JSON-RPC end-points.
  101. *
  102. * By default, a highly-throttled API token is used, which is
  103. * appropriate for quick prototypes and simple scripts. To
  104. * gain access to an increased rate-limit, it is highly
  105. * recommended to [sign up here](link-quicknode).
  106. */
  107. export class QuickNodeProvider extends JsonRpcProvider {
  108. /**
  109. * The API token.
  110. */
  111. token;
  112. /**
  113. * Creates a new **QuickNodeProvider**.
  114. */
  115. constructor(_network, token) {
  116. if (_network == null) {
  117. _network = "mainnet";
  118. }
  119. const network = Network.from(_network);
  120. if (token == null) {
  121. token = defaultToken;
  122. }
  123. const request = QuickNodeProvider.getRequest(network, token);
  124. super(request, network, { staticNetwork: network });
  125. defineProperties(this, { token });
  126. }
  127. _getProvider(chainId) {
  128. try {
  129. return new QuickNodeProvider(chainId, this.token);
  130. }
  131. catch (error) { }
  132. return super._getProvider(chainId);
  133. }
  134. isCommunityResource() {
  135. return (this.token === defaultToken);
  136. }
  137. /**
  138. * Returns a new request prepared for %%network%% and the
  139. * %%token%%.
  140. */
  141. static getRequest(network, token) {
  142. if (token == null) {
  143. token = defaultToken;
  144. }
  145. const request = new FetchRequest(`https:/\/${getHost(network.name)}/${token}`);
  146. request.allowGzip = true;
  147. //if (projectSecret) { request.setCredentials("", projectSecret); }
  148. if (token === defaultToken) {
  149. request.retryFunc = async (request, response, attempt) => {
  150. showThrottleMessage("QuickNodeProvider");
  151. return true;
  152. };
  153. }
  154. return request;
  155. }
  156. }
  157. //# sourceMappingURL=provider-quicknode.js.map