hardhat 2.6.8 → 2.8.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 (380) hide show
  1. package/builtin-tasks/check.js +1 -1
  2. package/builtin-tasks/check.js.map +1 -1
  3. package/builtin-tasks/clean.js +3 -3
  4. package/builtin-tasks/clean.js.map +1 -1
  5. package/builtin-tasks/compile.js +48 -48
  6. package/builtin-tasks/compile.js.map +1 -1
  7. package/builtin-tasks/console.js +3 -3
  8. package/builtin-tasks/console.js.map +1 -1
  9. package/builtin-tasks/flatten.js +8 -6
  10. package/builtin-tasks/flatten.js.map +1 -1
  11. package/builtin-tasks/help.js +2 -2
  12. package/builtin-tasks/help.js.map +1 -1
  13. package/builtin-tasks/node.js +21 -15
  14. package/builtin-tasks/node.js.map +1 -1
  15. package/builtin-tasks/run.js +11 -7
  16. package/builtin-tasks/run.js.map +1 -1
  17. package/builtin-tasks/test.js +11 -11
  18. package/builtin-tasks/test.js.map +1 -1
  19. package/builtin-tasks/utils/solidity-files-cache.js +1 -1
  20. package/builtin-tasks/utils/solidity-files-cache.js.map +1 -1
  21. package/builtin-tasks/utils/watch.d.ts.map +1 -1
  22. package/builtin-tasks/utils/watch.js +4 -2
  23. package/builtin-tasks/utils/watch.js.map +1 -1
  24. package/internal/artifacts.d.ts +49 -0
  25. package/internal/artifacts.d.ts.map +1 -1
  26. package/internal/artifacts.js +204 -68
  27. package/internal/artifacts.js.map +1 -1
  28. package/internal/cli/analytics.js +11 -10
  29. package/internal/cli/analytics.js.map +1 -1
  30. package/internal/cli/autocomplete.js +7 -7
  31. package/internal/cli/autocomplete.js.map +1 -1
  32. package/internal/cli/bootstrap.js +2 -2
  33. package/internal/cli/bootstrap.js.map +1 -1
  34. package/internal/cli/cli.js +16 -16
  35. package/internal/cli/cli.js.map +1 -1
  36. package/internal/cli/project-creation.js +13 -13
  37. package/internal/cli/project-creation.js.map +1 -1
  38. package/internal/constants.d.ts +2 -0
  39. package/internal/constants.d.ts.map +1 -1
  40. package/internal/constants.js +4 -1
  41. package/internal/constants.js.map +1 -1
  42. package/internal/context.d.ts +1 -2
  43. package/internal/context.d.ts.map +1 -1
  44. package/internal/context.js +3 -3
  45. package/internal/context.js.map +1 -1
  46. package/internal/core/config/config-loading.d.ts.map +1 -1
  47. package/internal/core/config/config-loading.js +21 -7
  48. package/internal/core/config/config-loading.js.map +1 -1
  49. package/internal/core/config/config-resolution.d.ts.map +1 -1
  50. package/internal/core/config/config-resolution.js +50 -12
  51. package/internal/core/config/config-resolution.js.map +1 -1
  52. package/internal/core/config/config-validation.d.ts +1 -0
  53. package/internal/core/config/config-validation.d.ts.map +1 -1
  54. package/internal/core/config/config-validation.js +151 -38
  55. package/internal/core/config/config-validation.js.map +1 -1
  56. package/internal/core/config/default-config.d.ts.map +1 -1
  57. package/internal/core/config/default-config.js +66 -2
  58. package/internal/core/config/default-config.js.map +1 -1
  59. package/internal/core/errors-list.js +2 -2
  60. package/internal/core/errors-list.js.map +1 -1
  61. package/internal/core/errors.js +3 -3
  62. package/internal/core/errors.js.map +1 -1
  63. package/internal/core/execution-mode.js +2 -2
  64. package/internal/core/execution-mode.js.map +1 -1
  65. package/internal/core/jsonrpc/types/access-list.d.ts +0 -1
  66. package/internal/core/jsonrpc/types/access-list.d.ts.map +1 -1
  67. package/internal/core/jsonrpc/types/access-list.js +1 -1
  68. package/internal/core/jsonrpc/types/access-list.js.map +1 -1
  69. package/internal/core/jsonrpc/types/base-types.js +9 -9
  70. package/internal/core/jsonrpc/types/base-types.js.map +1 -1
  71. package/internal/core/jsonrpc/types/input/blockTag.d.ts +3 -4
  72. package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -1
  73. package/internal/core/jsonrpc/types/input/blockTag.js +3 -3
  74. package/internal/core/jsonrpc/types/input/blockTag.js.map +1 -1
  75. package/internal/core/jsonrpc/types/input/callRequest.d.ts +0 -1
  76. package/internal/core/jsonrpc/types/input/callRequest.d.ts.map +1 -1
  77. package/internal/core/jsonrpc/types/input/callRequest.js +9 -9
  78. package/internal/core/jsonrpc/types/input/callRequest.js.map +1 -1
  79. package/internal/core/jsonrpc/types/input/debugTraceTransaction.js +4 -4
  80. package/internal/core/jsonrpc/types/input/debugTraceTransaction.js.map +1 -1
  81. package/internal/core/jsonrpc/types/input/filterRequest.d.ts +0 -1
  82. package/internal/core/jsonrpc/types/input/filterRequest.d.ts.map +1 -1
  83. package/internal/core/jsonrpc/types/input/filterRequest.js +2 -2
  84. package/internal/core/jsonrpc/types/input/filterRequest.js.map +1 -1
  85. package/internal/core/jsonrpc/types/input/hardhat-network.js +4 -4
  86. package/internal/core/jsonrpc/types/input/hardhat-network.js.map +1 -1
  87. package/internal/core/jsonrpc/types/input/logAddress.js +1 -1
  88. package/internal/core/jsonrpc/types/input/logAddress.js.map +1 -1
  89. package/internal/core/jsonrpc/types/input/logTopics.js +1 -1
  90. package/internal/core/jsonrpc/types/input/logTopics.js.map +1 -1
  91. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts +0 -1
  92. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts.map +1 -1
  93. package/internal/core/jsonrpc/types/input/transactionRequest.js +10 -10
  94. package/internal/core/jsonrpc/types/input/transactionRequest.js.map +1 -1
  95. package/internal/core/jsonrpc/types/output/block.d.ts +0 -1
  96. package/internal/core/jsonrpc/types/output/block.d.ts.map +1 -1
  97. package/internal/core/jsonrpc/types/output/block.js +5 -5
  98. package/internal/core/jsonrpc/types/output/block.js.map +1 -1
  99. package/internal/core/jsonrpc/types/output/log.d.ts +1 -1
  100. package/internal/core/jsonrpc/types/output/log.d.ts.map +1 -1
  101. package/internal/core/jsonrpc/types/output/log.js +5 -4
  102. package/internal/core/jsonrpc/types/output/log.js.map +1 -1
  103. package/internal/core/jsonrpc/types/output/receipt.d.ts +1 -1
  104. package/internal/core/jsonrpc/types/output/receipt.d.ts.map +1 -1
  105. package/internal/core/jsonrpc/types/output/receipt.js +6 -6
  106. package/internal/core/jsonrpc/types/output/receipt.js.map +1 -1
  107. package/internal/core/jsonrpc/types/output/transaction.d.ts +0 -1
  108. package/internal/core/jsonrpc/types/output/transaction.d.ts.map +1 -1
  109. package/internal/core/jsonrpc/types/output/transaction.js +9 -9
  110. package/internal/core/jsonrpc/types/output/transaction.js.map +1 -1
  111. package/internal/core/params/argumentTypes.d.ts.map +1 -1
  112. package/internal/core/params/argumentTypes.js +25 -13
  113. package/internal/core/params/argumentTypes.js.map +1 -1
  114. package/internal/core/params/env-variables.d.ts.map +1 -1
  115. package/internal/core/params/env-variables.js +9 -5
  116. package/internal/core/params/env-variables.js.map +1 -1
  117. package/internal/core/params/hardhat-params.js +2 -2
  118. package/internal/core/params/hardhat-params.js.map +1 -1
  119. package/internal/core/project-structure.js +1 -1
  120. package/internal/core/project-structure.js.map +1 -1
  121. package/internal/core/providers/accounts.d.ts.map +1 -1
  122. package/internal/core/providers/accounts.js +9 -8
  123. package/internal/core/providers/accounts.js.map +1 -1
  124. package/internal/core/providers/backwards-compatibility.js.map +1 -1
  125. package/internal/core/providers/chainId.js +3 -3
  126. package/internal/core/providers/chainId.js.map +1 -1
  127. package/internal/core/providers/construction.d.ts.map +1 -1
  128. package/internal/core/providers/construction.js +6 -4
  129. package/internal/core/providers/construction.js.map +1 -1
  130. package/internal/core/providers/gas-providers.d.ts.map +1 -1
  131. package/internal/core/providers/gas-providers.js +19 -17
  132. package/internal/core/providers/gas-providers.js.map +1 -1
  133. package/internal/core/providers/http.js +1 -1
  134. package/internal/core/providers/http.js.map +1 -1
  135. package/internal/core/providers/util.js +1 -1
  136. package/internal/core/providers/util.js.map +1 -1
  137. package/internal/core/providers/wrapper.d.ts.map +1 -1
  138. package/internal/core/runtime-environment.d.ts.map +1 -1
  139. package/internal/core/runtime-environment.js +7 -5
  140. package/internal/core/runtime-environment.js.map +1 -1
  141. package/internal/core/typescript-support.d.ts +1 -1
  142. package/internal/core/typescript-support.d.ts.map +1 -1
  143. package/internal/core/typescript-support.js +8 -5
  144. package/internal/core/typescript-support.js.map +1 -1
  145. package/internal/hardhat-network/jsonrpc/client.d.ts +2 -0
  146. package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
  147. package/internal/hardhat-network/jsonrpc/client.js +23 -23
  148. package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
  149. package/internal/hardhat-network/jsonrpc/handler.js +16 -8
  150. package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
  151. package/internal/hardhat-network/jsonrpc/server.js +1 -1
  152. package/internal/hardhat-network/jsonrpc/server.js.map +1 -1
  153. package/internal/hardhat-network/provider/BlockchainData.d.ts +1 -1
  154. package/internal/hardhat-network/provider/BlockchainData.js +12 -12
  155. package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
  156. package/internal/hardhat-network/provider/HardhatBlockchain.js +2 -2
  157. package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
  158. package/internal/hardhat-network/provider/HardhatStateManager.js +29 -29
  159. package/internal/hardhat-network/provider/HardhatStateManager.js.map +1 -1
  160. package/internal/hardhat-network/provider/PoolState.js +6 -6
  161. package/internal/hardhat-network/provider/PoolState.js.map +1 -1
  162. package/internal/hardhat-network/provider/TransactionQueue.d.ts +2 -1
  163. package/internal/hardhat-network/provider/TransactionQueue.d.ts.map +1 -1
  164. package/internal/hardhat-network/provider/TransactionQueue.js +16 -2
  165. package/internal/hardhat-network/provider/TransactionQueue.js.map +1 -1
  166. package/internal/hardhat-network/provider/TxPool.js +19 -19
  167. package/internal/hardhat-network/provider/TxPool.js.map +1 -1
  168. package/internal/hardhat-network/provider/filter.js +3 -3
  169. package/internal/hardhat-network/provider/filter.js.map +1 -1
  170. package/internal/hardhat-network/provider/fork/AccountState.js +4 -4
  171. package/internal/hardhat-network/provider/fork/AccountState.js.map +1 -1
  172. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -1
  173. package/internal/hardhat-network/provider/fork/ForkBlockchain.js +8 -10
  174. package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
  175. package/internal/hardhat-network/provider/fork/ForkStateManager.js +34 -34
  176. package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
  177. package/internal/hardhat-network/provider/fork/random.d.ts +0 -1
  178. package/internal/hardhat-network/provider/fork/random.d.ts.map +1 -1
  179. package/internal/hardhat-network/provider/fork/random.js +13 -8
  180. package/internal/hardhat-network/provider/fork/random.js.map +1 -1
  181. package/internal/hardhat-network/provider/fork/rpcToBlockData.js +1 -0
  182. package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -1
  183. package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -1
  184. package/internal/hardhat-network/provider/modules/debug.js +1 -1
  185. package/internal/hardhat-network/provider/modules/debug.js.map +1 -1
  186. package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
  187. package/internal/hardhat-network/provider/modules/eth.js +86 -84
  188. package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
  189. package/internal/hardhat-network/provider/modules/evm.js +9 -9
  190. package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
  191. package/internal/hardhat-network/provider/modules/hardhat.d.ts +2 -0
  192. package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -1
  193. package/internal/hardhat-network/provider/modules/hardhat.js +25 -15
  194. package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
  195. package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
  196. package/internal/hardhat-network/provider/modules/logger.js +30 -25
  197. package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
  198. package/internal/hardhat-network/provider/modules/net.js +2 -2
  199. package/internal/hardhat-network/provider/modules/net.js.map +1 -1
  200. package/internal/hardhat-network/provider/modules/personal.js +2 -2
  201. package/internal/hardhat-network/provider/modules/personal.js.map +1 -1
  202. package/internal/hardhat-network/provider/modules/web3.js +4 -4
  203. package/internal/hardhat-network/provider/modules/web3.js.map +1 -1
  204. package/internal/hardhat-network/provider/node-types.d.ts +7 -1
  205. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
  206. package/internal/hardhat-network/provider/node-types.js.map +1 -1
  207. package/internal/hardhat-network/provider/node.d.ts +10 -2
  208. package/internal/hardhat-network/provider/node.d.ts.map +1 -1
  209. package/internal/hardhat-network/provider/node.js +144 -75
  210. package/internal/hardhat-network/provider/node.js.map +1 -1
  211. package/internal/hardhat-network/provider/output.d.ts +1 -1
  212. package/internal/hardhat-network/provider/output.d.ts.map +1 -1
  213. package/internal/hardhat-network/provider/output.js +94 -91
  214. package/internal/hardhat-network/provider/output.js.map +1 -1
  215. package/internal/hardhat-network/provider/provider.d.ts +7 -3
  216. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  217. package/internal/hardhat-network/provider/provider.js +11 -4
  218. package/internal/hardhat-network/provider/provider.js.map +1 -1
  219. package/internal/hardhat-network/provider/return-data.js +4 -4
  220. package/internal/hardhat-network/provider/return-data.js.map +1 -1
  221. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
  222. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
  223. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
  224. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +1 -1
  225. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
  226. package/internal/hardhat-network/provider/utils/bnToHex.js +1 -1
  227. package/internal/hardhat-network/provider/utils/bnToHex.js.map +1 -1
  228. package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js.map +1 -1
  229. package/internal/hardhat-network/provider/utils/makeAccount.js +4 -4
  230. package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -1
  231. package/internal/hardhat-network/provider/utils/makeCommon.js +3 -3
  232. package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
  233. package/internal/hardhat-network/provider/utils/makeForkClient.js +4 -4
  234. package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -1
  235. package/internal/hardhat-network/provider/utils/makeStateTrie.js +1 -1
  236. package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
  237. package/internal/hardhat-network/provider/utils/txMapToArray.js +1 -1
  238. package/internal/hardhat-network/provider/utils/txMapToArray.js.map +1 -1
  239. package/internal/hardhat-network/stack-traces/compiler-to-model.js +4 -4
  240. package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
  241. package/internal/hardhat-network/stack-traces/consoleLogger.js +44 -44
  242. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  243. package/internal/hardhat-network/stack-traces/contracts-identifier.js +6 -6
  244. package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
  245. package/internal/hardhat-network/stack-traces/debug.js +17 -17
  246. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  247. package/internal/hardhat-network/stack-traces/error-inferrer.js +28 -28
  248. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
  249. package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.js +3 -3
  250. package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.js.map +1 -1
  251. package/internal/hardhat-network/stack-traces/model.js +5 -5
  252. package/internal/hardhat-network/stack-traces/model.js.map +1 -1
  253. package/internal/hardhat-network/stack-traces/solidity-errors.js +3 -3
  254. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  255. package/internal/hardhat-network/stack-traces/solidityTracer.js +10 -10
  256. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  257. package/internal/hardhat-network/stack-traces/source-maps.js +7 -7
  258. package/internal/hardhat-network/stack-traces/source-maps.js.map +1 -1
  259. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +5 -5
  260. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
  261. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js +2 -2
  262. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js.map +1 -1
  263. package/internal/hardhat-network/stack-traces/vm-tracer.js +3 -3
  264. package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
  265. package/internal/lib/hardhat-lib.js +3 -3
  266. package/internal/lib/hardhat-lib.js.map +1 -1
  267. package/internal/reset.js +1 -1
  268. package/internal/reset.js.map +1 -1
  269. package/internal/sentry/anonymizer.js.map +1 -1
  270. package/internal/sentry/reporter.js +5 -5
  271. package/internal/sentry/reporter.js.map +1 -1
  272. package/internal/sentry/subprocess.js +2 -2
  273. package/internal/sentry/subprocess.js.map +1 -1
  274. package/internal/sentry/transport.js +1 -1
  275. package/internal/sentry/transport.js.map +1 -1
  276. package/internal/solidity/compilation-job.js +4 -4
  277. package/internal/solidity/compilation-job.js.map +1 -1
  278. package/internal/solidity/compiler/downloader.d.ts +1 -1
  279. package/internal/solidity/compiler/downloader.d.ts.map +1 -1
  280. package/internal/solidity/compiler/downloader.js +21 -7
  281. package/internal/solidity/compiler/downloader.js.map +1 -1
  282. package/internal/solidity/compiler/index.js +1 -1
  283. package/internal/solidity/compiler/index.js.map +1 -1
  284. package/internal/solidity/dependencyGraph.js +2 -1
  285. package/internal/solidity/dependencyGraph.js.map +1 -1
  286. package/internal/solidity/parse.js +3 -2
  287. package/internal/solidity/parse.js.map +1 -1
  288. package/internal/solidity/resolver.js +10 -10
  289. package/internal/solidity/resolver.js.map +1 -1
  290. package/internal/util/abi-helpers.js +1 -1
  291. package/internal/util/abi-helpers.js.map +1 -1
  292. package/internal/util/download.d.ts.map +1 -1
  293. package/internal/util/download.js +12 -1
  294. package/internal/util/download.js.map +1 -1
  295. package/internal/util/global-dir.js +1 -1
  296. package/internal/util/global-dir.js.map +1 -1
  297. package/internal/util/hardforks.d.ts +2 -1
  298. package/internal/util/hardforks.d.ts.map +1 -1
  299. package/internal/util/hardforks.js +3 -1
  300. package/internal/util/hardforks.js.map +1 -1
  301. package/internal/util/jsonrpc.js +1 -1
  302. package/internal/util/jsonrpc.js.map +1 -1
  303. package/internal/util/packageInfo.js +1 -1
  304. package/internal/util/packageInfo.js.map +1 -1
  305. package/internal/util/scripts-runner.js +3 -3
  306. package/internal/util/scripts-runner.js.map +1 -1
  307. package/package.json +13 -13
  308. package/register.js +7 -7
  309. package/register.js.map +1 -1
  310. package/src/builtin-tasks/flatten.ts +4 -2
  311. package/src/builtin-tasks/node.ts +17 -10
  312. package/src/builtin-tasks/run.ts +13 -8
  313. package/src/builtin-tasks/utils/watch.ts +3 -1
  314. package/src/internal/artifacts.ts +269 -72
  315. package/src/internal/cli/analytics.ts +1 -1
  316. package/src/internal/cli/autocomplete.ts +3 -3
  317. package/src/internal/cli/bootstrap.ts +1 -1
  318. package/src/internal/cli/cli.ts +2 -2
  319. package/src/internal/cli/project-creation.ts +2 -2
  320. package/src/internal/constants.ts +4 -0
  321. package/src/internal/context.ts +1 -1
  322. package/src/internal/core/config/config-loading.ts +24 -2
  323. package/src/internal/core/config/config-resolution.ts +61 -3
  324. package/src/internal/core/config/config-validation.ts +217 -15
  325. package/src/internal/core/config/default-config.ts +66 -2
  326. package/src/internal/core/errors-list.ts +2 -2
  327. package/src/internal/core/execution-mode.ts +1 -1
  328. package/src/internal/core/jsonrpc/types/output/log.ts +1 -0
  329. package/src/internal/core/params/argumentTypes.ts +40 -25
  330. package/src/internal/core/params/env-variables.ts +13 -8
  331. package/src/internal/core/params/hardhat-params.ts +2 -2
  332. package/src/internal/core/providers/accounts.ts +4 -3
  333. package/src/internal/core/providers/backwards-compatibility.ts +1 -1
  334. package/src/internal/core/providers/chainId.ts +1 -1
  335. package/src/internal/core/providers/construction.ts +9 -2
  336. package/src/internal/core/providers/gas-providers.ts +6 -4
  337. package/src/internal/core/providers/http.ts +1 -1
  338. package/src/internal/core/providers/wrapper.ts +1 -1
  339. package/src/internal/core/runtime-environment.ts +3 -1
  340. package/src/internal/core/typescript-support.ts +7 -3
  341. package/src/internal/hardhat-network/jsonrpc/client.ts +2 -2
  342. package/src/internal/hardhat-network/jsonrpc/handler.ts +12 -2
  343. package/src/internal/hardhat-network/jsonrpc/server.ts +2 -2
  344. package/src/internal/hardhat-network/provider/TransactionQueue.ts +31 -4
  345. package/src/internal/hardhat-network/provider/TxPool.ts +1 -1
  346. package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +2 -4
  347. package/src/internal/hardhat-network/provider/modules/eth.ts +23 -21
  348. package/src/internal/hardhat-network/provider/modules/hardhat.ts +15 -1
  349. package/src/internal/hardhat-network/provider/modules/logger.ts +13 -9
  350. package/src/internal/hardhat-network/provider/node-types.ts +8 -1
  351. package/src/internal/hardhat-network/provider/node.ts +156 -29
  352. package/src/internal/hardhat-network/provider/output.ts +9 -9
  353. package/src/internal/hardhat-network/provider/provider.ts +12 -2
  354. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +1 -1
  355. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +1 -1
  356. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +3 -3
  357. package/src/internal/reset.ts +1 -1
  358. package/src/internal/sentry/subprocess.ts +2 -2
  359. package/src/internal/solidity/compiler/downloader.ts +27 -12
  360. package/src/internal/solidity/resolver.ts +1 -1
  361. package/src/internal/util/abi-helpers.ts +1 -1
  362. package/src/internal/util/download.ts +17 -1
  363. package/src/internal/util/hardforks.ts +2 -0
  364. package/src/internal/util/jsonrpc.ts +1 -1
  365. package/src/internal/util/packageInfo.ts +1 -1
  366. package/src/internal/util/scripts-runner.ts +1 -1
  367. package/src/register.ts +1 -1
  368. package/src/types/config.ts +42 -0
  369. package/src/utils/contract-names.ts +112 -0
  370. package/src/utils/source-names.ts +14 -12
  371. package/types/config.d.ts +26 -0
  372. package/types/config.d.ts.map +1 -1
  373. package/utils/contract-names.d.ts +10 -0
  374. package/utils/contract-names.d.ts.map +1 -1
  375. package/utils/contract-names.js +92 -1
  376. package/utils/contract-names.js.map +1 -1
  377. package/utils/source-names.d.ts +1 -1
  378. package/utils/source-names.js +8 -6
  379. package/utils/source-names.js.map +1 -1
  380. package/CHANGELOG.md +0 -54
@@ -6,10 +6,14 @@ import path from "path";
6
6
  import {
7
7
  HardhatConfig,
8
8
  HardhatNetworkAccountsConfig,
9
+ HardhatNetworkChainConfig,
10
+ HardhatNetworkChainsConfig,
9
11
  HardhatNetworkConfig,
10
12
  HardhatNetworkForkingConfig,
11
13
  HardhatNetworkMiningConfig,
12
14
  HardhatNetworkMiningUserConfig,
15
+ HardhatNetworkMempoolConfig,
16
+ HardhatNetworkMempoolUserConfig,
13
17
  HardhatNetworkUserConfig,
14
18
  HardhatUserConfig,
15
19
  HDAccountsUserConfig,
@@ -29,6 +33,7 @@ import {
29
33
  SolidityUserConfig,
30
34
  } from "../../../types";
31
35
  import { HARDHAT_NETWORK_NAME } from "../../constants";
36
+ import { HardforkName } from "../../util/hardforks";
32
37
  import { fromEntries } from "../../util/lang";
33
38
  import { assertHardhatInvariant } from "../errors";
34
39
 
@@ -148,9 +153,11 @@ function resolveHardhatNetworkConfig(
148
153
  }
149
154
  : undefined;
150
155
 
151
- const blockNumber = hardhatNetworkConfig?.forking?.blockNumber;
152
- if (blockNumber !== undefined && forking !== undefined) {
153
- forking.blockNumber = hardhatNetworkConfig?.forking?.blockNumber;
156
+ if (forking !== undefined) {
157
+ const blockNumber = hardhatNetworkConfig?.forking?.blockNumber;
158
+ if (blockNumber !== undefined) {
159
+ forking.blockNumber = hardhatNetworkConfig?.forking?.blockNumber;
160
+ }
154
161
  }
155
162
 
156
163
  const mining = resolveMiningConfig(hardhatNetworkConfig.mining);
@@ -169,6 +176,30 @@ function resolveHardhatNetworkConfig(
169
176
  const initialDate =
170
177
  hardhatNetworkConfig.initialDate ?? new Date().toISOString();
171
178
 
179
+ const chains: HardhatNetworkChainsConfig = new Map(
180
+ defaultHardhatNetworkParams.chains
181
+ );
182
+ if (hardhatNetworkConfig.chains !== undefined) {
183
+ for (const [chainId, userChainConfig] of Object.entries(
184
+ hardhatNetworkConfig.chains
185
+ )) {
186
+ const chainConfig: HardhatNetworkChainConfig = {
187
+ hardforkHistory: new Map(),
188
+ };
189
+ if (userChainConfig.hardforkHistory !== undefined) {
190
+ for (const [name, block] of Object.entries(
191
+ userChainConfig.hardforkHistory
192
+ )) {
193
+ chainConfig.hardforkHistory.set(
194
+ name as HardforkName,
195
+ block as number
196
+ );
197
+ }
198
+ }
199
+ chains.set(parseInt(chainId, 10), chainConfig);
200
+ }
201
+ }
202
+
172
203
  const config = {
173
204
  ...clonedDefaultHardhatNetworkParams,
174
205
  ...hardhatNetworkConfig,
@@ -179,6 +210,7 @@ function resolveHardhatNetworkConfig(
179
210
  gas,
180
211
  initialDate,
181
212
  minGasPrice,
213
+ chains,
182
214
  };
183
215
 
184
216
  // We do it this way because ts gets lost otherwise
@@ -228,10 +260,12 @@ function resolveHttpNetworkConfig(
228
260
  function resolveMiningConfig(
229
261
  userConfig: HardhatNetworkMiningUserConfig | undefined
230
262
  ): HardhatNetworkMiningConfig {
263
+ const mempool = resolveMempoolConfig(userConfig?.mempool);
231
264
  if (userConfig === undefined) {
232
265
  return {
233
266
  auto: true,
234
267
  interval: 0,
268
+ mempool,
235
269
  };
236
270
  }
237
271
 
@@ -241,6 +275,7 @@ function resolveMiningConfig(
241
275
  return {
242
276
  auto: true,
243
277
  interval: 0,
278
+ mempool,
244
279
  };
245
280
  }
246
281
 
@@ -248,6 +283,7 @@ function resolveMiningConfig(
248
283
  return {
249
284
  auto: false,
250
285
  interval,
286
+ mempool,
251
287
  };
252
288
  }
253
289
 
@@ -255,6 +291,7 @@ function resolveMiningConfig(
255
291
  return {
256
292
  auto,
257
293
  interval: 0,
294
+ mempool,
258
295
  };
259
296
  }
260
297
 
@@ -262,9 +299,30 @@ function resolveMiningConfig(
262
299
  return {
263
300
  auto: auto!,
264
301
  interval: interval!,
302
+ mempool,
265
303
  };
266
304
  }
267
305
 
306
+ function resolveMempoolConfig(
307
+ userConfig: HardhatNetworkMempoolUserConfig | undefined
308
+ ): HardhatNetworkMempoolConfig {
309
+ if (userConfig === undefined) {
310
+ return {
311
+ order: "priority",
312
+ };
313
+ }
314
+
315
+ if (userConfig.order === undefined) {
316
+ return {
317
+ order: "priority",
318
+ };
319
+ }
320
+
321
+ return {
322
+ order: userConfig.order,
323
+ } as HardhatNetworkMempoolConfig;
324
+ }
325
+
268
326
  function resolveSolidityConfig(userConfig: HardhatUserConfig): SolidityConfig {
269
327
  const userSolidityConfig = userConfig.solidity ?? DEFAULT_SOLC_VERSION;
270
328
 
@@ -3,6 +3,7 @@ import { Context, getFunctionName, ValidationError } from "io-ts/lib";
3
3
  import { Reporter } from "io-ts/lib/Reporter";
4
4
 
5
5
  import {
6
+ HARDHAT_MEMPOOL_SUPPORTED_ORDERS,
6
7
  HARDHAT_NETWORK_NAME,
7
8
  HARDHAT_NETWORK_SUPPORTED_HARDFORKS,
8
9
  } from "../../constants";
@@ -11,6 +12,7 @@ import { fromEntries } from "../../util/lang";
11
12
  import { HardhatError } from "../errors";
12
13
  import { ERRORS } from "../errors-list";
13
14
  import { hardforkGte, HardforkName } from "../../util/hardforks";
15
+ import { HardhatNetworkChainUserConfig } from "../../../types/config";
14
16
  import { defaultHardhatNetworkParams } from "./default-config";
15
17
 
16
18
  function stringify(v: any): string {
@@ -53,6 +55,59 @@ function getErrorMessage(path: string, value: any, expectedType: string) {
53
55
  )} for ${path} - Expected a value of type ${expectedType}.`;
54
56
  }
55
57
 
58
+ function getPrivateKeyError(index: number, network: string, message: string) {
59
+ return `Invalid account: #${index} for network: ${network} - ${message}`;
60
+ }
61
+
62
+ function validatePrivateKey(
63
+ privateKey: unknown,
64
+ index: number,
65
+ network: string,
66
+ errors: string[]
67
+ ) {
68
+ if (typeof privateKey !== "string") {
69
+ errors.push(
70
+ getPrivateKeyError(
71
+ index,
72
+ network,
73
+ `Expected string, received ${typeof privateKey}`
74
+ )
75
+ );
76
+ } else {
77
+ // private key validation
78
+ const pkWithPrefix = /^0x/.test(privateKey)
79
+ ? privateKey
80
+ : `0x${privateKey}`;
81
+
82
+ // 32 bytes = 64 characters + 2 char prefix = 66
83
+ if (pkWithPrefix.length < 66) {
84
+ errors.push(
85
+ getPrivateKeyError(
86
+ index,
87
+ network,
88
+ "private key too short, expected 32 bytes"
89
+ )
90
+ );
91
+ } else if (pkWithPrefix.length > 66) {
92
+ errors.push(
93
+ getPrivateKeyError(
94
+ index,
95
+ network,
96
+ "private key too long, expected 32 bytes"
97
+ )
98
+ );
99
+ } else if (hexString.decode(pkWithPrefix).isLeft()) {
100
+ errors.push(
101
+ getPrivateKeyError(
102
+ index,
103
+ network,
104
+ "invalid hex character(s) found in string"
105
+ )
106
+ );
107
+ }
108
+ }
109
+ }
110
+
56
111
  export function failure(es: ValidationError[]): string[] {
57
112
  return es.map(getMessage);
58
113
  }
@@ -91,6 +146,27 @@ export const hexString = new t.Type<string>(
91
146
  t.identity
92
147
  );
93
148
 
149
+ function isAddress(v: unknown): v is string {
150
+ if (typeof v !== "string") {
151
+ return false;
152
+ }
153
+
154
+ const trimmed = v.trim();
155
+
156
+ return (
157
+ trimmed.match(HEX_STRING_REGEX) !== null &&
158
+ trimmed.startsWith("0x") &&
159
+ trimmed.length === 42
160
+ );
161
+ }
162
+
163
+ export const address = new t.Type<string>(
164
+ "address",
165
+ isAddress,
166
+ (u, c) => (isAddress(u) ? t.success(u) : t.failure(u, c)),
167
+ t.identity
168
+ );
169
+
94
170
  export const decimalString = new t.Type<string>(
95
171
  "decimal string",
96
172
  isDecimalString,
@@ -117,12 +193,73 @@ const HardhatNetworkHDAccountsConfig = t.type({
117
193
  ...commonHDAccountsFields,
118
194
  });
119
195
 
196
+ const Integer = new t.Type<number>(
197
+ "Integer",
198
+ (num: unknown): num is number => typeof num === "number",
199
+ (u, c) => {
200
+ try {
201
+ return typeof u === "string"
202
+ ? t.success(parseInt(u, 10))
203
+ : t.failure(u, c);
204
+ } catch {
205
+ return t.failure(u, c);
206
+ }
207
+ },
208
+ t.identity
209
+ );
210
+
120
211
  const HardhatNetworkForkingConfig = t.type({
121
212
  enabled: optional(t.boolean),
122
213
  url: t.string,
123
214
  blockNumber: optional(t.number),
124
215
  });
125
216
 
217
+ const HardhatNetworkMempoolConfig = t.type({
218
+ order: optional(
219
+ t.keyof(
220
+ fromEntries(
221
+ HARDHAT_MEMPOOL_SUPPORTED_ORDERS.map((order) => [order, null])
222
+ )
223
+ )
224
+ ),
225
+ });
226
+
227
+ const HardhatNetworkMiningConfig = t.type({
228
+ auto: optional(t.boolean),
229
+ interval: optional(t.union([t.number, t.tuple([t.number, t.number])])),
230
+ mempool: optional(HardhatNetworkMempoolConfig),
231
+ });
232
+
233
+ function isValidHardforkName(name: string) {
234
+ return Object.values(HardforkName).includes(name as HardforkName);
235
+ }
236
+
237
+ const HardforkNameType = new t.Type<HardforkName>(
238
+ Object.values(HardforkName)
239
+ .map((v) => `"${v}"`)
240
+ .join(" | "),
241
+ (name: unknown): name is HardforkName =>
242
+ typeof name === "string" && isValidHardforkName(name),
243
+ (u, c) => {
244
+ return typeof u === "string" && isValidHardforkName(u)
245
+ ? t.success(u as HardforkName)
246
+ : t.failure(u, c);
247
+ },
248
+ t.identity
249
+ );
250
+
251
+ const HardhatNetworkHardforkHistory = t.record(
252
+ HardforkNameType,
253
+ t.number,
254
+ "HardhatNetworkHardforkHistory"
255
+ );
256
+
257
+ const HardhatNetworkChainConfig = t.type({
258
+ hardforkHistory: HardhatNetworkHardforkHistory,
259
+ });
260
+
261
+ const HardhatNetworkChainsConfig = t.record(Integer, HardhatNetworkChainConfig);
262
+
126
263
  const commonNetworkConfigFields = {
127
264
  chainId: optional(t.number),
128
265
  from: optional(t.string),
@@ -149,6 +286,9 @@ const HardhatNetworkConfig = t.type({
149
286
  initialDate: optional(t.string),
150
287
  loggingEnabled: optional(t.boolean),
151
288
  forking: optional(HardhatNetworkForkingConfig),
289
+ mining: optional(HardhatNetworkMiningConfig),
290
+ coinbase: optional(address),
291
+ chains: optional(HardhatNetworkChainsConfig),
152
292
  });
153
293
 
154
294
  const HDAccountsConfig = t.type({
@@ -224,7 +364,7 @@ export function validateConfig(config: any) {
224
364
  }
225
365
 
226
366
  export function getValidationErrors(config: any): string[] {
227
- const errors = [];
367
+ const errors: string[] = [];
228
368
 
229
369
  // These can't be validated with io-ts
230
370
  if (config !== undefined && typeof config.networks === "object") {
@@ -237,8 +377,7 @@ export function getValidationErrors(config: any): string[] {
237
377
  }
238
378
 
239
379
  // Validating the accounts with io-ts leads to very confusing errors messages
240
- const configExceptAccounts = { ...hardhatNetwork };
241
- delete configExceptAccounts.accounts;
380
+ const { accounts, ...configExceptAccounts } = hardhatNetwork;
242
381
 
243
382
  const netConfigResult = HardhatNetworkConfig.decode(configExceptAccounts);
244
383
  if (netConfigResult.isLeft()) {
@@ -251,31 +390,37 @@ export function getValidationErrors(config: any): string[] {
251
390
  );
252
391
  }
253
392
 
254
- if (Array.isArray(hardhatNetwork.accounts)) {
255
- for (const account of hardhatNetwork.accounts) {
256
- if (typeof account.privateKey !== "string") {
393
+ // manual validation of accounts
394
+ if (Array.isArray(accounts)) {
395
+ for (const [index, account] of accounts.entries()) {
396
+ if (typeof account !== "object") {
257
397
  errors.push(
258
- getErrorMessage(
259
- `HardhatConfig.networks.${HARDHAT_NETWORK_NAME}.accounts[].privateKey`,
260
- account.privateKey,
261
- "string"
398
+ getPrivateKeyError(
399
+ index,
400
+ HARDHAT_NETWORK_NAME,
401
+ `Expected object, received ${typeof account}`
262
402
  )
263
403
  );
404
+ continue;
264
405
  }
265
406
 
266
- if (typeof account.balance !== "string") {
407
+ const { privateKey, balance } = account;
408
+
409
+ validatePrivateKey(privateKey, index, HARDHAT_NETWORK_NAME, errors);
410
+
411
+ if (typeof balance !== "string") {
267
412
  errors.push(
268
413
  getErrorMessage(
269
414
  `HardhatConfig.networks.${HARDHAT_NETWORK_NAME}.accounts[].balance`,
270
- account.balance,
415
+ balance,
271
416
  "string"
272
417
  )
273
418
  );
274
- } else if (decimalString.decode(account.balance).isLeft()) {
419
+ } else if (decimalString.decode(balance).isLeft()) {
275
420
  errors.push(
276
421
  getErrorMessage(
277
422
  `HardhatConfig.networks.${HARDHAT_NETWORK_NAME}.accounts[].balance`,
278
- account.balance,
423
+ balance,
279
424
  "decimal(wei)"
280
425
  )
281
426
  );
@@ -319,6 +464,29 @@ export function getValidationErrors(config: any): string[] {
319
464
  );
320
465
  }
321
466
  }
467
+
468
+ if (hardhatNetwork.chains !== undefined) {
469
+ Object.entries(hardhatNetwork.chains).forEach((chainEntry) => {
470
+ const [chainId, chainConfig] = chainEntry as [
471
+ string,
472
+ HardhatNetworkChainUserConfig
473
+ ];
474
+ const { hardforkHistory } = chainConfig;
475
+ if (hardforkHistory !== undefined) {
476
+ Object.keys(hardforkHistory).forEach((hardforkName) => {
477
+ if (!HARDHAT_NETWORK_SUPPORTED_HARDFORKS.includes(hardforkName)) {
478
+ errors.push(
479
+ getErrorMessage(
480
+ `HardhatConfig.networks.${HARDHAT_NETWORK_NAME}.chains[${chainId}].hardforkHistory`,
481
+ hardforkName,
482
+ `"${HARDHAT_NETWORK_SUPPORTED_HARDFORKS.join('" | "')}"`
483
+ )
484
+ );
485
+ }
486
+ });
487
+ }
488
+ });
489
+ }
322
490
  }
323
491
 
324
492
  for (const [networkName, netConfig] of Object.entries<any>(
@@ -340,7 +508,9 @@ export function getValidationErrors(config: any): string[] {
340
508
  }
341
509
  }
342
510
 
343
- const netConfigResult = HttpNetworkConfig.decode(netConfig);
511
+ const { accounts, ...configExceptAccounts } = netConfig;
512
+
513
+ const netConfigResult = HttpNetworkConfig.decode(configExceptAccounts);
344
514
  if (netConfigResult.isLeft()) {
345
515
  errors.push(
346
516
  getErrorMessage(
@@ -350,6 +520,38 @@ export function getValidationErrors(config: any): string[] {
350
520
  )
351
521
  );
352
522
  }
523
+
524
+ // manual validation of accounts
525
+ if (Array.isArray(accounts)) {
526
+ accounts.forEach((privateKey, index) =>
527
+ validatePrivateKey(privateKey, index, networkName, errors)
528
+ );
529
+ } else if (typeof accounts === "object") {
530
+ const hdConfigResult = HDAccountsConfig.decode(accounts);
531
+ if (hdConfigResult.isLeft()) {
532
+ errors.push(
533
+ getErrorMessage(
534
+ `HardhatConfig.networks.${networkName}`,
535
+ accounts,
536
+ "HttpNetworkHDAccountsConfig"
537
+ )
538
+ );
539
+ }
540
+ } else if (typeof accounts === "string") {
541
+ if (accounts !== "remote") {
542
+ errors.push(
543
+ `Invalid 'accounts' entry for network '${networkName}': expected an array of accounts or the string 'remote', but got the string '${accounts}'`
544
+ );
545
+ }
546
+ } else if (accounts !== undefined) {
547
+ errors.push(
548
+ getErrorMessage(
549
+ `HardhatConfig.networks.${networkName}.accounts`,
550
+ accounts,
551
+ '"remote" | string[] | HttpNetworkHDAccountsConfig | undefined'
552
+ )
553
+ );
554
+ }
353
555
  }
354
556
  }
355
557
 
@@ -1,6 +1,7 @@
1
1
  import { BN } from "ethereumjs-util";
2
2
 
3
3
  import { HardhatNetworkConfig } from "../../../types";
4
+ import { HardforkName } from "../../util/hardforks";
4
5
  import { HARDHAT_NETWORK_NAME } from "../../constants";
5
6
 
6
7
  export const DEFAULT_SOLC_VERSION = "0.7.3";
@@ -35,18 +36,81 @@ export const defaultHardhatNetworkParams: Omit<
35
36
  HardhatNetworkConfig,
36
37
  "gas" | "initialDate"
37
38
  > = {
38
- hardfork: "london",
39
+ hardfork: "arrowGlacier",
39
40
  blockGasLimit: 30_000_000,
40
41
  gasPrice: HARDHAT_NETWORK_DEFAULT_GAS_PRICE,
41
42
  chainId: 31337,
42
43
  throwOnTransactionFailures: true,
43
44
  throwOnCallFailures: true,
44
45
  allowUnlimitedContractSize: false,
45
- mining: { auto: true, interval: 0 },
46
+ mining: {
47
+ auto: true,
48
+ interval: 0,
49
+ mempool: {
50
+ order: "priority",
51
+ },
52
+ },
46
53
  accounts: defaultHardhatNetworkHdAccountsConfigParams,
47
54
  loggingEnabled: false,
48
55
  gasMultiplier: DEFAULT_GAS_MULTIPLIER,
49
56
  minGasPrice: new BN(0),
57
+ chains: new Map([
58
+ [
59
+ // block numbers below were taken from https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/common/src/chains
60
+ 1, // mainnet
61
+ {
62
+ hardforkHistory: new Map([
63
+ [HardforkName.BYZANTIUM, 4370000],
64
+ [HardforkName.CONSTANTINOPLE, 7280000],
65
+ [HardforkName.PETERSBURG, 7280000],
66
+ [HardforkName.ISTANBUL, 9069000],
67
+ [HardforkName.MUIR_GLACIER, 9200000],
68
+ [HardforkName.BERLIN, 12244000],
69
+ [HardforkName.LONDON, 12965000],
70
+ ]),
71
+ },
72
+ ],
73
+ [
74
+ 3, // ropsten
75
+ {
76
+ hardforkHistory: new Map([
77
+ [HardforkName.BYZANTIUM, 1700000],
78
+ [HardforkName.CONSTANTINOPLE, 4230000],
79
+ [HardforkName.PETERSBURG, 4939394],
80
+ [HardforkName.ISTANBUL, 6485846],
81
+ [HardforkName.MUIR_GLACIER, 7117117],
82
+ [HardforkName.BERLIN, 9812189],
83
+ [HardforkName.LONDON, 10499401],
84
+ ]),
85
+ },
86
+ ],
87
+ [
88
+ 4, // rinkeby
89
+ {
90
+ hardforkHistory: new Map([
91
+ [HardforkName.BYZANTIUM, 1035301],
92
+ [HardforkName.CONSTANTINOPLE, 3660663],
93
+ [HardforkName.PETERSBURG, 4321234],
94
+ [HardforkName.ISTANBUL, 5435345],
95
+ [HardforkName.BERLIN, 8290928],
96
+ [HardforkName.LONDON, 8897988],
97
+ ]),
98
+ },
99
+ ],
100
+ [
101
+ 42, // kovan
102
+ {
103
+ hardforkHistory: new Map([
104
+ [HardforkName.BYZANTIUM, 5067000],
105
+ [HardforkName.CONSTANTINOPLE, 9200000],
106
+ [HardforkName.PETERSBURG, 10255201],
107
+ [HardforkName.ISTANBUL, 14111141],
108
+ [HardforkName.BERLIN, 24770900],
109
+ [HardforkName.LONDON, 26741100],
110
+ ]),
111
+ },
112
+ ],
113
+ ]),
50
114
  };
51
115
 
52
116
  export const defaultHttpNetworkParams = {
@@ -571,7 +571,7 @@ Please double check how you invoked Hardhat or ran your task.`,
571
571
  },
572
572
  MISSING_TASK_ARGUMENT: {
573
573
  number: 306,
574
- message: "Missing task argument %param%",
574
+ message: "The '%param%' parameter expects a value, but none was passed.",
575
575
  title: "Missing task argument",
576
576
  description: `You tried to run a task, but one of its required arguments was missing.
577
577
 
@@ -884,7 +884,7 @@ Please use a newer, supported version.`,
884
884
  ARTIFACTS: {
885
885
  NOT_FOUND: {
886
886
  number: 700,
887
- message: 'Artifact for contract "%contractName%" not found.',
887
+ message: 'Artifact for contract "%contractName%" not found. %suggestion%',
888
888
  title: "Artifact not found",
889
889
  description: `Tried to import a nonexistent artifact.
890
890
 
@@ -22,7 +22,7 @@ export function isHardhatInstalledLocallyOrLinked(configPath?: string) {
22
22
  return (
23
23
  fs.realpathSync(resolvedPackageJson) === fs.realpathSync(thisPackageJson)
24
24
  );
25
- } catch (_) {
25
+ } catch {
26
26
  return false;
27
27
  }
28
28
  }
@@ -6,6 +6,7 @@ import { rpcAddress, rpcData, rpcHash, rpcQuantity } from "../base-types";
6
6
  export type RpcLog = t.TypeOf<typeof rpcLog>;
7
7
  export const rpcLog = t.type(
8
8
  {
9
+ logIndex: nullable(rpcQuantity),
9
10
  transactionIndex: nullable(rpcQuantity),
10
11
  transactionHash: nullable(rpcHash),
11
12
  blockHash: nullable(rpcHash),
@@ -185,14 +185,19 @@ export const inputFile: CLIArgumentType<string> = {
185
185
  throw new Error(`${strValue} is a directory, not a file`);
186
186
  }
187
187
  } catch (error) {
188
- throw new HardhatError(
189
- ERRORS.ARGUMENTS.INVALID_INPUT_FILE,
190
- {
191
- name: argName,
192
- value: strValue,
193
- },
194
- error
195
- );
188
+ if (error instanceof Error) {
189
+ throw new HardhatError(
190
+ ERRORS.ARGUMENTS.INVALID_INPUT_FILE,
191
+ {
192
+ name: argName,
193
+ value: strValue,
194
+ },
195
+ error
196
+ );
197
+ }
198
+
199
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
200
+ throw error;
196
201
  }
197
202
 
198
203
  return strValue;
@@ -212,15 +217,20 @@ export const inputFile: CLIArgumentType<string> = {
212
217
  inputFile.parse(argName, value);
213
218
  } catch (error) {
214
219
  // the input value is considered invalid, throw error.
215
- throw new HardhatError(
216
- ERRORS.ARGUMENTS.INVALID_VALUE_FOR_TYPE,
217
- {
218
- value,
219
- name: argName,
220
- type: inputFile.name,
221
- },
222
- error
223
- );
220
+ if (error instanceof Error) {
221
+ throw new HardhatError(
222
+ ERRORS.ARGUMENTS.INVALID_VALUE_FOR_TYPE,
223
+ {
224
+ value,
225
+ name: argName,
226
+ type: inputFile.name,
227
+ },
228
+ error
229
+ );
230
+ }
231
+
232
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
233
+ throw error;
224
234
  }
225
235
  },
226
236
  };
@@ -231,14 +241,19 @@ export const json: CLIArgumentType<any> = {
231
241
  try {
232
242
  return JSON.parse(strValue);
233
243
  } catch (error) {
234
- throw new HardhatError(
235
- ERRORS.ARGUMENTS.INVALID_JSON_ARGUMENT,
236
- {
237
- param: argName,
238
- error: error.message,
239
- },
240
- error
241
- );
244
+ if (error instanceof Error) {
245
+ throw new HardhatError(
246
+ ERRORS.ARGUMENTS.INVALID_JSON_ARGUMENT,
247
+ {
248
+ param: argName,
249
+ error: error.message,
250
+ },
251
+ error
252
+ );
253
+ }
254
+
255
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
256
+ throw error;
242
257
  }
243
258
  },
244
259