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
@@ -0,0 +1,31 @@
1
+ import type { HookContext } from "../../../../types/hooks.js";
2
+ import type { HardhatRuntimeEnvironment } from "../../../../types/hre.js";
3
+ import type { GasAnalyticsManager } from "../types.js";
4
+
5
+ import { assertHardhatInvariant } from "@nomicfoundation/hardhat-errors";
6
+
7
+ import { HardhatRuntimeEnvironmentImplementation } from "../../../core/hre.js";
8
+ import { GasAnalyticsManagerImplementation } from "../gas-analytics-manager.js";
9
+
10
+ export function getGasAnalyticsManager(
11
+ hookContextOrHre: HookContext | HardhatRuntimeEnvironment,
12
+ ): GasAnalyticsManager {
13
+ assertHardhatInvariant(
14
+ "_gasAnalytics" in hookContextOrHre &&
15
+ hookContextOrHre._gasAnalytics instanceof
16
+ GasAnalyticsManagerImplementation,
17
+ "Expected _gasAnalytics to be an instance of GasAnalyticsManagerImplementation",
18
+ );
19
+ return hookContextOrHre._gasAnalytics;
20
+ }
21
+
22
+ export function setGasAnalyticsManager(
23
+ hre: HardhatRuntimeEnvironment,
24
+ gasAnalyticsManager: GasAnalyticsManager,
25
+ ): void {
26
+ assertHardhatInvariant(
27
+ hre instanceof HardhatRuntimeEnvironmentImplementation,
28
+ "Expected HRE to be an instance of HardhatRuntimeEnvironmentImplementation",
29
+ );
30
+ hre._gasAnalytics = gasAnalyticsManager;
31
+ }
@@ -0,0 +1,37 @@
1
+ import type { HardhatRuntimeEnvironment } from "../../../../types/hre.js";
2
+
3
+ import {
4
+ testRunDone,
5
+ testRunStart,
6
+ testWorkerDone,
7
+ } from "../hook-handlers/test.js";
8
+
9
+ /**
10
+ * The following helpers are kept for backward compatibility with older versions
11
+ * of test runner plugins (hardhat-mocha, hardhat-node-test-runner) that import
12
+ * from "hardhat/internal/gas-analytics".
13
+ */
14
+
15
+ let cachedHre: HardhatRuntimeEnvironment | undefined;
16
+ async function getHre(): Promise<HardhatRuntimeEnvironment> {
17
+ if (cachedHre === undefined) {
18
+ const { default: hre } = await import("../../../../index.js");
19
+ cachedHre = hre;
20
+ }
21
+ return cachedHre;
22
+ }
23
+
24
+ export async function markTestRunStart(id: string): Promise<void> {
25
+ const hre = await getHre();
26
+ await testRunStart(hre, id);
27
+ }
28
+
29
+ export async function markTestWorkerDone(id: string): Promise<void> {
30
+ const hre = await getHre();
31
+ await testWorkerDone(hre, id);
32
+ }
33
+
34
+ export async function markTestRunDone(id: string): Promise<void> {
35
+ const hre = await getHre();
36
+ await testRunDone(hre, id);
37
+ }
@@ -0,0 +1,112 @@
1
+ import chalk from "chalk";
2
+
3
+ /**
4
+ * Converts an internal FQN (e.g. `"project/contracts/Foo.sol:Foo"` or
5
+ * `"npm/@oz/contracts@5.0.0/token/ERC20.sol:ERC20"`) to its user-friendly
6
+ * form by stripping the `project/` prefix or npm version segment.
7
+ */
8
+ export function getUserFqn(inputFqn: string): string {
9
+ if (inputFqn.startsWith("project/")) {
10
+ return inputFqn.slice("project/".length);
11
+ }
12
+
13
+ if (inputFqn.startsWith("npm/")) {
14
+ const withoutPrefix = inputFqn.slice("npm/".length);
15
+ // Match "<pkg>@<version>/<rest>", where <pkg> may be scoped (@scope/pkg)
16
+ const match = withoutPrefix.match(/^(@?[^@/]+(?:\/[^@/]+)*)@[^/]+\/(.*)$/);
17
+ if (match !== null) {
18
+ return `${match[1]}/${match[2]}`;
19
+ }
20
+ return withoutPrefix;
21
+ }
22
+
23
+ return inputFqn;
24
+ }
25
+
26
+ /**
27
+ * Extracts the function name from a Solidity function signature
28
+ * (e.g. `"transfer(address,uint256)"` → `"transfer"`).
29
+ */
30
+ export function getFunctionName(signature: string): string {
31
+ return signature.split("(")[0];
32
+ }
33
+
34
+ /**
35
+ * Builds a deterministic string key for grouping gas measurements by
36
+ * (contractFqn, proxyChain). Uses null-byte separators to avoid collisions.
37
+ */
38
+ export function makeGroupKey(
39
+ contractFqn: string,
40
+ proxyChain: string[],
41
+ ): string {
42
+ if (proxyChain.length === 0) {
43
+ return contractFqn;
44
+ }
45
+ return contractFqn + "\0" + proxyChain.join("\0");
46
+ }
47
+
48
+ /**
49
+ * Returns a human-readable proxy label like `"(via Proxy2 → Proxy)"`,
50
+ * or `undefined` for direct calls. Strips the last element (the
51
+ * implementation) and converts internal FQNs to user-friendly format.
52
+ */
53
+ export function getProxyLabel(proxyChain: string[]): string | undefined {
54
+ const proxies = proxyChain.slice(0, -1).map(getUserFqn);
55
+ if (proxies.length === 0) {
56
+ return undefined;
57
+ }
58
+ return `(via ${proxies.join(" → ")})`;
59
+ }
60
+
61
+ /**
62
+ * Returns a display key for a contract entry, appending the proxy label
63
+ * when the call went through a proxy chain. Used for table headers and
64
+ * JSON object keys.
65
+ */
66
+ export function getDisplayKey(userFqn: string, proxyChain: string[]): string {
67
+ const label = getProxyLabel(proxyChain);
68
+ if (label === undefined) {
69
+ return userFqn;
70
+ }
71
+ return `${userFqn} ${label}`;
72
+ }
73
+
74
+ export function avg(values: number[]): number {
75
+ return values.reduce((a, c) => a + c, 0) / values.length;
76
+ }
77
+
78
+ export function median(values: number[]): number {
79
+ const sorted = [...values].sort((a, b) => a - b);
80
+ const mid = Math.floor(sorted.length / 2);
81
+
82
+ return sorted.length % 2 === 1
83
+ ? sorted[mid]
84
+ : (sorted[mid - 1] + sorted[mid]) / 2;
85
+ }
86
+
87
+ export function formatSectionHeader(
88
+ sectionName: string,
89
+ {
90
+ changedLength,
91
+ addedLength,
92
+ removedLength,
93
+ }: {
94
+ changedLength: number;
95
+ addedLength: number;
96
+ removedLength: number;
97
+ },
98
+ ): string {
99
+ const parts: string[] = [];
100
+
101
+ if (changedLength > 0) {
102
+ parts.push(`${changedLength} changed`);
103
+ }
104
+ if (addedLength > 0) {
105
+ parts.push(`${addedLength} added`);
106
+ }
107
+ if (removedLength > 0) {
108
+ parts.push(`${removedLength} removed`);
109
+ }
110
+
111
+ return `${sectionName}: ${chalk.gray(parts.join(", "))}`;
112
+ }
@@ -1,7 +1,7 @@
1
1
  import type { HardhatRuntimeEnvironmentHooks } from "../../../../types/hooks.js";
2
2
 
3
3
  import { GasAnalyticsManagerImplementation } from "../gas-analytics-manager.js";
4
- import { setGasAnalyticsManager } from "../helpers.js";
4
+ import { setGasAnalyticsManager } from "../helpers/accessors.js";
5
5
 
6
6
  export default async (): Promise<Partial<HardhatRuntimeEnvironmentHooks>> => ({
7
7
  created: async (context, hre) => {
@@ -1,6 +1,6 @@
1
1
  import type { HookContext, TestHooks } from "../../../../types/hooks.js";
2
2
 
3
- import { getGasAnalyticsManager } from "../helpers.js";
3
+ import { getGasAnalyticsManager } from "../helpers/accessors.js";
4
4
 
5
5
  export default async (): Promise<Partial<TestHooks>> => ({
6
6
  onTestRunStart: async (context, id, next) => {
@@ -18,8 +18,7 @@ import {
18
18
  parseFullyQualifiedName,
19
19
  } from "../../../utils/contract-names.js";
20
20
 
21
- import { getUserFqn } from "./gas-analytics-manager.js";
22
- import { formatSectionHeader } from "./helpers.js";
21
+ import { formatSectionHeader, getUserFqn } from "./helpers/utils.js";
23
22
 
24
23
  export const SNAPSHOT_CHEATCODES_DIR = "snapshots";
25
24
 
@@ -9,6 +9,13 @@ export interface GasStatsJsonEntry {
9
9
  count: number;
10
10
  }
11
11
 
12
+ /**
13
+ * Gas statistics for a deployment, including bytecode size.
14
+ */
15
+ export interface DeploymentGasStatsJsonEntry extends GasStatsJsonEntry {
16
+ runtimeSize: number;
17
+ }
18
+
12
19
  /**
13
20
  * Gas statistics for a single contract in the JSON output.
14
21
  * `deployment` is null when the contract was never deployed during the test run
@@ -18,7 +25,8 @@ export interface GasStatsJsonEntry {
18
25
  export interface ContractGasStatsJson {
19
26
  sourceName: string;
20
27
  contractName: string;
21
- deployment: GasStatsJsonEntry | null;
28
+ proxyChain: string[];
29
+ deployment: DeploymentGasStatsJsonEntry | null;
22
30
  functions: Record<string, GasStatsJsonEntry> | null;
23
31
  }
24
32
 
@@ -39,11 +47,12 @@ interface BaseGasMeasurement {
39
47
  interface FunctionGasMeasurement extends BaseGasMeasurement {
40
48
  type: "function";
41
49
  functionSig: string;
50
+ proxyChain: string[];
42
51
  }
43
52
 
44
53
  interface DeploymentGasMeasurement extends BaseGasMeasurement {
45
54
  type: "deployment";
46
- size: number;
55
+ runtimeSize: number;
47
56
  }
48
57
 
49
58
  export type GasMeasurement = FunctionGasMeasurement | DeploymentGasMeasurement;
@@ -1,6 +1,15 @@
1
+ import type * as Bip39T from "ethereum-cryptography/bip39";
2
+ import type { HDKey as HDKeyT } from "ethereum-cryptography/hdkey";
3
+
1
4
  import { HardhatError } from "@nomicfoundation/hardhat-errors";
2
5
  import { bytesToHexString } from "@nomicfoundation/hardhat-utils/bytes";
3
6
 
7
+ // ethereum-cryptography/bip39 is known to be slow to load, so we lazy load it
8
+ let mnemonicToSeedSync: typeof Bip39T.mnemonicToSeedSync | undefined;
9
+
10
+ // ethereum-cryptography/hdkey is known to be slow to load, so we lazy load it
11
+ let HDKey: typeof HDKeyT | undefined;
12
+
4
13
  const HD_PATH_REGEX = /^m(:?\/\d+'?)+\/?$/;
5
14
 
6
15
  export async function derivePrivateKeys(
@@ -47,13 +56,26 @@ async function deriveKeyFromMnemonicAndPath(
47
56
  hdPath: string,
48
57
  passphrase: string,
49
58
  ): Promise<string | undefined> {
50
- const { mnemonicToSeedSync } = await import("ethereum-cryptography/bip39");
51
- const { HDKey } = await import("ethereum-cryptography/hdkey");
52
-
53
59
  // NOTE: If mnemonic has space or newline at the beginning or end, it will be trimmed.
54
60
  // This is because mnemonic containing them may generate different private keys.
55
61
  const trimmedMnemonic = mnemonic.trim();
56
62
 
63
+ if (mnemonicToSeedSync === undefined) {
64
+ const { mnemonicToSeedSync: importedMnemonicToSeedSync } = await import(
65
+ "ethereum-cryptography/bip39"
66
+ );
67
+
68
+ mnemonicToSeedSync = importedMnemonicToSeedSync;
69
+ }
70
+
71
+ if (HDKey === undefined) {
72
+ const { HDKey: ImportedHDKey } = await import(
73
+ "ethereum-cryptography/hdkey"
74
+ );
75
+
76
+ HDKey = ImportedHDKey;
77
+ }
78
+
57
79
  const seed = mnemonicToSeedSync(trimmedMnemonic, passphrase);
58
80
 
59
81
  const masterKey = HDKey.fromMasterSeed(seed);
@@ -15,23 +15,17 @@ import type {
15
15
  import type { RequireField } from "../../../../types/utils.js";
16
16
  import type { DefaultHDAccountsConfigParams } from "../accounts/constants.js";
17
17
  import type { JsonRpcRequestWrapperFunction } from "../network-manager.js";
18
+ import type { TraceOutputManager } from "./utils/trace-output.js";
18
19
  import type {
19
20
  SubscriptionEvent,
20
21
  Response,
21
22
  Provider,
22
23
  ProviderConfig,
23
24
  TracingConfigWithBuffers,
24
- AccountOverride,
25
25
  GasReportConfig,
26
26
  } from "@nomicfoundation/edr";
27
27
 
28
- import {
29
- opGenesisState,
30
- opHardforkFromString,
31
- l1GenesisState,
32
- l1HardforkFromString,
33
- ContractDecoder,
34
- } from "@nomicfoundation/edr";
28
+ import { ContractDecoder, IncludeTraces } from "@nomicfoundation/edr";
35
29
  import {
36
30
  assertHardhatInvariant,
37
31
  HardhatError,
@@ -41,14 +35,9 @@ import { ensureError } from "@nomicfoundation/hardhat-utils/error";
41
35
  import { numberToHexString } from "@nomicfoundation/hardhat-utils/hex";
42
36
  import { deepEqual } from "@nomicfoundation/hardhat-utils/lang";
43
37
  import debug from "debug";
44
- import { hexToBytes } from "ethereum-cryptography/utils";
45
- import { addr } from "micro-eth-signer";
46
38
 
47
39
  import { sendErrorTelemetry } from "../../../cli/telemetry/sentry/reporter.js";
48
- import {
49
- EDR_NETWORK_REVERT_SNAPSHOT_EVENT,
50
- OPTIMISM_CHAIN_TYPE,
51
- } from "../../../constants.js";
40
+ import { EDR_NETWORK_REVERT_SNAPSHOT_EVENT } from "../../../constants.js";
52
41
  import { hardhatChainTypeToEdrChainType } from "../../../edr/chain-type.js";
53
42
  import { getGlobalEdrContext } from "../../../edr/context.js";
54
43
  import { DEFAULT_HD_ACCOUNTS_CONFIG_PARAMS } from "../accounts/constants.js";
@@ -60,6 +49,7 @@ import {
60
49
  UnknownError,
61
50
  } from "../provider-errors.js";
62
51
 
52
+ import { getGenesisStateAndOwnedAccounts } from "./genesis-state.js";
63
53
  import { EdrProviderStackTraceGenerationError } from "./stack-traces/stack-trace-generation-errors.js";
64
54
  import { createSolidityErrorWithStackTrace } from "./stack-traces/stack-trace-solidity-errors.js";
65
55
  import { isEdrProviderErrorData } from "./type-validation.js";
@@ -69,7 +59,6 @@ import {
69
59
  hardhatMiningIntervalToEdrMiningInterval,
70
60
  hardhatMempoolOrderToEdrMineOrdering,
71
61
  hardhatHardforkToEdrSpecId,
72
- hardhatAccountsToEdrOwnedAccounts,
73
62
  hardhatForkingConfigToEdrForkConfig,
74
63
  } from "./utils/convert-to-edr.js";
75
64
  import { printLine, replaceLastLine } from "./utils/logger.js";
@@ -135,10 +124,14 @@ interface EdrProviderConfig {
135
124
  chainDescriptors: ChainDescriptorsConfig;
136
125
  networkConfig: RequireField<EdrNetworkConfig, "chainType">;
137
126
  loggerConfig?: LoggerConfig;
138
- tracingConfig?: TracingConfigWithBuffers;
127
+ contractDecoder: ContractDecoder;
139
128
  jsonRpcRequestWrapper?: JsonRpcRequestWrapperFunction;
140
129
  coverageConfig?: CoverageConfig;
141
130
  gasReportConfig?: GasReportConfig;
131
+ includeCallTraces?: IncludeTraces;
132
+ connectionId: number;
133
+ networkName: string;
134
+ verbosity: number;
142
135
  }
143
136
 
144
137
  export class EdrProvider extends BaseProvider {
@@ -146,6 +139,13 @@ export class EdrProvider extends BaseProvider {
146
139
 
147
140
  #provider: Provider | undefined;
148
141
  #nextRequestId = 1;
142
+ readonly #traceOutput: TraceOutputManager | undefined;
143
+
144
+ public static async createContractDecoder(
145
+ tracingConfig: TracingConfigWithBuffers,
146
+ ): Promise<ContractDecoder> {
147
+ return ContractDecoder.withContracts(tracingConfig);
148
+ }
149
149
 
150
150
  /**
151
151
  * Creates a new instance of `EdrProvider`.
@@ -154,10 +154,14 @@ export class EdrProvider extends BaseProvider {
154
154
  chainDescriptors,
155
155
  networkConfig,
156
156
  loggerConfig = { enabled: false },
157
- tracingConfig = {},
157
+ contractDecoder,
158
158
  jsonRpcRequestWrapper,
159
159
  coverageConfig,
160
160
  gasReportConfig,
161
+ includeCallTraces,
162
+ verbosity,
163
+ connectionId,
164
+ networkName,
161
165
  }: EdrProviderConfig): Promise<EdrProvider> {
162
166
  const printLineFn = loggerConfig.printLineFn ?? printLine;
163
167
  const replaceLastLineFn = loggerConfig.replaceLastLineFn ?? replaceLastLine;
@@ -167,15 +171,18 @@ export class EdrProvider extends BaseProvider {
167
171
  coverageConfig,
168
172
  gasReportConfig,
169
173
  chainDescriptors,
174
+ includeCallTraces,
170
175
  );
171
176
 
172
177
  let edrProvider: EdrProvider;
173
178
 
179
+ // We use a WeakRef to the provider to prevent the subscriptionCallback
180
+ // below from creating a cycle and leaking the provider.
181
+ let edrProviderWeakRef: WeakRef<EdrProvider> | undefined;
182
+
174
183
  // We need to catch errors here, as the provider creation can panic unexpectedly,
175
184
  // and we want to make sure such a crash is propagated as a ProviderError.
176
185
  try {
177
- const contractDecoder = ContractDecoder.withContracts(tracingConfig);
178
-
179
186
  const context = await getGlobalEdrContext();
180
187
  const provider = await context.createProvider(
181
188
  hardhatChainTypeToEdrChainType(networkConfig.chainType),
@@ -199,13 +206,38 @@ export class EdrProvider extends BaseProvider {
199
206
  },
200
207
  {
201
208
  subscriptionCallback: (event: SubscriptionEvent) => {
202
- edrProvider.onSubscriptionEvent(event);
209
+ const deferredProvider = edrProviderWeakRef?.deref();
210
+ if (deferredProvider !== undefined) {
211
+ deferredProvider.onSubscriptionEvent(event);
212
+ }
203
213
  },
204
214
  },
205
215
  contractDecoder,
206
216
  );
207
217
 
208
- edrProvider = new EdrProvider(provider, jsonRpcRequestWrapper);
218
+ const tracesEnabled =
219
+ includeCallTraces !== undefined &&
220
+ includeCallTraces !== IncludeTraces.None;
221
+
222
+ let traceOutput: TraceOutputManager | undefined;
223
+ if (tracesEnabled) {
224
+ const { TraceOutputManager: TraceOutputManagerImpl } = await import(
225
+ "./utils/trace-output.js"
226
+ );
227
+ traceOutput = new TraceOutputManagerImpl(
228
+ printLineFn,
229
+ connectionId,
230
+ networkName,
231
+ verbosity,
232
+ );
233
+ }
234
+
235
+ edrProvider = new EdrProvider(
236
+ provider,
237
+ traceOutput,
238
+ jsonRpcRequestWrapper,
239
+ );
240
+ edrProviderWeakRef = new WeakRef(edrProvider);
209
241
  } catch (error) {
210
242
  ensureError(error);
211
243
 
@@ -225,12 +257,22 @@ export class EdrProvider extends BaseProvider {
225
257
  */
226
258
  private constructor(
227
259
  provider: Provider,
260
+ traceOutput: TraceOutputManager | undefined,
228
261
  jsonRpcRequestWrapper?: JsonRpcRequestWrapperFunction,
229
262
  ) {
230
263
  super();
231
264
 
232
265
  this.#provider = provider;
266
+ this.#traceOutput = traceOutput;
233
267
  this.#jsonRpcRequestWrapper = jsonRpcRequestWrapper;
268
+
269
+ // After a snapshot revert, the same transactions may run again.
270
+ // Reset traced hashes so their traces are printed a second time.
271
+ if (this.#traceOutput !== undefined) {
272
+ this.on(EDR_NETWORK_REVERT_SNAPSHOT_EVENT, () => {
273
+ this.#traceOutput?.clearTracedHashes();
274
+ });
275
+ }
234
276
  }
235
277
 
236
278
  public async request(
@@ -290,8 +332,10 @@ export class EdrProvider extends BaseProvider {
290
332
  }
291
333
 
292
334
  public async close(): Promise<void> {
335
+ this.removeAllListeners();
293
336
  // Clear the provider reference to help with garbage collection
294
337
  this.#provider = undefined;
338
+ this.#traceOutput?.clearTracedHashes();
295
339
  }
296
340
 
297
341
  public async addCompilationResult(
@@ -312,8 +356,11 @@ export class EdrProvider extends BaseProvider {
312
356
 
313
357
  async #handleEdrResponse(
314
358
  edrResponse: Response,
359
+ method: string,
360
+ params?: unknown[],
315
361
  ): Promise<SuccessfulJsonRpcResponse> {
316
362
  let jsonRpcResponse: JsonRpcResponse;
363
+ let txHash: string | undefined;
317
364
 
318
365
  if (typeof edrResponse.data === "string") {
319
366
  jsonRpcResponse = JSON.parse(edrResponse.data);
@@ -325,6 +372,12 @@ export class EdrProvider extends BaseProvider {
325
372
  const responseError = jsonRpcResponse.error;
326
373
  let error;
327
374
 
375
+ // Grab the tx hash so trace deduplication can recognize this transaction later
376
+ const errorData = responseError.data;
377
+ if (isEdrProviderErrorData(errorData)) {
378
+ txHash = errorData.transactionHash;
379
+ }
380
+
328
381
  const stackTrace = edrResponse.stackTrace();
329
382
 
330
383
  if (stackTrace?.kind === "StackTrace") {
@@ -365,11 +418,33 @@ export class EdrProvider extends BaseProvider {
365
418
  error.data = responseError.data;
366
419
  }
367
420
 
421
+ this.#traceOutput?.outputCallTraces(edrResponse, method, txHash, true);
422
+
368
423
  /* eslint-disable-next-line no-restricted-syntax -- we may throw
369
424
  non-Hardhat errors inside of an EthereumProvider */
370
425
  throw error;
371
426
  }
372
427
 
428
+ if (this.#traceOutput !== undefined) {
429
+ // Output call traces for successful responses. The tx hash is resolved
430
+ // from the response/params so the trace manager can deduplicate.
431
+
432
+ if (
433
+ method === "eth_sendTransaction" ||
434
+ method === "eth_sendRawTransaction"
435
+ ) {
436
+ txHash =
437
+ typeof jsonRpcResponse.result === "string"
438
+ ? jsonRpcResponse.result
439
+ : undefined;
440
+ } else if (method === "eth_getTransactionReceipt") {
441
+ // params[0] is the tx hash being queried — used to dedup receipt polling
442
+ txHash = typeof params?.[0] === "string" ? params[0] : undefined;
443
+ }
444
+
445
+ this.#traceOutput.outputCallTraces(edrResponse, method, txHash, false);
446
+ }
447
+
373
448
  return jsonRpcResponse;
374
449
  }
375
450
 
@@ -421,7 +496,11 @@ export class EdrProvider extends BaseProvider {
421
496
  throw new UnknownError(error.message, error);
422
497
  }
423
498
 
424
- return this.#handleEdrResponse(edrResponse);
499
+ return this.#handleEdrResponse(
500
+ edrResponse,
501
+ request.method,
502
+ Array.isArray(request.params) ? request.params : undefined,
503
+ );
425
504
  }
426
505
  }
427
506
 
@@ -430,49 +509,20 @@ export async function getProviderConfig(
430
509
  coverageConfig: CoverageConfig | undefined,
431
510
  gasReportConfig: GasReportConfig | undefined,
432
511
  chainDescriptors: ChainDescriptorsConfig,
512
+ includeCallTraces?: IncludeTraces,
433
513
  ): Promise<ProviderConfig> {
434
514
  const specId = hardhatHardforkToEdrSpecId(
435
515
  networkConfig.hardfork,
436
516
  networkConfig.chainType,
437
517
  );
438
518
 
439
- const ownedAccounts = await hardhatAccountsToEdrOwnedAccounts(
519
+ const { genesisState, ownedAccounts } = await getGenesisStateAndOwnedAccounts(
440
520
  networkConfig.accounts,
521
+ networkConfig.forking,
522
+ networkConfig.chainType,
523
+ specId,
441
524
  );
442
525
 
443
- const genesisState: Map<Uint8Array, AccountOverride> = new Map(
444
- ownedAccounts.map(({ secretKey, balance }) => {
445
- const address = hexToBytes(addr.fromPrivateKey(secretKey));
446
- const accountOverride: AccountOverride = {
447
- address,
448
- balance: BigInt(balance),
449
- code: new Uint8Array(), // Empty account code, removing potential delegation code when forking
450
- };
451
-
452
- return [address, accountOverride];
453
- }),
454
- );
455
-
456
- const chainGenesisState =
457
- networkConfig.forking !== undefined
458
- ? [] // TODO: Add support for overriding remote fork state when the local fork is different
459
- : networkConfig.chainType === OPTIMISM_CHAIN_TYPE
460
- ? opGenesisState(opHardforkFromString(specId))
461
- : l1GenesisState(l1HardforkFromString(specId));
462
-
463
- for (const account of chainGenesisState) {
464
- const existingOverride = genesisState.get(account.address);
465
- if (existingOverride !== undefined) {
466
- // Favor the genesis state specified by the user
467
- account.balance = account.balance ?? existingOverride.balance;
468
- account.nonce = account.nonce ?? existingOverride.nonce;
469
- account.code = account.code ?? existingOverride.code;
470
- account.storage = account.storage ?? existingOverride.storage;
471
- } else {
472
- genesisState.set(account.address, account);
473
- }
474
- }
475
-
476
526
  return {
477
527
  allowBlocksWithSameTimestamp: networkConfig.allowBlocksWithSameTimestamp,
478
528
  allowUnlimitedContractSize: networkConfig.allowUnlimitedContractSize,
@@ -506,6 +556,7 @@ export async function getProviderConfig(
506
556
  observability: {
507
557
  codeCoverage: coverageConfig,
508
558
  gasReport: gasReportConfig,
559
+ includeCallTraces,
509
560
  },
510
561
  ownedAccounts: ownedAccounts.map((account) => account.secretKey),
511
562
  precompileOverrides: [],