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
@@ -5,6 +5,8 @@ import type {
5
5
  } from "../../../../../../types/providers.js";
6
6
  import type { RequestHandler } from "../../types.js";
7
7
  import type { RpcTransactionRequest } from "@nomicfoundation/hardhat-zod-utils/rpc";
8
+ import type * as MicroEthSignerT from "micro-eth-signer";
9
+ import type * as MicroEthSignerTypedDataT from "micro-eth-signer/typed-data";
8
10
 
9
11
  import {
10
12
  assertHardhatInvariant,
@@ -27,27 +29,29 @@ import {
27
29
  rpcTransactionRequest,
28
30
  validateParams,
29
31
  } from "@nomicfoundation/hardhat-zod-utils/rpc";
30
- import { addr, Transaction } from "micro-eth-signer";
31
- import { signTyped } from "micro-eth-signer/typed-data";
32
- import * as typed from "micro-eth-signer/typed-data";
32
+
33
+ // micro-eth-signer is known to be slow to load, so we lazy load it
34
+ let microEthSigner: typeof MicroEthSignerT | undefined;
35
+ let microEthSignerTypedData: typeof MicroEthSignerTypedDataT | undefined;
33
36
 
34
37
  import { getRequestParams } from "../../../json-rpc.js";
35
38
  import { ChainId } from "../chain-id/chain-id.js";
36
39
 
37
- /**
38
- * This handler takes a long time to load. Currently, it is only used in the handlers array,
39
- * where it is imported dynamically, and in the HDWalletHandler, which itself is only loaded
40
- * dynamically.
41
- * If we ever need to import this handler elsewhere, we should either import it dynamically
42
- * or import some of the dependencies of this handler dynamically.
43
- * It has been identified that micro-eth-signer is one of the most expensive dependencies here.
44
- * See https://github.com/NomicFoundation/hardhat/pull/6481 for more details.
45
- */
46
-
47
40
  const EXTRA_ENTROPY = false;
48
41
  export class LocalAccountsHandler extends ChainId implements RequestHandler {
49
- readonly #addressToPrivateKey: Map<string, Uint8Array> = new Map();
50
- readonly #addresses: string[] = [];
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
+
51
+ readonly #localAccountsHexPrivateKeys: string[];
52
+
53
+ #addressToPrivateKey: Map<string, Uint8Array> | undefined;
54
+ #addresses: string[] | undefined;
51
55
 
52
56
  constructor(
53
57
  provider: EthereumProvider,
@@ -55,12 +59,20 @@ export class LocalAccountsHandler extends ChainId implements RequestHandler {
55
59
  ) {
56
60
  super(provider);
57
61
 
58
- this.#initializePrivateKeys(localAccountsHexPrivateKeys);
62
+ this.#localAccountsHexPrivateKeys = localAccountsHexPrivateKeys;
63
+ }
64
+
65
+ public isSupportedMethod(jsonRpcRequest: JsonRpcRequest): boolean {
66
+ return this.#methods.has(jsonRpcRequest.method);
59
67
  }
60
68
 
61
69
  public async handle(
62
70
  jsonRpcRequest: JsonRpcRequest,
63
71
  ): Promise<JsonRpcRequest | JsonRpcResponse> {
72
+ if (!this.isSupportedMethod(jsonRpcRequest)) {
73
+ return jsonRpcRequest;
74
+ }
75
+
64
76
  const response = await this.#resolveRequest(jsonRpcRequest);
65
77
  if (response !== null) {
66
78
  return response;
@@ -71,6 +83,28 @@ export class LocalAccountsHandler extends ChainId implements RequestHandler {
71
83
  return jsonRpcRequest;
72
84
  }
73
85
 
86
+ async #getAddressesAndPrivateKeysMap(): Promise<{
87
+ addresses: string[];
88
+ addressToPrivateKey: Map<string, Uint8Array>;
89
+ }> {
90
+ if (
91
+ this.#addresses === undefined ||
92
+ this.#addressToPrivateKey === undefined
93
+ ) {
94
+ const { addresses, addressToPrivateKey } =
95
+ await this.#initializeAddressesFromPrivateKeys(
96
+ this.#localAccountsHexPrivateKeys,
97
+ );
98
+ this.#addresses = addresses;
99
+ this.#addressToPrivateKey = addressToPrivateKey;
100
+ }
101
+
102
+ return {
103
+ addresses: this.#addresses,
104
+ addressToPrivateKey: this.#addressToPrivateKey,
105
+ };
106
+ }
107
+
74
108
  async #resolveRequest(
75
109
  jsonRpcRequest: JsonRpcRequest,
76
110
  ): Promise<JsonRpcResponse | null> {
@@ -78,9 +112,8 @@ export class LocalAccountsHandler extends ChainId implements RequestHandler {
78
112
  jsonRpcRequest.method === "eth_accounts" ||
79
113
  jsonRpcRequest.method === "eth_requestAccounts"
80
114
  ) {
81
- return this.#createJsonRpcResponse(jsonRpcRequest.id, [
82
- ...this.#addresses,
83
- ]);
115
+ const { addresses } = await this.#getAddressesAndPrivateKeysMap();
116
+ return this.#createJsonRpcResponse(jsonRpcRequest.id, [...addresses]);
84
117
  }
85
118
 
86
119
  const params = getRequestParams(jsonRpcRequest);
@@ -96,10 +129,20 @@ export class LocalAccountsHandler extends ChainId implements RequestHandler {
96
129
  );
97
130
  }
98
131
 
99
- const privateKey = this.#getPrivateKeyForAddress(address);
132
+ if (microEthSignerTypedData === undefined) {
133
+ microEthSignerTypedData = await import(
134
+ "micro-eth-signer/typed-data"
135
+ );
136
+ }
137
+
138
+ const privateKey = await this.#getPrivateKeyForAddress(address);
100
139
  return this.#createJsonRpcResponse(
101
140
  jsonRpcRequest.id,
102
- typed.personal.sign(data, privateKey, EXTRA_ENTROPY),
141
+ microEthSignerTypedData.personal.sign(
142
+ data,
143
+ privateKey,
144
+ EXTRA_ENTROPY,
145
+ ),
103
146
  );
104
147
  }
105
148
  }
@@ -116,10 +159,20 @@ export class LocalAccountsHandler extends ChainId implements RequestHandler {
116
159
  );
117
160
  }
118
161
 
119
- const privateKey = this.#getPrivateKeyForAddress(address);
162
+ if (microEthSignerTypedData === undefined) {
163
+ microEthSignerTypedData = await import(
164
+ "micro-eth-signer/typed-data"
165
+ );
166
+ }
167
+
168
+ const privateKey = await this.#getPrivateKeyForAddress(address);
120
169
  return this.#createJsonRpcResponse(
121
170
  jsonRpcRequest.id,
122
- typed.personal.sign(data, privateKey, EXTRA_ENTROPY),
171
+ microEthSignerTypedData.personal.sign(
172
+ data,
173
+ privateKey,
174
+ EXTRA_ENTROPY,
175
+ ),
123
176
  );
124
177
  }
125
178
  }
@@ -146,11 +199,19 @@ export class LocalAccountsHandler extends ChainId implements RequestHandler {
146
199
  }
147
200
 
148
201
  // if we don't manage the address, the method is forwarded
149
- const privateKey = this.#getPrivateKeyForAddressOrNull(address);
202
+ const privateKey = await this.#getPrivateKeyForAddressOrNull(address);
150
203
  if (privateKey !== null) {
204
+ if (microEthSignerTypedData === undefined) {
205
+ microEthSignerTypedData = await import("micro-eth-signer/typed-data");
206
+ }
207
+
151
208
  return this.#createJsonRpcResponse(
152
209
  jsonRpcRequest.id,
153
- signTyped(typedMessage, privateKey, EXTRA_ENTROPY),
210
+ microEthSignerTypedData.signTyped(
211
+ typedMessage,
212
+ privateKey,
213
+ EXTRA_ENTROPY,
214
+ ),
154
215
  );
155
216
  }
156
217
  }
@@ -220,7 +281,7 @@ export class LocalAccountsHandler extends ChainId implements RequestHandler {
220
281
  txRequest.nonce = await this.#getNonce(txRequest.from);
221
282
  }
222
283
 
223
- const privateKey = this.#getPrivateKeyForAddress(txRequest.from);
284
+ const privateKey = await this.#getPrivateKeyForAddress(txRequest.from);
224
285
 
225
286
  const chainId = await this.getChainId();
226
287
 
@@ -235,20 +296,32 @@ export class LocalAccountsHandler extends ChainId implements RequestHandler {
235
296
  }
236
297
  }
237
298
 
238
- #initializePrivateKeys(localAccountsHexPrivateKeys: string[]) {
299
+ async #initializeAddressesFromPrivateKeys(
300
+ localAccountsHexPrivateKeys: string[],
301
+ ) {
302
+ if (microEthSigner === undefined) {
303
+ microEthSigner = await import("micro-eth-signer");
304
+ }
305
+
239
306
  const privateKeys: Uint8Array[] = localAccountsHexPrivateKeys.map((h) =>
240
307
  hexStringToBytes(h),
241
308
  );
242
309
 
310
+ const addresses = [];
311
+ const addressToPrivateKey = new Map<string, Uint8Array>();
243
312
  for (const pk of privateKeys) {
244
- const address = addr.fromPrivateKey(pk).toLowerCase();
245
- this.#addressToPrivateKey.set(address, pk);
246
- this.#addresses.push(address);
313
+ const address = microEthSigner.addr.fromPrivateKey(pk).toLowerCase();
314
+ addressToPrivateKey.set(address, pk);
315
+ addresses.push(address);
247
316
  }
317
+
318
+ return { addresses, addressToPrivateKey };
248
319
  }
249
320
 
250
- #getPrivateKeyForAddress(address: Uint8Array): Uint8Array {
251
- const pk = this.#addressToPrivateKey.get(bytesToHexString(address));
321
+ async #getPrivateKeyForAddress(address: Uint8Array): Promise<Uint8Array> {
322
+ const { addressToPrivateKey } = await this.#getAddressesAndPrivateKeysMap();
323
+
324
+ const pk = addressToPrivateKey.get(bytesToHexString(address));
252
325
 
253
326
  if (pk === undefined) {
254
327
  throw new HardhatError(
@@ -262,9 +335,11 @@ export class LocalAccountsHandler extends ChainId implements RequestHandler {
262
335
  return pk;
263
336
  }
264
337
 
265
- #getPrivateKeyForAddressOrNull(address: Uint8Array): Uint8Array | null {
338
+ async #getPrivateKeyForAddressOrNull(
339
+ address: Uint8Array,
340
+ ): Promise<Uint8Array | null> {
266
341
  try {
267
- return this.#getPrivateKeyForAddress(address);
342
+ return await this.#getPrivateKeyForAddress(address);
268
343
  } catch {
269
344
  return null;
270
345
  }
@@ -289,6 +364,12 @@ export class LocalAccountsHandler extends ChainId implements RequestHandler {
289
364
  chainId: number,
290
365
  privateKey: Uint8Array,
291
366
  ): Promise<Uint8Array> {
367
+ if (microEthSigner === undefined) {
368
+ microEthSigner = await import("micro-eth-signer");
369
+ }
370
+
371
+ const { addr, Transaction } = microEthSigner;
372
+
292
373
  const txData = {
293
374
  ...transactionRequest,
294
375
  gasLimit: transactionRequest.gas,
@@ -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
 
@@ -14,16 +14,22 @@ import { getRequestParams } from "../../../json-rpc.js";
14
14
  * For `eth_sendTransaction` requests, it sets the gasPrice field with the value provided via the class constructor, if it hasn't been specified already.
15
15
  */
16
16
  export class FixedGasPriceHandler implements RequestHandler {
17
+ readonly #methods: ReadonlySet<string> = new Set(["eth_sendTransaction"]);
18
+
17
19
  readonly #gasPrice: PrefixedHexString;
18
20
 
19
21
  constructor(gasPrice: PrefixedHexString) {
20
22
  this.#gasPrice = gasPrice;
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
 
@@ -8,13 +8,20 @@ import { numberToHexString } from "@nomicfoundation/hardhat-utils/hex";
8
8
 
9
9
  import { isHttpNetworkHdAccountsConfig } from "../type-validation.js";
10
10
 
11
+ import { AutomaticSenderHandler } from "./handlers/accounts/automatic-sender-handler.js";
12
+ import { FixedSenderHandler } from "./handlers/accounts/fixed-sender-handler.js";
13
+ import { HDWalletHandler } from "./handlers/accounts/hd-wallet-handler.js";
14
+ import { LocalAccountsHandler } from "./handlers/accounts/local-accounts.js";
15
+ import { ChainIdValidatorHandler } from "./handlers/chain-id/chain-id-handler.js";
16
+ import { AutomaticGasHandler } from "./handlers/gas/automatic-gas-handler.js";
17
+ import { AutomaticGasPriceHandler } from "./handlers/gas/automatic-gas-price-handler.js";
18
+ import { FixedGasHandler } from "./handlers/gas/fixed-gas-handler.js";
19
+ import { FixedGasPriceHandler } from "./handlers/gas/fixed-gas-price-handler.js";
20
+
11
21
  /**
12
22
  * This function returns an handlers array based on the values in the NetworkConnection and NetworkConfig.
13
23
  * The order of the handlers, if all are present, is: chain handler, gas handlers (gasPrice first, then gas), sender handler and accounts handler.
14
24
  * The order is important to get a correct result when the handlers are executed.
15
- * The handlers are imported dynamically because some might take a long time to load.
16
- * Out of the currently supported handlers, LocalAccountsHandler and, consequently, HDWalletHandler have been identified as the most expensive.
17
- * See https://github.com/NomicFoundation/hardhat/pull/6481 for more details.
18
25
  */
19
26
  export async function createHandlersArray<
20
27
  ChainTypeT extends ChainType | string,
@@ -24,9 +31,6 @@ export async function createHandlersArray<
24
31
  const networkConfig = networkConnection.networkConfig;
25
32
 
26
33
  if (networkConfig.type === "http" && networkConfig.chainId !== undefined) {
27
- const { ChainIdValidatorHandler } = await import(
28
- "./handlers/chain-id/chain-id-handler.js"
29
- );
30
34
  requestHandlers.push(
31
35
  new ChainIdValidatorHandler(
32
36
  networkConnection.provider,
@@ -39,9 +43,6 @@ export async function createHandlersArray<
39
43
  networkConfig.gasPrice === undefined ||
40
44
  networkConfig.gasPrice === "auto"
41
45
  ) {
42
- const { AutomaticGasPriceHandler } = await import(
43
- "./handlers/gas/automatic-gas-price-handler.js"
44
- );
45
46
  // If you use a hook handler that signs locally, you are required to
46
47
  // have all the transaction fields available, including the
47
48
  // gasPrice / maxFeePerGas & maxPriorityFeePerGas.
@@ -56,18 +57,12 @@ export async function createHandlersArray<
56
57
  new AutomaticGasPriceHandler(networkConnection.provider),
57
58
  );
58
59
  } else {
59
- const { FixedGasPriceHandler } = await import(
60
- "./handlers/gas/fixed-gas-price-handler.js"
61
- );
62
60
  requestHandlers.push(
63
61
  new FixedGasPriceHandler(numberToHexString(networkConfig.gasPrice)),
64
62
  );
65
63
  }
66
64
 
67
65
  if (networkConfig.gas === undefined || networkConfig.gas === "auto") {
68
- const { AutomaticGasHandler } = await import(
69
- "./handlers/gas/automatic-gas-handler.js"
70
- );
71
66
  requestHandlers.push(
72
67
  new AutomaticGasHandler(
73
68
  networkConnection.provider,
@@ -75,25 +70,16 @@ export async function createHandlersArray<
75
70
  ),
76
71
  );
77
72
  } else {
78
- const { FixedGasHandler } = await import(
79
- "./handlers/gas/fixed-gas-handler.js"
80
- );
81
73
  requestHandlers.push(
82
74
  new FixedGasHandler(numberToHexString(networkConfig.gas)),
83
75
  );
84
76
  }
85
77
 
86
78
  if (networkConfig.from === undefined) {
87
- const { AutomaticSenderHandler } = await import(
88
- "./handlers/accounts/automatic-sender-handler.js"
89
- );
90
79
  requestHandlers.push(
91
80
  new AutomaticSenderHandler(networkConnection.provider),
92
81
  );
93
82
  } else {
94
- const { FixedSenderHandler } = await import(
95
- "./handlers/accounts/fixed-sender-handler.js"
96
- );
97
83
  requestHandlers.push(
98
84
  new FixedSenderHandler(networkConnection.provider, networkConfig.from),
99
85
  );
@@ -103,9 +89,6 @@ export async function createHandlersArray<
103
89
  const accounts = networkConfig.accounts;
104
90
 
105
91
  if (Array.isArray(accounts)) {
106
- const { LocalAccountsHandler } = await import(
107
- "./handlers/accounts/local-accounts.js"
108
- );
109
92
  const resolvedAccounts = await Promise.all(
110
93
  accounts.map((acc) => acc.getHexString()),
111
94
  );
@@ -114,9 +97,6 @@ export async function createHandlersArray<
114
97
  new LocalAccountsHandler(networkConnection.provider, resolvedAccounts),
115
98
  );
116
99
  } else if (isHttpNetworkHdAccountsConfig(accounts)) {
117
- const { HDWalletHandler } = await import(
118
- "./handlers/accounts/hd-wallet-handler.js"
119
- );
120
100
  const hdWalletHandler = await HDWalletHandler.create(
121
101
  networkConnection.provider,
122
102
  await accounts.mnemonic.get(),
@@ -14,6 +14,16 @@ import type {
14
14
  *
15
15
  */
16
16
  export interface RequestHandler {
17
+ /**
18
+ * A guard to ensure the request is supported by the handler.
19
+ * If the handler does not support the request, then it can be safely
20
+ * skipped.
21
+ *
22
+ * @param jsonRpcRequest - The JSON-RPC request to check.
23
+ * @returns true if the method will be processed by the handler, false otherwise.
24
+ */
25
+ isSupportedMethod(jsonRpcRequest: JsonRpcRequest): boolean;
26
+
17
27
  handle(
18
28
  jsonRpcRequest: JsonRpcRequest,
19
29
  ): Promise<JsonRpcRequest | JsonRpcResponse>;
@@ -0,0 +1,2 @@
1
+ // Error code used by geth/anvil for execution revert errors (e.g. Solidity reverts).
2
+ export const REVERT_ERROR_CODE: number = 3;
@@ -147,7 +147,7 @@ declare module "../../../../types/config.js" {
147
147
  export interface EdrNetworkForkingUserConfig {
148
148
  enabled?: boolean;
149
149
  url: SensitiveString;
150
- blockNumber?: number;
150
+ blockNumber?: number | bigint;
151
151
  httpHeaders?: Record<string, string>;
152
152
  }
153
153
 
@@ -45,6 +45,10 @@ const nonnegativeIntSchema = z.number().int().nonnegative();
45
45
  const nonnegativeBigIntSchema = z.bigint().nonnegative();
46
46
 
47
47
  const blockNumberSchema = nonnegativeIntSchema;
48
+ const forkingBlockNumberSchema = unionType(
49
+ [z.number().int().nonnegative().safe(), z.bigint().nonnegative()],
50
+ "Expected a nonnegative safe int or a nonnegative bigint",
51
+ );
48
52
  const chainIdSchema = nonnegativeIntSchema;
49
53
 
50
54
  const chainTypeUserConfigSchema = unionType(
@@ -267,7 +271,7 @@ const edrNetworkAccountsUserConfigSchema = conditionalUnionType(
267
271
  const edrNetworkForkingUserConfigSchema = z.object({
268
272
  enabled: z.optional(z.boolean()),
269
273
  url: sensitiveUrlSchema,
270
- blockNumber: z.optional(blockNumberSchema),
274
+ blockNumber: z.optional(forkingBlockNumberSchema),
271
275
  httpHeaders: z.optional(z.record(z.string())),
272
276
  });
273
277
 
@@ -2,6 +2,7 @@ import type { FSWatcher } from "chokidar";
2
2
 
3
3
  import path from "node:path";
4
4
 
5
+ import { watch } from "chokidar";
5
6
  import debug from "debug";
6
7
 
7
8
  export type BuildInfoWatcher = FSWatcher;
@@ -59,8 +60,6 @@ export async function watchBuildInfo(
59
60
  buildInfoDirPath: string,
60
61
  handler: BuildInfoHandler,
61
62
  ): Promise<BuildInfoWatcher> {
62
- const { watch } = await import("chokidar");
63
-
64
63
  // NOTE: Deleting the build info directory while it is being watched will
65
64
  // effectively cause the watcher to stop working.
66
65
  // NOTE: We use chokidar's `awaitWriteFinish` option because we are certain
@@ -2,6 +2,7 @@ import type { BuildInfo } from "../../../types/artifacts.js";
2
2
  import type { EdrNetworkAccountsConfig } from "../../../types/config.js";
3
3
  import type { SolidityBuildInfoOutput } from "../../../types/solidity.js";
4
4
  import type { EdrProvider } from "../network-manager/edr/edr-provider.js";
5
+ import type * as MicroEthSignerT from "micro-eth-signer";
5
6
 
6
7
  import path from "node:path";
7
8
 
@@ -11,7 +12,9 @@ import {
11
12
  } from "@nomicfoundation/hardhat-utils/fs";
12
13
  import { hexStringToBytes } from "@nomicfoundation/hardhat-utils/hex";
13
14
  import chalk from "chalk";
14
- import { addr } from "micro-eth-signer";
15
+
16
+ // micro-eth-signer is known to be slow to load, so we lazy load it
17
+ let microEthSigner: typeof MicroEthSignerT | undefined;
15
18
 
16
19
  import { sendErrorTelemetry } from "../../cli/telemetry/sentry/reporter.js";
17
20
  import { isDefaultEdrNetworkHDAccountsConfig } from "../network-manager/edr/edr-provider.js";
@@ -48,8 +51,12 @@ export async function formatEdrNetworkConfigAccounts(
48
51
  maxPrefixLength = privateKeyPrefix.length;
49
52
  }
50
53
 
54
+ if (microEthSigner === undefined) {
55
+ microEthSigner = await import("micro-eth-signer");
56
+ }
57
+
51
58
  for (const [index, account] of accounts.entries()) {
52
- const address = addr
59
+ const address = microEthSigner.addr
53
60
  .fromPrivateKey(hexStringToBytes(await account.privateKey.getHexString()))
54
61
  .toLowerCase();
55
62
  const balance = (BigInt(account.balance) / 10n ** 18n).toString(10);