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,179 @@
1
+ import type {
2
+ EdrNetworkAccountsConfig,
3
+ EdrNetworkForkingConfig,
4
+ } from "../../../../types/config.js";
5
+ import type { ChainType } from "../../../../types/network.js";
6
+ import type * as MicroEthSignerAddressT from "micro-eth-signer/address";
7
+
8
+ import {
9
+ l1GenesisState,
10
+ l1HardforkFromString,
11
+ opGenesisState,
12
+ opHardforkFromString,
13
+ type AccountOverride,
14
+ } from "@nomicfoundation/edr";
15
+ import { AsyncMutex } from "@nomicfoundation/hardhat-utils/synchronization";
16
+ import { hexToBytes } from "ethereum-cryptography/utils";
17
+
18
+ import { OPTIMISM_CHAIN_TYPE } from "../../../constants.js";
19
+
20
+ import { hardhatAccountsToEdrOwnedAccounts } from "./utils/convert-to-edr.js";
21
+
22
+ // micro-eth-signer is known to be slow to load, so we lazy load it
23
+ let microEthSignerAddress: typeof MicroEthSignerAddressT | undefined;
24
+
25
+ const noForkingConfigCacheMarkerObject = {};
26
+
27
+ /**
28
+ * We cache the genesis state and owned accounts because computing them can be
29
+ * expensive, especially when run multiple times for the same configuration
30
+ * (e.g. when creating many EDR connections to the same network config).
31
+ *
32
+ * We use mostly references as cache keys, which means that we can miss some
33
+ * cache hits if an equivalent config is used with a different reference, but
34
+ * in practice this should rarely happen, except when using network config
35
+ * overrides that generate the same config. These cases should be the minority
36
+ * within a test suite.
37
+ *
38
+ * Note: the main reason that we don't use the entire NetworkConfig as cache
39
+ * key is that EDR initialization path recreates the NetworkConfig object to
40
+ * override some properties like `allowUnlimitedContractSize`, leading to a
41
+ * different NetworkConfig reference, despite keeping the references of most
42
+ * of its properties (including the accounts and forking config) the same.
43
+ */
44
+ const genesisStateAndAccountsCache: WeakMap<
45
+ EdrNetworkAccountsConfig,
46
+ WeakMap<
47
+ EdrNetworkForkingConfig | typeof noForkingConfigCacheMarkerObject,
48
+ Map<
49
+ ChainType,
50
+ Map<
51
+ string,
52
+ {
53
+ genesisState: Map<Uint8Array, AccountOverride>;
54
+ ownedAccounts: Array<{ secretKey: string; balance: bigint }>;
55
+ }
56
+ >
57
+ >
58
+ >
59
+ > = new WeakMap();
60
+
61
+ const genesisStateAndAccountsCacheMutex = new AsyncMutex();
62
+
63
+ export async function getGenesisStateAndOwnedAccounts(
64
+ accountsConfig: EdrNetworkAccountsConfig,
65
+ forkingConfig: EdrNetworkForkingConfig | undefined,
66
+ chainType: ChainType,
67
+ specId: string,
68
+ ): Promise<{
69
+ genesisState: Map<Uint8Array, AccountOverride>;
70
+ ownedAccounts: Array<{ secretKey: string; balance: bigint }>;
71
+ }> {
72
+ const cached = genesisStateAndAccountsCache
73
+ .get(accountsConfig)
74
+ ?.get(forkingConfig ?? noForkingConfigCacheMarkerObject)
75
+ ?.get(chainType)
76
+ ?.get(specId);
77
+
78
+ if (cached !== undefined) {
79
+ return cached;
80
+ }
81
+
82
+ return genesisStateAndAccountsCacheMutex.exclusiveRun(async () => {
83
+ // We need to check again inside the mutex callback in case another async
84
+ // operation initialized it while we were waiting to acquire the mutex
85
+ const cachedAfterWaiting = genesisStateAndAccountsCache
86
+ .get(accountsConfig)
87
+ ?.get(forkingConfig ?? noForkingConfigCacheMarkerObject)
88
+ ?.get(chainType)
89
+ ?.get(specId);
90
+
91
+ if (cachedAfterWaiting !== undefined) {
92
+ return cachedAfterWaiting;
93
+ }
94
+
95
+ const result = await createGenesisStateAndOwnedAccounts(
96
+ accountsConfig,
97
+ forkingConfig,
98
+ chainType,
99
+ specId,
100
+ );
101
+
102
+ let secondLevelCacheMap = genesisStateAndAccountsCache.get(accountsConfig);
103
+ if (secondLevelCacheMap === undefined) {
104
+ secondLevelCacheMap = new WeakMap();
105
+ genesisStateAndAccountsCache.set(accountsConfig, secondLevelCacheMap);
106
+ }
107
+
108
+ const forkingConfigCacheKey =
109
+ forkingConfig ?? noForkingConfigCacheMarkerObject;
110
+ let thirdLevelCacheMap = secondLevelCacheMap.get(forkingConfigCacheKey);
111
+ if (thirdLevelCacheMap === undefined) {
112
+ thirdLevelCacheMap = new Map();
113
+ secondLevelCacheMap.set(forkingConfigCacheKey, thirdLevelCacheMap);
114
+ }
115
+
116
+ let fourthLevelCacheMap = thirdLevelCacheMap.get(chainType);
117
+ if (fourthLevelCacheMap === undefined) {
118
+ fourthLevelCacheMap = new Map();
119
+ thirdLevelCacheMap.set(chainType, fourthLevelCacheMap);
120
+ }
121
+
122
+ fourthLevelCacheMap.set(specId, result);
123
+
124
+ return result;
125
+ });
126
+ }
127
+
128
+ async function createGenesisStateAndOwnedAccounts(
129
+ accountsConfig: EdrNetworkAccountsConfig,
130
+ forkingConfig: EdrNetworkForkingConfig | undefined,
131
+ chainType: ChainType,
132
+ specId: string,
133
+ ): Promise<{
134
+ genesisState: Map<Uint8Array, AccountOverride>;
135
+ ownedAccounts: Array<{ secretKey: string; balance: bigint }>;
136
+ }> {
137
+ if (microEthSignerAddress === undefined) {
138
+ microEthSignerAddress = await import("micro-eth-signer/address");
139
+ }
140
+
141
+ const { addr } = microEthSignerAddress;
142
+
143
+ const ownedAccounts = await hardhatAccountsToEdrOwnedAccounts(accountsConfig);
144
+
145
+ const genesisState: Map<Uint8Array, AccountOverride> = new Map(
146
+ ownedAccounts.map(({ secretKey, balance }) => {
147
+ const address = hexToBytes(addr.fromPrivateKey(secretKey));
148
+ const accountOverride: AccountOverride = {
149
+ address,
150
+ balance: BigInt(balance),
151
+ code: new Uint8Array(), // Empty account code, removing potential delegation code when forking
152
+ };
153
+
154
+ return [address, accountOverride];
155
+ }),
156
+ );
157
+
158
+ const chainGenesisState =
159
+ forkingConfig !== undefined
160
+ ? [] // TODO: Add support for overriding remote fork state when the local fork is different
161
+ : chainType === OPTIMISM_CHAIN_TYPE
162
+ ? opGenesisState(opHardforkFromString(specId))
163
+ : l1GenesisState(l1HardforkFromString(specId));
164
+
165
+ for (const account of chainGenesisState) {
166
+ const existingOverride = genesisState.get(account.address);
167
+ if (existingOverride !== undefined) {
168
+ // Favor the genesis state specified by the user
169
+ account.balance = account.balance ?? existingOverride.balance;
170
+ account.nonce = account.nonce ?? existingOverride.nonce;
171
+ account.code = account.code ?? existingOverride.code;
172
+ account.storage = account.storage ?? existingOverride.storage;
173
+ } else {
174
+ genesisState.set(account.address, account);
175
+ }
176
+ }
177
+
178
+ return { genesisState, ownedAccounts };
179
+ }
@@ -25,10 +25,12 @@ import type {
25
25
  InternalFunctionCallStackEntry,
26
26
  ContractCallRunOutOfGasError,
27
27
  CheatcodeErrorStackTraceEntry,
28
+ CheatcodeErrorDetails,
28
29
  } from "@nomicfoundation/edr";
29
30
 
30
31
  import {
31
32
  StackTraceEntryType,
33
+ CheatcodeErrorCode,
32
34
  stackTraceEntryTypeToString,
33
35
  FALLBACK_FUNCTION_NAME,
34
36
  RECEIVE_FUNCTION_NAME,
@@ -42,6 +44,7 @@ import {
42
44
  export {
43
45
  SourceReference,
44
46
  StackTraceEntryType,
47
+ CheatcodeErrorCode,
45
48
  stackTraceEntryTypeToString,
46
49
  FALLBACK_FUNCTION_NAME,
47
50
  RECEIVE_FUNCTION_NAME,
@@ -77,6 +80,7 @@ export type {
77
80
  ContractTooLargeErrorStackTraceEntry,
78
81
  InternalFunctionCallStackEntry,
79
82
  ContractCallRunOutOfGasError,
83
+ CheatcodeErrorDetails,
80
84
  };
81
85
 
82
86
  export type SolidityStackTraceEntry =
@@ -9,8 +9,11 @@ import { assertHardhatInvariant } from "@nomicfoundation/hardhat-errors";
9
9
  import { bytesToHexString } from "@nomicfoundation/hardhat-utils/bytes";
10
10
  import { panicErrorCodeToMessage } from "@nomicfoundation/hardhat-utils/panic-errors";
11
11
 
12
+ import { REVERT_ERROR_CODE } from "../../revert-error-code.js";
13
+
12
14
  import {
13
15
  StackTraceEntryType,
16
+ CheatcodeErrorCode,
14
17
  CONSTRUCTOR_FUNCTION_NAME,
15
18
  PRECOMPILE_FUNCTION_NAME,
16
19
  UNKNOWN_FUNCTION_NAME,
@@ -266,9 +269,25 @@ function getMessageFromLastStackTraceEntry(
266
269
  return `VM Exception while processing transaction: ${panicMessage}`;
267
270
 
268
271
  case StackTraceEntryType.CUSTOM_ERROR:
269
- case StackTraceEntryType.CHEATCODE_ERROR:
270
272
  return `VM Exception while processing transaction: ${stackTraceEntry.message}`;
271
273
 
274
+ case StackTraceEntryType.CHEATCODE_ERROR: {
275
+ let message = stackTraceEntry.message;
276
+
277
+ if (stackTraceEntry.details !== undefined) {
278
+ switch (stackTraceEntry.details.code) {
279
+ case CheatcodeErrorCode.UnsupportedCheatcode:
280
+ message = `Cheatcode '${stackTraceEntry.details.cheatcode}' is not supported by Hardhat.`;
281
+ break;
282
+ case CheatcodeErrorCode.MissingCheatcode:
283
+ message = `Cheatcode '${stackTraceEntry.details.cheatcode}' is not yet available in this version of Hardhat.`;
284
+ break;
285
+ }
286
+ }
287
+
288
+ return `VM Exception while processing transaction: ${message}`;
289
+ }
290
+
272
291
  case StackTraceEntryType.OTHER_EXECUTION_ERROR:
273
292
  // TODO: What if there was returnData?
274
293
  return `Transaction reverted and Hardhat couldn't infer the reason.`;
@@ -293,11 +312,15 @@ function getMessageFromLastStackTraceEntry(
293
312
  }
294
313
 
295
314
  /**
296
- * Note: This error class MUST NOT extend ProviderError, as libraries use the
297
- * code property to detect if they are dealing with a JSON-RPC error, and take
298
- * control of errors.
315
+ * Note: This error class does not extend ProviderError because it carries
316
+ * Solidity-specific data (stackTrace) that ProviderError does not model.
317
+ * It does carry `code = 3` to match the de facto standard used by geth and
318
+ * anvil for execution revert errors, allowing libraries like viem to
319
+ * properly detect and handle revert errors via the error cause chain.
299
320
  **/
300
321
  export class SolidityError extends Error {
322
+ public readonly code: number = REVERT_ERROR_CODE;
323
+
301
324
  constructor(
302
325
  message: string,
303
326
  public readonly stackTrace: SolidityStackTrace,
@@ -305,6 +328,7 @@ export class SolidityError extends Error {
305
328
  public readonly transactionHash?: string,
306
329
  ) {
307
330
  super(message);
331
+ this.name = "SolidityError";
308
332
 
309
333
  Object.defineProperty(this, Symbol.for("nodejs.util.inspect.custom"), {
310
334
  value: () =>
@@ -404,7 +404,7 @@ export function edrGasReportToHardhatGasMeasurements(
404
404
  contractFqn,
405
405
  type: "deployment",
406
406
  gas: Number(deployment.gas),
407
- size: Number(deployment.size),
407
+ runtimeSize: Number(deployment.runtimeSize),
408
408
  });
409
409
  }
410
410
  }
@@ -418,6 +418,7 @@ export function edrGasReportToHardhatGasMeasurements(
418
418
  type: "function",
419
419
  functionSig,
420
420
  gas: Number(call.gas),
421
+ proxyChain: call.proxyChain,
421
422
  });
422
423
  }
423
424
  }
@@ -0,0 +1,197 @@
1
+ import type { Colorizer } from "../../../../utils/colorizer.js";
2
+ import type {
3
+ LogTrace,
4
+ CallTrace,
5
+ DecodedTraceParameters,
6
+ } from "@nomicfoundation/edr";
7
+
8
+ import { LogKind, CallKind, IncludeTraces } from "@nomicfoundation/edr";
9
+ import { bytesToHexString } from "@nomicfoundation/hardhat-utils/hex";
10
+
11
+ type NestedArray<T> = Array<T | NestedArray<T>>;
12
+
13
+ export function verbosityToIncludeTraces(verbosity: number): IncludeTraces {
14
+ if (verbosity >= 4) {
15
+ return IncludeTraces.All;
16
+ } else if (verbosity >= 3) {
17
+ return IncludeTraces.Failing;
18
+ }
19
+
20
+ return IncludeTraces.None;
21
+ }
22
+
23
+ export function formatTraces(
24
+ traces: CallTrace[],
25
+ prefix: string,
26
+ colorizer: Colorizer,
27
+ ): string {
28
+ const lines = traces.map((trace) => formatTrace(trace, colorizer));
29
+ const formattedTraces = formatNestedArray(lines, prefix);
30
+ // Remove the trailing newline
31
+ return formattedTraces.slice(0, -1);
32
+ }
33
+
34
+ function formatInputs(
35
+ inputs: DecodedTraceParameters | Uint8Array,
36
+ color?: (text: string) => string,
37
+ ): string | undefined {
38
+ if (inputs instanceof Uint8Array) {
39
+ return inputs.length > 0 ? bytesToHexString(inputs) : undefined;
40
+ } else {
41
+ const formattedName =
42
+ color !== undefined ? color(inputs.name) : inputs.name;
43
+ return `${formattedName}(${inputs.arguments.join(", ")})`;
44
+ }
45
+ }
46
+
47
+ function formatOutputs(outputs: string | Uint8Array): string | undefined {
48
+ if (outputs instanceof Uint8Array) {
49
+ return outputs.length > 0 ? bytesToHexString(outputs) : undefined;
50
+ } else {
51
+ return outputs;
52
+ }
53
+ }
54
+
55
+ function formatLog(log: LogTrace, colorizer: Colorizer): string[] {
56
+ const { parameters } = log;
57
+ const tag = colorizer.yellow("[event]");
58
+ const lines = [];
59
+
60
+ if (Array.isArray(parameters)) {
61
+ const hexValues = parameters.map((bytes) => bytesToHexString(bytes));
62
+ const topicCount = hexValues.length - 1;
63
+
64
+ for (let i = 0; i < topicCount; i++) {
65
+ const prefix = i === 0 ? `${tag} topic 0` : ` topic ${i}`;
66
+ lines.push(`${prefix}: ${colorizer.cyan(hexValues[i])}`);
67
+ }
68
+
69
+ if (hexValues.length > 0) {
70
+ const dataPrefix = topicCount > 0 ? " data" : `${tag} data`;
71
+ lines.push(
72
+ `${dataPrefix}: ${colorizer.cyan(hexValues[hexValues.length - 1])}`,
73
+ );
74
+ }
75
+ } else {
76
+ lines.push(
77
+ `${tag} ${parameters.name}(${colorizer.cyan(parameters.arguments.join(", "))})`,
78
+ );
79
+ }
80
+ return lines;
81
+ }
82
+
83
+ function formatTrace(
84
+ trace: CallTrace,
85
+ colorizer: Colorizer,
86
+ ): NestedArray<string> {
87
+ const {
88
+ success,
89
+ address,
90
+ contract,
91
+ inputs,
92
+ gasUsed,
93
+ value,
94
+ kind,
95
+ isCheatcode,
96
+ outputs,
97
+ } = trace;
98
+ let color;
99
+ if (isCheatcode) {
100
+ color = colorizer.blue;
101
+ } else if (success) {
102
+ color = colorizer.green;
103
+ } else {
104
+ color = colorizer.red;
105
+ }
106
+
107
+ const formattedInputs = formatInputs(inputs, color);
108
+ const formattedOutputs = formatOutputs(outputs);
109
+
110
+ let openingLine: string;
111
+ let closingLine: string | undefined;
112
+ if (kind === CallKind.Create) {
113
+ openingLine = `[${gasUsed}] ${colorizer.yellow("→ new")} ${contract ?? "<unknown>"}@${address}`;
114
+ // TODO: Uncomment this when the formattedInputs starts containing
115
+ // the address of where the contract was deployed instead of the code.
116
+ // if (formattedInputs !== undefined) {
117
+ // openingLine = `${openingLine}@${formattedInputs}`;
118
+ // }
119
+ } else {
120
+ openingLine = `[${gasUsed}] ${color(contract ?? address)}`;
121
+ if (formattedInputs !== undefined) {
122
+ openingLine = `${openingLine}::${formattedInputs}`;
123
+ }
124
+ if (value !== 0n) {
125
+ openingLine = `${openingLine} {value: ${value}}`;
126
+ }
127
+ if (kind === CallKind.StaticCall) {
128
+ openingLine = `${openingLine} ${colorizer.yellow("[staticcall]")}`;
129
+ } else if (kind === CallKind.DelegateCall) {
130
+ openingLine = `${openingLine} ${colorizer.yellow("[delegatecall]")}`;
131
+ } else if (kind === CallKind.CallCode) {
132
+ openingLine = `${openingLine} ${colorizer.yellow("[callcode]")}`;
133
+ }
134
+ }
135
+ if (formattedOutputs !== undefined) {
136
+ if (
137
+ formattedOutputs === "EvmError: Revert" ||
138
+ formattedOutputs.startsWith("revert:")
139
+ ) {
140
+ closingLine = `${color("←")} ${color("[Revert]")} ${formattedOutputs}`;
141
+ } else {
142
+ closingLine = `${color("←")} ${formattedOutputs}`;
143
+ }
144
+ }
145
+
146
+ const lines = [];
147
+ lines.push(openingLine);
148
+ for (const child of trace.children) {
149
+ if (child.kind === LogKind.Log) {
150
+ lines.push(formatLog(child, colorizer));
151
+ } else {
152
+ lines.push(formatTrace(child, colorizer));
153
+ }
154
+ }
155
+ if (closingLine !== undefined) {
156
+ lines.push([closingLine]);
157
+ }
158
+ return lines;
159
+ }
160
+
161
+ function formatNestedArray(
162
+ data: NestedArray<string>,
163
+ prefix = "",
164
+ isTopLevel = true,
165
+ ): string {
166
+ let output = "";
167
+
168
+ for (let i = 0; i < data.length; i++) {
169
+ const item = data[i];
170
+
171
+ if (Array.isArray(item) && typeof item[0] === "string") {
172
+ const [label, ...children] = item;
173
+
174
+ if (isTopLevel) {
175
+ // Blank line between top-level traces
176
+ if (i > 0) {
177
+ output += "\n";
178
+ }
179
+
180
+ output += `${prefix}${label}\n`;
181
+ output += formatNestedArray(children, prefix, false);
182
+ } else {
183
+ const isLast = i === data.length - 1;
184
+ const connector = isLast ? " └─ " : " ├─ ";
185
+ const childPrefix = isLast ? " " : " │ ";
186
+ output += `${prefix}${connector}${label}\n`;
187
+ output += formatNestedArray(children, prefix + childPrefix, false);
188
+ }
189
+ } else if (typeof item === "string") {
190
+ const isLast = i === data.length - 1;
191
+ const connector = isLast ? " └─ " : " ├─ ";
192
+ output += `${prefix}${connector}${item}\n`;
193
+ }
194
+ }
195
+
196
+ return output;
197
+ }
@@ -0,0 +1,137 @@
1
+ import type { Response } from "@nomicfoundation/edr";
2
+
3
+ import chalk from "chalk";
4
+ import debug from "debug";
5
+
6
+ import { formatTraces } from "./trace-formatters.js";
7
+
8
+ const log = debug("hardhat:core:hardhat-network:provider");
9
+
10
+ // Rotating palette for per-connection coloring of trace headers.
11
+ const LABEL_COLORS: Array<(text: string) => string> = [
12
+ chalk.cyan,
13
+ chalk.magenta,
14
+ chalk.blueBright,
15
+ chalk.yellowBright,
16
+ chalk.cyanBright,
17
+ chalk.magentaBright,
18
+ ];
19
+
20
+ // Keyed by `network name` (not connection label) so the map stays bounded
21
+ // by the number of distinct networks, not the number of connections.
22
+ const networkColorMap = new Map<string, (text: string) => string>();
23
+
24
+ // These methods run a simulation before the actual transaction. We skip
25
+ // their traces on success to avoid duplicates, but still show them on
26
+ // failure since the real transaction won't be sent.
27
+ const TRACE_SUPPRESSED_METHODS = new Set(["eth_estimateGas"]);
28
+
29
+ // Bounded set: receipt-polling deduplication only needs a small window.
30
+ // Once the cap is reached the set is cleared so memory stays bounded
31
+ // in long-running nodes.
32
+ const TRACED_TX_HASHES_CAP = 1024;
33
+
34
+ /**
35
+ * Manages trace output formatting, deduplication, and coloring for a single
36
+ * provider connection.
37
+ */
38
+ export class TraceOutputManager {
39
+ readonly #printLineFn: (line: string) => void;
40
+ readonly #connectionLabel: string;
41
+ readonly #labelColor: (text: string) => string;
42
+ readonly #verbosity: number;
43
+ readonly #tracedTxHashes = new Set<string>();
44
+
45
+ constructor(
46
+ printLineFn: (line: string) => void,
47
+ connectionId: number,
48
+ networkName: string,
49
+ verbosity: number,
50
+ ) {
51
+ this.#printLineFn = printLineFn;
52
+ this.#connectionLabel = `connection #${connectionId} (${networkName})`;
53
+ this.#labelColor = this.#colorForNetwork(networkName);
54
+ this.#verbosity = verbosity;
55
+ }
56
+
57
+ /**
58
+ * Output call traces from an EDR response, applying deduplication and
59
+ * suppression rules based on the verbosity level.
60
+ */
61
+ public outputCallTraces(
62
+ edrResponse: Response,
63
+ method: string,
64
+ txHash: string | undefined,
65
+ failed: boolean,
66
+ ): void {
67
+ try {
68
+ // At verbosity < 5, suppress simulation-only methods on success and
69
+ // deduplicate traces for the same transaction. At verbosity >= 5
70
+ // (#showAllTraces), every RPC call with traces is shown.
71
+
72
+ if (this.#verbosity < 5) {
73
+ // Skip successful simulation-only methods, their trace will appear
74
+ // again in the subsequent eth_sendTransaction. Failed simulations
75
+ // are shown because the sendTransaction may never happen.
76
+ if (!failed && TRACE_SUPPRESSED_METHODS.has(method)) {
77
+ return;
78
+ }
79
+
80
+ // Dedup: skip if we already traced this transaction.
81
+ // Prevents the same tx appearing multiple times from receipt polling.
82
+ if (txHash !== undefined && this.#tracedTxHashes.has(txHash)) {
83
+ return;
84
+ }
85
+ }
86
+
87
+ const rawTraces = edrResponse.callTraces();
88
+
89
+ // EDR returns duplicate traces for eth_estimateGas, take only the first.
90
+ const callTraces =
91
+ TRACE_SUPPRESSED_METHODS.has(method) && rawTraces.length > 1
92
+ ? [rawTraces[0]]
93
+ : rawTraces;
94
+
95
+ if (callTraces.length === 0) {
96
+ return;
97
+ }
98
+
99
+ if (txHash !== undefined) {
100
+ if (this.#tracedTxHashes.size >= TRACED_TX_HASHES_CAP) {
101
+ this.#tracedTxHashes.clear();
102
+ }
103
+
104
+ this.#tracedTxHashes.add(txHash);
105
+ }
106
+
107
+ const coloredLabel = this.#labelColor(this.#connectionLabel);
108
+ const prefix = callTraces.length > 1 ? "Traces from" : "Trace from";
109
+ const coloredPrefix = this.#labelColor(prefix);
110
+ const styledMethod = failed ? chalk.red(method) : chalk.dim(method);
111
+ const header = `${coloredPrefix} ${coloredLabel}: ${styledMethod}`;
112
+
113
+ this.#printLineFn(`${header}\n${formatTraces(callTraces, " ", chalk)}`);
114
+ } catch (e) {
115
+ log("Failed to get call traces: %O", e);
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Clear the dedup set (e.g. on snapshot revert so replayed txs are traced again).
121
+ */
122
+ public clearTracedHashes(): void {
123
+ this.#tracedTxHashes.clear();
124
+ }
125
+
126
+ #colorForNetwork(networkName: string): (text: string) => string {
127
+ let color = networkColorMap.get(networkName);
128
+
129
+ if (color === undefined) {
130
+ const index = networkColorMap.size % LABEL_COLORS.length;
131
+ color = LABEL_COLORS[index];
132
+ networkColorMap.set(networkName, color);
133
+ }
134
+
135
+ return color;
136
+ }
137
+ }
@@ -12,6 +12,14 @@ export default async (): Promise<Partial<HardhatRuntimeEnvironmentHooks>> => ({
12
12
  let networkManager: NetworkManager | undefined;
13
13
 
14
14
  hre.network = {
15
+ async create(networkConnectionParams) {
16
+ if (networkManager === undefined) {
17
+ networkManager = await createNetworkManager(hre, context);
18
+ }
19
+
20
+ return networkManager.create(networkConnectionParams);
21
+ },
22
+
15
23
  async connect(networkConnectionParams) {
16
24
  if (networkManager === undefined) {
17
25
  networkManager = await createNetworkManager(hre, context);
@@ -19,6 +27,15 @@ export default async (): Promise<Partial<HardhatRuntimeEnvironmentHooks>> => ({
19
27
 
20
28
  return networkManager.connect(networkConnectionParams);
21
29
  },
30
+
31
+ async getOrCreate(networkOrParams) {
32
+ if (networkManager === undefined) {
33
+ networkManager = await createNetworkManager(hre, context);
34
+ }
35
+
36
+ return networkManager.getOrCreate(networkOrParams);
37
+ },
38
+
22
39
  async createServer(...params) {
23
40
  if (networkManager === undefined) {
24
41
  networkManager = await createNetworkManager(hre, context);
@@ -27,6 +44,18 @@ export default async (): Promise<Partial<HardhatRuntimeEnvironmentHooks>> => ({
27
44
  return networkManager.createServer(...params);
28
45
  },
29
46
  };
47
+
48
+ // To avoid adding `wasConnectCalled` to the public interface of
49
+ // `NetworkManager`, we add this pass through method that is only
50
+ // called from the `main` function.
51
+ Object.defineProperty(hre.network, "wasConnectCalled", {
52
+ value: () =>
53
+ networkManager !== undefined &&
54
+ "wasConnectCalled" in networkManager &&
55
+ typeof networkManager.wasConnectCalled === "function" &&
56
+ networkManager.wasConnectCalled(),
57
+ enumerable: false,
58
+ });
30
59
  },
31
60
  });
32
61
 
@@ -50,5 +79,6 @@ async function createNetworkManager(
50
79
  hre.config.chainDescriptors,
51
80
  hre.globalOptions.config,
52
81
  hre.config.paths.root,
82
+ hre.globalOptions.verbosity,
53
83
  );
54
84
  }