hardhat 2.7.0 → 2.8.1

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 (355) 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 +19 -13
  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 +12 -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.js +17 -17
  25. package/internal/artifacts.js.map +1 -1
  26. package/internal/cli/analytics.js +10 -9
  27. package/internal/cli/analytics.js.map +1 -1
  28. package/internal/cli/autocomplete.js +7 -7
  29. package/internal/cli/autocomplete.js.map +1 -1
  30. package/internal/cli/bootstrap.js +2 -2
  31. package/internal/cli/bootstrap.js.map +1 -1
  32. package/internal/cli/cli.js +18 -16
  33. package/internal/cli/cli.js.map +1 -1
  34. package/internal/cli/project-creation.js +14 -14
  35. package/internal/cli/project-creation.js.map +1 -1
  36. package/internal/constants.d.ts.map +1 -1
  37. package/internal/constants.js +1 -0
  38. package/internal/constants.js.map +1 -1
  39. package/internal/context.d.ts +1 -2
  40. package/internal/context.d.ts.map +1 -1
  41. package/internal/context.js +3 -3
  42. package/internal/context.js.map +1 -1
  43. package/internal/core/config/config-loading.d.ts +3 -2
  44. package/internal/core/config/config-loading.d.ts.map +1 -1
  45. package/internal/core/config/config-loading.js +25 -8
  46. package/internal/core/config/config-loading.js.map +1 -1
  47. package/internal/core/config/config-resolution.d.ts.map +1 -1
  48. package/internal/core/config/config-resolution.js +29 -12
  49. package/internal/core/config/config-resolution.js.map +1 -1
  50. package/internal/core/config/config-validation.d.ts.map +1 -1
  51. package/internal/core/config/config-validation.js +68 -30
  52. package/internal/core/config/config-validation.js.map +1 -1
  53. package/internal/core/config/default-config.d.ts.map +1 -1
  54. package/internal/core/config/default-config.js +59 -1
  55. package/internal/core/config/default-config.js.map +1 -1
  56. package/internal/core/errors.js +3 -3
  57. package/internal/core/errors.js.map +1 -1
  58. package/internal/core/execution-mode.js +2 -2
  59. package/internal/core/execution-mode.js.map +1 -1
  60. package/internal/core/jsonrpc/types/access-list.d.ts +0 -1
  61. package/internal/core/jsonrpc/types/access-list.d.ts.map +1 -1
  62. package/internal/core/jsonrpc/types/access-list.js +1 -1
  63. package/internal/core/jsonrpc/types/access-list.js.map +1 -1
  64. package/internal/core/jsonrpc/types/base-types.js +9 -9
  65. package/internal/core/jsonrpc/types/base-types.js.map +1 -1
  66. package/internal/core/jsonrpc/types/input/blockTag.d.ts +3 -4
  67. package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -1
  68. package/internal/core/jsonrpc/types/input/blockTag.js +3 -3
  69. package/internal/core/jsonrpc/types/input/blockTag.js.map +1 -1
  70. package/internal/core/jsonrpc/types/input/callRequest.d.ts +0 -1
  71. package/internal/core/jsonrpc/types/input/callRequest.d.ts.map +1 -1
  72. package/internal/core/jsonrpc/types/input/callRequest.js +9 -9
  73. package/internal/core/jsonrpc/types/input/callRequest.js.map +1 -1
  74. package/internal/core/jsonrpc/types/input/debugTraceTransaction.js +4 -4
  75. package/internal/core/jsonrpc/types/input/debugTraceTransaction.js.map +1 -1
  76. package/internal/core/jsonrpc/types/input/filterRequest.d.ts +0 -1
  77. package/internal/core/jsonrpc/types/input/filterRequest.d.ts.map +1 -1
  78. package/internal/core/jsonrpc/types/input/filterRequest.js +2 -2
  79. package/internal/core/jsonrpc/types/input/filterRequest.js.map +1 -1
  80. package/internal/core/jsonrpc/types/input/hardhat-network.js +4 -4
  81. package/internal/core/jsonrpc/types/input/hardhat-network.js.map +1 -1
  82. package/internal/core/jsonrpc/types/input/logAddress.js +1 -1
  83. package/internal/core/jsonrpc/types/input/logAddress.js.map +1 -1
  84. package/internal/core/jsonrpc/types/input/logTopics.js +1 -1
  85. package/internal/core/jsonrpc/types/input/logTopics.js.map +1 -1
  86. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts +0 -1
  87. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts.map +1 -1
  88. package/internal/core/jsonrpc/types/input/transactionRequest.js +10 -10
  89. package/internal/core/jsonrpc/types/input/transactionRequest.js.map +1 -1
  90. package/internal/core/jsonrpc/types/output/block.d.ts +0 -1
  91. package/internal/core/jsonrpc/types/output/block.d.ts.map +1 -1
  92. package/internal/core/jsonrpc/types/output/block.js +5 -5
  93. package/internal/core/jsonrpc/types/output/block.js.map +1 -1
  94. package/internal/core/jsonrpc/types/output/log.d.ts +0 -1
  95. package/internal/core/jsonrpc/types/output/log.d.ts.map +1 -1
  96. package/internal/core/jsonrpc/types/output/log.js +5 -5
  97. package/internal/core/jsonrpc/types/output/log.js.map +1 -1
  98. package/internal/core/jsonrpc/types/output/receipt.d.ts +0 -1
  99. package/internal/core/jsonrpc/types/output/receipt.d.ts.map +1 -1
  100. package/internal/core/jsonrpc/types/output/receipt.js +6 -6
  101. package/internal/core/jsonrpc/types/output/receipt.js.map +1 -1
  102. package/internal/core/jsonrpc/types/output/transaction.d.ts +0 -1
  103. package/internal/core/jsonrpc/types/output/transaction.d.ts.map +1 -1
  104. package/internal/core/jsonrpc/types/output/transaction.js +9 -9
  105. package/internal/core/jsonrpc/types/output/transaction.js.map +1 -1
  106. package/internal/core/params/argumentTypes.d.ts.map +1 -1
  107. package/internal/core/params/argumentTypes.js +25 -13
  108. package/internal/core/params/argumentTypes.js.map +1 -1
  109. package/internal/core/params/env-variables.d.ts.map +1 -1
  110. package/internal/core/params/env-variables.js +9 -5
  111. package/internal/core/params/env-variables.js.map +1 -1
  112. package/internal/core/project-structure.js +1 -1
  113. package/internal/core/project-structure.js.map +1 -1
  114. package/internal/core/providers/accounts.d.ts.map +1 -1
  115. package/internal/core/providers/accounts.js +9 -8
  116. package/internal/core/providers/accounts.js.map +1 -1
  117. package/internal/core/providers/backwards-compatibility.js.map +1 -1
  118. package/internal/core/providers/chainId.js +3 -3
  119. package/internal/core/providers/chainId.js.map +1 -1
  120. package/internal/core/providers/construction.d.ts.map +1 -1
  121. package/internal/core/providers/construction.js +4 -4
  122. package/internal/core/providers/construction.js.map +1 -1
  123. package/internal/core/providers/gas-providers.d.ts.map +1 -1
  124. package/internal/core/providers/gas-providers.js +19 -17
  125. package/internal/core/providers/gas-providers.js.map +1 -1
  126. package/internal/core/providers/http.js +1 -1
  127. package/internal/core/providers/http.js.map +1 -1
  128. package/internal/core/providers/util.js +1 -1
  129. package/internal/core/providers/util.js.map +1 -1
  130. package/internal/core/providers/wrapper.d.ts.map +1 -1
  131. package/internal/core/runtime-environment.d.ts.map +1 -1
  132. package/internal/core/runtime-environment.js +7 -5
  133. package/internal/core/runtime-environment.js.map +1 -1
  134. package/internal/core/typescript-support.js +4 -4
  135. package/internal/core/typescript-support.js.map +1 -1
  136. package/internal/hardhat-network/jsonrpc/client.js +23 -23
  137. package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
  138. package/internal/hardhat-network/jsonrpc/handler.d.ts +1 -1
  139. package/internal/hardhat-network/jsonrpc/handler.d.ts.map +1 -1
  140. package/internal/hardhat-network/jsonrpc/handler.js +18 -9
  141. package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
  142. package/internal/hardhat-network/jsonrpc/server.js +3 -3
  143. package/internal/hardhat-network/jsonrpc/server.js.map +1 -1
  144. package/internal/hardhat-network/provider/BlockchainData.d.ts +1 -1
  145. package/internal/hardhat-network/provider/BlockchainData.js +12 -12
  146. package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
  147. package/internal/hardhat-network/provider/HardhatBlockchain.js +2 -2
  148. package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
  149. package/internal/hardhat-network/provider/PoolState.js +6 -6
  150. package/internal/hardhat-network/provider/PoolState.js.map +1 -1
  151. package/internal/hardhat-network/provider/TxPool.js +19 -19
  152. package/internal/hardhat-network/provider/TxPool.js.map +1 -1
  153. package/internal/hardhat-network/provider/filter.js +3 -3
  154. package/internal/hardhat-network/provider/filter.js.map +1 -1
  155. package/internal/hardhat-network/provider/fork/AccountState.js +4 -4
  156. package/internal/hardhat-network/provider/fork/AccountState.js.map +1 -1
  157. package/internal/hardhat-network/provider/fork/ForkBlockchain.js +7 -7
  158. package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
  159. package/internal/hardhat-network/provider/fork/ForkStateManager.js +34 -34
  160. package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
  161. package/internal/hardhat-network/provider/fork/random.d.ts +0 -1
  162. package/internal/hardhat-network/provider/fork/random.d.ts.map +1 -1
  163. package/internal/hardhat-network/provider/fork/random.js +13 -8
  164. package/internal/hardhat-network/provider/fork/random.js.map +1 -1
  165. package/internal/hardhat-network/provider/fork/rpcToBlockData.js +1 -0
  166. package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -1
  167. package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -1
  168. package/internal/hardhat-network/provider/modules/debug.js +1 -1
  169. package/internal/hardhat-network/provider/modules/debug.js.map +1 -1
  170. package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
  171. package/internal/hardhat-network/provider/modules/eth.js +86 -84
  172. package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
  173. package/internal/hardhat-network/provider/modules/evm.js +9 -9
  174. package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
  175. package/internal/hardhat-network/provider/modules/hardhat.js +16 -16
  176. package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
  177. package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
  178. package/internal/hardhat-network/provider/modules/logger.js +30 -25
  179. package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
  180. package/internal/hardhat-network/provider/modules/net.js +2 -2
  181. package/internal/hardhat-network/provider/modules/net.js.map +1 -1
  182. package/internal/hardhat-network/provider/modules/personal.js +2 -2
  183. package/internal/hardhat-network/provider/modules/personal.js.map +1 -1
  184. package/internal/hardhat-network/provider/modules/web3.js +4 -4
  185. package/internal/hardhat-network/provider/modules/web3.js.map +1 -1
  186. package/internal/hardhat-network/provider/node-types.d.ts +2 -1
  187. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
  188. package/internal/hardhat-network/provider/node.d.ts +7 -1
  189. package/internal/hardhat-network/provider/node.d.ts.map +1 -1
  190. package/internal/hardhat-network/provider/node.js +141 -76
  191. package/internal/hardhat-network/provider/node.js.map +1 -1
  192. package/internal/hardhat-network/provider/output.js +87 -87
  193. package/internal/hardhat-network/provider/output.js.map +1 -1
  194. package/internal/hardhat-network/provider/provider.d.ts +3 -2
  195. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  196. package/internal/hardhat-network/provider/provider.js +5 -3
  197. package/internal/hardhat-network/provider/provider.js.map +1 -1
  198. package/internal/hardhat-network/provider/return-data.js +4 -4
  199. package/internal/hardhat-network/provider/return-data.js.map +1 -1
  200. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
  201. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
  202. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
  203. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +1 -1
  204. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
  205. package/internal/hardhat-network/provider/utils/bnToHex.js +1 -1
  206. package/internal/hardhat-network/provider/utils/bnToHex.js.map +1 -1
  207. package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js.map +1 -1
  208. package/internal/hardhat-network/provider/utils/makeAccount.js +4 -4
  209. package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -1
  210. package/internal/hardhat-network/provider/utils/makeCommon.d.ts +1 -2
  211. package/internal/hardhat-network/provider/utils/makeCommon.d.ts.map +1 -1
  212. package/internal/hardhat-network/provider/utils/makeCommon.js +4 -4
  213. package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
  214. package/internal/hardhat-network/provider/utils/makeForkClient.js +4 -4
  215. package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -1
  216. package/internal/hardhat-network/provider/utils/makeStateTrie.js +1 -1
  217. package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
  218. package/internal/hardhat-network/provider/utils/txMapToArray.js +1 -1
  219. package/internal/hardhat-network/provider/utils/txMapToArray.js.map +1 -1
  220. package/internal/hardhat-network/stack-traces/compiler-to-model.js +4 -4
  221. package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
  222. package/internal/hardhat-network/stack-traces/consoleLogger.js +44 -44
  223. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  224. package/internal/hardhat-network/stack-traces/contracts-identifier.js +6 -6
  225. package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
  226. package/internal/hardhat-network/stack-traces/debug.js +17 -17
  227. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  228. package/internal/hardhat-network/stack-traces/error-inferrer.js +28 -28
  229. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
  230. package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.js +3 -3
  231. package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.js.map +1 -1
  232. package/internal/hardhat-network/stack-traces/model.js +5 -5
  233. package/internal/hardhat-network/stack-traces/model.js.map +1 -1
  234. package/internal/hardhat-network/stack-traces/solidity-errors.js +3 -3
  235. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  236. package/internal/hardhat-network/stack-traces/solidityTracer.js +10 -10
  237. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  238. package/internal/hardhat-network/stack-traces/source-maps.js +7 -7
  239. package/internal/hardhat-network/stack-traces/source-maps.js.map +1 -1
  240. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +5 -5
  241. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
  242. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js +2 -2
  243. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js.map +1 -1
  244. package/internal/hardhat-network/stack-traces/vm-tracer.js +3 -3
  245. package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
  246. package/internal/lib/hardhat-lib.js +3 -3
  247. package/internal/lib/hardhat-lib.js.map +1 -1
  248. package/internal/reset.js +1 -1
  249. package/internal/reset.js.map +1 -1
  250. package/internal/sentry/anonymizer.js.map +1 -1
  251. package/internal/sentry/reporter.js +5 -5
  252. package/internal/sentry/reporter.js.map +1 -1
  253. package/internal/sentry/subprocess.js +2 -2
  254. package/internal/sentry/subprocess.js.map +1 -1
  255. package/internal/sentry/transport.js +1 -1
  256. package/internal/sentry/transport.js.map +1 -1
  257. package/internal/solidity/compilation-job.js +4 -4
  258. package/internal/solidity/compilation-job.js.map +1 -1
  259. package/internal/solidity/compiler/downloader.d.ts +1 -1
  260. package/internal/solidity/compiler/downloader.d.ts.map +1 -1
  261. package/internal/solidity/compiler/downloader.js +21 -7
  262. package/internal/solidity/compiler/downloader.js.map +1 -1
  263. package/internal/solidity/compiler/index.js +1 -1
  264. package/internal/solidity/compiler/index.js.map +1 -1
  265. package/internal/solidity/dependencyGraph.js +2 -1
  266. package/internal/solidity/dependencyGraph.js.map +1 -1
  267. package/internal/solidity/parse.js +3 -2
  268. package/internal/solidity/parse.js.map +1 -1
  269. package/internal/solidity/resolver.js +10 -10
  270. package/internal/solidity/resolver.js.map +1 -1
  271. package/internal/util/abi-helpers.js +1 -1
  272. package/internal/util/abi-helpers.js.map +1 -1
  273. package/internal/util/download.d.ts.map +1 -1
  274. package/internal/util/download.js +12 -1
  275. package/internal/util/download.js.map +1 -1
  276. package/internal/util/global-dir.js +1 -1
  277. package/internal/util/global-dir.js.map +1 -1
  278. package/internal/util/hardforks.d.ts +2 -1
  279. package/internal/util/hardforks.d.ts.map +1 -1
  280. package/internal/util/hardforks.js +3 -1
  281. package/internal/util/hardforks.js.map +1 -1
  282. package/internal/util/jsonrpc.js +1 -1
  283. package/internal/util/jsonrpc.js.map +1 -1
  284. package/internal/util/packageInfo.js +1 -1
  285. package/internal/util/packageInfo.js.map +1 -1
  286. package/internal/util/scripts-runner.js +3 -3
  287. package/internal/util/scripts-runner.js.map +1 -1
  288. package/package.json +14 -14
  289. package/register.js +7 -7
  290. package/register.js.map +1 -1
  291. package/src/builtin-tasks/flatten.ts +4 -2
  292. package/src/builtin-tasks/node.ts +15 -8
  293. package/src/builtin-tasks/run.ts +13 -8
  294. package/src/builtin-tasks/test.ts +2 -0
  295. package/src/builtin-tasks/utils/watch.ts +3 -1
  296. package/src/internal/artifacts.ts +3 -3
  297. package/src/internal/cli/autocomplete.ts +3 -3
  298. package/src/internal/cli/bootstrap.ts +1 -1
  299. package/src/internal/cli/cli.ts +4 -1
  300. package/src/internal/cli/project-creation.ts +3 -3
  301. package/src/internal/constants.ts +1 -0
  302. package/src/internal/context.ts +1 -1
  303. package/src/internal/core/config/config-loading.ts +33 -3
  304. package/src/internal/core/config/config-resolution.ts +33 -3
  305. package/src/internal/core/config/config-validation.ts +70 -0
  306. package/src/internal/core/config/default-config.ts +59 -1
  307. package/src/internal/core/execution-mode.ts +1 -1
  308. package/src/internal/core/params/argumentTypes.ts +40 -25
  309. package/src/internal/core/params/env-variables.ts +13 -8
  310. package/src/internal/core/providers/accounts.ts +4 -3
  311. package/src/internal/core/providers/backwards-compatibility.ts +1 -1
  312. package/src/internal/core/providers/chainId.ts +1 -1
  313. package/src/internal/core/providers/construction.ts +1 -0
  314. package/src/internal/core/providers/gas-providers.ts +6 -4
  315. package/src/internal/core/providers/http.ts +1 -1
  316. package/src/internal/core/providers/wrapper.ts +1 -1
  317. package/src/internal/core/runtime-environment.ts +3 -1
  318. package/src/internal/core/typescript-support.ts +2 -2
  319. package/src/internal/hardhat-network/jsonrpc/client.ts +2 -2
  320. package/src/internal/hardhat-network/jsonrpc/handler.ts +13 -3
  321. package/src/internal/hardhat-network/jsonrpc/server.ts +3 -3
  322. package/src/internal/hardhat-network/provider/TxPool.ts +1 -1
  323. package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +1 -1
  324. package/src/internal/hardhat-network/provider/modules/eth.ts +23 -21
  325. package/src/internal/hardhat-network/provider/modules/hardhat.ts +1 -1
  326. package/src/internal/hardhat-network/provider/modules/logger.ts +13 -9
  327. package/src/internal/hardhat-network/provider/node-types.ts +2 -1
  328. package/src/internal/hardhat-network/provider/node.ts +149 -31
  329. package/src/internal/hardhat-network/provider/provider.ts +4 -1
  330. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +1 -1
  331. package/src/internal/hardhat-network/provider/utils/makeCommon.ts +2 -2
  332. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +1 -1
  333. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +3 -3
  334. package/src/internal/reset.ts +1 -1
  335. package/src/internal/sentry/subprocess.ts +2 -2
  336. package/src/internal/solidity/compiler/downloader.ts +27 -12
  337. package/src/internal/solidity/resolver.ts +1 -1
  338. package/src/internal/util/abi-helpers.ts +1 -1
  339. package/src/internal/util/download.ts +17 -1
  340. package/src/internal/util/hardforks.ts +2 -0
  341. package/src/internal/util/jsonrpc.ts +1 -1
  342. package/src/internal/util/packageInfo.ts +1 -1
  343. package/src/internal/util/scripts-runner.ts +1 -1
  344. package/src/types/config.ts +28 -0
  345. package/src/utils/source-names.ts +13 -11
  346. package/types/config.d.ts +16 -0
  347. package/types/config.d.ts.map +1 -1
  348. package/utils/source-names.js +7 -5
  349. package/utils/source-names.js.map +1 -1
  350. package/CHANGELOG.md +0 -71
  351. package/internal/hardhat-network/provider/HardhatStateManager.d.ts +0 -50
  352. package/internal/hardhat-network/provider/HardhatStateManager.d.ts.map +0 -1
  353. package/internal/hardhat-network/provider/HardhatStateManager.js +0 -249
  354. package/internal/hardhat-network/provider/HardhatStateManager.js.map +0 -1
  355. package/src/internal/hardhat-network/provider/HardhatStateManager.ts +0 -349
@@ -41,13 +41,13 @@ export function isTypescriptSupported() {
41
41
  export function loadTsNode(tsConfigPath?: string) {
42
42
  try {
43
43
  require.resolve("typescript");
44
- } catch (error) {
44
+ } catch {
45
45
  throw new HardhatError(ERRORS.GENERAL.TYPESCRIPT_NOT_INSTALLED);
46
46
  }
47
47
 
48
48
  try {
49
49
  require.resolve("ts-node");
50
- } catch (error) {
50
+ } catch {
51
51
  throw new HardhatError(ERRORS.GENERAL.TS_NODE_NOT_INSTALLED);
52
52
  }
53
53
 
@@ -317,7 +317,7 @@ export class JsonRpcClient {
317
317
  ): Promise<any> {
318
318
  try {
319
319
  return await this._httpProvider.request({ method, params });
320
- } catch (err) {
320
+ } catch (err: any) {
321
321
  if (this._shouldRetry(isRetryCall, err)) {
322
322
  return this._send(method, params, true);
323
323
  }
@@ -429,7 +429,7 @@ export class JsonRpcClient {
429
429
  encoding: "utf8",
430
430
  }
431
431
  );
432
- } catch (error) {
432
+ } catch (error: any) {
433
433
  if (error.code === "ENOENT") {
434
434
  return undefined;
435
435
  }
@@ -20,7 +20,7 @@ import {
20
20
 
21
21
  /* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
22
22
 
23
- export default class JsonRpcHandler {
23
+ export class JsonRpcHandler {
24
24
  constructor(private readonly _provider: EIP1193Provider) {}
25
25
 
26
26
  public handleHttp = async (req: IncomingMessage, res: ServerResponse) => {
@@ -207,7 +207,12 @@ const _readJsonHttpRequest = async (req: IncomingMessage): Promise<any> => {
207
207
 
208
208
  json = JSON.parse(text);
209
209
  } catch (error) {
210
- throw new InvalidJsonInputError(`Parse error: ${error.message}`);
210
+ if (error instanceof Error) {
211
+ throw new InvalidJsonInputError(`Parse error: ${error.message}`);
212
+ }
213
+
214
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
215
+ throw error;
211
216
  }
212
217
 
213
218
  return json;
@@ -218,7 +223,12 @@ const _readWsRequest = (msg: string): JsonRpcRequest => {
218
223
  try {
219
224
  json = JSON.parse(msg);
220
225
  } catch (error) {
221
- throw new InvalidJsonInputError(`Parse error: ${error.message}`);
226
+ if (error instanceof Error) {
227
+ throw new InvalidJsonInputError(`Parse error: ${error.message}`);
228
+ }
229
+
230
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
231
+ throw error;
222
232
  }
223
233
 
224
234
  return json;
@@ -9,7 +9,7 @@ import {
9
9
  } from "../../../types";
10
10
  import { HttpProvider } from "../../core/providers/http";
11
11
 
12
- import JsonRpcHandler from "./handler";
12
+ import { JsonRpcHandler } from "./handler";
13
13
 
14
14
  const log = debug("hardhat:core:hardhat-network:jsonrpc");
15
15
 
@@ -72,7 +72,7 @@ export class JsonRpcServer implements IJsonRpcServer {
72
72
 
73
73
  public close = async () => {
74
74
  await Promise.all([
75
- new Promise((resolve, reject) => {
75
+ new Promise<void>((resolve, reject) => {
76
76
  log("Closing JSON-RPC server");
77
77
  this._httpServer.close((err) => {
78
78
  if (err !== null && err !== undefined) {
@@ -85,7 +85,7 @@ export class JsonRpcServer implements IJsonRpcServer {
85
85
  resolve();
86
86
  });
87
87
  }),
88
- new Promise((resolve, reject) => {
88
+ new Promise<void>((resolve, reject) => {
89
89
  log("Closing websocket server");
90
90
  this._wsServer.close((err) => {
91
91
  if (err !== null && err !== undefined) {
@@ -332,7 +332,7 @@ export class TxPool {
332
332
  private _getSenderAddress(tx: TypedTransaction): Address {
333
333
  try {
334
334
  return tx.getSenderAddress(); // verifies signature
335
- } catch (e) {
335
+ } catch (e: any) {
336
336
  if (!tx.isSigned()) {
337
337
  throw new InvalidInputError("Invalid Signature");
338
338
  }
@@ -272,7 +272,7 @@ export class ForkBlockchain implements HardhatBlockchainInterface {
272
272
  // one for London.
273
273
  const common = this._common.copy();
274
274
  if (rpcBlock.baseFeePerGas !== undefined) {
275
- common.setHardfork("london");
275
+ common.setHardfork("london"); // TODO: consider changing this to "latest hardfork"
276
276
  } else {
277
277
  common.setHardfork("berlin");
278
278
  }
@@ -959,29 +959,31 @@ export class EthModule {
959
959
  // AccessListEIP2930Transaction.fromSerializedTx and Transaction.fromSerializedTx
960
960
  // Please keep it updated.
961
961
 
962
- if (error.message === "invalid remainder") {
963
- throw new InvalidArgumentsError("Invalid transaction", error);
964
- }
962
+ if (error instanceof Error) {
963
+ if (error.message === "invalid remainder") {
964
+ throw new InvalidArgumentsError("Invalid transaction", error);
965
+ }
965
966
 
966
- if (error.message.includes("Incompatible EIP155")) {
967
- throw new InvalidArgumentsError(
968
- "Trying to send an incompatible EIP-155 transaction, signed for another chain.",
969
- error
970
- );
971
- }
967
+ if (error.message.includes("Incompatible EIP155")) {
968
+ throw new InvalidArgumentsError(
969
+ "Trying to send an incompatible EIP-155 transaction, signed for another chain.",
970
+ error
971
+ );
972
+ }
972
973
 
973
- if (
974
- error.message.includes("TypedTransaction with ID") &&
975
- error.message.includes(" unknown")
976
- ) {
977
- throw new InvalidArgumentsError(`Invalid transaction`, error);
978
- }
974
+ if (
975
+ error.message.includes("TypedTransaction with ID") &&
976
+ error.message.includes(" unknown")
977
+ ) {
978
+ throw new InvalidArgumentsError(`Invalid transaction`, error);
979
+ }
979
980
 
980
- if (error.message.includes("The chain ID does not match")) {
981
- throw new InvalidArgumentsError(
982
- `Trying to send a raw transaction with an invalid chainId. The expected chainId is ${this._common.chainIdBN()}`,
983
- error
984
- );
981
+ if (error.message.includes("The chain ID does not match")) {
982
+ throw new InvalidArgumentsError(
983
+ `Trying to send a raw transaction with an invalid chainId. The expected chainId is ${this._common.chainIdBN()}`,
984
+ error
985
+ );
986
+ }
985
987
  }
986
988
 
987
989
  throw error;
@@ -1065,7 +1067,7 @@ export class EthModule {
1065
1067
  if (typeof typedData === "string") {
1066
1068
  try {
1067
1069
  typedMessage = JSON.parse(typedData);
1068
- } catch (error) {
1070
+ } catch {
1069
1071
  throw new InvalidInputError(
1070
1072
  `The message parameter is an invalid JSON. Either pass a valid JSON or a plain object conforming to EIP712 TypedData schema.`
1071
1073
  );
@@ -245,7 +245,7 @@ export class HardhatModule {
245
245
 
246
246
  if (this._node.isEip1559Active()) {
247
247
  throw new InvalidInputError(
248
- "hardhat_setMinGasPrice is not support when EIP-1559 is active"
248
+ "hardhat_setMinGasPrice is not supported when EIP-1559 is active"
249
249
  );
250
250
  }
251
251
 
@@ -35,15 +35,19 @@ function printLine(line: string) {
35
35
  }
36
36
 
37
37
  function replaceLastLine(newLine: string) {
38
- process.stdout.write(
39
- // eslint-disable-next-line prefer-template
40
- ansiEscapes.cursorHide +
41
- ansiEscapes.cursorPrevLine +
42
- newLine +
43
- ansiEscapes.eraseEndLine +
44
- "\n" +
45
- ansiEscapes.cursorShow
46
- );
38
+ if (process.stdout.isTTY === true) {
39
+ process.stdout.write(
40
+ // eslint-disable-next-line prefer-template
41
+ ansiEscapes.cursorHide +
42
+ ansiEscapes.cursorPrevLine +
43
+ newLine +
44
+ ansiEscapes.eraseEndLine +
45
+ "\n" +
46
+ ansiEscapes.cursorShow
47
+ );
48
+ } else {
49
+ process.stdout.write(`${newLine}\n`);
50
+ }
47
51
  }
48
52
 
49
53
  /**
@@ -2,8 +2,8 @@ import { Block } from "@ethereumjs/block";
2
2
  import { RunBlockResult } from "@ethereumjs/vm/dist/runBlock";
3
3
  import { BN } from "ethereumjs-util";
4
4
 
5
- import { BuildInfo } from "../../../types";
6
5
  import { HARDHAT_MEMPOOL_SUPPORTED_ORDERS } from "../../constants";
6
+ import { BuildInfo, HardhatNetworkChainsConfig } from "../../../types";
7
7
  import { MessageTrace } from "../stack-traces/message-trace";
8
8
 
9
9
  import type { ReturnData } from "./return-data";
@@ -31,6 +31,7 @@ interface CommonConfig {
31
31
  initialBaseFeePerGas?: number;
32
32
  mempoolOrder: MempoolOrder;
33
33
  coinbase: string;
34
+ chains: HardhatNetworkChainsConfig;
34
35
  }
35
36
 
36
37
  export type LocalNodeConfig = CommonConfig;
@@ -11,7 +11,7 @@ import Bloom from "@ethereumjs/vm/dist/bloom";
11
11
  import { EVMResult, ExecResult } from "@ethereumjs/vm/dist/evm/evm";
12
12
  import { ERROR } from "@ethereumjs/vm/dist/exceptions";
13
13
  import { RunBlockResult } from "@ethereumjs/vm/dist/runBlock";
14
- import { StateManager } from "@ethereumjs/vm/dist/state";
14
+ import { DefaultStateManager, StateManager } from "@ethereumjs/vm/dist/state";
15
15
  import chalk from "chalk";
16
16
  import debug from "debug";
17
17
  import {
@@ -27,6 +27,8 @@ import {
27
27
  import EventEmitter from "events";
28
28
 
29
29
  import { CompilerInput, CompilerOutput } from "../../../types";
30
+ import { HardforkHistoryConfig } from "../../../types/config";
31
+ import { HARDHAT_NETWORK_SUPPORTED_HARDFORKS } from "../../constants";
30
32
  import {
31
33
  HARDHAT_NETWORK_DEFAULT_INITIAL_BASE_FEE_PER_GAS,
32
34
  HARDHAT_NETWORK_DEFAULT_MAX_PRIORITY_FEE_PER_GAS,
@@ -73,7 +75,6 @@ import { bloomFilter, Filter, filterLogs, LATEST_BLOCK, Type } from "./filter";
73
75
  import { ForkBlockchain } from "./fork/ForkBlockchain";
74
76
  import { ForkStateManager } from "./fork/ForkStateManager";
75
77
  import { HardhatBlockchain } from "./HardhatBlockchain";
76
- import { HardhatStateManager } from "./HardhatStateManager";
77
78
  import {
78
79
  CallParams,
79
80
  EstimateGasResult,
@@ -108,6 +109,7 @@ import { HardhatBlockchainInterface } from "./types/HardhatBlockchainInterface";
108
109
  import { getCurrentTimestamp } from "./utils/getCurrentTimestamp";
109
110
  import { makeCommon } from "./utils/makeCommon";
110
111
  import { makeForkClient } from "./utils/makeForkClient";
112
+ import { makeStateTrie } from "./utils/makeStateTrie";
111
113
  import { makeForkCommon } from "./utils/makeForkCommon";
112
114
  import { putGenesisBlock } from "./utils/putGenesisBlock";
113
115
  import { txMapToArray } from "./utils/txMapToArray";
@@ -130,6 +132,8 @@ export class HardhatNode extends EventEmitter {
130
132
  tracingConfig,
131
133
  minGasPrice,
132
134
  mempoolOrder,
135
+ networkId,
136
+ chainId,
133
137
  } = config;
134
138
 
135
139
  let common: Common;
@@ -138,6 +142,8 @@ export class HardhatNode extends EventEmitter {
138
142
  let initialBlockTimeOffset: BN | undefined;
139
143
  let nextBlockBaseFeePerGas: BN | undefined;
140
144
  let forkNetworkId: number | undefined;
145
+ let forkBlockNum: number | undefined;
146
+ let hardforkActivations: HardforkHistoryConfig = new Map();
141
147
 
142
148
  const initialBaseFeePerGasConfig =
143
149
  config.initialBaseFeePerGas !== undefined
@@ -152,6 +158,7 @@ export class HardhatNode extends EventEmitter {
152
158
  common = await makeForkCommon(config);
153
159
 
154
160
  forkNetworkId = forkClient.getNetworkId();
161
+ forkBlockNum = forkBlockNumber.toNumber();
155
162
 
156
163
  this._validateHardforks(
157
164
  config.forkConfig.blockNumber,
@@ -189,12 +196,18 @@ export class HardhatNode extends EventEmitter {
189
196
  }
190
197
  }
191
198
  }
199
+
200
+ if (config.chains.has(forkNetworkId)) {
201
+ hardforkActivations = config.chains.get(forkNetworkId)!.hardforkHistory;
202
+ }
192
203
  } else {
193
- const hardhatStateManager = new HardhatStateManager();
194
- await hardhatStateManager.initializeGenesisAccounts(genesisAccounts);
204
+ const stateTrie = await makeStateTrie(genesisAccounts);
205
+ common = makeCommon(config, stateTrie);
195
206
 
196
- const initialStateRoot = await hardhatStateManager.getStateRoot();
197
- common = makeCommon(config, initialStateRoot);
207
+ stateManager = new DefaultStateManager({
208
+ common,
209
+ trie: stateTrie,
210
+ });
198
211
 
199
212
  const hardhatBlockchain = new HardhatBlockchain();
200
213
 
@@ -219,7 +232,6 @@ export class HardhatNode extends EventEmitter {
219
232
  }
220
233
 
221
234
  blockchain = hardhatBlockchain;
222
- stateManager = hardhatStateManager;
223
235
  }
224
236
 
225
237
  const txPool = new TxPool(stateManager, new BN(blockGasLimit), common);
@@ -243,8 +255,12 @@ export class HardhatNode extends EventEmitter {
243
255
  mempoolOrder,
244
256
  config.coinbase,
245
257
  genesisAccounts,
258
+ networkId,
259
+ chainId,
260
+ hardforkActivations,
246
261
  tracingConfig,
247
262
  forkNetworkId,
263
+ forkBlockNum,
248
264
  nextBlockBaseFeePerGas
249
265
  );
250
266
 
@@ -268,7 +284,7 @@ The hardfork must be at least spuriousDragon, but ${common.hardfork()} was given
268
284
  let upstreamCommon: Common;
269
285
  try {
270
286
  upstreamCommon = new Common({ chain: remoteChainId });
271
- } catch (error) {
287
+ } catch {
272
288
  // If ethereumjs doesn't have a common it will throw and we won't have
273
289
  // info about the activation block of each hardfork, so we don't run
274
290
  // this validation.
@@ -318,8 +334,12 @@ Hardhat Network's forking functionality only works with blocks from at least spu
318
334
  private _mempoolOrder: MempoolOrder,
319
335
  private _coinbase: string,
320
336
  genesisAccounts: GenesisAccount[],
337
+ private readonly _configNetworkId: number,
338
+ private readonly _configChainId: number,
339
+ private readonly _hardforkActivations: HardforkHistoryConfig,
321
340
  tracingConfig?: TracingConfig,
322
341
  private _forkNetworkId?: number,
342
+ private _forkBlockNumber?: number,
323
343
  nextBlockBaseFee?: BN
324
344
  ) {
325
345
  super();
@@ -369,7 +389,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
369
389
  error
370
390
  );
371
391
 
372
- Reporter.reportError(error);
392
+ if (error instanceof Error) {
393
+ Reporter.reportError(error);
394
+ }
373
395
  }
374
396
  }
375
397
 
@@ -436,16 +458,21 @@ Hardhat Network's forking functionality only works with blocks from at least spu
436
458
  try {
437
459
  result = await this._mineBlockWithPendingTxs(blockTimestamp);
438
460
  } catch (err) {
439
- if (err?.message.includes("sender doesn't have enough funds")) {
440
- throw new InvalidInputError(err.message, err);
441
- }
461
+ if (err instanceof Error) {
462
+ if (err?.message.includes("sender doesn't have enough funds")) {
463
+ throw new InvalidInputError(err.message, err);
464
+ }
442
465
 
443
- // Some network errors are HardhatErrors, and can end up here when forking
444
- if (HardhatError.isHardhatError(err)) {
445
- throw err;
466
+ // Some network errors are HardhatErrors, and can end up here when forking
467
+ if (HardhatError.isHardhatError(err)) {
468
+ throw err;
469
+ }
470
+
471
+ throw new TransactionExecutionError(err);
446
472
  }
447
473
 
448
- throw new TransactionExecutionError(err);
474
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
475
+ throw err;
449
476
  }
450
477
 
451
478
  await this._saveBlockAsSuccessfullyRun(result.block, result.blockResult);
@@ -475,7 +502,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
475
502
  blockNumberOrPending
476
503
  );
477
504
 
478
- if (call.gasPrice !== undefined || !this.isEip1559Active()) {
505
+ if (
506
+ call.gasPrice !== undefined ||
507
+ !this.isEip1559Active(blockNumberOrPending)
508
+ ) {
479
509
  txParams = {
480
510
  gasPrice: new BN(0),
481
511
  nonce,
@@ -1214,7 +1244,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1214
1244
  "this._forkNetworkId should exist if the blockchain is an instance of ForkBlockchain"
1215
1245
  );
1216
1246
 
1217
- const common = getCommonForTracing(this._forkNetworkId, blockNumber);
1247
+ const common = this._getCommonForTracing(
1248
+ this._forkNetworkId,
1249
+ blockNumber
1250
+ );
1218
1251
 
1219
1252
  vm = new VM({
1220
1253
  common,
@@ -1508,7 +1541,12 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1508
1541
  try {
1509
1542
  sender = tx.getSenderAddress(); // verifies signature as a side effect
1510
1543
  } catch (e) {
1511
- throw new InvalidInputError(e.message);
1544
+ if (e instanceof Error) {
1545
+ throw new InvalidInputError(e.message);
1546
+ }
1547
+
1548
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
1549
+ throw e;
1512
1550
  }
1513
1551
 
1514
1552
  // validate nonce
@@ -2139,6 +2177,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
2139
2177
  const initialStateRoot = await this._stateManager.getStateRoot();
2140
2178
 
2141
2179
  let blockContext: Block | undefined;
2180
+ let originalCommon: Common | undefined;
2142
2181
 
2143
2182
  try {
2144
2183
  if (blockNumberOrPending === "pending") {
@@ -2173,7 +2212,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
2173
2212
  // eth_call. This will make the BASEFEE option also return 0, which
2174
2213
  // shouldn't. See: https://github.com/nomiclabs/hardhat/issues/1688
2175
2214
  if (
2176
- this.isEip1559Active() &&
2215
+ this.isEip1559Active(blockNumberOrPending) &&
2177
2216
  (blockContext.header.baseFeePerGas === undefined || forceBaseFeeZero)
2178
2217
  ) {
2179
2218
  blockContext = Block.fromBlockData(blockContext, {
@@ -2184,6 +2223,17 @@ Hardhat Network's forking functionality only works with blocks from at least spu
2184
2223
  (blockContext.header as any).baseFeePerGas = new BN(0);
2185
2224
  }
2186
2225
 
2226
+ originalCommon = (this._vm as any)._common;
2227
+ (this._vm as any)._common = new Common({
2228
+ chain: {
2229
+ // eslint-disable-next-line @typescript-eslint/dot-notation
2230
+ ...this._vm._common["_chainParams"],
2231
+ chainId: this._forkNetworkId ?? this._configChainId,
2232
+ networkId: this._forkNetworkId ?? this._configNetworkId,
2233
+ },
2234
+ hardfork: this._selectHardfork(blockContext.header.number),
2235
+ });
2236
+
2187
2237
  return await this._vm.runTx({
2188
2238
  block: blockContext,
2189
2239
  tx,
@@ -2192,6 +2242,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
2192
2242
  skipBlockGasLimitValidation: true,
2193
2243
  });
2194
2244
  } finally {
2245
+ if (originalCommon !== undefined) {
2246
+ (this._vm as any)._common = originalCommon;
2247
+ }
2195
2248
  await this._stateManager.setStateRoot(initialStateRoot);
2196
2249
  }
2197
2250
  }
@@ -2287,7 +2340,16 @@ Hardhat Network's forking functionality only works with blocks from at least spu
2287
2340
  );
2288
2341
  }
2289
2342
 
2290
- public isEip1559Active(): boolean {
2343
+ public isEip1559Active(blockNumberOrPending?: BN | "pending"): boolean {
2344
+ if (
2345
+ blockNumberOrPending !== undefined &&
2346
+ blockNumberOrPending !== "pending"
2347
+ ) {
2348
+ return this._vm._common.hardforkGteHardfork(
2349
+ this._selectHardfork(blockNumberOrPending),
2350
+ "london"
2351
+ );
2352
+ }
2291
2353
  return this._vm._common.gteHardfork("london");
2292
2354
  }
2293
2355
 
@@ -2297,7 +2359,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
2297
2359
  ): Promise<
2298
2360
  { gasPrice: BN } | { maxFeePerGas: BN; maxPriorityFeePerGas: BN }
2299
2361
  > {
2300
- if (!this.isEip1559Active() || callParams.gasPrice !== undefined) {
2362
+ if (
2363
+ !this.isEip1559Active(blockNumberOrPending) ||
2364
+ callParams.gasPrice !== undefined
2365
+ ) {
2301
2366
  return { gasPrice: callParams.gasPrice ?? (await this.getGasPrice()) };
2302
2367
  }
2303
2368
 
@@ -2327,18 +2392,71 @@ Hardhat Network's forking functionality only works with blocks from at least spu
2327
2392
 
2328
2393
  return { maxFeePerGas, maxPriorityFeePerGas };
2329
2394
  }
2330
- }
2331
2395
 
2332
- function getCommonForTracing(networkId: number, blockNumber: number): Common {
2333
- try {
2334
- const common = new Common({ chain: networkId });
2396
+ private _selectHardfork(blockNumber: BN): string {
2397
+ if (
2398
+ this._forkBlockNumber === undefined ||
2399
+ blockNumber.gte(new BN(this._forkBlockNumber))
2400
+ ) {
2401
+ return this._vm._common.hardfork() as HardforkName;
2402
+ }
2335
2403
 
2336
- common.setHardfork(common.activeHardfork(blockNumber));
2404
+ if (this._hardforkActivations.size === 0) {
2405
+ throw new InternalError(
2406
+ `No known hardfork for execution on historical block ${blockNumber.toString()} (relative to fork block number ${
2407
+ this._forkBlockNumber
2408
+ }). The node was not configured with a hardfork activation history. See http://hardhat.org/hardhat-network/guides/mainnet-forking.html#using-a-custom-hardfork-history`
2409
+ );
2410
+ }
2337
2411
 
2338
- return common;
2339
- } catch (e) {
2340
- throw new InternalError(
2341
- `Network id ${networkId} does not correspond to a network that Hardhat can trace`
2412
+ /** search this._hardforkActivations for the highest block number that
2413
+ * isn't higher than blockNumber, and then return that found block number's
2414
+ * associated hardfork name. */
2415
+ const hardforkHistory: Array<[name: string, block: number]> = Array.from(
2416
+ this._hardforkActivations.entries()
2342
2417
  );
2418
+ const [hardfork, activationBlock] = hardforkHistory.reduce(
2419
+ ([highestHardfork, highestBlock], [thisHardfork, thisBlock]) =>
2420
+ thisBlock > highestBlock && new BN(thisBlock).lte(blockNumber)
2421
+ ? [thisHardfork, thisBlock]
2422
+ : [highestHardfork, highestBlock]
2423
+ );
2424
+ if (hardfork === undefined || blockNumber.ltn(activationBlock)) {
2425
+ throw new InternalError(
2426
+ `Could not find a hardfork to run for block ${blockNumber}, after having looked for one in the HardhatNode's hardfork activation history, which was: ${JSON.stringify(
2427
+ hardforkHistory
2428
+ )}. For more information, see https://hardhat.org/hardhat-network/reference/#config`
2429
+ );
2430
+ }
2431
+
2432
+ if (!HARDHAT_NETWORK_SUPPORTED_HARDFORKS.includes(hardfork)) {
2433
+ throw new InternalError(
2434
+ `Tried to run a call or transaction in the context of a block whose hardfork is "${hardfork}", but Hardhat Network only supports the following hardforks: ${HARDHAT_NETWORK_SUPPORTED_HARDFORKS.join(
2435
+ ", "
2436
+ )}`
2437
+ );
2438
+ }
2439
+
2440
+ return hardfork;
2441
+ }
2442
+
2443
+ private _getCommonForTracing(networkId: number, blockNumber: number): Common {
2444
+ try {
2445
+ const common = new Common({
2446
+ chain: {
2447
+ // eslint-disable-next-line @typescript-eslint/dot-notation
2448
+ ...Common["_getChainParams"]("mainnet"),
2449
+ chainId: networkId,
2450
+ networkId,
2451
+ },
2452
+ hardfork: this._selectHardfork(new BN(blockNumber)),
2453
+ });
2454
+
2455
+ return common;
2456
+ } catch {
2457
+ throw new InternalError(
2458
+ `Network id ${networkId} does not correspond to a network that Hardhat can trace`
2459
+ );
2460
+ }
2343
2461
  }
2344
2462
  }
@@ -11,6 +11,7 @@ import type {
11
11
  BoundExperimentalHardhatNetworkMessageTraceHook,
12
12
  EIP1193Provider,
13
13
  EthSubscription,
14
+ HardhatNetworkChainsConfig,
14
15
  RequestArguments,
15
16
  } from "../../../types";
16
17
  import {
@@ -85,6 +86,7 @@ export class HardhatNetworkProvider
85
86
  private readonly _automine: boolean,
86
87
  private readonly _intervalMining: IntervalMiningConfig,
87
88
  private readonly _mempoolOrder: MempoolOrder,
89
+ private readonly _chains: HardhatNetworkChainsConfig,
88
90
  private readonly _logger: ModulesLogger,
89
91
  private readonly _genesisAccounts: GenesisAccount[] = [],
90
92
  private readonly _artifacts?: Artifacts,
@@ -164,7 +166,7 @@ export class HardhatNetworkProvider
164
166
  this._logger.printFailedMethod(method);
165
167
  this._logger.printLogs();
166
168
 
167
- if (!this._logger.isLoggedError(err)) {
169
+ if (err instanceof Error && !this._logger.isLoggedError(err)) {
168
170
  if (ProviderError.isProviderError(err)) {
169
171
  this._logger.printEmptyLine();
170
172
  this._logger.printErrorMessage(err.message);
@@ -242,6 +244,7 @@ export class HardhatNetworkProvider
242
244
  forkCachePath:
243
245
  this._forkConfig !== undefined ? this._forkCachePath : undefined,
244
246
  coinbase: this._coinbase,
247
+ chains: this._chains,
245
248
  };
246
249
 
247
250
  const [common, node] = await HardhatNode.create(config);
@@ -57,7 +57,7 @@ export class ReadOnlyValidEIP1559Transaction extends FeeMarketEIP1559Transaction
57
57
  constructor(sender: Address, data: FeeMarketEIP1559TxData = {}) {
58
58
  const fakeCommon = new Common({
59
59
  chain: "mainnet",
60
- hardfork: "london",
60
+ hardfork: "london", // TODO: consider chaning this to ["latest hardfork"]
61
61
  });
62
62
 
63
63
  // this class should only be used with txs in a hardfork that
@@ -15,7 +15,7 @@ export function makeCommon(
15
15
  blockGasLimit,
16
16
  hardfork,
17
17
  }: LocalNodeConfig,
18
- stateRoot: Buffer
18
+ stateTrie: any
19
19
  ) {
20
20
  const initialBlockTimestamp =
21
21
  initialDate !== undefined
@@ -35,7 +35,7 @@ export function makeCommon(
35
35
  difficulty: 1,
36
36
  nonce: "0x0000000000000042",
37
37
  extraData: "0x1234",
38
- stateRoot: bufferToHex(stateRoot),
38
+ stateRoot: bufferToHex(stateTrie.root),
39
39
  },
40
40
  },
41
41
  hardfork
@@ -36,7 +36,7 @@ export async function wrapWithSolidityErrorsCorrection(
36
36
 
37
37
  try {
38
38
  return await f();
39
- } catch (error) {
39
+ } catch (error: any) {
40
40
  if (error.stackTrace === undefined) {
41
41
  // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
42
42
  throw error;