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,272 @@
1
+ import type { SolidityBuildInfoOutput } from "../../../../types/solidity/solidity-artifacts.js";
2
+ import type {
3
+ BuildInfoAndOutput,
4
+ EdrArtifactWithMetadata,
5
+ } from "../edr-artifacts.js";
6
+ import type { RawInlineOverride } from "./types.js";
7
+ import type { ArtifactId, TestFunctionOverride } from "@nomicfoundation/edr";
8
+
9
+ import {
10
+ HardhatError,
11
+ assertHardhatInvariant,
12
+ } from "@nomicfoundation/hardhat-errors";
13
+ import { bytesToUtf8String } from "@nomicfoundation/hardhat-utils/bytes";
14
+
15
+ import { getFullyQualifiedName } from "../../../../utils/contract-names.js";
16
+
17
+ import {
18
+ buildInfoContainsInlineConfig,
19
+ resolveFunctionSelector,
20
+ buildConfigOverride,
21
+ getFunctionFqn,
22
+ } from "./helpers.js";
23
+ import { extractInlineConfigFromAst } from "./parsing.js";
24
+ import { validateInlineOverrides } from "./validation.js";
25
+
26
+ export type { RawInlineOverride } from "./types.js";
27
+ export {
28
+ buildInfoContainsInlineConfig,
29
+ resolveFunctionSelector,
30
+ buildConfigOverride,
31
+ getFunctionFqn,
32
+ } from "./helpers.js";
33
+ export {
34
+ extractInlineConfigFromAst,
35
+ extractDocText,
36
+ parseInlineConfigLine,
37
+ } from "./parsing.js";
38
+ export { validateInlineOverrides } from "./validation.js";
39
+
40
+ interface CollectedOverrides {
41
+ overrides: RawInlineOverride[];
42
+ artifactIdsByFqn: Map<string, ArtifactId>;
43
+ methodIdentifiersByContract: Map<string, Record<string, string>>;
44
+ }
45
+
46
+ /**
47
+ * Extracts per-test inline configuration overrides from the NatSpec comments
48
+ * in the solc AST. It only extracts them from the build info where each
49
+ * test artifact's file was compiled as a root file.
50
+ */
51
+ export function getTestFunctionOverrides(
52
+ testSuiteArtifacts: EdrArtifactWithMetadata[],
53
+ buildInfosAndOutputs: BuildInfoAndOutput[],
54
+ ): TestFunctionOverride[] {
55
+ const allRawOverrides = collectRawOverrides(
56
+ testSuiteArtifacts,
57
+ buildInfosAndOutputs,
58
+ );
59
+
60
+ validateInlineOverrides(allRawOverrides.overrides);
61
+
62
+ return buildTestFunctionOverrides(allRawOverrides);
63
+ }
64
+
65
+ function collectRawOverrides(
66
+ testSuiteArtifacts: EdrArtifactWithMetadata[],
67
+ buildInfosAndOutputs: BuildInfoAndOutput[],
68
+ ): CollectedOverrides {
69
+ const overrides: RawInlineOverride[] = [];
70
+ const methodIdentifiersByContract = new Map<string, Record<string, string>>();
71
+
72
+ // Note: We group the artifacts by their build info, so that we only process
73
+ // the relevant build infos, and only the root files of each of them.
74
+ //
75
+ // The last part is important, as a test file can be present in multiple build
76
+ // infos in the presence of partial recompilations
77
+ //
78
+ // At the same time, the same root file could have produced multiple test
79
+ // artifacts, so we need a two-level map to avoid processing the root files
80
+ // multiple times.
81
+
82
+ // Build lookup structures for fast access
83
+ const artifactsGroupedByBuildInfo = new Map<
84
+ /* buildInfoId */ string,
85
+ Map</* inputSourceName */ string, EdrArtifactWithMetadata[]>
86
+ >();
87
+
88
+ const artifactIdsByFqn = new Map<string, ArtifactId>();
89
+ const buildInfoAndOutputById: Map<string, BuildInfoAndOutput> = new Map(
90
+ buildInfosAndOutputs.map((bio) => [bio.buildInfoId, bio]),
91
+ );
92
+
93
+ for (const edrArtifactWithMetadata of testSuiteArtifacts) {
94
+ const fqn = getFullyQualifiedName(
95
+ edrArtifactWithMetadata.edrArtifact.id.source,
96
+ edrArtifactWithMetadata.edrArtifact.id.name,
97
+ );
98
+
99
+ const buildInfoId = edrArtifactWithMetadata.buildInfoId;
100
+ let artifactsBySource = artifactsGroupedByBuildInfo.get(buildInfoId);
101
+
102
+ if (artifactsBySource === undefined) {
103
+ artifactsBySource = new Map();
104
+ artifactsGroupedByBuildInfo.set(buildInfoId, artifactsBySource);
105
+ }
106
+
107
+ let artifacts = artifactsBySource.get(
108
+ edrArtifactWithMetadata.edrArtifact.id.source,
109
+ );
110
+ if (artifacts === undefined) {
111
+ artifacts = [];
112
+ artifactsBySource.set(
113
+ edrArtifactWithMetadata.edrArtifact.id.source,
114
+ artifacts,
115
+ );
116
+ }
117
+
118
+ artifacts.push(edrArtifactWithMetadata);
119
+ artifactIdsByFqn.set(fqn, edrArtifactWithMetadata.edrArtifact.id);
120
+ }
121
+
122
+ for (const [
123
+ buildInfoId,
124
+ artifactsBySource,
125
+ ] of artifactsGroupedByBuildInfo.entries()) {
126
+ const buildInfoAndOutput = buildInfoAndOutputById.get(buildInfoId);
127
+ if (buildInfoAndOutput === undefined) {
128
+ // We can throw for this error for the first artifact with this build info
129
+ // as all of them have the same problem.
130
+ const artifacts = artifactsBySource.values().next().value;
131
+
132
+ assertHardhatInvariant(
133
+ artifacts !== undefined && artifacts.length > 0,
134
+ "An artifact must be present for the build info",
135
+ );
136
+
137
+ const anyArtifact = artifacts[0];
138
+
139
+ const fqn = getFullyQualifiedName(
140
+ anyArtifact.userSourceName,
141
+ anyArtifact.edrArtifact.id.name,
142
+ );
143
+
144
+ throw new HardhatError(
145
+ HardhatError.ERRORS.CORE.SOLIDITY_TESTS.BUILD_INFO_NOT_FOUND_FOR_CONTRACT,
146
+ {
147
+ fqn,
148
+ },
149
+ );
150
+ }
151
+
152
+ if (!buildInfoContainsInlineConfig(buildInfoAndOutput.buildInfo)) {
153
+ continue;
154
+ }
155
+
156
+ const buildInfoOutput: SolidityBuildInfoOutput = JSON.parse(
157
+ bytesToUtf8String(buildInfoAndOutput.output),
158
+ );
159
+
160
+ for (const [
161
+ inputSourceName,
162
+ sourceArtifacts,
163
+ ] of artifactsBySource.entries()) {
164
+ const contractNames = new Set(
165
+ sourceArtifacts.map((a) => a.edrArtifact.id.name),
166
+ );
167
+
168
+ const source = buildInfoOutput.output.sources[inputSourceName];
169
+ const extracted = extractInlineConfigFromAst(
170
+ source.ast,
171
+ inputSourceName,
172
+ contractNames,
173
+ );
174
+ overrides.push(...extracted);
175
+
176
+ for (const artifact of sourceArtifacts) {
177
+ const contractName = artifact.edrArtifact.id.name;
178
+ const fqn = getFullyQualifiedName(inputSourceName, contractName);
179
+
180
+ const methodIdentifiers =
181
+ buildInfoOutput.output.contracts?.[inputSourceName][contractName]?.evm
182
+ ?.methodIdentifiers;
183
+
184
+ methodIdentifiersByContract.set(fqn, methodIdentifiers ?? {});
185
+ }
186
+ }
187
+ }
188
+
189
+ return { overrides, artifactIdsByFqn, methodIdentifiersByContract };
190
+ }
191
+
192
+ function buildTestFunctionOverrides(
193
+ collected: CollectedOverrides,
194
+ ): TestFunctionOverride[] {
195
+ const { overrides, artifactIdsByFqn, methodIdentifiersByContract } =
196
+ collected;
197
+
198
+ // Group overrides by function. When the AST provides a functionSelector
199
+ // (public/external functions in solc >= 0.6.0), use it to distinguish
200
+ // overloaded functions. Otherwise fall back to function name only.
201
+ const overridesByFunction = new Map<string, RawInlineOverride[]>();
202
+ for (const override of overrides) {
203
+ const functionFqn = getFunctionFqn(
204
+ override.inputSourceName,
205
+ override.contractName,
206
+ override.functionName,
207
+ );
208
+ const groupKey =
209
+ override.functionSelector !== undefined
210
+ ? `${functionFqn}#${override.functionSelector}`
211
+ : functionFqn;
212
+ const existing = overridesByFunction.get(groupKey);
213
+ if (existing === undefined) {
214
+ overridesByFunction.set(groupKey, [override]);
215
+ } else {
216
+ existing.push(override);
217
+ }
218
+ }
219
+
220
+ // Build TestFunctionOverride objects
221
+ const testFunctionOverrides: TestFunctionOverride[] = [];
222
+ for (const [_groupKey, groupOverrides] of overridesByFunction.entries()) {
223
+ const firstOverride = groupOverrides[0];
224
+ const functionFqn = getFunctionFqn(
225
+ firstOverride.inputSourceName,
226
+ firstOverride.contractName,
227
+ firstOverride.functionName,
228
+ );
229
+ const contractFqn = `${firstOverride.inputSourceName}:${firstOverride.contractName}`;
230
+
231
+ const artifactId = artifactIdsByFqn.get(contractFqn);
232
+ assertHardhatInvariant(
233
+ artifactId !== undefined,
234
+ `Missing artifact id for "${contractFqn}"`,
235
+ );
236
+
237
+ // Use the AST-provided selector when available, otherwise fall back to
238
+ // resolving via methodIdentifiers.
239
+ let selector: string | undefined;
240
+ if (firstOverride.functionSelector !== undefined) {
241
+ selector = `0x${firstOverride.functionSelector}`;
242
+ } else {
243
+ const methodIdentifiers = methodIdentifiersByContract.get(contractFqn);
244
+ assertHardhatInvariant(
245
+ methodIdentifiers !== undefined,
246
+ `Missing method identifiers for "${contractFqn}"`,
247
+ );
248
+
249
+ selector = resolveFunctionSelector(
250
+ methodIdentifiers,
251
+ firstOverride.functionName,
252
+ );
253
+ }
254
+
255
+ if (selector === undefined) {
256
+ throw new HardhatError(
257
+ HardhatError.ERRORS.CORE.SOLIDITY_TESTS.INLINE_CONFIG_UNRESOLVED_SELECTOR,
258
+ { functionFqn },
259
+ );
260
+ }
261
+
262
+ testFunctionOverrides.push({
263
+ identifier: {
264
+ contractArtifact: artifactId,
265
+ functionSelector: selector,
266
+ },
267
+ config: buildConfigOverride(groupOverrides),
268
+ });
269
+ }
270
+
271
+ return testFunctionOverrides;
272
+ }
@@ -0,0 +1,186 @@
1
+ import type { RawInlineOverride } from "./types.js";
2
+
3
+ import { HardhatError } from "@nomicfoundation/hardhat-errors";
4
+ import { isObject } from "@nomicfoundation/hardhat-utils/lang";
5
+ import {
6
+ kebabToCamelCase,
7
+ snakeToCamelCase,
8
+ } from "@nomicfoundation/hardhat-utils/string";
9
+
10
+ import {
11
+ HARDHAT_CONFIG_PREFIX,
12
+ FORGE_CONFIG_PREFIX,
13
+ TOP_LEVEL_KEYS,
14
+ } from "./constants.js";
15
+ import { getFunctionFqn } from "./helpers.js";
16
+
17
+ /**
18
+ * Extracts raw inline config overrides from a solc AST for a single source
19
+ * file.
20
+ */
21
+ export function extractInlineConfigFromAst(
22
+ ast: unknown,
23
+ inputSourceName: string,
24
+ contractNames: Set<string>,
25
+ ): RawInlineOverride[] {
26
+ if (!isObject(ast) || ast.nodeType !== "SourceUnit") {
27
+ return [];
28
+ }
29
+
30
+ const results: RawInlineOverride[] = [];
31
+ const nodes: unknown[] = Array.isArray(ast.nodes) ? ast.nodes : [];
32
+ for (const node of nodes) {
33
+ if (!isObject(node) || node.nodeType !== "ContractDefinition") {
34
+ continue;
35
+ }
36
+
37
+ const contractName = node.name;
38
+ if (typeof contractName !== "string") {
39
+ continue;
40
+ }
41
+
42
+ if (!contractNames.has(contractName)) {
43
+ continue;
44
+ }
45
+
46
+ const members: unknown[] = Array.isArray(node.nodes) ? node.nodes : [];
47
+ for (const member of members) {
48
+ if (!isObject(member) || member.nodeType !== "FunctionDefinition") {
49
+ continue;
50
+ }
51
+
52
+ const fnName = member.name;
53
+ if (
54
+ typeof fnName !== "string" ||
55
+ (!fnName.startsWith("test") && !fnName.startsWith("invariant"))
56
+ ) {
57
+ continue;
58
+ }
59
+
60
+ const fnSelector =
61
+ typeof member.functionSelector === "string"
62
+ ? member.functionSelector
63
+ : undefined;
64
+
65
+ const docText = extractDocText(member.documentation);
66
+ if (docText === undefined) {
67
+ continue;
68
+ }
69
+
70
+ for (const line of docText.split("\n")) {
71
+ const parsed = parseInlineConfigLine(
72
+ line,
73
+ inputSourceName,
74
+ contractName,
75
+ fnName,
76
+ );
77
+ if (parsed !== undefined) {
78
+ parsed.functionSelector = fnSelector;
79
+ results.push(parsed);
80
+ }
81
+ }
82
+ }
83
+ }
84
+
85
+ return results;
86
+ }
87
+
88
+ /**
89
+ * Extracts the documentation text from a FunctionDefinition's documentation
90
+ * field, which can be a StructuredDocumentation node, a plain string, or null.
91
+ */
92
+ export function extractDocText(doc: unknown): string | undefined {
93
+ if (
94
+ isObject(doc) &&
95
+ doc.nodeType === "StructuredDocumentation" &&
96
+ typeof doc.text === "string"
97
+ ) {
98
+ return doc.text;
99
+ } else if (typeof doc === "string") {
100
+ return doc;
101
+ } else {
102
+ return undefined;
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Parses a single line from a NatSpec comment and returns a RawInlineOverride
108
+ * if the line contains a valid inline config directive. The line must start
109
+ * with either "hardhat-config:" or "forge-config:", followed by a key=value pair.
110
+ * Returns undefined if the line does not contain an inline config directive.
111
+ */
112
+ export function parseInlineConfigLine(
113
+ line: string,
114
+ inputSourceName: string,
115
+ contractName: string,
116
+ functionName: string,
117
+ ): RawInlineOverride | undefined {
118
+ // Strip leading whitespace and optional leading '*' from NatSpec text.
119
+ // Solc's StructuredDocumentation.text has delimiters (///, /**, */) removed.
120
+ // For /// comments, text has leading whitespace; for /** */ blocks, interior
121
+ // lines may start with " * ". The regex handles both styles.
122
+ const trimmedLine = line.replace(/^\s*\*?\s*/, "");
123
+ const functionFqn = getFunctionFqn(
124
+ inputSourceName,
125
+ contractName,
126
+ functionName,
127
+ );
128
+
129
+ let keyValueSegment: string;
130
+
131
+ if (trimmedLine.startsWith(HARDHAT_CONFIG_PREFIX)) {
132
+ keyValueSegment = trimmedLine.slice(HARDHAT_CONFIG_PREFIX.length).trim();
133
+ } else if (trimmedLine.startsWith(FORGE_CONFIG_PREFIX)) {
134
+ keyValueSegment = trimmedLine.slice(FORGE_CONFIG_PREFIX.length).trim();
135
+ } else {
136
+ return undefined;
137
+ }
138
+
139
+ const eqIndex = keyValueSegment.indexOf("=");
140
+ if (eqIndex === -1) {
141
+ throw new HardhatError(
142
+ HardhatError.ERRORS.CORE.SOLIDITY_TESTS.INLINE_CONFIG_INVALID_SYNTAX,
143
+ {
144
+ line: trimmedLine,
145
+ functionFqn,
146
+ },
147
+ );
148
+ }
149
+
150
+ const rawKey = keyValueSegment.slice(0, eqIndex).trim();
151
+ let parsedKey = rawKey;
152
+ const rawValue = keyValueSegment.slice(eqIndex + 1).trim();
153
+
154
+ // Detect profile prefix: if the first dot-segment is NOT a known top-level
155
+ // category, treat it as a profile name.
156
+ const firstDot = rawKey.indexOf(".");
157
+ if (firstDot !== -1) {
158
+ const firstSegment = rawKey.slice(0, firstDot);
159
+ if (!TOP_LEVEL_KEYS.includes(firstSegment)) {
160
+ // It's a profile. Validate it.
161
+ const profile = firstSegment;
162
+ if (profile !== "default") {
163
+ throw new HardhatError(
164
+ HardhatError.ERRORS.CORE.SOLIDITY_TESTS.INLINE_CONFIG_UNSUPPORTED_PROFILE,
165
+ {
166
+ profile,
167
+ functionFqn,
168
+ },
169
+ );
170
+ }
171
+ // Strip the "default." prefix
172
+ parsedKey = rawKey.slice(firstDot + 1);
173
+ }
174
+ }
175
+
176
+ parsedKey = snakeToCamelCase(kebabToCamelCase(parsedKey));
177
+
178
+ return {
179
+ inputSourceName,
180
+ contractName,
181
+ functionName,
182
+ key: parsedKey,
183
+ rawKey,
184
+ rawValue,
185
+ };
186
+ }
@@ -0,0 +1,9 @@
1
+ export interface RawInlineOverride {
2
+ inputSourceName: string;
3
+ contractName: string;
4
+ functionName: string;
5
+ functionSelector?: string; // from AST, hex without 0x prefix
6
+ key: string; // parsed camelCase key, without profile prefix
7
+ rawKey: string; // original key as written by the user, for error messages
8
+ rawValue: string;
9
+ }
@@ -0,0 +1,122 @@
1
+ import type { RawInlineOverride } from "./types.js";
2
+
3
+ import { HardhatError } from "@nomicfoundation/hardhat-errors";
4
+
5
+ import { KEY_TYPES } from "./constants.js";
6
+ import { getFunctionFqn } from "./helpers.js";
7
+
8
+ /**
9
+ * Validates a list of raw inline overrides, checking for:
10
+ * - Valid keys
11
+ * - No duplicate keys for the same function
12
+ * - Values of the expected type (numbers must be non-negative integers, booleans
13
+ * must be "true" or "false")
14
+ *
15
+ * Throws a HardhatError if any validation fails.
16
+ */
17
+ export function validateInlineOverrides(overrides: RawInlineOverride[]): void {
18
+ const seen = new Set<string>();
19
+
20
+ for (const {
21
+ inputSourceName,
22
+ contractName,
23
+ functionName,
24
+ functionSelector,
25
+ rawKey,
26
+ rawValue,
27
+ key,
28
+ } of overrides) {
29
+ const functionFqn = getFunctionFqn(
30
+ inputSourceName,
31
+ contractName,
32
+ functionName,
33
+ );
34
+
35
+ // Validate key
36
+ if (!Object.hasOwn(KEY_TYPES, key)) {
37
+ throw new HardhatError(
38
+ HardhatError.ERRORS.CORE.SOLIDITY_TESTS.INLINE_CONFIG_INVALID_KEY,
39
+ {
40
+ key: rawKey,
41
+ validKeys: Object.keys(KEY_TYPES).join(", "),
42
+ functionFqn,
43
+ },
44
+ );
45
+ }
46
+
47
+ // Validate key matches test type
48
+ const dotIndex = key.indexOf(".");
49
+ if (dotIndex !== -1) {
50
+ const keyCategory = key.slice(0, dotIndex);
51
+ const isFuzzTest = functionName.startsWith("test");
52
+ const isInvariantTest = functionName.startsWith("invariant");
53
+
54
+ if (
55
+ (isFuzzTest && keyCategory === "invariant") ||
56
+ (isInvariantTest && keyCategory === "fuzz")
57
+ ) {
58
+ const testType = isFuzzTest ? "fuzz" : "invariant";
59
+ const validPrefix = isFuzzTest ? "fuzz." : "invariant.";
60
+ const validKeys = Object.keys(KEY_TYPES)
61
+ .filter((k) => k.startsWith(validPrefix) || !k.includes("."))
62
+ .join(", ");
63
+
64
+ throw new HardhatError(
65
+ HardhatError.ERRORS.CORE.SOLIDITY_TESTS.INLINE_CONFIG_INVALID_KEY_FOR_TEST_TYPE,
66
+ {
67
+ key: rawKey,
68
+ functionFqn,
69
+ testType,
70
+ validKeys,
71
+ },
72
+ );
73
+ }
74
+ }
75
+
76
+ // Check for duplicates (include selector to allow same key on overloaded functions)
77
+ const functionId =
78
+ functionSelector !== undefined
79
+ ? `${functionFqn}#${functionSelector}`
80
+ : functionFqn;
81
+ const dedupeKey = `${functionId}-${key}`;
82
+ if (seen.has(dedupeKey)) {
83
+ throw new HardhatError(
84
+ HardhatError.ERRORS.CORE.SOLIDITY_TESTS.INLINE_CONFIG_DUPLICATE_KEY,
85
+ { key: rawKey, functionFqn },
86
+ );
87
+ }
88
+ seen.add(dedupeKey);
89
+
90
+ // Validate value type
91
+ const expectedType = KEY_TYPES[key];
92
+ if (expectedType === "number") {
93
+ if (
94
+ !/^(0|[1-9]\d*)$/.test(rawValue) ||
95
+ !Number.isSafeInteger(Number(rawValue))
96
+ ) {
97
+ throw new HardhatError(
98
+ HardhatError.ERRORS.CORE.SOLIDITY_TESTS.INLINE_CONFIG_INVALID_VALUE,
99
+ {
100
+ value: rawValue,
101
+ key: rawKey,
102
+ expectedType: "non-negative integer",
103
+ functionFqn,
104
+ },
105
+ );
106
+ }
107
+ } else {
108
+ const lowerValue = rawValue.toLowerCase();
109
+ if (lowerValue !== "true" && lowerValue !== "false") {
110
+ throw new HardhatError(
111
+ HardhatError.ERRORS.CORE.SOLIDITY_TESTS.INLINE_CONFIG_INVALID_VALUE,
112
+ {
113
+ value: rawValue,
114
+ key: rawKey,
115
+ expectedType: "boolean",
116
+ functionFqn,
117
+ },
118
+ );
119
+ }
120
+ }
121
+ }
122
+ }
@@ -3,6 +3,7 @@ import type {
3
3
  TestReporterResult,
4
4
  TestStatus,
5
5
  } from "./types.js";
6
+ import type { Colorizer } from "../../utils/colorizer.js";
6
7
  import type { TestResult } from "@nomicfoundation/edr";
7
8
 
8
9
  import { bytesToHexString } from "@nomicfoundation/hardhat-utils/hex";
@@ -11,12 +12,9 @@ import chalk from "chalk";
11
12
  import { sendErrorTelemetry } from "../../cli/telemetry/sentry/reporter.js";
12
13
  import { SolidityTestStackTraceGenerationError } from "../network-manager/edr/stack-traces/stack-trace-generation-errors.js";
13
14
  import { encodeStackTraceEntry } from "../network-manager/edr/stack-traces/stack-trace-solidity-errors.js";
15
+ import { formatTraces } from "../network-manager/edr/utils/trace-formatters.js";
14
16
 
15
- import {
16
- type Colorizer,
17
- formatArtifactId,
18
- formatTraces,
19
- } from "./formatters.js";
17
+ import { formatArtifactId } from "./formatters.js";
20
18
  import { getMessageFromLastStackTraceEntry } from "./stack-trace-solidity-errors.js";
21
19
 
22
20
  class Indenter {
@@ -147,6 +145,8 @@ export async function* testReporter(
147
145
  suiteSuccessCount++;
148
146
  if (verbosity >= 5) {
149
147
  printSetUpTraces = true;
148
+ }
149
+ if (verbosity >= 4) {
150
150
  printExecutionTraces = true;
151
151
  }
152
152
  break;
@@ -184,7 +184,7 @@ export async function* testReporter(
184
184
  if (printSetUpTraces && functionName === "setUp") {
185
185
  return true;
186
186
  }
187
- if (printExecutionTraces && functionName !== "setUp()") {
187
+ if (printExecutionTraces && functionName !== "setUp") {
188
188
  return true;
189
189
  }
190
190
  return false;