hardhat 3.2.0 → 3.4.0

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 (432) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/dist/src/internal/builtin-global-options.d.ts.map +1 -1
  3. package/dist/src/internal/builtin-global-options.js +14 -1
  4. package/dist/src/internal/builtin-global-options.js.map +1 -1
  5. package/dist/src/internal/builtin-plugins/artifacts/artifact-manager.d.ts.map +1 -1
  6. package/dist/src/internal/builtin-plugins/artifacts/artifact-manager.js +5 -13
  7. package/dist/src/internal/builtin-plugins/artifacts/artifact-manager.js.map +1 -1
  8. package/dist/src/internal/builtin-plugins/console/task-action.d.ts.map +1 -1
  9. package/dist/src/internal/builtin-plugins/console/task-action.js +2 -1
  10. package/dist/src/internal/builtin-plugins/console/task-action.js.map +1 -1
  11. package/dist/src/internal/builtin-plugins/gas-analytics/exports.d.ts +1 -1
  12. package/dist/src/internal/builtin-plugins/gas-analytics/exports.d.ts.map +1 -1
  13. package/dist/src/internal/builtin-plugins/gas-analytics/exports.js +1 -1
  14. package/dist/src/internal/builtin-plugins/gas-analytics/exports.js.map +1 -1
  15. package/dist/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.d.ts.map +1 -1
  16. package/dist/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.js +1 -2
  17. package/dist/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.js.map +1 -1
  18. package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.d.ts +7 -5
  19. package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.d.ts.map +1 -1
  20. package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.js +60 -44
  21. package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.js.map +1 -1
  22. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.d.ts +6 -0
  23. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.d.ts.map +1 -0
  24. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.js +14 -0
  25. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.js.map +1 -0
  26. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.d.ts +4 -0
  27. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.d.ts.map +1 -0
  28. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.js +27 -0
  29. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.js.map +1 -0
  30. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.d.ts +36 -0
  31. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.d.ts.map +1 -0
  32. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.js +86 -0
  33. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.js.map +1 -0
  34. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.js +1 -1
  35. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.js.map +1 -1
  36. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/test.js +1 -1
  37. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/test.js.map +1 -1
  38. package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.d.ts.map +1 -1
  39. package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.js +1 -2
  40. package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.js.map +1 -1
  41. package/dist/src/internal/builtin-plugins/gas-analytics/types.d.ts +10 -2
  42. package/dist/src/internal/builtin-plugins/gas-analytics/types.d.ts.map +1 -1
  43. package/dist/src/internal/builtin-plugins/network-manager/accounts/derive-private-keys.d.ts.map +1 -1
  44. package/dist/src/internal/builtin-plugins/network-manager/accounts/derive-private-keys.js +12 -2
  45. package/dist/src/internal/builtin-plugins/network-manager/accounts/derive-private-keys.js.map +1 -1
  46. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.d.ts +9 -3
  47. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.d.ts.map +1 -1
  48. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.js +65 -42
  49. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.js.map +1 -1
  50. package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.d.ts +11 -0
  51. package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.d.ts.map +1 -0
  52. package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.js +104 -0
  53. package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.js.map +1 -0
  54. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.d.ts +4 -4
  55. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.d.ts.map +1 -1
  56. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.js +2 -2
  57. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.js.map +1 -1
  58. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.d.ts +6 -3
  59. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.d.ts.map +1 -1
  60. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.js +23 -5
  61. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.js.map +1 -1
  62. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.d.ts.map +1 -1
  63. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.js +2 -1
  64. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.js.map +1 -1
  65. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.d.ts +6 -0
  66. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.d.ts.map +1 -0
  67. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.js +152 -0
  68. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.js.map +1 -0
  69. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.d.ts +19 -0
  70. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.d.ts.map +1 -0
  71. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.js +104 -0
  72. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.js.map +1 -0
  73. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/hre.d.ts.map +1 -1
  74. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/hre.js +23 -1
  75. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/hre.js.map +1 -1
  76. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.d.ts.map +1 -1
  77. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.js +25 -17
  78. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.js.map +1 -1
  79. package/dist/src/internal/builtin-plugins/network-manager/http-provider.d.ts.map +1 -1
  80. package/dist/src/internal/builtin-plugins/network-manager/http-provider.js +1 -0
  81. package/dist/src/internal/builtin-plugins/network-manager/http-provider.js.map +1 -1
  82. package/dist/src/internal/builtin-plugins/network-manager/network-manager.d.ts +12 -2
  83. package/dist/src/internal/builtin-plugins/network-manager/network-manager.d.ts.map +1 -1
  84. package/dist/src/internal/builtin-plugins/network-manager/network-manager.js +149 -26
  85. package/dist/src/internal/builtin-plugins/network-manager/network-manager.js.map +1 -1
  86. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/hd-wallet-handler.d.ts.map +1 -1
  87. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/hd-wallet-handler.js.map +1 -1
  88. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.d.ts +1 -0
  89. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.d.ts.map +1 -1
  90. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.js +70 -33
  91. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.js.map +1 -1
  92. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.d.ts +2 -0
  93. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.d.ts.map +1 -1
  94. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.js +19 -12
  95. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.js.map +1 -1
  96. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.d.ts +1 -0
  97. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.d.ts.map +1 -1
  98. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.js +9 -3
  99. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.js.map +1 -1
  100. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.d.ts +2 -0
  101. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.d.ts.map +1 -1
  102. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.js +5 -1
  103. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.js.map +1 -1
  104. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.d.ts +1 -0
  105. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.d.ts.map +1 -1
  106. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.js +5 -1
  107. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.js.map +1 -1
  108. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.d.ts +1 -0
  109. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.d.ts.map +1 -1
  110. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.js +5 -1
  111. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.js.map +1 -1
  112. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.d.ts +1 -0
  113. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.d.ts.map +1 -1
  114. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.js +5 -1
  115. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.js.map +1 -1
  116. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.d.ts +0 -3
  117. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.d.ts.map +1 -1
  118. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.js +9 -12
  119. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.js.map +1 -1
  120. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/types.d.ts +9 -0
  121. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/types.d.ts.map +1 -1
  122. package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.d.ts +2 -0
  123. package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.d.ts.map +1 -0
  124. package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.js +3 -0
  125. package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.js.map +1 -0
  126. package/dist/src/internal/builtin-plugins/network-manager/type-extensions/config.d.ts +1 -1
  127. package/dist/src/internal/builtin-plugins/network-manager/type-extensions/config.d.ts.map +1 -1
  128. package/dist/src/internal/builtin-plugins/network-manager/type-validation.d.ts.map +1 -1
  129. package/dist/src/internal/builtin-plugins/network-manager/type-validation.js +2 -1
  130. package/dist/src/internal/builtin-plugins/network-manager/type-validation.js.map +1 -1
  131. package/dist/src/internal/builtin-plugins/node/artifacts/build-info-watcher.d.ts.map +1 -1
  132. package/dist/src/internal/builtin-plugins/node/artifacts/build-info-watcher.js +1 -1
  133. package/dist/src/internal/builtin-plugins/node/artifacts/build-info-watcher.js.map +1 -1
  134. package/dist/src/internal/builtin-plugins/node/helpers.d.ts.map +1 -1
  135. package/dist/src/internal/builtin-plugins/node/helpers.js +6 -2
  136. package/dist/src/internal/builtin-plugins/node/helpers.js.map +1 -1
  137. package/dist/src/internal/builtin-plugins/node/json-rpc/handler.d.ts.map +1 -1
  138. package/dist/src/internal/builtin-plugins/node/json-rpc/handler.js +8 -2
  139. package/dist/src/internal/builtin-plugins/node/json-rpc/handler.js.map +1 -1
  140. package/dist/src/internal/builtin-plugins/node/task-action.js +2 -2
  141. package/dist/src/internal/builtin-plugins/node/task-action.js.map +1 -1
  142. package/dist/src/internal/builtin-plugins/run/task-action.d.ts.map +1 -1
  143. package/dist/src/internal/builtin-plugins/run/task-action.js +2 -1
  144. package/dist/src/internal/builtin-plugins/run/task-action.js.map +1 -1
  145. package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.d.ts.map +1 -1
  146. package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.js +7 -0
  147. package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.js.map +1 -1
  148. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.d.ts +6 -2
  149. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.d.ts.map +1 -1
  150. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.js +198 -76
  151. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.js.map +1 -1
  152. package/dist/src/internal/builtin-plugins/solidity/build-system/cache.d.ts +3 -0
  153. package/dist/src/internal/builtin-plugins/solidity/build-system/cache.d.ts.map +1 -1
  154. package/dist/src/internal/builtin-plugins/solidity/build-system/cache.js.map +1 -1
  155. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.d.ts +5 -3
  156. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.d.ts.map +1 -1
  157. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.js +35 -7
  158. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.js.map +1 -1
  159. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.d.ts +16 -0
  160. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.d.ts.map +1 -1
  161. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.js +1 -1
  162. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.js.map +1 -1
  163. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.d.ts.map +1 -1
  164. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.js +1 -1
  165. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.js.map +1 -1
  166. package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph.d.ts.map +1 -1
  167. package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph.js +5 -5
  168. package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph.js.map +1 -1
  169. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-config-selection.d.ts +2 -2
  170. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-config-selection.d.ts.map +1 -1
  171. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-config-selection.js.map +1 -1
  172. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-info.d.ts.map +1 -1
  173. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-info.js +1 -0
  174. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-info.js.map +1 -1
  175. package/dist/src/internal/builtin-plugins/solidity/build-system/warning-suppression.js +2 -2
  176. package/dist/src/internal/builtin-plugins/solidity/build-system/warning-suppression.js.map +1 -1
  177. package/dist/src/internal/builtin-plugins/solidity/config.d.ts +4 -2
  178. package/dist/src/internal/builtin-plugins/solidity/config.d.ts.map +1 -1
  179. package/dist/src/internal/builtin-plugins/solidity/config.js +266 -84
  180. package/dist/src/internal/builtin-plugins/solidity/config.js.map +1 -1
  181. package/dist/src/internal/builtin-plugins/solidity/constants.d.ts +3 -0
  182. package/dist/src/internal/builtin-plugins/solidity/constants.d.ts.map +1 -0
  183. package/dist/src/internal/builtin-plugins/solidity/constants.js +19 -0
  184. package/dist/src/internal/builtin-plugins/solidity/constants.js.map +1 -0
  185. package/dist/src/internal/builtin-plugins/solidity/exports.d.ts +3 -0
  186. package/dist/src/internal/builtin-plugins/solidity/exports.d.ts.map +1 -0
  187. package/dist/src/internal/builtin-plugins/solidity/exports.js +3 -0
  188. package/dist/src/internal/builtin-plugins/solidity/exports.js.map +1 -0
  189. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/config.d.ts.map +1 -1
  190. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/config.js +2 -1
  191. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/config.js.map +1 -1
  192. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/solidity.d.ts +4 -0
  193. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/solidity.d.ts.map +1 -0
  194. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/solidity.js +7 -0
  195. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/solidity.js.map +1 -0
  196. package/dist/src/internal/builtin-plugins/solidity/index.d.ts.map +1 -1
  197. package/dist/src/internal/builtin-plugins/solidity/index.js +1 -0
  198. package/dist/src/internal/builtin-plugins/solidity/index.js.map +1 -1
  199. package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.d.ts +18 -0
  200. package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.d.ts.map +1 -0
  201. package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.js +33 -0
  202. package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.js.map +1 -0
  203. package/dist/src/internal/builtin-plugins/solidity/tasks/build.d.ts +1 -1
  204. package/dist/src/internal/builtin-plugins/solidity/tasks/build.d.ts.map +1 -1
  205. package/dist/src/internal/builtin-plugins/solidity/tasks/build.js +225 -55
  206. package/dist/src/internal/builtin-plugins/solidity/tasks/build.js.map +1 -1
  207. package/dist/src/internal/builtin-plugins/solidity/type-extensions.d.ts +227 -28
  208. package/dist/src/internal/builtin-plugins/solidity/type-extensions.d.ts.map +1 -1
  209. package/dist/src/internal/builtin-plugins/solidity/type-extensions.js.map +1 -1
  210. package/dist/src/internal/builtin-plugins/solidity-test/config.d.ts.map +1 -1
  211. package/dist/src/internal/builtin-plugins/solidity-test/config.js +5 -3
  212. package/dist/src/internal/builtin-plugins/solidity-test/config.js.map +1 -1
  213. package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.d.ts +12 -6
  214. package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.d.ts.map +1 -1
  215. package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.js +9 -7
  216. package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.js.map +1 -1
  217. package/dist/src/internal/builtin-plugins/solidity-test/formatters.d.ts +1 -12
  218. package/dist/src/internal/builtin-plugins/solidity-test/formatters.d.ts.map +1 -1
  219. package/dist/src/internal/builtin-plugins/solidity-test/formatters.js +0 -150
  220. package/dist/src/internal/builtin-plugins/solidity-test/formatters.js.map +1 -1
  221. package/dist/src/internal/builtin-plugins/solidity-test/helpers.d.ts +4 -5
  222. package/dist/src/internal/builtin-plugins/solidity-test/helpers.d.ts.map +1 -1
  223. package/dist/src/internal/builtin-plugins/solidity-test/helpers.js +5 -12
  224. package/dist/src/internal/builtin-plugins/solidity-test/helpers.js.map +1 -1
  225. package/dist/src/internal/builtin-plugins/solidity-test/index.d.ts.map +1 -1
  226. package/dist/src/internal/builtin-plugins/solidity-test/index.js +0 -7
  227. package/dist/src/internal/builtin-plugins/solidity-test/index.js.map +1 -1
  228. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/constants.d.ts +7 -0
  229. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/constants.d.ts.map +1 -0
  230. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/constants.js +20 -0
  231. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/constants.js.map +1 -0
  232. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/helpers.d.ts +24 -0
  233. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/helpers.d.ts.map +1 -0
  234. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/helpers.js +68 -0
  235. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/helpers.js.map +1 -0
  236. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/index.d.ts +13 -0
  237. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/index.d.ts.map +1 -0
  238. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/index.js +136 -0
  239. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/index.js.map +1 -0
  240. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/parsing.d.ts +19 -0
  241. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/parsing.d.ts.map +1 -0
  242. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/parsing.js +133 -0
  243. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/parsing.js.map +1 -0
  244. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/types.d.ts +10 -0
  245. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/types.d.ts.map +1 -0
  246. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/types.js +2 -0
  247. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/types.js.map +1 -0
  248. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/validation.d.ts +12 -0
  249. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/validation.d.ts.map +1 -0
  250. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/validation.js +81 -0
  251. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/validation.js.map +1 -0
  252. package/dist/src/internal/builtin-plugins/solidity-test/reporter.d.ts +1 -1
  253. package/dist/src/internal/builtin-plugins/solidity-test/reporter.d.ts.map +1 -1
  254. package/dist/src/internal/builtin-plugins/solidity-test/reporter.js +5 -2
  255. package/dist/src/internal/builtin-plugins/solidity-test/reporter.js.map +1 -1
  256. package/dist/src/internal/builtin-plugins/solidity-test/runner.d.ts +2 -8
  257. package/dist/src/internal/builtin-plugins/solidity-test/runner.d.ts.map +1 -1
  258. package/dist/src/internal/builtin-plugins/solidity-test/runner.js +47 -50
  259. package/dist/src/internal/builtin-plugins/solidity-test/runner.js.map +1 -1
  260. package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.d.ts.map +1 -1
  261. package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.js +11 -2
  262. package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.js.map +1 -1
  263. package/dist/src/internal/builtin-plugins/solidity-test/task-action.d.ts +0 -1
  264. package/dist/src/internal/builtin-plugins/solidity-test/task-action.d.ts.map +1 -1
  265. package/dist/src/internal/builtin-plugins/solidity-test/task-action.js +122 -39
  266. package/dist/src/internal/builtin-plugins/solidity-test/task-action.js.map +1 -1
  267. package/dist/src/internal/builtin-plugins/solidity-test/type-extensions.d.ts +1 -2
  268. package/dist/src/internal/builtin-plugins/solidity-test/type-extensions.d.ts.map +1 -1
  269. package/dist/src/internal/builtin-plugins/test/index.d.ts.map +1 -1
  270. package/dist/src/internal/builtin-plugins/test/index.js +0 -7
  271. package/dist/src/internal/builtin-plugins/test/index.js.map +1 -1
  272. package/dist/src/internal/builtin-plugins/test/task-action.d.ts +0 -1
  273. package/dist/src/internal/builtin-plugins/test/task-action.d.ts.map +1 -1
  274. package/dist/src/internal/builtin-plugins/test/task-action.js +4 -8
  275. package/dist/src/internal/builtin-plugins/test/task-action.js.map +1 -1
  276. package/dist/src/internal/cli/help/get-help-string.d.ts.map +1 -1
  277. package/dist/src/internal/cli/help/get-help-string.js +1 -1
  278. package/dist/src/internal/cli/help/get-help-string.js.map +1 -1
  279. package/dist/src/internal/cli/init/init.d.ts.map +1 -1
  280. package/dist/src/internal/cli/init/init.js +1 -1
  281. package/dist/src/internal/cli/init/init.js.map +1 -1
  282. package/dist/src/internal/cli/init/prompt.d.ts.map +1 -1
  283. package/dist/src/internal/cli/init/prompt.js +1 -7
  284. package/dist/src/internal/cli/init/prompt.js.map +1 -1
  285. package/dist/src/internal/cli/main.d.ts.map +1 -1
  286. package/dist/src/internal/cli/main.js +8 -0
  287. package/dist/src/internal/cli/main.js.map +1 -1
  288. package/dist/src/internal/core/hre.d.ts +2 -1
  289. package/dist/src/internal/core/hre.d.ts.map +1 -1
  290. package/dist/src/internal/core/hre.js +18 -0
  291. package/dist/src/internal/core/hre.js.map +1 -1
  292. package/dist/src/internal/core/plugins/detect-plugin-npm-dependency-problems.d.ts.map +1 -1
  293. package/dist/src/internal/core/plugins/detect-plugin-npm-dependency-problems.js +6 -1
  294. package/dist/src/internal/core/plugins/detect-plugin-npm-dependency-problems.js.map +1 -1
  295. package/dist/src/internal/core/user-interruptions.d.ts.map +1 -1
  296. package/dist/src/internal/core/user-interruptions.js +2 -5
  297. package/dist/src/internal/core/user-interruptions.js.map +1 -1
  298. package/dist/src/internal/utils/colorizer.d.ts +10 -0
  299. package/dist/src/internal/utils/colorizer.d.ts.map +1 -0
  300. package/dist/src/internal/utils/colorizer.js +2 -0
  301. package/dist/src/internal/utils/colorizer.js.map +1 -0
  302. package/dist/src/internal/utils/package.d.ts.map +1 -1
  303. package/dist/src/internal/utils/package.js +1 -1
  304. package/dist/src/internal/utils/package.js.map +1 -1
  305. package/dist/src/types/artifacts.d.ts +5 -4
  306. package/dist/src/types/artifacts.d.ts.map +1 -1
  307. package/dist/src/types/global-options.d.ts +1 -0
  308. package/dist/src/types/global-options.d.ts.map +1 -1
  309. package/dist/src/types/hooks.d.ts +32 -0
  310. package/dist/src/types/hooks.d.ts.map +1 -1
  311. package/dist/src/types/network.d.ts +39 -0
  312. package/dist/src/types/network.d.ts.map +1 -1
  313. package/dist/src/types/solidity/build-system.d.ts +66 -3
  314. package/dist/src/types/solidity/build-system.d.ts.map +1 -1
  315. package/dist/src/types/solidity/build-system.js.map +1 -1
  316. package/dist/src/types/solidity/compilation-job.d.ts +11 -5
  317. package/dist/src/types/solidity/compilation-job.d.ts.map +1 -1
  318. package/dist/src/types/solidity/solidity-artifacts.d.ts +29 -0
  319. package/dist/src/types/solidity/solidity-artifacts.d.ts.map +1 -1
  320. package/package.json +10 -9
  321. package/src/internal/builtin-global-options.ts +15 -1
  322. package/src/internal/builtin-plugins/artifacts/artifact-manager.ts +9 -15
  323. package/src/internal/builtin-plugins/console/task-action.ts +2 -1
  324. package/src/internal/builtin-plugins/gas-analytics/exports.ts +1 -1
  325. package/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.ts +1 -2
  326. package/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.ts +100 -61
  327. package/src/internal/builtin-plugins/gas-analytics/helpers/accessors.ts +31 -0
  328. package/src/internal/builtin-plugins/gas-analytics/helpers/compat.ts +37 -0
  329. package/src/internal/builtin-plugins/gas-analytics/helpers/utils.ts +112 -0
  330. package/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.ts +1 -1
  331. package/src/internal/builtin-plugins/gas-analytics/hook-handlers/test.ts +1 -1
  332. package/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.ts +1 -2
  333. package/src/internal/builtin-plugins/gas-analytics/types.ts +11 -2
  334. package/src/internal/builtin-plugins/network-manager/accounts/derive-private-keys.ts +25 -3
  335. package/src/internal/builtin-plugins/network-manager/edr/edr-provider.ts +107 -56
  336. package/src/internal/builtin-plugins/network-manager/edr/genesis-state.ts +179 -0
  337. package/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.ts +4 -0
  338. package/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.ts +28 -4
  339. package/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.ts +2 -1
  340. package/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.ts +197 -0
  341. package/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.ts +137 -0
  342. package/src/internal/builtin-plugins/network-manager/hook-handlers/hre.ts +30 -0
  343. package/src/internal/builtin-plugins/network-manager/hook-handlers/network.ts +27 -24
  344. package/src/internal/builtin-plugins/network-manager/http-provider.ts +1 -0
  345. package/src/internal/builtin-plugins/network-manager/network-manager.ts +213 -37
  346. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/hd-wallet-handler.ts +1 -0
  347. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.ts +115 -34
  348. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.ts +25 -17
  349. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.ts +13 -5
  350. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.ts +7 -1
  351. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.ts +7 -1
  352. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.ts +7 -1
  353. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.ts +7 -1
  354. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.ts +10 -30
  355. package/src/internal/builtin-plugins/network-manager/request-handlers/types.ts +10 -0
  356. package/src/internal/builtin-plugins/network-manager/revert-error-code.ts +2 -0
  357. package/src/internal/builtin-plugins/network-manager/type-extensions/config.ts +1 -1
  358. package/src/internal/builtin-plugins/network-manager/type-validation.ts +5 -1
  359. package/src/internal/builtin-plugins/node/artifacts/build-info-watcher.ts +1 -2
  360. package/src/internal/builtin-plugins/node/helpers.ts +9 -2
  361. package/src/internal/builtin-plugins/node/json-rpc/handler.ts +10 -2
  362. package/src/internal/builtin-plugins/node/task-action.ts +2 -2
  363. package/src/internal/builtin-plugins/run/task-action.ts +2 -1
  364. package/src/internal/builtin-plugins/solidity/build-system/artifacts.ts +10 -2
  365. package/src/internal/builtin-plugins/solidity/build-system/build-system.ts +297 -99
  366. package/src/internal/builtin-plugins/solidity/build-system/cache.ts +3 -0
  367. package/src/internal/builtin-plugins/solidity/build-system/compilation-job.ts +49 -16
  368. package/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.ts +1 -1
  369. package/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.ts +1 -2
  370. package/src/internal/builtin-plugins/solidity/build-system/dependency-graph.ts +9 -7
  371. package/src/internal/builtin-plugins/solidity/build-system/solc-config-selection.ts +4 -2
  372. package/src/internal/builtin-plugins/solidity/build-system/solc-info.ts +1 -0
  373. package/src/internal/builtin-plugins/solidity/build-system/warning-suppression.ts +2 -2
  374. package/src/internal/builtin-plugins/solidity/config.ts +359 -124
  375. package/src/internal/builtin-plugins/solidity/constants.ts +21 -0
  376. package/src/internal/builtin-plugins/solidity/exports.ts +2 -0
  377. package/src/internal/builtin-plugins/solidity/hook-handlers/config.ts +3 -0
  378. package/src/internal/builtin-plugins/solidity/hook-handlers/solidity.ts +9 -0
  379. package/src/internal/builtin-plugins/solidity/index.ts +1 -0
  380. package/src/internal/builtin-plugins/solidity/solidity-hooks.ts +53 -0
  381. package/src/internal/builtin-plugins/solidity/tasks/build.ts +359 -74
  382. package/src/internal/builtin-plugins/solidity/type-extensions.ts +289 -32
  383. package/src/internal/builtin-plugins/solidity-test/config.ts +11 -2
  384. package/src/internal/builtin-plugins/solidity-test/edr-artifacts.ts +22 -10
  385. package/src/internal/builtin-plugins/solidity-test/formatters.ts +1 -213
  386. package/src/internal/builtin-plugins/solidity-test/helpers.ts +8 -15
  387. package/src/internal/builtin-plugins/solidity-test/index.ts +0 -7
  388. package/src/internal/builtin-plugins/solidity-test/inline-config/constants.ts +21 -0
  389. package/src/internal/builtin-plugins/solidity-test/inline-config/helpers.ts +99 -0
  390. package/src/internal/builtin-plugins/solidity-test/inline-config/index.ts +272 -0
  391. package/src/internal/builtin-plugins/solidity-test/inline-config/parsing.ts +186 -0
  392. package/src/internal/builtin-plugins/solidity-test/inline-config/types.ts +9 -0
  393. package/src/internal/builtin-plugins/solidity-test/inline-config/validation.ts +122 -0
  394. package/src/internal/builtin-plugins/solidity-test/reporter.ts +6 -6
  395. package/src/internal/builtin-plugins/solidity-test/runner.ts +64 -83
  396. package/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.ts +15 -2
  397. package/src/internal/builtin-plugins/solidity-test/task-action.ts +192 -57
  398. package/src/internal/builtin-plugins/solidity-test/type-extensions.ts +1 -2
  399. package/src/internal/builtin-plugins/test/index.ts +0 -7
  400. package/src/internal/builtin-plugins/test/task-action.ts +4 -10
  401. package/src/internal/cli/help/get-help-string.ts +2 -2
  402. package/src/internal/cli/init/init.ts +1 -1
  403. package/src/internal/cli/init/prompt.ts +1 -14
  404. package/src/internal/cli/main.ts +14 -0
  405. package/src/internal/core/hre.ts +33 -0
  406. package/src/internal/core/plugins/detect-plugin-npm-dependency-problems.ts +8 -1
  407. package/src/internal/core/user-interruptions.ts +3 -5
  408. package/src/internal/utils/colorizer.ts +9 -0
  409. package/src/internal/utils/package.ts +1 -2
  410. package/src/types/artifacts.ts +5 -4
  411. package/src/types/global-options.ts +1 -0
  412. package/src/types/hooks.ts +37 -0
  413. package/src/types/network.ts +48 -0
  414. package/src/types/solidity/build-system.ts +66 -3
  415. package/src/types/solidity/compilation-job.ts +12 -5
  416. package/src/types/solidity/solidity-artifacts.ts +32 -0
  417. package/templates/hardhat-2/04-mocha-viem-ts/package.json +1 -1
  418. package/templates/hardhat-3/01-node-test-runner-viem/gitignore +11 -0
  419. package/templates/hardhat-3/01-node-test-runner-viem/package.json +12 -12
  420. package/templates/hardhat-3/01-node-test-runner-viem/scripts/send-op-tx.ts +1 -1
  421. package/templates/hardhat-3/01-node-test-runner-viem/test/Counter.ts +1 -1
  422. package/templates/hardhat-3/02-mocha-ethers/gitignore +11 -0
  423. package/templates/hardhat-3/02-mocha-ethers/package.json +14 -14
  424. package/templates/hardhat-3/02-mocha-ethers/scripts/send-op-tx.ts +1 -1
  425. package/templates/hardhat-3/02-mocha-ethers/test/Counter.ts +1 -1
  426. package/templates/hardhat-3/03-minimal/gitignore +11 -0
  427. package/templates/hardhat-3/03-minimal/package.json +1 -1
  428. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.d.ts +0 -19
  429. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.d.ts.map +0 -1
  430. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.js +0 -46
  431. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.js.map +0 -1
  432. package/src/internal/builtin-plugins/gas-analytics/helpers.ts +0 -86
@@ -9,10 +9,10 @@ import type {
9
9
  } from "../../../../types/providers.js";
10
10
  import type { RequestHandler } from "../request-handlers/types.js";
11
11
 
12
- import { deepClone } from "@nomicfoundation/hardhat-utils/lang";
13
12
  import { AsyncMutex } from "@nomicfoundation/hardhat-utils/synchronization";
14
13
 
15
14
  import { isJsonRpcResponse } from "../json-rpc.js";
15
+ import { createHandlersArray } from "../request-handlers/handlers-array.js";
16
16
 
17
17
  export default async (): Promise<Partial<NetworkHooks>> => {
18
18
  // This map is essential for managing multiple network connections in Hardhat V3.
@@ -38,44 +38,47 @@ export default async (): Promise<Partial<NetworkHooks>> => {
38
38
  nextJsonRpcRequest: JsonRpcRequest,
39
39
  ) => Promise<JsonRpcResponse>,
40
40
  ) {
41
- const { createHandlersArray } = await import(
42
- "../request-handlers/handlers-array.js"
43
- );
41
+ let requestHandlers = requestHandlersPerConnection.get(networkConnection);
44
42
 
45
- const requestHandlers = await initializationMutex.exclusiveRun(
46
- async () => {
47
- let handlersPerConnection =
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
48
  requestHandlersPerConnection.get(networkConnection);
49
49
 
50
- if (handlersPerConnection === undefined) {
51
- handlersPerConnection =
52
- await createHandlersArray(networkConnection);
53
-
54
- requestHandlersPerConnection.set(
55
- networkConnection,
56
- handlersPerConnection,
57
- );
50
+ if (handlersPerConnectionAfterWaiting !== undefined) {
51
+ return handlersPerConnectionAfterWaiting;
58
52
  }
59
53
 
60
- return handlersPerConnection;
61
- },
62
- );
54
+ const result = await createHandlersArray(networkConnection);
55
+
56
+ requestHandlersPerConnection.set(networkConnection, result);
57
+
58
+ return result;
59
+ });
60
+ }
63
61
 
64
- // We clone the request to avoid interfering with other hook handlers that
65
- // might be using the original request.
66
- let request = await deepClone(jsonRpcRequest);
62
+ // We previously cloned here, but the performance impact is significant.
63
+ // TODO: ensure the passed in request is not mutated by adapting the
64
+ // handlers being applied here. See https://github.com/NomicFoundation/hardhat/issues/8090
65
+ let updatedRequest = jsonRpcRequest;
67
66
 
68
67
  for (const handler of requestHandlers) {
69
- const newRequestOrResponse = await handler.handle(request);
68
+ if (!handler.isSupportedMethod(updatedRequest)) {
69
+ continue;
70
+ }
71
+
72
+ const newRequestOrResponse = await handler.handle(updatedRequest);
70
73
 
71
74
  if (isJsonRpcResponse(newRequestOrResponse)) {
72
75
  return newRequestOrResponse;
73
76
  }
74
77
 
75
- request = newRequestOrResponse;
78
+ updatedRequest = newRequestOrResponse;
76
79
  }
77
80
 
78
- return next(context, networkConnection, request);
81
+ return next(context, networkConnection, updatedRequest);
79
82
  },
80
83
 
81
84
  async closeConnection<ChainTypeT extends ChainType | string>(
@@ -161,6 +161,7 @@ export class HttpProvider extends BaseProvider {
161
161
  }
162
162
 
163
163
  public async close(): Promise<void> {
164
+ this.removeAllListeners();
164
165
  if (this.#dispatcher !== undefined) {
165
166
  // See https://github.com/nodejs/undici/discussions/3522#discussioncomment-10498734
166
167
  await this.#dispatcher.close();
@@ -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";
@@ -21,7 +22,7 @@ import type {
21
22
  JsonRpcRequest,
22
23
  JsonRpcResponse,
23
24
  } from "../../../types/providers.js";
24
- import type { GasReportConfig } from "@nomicfoundation/edr";
25
+ import type { ContractDecoder, GasReportConfig } from "@nomicfoundation/edr";
25
26
 
26
27
  import {
27
28
  HardhatError,
@@ -29,6 +30,7 @@ import {
29
30
  } from "@nomicfoundation/hardhat-errors";
30
31
  import { exists, readBinaryFile } from "@nomicfoundation/hardhat-utils/fs";
31
32
  import { deepMerge } from "@nomicfoundation/hardhat-utils/lang";
33
+ import { AsyncMutex } from "@nomicfoundation/hardhat-utils/synchronization";
32
34
 
33
35
  import { resolveUserConfigToHardhatConfig } from "../../core/hre.js";
34
36
  import { isSupportedChainType } from "../../edr/chain-type.js";
@@ -37,6 +39,7 @@ import { JsonRpcServerImplementation } from "../node/json-rpc/server.js";
37
39
  import { EdrProvider } from "./edr/edr-provider.js";
38
40
  import { getHardforks } from "./edr/types/hardfork.js";
39
41
  import { edrGasReportToHardhatGasMeasurements } from "./edr/utils/convert-to-edr.js";
42
+ import { verbosityToIncludeTraces } from "./edr/utils/trace-formatters.js";
40
43
  import { HttpProvider } from "./http-provider.js";
41
44
  import { NetworkConnectionImplementation } from "./network-connection.js";
42
45
 
@@ -55,8 +58,19 @@ export class NetworkManagerImplementation implements NetworkManager {
55
58
  readonly #chainDescriptors: Readonly<ChainDescriptorsConfig>;
56
59
  readonly #userProvidedConfigPath: Readonly<string | undefined>;
57
60
  readonly #projectRoot: string;
61
+ readonly #verbosity: number;
62
+
63
+ #connectCalled = false;
58
64
 
59
65
  #nextConnectionId = 0;
66
+ readonly #contractDecoderMutex = new AsyncMutex();
67
+ #contractDecoder: ContractDecoder | undefined;
68
+
69
+ readonly #getOrCreateMutex = new AsyncMutex();
70
+ readonly #getOrCreateCache = new Map<
71
+ string,
72
+ Map<string, NetworkConnection<ChainType | string>>
73
+ >();
60
74
 
61
75
  constructor(
62
76
  defaultNetwork: string,
@@ -68,6 +82,7 @@ export class NetworkManagerImplementation implements NetworkManager {
68
82
  chainDescriptors: ChainDescriptorsConfig,
69
83
  userProvidedConfigPath: string | undefined,
70
84
  projectRoot: string,
85
+ verbosity: number,
71
86
  ) {
72
87
  this.#defaultNetwork = defaultNetwork;
73
88
  this.#defaultChainType = defaultChainType;
@@ -78,11 +93,10 @@ export class NetworkManagerImplementation implements NetworkManager {
78
93
  this.#chainDescriptors = chainDescriptors;
79
94
  this.#userProvidedConfigPath = userProvidedConfigPath;
80
95
  this.#projectRoot = projectRoot;
96
+ this.#verbosity = verbosity;
81
97
  }
82
98
 
83
- public async connect<
84
- ChainTypeT extends ChainType | string = DefaultChainType,
85
- >(
99
+ public async create<ChainTypeT extends ChainType | string = DefaultChainType>(
86
100
  networkOrParams?: NetworkConnectionParams<ChainTypeT> | string,
87
101
  ): Promise<NetworkConnection<ChainTypeT>> {
88
102
  let networkName: string | undefined;
@@ -110,6 +124,80 @@ export class NetworkManagerImplementation implements NetworkManager {
110
124
  return networkConnection as NetworkConnection<ChainTypeT>;
111
125
  }
112
126
 
127
+ public async connect<
128
+ ChainTypeT extends ChainType | string = DefaultChainType,
129
+ >(
130
+ networkOrParams?: NetworkConnectionParams<ChainTypeT> | string,
131
+ ): Promise<NetworkConnection<ChainTypeT>> {
132
+ this.#connectCalled = true;
133
+
134
+ return this.create(networkOrParams);
135
+ }
136
+
137
+ public async getOrCreate<
138
+ ChainTypeT extends ChainType | string = DefaultChainType,
139
+ >(
140
+ networkOrParams?: CachedNetworkConnectionParams<ChainTypeT> | string,
141
+ ): Promise<NetworkConnection<ChainTypeT>> {
142
+ let network: string | undefined;
143
+ let chainType: ChainTypeT | undefined;
144
+
145
+ if (typeof networkOrParams === "string") {
146
+ network = networkOrParams;
147
+ } else if (networkOrParams !== undefined) {
148
+ network = networkOrParams.network;
149
+ chainType = networkOrParams.chainType;
150
+
151
+ if ("override" in networkOrParams) {
152
+ throw new HardhatError(
153
+ HardhatError.ERRORS.CORE.NETWORK.INVALID_CONFIG_OVERRIDE,
154
+ {
155
+ errors: "\t* Config overrides are not supported by getOrCreate.",
156
+ },
157
+ );
158
+ }
159
+ }
160
+
161
+ const { resolvedNetworkName, resolvedChainType } =
162
+ this.#resolveNetworkAndChainType(network, chainType);
163
+
164
+ const cached = this.#getOrCreateCache
165
+ .get(resolvedNetworkName)
166
+ ?.get(resolvedChainType);
167
+ if (cached !== undefined) {
168
+ /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions
169
+ -- Cast is safe: the cache keys guarantee the chain type matches */
170
+ return cached as NetworkConnection<ChainTypeT>;
171
+ }
172
+
173
+ return this.#getOrCreateMutex.exclusiveRun(async () => {
174
+ // Double-check after acquiring the mutex — another call may have
175
+ // populated the cache while we were waiting.
176
+ const cachedAfterWaiting = this.#getOrCreateCache
177
+ .get(resolvedNetworkName)
178
+ ?.get(resolvedChainType);
179
+ if (cachedAfterWaiting !== undefined) {
180
+ /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions
181
+ -- Cast is safe: the cache keys guarantee the chain type matches */
182
+ return cachedAfterWaiting as NetworkConnection<ChainTypeT>;
183
+ }
184
+
185
+ const connection = await this.create({
186
+ network: resolvedNetworkName,
187
+ chainType: resolvedChainType,
188
+ });
189
+
190
+ let networkCache = this.#getOrCreateCache.get(resolvedNetworkName);
191
+ if (networkCache === undefined) {
192
+ networkCache = new Map();
193
+ this.#getOrCreateCache.set(resolvedNetworkName, networkCache);
194
+ }
195
+ networkCache.set(resolvedChainType, connection);
196
+
197
+ return connection;
198
+ });
199
+ }
200
+
113
201
  public async createServer<
114
202
  ChainTypeT extends ChainType | string = DefaultChainType,
115
203
  >(
@@ -122,7 +210,7 @@ export class NetworkManagerImplementation implements NetworkManager {
122
210
  const insideDocker = await exists("/.dockerenv");
123
211
  const hostname = _hostname ?? (insideDocker ? "0.0.0.0" : "127.0.0.1");
124
212
 
125
- const { provider } = await this.connect(networkOrParams);
213
+ const { provider } = await this.create(networkOrParams);
126
214
 
127
215
  return new JsonRpcServerImplementation({
128
216
  hostname,
@@ -131,30 +219,24 @@ export class NetworkManagerImplementation implements NetworkManager {
131
219
  });
132
220
  }
133
221
 
222
+ /**
223
+ * Returns whether the deprecated `connect` method has been called on this
224
+ * instance. It is not on the public NetworkManager interface as it is only
225
+ * used by the CLI to print a deprecation warning at exit.
226
+ *
227
+ * @returns whether the deprecated `connect` method has ever been called
228
+ */
229
+ public wasConnectCalled(): boolean {
230
+ return this.#connectCalled;
231
+ }
232
+
134
233
  async #initializeNetworkConnection<ChainTypeT extends ChainType | string>(
135
234
  networkName?: string,
136
235
  chainType?: ChainTypeT,
137
236
  networkConfigOverride?: NetworkConfigOverride,
138
237
  ): Promise<NetworkConnection<ChainTypeT>> {
139
- const resolvedNetworkName = networkName ?? this.#defaultNetwork;
140
- const existingNetworkConfig = this.#networkConfigs[resolvedNetworkName];
141
-
142
- if (existingNetworkConfig === undefined) {
143
- throw new HardhatError(
144
- HardhatError.ERRORS.CORE.NETWORK.NETWORK_NOT_FOUND,
145
- {
146
- networkName: resolvedNetworkName,
147
- },
148
- );
149
- }
150
-
151
- /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions --
152
- * Type assertion is safe: defaultChainType ensures non-undefined, and the
153
- * resolved value will be ChainTypeT (if provided) or a fallback that
154
- * satisfies the ChainType | string constraint */
155
- const resolvedChainType = (chainType ??
156
- existingNetworkConfig.chainType ??
157
- this.#defaultChainType) as ChainTypeT;
238
+ const { resolvedNetworkName, resolvedChainType } =
239
+ this.#resolveNetworkAndChainType(networkName, chainType);
158
240
 
159
241
  const resolvedNetworkConfig = await this.#resolveNetworkConfig(
160
242
  resolvedNetworkName,
@@ -233,6 +315,42 @@ export class NetworkManagerImplementation implements NetworkManager {
233
315
  };
234
316
  }
235
317
 
318
+ // We load the build infos and their outputs to create a contract
319
+ // decoder when the first provider is created. Successive providers will
320
+ // reuse the same decoder as a performance optimization.
321
+ //
322
+ // The trade-off here is that if you create an EDR provider, then
323
+ // compile new contracts, and create a new provider, the new contracts
324
+ // won't be loaded.
325
+ //
326
+ // Even without this optimization, we already had the problem of new
327
+ // contracts not being visible to existing providers.
328
+ //
329
+ // In practice, most workflows compile everything before creating
330
+ // any network connection.
331
+ if (this.#contractDecoder === undefined) {
332
+ // We want to ensure that only one contract decoder is created so we
333
+ // protect the initialization with a mutex.
334
+ await this.#contractDecoderMutex.exclusiveRun(async () => {
335
+ // We check again if the decoder is undefined because another async
336
+ // execution context could have already initialized it while we were
337
+ // waiting for the mutex.
338
+ if (this.#contractDecoder === undefined) {
339
+ this.#contractDecoder = await EdrProvider.createContractDecoder({
340
+ buildInfos: await this.#getBuildInfosAndOutputsAsBuffers(),
341
+ ignoreContracts: false,
342
+ });
343
+ }
344
+ });
345
+ }
346
+
347
+ assertHardhatInvariant(
348
+ this.#contractDecoder !== undefined,
349
+ "Contract decoder should have been initialized before creating the provider",
350
+ );
351
+
352
+ const includeCallTraces = verbosityToIncludeTraces(this.#verbosity);
353
+
236
354
  return EdrProvider.create({
237
355
  chainDescriptors: this.#chainDescriptors,
238
356
  // The resolvedNetworkConfig can have its chainType set to `undefined`
@@ -244,17 +362,16 @@ export class NetworkManagerImplementation implements NetworkManager {
244
362
  allowUnlimitedContractSize: shouldEnableCoverage
245
363
  ? true
246
364
  : resolvedNetworkConfig.allowUnlimitedContractSize,
247
- /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions --
248
- This case is safe because we have a check above */
249
- chainType: resolvedChainType as ChainType,
365
+ chainType: resolvedChainType,
250
366
  },
251
367
  jsonRpcRequestWrapper,
252
- tracingConfig: {
253
- buildInfos: await this.#getBuildInfosAndOutputsAsBuffers(),
254
- ignoreContracts: false,
255
- },
368
+ contractDecoder: this.#contractDecoder,
256
369
  coverageConfig,
257
370
  gasReportConfig,
371
+ includeCallTraces,
372
+ connectionId: networkConnection.id,
373
+ networkName: networkConnection.networkName,
374
+ verbosity: this.#verbosity,
258
375
  });
259
376
  }
260
377
 
@@ -298,17 +415,32 @@ export class NetworkManagerImplementation implements NetworkManager {
298
415
  */
299
416
  async #resolveNetworkConfig<ChainTypeT extends ChainType | string>(
300
417
  resolvedNetworkName: string,
301
- networkConfigOverride: NetworkConfigOverride | undefined = {},
418
+ networkConfigOverride: NetworkConfigOverride = {},
302
419
  resolvedChainType: ChainTypeT,
303
420
  ): Promise<NetworkConfig> {
304
421
  const existingNetworkConfig = this.#networkConfigs[resolvedNetworkName];
305
- if (
306
- Object.keys(networkConfigOverride).length === 0 &&
307
- resolvedChainType === existingNetworkConfig.chainType
308
- ) {
422
+
423
+ const hasNoOverrides = Object.keys(networkConfigOverride).length === 0;
424
+ const isChainTypeUnchanged =
425
+ resolvedChainType === existingNetworkConfig.chainType;
426
+ const isChainTypeDefault =
427
+ existingNetworkConfig.chainType === undefined &&
428
+ resolvedChainType === this.#defaultChainType;
429
+
430
+ if (hasNoOverrides && isChainTypeUnchanged) {
309
431
  return existingNetworkConfig;
310
432
  }
311
433
 
434
+ if (hasNoOverrides && isChainTypeDefault) {
435
+ return {
436
+ ...existingNetworkConfig,
437
+ /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions --
438
+ TypeScript can't follow this case, but we are just providing the
439
+ default */
440
+ chainType: resolvedChainType as ChainType,
441
+ };
442
+ }
443
+
312
444
  if (
313
445
  "type" in networkConfigOverride &&
314
446
  networkConfigOverride.type !== existingNetworkConfig.type
@@ -328,7 +460,7 @@ export class NetworkManagerImplementation implements NetworkManager {
328
460
  throw new HardhatError(
329
461
  HardhatError.ERRORS.CORE.NETWORK.INVALID_CONFIG_OVERRIDE,
330
462
  {
331
- errors: `\t* The chainType cannot be specified in config overrides. Pass it at the top level instead: hre.network.connect({ chainType: 'op' })`,
463
+ errors: `\t* The chainType cannot be specified in config overrides. Pass it at the top level instead: hre.network.create({ chainType: 'op' })`,
332
464
  },
333
465
  );
334
466
  }
@@ -357,6 +489,20 @@ export class NetworkManagerImplementation implements NetworkManager {
357
489
  );
358
490
 
359
491
  if (!configResolutionResult.success) {
492
+ if (configResolutionResult.configValidationErrors !== undefined) {
493
+ throw new HardhatError(
494
+ HardhatError.ERRORS.CORE.NETWORK.INVALID_CONFIG_OVERRIDE,
495
+ {
496
+ errors: `\t${configResolutionResult.configValidationErrors
497
+ .map(
498
+ (error) =>
499
+ `* Error in resolved config ${error.path.join(".")}: ${error.message}`,
500
+ )
501
+ .join("\n\t")}`,
502
+ },
503
+ );
504
+ }
505
+
360
506
  throw new HardhatError(
361
507
  HardhatError.ERRORS.CORE.NETWORK.INVALID_CONFIG_OVERRIDE,
362
508
  {
@@ -401,6 +547,36 @@ export class NetworkManagerImplementation implements NetworkManager {
401
547
  return resolvedNetworkConfigOverride;
402
548
  }
403
549
 
550
+ #resolveNetworkAndChainType<
551
+ ChainTypeT extends ChainType | string = DefaultChainType,
552
+ >(
553
+ network: string | undefined,
554
+ chainType: ChainTypeT | undefined,
555
+ ): { resolvedNetworkName: string; resolvedChainType: ChainTypeT } {
556
+ const resolvedNetworkName = network ?? this.#defaultNetwork;
557
+ const existingNetworkConfig = this.#networkConfigs[resolvedNetworkName];
558
+
559
+ if (existingNetworkConfig === undefined) {
560
+ throw new HardhatError(
561
+ HardhatError.ERRORS.CORE.NETWORK.NETWORK_NOT_FOUND,
562
+ {
563
+ networkName: resolvedNetworkName,
564
+ },
565
+ );
566
+ }
567
+
568
+ const resolvedChainType =
569
+ chainType ?? existingNetworkConfig.chainType ?? this.#defaultChainType;
570
+
571
+ return {
572
+ resolvedNetworkName,
573
+ /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions
574
+ -- The cast is safe because the fallback values are valid chain
575
+ types that match the caller's expected type at runtime. */
576
+ resolvedChainType: resolvedChainType as ChainTypeT,
577
+ };
578
+ }
579
+
404
580
  async #getBuildInfosAndOutputsAsBuffers(): Promise<
405
581
  Array<{ buildInfo: Uint8Array; output: Uint8Array }>
406
582
  > {
@@ -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
  }