hardhat 2.13.0-dev.2 → 2.13.0-dev.3

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 (292) hide show
  1. package/builtin-tasks/compile.js +16 -6
  2. package/builtin-tasks/compile.js.map +1 -1
  3. package/builtin-tasks/flatten.js +1 -1
  4. package/builtin-tasks/flatten.js.map +1 -1
  5. package/builtin-tasks/help.js +2 -4
  6. package/builtin-tasks/help.js.map +1 -1
  7. package/builtin-tasks/task-names.d.ts +1 -0
  8. package/builtin-tasks/task-names.d.ts.map +1 -1
  9. package/builtin-tasks/task-names.js +3 -2
  10. package/builtin-tasks/task-names.js.map +1 -1
  11. package/builtin-tasks/test.js +22 -1
  12. package/builtin-tasks/test.js.map +1 -1
  13. package/internal/cli/bootstrap.d.ts +1 -0
  14. package/internal/cli/bootstrap.js +12 -20
  15. package/internal/cli/bootstrap.js.map +1 -1
  16. package/internal/cli/cli.d.ts +0 -1
  17. package/internal/cli/cli.d.ts.map +1 -1
  18. package/internal/cli/cli.js +20 -29
  19. package/internal/cli/cli.js.map +1 -1
  20. package/internal/cli/project-creation.d.ts +1 -2
  21. package/internal/cli/project-creation.d.ts.map +1 -1
  22. package/internal/cli/project-creation.js +105 -36
  23. package/internal/cli/project-creation.js.map +1 -1
  24. package/internal/cli/prompt.d.ts +2 -2
  25. package/internal/cli/prompt.d.ts.map +1 -1
  26. package/internal/cli/prompt.js +1 -2
  27. package/internal/cli/prompt.js.map +1 -1
  28. package/internal/cli/types.d.ts +1 -0
  29. package/internal/cli/types.d.ts.map +1 -1
  30. package/internal/core/config/config-env.d.ts +5 -11
  31. package/internal/core/config/config-env.d.ts.map +1 -1
  32. package/internal/core/config/config-env.js +2 -13
  33. package/internal/core/config/config-env.js.map +1 -1
  34. package/internal/core/config/config-loading.d.ts +2 -1
  35. package/internal/core/config/config-loading.d.ts.map +1 -1
  36. package/internal/core/config/config-loading.js +25 -7
  37. package/internal/core/config/config-loading.js.map +1 -1
  38. package/internal/core/config/config-validation.d.ts +2 -0
  39. package/internal/core/config/config-validation.d.ts.map +1 -1
  40. package/internal/core/config/config-validation.js +18 -1
  41. package/internal/core/config/config-validation.js.map +1 -1
  42. package/internal/core/config/extenders.d.ts +4 -7
  43. package/internal/core/config/extenders.d.ts.map +1 -1
  44. package/internal/core/config/extenders.js +5 -12
  45. package/internal/core/config/extenders.js.map +1 -1
  46. package/internal/core/errors-list.d.ts +28 -7
  47. package/internal/core/errors-list.d.ts.map +1 -1
  48. package/internal/core/errors-list.js +33 -10
  49. package/internal/core/errors-list.js.map +1 -1
  50. package/internal/core/jsonrpc/types/input/blockTag.d.ts +3 -3
  51. package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -1
  52. package/internal/core/project-structure.d.ts.map +1 -1
  53. package/internal/core/project-structure.js +6 -0
  54. package/internal/core/project-structure.js.map +1 -1
  55. package/internal/core/providers/construction.d.ts.map +1 -1
  56. package/internal/core/providers/construction.js +25 -5
  57. package/internal/core/providers/construction.js.map +1 -1
  58. package/internal/core/providers/http.d.ts +2 -2
  59. package/internal/core/providers/http.d.ts.map +1 -1
  60. package/internal/core/providers/http.js +41 -19
  61. package/internal/core/providers/http.js.map +1 -1
  62. package/internal/core/runtime-environment.d.ts +4 -2
  63. package/internal/core/runtime-environment.d.ts.map +1 -1
  64. package/internal/core/runtime-environment.js +39 -47
  65. package/internal/core/runtime-environment.js.map +1 -1
  66. package/internal/core/tasks/dsl.d.ts +6 -6
  67. package/internal/core/tasks/dsl.d.ts.map +1 -1
  68. package/internal/core/tasks/dsl.js.map +1 -1
  69. package/internal/core/tasks/task-definitions.d.ts +2 -2
  70. package/internal/core/tasks/task-definitions.d.ts.map +1 -1
  71. package/internal/core/tasks/task-definitions.js.map +1 -1
  72. package/internal/hardhat-network/jsonrpc/handler.d.ts +1 -0
  73. package/internal/hardhat-network/jsonrpc/handler.d.ts.map +1 -1
  74. package/internal/hardhat-network/jsonrpc/handler.js +13 -18
  75. package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
  76. package/internal/hardhat-network/provider/RethnetState.d.ts +26 -0
  77. package/internal/hardhat-network/provider/RethnetState.d.ts.map +1 -0
  78. package/internal/hardhat-network/provider/RethnetState.js +84 -0
  79. package/internal/hardhat-network/provider/RethnetState.js.map +1 -0
  80. package/internal/hardhat-network/provider/modules/evm.d.ts +2 -1
  81. package/internal/hardhat-network/provider/modules/evm.d.ts.map +1 -1
  82. package/internal/hardhat-network/provider/modules/evm.js +10 -4
  83. package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
  84. package/internal/hardhat-network/provider/node-types.d.ts +1 -1
  85. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
  86. package/internal/hardhat-network/provider/node.d.ts +1 -0
  87. package/internal/hardhat-network/provider/node.d.ts.map +1 -1
  88. package/internal/hardhat-network/provider/node.js +6 -4
  89. package/internal/hardhat-network/provider/node.js.map +1 -1
  90. package/internal/hardhat-network/provider/provider.d.ts +25 -21
  91. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  92. package/internal/hardhat-network/provider/provider.js +25 -42
  93. package/internal/hardhat-network/provider/provider.js.map +1 -1
  94. package/internal/hardhat-network/provider/return-data.js +2 -2
  95. package/internal/hardhat-network/provider/return-data.js.map +1 -1
  96. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
  97. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +4 -2
  98. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
  99. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
  100. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +4 -2
  101. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
  102. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
  103. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +4 -2
  104. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
  105. package/internal/hardhat-network/provider/utils/bloom.d.ts +32 -0
  106. package/internal/hardhat-network/provider/utils/bloom.d.ts.map +1 -0
  107. package/internal/hardhat-network/provider/utils/bloom.js +79 -0
  108. package/internal/hardhat-network/provider/utils/bloom.js.map +1 -0
  109. package/internal/hardhat-network/provider/utils/convertToRethnet.d.ts +12 -0
  110. package/internal/hardhat-network/provider/utils/convertToRethnet.d.ts.map +1 -0
  111. package/internal/hardhat-network/provider/utils/convertToRethnet.js +162 -0
  112. package/internal/hardhat-network/provider/utils/convertToRethnet.js.map +1 -0
  113. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts +7 -0
  114. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts.map +1 -0
  115. package/internal/hardhat-network/provider/utils/makeFakeSignature.js +31 -0
  116. package/internal/hardhat-network/provider/utils/makeFakeSignature.js.map +1 -0
  117. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +1 -1
  118. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
  119. package/internal/hardhat-network/provider/utils/putGenesisBlock.js +2 -2
  120. package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
  121. package/internal/hardhat-network/provider/vm/block-builder.d.ts +31 -0
  122. package/internal/hardhat-network/provider/vm/block-builder.d.ts.map +1 -0
  123. package/internal/hardhat-network/provider/vm/block-builder.js +151 -0
  124. package/internal/hardhat-network/provider/vm/block-builder.js.map +1 -0
  125. package/internal/hardhat-network/provider/vm/creation.d.ts +10 -0
  126. package/internal/hardhat-network/provider/vm/creation.d.ts.map +1 -0
  127. package/internal/hardhat-network/provider/vm/creation.js +29 -0
  128. package/internal/hardhat-network/provider/vm/creation.js.map +1 -0
  129. package/internal/hardhat-network/provider/vm/dual.d.ts +43 -0
  130. package/internal/hardhat-network/provider/vm/dual.d.ts.map +1 -0
  131. package/internal/hardhat-network/provider/vm/dual.js +488 -0
  132. package/internal/hardhat-network/provider/vm/dual.js.map +1 -0
  133. package/internal/hardhat-network/provider/vm/ethereumjs.d.ts +56 -0
  134. package/internal/hardhat-network/provider/vm/ethereumjs.d.ts.map +1 -0
  135. package/internal/hardhat-network/provider/vm/ethereumjs.js +416 -0
  136. package/internal/hardhat-network/provider/vm/ethereumjs.js.map +1 -0
  137. package/internal/hardhat-network/provider/vm/exit.d.ts +23 -0
  138. package/internal/hardhat-network/provider/vm/exit.d.ts.map +1 -0
  139. package/internal/hardhat-network/provider/vm/exit.js +130 -0
  140. package/internal/hardhat-network/provider/vm/exit.js.map +1 -0
  141. package/internal/hardhat-network/provider/vm/rethnet.d.ts +99 -0
  142. package/internal/hardhat-network/provider/vm/rethnet.d.ts.map +1 -0
  143. package/internal/hardhat-network/provider/vm/rethnet.js +284 -0
  144. package/internal/hardhat-network/provider/vm/rethnet.js.map +1 -0
  145. package/internal/hardhat-network/provider/vm/vm-adapter.d.ts +52 -0
  146. package/internal/hardhat-network/provider/vm/vm-adapter.d.ts.map +1 -0
  147. package/internal/hardhat-network/provider/vm/vm-adapter.js +3 -0
  148. package/internal/hardhat-network/provider/vm/vm-adapter.js.map +1 -0
  149. package/internal/hardhat-network/stack-traces/compiler-to-model.d.ts.map +1 -1
  150. package/internal/hardhat-network/stack-traces/compiler-to-model.js +37 -11
  151. package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
  152. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  153. package/internal/hardhat-network/stack-traces/constants.d.ts +1 -1
  154. package/internal/hardhat-network/stack-traces/constants.js +1 -1
  155. package/internal/hardhat-network/stack-traces/debug.d.ts.map +1 -1
  156. package/internal/hardhat-network/stack-traces/debug.js +6 -2
  157. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  158. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts +1 -0
  159. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +1 -1
  160. package/internal/hardhat-network/stack-traces/error-inferrer.js +85 -55
  161. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
  162. package/internal/hardhat-network/stack-traces/model.d.ts +3 -1
  163. package/internal/hardhat-network/stack-traces/model.d.ts.map +1 -1
  164. package/internal/hardhat-network/stack-traces/model.js +9 -1
  165. package/internal/hardhat-network/stack-traces/model.js.map +1 -1
  166. package/internal/hardhat-network/stack-traces/solidity-errors.js +2 -2
  167. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  168. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +2 -2
  169. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -1
  170. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
  171. package/internal/hardhat-network/stack-traces/solidityTracer.js +1 -0
  172. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  173. package/internal/lib/hardhat-lib.d.ts.map +1 -1
  174. package/internal/lib/hardhat-lib.js +1 -4
  175. package/internal/lib/hardhat-lib.js.map +1 -1
  176. package/internal/solidity/compiler/downloader.js +2 -2
  177. package/internal/solidity/compiler/downloader.js.map +1 -1
  178. package/internal/solidity/compiler/index.js +1 -1
  179. package/internal/solidity/compiler/index.js.map +1 -1
  180. package/internal/solidity/resolver.d.ts +4 -3
  181. package/internal/solidity/resolver.d.ts.map +1 -1
  182. package/internal/solidity/resolver.js +18 -7
  183. package/internal/solidity/resolver.js.map +1 -1
  184. package/internal/util/abi-helpers.d.ts +1 -0
  185. package/internal/util/abi-helpers.d.ts.map +1 -1
  186. package/internal/util/abi-helpers.js +9 -0
  187. package/internal/util/abi-helpers.js.map +1 -1
  188. package/internal/util/download.d.ts.map +1 -1
  189. package/internal/util/download.js +12 -11
  190. package/internal/util/download.js.map +1 -1
  191. package/internal/util/packageInfo.d.ts +6 -1
  192. package/internal/util/packageInfo.d.ts.map +1 -1
  193. package/internal/util/packageInfo.js +14 -11
  194. package/internal/util/packageInfo.js.map +1 -1
  195. package/internal/util/proxy.d.ts +2 -0
  196. package/internal/util/proxy.d.ts.map +1 -0
  197. package/internal/util/proxy.js +19 -0
  198. package/internal/util/proxy.js.map +1 -0
  199. package/package.json +9 -10
  200. package/register.js +1 -4
  201. package/register.js.map +1 -1
  202. package/sample-projects/javascript/hardhat.config.js +1 -1
  203. package/sample-projects/javascript/scripts/deploy.js +2 -2
  204. package/sample-projects/javascript-esm/LICENSE.md +11 -0
  205. package/sample-projects/javascript-esm/README.md +13 -0
  206. package/sample-projects/javascript-esm/contracts/Lock.sol +34 -0
  207. package/sample-projects/javascript-esm/hardhat.config.cjs +6 -0
  208. package/sample-projects/javascript-esm/scripts/deploy.js +22 -0
  209. package/sample-projects/javascript-esm/test/Lock.js +123 -0
  210. package/sample-projects/typescript/hardhat.config.ts +1 -1
  211. package/sample-projects/typescript/scripts/deploy.ts +2 -2
  212. package/sample-projects/typescript/tsconfig.json +2 -1
  213. package/src/builtin-tasks/compile.ts +28 -7
  214. package/src/builtin-tasks/flatten.ts +4 -1
  215. package/src/builtin-tasks/help.ts +15 -16
  216. package/src/builtin-tasks/task-names.ts +2 -0
  217. package/src/builtin-tasks/test.ts +30 -2
  218. package/src/internal/artifacts.ts +947 -0
  219. package/src/internal/cli/bootstrap.ts +14 -36
  220. package/src/internal/cli/cli.ts +38 -43
  221. package/src/internal/cli/project-creation.ts +128 -47
  222. package/src/internal/cli/prompt.ts +2 -4
  223. package/src/internal/cli/types.ts +2 -0
  224. package/src/internal/core/config/config-env.ts +15 -27
  225. package/src/internal/core/config/config-loading.ts +35 -11
  226. package/src/internal/core/config/config-validation.ts +20 -0
  227. package/src/internal/core/config/extenders.ts +6 -15
  228. package/src/internal/core/errors-list.ts +36 -10
  229. package/src/internal/core/project-structure.ts +8 -0
  230. package/src/internal/core/providers/construction.ts +29 -24
  231. package/src/internal/core/providers/http.ts +38 -26
  232. package/src/internal/core/runtime-environment.ts +65 -60
  233. package/src/internal/core/tasks/dsl.ts +17 -17
  234. package/src/internal/core/tasks/task-definitions.ts +6 -2
  235. package/src/internal/hardhat-network/jsonrpc/handler.ts +31 -28
  236. package/src/internal/hardhat-network/provider/modules/evm.ts +15 -3
  237. package/src/internal/hardhat-network/provider/node-types.ts +1 -1
  238. package/src/internal/hardhat-network/provider/node.ts +5 -1
  239. package/src/internal/hardhat-network/provider/provider.ts +60 -49
  240. package/src/internal/hardhat-network/provider/return-data.ts +2 -2
  241. package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +5 -2
  242. package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +5 -2
  243. package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +5 -2
  244. package/src/internal/hardhat-network/provider/utils/makeFakeSignature.ts +46 -0
  245. package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +2 -2
  246. package/src/internal/hardhat-network/stack-traces/compiler-to-model.ts +71 -9
  247. package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +1 -1
  248. package/src/internal/hardhat-network/stack-traces/constants.ts +1 -1
  249. package/src/internal/hardhat-network/stack-traces/debug.ts +9 -2
  250. package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +177 -89
  251. package/src/internal/hardhat-network/stack-traces/model.ts +11 -1
  252. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +2 -2
  253. package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +2 -2
  254. package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +3 -0
  255. package/src/internal/lib/hardhat-lib.ts +1 -6
  256. package/src/internal/solidity/compiler/downloader.ts +2 -2
  257. package/src/internal/solidity/compiler/index.ts +1 -1
  258. package/src/internal/solidity/resolver.ts +28 -11
  259. package/src/internal/util/abi-helpers.ts +9 -0
  260. package/src/internal/util/download.ts +13 -15
  261. package/src/internal/util/packageInfo.ts +24 -10
  262. package/src/internal/util/proxy.ts +18 -0
  263. package/src/register.ts +1 -6
  264. package/src/types/artifacts.ts +14 -112
  265. package/src/types/config.ts +2 -0
  266. package/src/types/runtime.ts +16 -13
  267. package/types/artifacts.d.ts +10 -96
  268. package/types/artifacts.d.ts.map +1 -1
  269. package/types/config.d.ts +2 -0
  270. package/types/config.d.ts.map +1 -1
  271. package/types/runtime.d.ts +9 -10
  272. package/types/runtime.d.ts.map +1 -1
  273. package/internal/artifacts/caching.d.ts +0 -28
  274. package/internal/artifacts/caching.d.ts.map +0 -1
  275. package/internal/artifacts/caching.js +0 -178
  276. package/internal/artifacts/caching.js.map +0 -1
  277. package/internal/artifacts/index.d.ts +0 -45
  278. package/internal/artifacts/index.d.ts.map +0 -1
  279. package/internal/artifacts/index.js +0 -191
  280. package/internal/artifacts/index.js.map +0 -1
  281. package/internal/artifacts/mutable.d.ts +0 -29
  282. package/internal/artifacts/mutable.d.ts.map +0 -1
  283. package/internal/artifacts/mutable.js +0 -226
  284. package/internal/artifacts/mutable.js.map +0 -1
  285. package/internal/artifacts/readonly.d.ts +0 -94
  286. package/internal/artifacts/readonly.d.ts.map +0 -1
  287. package/internal/artifacts/readonly.js +0 -343
  288. package/internal/artifacts/readonly.js.map +0 -1
  289. package/src/internal/artifacts/caching.ts +0 -259
  290. package/src/internal/artifacts/index.ts +0 -302
  291. package/src/internal/artifacts/mutable.ts +0 -330
  292. package/src/internal/artifacts/readonly.ts +0 -470
@@ -10,6 +10,7 @@ import {
10
10
  HardhatArguments,
11
11
  HardhatConfig,
12
12
  HardhatUserConfig,
13
+ SolcConfig,
13
14
  } from "../../../types";
14
15
  import { HardhatContext } from "../../context";
15
16
  import { findClosestPackageJson } from "../../util/packageInfo";
@@ -19,14 +20,27 @@ import { getUserConfigPath } from "../project-structure";
19
20
 
20
21
  import { SUPPORTED_SOLIDITY_VERSION_RANGE } from "../../hardhat-network/stack-traces/constants";
21
22
  import { resolveConfig } from "./config-resolution";
22
- import { validateConfig } from "./config-validation";
23
+ import { validateConfig, validateResolvedConfig } from "./config-validation";
23
24
  import { DEFAULT_SOLC_VERSION } from "./default-config";
24
25
 
25
26
  const log = debug("hardhat:core:config");
26
27
 
27
28
  function importCsjOrEsModule(filePath: string): any {
28
- const imported = require(filePath);
29
- return imported.default !== undefined ? imported.default : imported;
29
+ try {
30
+ const imported = require(filePath);
31
+ return imported.default !== undefined ? imported.default : imported;
32
+ } catch (e: any) {
33
+ if (e.code === "ERR_REQUIRE_ESM") {
34
+ throw new HardhatError(
35
+ ERRORS.GENERAL.ESM_PROJECT_WITHOUT_CJS_CONFIG,
36
+ {},
37
+ e
38
+ );
39
+ }
40
+
41
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
42
+ throw e;
43
+ }
30
44
  }
31
45
 
32
46
  export function resolveConfigPath(configPath: string | undefined) {
@@ -108,6 +122,8 @@ export function loadConfigAndTasks(
108
122
  extender(resolved, frozenUserConfig);
109
123
  }
110
124
 
125
+ validateResolvedConfig(resolved);
126
+
111
127
  if (showSolidityConfigWarnings) {
112
128
  checkUnsupportedSolidityConfig(resolved);
113
129
  checkUnsupportedRemappings(resolved);
@@ -165,6 +181,8 @@ export function analyzeModuleNotFoundError(error: any, configPath: string) {
165
181
  const throwingFile = stackTrace
166
182
  .filter((x) => x.file !== null)
167
183
  .map((x) => x.file!)
184
+ // ignore frames related to source map support
185
+ .filter((x) => !x.includes(path.join("@cspotcode", "source-map-support")))
168
186
  .find((x) => path.isAbsolute(x));
169
187
 
170
188
  if (throwingFile === null || throwingFile === undefined) {
@@ -269,17 +287,15 @@ Learn more about compiler configuration at https://hardhat.org/config
269
287
  }
270
288
 
271
289
  function checkUnsupportedSolidityConfig(resolvedConfig: HardhatConfig) {
272
- const compilerVersions = resolvedConfig.solidity.compilers.map(
273
- (x) => x.version
274
- );
275
- const overrideVersions = Object.values(resolvedConfig.solidity.overrides).map(
276
- (x) => x.version
277
- );
278
- const solcVersions = [...compilerVersions, ...overrideVersions];
290
+ const configuredCompilers = getConfiguredCompilers(resolvedConfig.solidity);
291
+ const solcVersions = configuredCompilers.map((x) => x.version);
279
292
 
280
293
  const unsupportedVersions: string[] = [];
281
294
  for (const solcVersion of solcVersions) {
282
- if (!semver.satisfies(solcVersion, SUPPORTED_SOLIDITY_VERSION_RANGE)) {
295
+ if (
296
+ !semver.satisfies(solcVersion, SUPPORTED_SOLIDITY_VERSION_RANGE) &&
297
+ !unsupportedVersions.includes(solcVersion)
298
+ ) {
283
299
  unsupportedVersions.push(solcVersion);
284
300
  }
285
301
  }
@@ -318,3 +334,11 @@ Learn more about compiler configuration at https://hardhat.org/config
318
334
  );
319
335
  }
320
336
  }
337
+
338
+ export function getConfiguredCompilers(
339
+ solidityConfig: HardhatConfig["solidity"]
340
+ ): SolcConfig[] {
341
+ const compilerVersions = solidityConfig.compilers;
342
+ const overrideVersions = Object.values(solidityConfig.overrides);
343
+ return [...compilerVersions, ...overrideVersions];
344
+ }
@@ -1,3 +1,5 @@
1
+ import type { HardhatConfig as HardhatConfigT } from "../../../types";
2
+
1
3
  import * as t from "io-ts";
2
4
  import { Context, getFunctionName, ValidationError } from "io-ts/lib";
3
5
  import { Reporter } from "io-ts/lib/Reporter";
@@ -573,3 +575,21 @@ export function getValidationErrors(config: any): string[] {
573
575
  const ioTsErrors = DotPathReporter.report(result);
574
576
  return [...errors, ...ioTsErrors];
575
577
  }
578
+
579
+ export function validateResolvedConfig(resolvedConfig: HardhatConfigT) {
580
+ const solcConfigs = [
581
+ ...resolvedConfig.solidity.compilers,
582
+ ...Object.values(resolvedConfig.solidity.overrides),
583
+ ];
584
+ const runs = solcConfigs
585
+ .filter(({ settings }) => settings?.optimizer?.runs !== undefined)
586
+ .map(({ settings }) => settings?.optimizer?.runs);
587
+
588
+ for (const run of runs) {
589
+ if (run >= 2 ** 32) {
590
+ throw new HardhatError(ERRORS.GENERAL.INVALID_CONFIG, {
591
+ errors: "The number of optimizer runs exceeds the maximum of 2**32 - 1",
592
+ });
593
+ }
594
+ }
595
+ }
@@ -1,22 +1,13 @@
1
- import { ArtifactsExtender, EnvironmentExtender } from "../../../types";
1
+ import { EnvironmentExtender } from "../../../types";
2
2
 
3
3
  export class ExtenderManager {
4
- private readonly _environmentExtenders: EnvironmentExtender[] = [];
5
- private readonly _artifactsExtenders: ArtifactsExtender[] = [];
4
+ private readonly _extenders: EnvironmentExtender[] = [];
6
5
 
7
- public addEnvironmentExtender(environmentExtender: EnvironmentExtender) {
8
- this._environmentExtenders.push(environmentExtender);
6
+ public add(extender: EnvironmentExtender) {
7
+ this._extenders.push(extender);
9
8
  }
10
9
 
11
- public addArtifactsExtender(artifactsExtender: ArtifactsExtender) {
12
- this._artifactsExtenders.push(artifactsExtender);
13
- }
14
-
15
- public getEnvironmentExtenders(): EnvironmentExtender[] {
16
- return this._environmentExtenders;
17
- }
18
-
19
- public getArtifactsExtenders(): ArtifactsExtender[] {
20
- return this._artifactsExtenders;
10
+ public getExtenders(): EnvironmentExtender[] {
11
+ return this._extenders;
21
12
  }
22
13
  }
@@ -252,6 +252,23 @@ To avoid it, please delete both your node_modules and package-lock.json, and rei
252
252
  Note that you don't need to do this every time you install a new dependency, but please make sure to delete your node_modules every time you delete your package-lock.json.`,
253
253
  shouldBeReported: false,
254
254
  },
255
+ ESM_PROJECT_WITHOUT_CJS_CONFIG: {
256
+ number: 19,
257
+ message: `Your project is an ESM project (you have "type": "module" set in your package.json) but your Hardhat config file uses the .js extension.
258
+
259
+ Rename the file to use the .cjs to fix this problem.`,
260
+ title: "Hardhat config with .js extension in an ESM project",
261
+ description:
262
+ "Your project is an ESM project but your Hardhat config uses the .js extension. Hardhat config files cannot be an ES module. To fix this, rename your Hardhat config to use the .cjs extension.",
263
+ shouldBeReported: false,
264
+ },
265
+ ESM_TYPESCRIPT_PROJECT_CREATION: {
266
+ number: 20,
267
+ message: `Your project is an ESM project (you have "type": "module" set in your package.json) and you are trying to initialize a TypeScript project. This is not supported yet.`,
268
+ title: "Initializing a TypeScript sample project in an ESM project",
269
+ description: `Your project is an ESM project (you have "type": "module" set in your package.json) and you are trying to initialize a TypeScript project. This is not supported yet.`,
270
+ shouldBeReported: false,
271
+ },
255
272
  },
256
273
  NETWORK: {
257
274
  CONFIG_NOT_FOUND: {
@@ -819,6 +836,16 @@ Try installing the library using npm.`,
819
836
  Use a relative import instead of referencing the package's name.`,
820
837
  shouldBeReported: false,
821
838
  },
839
+ IMPORTED_MAPPED_FILE_NOT_FOUND: {
840
+ number: 413,
841
+ message:
842
+ "File %importName% => %imported%, imported from %from%, not found.",
843
+ title: "Imported mapped file not found",
844
+ description: `One of your source files imported a nonexistent or not installed file.
845
+
846
+ Please double check your imports and installed libraries.`,
847
+ shouldBeReported: false,
848
+ },
822
849
  },
823
850
  SOLC: {
824
851
  INVALID_VERSION: {
@@ -933,7 +960,7 @@ We recommend not using this kind of dependency.`,
933
960
  number: 604,
934
961
  message: "Error running JSON-RPC server: %error%",
935
962
  title: "Error running JSON-RPC server",
936
- description: `There was error while starting the JSON-RPC HTTP server.`,
963
+ description: `There was an error while starting the JSON-RPC HTTP server.`,
937
964
  shouldBeReported: false,
938
965
  },
939
966
  JSONRPC_UNSUPPORTED_NETWORK: {
@@ -973,6 +1000,14 @@ The first supported version is %firstSupportedVersion%`,
973
1000
  Please use a newer, supported version.`,
974
1001
  shouldBeReported: true,
975
1002
  },
1003
+ TEST_TASK_ESM_TESTS_RUN_TWICE: {
1004
+ number: 609,
1005
+ message: `Your project uses ESM and you've programmatically run your tests twice. This is not supported yet.`,
1006
+ title: "Running tests twice in an ESM project",
1007
+ description:
1008
+ 'You have run your tests twice programmatically and your project is an ESM project (you have `"type": "module"` in your `package.json`, or some of your files have the `.mjs` extension). This is not supported by Mocha yet.',
1009
+ shouldBeReported: true,
1010
+ },
976
1011
  },
977
1012
  ARTIFACTS: {
978
1013
  NOT_FOUND: {
@@ -1068,15 +1103,6 @@ Please [report it](https://github.com/nomiclabs/hardhat/issues/new) to help us i
1068
1103
  title: "Inferred artifact path doesn't exist",
1069
1104
  description: `The inferred artifact path doesn't exist.
1070
1105
 
1071
- Please [report it](https://github.com/nomiclabs/hardhat/issues/new) to help us improve Hardhat.`,
1072
- shouldBeReported: true,
1073
- },
1074
- NO_SUPPORTED_ARTIFACT_SOURCE: {
1075
- number: 904,
1076
- message: "No configured artifact source can handle method %method%",
1077
- title: "No configured artifact source can handle the request",
1078
- description: `No configured artifact source can handle the requested method.
1079
-
1080
1106
  Please [report it](https://github.com/nomiclabs/hardhat/issues/new) to help us improve Hardhat.`,
1081
1107
  shouldBeReported: true,
1082
1108
  },
@@ -6,12 +6,15 @@ import { getPackageRoot } from "../util/packageInfo";
6
6
 
7
7
  import { HardhatError } from "./errors";
8
8
  import { ERRORS } from "./errors-list";
9
+
9
10
  const JS_CONFIG_FILENAME = "hardhat.config.js";
11
+ const CJS_CONFIG_FILENAME = "hardhat.config.cjs";
10
12
  const TS_CONFIG_FILENAME = "hardhat.config.ts";
11
13
 
12
14
  export function isCwdInsideProject() {
13
15
  return (
14
16
  findUp.sync(TS_CONFIG_FILENAME) !== null ||
17
+ findUp.sync(CJS_CONFIG_FILENAME) !== null ||
15
18
  findUp.sync(JS_CONFIG_FILENAME) !== null
16
19
  );
17
20
  }
@@ -22,6 +25,11 @@ export function getUserConfigPath() {
22
25
  return tsConfigPath;
23
26
  }
24
27
 
28
+ const cjsConfigPath = findUp.sync(CJS_CONFIG_FILENAME);
29
+ if (cjsConfigPath !== null) {
30
+ return cjsConfigPath;
31
+ }
32
+
25
33
  const pathToConfigFile = findUp.sync(JS_CONFIG_FILENAME);
26
34
  if (pathToConfigFile === null) {
27
35
  throw new HardhatError(ERRORS.GENERAL.NOT_INSIDE_PROJECT);
@@ -86,31 +86,36 @@ export function createProvider(
86
86
  require("../../hardhat-network/provider/utils/disk-cache") as typeof DiskCacheT;
87
87
 
88
88
  eip1193Provider = new HardhatNetworkProvider(
89
- hardhatNetConfig.hardfork,
90
- HARDHAT_NETWORK_NAME,
91
- hardhatNetConfig.chainId,
92
- hardhatNetConfig.chainId,
93
- hardhatNetConfig.blockGasLimit,
94
- hardhatNetConfig.initialBaseFeePerGas,
95
- hardhatNetConfig.minGasPrice,
96
- hardhatNetConfig.throwOnTransactionFailures,
97
- hardhatNetConfig.throwOnCallFailures,
98
- hardhatNetConfig.mining.auto,
99
- hardhatNetConfig.mining.interval,
100
- // This cast is valid because of the config validation and resolution
101
- hardhatNetConfig.mining.mempool.order as MempoolOrder,
102
- hardhatNetConfig.chains,
89
+ {
90
+ chainId: hardhatNetConfig.chainId,
91
+ networkId: hardhatNetConfig.chainId,
92
+ hardfork: hardhatNetConfig.hardfork,
93
+ blockGasLimit: hardhatNetConfig.blockGasLimit,
94
+ initialBaseFeePerGas: hardhatNetConfig.initialBaseFeePerGas,
95
+ minGasPrice: hardhatNetConfig.minGasPrice,
96
+ throwOnTransactionFailures: hardhatNetConfig.throwOnTransactionFailures,
97
+ throwOnCallFailures: hardhatNetConfig.throwOnCallFailures,
98
+ automine: hardhatNetConfig.mining.auto,
99
+ intervalMining: hardhatNetConfig.mining.interval,
100
+ // This cast is valid because of the config validation and resolution
101
+ mempoolOrder: hardhatNetConfig.mining.mempool.order as MempoolOrder,
102
+ chains: hardhatNetConfig.chains,
103
+ coinbase: hardhatNetConfig.coinbase,
104
+ genesisAccounts: accounts,
105
+ allowUnlimitedContractSize: hardhatNetConfig.allowUnlimitedContractSize,
106
+ allowBlocksWithSameTimestamp:
107
+ hardhatNetConfig.allowBlocksWithSameTimestamp ?? false,
108
+ initialDate:
109
+ hardhatNetConfig.initialDate !== undefined
110
+ ? parseDateString(hardhatNetConfig.initialDate)
111
+ : undefined,
112
+ experimentalHardhatNetworkMessageTraceHooks,
113
+ forkConfig,
114
+ forkCachePath:
115
+ paths !== undefined ? getForkCacheDirPath(paths) : undefined,
116
+ },
103
117
  new ModulesLogger(hardhatNetConfig.loggingEnabled),
104
- accounts,
105
- artifacts,
106
- hardhatNetConfig.allowUnlimitedContractSize,
107
- hardhatNetConfig.initialDate !== undefined
108
- ? parseDateString(hardhatNetConfig.initialDate)
109
- : undefined,
110
- experimentalHardhatNetworkMessageTraceHooks,
111
- forkConfig,
112
- paths !== undefined ? getForkCacheDirPath(paths) : undefined,
113
- hardhatNetConfig.coinbase
118
+ artifacts
114
119
  );
115
120
  } else {
116
121
  const HttpProvider = importProvider<
@@ -1,4 +1,4 @@
1
- import type { Dispatcher, Pool as PoolT } from "undici";
1
+ import type * as Undici from "undici";
2
2
 
3
3
  import { EventEmitter } from "events";
4
4
 
@@ -17,6 +17,7 @@ import {
17
17
  import { getHardhatVersion } from "../../util/packageInfo";
18
18
  import { HardhatError } from "../errors";
19
19
  import { ERRORS } from "../errors-list";
20
+ import { shouldUseProxy } from "../../util/proxy";
20
21
 
21
22
  import { ProviderError } from "./errors";
22
23
 
@@ -33,7 +34,7 @@ const hardhatVersion = getHardhatVersion();
33
34
 
34
35
  export class HttpProvider extends EventEmitter implements EIP1193Provider {
35
36
  private _nextRequestId = 1;
36
- private _dispatcher: Dispatcher;
37
+ private _dispatcher: Undici.Dispatcher;
37
38
  private _path: string;
38
39
  private _authHeader: string | undefined;
39
40
 
@@ -42,11 +43,11 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider {
42
43
  private readonly _networkName: string,
43
44
  private readonly _extraHeaders: { [name: string]: string } = {},
44
45
  private readonly _timeout = 20000,
45
- client: Dispatcher | undefined = undefined
46
+ client: Undici.Dispatcher | undefined = undefined
46
47
  ) {
47
48
  super();
48
49
 
49
- const { Pool } = require("undici") as { Pool: typeof PoolT };
50
+ const { Pool, ProxyAgent } = require("undici") as typeof Undici;
50
51
 
51
52
  const url = new URL(this._url);
52
53
  this._path = url.pathname;
@@ -59,6 +60,10 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider {
59
60
  ).toString("base64")}`;
60
61
  try {
61
62
  this._dispatcher = client ?? new Pool(url.origin);
63
+
64
+ if (process.env.http_proxy !== undefined && shouldUseProxy(url.origin)) {
65
+ this._dispatcher = new ProxyAgent(process.env.http_proxy);
66
+ }
62
67
  } catch (e) {
63
68
  if (e instanceof TypeError && e.message === "Invalid URL") {
64
69
  e.message += ` ${url.origin}`;
@@ -73,10 +78,6 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider {
73
78
  }
74
79
 
75
80
  public async request(args: RequestArguments): Promise<unknown> {
76
- // We create the error here to capture the stack traces at this point,
77
- // the async call that follows would probably loose of the stack trace
78
- const error = new ProviderError("HttpProviderError", -1);
79
-
80
81
  const jsonRpcRequest = this._getJsonRpcRequest(
81
82
  args.method,
82
83
  args.params as any[]
@@ -84,8 +85,10 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider {
84
85
  const jsonRpcResponse = await this._fetchJsonRpcResponse(jsonRpcRequest);
85
86
 
86
87
  if (isErrorResponse(jsonRpcResponse)) {
87
- error.message = jsonRpcResponse.error.message;
88
- error.code = jsonRpcResponse.error.code;
88
+ const error = new ProviderError(
89
+ jsonRpcResponse.error.message,
90
+ jsonRpcResponse.error.code
91
+ );
89
92
  error.data = jsonRpcResponse.error.data;
90
93
  // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
91
94
  throw error;
@@ -109,7 +112,7 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider {
109
112
  ): Promise<any[]> {
110
113
  // We create the errors here to capture the stack traces at this point,
111
114
  // the async call that follows would probably loose of the stack trace
112
- const error = new ProviderError("HttpProviderError", -1);
115
+ const stackSavingError = new ProviderError("HttpProviderError", -1);
113
116
 
114
117
  // we need this to sort the responses
115
118
  const idToIndexMap: Record<string, number> = {};
@@ -124,8 +127,11 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider {
124
127
 
125
128
  for (const response of jsonRpcResponses) {
126
129
  if (isErrorResponse(response)) {
127
- error.message = response.error.message;
128
- error.code = response.error.code;
130
+ const error = new ProviderError(
131
+ response.error.message,
132
+ response.error.code,
133
+ stackSavingError
134
+ );
129
135
  error.data = response.error.data;
130
136
  // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
131
137
  throw error;
@@ -163,22 +169,30 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider {
163
169
  request: JsonRpcRequest | JsonRpcRequest[],
164
170
  retryNumber = 0
165
171
  ): Promise<JsonRpcResponse | JsonRpcResponse[]> {
172
+ const { request: sendRequest } = await import("undici");
173
+ const url = new URL(this._url);
174
+
175
+ const headers: { [name: string]: string } = {
176
+ "Content-Type": "application/json",
177
+ "User-Agent": `hardhat ${hardhatVersion}`,
178
+ ...this._extraHeaders,
179
+ };
180
+
181
+ if (this._authHeader !== undefined) {
182
+ headers.Authorization = this._authHeader;
183
+ }
184
+
166
185
  try {
167
- const response = await this._dispatcher.request({
186
+ const response = await sendRequest(url, {
187
+ dispatcher: this._dispatcher,
168
188
  method: "POST",
169
- path: this._path,
170
189
  body: JSON.stringify(request),
171
190
  maxRedirections: 10,
172
191
  headersTimeout:
173
192
  process.env.DO_NOT_SET_THIS_ENV_VAR____IS_HARDHAT_CI !== undefined
174
193
  ? 0
175
194
  : this._timeout,
176
- headers: {
177
- "Content-Type": "application/json",
178
- "User-Agent": `hardhat ${hardhatVersion ?? "(unknown version)"}`,
179
- Authorization: this._authHeader,
180
- ...this._extraHeaders,
181
- },
195
+ headers,
182
196
  });
183
197
 
184
198
  if (this._isRateLimitResponse(response)) {
@@ -194,8 +208,6 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider {
194
208
  return await this._retry(request, seconds, retryNumber);
195
209
  }
196
210
 
197
- const url = new URL(this._url);
198
-
199
211
  // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
200
212
  throw new ProviderError(
201
213
  `Too Many Requests error received from ${url.hostname}`,
@@ -255,16 +267,16 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider {
255
267
  return true;
256
268
  }
257
269
 
258
- private _isRateLimitResponse(response: Dispatcher.ResponseData) {
270
+ private _isRateLimitResponse(response: Undici.Dispatcher.ResponseData) {
259
271
  return response.statusCode === TOO_MANY_REQUEST_STATUS;
260
272
  }
261
273
 
262
274
  private _getRetryAfterSeconds(
263
- response: Dispatcher.ResponseData
275
+ response: Undici.Dispatcher.ResponseData
264
276
  ): number | undefined {
265
277
  const header = response.headers["retry-after"];
266
278
 
267
- if (header === undefined || header === null) {
279
+ if (header === undefined || header === null || Array.isArray(header)) {
268
280
  return undefined;
269
281
  }
270
282