hardhat 3.3.0 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/dist/src/internal/builtin-plugins/artifacts/artifact-manager.d.ts.map +1 -1
  3. package/dist/src/internal/builtin-plugins/artifacts/artifact-manager.js +6 -14
  4. package/dist/src/internal/builtin-plugins/artifacts/artifact-manager.js.map +1 -1
  5. package/dist/src/internal/builtin-plugins/artifacts/hook-handlers/hre.d.ts.map +1 -1
  6. package/dist/src/internal/builtin-plugins/artifacts/hook-handlers/hre.js +10 -10
  7. package/dist/src/internal/builtin-plugins/artifacts/hook-handlers/hre.js.map +1 -1
  8. package/dist/src/internal/builtin-plugins/clean/index.js +1 -1
  9. package/dist/src/internal/builtin-plugins/clean/index.js.map +1 -1
  10. package/dist/src/internal/builtin-plugins/console/index.js +1 -1
  11. package/dist/src/internal/builtin-plugins/console/index.js.map +1 -1
  12. package/dist/src/internal/builtin-plugins/console/task-action.d.ts.map +1 -1
  13. package/dist/src/internal/builtin-plugins/console/task-action.js +2 -1
  14. package/dist/src/internal/builtin-plugins/console/task-action.js.map +1 -1
  15. package/dist/src/internal/builtin-plugins/coverage/hook-handlers/solidity.js +2 -2
  16. package/dist/src/internal/builtin-plugins/coverage/hook-handlers/solidity.js.map +1 -1
  17. package/dist/src/internal/builtin-plugins/flatten/index.js +1 -1
  18. package/dist/src/internal/builtin-plugins/flatten/index.js.map +1 -1
  19. package/dist/src/internal/builtin-plugins/gas-analytics/exports.d.ts +1 -1
  20. package/dist/src/internal/builtin-plugins/gas-analytics/exports.d.ts.map +1 -1
  21. package/dist/src/internal/builtin-plugins/gas-analytics/exports.js +1 -1
  22. package/dist/src/internal/builtin-plugins/gas-analytics/exports.js.map +1 -1
  23. package/dist/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.d.ts.map +1 -1
  24. package/dist/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.js +1 -2
  25. package/dist/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.js.map +1 -1
  26. package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.d.ts +7 -5
  27. package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.d.ts.map +1 -1
  28. package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.js +60 -44
  29. package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.js.map +1 -1
  30. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.d.ts +6 -0
  31. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.d.ts.map +1 -0
  32. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.js +14 -0
  33. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.js.map +1 -0
  34. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.d.ts +4 -0
  35. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.d.ts.map +1 -0
  36. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.js +27 -0
  37. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.js.map +1 -0
  38. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.d.ts +36 -0
  39. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.d.ts.map +1 -0
  40. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.js +86 -0
  41. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.js.map +1 -0
  42. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.js +1 -1
  43. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.js.map +1 -1
  44. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/test.js +1 -1
  45. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/test.js.map +1 -1
  46. package/dist/src/internal/builtin-plugins/gas-analytics/index.d.ts.map +1 -1
  47. package/dist/src/internal/builtin-plugins/gas-analytics/index.js +2 -2
  48. package/dist/src/internal/builtin-plugins/gas-analytics/index.js.map +1 -1
  49. package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.d.ts.map +1 -1
  50. package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.js +1 -2
  51. package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.js.map +1 -1
  52. package/dist/src/internal/builtin-plugins/gas-analytics/types.d.ts +10 -2
  53. package/dist/src/internal/builtin-plugins/gas-analytics/types.d.ts.map +1 -1
  54. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.js +4 -4
  55. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.js.map +1 -1
  56. package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.js +1 -1
  57. package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.js.map +1 -1
  58. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.d.ts +4 -4
  59. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.d.ts.map +1 -1
  60. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.js +2 -2
  61. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.js.map +1 -1
  62. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.d.ts +6 -3
  63. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.d.ts.map +1 -1
  64. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.js +23 -5
  65. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.js.map +1 -1
  66. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.d.ts.map +1 -1
  67. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.js +3 -2
  68. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.js.map +1 -1
  69. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/hre.d.ts.map +1 -1
  70. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/hre.js +24 -2
  71. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/hre.js.map +1 -1
  72. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.d.ts.map +1 -1
  73. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.js +19 -11
  74. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.js.map +1 -1
  75. package/dist/src/internal/builtin-plugins/network-manager/http-provider.d.ts.map +1 -1
  76. package/dist/src/internal/builtin-plugins/network-manager/http-provider.js +2 -2
  77. package/dist/src/internal/builtin-plugins/network-manager/http-provider.js.map +1 -1
  78. package/dist/src/internal/builtin-plugins/network-manager/network-manager.d.ts +11 -1
  79. package/dist/src/internal/builtin-plugins/network-manager/network-manager.d.ts.map +1 -1
  80. package/dist/src/internal/builtin-plugins/network-manager/network-manager.js +91 -24
  81. package/dist/src/internal/builtin-plugins/network-manager/network-manager.js.map +1 -1
  82. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/hd-wallet-handler.d.ts.map +1 -1
  83. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/hd-wallet-handler.js.map +1 -1
  84. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.d.ts +1 -0
  85. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.d.ts.map +1 -1
  86. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.js +22 -8
  87. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.js.map +1 -1
  88. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.d.ts +2 -0
  89. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.d.ts.map +1 -1
  90. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.js +19 -12
  91. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.js.map +1 -1
  92. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.d.ts +1 -0
  93. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.d.ts.map +1 -1
  94. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.js +9 -3
  95. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.js.map +1 -1
  96. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.d.ts +2 -0
  97. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.d.ts.map +1 -1
  98. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.js +5 -1
  99. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.js.map +1 -1
  100. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.d.ts +1 -0
  101. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.d.ts.map +1 -1
  102. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.js +5 -1
  103. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.js.map +1 -1
  104. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.d.ts +1 -0
  105. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.d.ts.map +1 -1
  106. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.js +5 -1
  107. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.js.map +1 -1
  108. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.d.ts +1 -0
  109. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.d.ts.map +1 -1
  110. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.js +5 -1
  111. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.js.map +1 -1
  112. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/types.d.ts +9 -0
  113. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/types.d.ts.map +1 -1
  114. package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.d.ts +2 -0
  115. package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.d.ts.map +1 -0
  116. package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.js +3 -0
  117. package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.js.map +1 -0
  118. package/dist/src/internal/builtin-plugins/network-manager/type-extensions/config.d.ts +1 -1
  119. package/dist/src/internal/builtin-plugins/network-manager/type-extensions/config.d.ts.map +1 -1
  120. package/dist/src/internal/builtin-plugins/network-manager/type-validation.d.ts.map +1 -1
  121. package/dist/src/internal/builtin-plugins/network-manager/type-validation.js +2 -1
  122. package/dist/src/internal/builtin-plugins/network-manager/type-validation.js.map +1 -1
  123. package/dist/src/internal/builtin-plugins/node/helpers.js +1 -1
  124. package/dist/src/internal/builtin-plugins/node/helpers.js.map +1 -1
  125. package/dist/src/internal/builtin-plugins/node/index.js +1 -1
  126. package/dist/src/internal/builtin-plugins/node/index.js.map +1 -1
  127. package/dist/src/internal/builtin-plugins/node/json-rpc/handler.d.ts.map +1 -1
  128. package/dist/src/internal/builtin-plugins/node/json-rpc/handler.js +8 -2
  129. package/dist/src/internal/builtin-plugins/node/json-rpc/handler.js.map +1 -1
  130. package/dist/src/internal/builtin-plugins/node/task-action.js +2 -2
  131. package/dist/src/internal/builtin-plugins/node/task-action.js.map +1 -1
  132. package/dist/src/internal/builtin-plugins/run/index.js +1 -1
  133. package/dist/src/internal/builtin-plugins/run/index.js.map +1 -1
  134. package/dist/src/internal/builtin-plugins/run/task-action.d.ts.map +1 -1
  135. package/dist/src/internal/builtin-plugins/run/task-action.js +2 -1
  136. package/dist/src/internal/builtin-plugins/run/task-action.js.map +1 -1
  137. package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.d.ts.map +1 -1
  138. package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.js +3 -0
  139. package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.js.map +1 -1
  140. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.d.ts +1 -1
  141. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.d.ts.map +1 -1
  142. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.js +125 -39
  143. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.js.map +1 -1
  144. package/dist/src/internal/builtin-plugins/solidity/build-system/cache.d.ts +2 -0
  145. package/dist/src/internal/builtin-plugins/solidity/build-system/cache.d.ts.map +1 -1
  146. package/dist/src/internal/builtin-plugins/solidity/build-system/cache.js.map +1 -1
  147. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.d.ts +3 -1
  148. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.d.ts.map +1 -1
  149. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.js +12 -4
  150. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.js.map +1 -1
  151. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.js +4 -4
  152. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.js.map +1 -1
  153. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/index.js +2 -2
  154. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/index.js.map +1 -1
  155. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/solcjs-runner.js +1 -1
  156. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/solcjs-runner.js.map +1 -1
  157. package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph-building.js +1 -1
  158. package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph-building.js.map +1 -1
  159. package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph.d.ts.map +1 -1
  160. package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph.js +5 -5
  161. package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph.js.map +1 -1
  162. package/dist/src/internal/builtin-plugins/solidity/build-system/read-source-file.js +1 -1
  163. package/dist/src/internal/builtin-plugins/solidity/build-system/read-source-file.js.map +1 -1
  164. package/dist/src/internal/builtin-plugins/solidity/build-system/resolver/dependency-resolver.js +10 -10
  165. package/dist/src/internal/builtin-plugins/solidity/build-system/resolver/dependency-resolver.js.map +1 -1
  166. package/dist/src/internal/builtin-plugins/solidity/build-system/resolver/remapped-npm-packages-graph.js +1 -1
  167. package/dist/src/internal/builtin-plugins/solidity/build-system/resolver/remapped-npm-packages-graph.js.map +1 -1
  168. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-info.d.ts.map +1 -1
  169. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-info.js +1 -0
  170. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-info.js.map +1 -1
  171. package/dist/src/internal/builtin-plugins/solidity/build-system/warning-suppression.js +2 -2
  172. package/dist/src/internal/builtin-plugins/solidity/build-system/warning-suppression.js.map +1 -1
  173. package/dist/src/internal/builtin-plugins/solidity/config.d.ts.map +1 -1
  174. package/dist/src/internal/builtin-plugins/solidity/config.js +19 -16
  175. package/dist/src/internal/builtin-plugins/solidity/config.js.map +1 -1
  176. package/dist/src/internal/builtin-plugins/solidity/constants.d.ts +3 -0
  177. package/dist/src/internal/builtin-plugins/solidity/constants.d.ts.map +1 -0
  178. package/dist/src/internal/builtin-plugins/solidity/constants.js +19 -0
  179. package/dist/src/internal/builtin-plugins/solidity/constants.js.map +1 -0
  180. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/config.js +1 -1
  181. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/config.js.map +1 -1
  182. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/hre.d.ts.map +1 -1
  183. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/hre.js +10 -10
  184. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/hre.js.map +1 -1
  185. package/dist/src/internal/builtin-plugins/solidity/index.js +1 -1
  186. package/dist/src/internal/builtin-plugins/solidity/index.js.map +1 -1
  187. package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.js +1 -1
  188. package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.js.map +1 -1
  189. package/dist/src/internal/builtin-plugins/solidity/tasks/build.d.ts +1 -1
  190. package/dist/src/internal/builtin-plugins/solidity/tasks/build.d.ts.map +1 -1
  191. package/dist/src/internal/builtin-plugins/solidity/tasks/build.js +225 -55
  192. package/dist/src/internal/builtin-plugins/solidity/tasks/build.js.map +1 -1
  193. package/dist/src/internal/builtin-plugins/solidity/type-extensions.d.ts +30 -4
  194. package/dist/src/internal/builtin-plugins/solidity/type-extensions.d.ts.map +1 -1
  195. package/dist/src/internal/builtin-plugins/solidity/type-extensions.js.map +1 -1
  196. package/dist/src/internal/builtin-plugins/solidity-test/config.d.ts.map +1 -1
  197. package/dist/src/internal/builtin-plugins/solidity-test/config.js +5 -3
  198. package/dist/src/internal/builtin-plugins/solidity-test/config.js.map +1 -1
  199. package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.js +2 -2
  200. package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.js.map +1 -1
  201. package/dist/src/internal/builtin-plugins/solidity-test/helpers.d.ts +0 -2
  202. package/dist/src/internal/builtin-plugins/solidity-test/helpers.d.ts.map +1 -1
  203. package/dist/src/internal/builtin-plugins/solidity-test/helpers.js +0 -3
  204. package/dist/src/internal/builtin-plugins/solidity-test/helpers.js.map +1 -1
  205. package/dist/src/internal/builtin-plugins/solidity-test/hook-handlers/config.js +1 -1
  206. package/dist/src/internal/builtin-plugins/solidity-test/hook-handlers/config.js.map +1 -1
  207. package/dist/src/internal/builtin-plugins/solidity-test/hook-handlers/test.js +1 -1
  208. package/dist/src/internal/builtin-plugins/solidity-test/hook-handlers/test.js.map +1 -1
  209. package/dist/src/internal/builtin-plugins/solidity-test/index.js +1 -1
  210. package/dist/src/internal/builtin-plugins/solidity-test/index.js.map +1 -1
  211. package/dist/src/internal/builtin-plugins/solidity-test/reporter.js +1 -1
  212. package/dist/src/internal/builtin-plugins/solidity-test/reporter.js.map +1 -1
  213. package/dist/src/internal/builtin-plugins/solidity-test/runner.d.ts +2 -8
  214. package/dist/src/internal/builtin-plugins/solidity-test/runner.d.ts.map +1 -1
  215. package/dist/src/internal/builtin-plugins/solidity-test/runner.js +47 -50
  216. package/dist/src/internal/builtin-plugins/solidity-test/runner.js.map +1 -1
  217. package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.d.ts.map +1 -1
  218. package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.js +11 -2
  219. package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.js.map +1 -1
  220. package/dist/src/internal/builtin-plugins/solidity-test/task-action.d.ts.map +1 -1
  221. package/dist/src/internal/builtin-plugins/solidity-test/task-action.js +108 -32
  222. package/dist/src/internal/builtin-plugins/solidity-test/task-action.js.map +1 -1
  223. package/dist/src/internal/builtin-plugins/solidity-test/type-extensions.d.ts +1 -2
  224. package/dist/src/internal/builtin-plugins/solidity-test/type-extensions.d.ts.map +1 -1
  225. package/dist/src/internal/builtin-plugins/telemetry/index.js +1 -1
  226. package/dist/src/internal/builtin-plugins/telemetry/index.js.map +1 -1
  227. package/dist/src/internal/builtin-plugins/test/hook-handlers/config.js +1 -1
  228. package/dist/src/internal/builtin-plugins/test/hook-handlers/config.js.map +1 -1
  229. package/dist/src/internal/builtin-plugins/test/index.js +1 -1
  230. package/dist/src/internal/builtin-plugins/test/index.js.map +1 -1
  231. package/dist/src/internal/builtin-plugins/test/task-action.d.ts.map +1 -1
  232. package/dist/src/internal/builtin-plugins/test/task-action.js +3 -4
  233. package/dist/src/internal/builtin-plugins/test/task-action.js.map +1 -1
  234. package/dist/src/internal/cli/init/init.js +1 -1
  235. package/dist/src/internal/cli/init/init.js.map +1 -1
  236. package/dist/src/internal/cli/main.d.ts.map +1 -1
  237. package/dist/src/internal/cli/main.js +12 -2
  238. package/dist/src/internal/cli/main.js.map +1 -1
  239. package/dist/src/internal/cli/node-version.d.ts.map +1 -1
  240. package/dist/src/internal/cli/node-version.js +3 -0
  241. package/dist/src/internal/cli/node-version.js.map +1 -1
  242. package/dist/src/internal/cli/telemetry/analytics/analytics.js +2 -2
  243. package/dist/src/internal/cli/telemetry/analytics/analytics.js.map +1 -1
  244. package/dist/src/internal/cli/telemetry/error-reporter/global-error-handlers.d.ts +6 -0
  245. package/dist/src/internal/cli/telemetry/error-reporter/global-error-handlers.d.ts.map +1 -0
  246. package/dist/src/internal/cli/telemetry/error-reporter/global-error-handlers.js +47 -0
  247. package/dist/src/internal/cli/telemetry/error-reporter/global-error-handlers.js.map +1 -0
  248. package/dist/src/internal/cli/telemetry/error-reporter/reporter.d.ts +27 -0
  249. package/dist/src/internal/cli/telemetry/error-reporter/reporter.d.ts.map +1 -0
  250. package/dist/src/internal/cli/telemetry/error-reporter/reporter.js +40 -0
  251. package/dist/src/internal/cli/telemetry/error-reporter/reporter.js.map +1 -0
  252. package/dist/src/internal/cli/telemetry/sentry/anonymizer.js +1 -1
  253. package/dist/src/internal/cli/telemetry/sentry/anonymizer.js.map +1 -1
  254. package/dist/src/internal/cli/telemetry/sentry/init.d.ts +0 -8
  255. package/dist/src/internal/cli/telemetry/sentry/init.d.ts.map +1 -1
  256. package/dist/src/internal/cli/telemetry/sentry/init.js +1 -37
  257. package/dist/src/internal/cli/telemetry/sentry/init.js.map +1 -1
  258. package/dist/src/internal/cli/telemetry/sentry/reporter.d.ts +8 -2
  259. package/dist/src/internal/cli/telemetry/sentry/reporter.d.ts.map +1 -1
  260. package/dist/src/internal/cli/telemetry/sentry/reporter.js +18 -12
  261. package/dist/src/internal/cli/telemetry/sentry/reporter.js.map +1 -1
  262. package/dist/src/internal/cli/telemetry/sentry/transport.js +1 -1
  263. package/dist/src/internal/cli/telemetry/sentry/transport.js.map +1 -1
  264. package/dist/src/internal/cli/telemetry/telemetry-permissions.js +1 -1
  265. package/dist/src/internal/cli/telemetry/telemetry-permissions.js.map +1 -1
  266. package/dist/src/internal/config-loading.js +3 -3
  267. package/dist/src/internal/config-loading.js.map +1 -1
  268. package/dist/src/internal/core/configuration-variables.d.ts.map +1 -1
  269. package/dist/src/internal/core/configuration-variables.js +1 -1
  270. package/dist/src/internal/core/configuration-variables.js.map +1 -1
  271. package/dist/src/internal/core/hook-manager.js +3 -3
  272. package/dist/src/internal/core/hook-manager.js.map +1 -1
  273. package/dist/src/internal/core/hre.d.ts.map +1 -1
  274. package/dist/src/internal/core/hre.js +3 -3
  275. package/dist/src/internal/core/hre.js.map +1 -1
  276. package/dist/src/internal/core/plugins/resolve-plugin-list.js +1 -1
  277. package/dist/src/internal/core/plugins/resolve-plugin-list.js.map +1 -1
  278. package/dist/src/internal/core/tasks/resolved-task.js +4 -4
  279. package/dist/src/internal/core/tasks/resolved-task.js.map +1 -1
  280. package/dist/src/internal/core/user-interruptions.js +9 -9
  281. package/dist/src/internal/core/user-interruptions.js.map +1 -1
  282. package/dist/src/internal/hre-initialization.js +1 -1
  283. package/dist/src/internal/hre-initialization.js.map +1 -1
  284. package/dist/src/types/artifacts.d.ts +5 -4
  285. package/dist/src/types/artifacts.d.ts.map +1 -1
  286. package/dist/src/types/network.d.ts +39 -0
  287. package/dist/src/types/network.d.ts.map +1 -1
  288. package/dist/src/types/solidity/build-system.d.ts +66 -3
  289. package/dist/src/types/solidity/build-system.d.ts.map +1 -1
  290. package/dist/src/types/solidity/build-system.js.map +1 -1
  291. package/dist/src/types/solidity/compilation-job.d.ts +6 -0
  292. package/dist/src/types/solidity/compilation-job.d.ts.map +1 -1
  293. package/dist/src/types/solidity/solidity-artifacts.d.ts +14 -0
  294. package/dist/src/types/solidity/solidity-artifacts.d.ts.map +1 -1
  295. package/package.json +9 -9
  296. package/src/internal/builtin-plugins/artifacts/artifact-manager.ts +10 -16
  297. package/src/internal/builtin-plugins/artifacts/hook-handlers/hre.ts +16 -10
  298. package/src/internal/builtin-plugins/clean/index.ts +1 -1
  299. package/src/internal/builtin-plugins/console/index.ts +1 -1
  300. package/src/internal/builtin-plugins/console/task-action.ts +2 -1
  301. package/src/internal/builtin-plugins/coverage/hook-handlers/solidity.ts +2 -2
  302. package/src/internal/builtin-plugins/flatten/index.ts +1 -1
  303. package/src/internal/builtin-plugins/gas-analytics/exports.ts +1 -1
  304. package/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.ts +1 -2
  305. package/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.ts +100 -61
  306. package/src/internal/builtin-plugins/gas-analytics/helpers/accessors.ts +31 -0
  307. package/src/internal/builtin-plugins/gas-analytics/helpers/compat.ts +37 -0
  308. package/src/internal/builtin-plugins/gas-analytics/helpers/utils.ts +112 -0
  309. package/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.ts +1 -1
  310. package/src/internal/builtin-plugins/gas-analytics/hook-handlers/test.ts +1 -1
  311. package/src/internal/builtin-plugins/gas-analytics/index.ts +4 -2
  312. package/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.ts +1 -2
  313. package/src/internal/builtin-plugins/gas-analytics/types.ts +11 -2
  314. package/src/internal/builtin-plugins/network-manager/edr/edr-provider.ts +4 -4
  315. package/src/internal/builtin-plugins/network-manager/edr/genesis-state.ts +1 -1
  316. package/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.ts +4 -0
  317. package/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.ts +28 -4
  318. package/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.ts +3 -2
  319. package/src/internal/builtin-plugins/network-manager/hook-handlers/hre.ts +31 -2
  320. package/src/internal/builtin-plugins/network-manager/hook-handlers/network.ts +22 -16
  321. package/src/internal/builtin-plugins/network-manager/http-provider.ts +6 -2
  322. package/src/internal/builtin-plugins/network-manager/network-manager.ts +139 -32
  323. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/hd-wallet-handler.ts +1 -0
  324. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.ts +30 -13
  325. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.ts +25 -17
  326. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.ts +13 -5
  327. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.ts +7 -1
  328. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.ts +7 -1
  329. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.ts +7 -1
  330. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.ts +7 -1
  331. package/src/internal/builtin-plugins/network-manager/request-handlers/types.ts +10 -0
  332. package/src/internal/builtin-plugins/network-manager/revert-error-code.ts +2 -0
  333. package/src/internal/builtin-plugins/network-manager/type-extensions/config.ts +1 -1
  334. package/src/internal/builtin-plugins/network-manager/type-validation.ts +5 -1
  335. package/src/internal/builtin-plugins/node/helpers.ts +1 -1
  336. package/src/internal/builtin-plugins/node/index.ts +1 -1
  337. package/src/internal/builtin-plugins/node/json-rpc/handler.ts +10 -2
  338. package/src/internal/builtin-plugins/node/task-action.ts +2 -2
  339. package/src/internal/builtin-plugins/run/index.ts +1 -1
  340. package/src/internal/builtin-plugins/run/task-action.ts +2 -1
  341. package/src/internal/builtin-plugins/solidity/build-system/artifacts.ts +3 -0
  342. package/src/internal/builtin-plugins/solidity/build-system/build-system.ts +176 -45
  343. package/src/internal/builtin-plugins/solidity/build-system/cache.ts +2 -0
  344. package/src/internal/builtin-plugins/solidity/build-system/compilation-job.ts +16 -10
  345. package/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.ts +4 -4
  346. package/src/internal/builtin-plugins/solidity/build-system/compiler/index.ts +2 -2
  347. package/src/internal/builtin-plugins/solidity/build-system/compiler/solcjs-runner.ts +1 -1
  348. package/src/internal/builtin-plugins/solidity/build-system/dependency-graph-building.ts +1 -1
  349. package/src/internal/builtin-plugins/solidity/build-system/dependency-graph.ts +9 -7
  350. package/src/internal/builtin-plugins/solidity/build-system/read-source-file.ts +2 -2
  351. package/src/internal/builtin-plugins/solidity/build-system/resolver/dependency-resolver.ts +11 -11
  352. package/src/internal/builtin-plugins/solidity/build-system/resolver/remapped-npm-packages-graph.ts +1 -1
  353. package/src/internal/builtin-plugins/solidity/build-system/solc-info.ts +1 -0
  354. package/src/internal/builtin-plugins/solidity/build-system/warning-suppression.ts +2 -2
  355. package/src/internal/builtin-plugins/solidity/config.ts +23 -13
  356. package/src/internal/builtin-plugins/solidity/constants.ts +21 -0
  357. package/src/internal/builtin-plugins/solidity/hook-handlers/config.ts +1 -1
  358. package/src/internal/builtin-plugins/solidity/hook-handlers/hre.ts +14 -10
  359. package/src/internal/builtin-plugins/solidity/index.ts +1 -1
  360. package/src/internal/builtin-plugins/solidity/solidity-hooks.ts +1 -1
  361. package/src/internal/builtin-plugins/solidity/tasks/build.ts +359 -74
  362. package/src/internal/builtin-plugins/solidity/type-extensions.ts +38 -8
  363. package/src/internal/builtin-plugins/solidity-test/config.ts +11 -2
  364. package/src/internal/builtin-plugins/solidity-test/edr-artifacts.ts +2 -2
  365. package/src/internal/builtin-plugins/solidity-test/helpers.ts +0 -7
  366. package/src/internal/builtin-plugins/solidity-test/hook-handlers/config.ts +1 -1
  367. package/src/internal/builtin-plugins/solidity-test/hook-handlers/test.ts +1 -1
  368. package/src/internal/builtin-plugins/solidity-test/index.ts +1 -1
  369. package/src/internal/builtin-plugins/solidity-test/reporter.ts +1 -1
  370. package/src/internal/builtin-plugins/solidity-test/runner.ts +64 -83
  371. package/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.ts +15 -2
  372. package/src/internal/builtin-plugins/solidity-test/task-action.ts +161 -43
  373. package/src/internal/builtin-plugins/solidity-test/type-extensions.ts +1 -2
  374. package/src/internal/builtin-plugins/telemetry/index.ts +1 -1
  375. package/src/internal/builtin-plugins/test/hook-handlers/config.ts +1 -1
  376. package/src/internal/builtin-plugins/test/index.ts +1 -1
  377. package/src/internal/builtin-plugins/test/task-action.ts +3 -4
  378. package/src/internal/cli/init/init.ts +1 -1
  379. package/src/internal/cli/main.ts +19 -3
  380. package/src/internal/cli/node-version.ts +3 -0
  381. package/src/internal/cli/telemetry/analytics/analytics.ts +2 -2
  382. package/src/internal/cli/telemetry/error-reporter/global-error-handlers.ts +64 -0
  383. package/src/internal/cli/telemetry/error-reporter/reporter.ts +49 -0
  384. package/src/internal/cli/telemetry/sentry/anonymizer.ts +1 -1
  385. package/src/internal/cli/telemetry/sentry/init.ts +2 -62
  386. package/src/internal/cli/telemetry/sentry/reporter.ts +27 -15
  387. package/src/internal/cli/telemetry/sentry/transport.ts +1 -1
  388. package/src/internal/cli/telemetry/telemetry-permissions.ts +1 -1
  389. package/src/internal/config-loading.ts +3 -3
  390. package/src/internal/core/configuration-variables.ts +19 -18
  391. package/src/internal/core/hook-manager.ts +3 -3
  392. package/src/internal/core/hre.ts +5 -3
  393. package/src/internal/core/plugins/resolve-plugin-list.ts +1 -1
  394. package/src/internal/core/tasks/resolved-task.ts +4 -4
  395. package/src/internal/core/user-interruptions.ts +9 -9
  396. package/src/internal/hre-initialization.ts +1 -1
  397. package/src/types/artifacts.ts +5 -4
  398. package/src/types/network.ts +48 -0
  399. package/src/types/solidity/build-system.ts +66 -3
  400. package/src/types/solidity/compilation-job.ts +7 -0
  401. package/src/types/solidity/solidity-artifacts.ts +16 -0
  402. package/templates/hardhat-2/04-mocha-viem-ts/package.json +1 -1
  403. package/templates/hardhat-3/01-node-test-runner-viem/gitignore +11 -0
  404. package/templates/hardhat-3/01-node-test-runner-viem/package.json +12 -12
  405. package/templates/hardhat-3/01-node-test-runner-viem/scripts/send-op-tx.ts +1 -1
  406. package/templates/hardhat-3/01-node-test-runner-viem/test/Counter.ts +1 -1
  407. package/templates/hardhat-3/02-mocha-ethers/gitignore +11 -0
  408. package/templates/hardhat-3/02-mocha-ethers/package.json +14 -14
  409. package/templates/hardhat-3/02-mocha-ethers/scripts/send-op-tx.ts +1 -1
  410. package/templates/hardhat-3/02-mocha-ethers/test/Counter.ts +1 -1
  411. package/templates/hardhat-3/03-minimal/gitignore +11 -0
  412. package/templates/hardhat-3/03-minimal/package.json +1 -1
  413. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.d.ts +0 -14
  414. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.d.ts.map +0 -1
  415. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.js +0 -55
  416. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.js.map +0 -1
  417. package/src/internal/builtin-plugins/gas-analytics/helpers.ts +0 -96
@@ -281,7 +281,7 @@ export async function hardhatAccountsToEdrOwnedAccounts(
281
281
  balance: account.balance,
282
282
  }));
283
283
 
284
- return Promise.all(accountPromises);
284
+ return await Promise.all(accountPromises);
285
285
  }
286
286
 
287
287
  export async function normalizeEdrNetworkAccountsConfig(
@@ -404,7 +404,7 @@ export function edrGasReportToHardhatGasMeasurements(
404
404
  contractFqn,
405
405
  type: "deployment",
406
406
  gas: Number(deployment.gas),
407
- size: Number(deployment.size),
407
+ runtimeSize: Number(deployment.runtimeSize),
408
408
  });
409
409
  }
410
410
  }
@@ -418,6 +418,7 @@ export function edrGasReportToHardhatGasMeasurements(
418
418
  type: "function",
419
419
  functionSig,
420
420
  gas: Number(call.gas),
421
+ proxyChain: call.proxyChain,
421
422
  });
422
423
  }
423
424
  }
@@ -12,21 +12,50 @@ export default async (): Promise<Partial<HardhatRuntimeEnvironmentHooks>> => ({
12
12
  let networkManager: NetworkManager | undefined;
13
13
 
14
14
  hre.network = {
15
+ async create(networkConnectionParams) {
16
+ if (networkManager === undefined) {
17
+ networkManager = await createNetworkManager(hre, context);
18
+ }
19
+
20
+ return await networkManager.create(networkConnectionParams);
21
+ },
22
+
15
23
  async connect(networkConnectionParams) {
16
24
  if (networkManager === undefined) {
17
25
  networkManager = await createNetworkManager(hre, context);
18
26
  }
19
27
 
20
- return networkManager.connect(networkConnectionParams);
28
+ return await networkManager.connect(networkConnectionParams);
29
+ },
30
+
31
+ async getOrCreate(networkOrParams) {
32
+ if (networkManager === undefined) {
33
+ networkManager = await createNetworkManager(hre, context);
34
+ }
35
+
36
+ return await networkManager.getOrCreate(networkOrParams);
21
37
  },
38
+
22
39
  async createServer(...params) {
23
40
  if (networkManager === undefined) {
24
41
  networkManager = await createNetworkManager(hre, context);
25
42
  }
26
43
 
27
- return networkManager.createServer(...params);
44
+ return await networkManager.createServer(...params);
28
45
  },
29
46
  };
47
+
48
+ // To avoid adding `wasConnectCalled` to the public interface of
49
+ // `NetworkManager`, we add this pass through method that is only
50
+ // called from the `main` function.
51
+ Object.defineProperty(hre.network, "wasConnectCalled", {
52
+ value: () =>
53
+ networkManager !== undefined &&
54
+ "wasConnectCalled" in networkManager &&
55
+ typeof networkManager.wasConnectCalled === "function" &&
56
+ networkManager.wasConnectCalled(),
57
+ enumerable: false,
58
+ });
30
59
  },
31
60
  });
32
61
 
@@ -38,24 +38,26 @@ export default async (): Promise<Partial<NetworkHooks>> => {
38
38
  nextJsonRpcRequest: JsonRpcRequest,
39
39
  ) => Promise<JsonRpcResponse>,
40
40
  ) {
41
- const requestHandlers = await initializationMutex.exclusiveRun(
42
- async () => {
43
- let handlersPerConnection =
44
- requestHandlersPerConnection.get(networkConnection);
41
+ let requestHandlers = requestHandlersPerConnection.get(networkConnection);
45
42
 
46
- if (handlersPerConnection === undefined) {
47
- handlersPerConnection =
48
- await createHandlersArray(networkConnection);
43
+ if (requestHandlers === undefined) {
44
+ requestHandlers = await initializationMutex.exclusiveRun(async () => {
45
+ // We check again in case another execution of this function
46
+ // initialized the handlers while we were waiting for the mutex.
47
+ const handlersPerConnectionAfterWaiting =
48
+ requestHandlersPerConnection.get(networkConnection);
49
49
 
50
- requestHandlersPerConnection.set(
51
- networkConnection,
52
- handlersPerConnection,
53
- );
50
+ if (handlersPerConnectionAfterWaiting !== undefined) {
51
+ return handlersPerConnectionAfterWaiting;
54
52
  }
55
53
 
56
- return handlersPerConnection;
57
- },
58
- );
54
+ const result = await createHandlersArray(networkConnection);
55
+
56
+ requestHandlersPerConnection.set(networkConnection, result);
57
+
58
+ return result;
59
+ });
60
+ }
59
61
 
60
62
  // We previously cloned here, but the performance impact is significant.
61
63
  // TODO: ensure the passed in request is not mutated by adapting the
@@ -63,6 +65,10 @@ export default async (): Promise<Partial<NetworkHooks>> => {
63
65
  let updatedRequest = jsonRpcRequest;
64
66
 
65
67
  for (const handler of requestHandlers) {
68
+ if (!handler.isSupportedMethod(updatedRequest)) {
69
+ continue;
70
+ }
71
+
66
72
  const newRequestOrResponse = await handler.handle(updatedRequest);
67
73
 
68
74
  if (isJsonRpcResponse(newRequestOrResponse)) {
@@ -72,7 +78,7 @@ export default async (): Promise<Partial<NetworkHooks>> => {
72
78
  updatedRequest = newRequestOrResponse;
73
79
  }
74
80
 
75
- return next(context, networkConnection, updatedRequest);
81
+ return await next(context, networkConnection, updatedRequest);
76
82
  },
77
83
 
78
84
  async closeConnection<ChainTypeT extends ChainType | string>(
@@ -87,7 +93,7 @@ export default async (): Promise<Partial<NetworkHooks>> => {
87
93
  requestHandlersPerConnection.delete(networkConnection);
88
94
  }
89
95
 
90
- return next(context, networkConnection);
96
+ return await next(context, networkConnection);
91
97
  },
92
98
  };
93
99
 
@@ -224,7 +224,11 @@ export class HttpProvider extends BaseProvider {
224
224
  retryCount,
225
225
  );
226
226
  if (this.#shouldRetryRequest(retryAfterSeconds, retryCount)) {
227
- return this.#retry(jsonRpcRequest, retryAfterSeconds, retryCount);
227
+ return await this.#retry(
228
+ jsonRpcRequest,
229
+ retryAfterSeconds,
230
+ retryCount,
231
+ );
228
232
  }
229
233
 
230
234
  // eslint-disable-next-line no-restricted-syntax -- allow throwing ProviderError
@@ -269,7 +273,7 @@ export class HttpProvider extends BaseProvider {
269
273
  retryCount: number,
270
274
  ) {
271
275
  await sleep(retryAfterSeconds);
272
- return this.#fetchJsonRpcResponse(request, retryCount + 1);
276
+ return await this.#fetchJsonRpcResponse(request, retryCount + 1);
273
277
  }
274
278
  }
275
279
 
@@ -12,6 +12,7 @@ import type {
12
12
  DefaultChainType,
13
13
  JsonRpcServer,
14
14
  NetworkConnection,
15
+ CachedNetworkConnectionParams,
15
16
  NetworkConnectionParams,
16
17
  NetworkManager,
17
18
  } from "../../../types/network.js";
@@ -59,10 +60,18 @@ export class NetworkManagerImplementation implements NetworkManager {
59
60
  readonly #projectRoot: string;
60
61
  readonly #verbosity: number;
61
62
 
63
+ #connectCalled = false;
64
+
62
65
  #nextConnectionId = 0;
63
66
  readonly #contractDecoderMutex = new AsyncMutex();
64
67
  #contractDecoder: ContractDecoder | undefined;
65
68
 
69
+ readonly #getOrCreateMutex = new AsyncMutex();
70
+ readonly #getOrCreateCache = new Map<
71
+ string,
72
+ Map<string, NetworkConnection<ChainType | string>>
73
+ >();
74
+
66
75
  constructor(
67
76
  defaultNetwork: string,
68
77
  defaultChainType: DefaultChainType,
@@ -87,9 +96,7 @@ export class NetworkManagerImplementation implements NetworkManager {
87
96
  this.#verbosity = verbosity;
88
97
  }
89
98
 
90
- public async connect<
91
- ChainTypeT extends ChainType | string = DefaultChainType,
92
- >(
99
+ public async create<ChainTypeT extends ChainType | string = DefaultChainType>(
93
100
  networkOrParams?: NetworkConnectionParams<ChainTypeT> | string,
94
101
  ): Promise<NetworkConnection<ChainTypeT>> {
95
102
  let networkName: string | undefined;
@@ -109,7 +116,11 @@ export class NetworkManagerImplementation implements NetworkManager {
109
116
  "newConnection",
110
117
  [],
111
118
  async (_context) =>
112
- this.#initializeNetworkConnection(networkName, chainType, override),
119
+ await this.#initializeNetworkConnection(
120
+ networkName,
121
+ chainType,
122
+ override,
123
+ ),
113
124
  );
114
125
 
115
126
  /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions
@@ -117,6 +128,80 @@ export class NetworkManagerImplementation implements NetworkManager {
117
128
  return networkConnection as NetworkConnection<ChainTypeT>;
118
129
  }
119
130
 
131
+ public async connect<
132
+ ChainTypeT extends ChainType | string = DefaultChainType,
133
+ >(
134
+ networkOrParams?: NetworkConnectionParams<ChainTypeT> | string,
135
+ ): Promise<NetworkConnection<ChainTypeT>> {
136
+ this.#connectCalled = true;
137
+
138
+ return await this.create(networkOrParams);
139
+ }
140
+
141
+ public async getOrCreate<
142
+ ChainTypeT extends ChainType | string = DefaultChainType,
143
+ >(
144
+ networkOrParams?: CachedNetworkConnectionParams<ChainTypeT> | string,
145
+ ): Promise<NetworkConnection<ChainTypeT>> {
146
+ let network: string | undefined;
147
+ let chainType: ChainTypeT | undefined;
148
+
149
+ if (typeof networkOrParams === "string") {
150
+ network = networkOrParams;
151
+ } else if (networkOrParams !== undefined) {
152
+ network = networkOrParams.network;
153
+ chainType = networkOrParams.chainType;
154
+
155
+ if ("override" in networkOrParams) {
156
+ throw new HardhatError(
157
+ HardhatError.ERRORS.CORE.NETWORK.INVALID_CONFIG_OVERRIDE,
158
+ {
159
+ errors: "\t* Config overrides are not supported by getOrCreate.",
160
+ },
161
+ );
162
+ }
163
+ }
164
+
165
+ const { resolvedNetworkName, resolvedChainType } =
166
+ this.#resolveNetworkAndChainType(network, chainType);
167
+
168
+ const cached = this.#getOrCreateCache
169
+ .get(resolvedNetworkName)
170
+ ?.get(resolvedChainType);
171
+ if (cached !== undefined) {
172
+ /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions
173
+ -- Cast is safe: the cache keys guarantee the chain type matches */
174
+ return cached as NetworkConnection<ChainTypeT>;
175
+ }
176
+
177
+ return await this.#getOrCreateMutex.exclusiveRun(async () => {
178
+ // Double-check after acquiring the mutex — another call may have
179
+ // populated the cache while we were waiting.
180
+ const cachedAfterWaiting = this.#getOrCreateCache
181
+ .get(resolvedNetworkName)
182
+ ?.get(resolvedChainType);
183
+ if (cachedAfterWaiting !== undefined) {
184
+ /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions
185
+ -- Cast is safe: the cache keys guarantee the chain type matches */
186
+ return cachedAfterWaiting as NetworkConnection<ChainTypeT>;
187
+ }
188
+
189
+ const connection = await this.create({
190
+ network: resolvedNetworkName,
191
+ chainType: resolvedChainType,
192
+ });
193
+
194
+ let networkCache = this.#getOrCreateCache.get(resolvedNetworkName);
195
+ if (networkCache === undefined) {
196
+ networkCache = new Map();
197
+ this.#getOrCreateCache.set(resolvedNetworkName, networkCache);
198
+ }
199
+ networkCache.set(resolvedChainType, connection);
200
+
201
+ return connection;
202
+ });
203
+ }
204
+
120
205
  public async createServer<
121
206
  ChainTypeT extends ChainType | string = DefaultChainType,
122
207
  >(
@@ -129,7 +214,7 @@ export class NetworkManagerImplementation implements NetworkManager {
129
214
  const insideDocker = await exists("/.dockerenv");
130
215
  const hostname = _hostname ?? (insideDocker ? "0.0.0.0" : "127.0.0.1");
131
216
 
132
- const { provider } = await this.connect(networkOrParams);
217
+ const { provider } = await this.create(networkOrParams);
133
218
 
134
219
  return new JsonRpcServerImplementation({
135
220
  hostname,
@@ -138,30 +223,24 @@ export class NetworkManagerImplementation implements NetworkManager {
138
223
  });
139
224
  }
140
225
 
226
+ /**
227
+ * Returns whether the deprecated `connect` method has been called on this
228
+ * instance. It is not on the public NetworkManager interface as it is only
229
+ * used by the CLI to print a deprecation warning at exit.
230
+ *
231
+ * @returns whether the deprecated `connect` method has ever been called
232
+ */
233
+ public wasConnectCalled(): boolean {
234
+ return this.#connectCalled;
235
+ }
236
+
141
237
  async #initializeNetworkConnection<ChainTypeT extends ChainType | string>(
142
238
  networkName?: string,
143
239
  chainType?: ChainTypeT,
144
240
  networkConfigOverride?: NetworkConfigOverride,
145
241
  ): Promise<NetworkConnection<ChainTypeT>> {
146
- const resolvedNetworkName = networkName ?? this.#defaultNetwork;
147
- const existingNetworkConfig = this.#networkConfigs[resolvedNetworkName];
148
-
149
- if (existingNetworkConfig === undefined) {
150
- throw new HardhatError(
151
- HardhatError.ERRORS.CORE.NETWORK.NETWORK_NOT_FOUND,
152
- {
153
- networkName: resolvedNetworkName,
154
- },
155
- );
156
- }
157
-
158
- /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions --
159
- * Type assertion is safe: defaultChainType ensures non-undefined, and the
160
- * resolved value will be ChainTypeT (if provided) or a fallback that
161
- * satisfies the ChainType | string constraint */
162
- const resolvedChainType = (chainType ??
163
- existingNetworkConfig.chainType ??
164
- this.#defaultChainType) as ChainTypeT;
242
+ const { resolvedNetworkName, resolvedChainType } =
243
+ this.#resolveNetworkAndChainType(networkName, chainType);
165
244
 
166
245
  const resolvedNetworkConfig = await this.#resolveNetworkConfig(
167
246
  resolvedNetworkName,
@@ -185,7 +264,7 @@ export class NetworkManagerImplementation implements NetworkManager {
185
264
  "network",
186
265
  "onRequest",
187
266
  [networkConnection, request],
188
- async (_context, _connection, req) => defaultBehavior(req),
267
+ async (_context, _connection, req) => await defaultBehavior(req),
189
268
  );
190
269
 
191
270
  if (resolvedNetworkConfig.type === "edr-simulated") {
@@ -276,7 +355,7 @@ export class NetworkManagerImplementation implements NetworkManager {
276
355
 
277
356
  const includeCallTraces = verbosityToIncludeTraces(this.#verbosity);
278
357
 
279
- return EdrProvider.create({
358
+ return await EdrProvider.create({
280
359
  chainDescriptors: this.#chainDescriptors,
281
360
  // The resolvedNetworkConfig can have its chainType set to `undefined`
282
361
  // so we default to the default chain type here.
@@ -287,9 +366,7 @@ export class NetworkManagerImplementation implements NetworkManager {
287
366
  allowUnlimitedContractSize: shouldEnableCoverage
288
367
  ? true
289
368
  : resolvedNetworkConfig.allowUnlimitedContractSize,
290
- /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions --
291
- This case is safe because we have a check above */
292
- chainType: resolvedChainType as ChainType,
369
+ chainType: resolvedChainType,
293
370
  },
294
371
  jsonRpcRequestWrapper,
295
372
  contractDecoder: this.#contractDecoder,
@@ -302,7 +379,7 @@ export class NetworkManagerImplementation implements NetworkManager {
302
379
  });
303
380
  }
304
381
 
305
- return HttpProvider.create({
382
+ return await HttpProvider.create({
306
383
  url: await resolvedNetworkConfig.url.getUrl(),
307
384
  networkName: resolvedNetworkName,
308
385
  extraHeaders: resolvedNetworkConfig.httpHeaders,
@@ -311,7 +388,7 @@ export class NetworkManagerImplementation implements NetworkManager {
311
388
  });
312
389
  };
313
390
 
314
- return NetworkConnectionImplementation.create(
391
+ return await NetworkConnectionImplementation.create(
315
392
  this.#nextConnectionId++,
316
393
  resolvedNetworkName,
317
394
  resolvedChainType,
@@ -387,7 +464,7 @@ export class NetworkManagerImplementation implements NetworkManager {
387
464
  throw new HardhatError(
388
465
  HardhatError.ERRORS.CORE.NETWORK.INVALID_CONFIG_OVERRIDE,
389
466
  {
390
- errors: `\t* The chainType cannot be specified in config overrides. Pass it at the top level instead: hre.network.connect({ chainType: 'op' })`,
467
+ errors: `\t* The chainType cannot be specified in config overrides. Pass it at the top level instead: hre.network.create({ chainType: 'op' })`,
391
468
  },
392
469
  );
393
470
  }
@@ -474,6 +551,36 @@ export class NetworkManagerImplementation implements NetworkManager {
474
551
  return resolvedNetworkConfigOverride;
475
552
  }
476
553
 
554
+ #resolveNetworkAndChainType<
555
+ ChainTypeT extends ChainType | string = DefaultChainType,
556
+ >(
557
+ network: string | undefined,
558
+ chainType: ChainTypeT | undefined,
559
+ ): { resolvedNetworkName: string; resolvedChainType: ChainTypeT } {
560
+ const resolvedNetworkName = network ?? this.#defaultNetwork;
561
+ const existingNetworkConfig = this.#networkConfigs[resolvedNetworkName];
562
+
563
+ if (existingNetworkConfig === undefined) {
564
+ throw new HardhatError(
565
+ HardhatError.ERRORS.CORE.NETWORK.NETWORK_NOT_FOUND,
566
+ {
567
+ networkName: resolvedNetworkName,
568
+ },
569
+ );
570
+ }
571
+
572
+ const resolvedChainType =
573
+ chainType ?? existingNetworkConfig.chainType ?? this.#defaultChainType;
574
+
575
+ return {
576
+ resolvedNetworkName,
577
+ /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions
578
+ -- The cast is safe because the fallback values are valid chain
579
+ types that match the caller's expected type at runtime. */
580
+ resolvedChainType: resolvedChainType as ChainTypeT,
581
+ };
582
+ }
583
+
477
584
  async #getBuildInfosAndOutputsAsBuffers(): Promise<
478
585
  Array<{ buildInfo: Uint8Array; output: Uint8Array }>
479
586
  > {
@@ -27,6 +27,7 @@ export class HDWalletHandler extends LocalAccountsHandler {
27
27
 
28
28
  return new HDWalletHandler(provider, privateKeys);
29
29
  }
30
+
30
31
  private constructor(provider: EthereumProvider, privateKeys: string[]) {
31
32
  super(provider, privateKeys);
32
33
  }
@@ -39,6 +39,15 @@ import { ChainId } from "../chain-id/chain-id.js";
39
39
 
40
40
  const EXTRA_ENTROPY = false;
41
41
  export class LocalAccountsHandler extends ChainId implements RequestHandler {
42
+ readonly #methods: ReadonlySet<string> = new Set([
43
+ "eth_accounts",
44
+ "eth_requestAccounts",
45
+ "eth_sign",
46
+ "personal_sign",
47
+ "eth_signTypedData_v4",
48
+ "eth_sendTransaction",
49
+ ]);
50
+
42
51
  readonly #localAccountsHexPrivateKeys: string[];
43
52
 
44
53
  #addressToPrivateKey: Map<string, Uint8Array> | undefined;
@@ -53,6 +62,27 @@ export class LocalAccountsHandler extends ChainId implements RequestHandler {
53
62
  this.#localAccountsHexPrivateKeys = localAccountsHexPrivateKeys;
54
63
  }
55
64
 
65
+ public isSupportedMethod(jsonRpcRequest: JsonRpcRequest): boolean {
66
+ return this.#methods.has(jsonRpcRequest.method);
67
+ }
68
+
69
+ public async handle(
70
+ jsonRpcRequest: JsonRpcRequest,
71
+ ): Promise<JsonRpcRequest | JsonRpcResponse> {
72
+ if (!this.isSupportedMethod(jsonRpcRequest)) {
73
+ return jsonRpcRequest;
74
+ }
75
+
76
+ const response = await this.#resolveRequest(jsonRpcRequest);
77
+ if (response !== null) {
78
+ return response;
79
+ }
80
+
81
+ await this.#modifyRequest(jsonRpcRequest);
82
+
83
+ return jsonRpcRequest;
84
+ }
85
+
56
86
  async #getAddressesAndPrivateKeysMap(): Promise<{
57
87
  addresses: string[];
58
88
  addressToPrivateKey: Map<string, Uint8Array>;
@@ -75,19 +105,6 @@ export class LocalAccountsHandler extends ChainId implements RequestHandler {
75
105
  };
76
106
  }
77
107
 
78
- public async handle(
79
- jsonRpcRequest: JsonRpcRequest,
80
- ): Promise<JsonRpcRequest | JsonRpcResponse> {
81
- const response = await this.#resolveRequest(jsonRpcRequest);
82
- if (response !== null) {
83
- return response;
84
- }
85
-
86
- await this.#modifyRequest(jsonRpcRequest);
87
-
88
- return jsonRpcRequest;
89
- }
90
-
91
108
  async #resolveRequest(
92
109
  jsonRpcRequest: JsonRpcRequest,
93
110
  ): Promise<JsonRpcResponse | null> {
@@ -17,35 +17,43 @@ import { getRequestParams } from "../../../json-rpc.js";
17
17
  * The class also provides a mechanism to retrieve the sender account, which must be implemented by subclasses.
18
18
  */
19
19
  export abstract class SenderHandler implements RequestHandler {
20
+ readonly #methods: ReadonlySet<string> = new Set([
21
+ "eth_sendTransaction",
22
+ "eth_call",
23
+ "eth_estimateGas",
24
+ ]);
25
+
20
26
  protected readonly provider: EthereumProvider;
21
27
 
22
28
  constructor(provider: EthereumProvider) {
23
29
  this.provider = provider;
24
30
  }
25
31
 
32
+ public isSupportedMethod(jsonRpcRequest: JsonRpcRequest): boolean {
33
+ return this.#methods.has(jsonRpcRequest.method);
34
+ }
35
+
26
36
  public async handle(
27
37
  jsonRpcRequest: JsonRpcRequest,
28
38
  ): Promise<JsonRpcRequest | JsonRpcResponse> {
39
+ if (!this.isSupportedMethod(jsonRpcRequest)) {
40
+ return jsonRpcRequest;
41
+ }
42
+
29
43
  const method = jsonRpcRequest.method;
30
44
  const params = getRequestParams(jsonRpcRequest);
31
45
 
32
- if (
33
- method === "eth_sendTransaction" ||
34
- method === "eth_call" ||
35
- method === "eth_estimateGas"
36
- ) {
37
- const [tx] = params;
38
-
39
- if (isObject(tx) && tx.from === undefined) {
40
- const senderAccount = await this.getSender();
41
-
42
- if (senderAccount !== undefined) {
43
- tx.from = senderAccount;
44
- } else if (method === "eth_sendTransaction") {
45
- throw new HardhatError(
46
- HardhatError.ERRORS.CORE.NETWORK.NO_REMOTE_ACCOUNT_AVAILABLE,
47
- );
48
- }
46
+ const [tx] = params;
47
+
48
+ if (isObject(tx) && tx.from === undefined) {
49
+ const senderAccount = await this.getSender();
50
+
51
+ if (senderAccount !== undefined) {
52
+ tx.from = senderAccount;
53
+ } else if (method === "eth_sendTransaction") {
54
+ throw new HardhatError(
55
+ HardhatError.ERRORS.CORE.NETWORK.NO_REMOTE_ACCOUNT_AVAILABLE,
56
+ );
49
57
  }
50
58
  }
51
59
 
@@ -25,17 +25,25 @@ export class ChainIdValidatorHandler extends ChainId implements RequestHandler {
25
25
  this.#expectedChainId = expectedChainId;
26
26
  }
27
27
 
28
- public async handle(
29
- jsonRpcRequest: JsonRpcRequest,
30
- ): Promise<JsonRpcRequest | JsonRpcResponse> {
28
+ public isSupportedMethod(jsonRpcRequest: JsonRpcRequest): boolean {
29
+ if (this.#alreadyValidated) {
30
+ return false;
31
+ }
32
+
31
33
  if (
32
34
  jsonRpcRequest.method === "eth_chainId" ||
33
35
  jsonRpcRequest.method === "net_version"
34
36
  ) {
35
- return jsonRpcRequest;
37
+ return false;
36
38
  }
37
39
 
38
- if (this.#alreadyValidated) {
40
+ return true;
41
+ }
42
+
43
+ public async handle(
44
+ jsonRpcRequest: JsonRpcRequest,
45
+ ): Promise<JsonRpcRequest | JsonRpcResponse> {
46
+ if (!this.isSupportedMethod(jsonRpcRequest)) {
39
47
  return jsonRpcRequest;
40
48
  }
41
49
 
@@ -25,6 +25,8 @@ export class AutomaticGasHandler
25
25
  extends MultipliedGasEstimation
26
26
  implements RequestHandler
27
27
  {
28
+ readonly #methods: ReadonlySet<string> = new Set(["eth_sendTransaction"]);
29
+
28
30
  constructor(
29
31
  provider: EthereumProvider,
30
32
  gasMultiplier: number = DEFAULT_GAS_MULTIPLIER,
@@ -32,10 +34,14 @@ export class AutomaticGasHandler
32
34
  super(provider, gasMultiplier);
33
35
  }
34
36
 
37
+ public isSupportedMethod(jsonRpcRequest: JsonRpcRequest): boolean {
38
+ return this.#methods.has(jsonRpcRequest.method);
39
+ }
40
+
35
41
  public async handle(
36
42
  jsonRpcRequest: JsonRpcRequest,
37
43
  ): Promise<JsonRpcRequest | JsonRpcResponse> {
38
- if (jsonRpcRequest.method !== "eth_sendTransaction") {
44
+ if (!this.isSupportedMethod(jsonRpcRequest)) {
39
45
  return jsonRpcRequest;
40
46
  }
41
47
 
@@ -19,6 +19,8 @@ import { getRequestParams } from "../../../json-rpc.js";
19
19
  * It ensures that gas prices are set correctly.
20
20
  */
21
21
  export class AutomaticGasPriceHandler implements RequestHandler {
22
+ readonly #methods: ReadonlySet<string> = new Set(["eth_sendTransaction"]);
23
+
22
24
  readonly #provider: EthereumProvider;
23
25
 
24
26
  // We pay the max base fee that can be required if the next
@@ -36,10 +38,14 @@ export class AutomaticGasPriceHandler implements RequestHandler {
36
38
  #nodeHasFeeHistory?: boolean;
37
39
  #nodeSupportsEIP1559?: boolean;
38
40
 
41
+ public isSupportedMethod(jsonRpcRequest: JsonRpcRequest): boolean {
42
+ return this.#methods.has(jsonRpcRequest.method);
43
+ }
44
+
39
45
  public async handle(
40
46
  jsonRpcRequest: JsonRpcRequest,
41
47
  ): Promise<JsonRpcRequest | JsonRpcResponse> {
42
- if (jsonRpcRequest.method !== "eth_sendTransaction") {
48
+ if (!this.isSupportedMethod(jsonRpcRequest)) {
43
49
  return jsonRpcRequest;
44
50
  }
45
51
 
@@ -14,16 +14,22 @@ import { getRequestParams } from "../../../json-rpc.js";
14
14
  * For `eth_sendTransaction` requests, it sets the gas field with the value provided via the class constructor, if it hasn't been specified already.
15
15
  */
16
16
  export class FixedGasHandler implements RequestHandler {
17
+ readonly #methods: ReadonlySet<string> = new Set(["eth_sendTransaction"]);
18
+
17
19
  readonly #gas: PrefixedHexString;
18
20
 
19
21
  constructor(gas: PrefixedHexString) {
20
22
  this.#gas = gas;
21
23
  }
22
24
 
25
+ public isSupportedMethod(jsonRpcRequest: JsonRpcRequest): boolean {
26
+ return this.#methods.has(jsonRpcRequest.method);
27
+ }
28
+
23
29
  public async handle(
24
30
  jsonRpcRequest: JsonRpcRequest,
25
31
  ): Promise<JsonRpcRequest | JsonRpcResponse> {
26
- if (jsonRpcRequest.method !== "eth_sendTransaction") {
32
+ if (!this.isSupportedMethod(jsonRpcRequest)) {
27
33
  return jsonRpcRequest;
28
34
  }
29
35