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
@@ -1,15 +1,21 @@
1
1
  import type { HardhatUserConfig } from "../../../config.js";
2
2
  import type {
3
+ SolidityCompilerConfig,
4
+ SolidityCompilerUserConfig,
3
5
  HardhatConfig,
4
6
  MultiVersionSolidityUserConfig,
5
7
  SingleVersionSolidityUserConfig,
6
- SolcConfig,
7
- SolcUserConfig,
8
8
  SolidityBuildProfileConfig,
9
9
  SolidityConfig,
10
10
  SolidityUserConfig,
11
+ CommonSolidityCompilerUserConfig,
12
+ SolcSolidityCompilerConfig,
13
+ SolcSolidityCompilerUserConfig,
11
14
  } from "../../../types/config.js";
12
- import type { HardhatUserConfigValidationError } from "../../../types/hooks.js";
15
+ import type {
16
+ HardhatConfigValidationError,
17
+ HardhatUserConfigValidationError,
18
+ } from "../../../types/hooks.js";
13
19
 
14
20
  import { deepMerge, isObject } from "@nomicfoundation/hardhat-utils/lang";
15
21
  import { resolveFromRoot } from "@nomicfoundation/hardhat-utils/path";
@@ -26,104 +32,187 @@ import {
26
32
  hasOfficialArm64Build,
27
33
  missesSomeOfficialNativeBuilds,
28
34
  } from "./build-system/solc-info.js";
35
+ import { DEFAULT_OUTPUT_SELECTION } from "./constants.js";
36
+
37
+ /**
38
+ * The top-level type SolidityUserConfig is a union type too complex for
39
+ * TypeScript to handle properly. It accepts fields of different types of
40
+ * configurations. For example, it accepts `compilers` inside of a
41
+ * `SingleVersionSolidityUserConfig`.
42
+ *
43
+ * For this reason, we declare all the fields that shouldn't exist in the
44
+ * presence of another one as incompatible.
45
+ *
46
+ * This object has all the fields that are incompatible with `version`.
47
+ */
48
+ const incompatibleVersionFields = {
49
+ compilers: incompatibleFieldType("This field is incompatible with `version`"),
50
+ overrides: incompatibleFieldType("This field is incompatible with `version`"),
51
+ profiles: incompatibleFieldType("This field is incompatible with `version`"),
52
+ };
53
+
54
+ /**
55
+ * This is the equivalent of `incompatibleVersionFields`, but for the
56
+ * `profiles` field.
57
+ */
58
+ const incompatibleProfileFields = {
59
+ type: incompatibleFieldType("This field is incompatible with `profiles`"),
60
+ version: incompatibleFieldType("This field is incompatible with `profiles`"),
61
+ compilers: incompatibleFieldType(
62
+ "This field is incompatible with `profiles`",
63
+ ),
64
+ overrides: incompatibleFieldType(
65
+ "This field is incompatible with `profiles`",
66
+ ),
67
+ };
68
+
69
+ /**
70
+ * This is the equivalent of `incompatibleVersionFields`, but for the
71
+ * `compilers` field.
72
+ */
73
+ const incompatibleCompilerFields = {
74
+ type: incompatibleFieldType("This field is incompatible with `compilers`"),
75
+ version: incompatibleFieldType("This field is incompatible with `compilers`"),
76
+ profiles: incompatibleFieldType(
77
+ "This field is incompatible with `compilers`",
78
+ ),
79
+ };
29
80
 
30
- const sourcePathsType = conditionalUnionType(
31
- [
32
- [(data) => typeof data === "string", z.string()],
33
- [(data) => Array.isArray(data), z.array(z.string()).nonempty()],
34
- ],
35
- "Expected a string or an array of strings",
36
- );
37
-
38
- const commonSolcUserConfigType = z.object({
81
+ const commonSolidityUserConfigFields = {
39
82
  isolated: z.boolean().optional(),
40
- });
83
+ npmFilesToBuild: z.array(z.string()).optional(),
84
+ splitTestsCompilation: z.boolean().optional(),
85
+ };
41
86
 
42
- const solcUserConfigType = z.object({
87
+ const commonSolidityCompilerUserConfigFields = {
88
+ type: z.string().optional(),
43
89
  version: z.string(),
44
90
  settings: z.any().optional(),
45
91
  path: z.string().optional(),
46
- preferWasm: z.boolean().optional(),
47
- compilers: incompatibleFieldType("This field is incompatible with `version`"),
48
- overrides: incompatibleFieldType("This field is incompatible with `version`"),
49
- profiles: incompatibleFieldType("This field is incompatible with `version`"),
50
- });
92
+ };
51
93
 
52
- // NOTE: This is only to match the setup present in ./type-extensions.ts
53
- const singleVersionSolcUserConfigType = solcUserConfigType.extend({
54
- isolated: z.boolean().optional(),
94
+ const solcSolidityCompilerUserConfigType = z.object({
95
+ ...commonSolidityCompilerUserConfigFields,
96
+ type: z.literal("solc").optional(),
55
97
  preferWasm: z.boolean().optional(),
56
98
  });
57
99
 
58
- const multiVersionSolcUserConfigType = commonSolcUserConfigType.extend({
59
- compilers: z.array(solcUserConfigType).nonempty(),
60
- overrides: z.record(z.string(), solcUserConfigType).optional(),
61
- isolated: z.boolean().optional(),
62
- preferWasm: z.boolean().optional(),
63
- version: incompatibleFieldType("This field is incompatible with `compilers`"),
64
- settings: incompatibleFieldType(
65
- "This field is incompatible with `compilers`",
66
- ),
67
- });
100
+ const otherSolidityCompilerUserConfigType = z.object(
101
+ commonSolidityCompilerUserConfigFields,
102
+ );
68
103
 
69
- const commonSolidityUserConfigType = z.object({
70
- npmFilesToBuild: z.array(z.string()).optional(),
71
- });
104
+ // Per-compiler config: preferWasm is only allowed for solc (type undefined or "solc")
105
+ const solidityCompilerUserConfigType = conditionalUnionType(
106
+ [
107
+ [
108
+ (data) =>
109
+ isObject(data) &&
110
+ (!("type" in data) || data.type === undefined || data.type === "solc"),
111
+ solcSolidityCompilerUserConfigType,
112
+ ],
113
+ [
114
+ (data) => isObject(data) && "type" in data && data.type !== "solc",
115
+ otherSolidityCompilerUserConfigType,
116
+ ],
117
+ ],
118
+ "Expected a valid compiler configuration",
119
+ );
72
120
 
73
- const singleVersionSolidityUserConfigType = singleVersionSolcUserConfigType
74
- .merge(commonSolidityUserConfigType)
75
- .extend({
76
- compilers: incompatibleFieldType(
77
- "This field is incompatible with `version`",
78
- ),
79
- overrides: incompatibleFieldType(
80
- "This field is incompatible with `version`",
81
- ),
82
- profiles: incompatibleFieldType(
83
- "This field is incompatible with `version`",
84
- ),
121
+ const solcSingleVersionSolidityUserConfigType =
122
+ solcSolidityCompilerUserConfigType.extend({
123
+ ...commonSolidityUserConfigFields,
124
+ toolVersionsInBuildInfo: z.boolean().optional(),
125
+ ...incompatibleVersionFields,
85
126
  });
86
127
 
87
- const multiVersionSolidityUserConfigType = multiVersionSolcUserConfigType
88
- .merge(commonSolidityUserConfigType)
89
- .extend({
90
- version: incompatibleFieldType(
91
- "This field is incompatible with `compilers`",
92
- ),
93
- profiles: incompatibleFieldType(
94
- "This field is incompatible with `compilers`",
95
- ),
128
+ const otherSingleVersionSolidityUserConfigType =
129
+ otherSolidityCompilerUserConfigType.extend({
130
+ ...commonSolidityUserConfigFields,
131
+ toolVersionsInBuildInfo: z.boolean().optional(),
132
+ ...incompatibleVersionFields,
96
133
  });
97
134
 
98
- const buildProfilesSolidityUserConfigType = commonSolidityUserConfigType.extend(
99
- {
100
- profiles: z.record(
101
- z.string(),
102
- conditionalUnionType(
135
+ const singleVersionSolidityUserConfigType = conditionalUnionType(
136
+ [
137
+ [
138
+ (data) =>
139
+ isObject(data) &&
140
+ (!("type" in data) || data.type === undefined || data.type === "solc"),
141
+ solcSingleVersionSolidityUserConfigType,
142
+ ],
143
+ [
144
+ (data) => isObject(data) && "type" in data && data.type !== "solc",
145
+ otherSingleVersionSolidityUserConfigType,
146
+ ],
147
+ ],
148
+ "Expected a valid single-version Solidity configuration",
149
+ );
150
+
151
+ const multiVersionSolidityUserConfigType = z.object({
152
+ preferWasm: z.boolean().optional(),
153
+ compilers: z.array(solidityCompilerUserConfigType).nonempty(),
154
+ overrides: z.record(z.string(), solidityCompilerUserConfigType).optional(),
155
+ ...commonSolidityUserConfigFields,
156
+ toolVersionsInBuildInfo: z.boolean().optional(),
157
+ ...incompatibleCompilerFields,
158
+ });
159
+
160
+ // This definition needs to be aligned with solidityCompilerUserConfigType.
161
+ // The reason to duplicate it is that we can't `.extend()` a conditional union
162
+ // type.
163
+ const singleVersionBuildProfileUserConfigType = conditionalUnionType(
164
+ [
165
+ [
166
+ (data) =>
167
+ isObject(data) &&
168
+ (!("type" in data) || data.type === undefined || data.type === "solc"),
169
+ solcSolidityCompilerUserConfigType.extend({
170
+ isolated: z.boolean().optional(),
171
+ toolVersionsInBuildInfo: z.boolean().optional(),
172
+ ...incompatibleVersionFields,
173
+ }),
174
+ ],
175
+ [
176
+ (data) => isObject(data) && "type" in data && data.type !== "solc",
177
+ otherSolidityCompilerUserConfigType.extend({
178
+ isolated: z.boolean().optional(),
179
+ toolVersionsInBuildInfo: z.boolean().optional(),
180
+ ...incompatibleVersionFields,
181
+ }),
182
+ ],
183
+ ],
184
+ "Expected a valid compiler configuration",
185
+ );
186
+
187
+ const multiVersionBuildProfileUserConfigType = z.object({
188
+ preferWasm: z.boolean().optional(),
189
+ compilers: z.array(solidityCompilerUserConfigType).nonempty(),
190
+ overrides: z.record(z.string(), solidityCompilerUserConfigType).optional(),
191
+ isolated: z.boolean().optional(),
192
+ toolVersionsInBuildInfo: z.boolean().optional(),
193
+ ...incompatibleCompilerFields,
194
+ });
195
+
196
+ const buildProfilesSolidityUserConfigType = z.object({
197
+ profiles: z.record(
198
+ z.string(),
199
+ conditionalUnionType(
200
+ [
103
201
  [
104
- [
105
- (data) => isObject(data) && "version" in data,
106
- singleVersionSolcUserConfigType,
107
- ],
108
- [
109
- (data) => isObject(data) && "compilers" in data,
110
- multiVersionSolcUserConfigType,
111
- ],
202
+ (data) => isObject(data) && "version" in data,
203
+ singleVersionBuildProfileUserConfigType,
112
204
  ],
113
- "Expected an object configuring one or more versions of Solidity",
114
- ),
115
- ),
116
- version: incompatibleFieldType(
117
- "This field is incompatible with `profiles`",
118
- ),
119
- compilers: incompatibleFieldType(
120
- "This field is incompatible with `profiles`",
121
- ),
122
- overrides: incompatibleFieldType(
123
- "This field is incompatible with `profiles`",
205
+ [
206
+ (data) => isObject(data) && "compilers" in data,
207
+ multiVersionBuildProfileUserConfigType,
208
+ ],
209
+ ],
210
+ "Expected an object configuring one or more versions of Solidity",
124
211
  ),
125
- },
126
- );
212
+ ),
213
+ ...commonSolidityUserConfigFields,
214
+ ...incompatibleProfileFields,
215
+ });
127
216
 
128
217
  const solidityUserConfigType = conditionalUnionType(
129
218
  [
@@ -145,6 +234,14 @@ const solidityUserConfigType = conditionalUnionType(
145
234
  "Expected a version string, an array of version strings, or an object configuring one or more versions of Solidity or multiple build profiles",
146
235
  );
147
236
 
237
+ const sourcePathsType = conditionalUnionType(
238
+ [
239
+ [(data) => typeof data === "string", z.string()],
240
+ [(data) => Array.isArray(data), z.array(z.string()).nonempty()],
241
+ ],
242
+ "Expected a string or an array of strings",
243
+ );
244
+
148
245
  const userConfigType = z.object({
149
246
  paths: z
150
247
  .object({
@@ -184,6 +281,109 @@ export function validateSolidityUserConfig(
184
281
  return result;
185
282
  }
186
283
 
284
+ export function validateSolidityConfig(
285
+ resolvedConfig: HardhatConfig,
286
+ ): HardhatConfigValidationError[] {
287
+ const errors: HardhatConfigValidationError[] = [];
288
+
289
+ errors.push(...validateRegisteredCompilerTypes(resolvedConfig));
290
+ errors.push(...validatePreferWasmRequiresSolc(resolvedConfig));
291
+
292
+ return errors;
293
+ }
294
+
295
+ function validateRegisteredCompilerTypes(
296
+ resolvedConfig: HardhatConfig,
297
+ ): HardhatConfigValidationError[] {
298
+ const errors: HardhatConfigValidationError[] = [];
299
+ const registered = new Set(resolvedConfig.solidity.registeredCompilerTypes);
300
+
301
+ for (const [profileName, profile] of Object.entries(
302
+ resolvedConfig.solidity.profiles,
303
+ )) {
304
+ for (const [i, compiler] of profile.compilers.entries()) {
305
+ const type = compiler.type ?? "solc";
306
+ if (!registered.has(type)) {
307
+ errors.push({
308
+ path: ["solidity", "profiles", profileName, "compilers", i, "type"],
309
+ message: `Unknown compiler type "${type}". Registered types: ${[...registered].join(", ")}`,
310
+ });
311
+ }
312
+ }
313
+ for (const [sourceName, override] of Object.entries(profile.overrides)) {
314
+ const type = override.type ?? "solc";
315
+ if (!registered.has(type)) {
316
+ errors.push({
317
+ path: [
318
+ "solidity",
319
+ "profiles",
320
+ profileName,
321
+ "overrides",
322
+ sourceName,
323
+ "type",
324
+ ],
325
+ message: `Unknown compiler type "${type}". Registered types: ${[...registered].join(", ")}`,
326
+ });
327
+ }
328
+ }
329
+ }
330
+
331
+ return errors;
332
+ }
333
+
334
+ function validatePreferWasmRequiresSolc(
335
+ resolvedConfig: HardhatConfig,
336
+ ): HardhatConfigValidationError[] {
337
+ const errors: HardhatConfigValidationError[] = [];
338
+
339
+ for (const [profileName, profile] of Object.entries(
340
+ resolvedConfig.solidity.profiles,
341
+ )) {
342
+ if (!profile.preferWasm) {
343
+ continue;
344
+ }
345
+
346
+ for (const [i, compiler] of profile.compilers.entries()) {
347
+ const type = compiler.type;
348
+ if (type !== undefined && type !== "solc") {
349
+ /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions
350
+ -- We need to cast because within Hardhat core the type of `type` is
351
+ `never`, as you can only get into this if with a plugin. */
352
+ const compilerType: string = (compiler as any).type;
353
+
354
+ errors.push({
355
+ path: ["solidity", "profiles", profileName, "compilers", i, "type"],
356
+ message: `Compiler type must be "solc" if \`preferWasm\` is \`true\` in the build profile, but found type "${compilerType}"`,
357
+ });
358
+ }
359
+ }
360
+
361
+ for (const [sourceName, override] of Object.entries(profile.overrides)) {
362
+ const type = override.type;
363
+ if (type !== undefined && type !== "solc") {
364
+ /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions
365
+ -- We need to cast because within Hardhat core the type of `type` is
366
+ `never`, as you can only get into this if with a plugin. */
367
+ const overrideType: string = (override as any).type;
368
+
369
+ errors.push({
370
+ path: [
371
+ "solidity",
372
+ "profiles",
373
+ profileName,
374
+ "overrides",
375
+ sourceName,
376
+ "type",
377
+ ],
378
+ message: `Compiler type must be "solc" if \`preferWasm\` is \`true\` in the build profile, but found type "${overrideType}"`,
379
+ });
380
+ }
381
+ }
382
+ }
383
+
384
+ return errors;
385
+ }
386
+
187
387
  export async function resolveSolidityUserConfig(
188
388
  userConfig: HardhatUserConfig,
189
389
  resolvedConfig: HardhatConfig,
@@ -238,6 +438,8 @@ function resolveSolidityConfig(
238
438
  ),
239
439
  },
240
440
  npmFilesToBuild: [],
441
+ registeredCompilerTypes: ["solc"],
442
+ splitTestsCompilation: false,
241
443
  };
242
444
  }
243
445
 
@@ -245,13 +447,20 @@ function resolveSolidityConfig(
245
447
  if ("version" in solidityConfig || "compilers" in solidityConfig) {
246
448
  return {
247
449
  profiles: {
248
- default: resolveBuildProfileConfig(solidityConfig),
450
+ default: resolveBuildProfileConfig(
451
+ solidityConfig,
452
+ false,
453
+ solidityConfig.toolVersionsInBuildInfo,
454
+ ),
249
455
  production: resolveBuildProfileConfig(
250
456
  copyFromDefault(solidityConfig),
251
457
  true,
458
+ solidityConfig.toolVersionsInBuildInfo,
252
459
  ),
253
460
  },
254
461
  npmFilesToBuild: solidityConfig.npmFilesToBuild ?? [],
462
+ registeredCompilerTypes: ["solc"],
463
+ splitTestsCompilation: solidityConfig.splitTestsCompilation ?? false,
255
464
  };
256
465
  }
257
466
 
@@ -264,6 +473,7 @@ function resolveSolidityConfig(
264
473
  profiles[profileName] = resolveBuildProfileConfig(
265
474
  profile,
266
475
  profileName === "production",
476
+ profile.toolVersionsInBuildInfo,
267
477
  );
268
478
  }
269
479
 
@@ -281,6 +491,8 @@ function resolveSolidityConfig(
281
491
  return {
282
492
  profiles,
283
493
  npmFilesToBuild: solidityConfig.npmFilesToBuild ?? [],
494
+ registeredCompilerTypes: ["solc"],
495
+ splitTestsCompilation: solidityConfig.splitTestsCompilation ?? false,
284
496
  };
285
497
  }
286
498
 
@@ -289,85 +501,106 @@ function resolveBuildProfileConfig(
289
501
  | SingleVersionSolidityUserConfig
290
502
  | MultiVersionSolidityUserConfig,
291
503
  production: boolean = false,
504
+ toolVersionsInBuildInfo?: boolean,
292
505
  ): SolidityBuildProfileConfig {
293
506
  if ("version" in solidityConfig) {
294
507
  return {
295
- compilers: [resolveSolcConfig(solidityConfig, production)],
508
+ compilers: [resolveSolidityCompilerConfig(solidityConfig, production)],
296
509
  overrides: {},
297
510
  isolated: solidityConfig.isolated ?? production,
298
511
  preferWasm: solidityConfig.preferWasm ?? false,
512
+ toolVersionsInBuildInfo: toolVersionsInBuildInfo ?? production,
299
513
  };
300
514
  }
301
515
 
302
516
  return {
303
517
  compilers: solidityConfig.compilers.map((compiler) =>
304
- resolveSolcConfig(compiler, production),
518
+ resolveSolidityCompilerConfig(compiler, production),
305
519
  ),
306
520
  overrides: Object.fromEntries(
307
521
  Object.entries(solidityConfig.overrides ?? {}).map(
308
522
  ([userSourceName, override]) => [
309
523
  userSourceName,
310
- resolveSolcConfig(override, production),
524
+ resolveSolidityCompilerConfig(override, production),
311
525
  ],
312
526
  ),
313
527
  ),
314
528
  isolated: solidityConfig.isolated ?? production,
315
529
  preferWasm: solidityConfig.preferWasm ?? false,
530
+ toolVersionsInBuildInfo: toolVersionsInBuildInfo ?? production,
316
531
  };
317
532
  }
318
533
 
319
- function resolveSolcConfig(
320
- solcConfig: SolcUserConfig,
534
+ function resolveSolidityCompilerConfig(
535
+ compilerConfig: SolidityCompilerUserConfig,
321
536
  production: boolean = false,
322
- ): SolcConfig {
323
- const defaultSolcConfigSettings: SolcConfig["settings"] = {
324
- outputSelection: {
325
- "*": {
326
- "": ["ast"],
327
- "*": [
328
- "abi",
329
- "evm.bytecode",
330
- "evm.deployedBytecode",
331
- "evm.methodIdentifiers",
332
- "metadata",
333
- ],
334
- },
335
- },
537
+ ): SolidityCompilerConfig {
538
+ const defaultSettings: SolidityCompilerConfig["settings"] = {
539
+ outputSelection: DEFAULT_OUTPUT_SELECTION,
336
540
  };
337
541
 
338
- if (production) {
339
- defaultSolcConfigSettings.optimizer = {
542
+ if (production && isSolcSolidityCompilerUserConfig(compilerConfig)) {
543
+ defaultSettings.optimizer = {
340
544
  enabled: true,
341
545
  runs: 200,
342
546
  };
343
547
  }
344
548
 
345
- // Resolve per-compiler preferWasm:
346
- // If explicitly set, use that value.
347
- // Otherwise, for ARM64 Linux:
348
- // - Versions below the mirror threshold (< 0.5.0) always use WASM,
349
- // since no native ARM64 build exists anywhere.
350
- // - In production, versions without official ARM64 builds
351
- // also default to WASM.
352
- let resolvedPreferWasm: boolean | undefined = solcConfig.preferWasm;
353
- if (resolvedPreferWasm === undefined && missesSomeOfficialNativeBuilds()) {
354
- const version = solcConfig.version;
355
-
356
- if (!hasOfficialArm64Build(version) && !hasArm64MirrorBuild(version)) {
357
- resolvedPreferWasm = true;
358
- } else if (production && !hasOfficialArm64Build(version)) {
359
- resolvedPreferWasm = true;
549
+ const resolvedSettings = deepMerge(
550
+ defaultSettings,
551
+ compilerConfig.settings ?? {},
552
+ );
553
+
554
+ // Resolve solc-specific preferWasm if this is a SolcSolidityCompilerUserConfig
555
+ if (isSolcSolidityCompilerUserConfig(compilerConfig)) {
556
+ // Resolve per-compiler preferWasm:
557
+ // If explicitly set, use that value.
558
+ // Otherwise, for ARM64 Linux:
559
+ // - Versions below the mirror threshold (< 0.5.0) always use WASM,
560
+ // since no native ARM64 build exists anywhere.
561
+ // - In production, versions without official ARM64 builds
562
+ // also default to WASM.
563
+ let resolvedPreferWasm: boolean | undefined = compilerConfig.preferWasm;
564
+ if (resolvedPreferWasm === undefined && missesSomeOfficialNativeBuilds()) {
565
+ const version = compilerConfig.version;
566
+
567
+ if (!hasOfficialArm64Build(version) && !hasArm64MirrorBuild(version)) {
568
+ resolvedPreferWasm = true;
569
+ } else if (production && !hasOfficialArm64Build(version)) {
570
+ resolvedPreferWasm = true;
571
+ }
360
572
  }
573
+ const solcResolved: SolcSolidityCompilerConfig = {
574
+ type: compilerConfig.type,
575
+ version: compilerConfig.version,
576
+ settings: resolvedSettings,
577
+ path: compilerConfig.path,
578
+ preferWasm: resolvedPreferWasm,
579
+ };
580
+ return solcResolved;
361
581
  }
362
582
 
583
+ const unknownCompilerConfig =
584
+ /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions --
585
+ We need to cast here because compilerConfig has `never` type here, as this
586
+ case is only accessible when there are other types of compilers registered
587
+ through plugins. */
588
+ compilerConfig as unknown as CommonSolidityCompilerUserConfig;
589
+
363
590
  return {
364
- version: solcConfig.version,
365
- settings: deepMerge(defaultSolcConfigSettings, solcConfig.settings ?? {}),
366
- path: solcConfig.path,
367
- preferWasm: resolvedPreferWasm,
591
+ type: unknownCompilerConfig.type,
592
+ version: unknownCompilerConfig.version,
593
+ settings: resolvedSettings,
594
+ path: unknownCompilerConfig.path,
368
595
  };
369
596
  }
370
597
 
598
+ export function isSolcSolidityCompilerUserConfig(
599
+ config: SolidityCompilerUserConfig,
600
+ ): config is SolcSolidityCompilerUserConfig {
601
+ return config.type === undefined || config.type === "solc";
602
+ }
603
+
371
604
  function copyFromDefault(
372
605
  defaultSolidityConfig:
373
606
  | SingleVersionSolidityUserConfig
@@ -376,18 +609,20 @@ function copyFromDefault(
376
609
  if ("version" in defaultSolidityConfig) {
377
610
  return {
378
611
  version: defaultSolidityConfig.version,
612
+ type: defaultSolidityConfig.type,
379
613
  };
380
614
  }
381
615
 
382
616
  return {
383
617
  compilers: defaultSolidityConfig.compilers.map((c) => ({
384
618
  version: c.version,
619
+ type: c.type,
385
620
  })),
386
621
  overrides: Object.fromEntries(
387
622
  Object.entries(defaultSolidityConfig.overrides ?? {}).map(
388
623
  ([userSourceName, override]) => [
389
624
  userSourceName,
390
- { version: override.version },
625
+ { version: override.version, type: override.type },
391
626
  ],
392
627
  ),
393
628
  ),
@@ -0,0 +1,21 @@
1
+ import type { CompilerInput } from "../../../types/solidity.js";
2
+
3
+ export const DEFAULT_OUTPUT_SELECTION: CompilerInput["settings"]["outputSelection"] =
4
+ {
5
+ "*": {
6
+ "": ["ast"],
7
+ "*": [
8
+ "abi",
9
+ "evm.bytecode.linkReferences",
10
+ "evm.bytecode.object",
11
+ "evm.bytecode.opcodes",
12
+ "evm.bytecode.sourceMap",
13
+ "evm.deployedBytecode.immutableReferences",
14
+ "evm.deployedBytecode.linkReferences",
15
+ "evm.deployedBytecode.object",
16
+ "evm.deployedBytecode.opcodes",
17
+ "evm.deployedBytecode.sourceMap",
18
+ "evm.methodIdentifiers",
19
+ ],
20
+ },
21
+ };
@@ -0,0 +1,2 @@
1
+ export { isSolcSolidityCompilerConfig } from "./build-system/build-system.js";
2
+ export { spawnCompile } from "./build-system/compiler/compiler.js";
@@ -2,6 +2,7 @@ import type { ConfigHooks } from "../../../../types/hooks.js";
2
2
 
3
3
  import {
4
4
  resolveSolidityUserConfig,
5
+ validateSolidityConfig,
5
6
  validateSolidityUserConfig,
6
7
  } from "../config.js";
7
8
 
@@ -21,6 +22,8 @@ export default async (): Promise<Partial<ConfigHooks>> => {
21
22
 
22
23
  return resolveSolidityUserConfig(userConfig, resolvedConfig);
23
24
  },
25
+ validateResolvedConfig: async (resolvedConfig) =>
26
+ validateSolidityConfig(resolvedConfig),
24
27
  };
25
28
 
26
29
  return handlers;
@@ -0,0 +1,9 @@
1
+ import type { SolidityHooks } from "../../../../types/hooks.js";
2
+
3
+ import { downloadSolcCompilersHandler } from "../solidity-hooks.js";
4
+
5
+ export default async (): Promise<Partial<SolidityHooks>> => ({
6
+ downloadCompilers: async (_context, compilerConfigs, quiet) => {
7
+ await downloadSolcCompilersHandler(compilerConfigs, quiet);
8
+ },
9
+ });