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
@@ -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,
@@ -82,6 +84,7 @@ import {
82
84
  GatherTracesResult,
83
85
  GenesisAccount,
84
86
  isForkedNodeConfig,
87
+ MempoolOrder,
85
88
  MineBlockResult,
86
89
  NodeConfig,
87
90
  RunCallResult,
@@ -115,10 +118,6 @@ const log = debug("hardhat:core:hardhat-network:node");
115
118
 
116
119
  const ethSigUtil = require("eth-sig-util");
117
120
 
118
- export const COINBASE_ADDRESS = Address.fromString(
119
- "0xc014ba5ec014ba5ec014ba5ec014ba5ec014ba5e"
120
- );
121
-
122
121
  /* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
123
122
 
124
123
  export class HardhatNode extends EventEmitter {
@@ -132,6 +131,9 @@ export class HardhatNode extends EventEmitter {
132
131
  allowUnlimitedContractSize,
133
132
  tracingConfig,
134
133
  minGasPrice,
134
+ mempoolOrder,
135
+ networkId,
136
+ chainId,
135
137
  } = config;
136
138
 
137
139
  let common: Common;
@@ -140,6 +142,8 @@ export class HardhatNode extends EventEmitter {
140
142
  let initialBlockTimeOffset: BN | undefined;
141
143
  let nextBlockBaseFeePerGas: BN | undefined;
142
144
  let forkNetworkId: number | undefined;
145
+ let forkBlockNum: number | undefined;
146
+ let hardforkActivations: HardforkHistoryConfig = new Map();
143
147
 
144
148
  const initialBaseFeePerGasConfig =
145
149
  config.initialBaseFeePerGas !== undefined
@@ -154,6 +158,7 @@ export class HardhatNode extends EventEmitter {
154
158
  common = await makeForkCommon(config);
155
159
 
156
160
  forkNetworkId = forkClient.getNetworkId();
161
+ forkBlockNum = forkBlockNumber.toNumber();
157
162
 
158
163
  this._validateHardforks(
159
164
  config.forkConfig.blockNumber,
@@ -191,6 +196,10 @@ export class HardhatNode extends EventEmitter {
191
196
  }
192
197
  }
193
198
  }
199
+
200
+ if (config.chains.has(forkNetworkId)) {
201
+ hardforkActivations = config.chains.get(forkNetworkId)!.hardforkHistory;
202
+ }
194
203
  } else {
195
204
  const hardhatStateManager = new HardhatStateManager();
196
205
  await hardhatStateManager.initializeGenesisAccounts(genesisAccounts);
@@ -242,9 +251,15 @@ export class HardhatNode extends EventEmitter {
242
251
  automine,
243
252
  minGasPrice,
244
253
  initialBlockTimeOffset,
254
+ mempoolOrder,
255
+ config.coinbase,
245
256
  genesisAccounts,
257
+ networkId,
258
+ chainId,
259
+ hardforkActivations,
246
260
  tracingConfig,
247
261
  forkNetworkId,
262
+ forkBlockNum,
248
263
  nextBlockBaseFeePerGas
249
264
  );
250
265
 
@@ -268,7 +283,7 @@ The hardfork must be at least spuriousDragon, but ${common.hardfork()} was given
268
283
  let upstreamCommon: Common;
269
284
  try {
270
285
  upstreamCommon = new Common({ chain: remoteChainId });
271
- } catch (error) {
286
+ } catch {
272
287
  // If ethereumjs doesn't have a common it will throw and we won't have
273
288
  // info about the activation block of each hardfork, so we don't run
274
289
  // this validation.
@@ -315,9 +330,15 @@ Hardhat Network's forking functionality only works with blocks from at least spu
315
330
  private _automine: boolean,
316
331
  private _minGasPrice: BN,
317
332
  private _blockTimeOffsetSeconds: BN = new BN(0),
333
+ private _mempoolOrder: MempoolOrder,
334
+ private _coinbase: string,
318
335
  genesisAccounts: GenesisAccount[],
336
+ private readonly _configNetworkId: number,
337
+ private readonly _configChainId: number,
338
+ private readonly _hardforkActivations: HardforkHistoryConfig,
319
339
  tracingConfig?: TracingConfig,
320
340
  private _forkNetworkId?: number,
341
+ private _forkBlockNumber?: number,
321
342
  nextBlockBaseFee?: BN
322
343
  ) {
323
344
  super();
@@ -367,7 +388,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
367
388
  error
368
389
  );
369
390
 
370
- Reporter.reportError(error);
391
+ if (error instanceof Error) {
392
+ Reporter.reportError(error);
393
+ }
371
394
  }
372
395
  }
373
396
 
@@ -434,16 +457,21 @@ Hardhat Network's forking functionality only works with blocks from at least spu
434
457
  try {
435
458
  result = await this._mineBlockWithPendingTxs(blockTimestamp);
436
459
  } catch (err) {
437
- if (err?.message.includes("sender doesn't have enough funds")) {
438
- throw new InvalidInputError(err.message, err);
439
- }
460
+ if (err instanceof Error) {
461
+ if (err?.message.includes("sender doesn't have enough funds")) {
462
+ throw new InvalidInputError(err.message, err);
463
+ }
440
464
 
441
- // Some network errors are HardhatErrors, and can end up here when forking
442
- if (HardhatError.isHardhatError(err)) {
443
- throw err;
465
+ // Some network errors are HardhatErrors, and can end up here when forking
466
+ if (HardhatError.isHardhatError(err)) {
467
+ throw err;
468
+ }
469
+
470
+ throw new TransactionExecutionError(err);
444
471
  }
445
472
 
446
- throw new TransactionExecutionError(err);
473
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
474
+ throw err;
447
475
  }
448
476
 
449
477
  await this._saveBlockAsSuccessfullyRun(result.block, result.blockResult);
@@ -473,7 +501,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
473
501
  blockNumberOrPending
474
502
  );
475
503
 
476
- if (call.gasPrice !== undefined || !this.isEip1559Active()) {
504
+ if (
505
+ call.gasPrice !== undefined ||
506
+ !this.isEip1559Active(blockNumberOrPending)
507
+ ) {
477
508
  txParams = {
478
509
  gasPrice: new BN(0),
479
510
  nonce,
@@ -697,7 +728,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
697
728
  }
698
729
 
699
730
  public getCoinbaseAddress(): Address {
700
- return COINBASE_ADDRESS;
731
+ return Address.fromString(this._coinbase);
701
732
  }
702
733
 
703
734
  public async getStorageAt(
@@ -870,6 +901,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
870
901
  irregularStatesByBlockNumber: this._irregularStatesByBlockNumber,
871
902
  userProvidedNextBlockBaseFeePerGas:
872
903
  this.getUserProvidedNextBlockBaseFeePerGas(),
904
+ coinbase: this.getCoinbaseAddress().toString(),
873
905
  };
874
906
 
875
907
  this._irregularStatesByBlockNumber = new Map(
@@ -924,6 +956,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
924
956
  this._resetUserProvidedNextBlockBaseFeePerGas();
925
957
  }
926
958
 
959
+ this._coinbase = snapshot.coinbase;
960
+
927
961
  // We delete this and the following snapshots, as they can only be used
928
962
  // once in Ganache
929
963
  this._snapshots.splice(snapshotIndex);
@@ -1209,7 +1243,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1209
1243
  "this._forkNetworkId should exist if the blockchain is an instance of ForkBlockchain"
1210
1244
  );
1211
1245
 
1212
- const common = getCommonForTracing(this._forkNetworkId, blockNumber);
1246
+ const common = this._getCommonForTracing(
1247
+ this._forkNetworkId,
1248
+ blockNumber
1249
+ );
1213
1250
 
1214
1251
  vm = new VM({
1215
1252
  common,
@@ -1349,6 +1386,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1349
1386
  };
1350
1387
  }
1351
1388
 
1389
+ public async setCoinbase(coinbase: Address) {
1390
+ this._coinbase = coinbase.toString();
1391
+ }
1392
+
1352
1393
  private _getGasUsedRatio(block: Block): number {
1353
1394
  const FLOATS_PRECISION = 100_000;
1354
1395
 
@@ -1499,7 +1540,12 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1499
1540
  try {
1500
1541
  sender = tx.getSenderAddress(); // verifies signature as a side effect
1501
1542
  } catch (e) {
1502
- throw new InvalidInputError(e.message);
1543
+ if (e instanceof Error) {
1544
+ throw new InvalidInputError(e.message);
1545
+ }
1546
+
1547
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
1548
+ throw e;
1503
1549
  }
1504
1550
 
1505
1551
  // validate nonce
@@ -1579,6 +1625,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1579
1625
  const pendingTxs = this._txPool.getPendingTransactions();
1580
1626
  const transactionQueue = new TransactionQueue(
1581
1627
  pendingTxs,
1628
+ this._mempoolOrder,
1582
1629
  headerData.baseFeePerGas
1583
1630
  );
1584
1631
 
@@ -2129,6 +2176,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
2129
2176
  const initialStateRoot = await this._stateManager.getStateRoot();
2130
2177
 
2131
2178
  let blockContext: Block | undefined;
2179
+ let originalCommon: Common | undefined;
2132
2180
 
2133
2181
  try {
2134
2182
  if (blockNumberOrPending === "pending") {
@@ -2163,7 +2211,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
2163
2211
  // eth_call. This will make the BASEFEE option also return 0, which
2164
2212
  // shouldn't. See: https://github.com/nomiclabs/hardhat/issues/1688
2165
2213
  if (
2166
- this.isEip1559Active() &&
2214
+ this.isEip1559Active(blockNumberOrPending) &&
2167
2215
  (blockContext.header.baseFeePerGas === undefined || forceBaseFeeZero)
2168
2216
  ) {
2169
2217
  blockContext = Block.fromBlockData(blockContext, {
@@ -2174,6 +2222,17 @@ Hardhat Network's forking functionality only works with blocks from at least spu
2174
2222
  (blockContext.header as any).baseFeePerGas = new BN(0);
2175
2223
  }
2176
2224
 
2225
+ originalCommon = (this._vm as any)._common;
2226
+ (this._vm as any)._common = new Common({
2227
+ chain: {
2228
+ // eslint-disable-next-line @typescript-eslint/dot-notation
2229
+ ...this._vm._common["_chainParams"],
2230
+ chainId: this._forkNetworkId ?? this._configChainId,
2231
+ networkId: this._forkNetworkId ?? this._configNetworkId,
2232
+ },
2233
+ hardfork: this._selectHardfork(blockContext.header.number),
2234
+ });
2235
+
2177
2236
  return await this._vm.runTx({
2178
2237
  block: blockContext,
2179
2238
  tx,
@@ -2182,6 +2241,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
2182
2241
  skipBlockGasLimitValidation: true,
2183
2242
  });
2184
2243
  } finally {
2244
+ if (originalCommon !== undefined) {
2245
+ (this._vm as any)._common = originalCommon;
2246
+ }
2185
2247
  await this._stateManager.setStateRoot(initialStateRoot);
2186
2248
  }
2187
2249
  }
@@ -2277,7 +2339,16 @@ Hardhat Network's forking functionality only works with blocks from at least spu
2277
2339
  );
2278
2340
  }
2279
2341
 
2280
- public isEip1559Active(): boolean {
2342
+ public isEip1559Active(blockNumberOrPending?: BN | "pending"): boolean {
2343
+ if (
2344
+ blockNumberOrPending !== undefined &&
2345
+ blockNumberOrPending !== "pending"
2346
+ ) {
2347
+ return this._vm._common.hardforkGteHardfork(
2348
+ this._selectHardfork(blockNumberOrPending),
2349
+ "london"
2350
+ );
2351
+ }
2281
2352
  return this._vm._common.gteHardfork("london");
2282
2353
  }
2283
2354
 
@@ -2287,7 +2358,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
2287
2358
  ): Promise<
2288
2359
  { gasPrice: BN } | { maxFeePerGas: BN; maxPriorityFeePerGas: BN }
2289
2360
  > {
2290
- if (!this.isEip1559Active() || callParams.gasPrice !== undefined) {
2361
+ if (
2362
+ !this.isEip1559Active(blockNumberOrPending) ||
2363
+ callParams.gasPrice !== undefined
2364
+ ) {
2291
2365
  return { gasPrice: callParams.gasPrice ?? (await this.getGasPrice()) };
2292
2366
  }
2293
2367
 
@@ -2317,18 +2391,71 @@ Hardhat Network's forking functionality only works with blocks from at least spu
2317
2391
 
2318
2392
  return { maxFeePerGas, maxPriorityFeePerGas };
2319
2393
  }
2320
- }
2321
2394
 
2322
- function getCommonForTracing(networkId: number, blockNumber: number): Common {
2323
- try {
2324
- const common = new Common({ chain: networkId });
2395
+ private _selectHardfork(blockNumber: BN): string {
2396
+ if (
2397
+ this._forkBlockNumber === undefined ||
2398
+ blockNumber.gte(new BN(this._forkBlockNumber))
2399
+ ) {
2400
+ return this._vm._common.hardfork() as HardforkName;
2401
+ }
2325
2402
 
2326
- common.setHardfork(common.activeHardfork(blockNumber));
2403
+ if (this._hardforkActivations.size === 0) {
2404
+ throw new InternalError(
2405
+ `No known hardfork for execution on historical block ${blockNumber.toString()} (relative to fork block number ${
2406
+ this._forkBlockNumber
2407
+ }). 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`
2408
+ );
2409
+ }
2327
2410
 
2328
- return common;
2329
- } catch (e) {
2330
- throw new InternalError(
2331
- `Network id ${networkId} does not correspond to a network that Hardhat can trace`
2411
+ /** search this._hardforkActivations for the highest block number that
2412
+ * isn't higher than blockNumber, and then return that found block number's
2413
+ * associated hardfork name. */
2414
+ const hardforkHistory: Array<[name: string, block: number]> = Array.from(
2415
+ this._hardforkActivations.entries()
2416
+ );
2417
+ const [hardfork, activationBlock] = hardforkHistory.reduce(
2418
+ ([highestHardfork, highestBlock], [thisHardfork, thisBlock]) =>
2419
+ thisBlock > highestBlock && new BN(thisBlock).lte(blockNumber)
2420
+ ? [thisHardfork, thisBlock]
2421
+ : [highestHardfork, highestBlock]
2332
2422
  );
2423
+ if (hardfork === undefined || blockNumber.ltn(activationBlock)) {
2424
+ throw new InternalError(
2425
+ `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(
2426
+ hardforkHistory
2427
+ )}. For more information, see https://hardhat.org/hardhat-network/reference/#config`
2428
+ );
2429
+ }
2430
+
2431
+ if (!HARDHAT_NETWORK_SUPPORTED_HARDFORKS.includes(hardfork)) {
2432
+ throw new InternalError(
2433
+ `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(
2434
+ ", "
2435
+ )}`
2436
+ );
2437
+ }
2438
+
2439
+ return hardfork;
2440
+ }
2441
+
2442
+ private _getCommonForTracing(networkId: number, blockNumber: number): Common {
2443
+ try {
2444
+ const common = new Common({
2445
+ chain: {
2446
+ // eslint-disable-next-line @typescript-eslint/dot-notation
2447
+ ...Common["_getChainParams"]("mainnet"),
2448
+ chainId: networkId,
2449
+ networkId,
2450
+ },
2451
+ hardfork: this._selectHardfork(new BN(blockNumber)),
2452
+ });
2453
+
2454
+ return common;
2455
+ } catch {
2456
+ throw new InternalError(
2457
+ `Network id ${networkId} does not correspond to a network that Hardhat can trace`
2458
+ );
2459
+ }
2333
2460
  }
2334
2461
  }
@@ -292,18 +292,18 @@ export function getRpcReceiptOutputsFromLocalBlockExecution(
292
292
  ): RpcReceiptOutput[] {
293
293
  const receipts: RpcReceiptOutput[] = [];
294
294
 
295
- let cumulativeGasUsed = new BN(0);
295
+ let blockLogIndex = 0;
296
296
 
297
297
  for (let i = 0; i < runBlockResult.results.length; i += 1) {
298
298
  const tx = block.transactions[i];
299
299
  const { createdAddress, gasUsed } = runBlockResult.results[i];
300
300
  const receipt = runBlockResult.receipts[i];
301
301
 
302
- cumulativeGasUsed = cumulativeGasUsed.add(new BN(receipt.gasUsed));
303
-
304
- const logs = receipt.logs.map((log, logIndex) =>
305
- getRpcLogOutput(log, tx, block, i, logIndex)
306
- );
302
+ const logs = receipt.logs.map((log) => {
303
+ const result = getRpcLogOutput(log, tx, block, i, blockLogIndex);
304
+ blockLogIndex += 1;
305
+ return result;
306
+ });
307
307
 
308
308
  const rpcReceipt: RpcReceiptOutput = {
309
309
  transactionHash: bufferToRpcData(tx.hash()),
@@ -312,7 +312,7 @@ export function getRpcReceiptOutputsFromLocalBlockExecution(
312
312
  blockNumber: numberToRpcQuantity(new BN(block.header.number)),
313
313
  from: bufferToRpcData(tx.getSenderAddress().toBuffer()),
314
314
  to: tx.to === undefined ? null : bufferToRpcData(tx.to.toBuffer()),
315
- cumulativeGasUsed: numberToRpcQuantity(cumulativeGasUsed),
315
+ cumulativeGasUsed: numberToRpcQuantity(new BN(receipt.gasUsed)),
316
316
  gasUsed: numberToRpcQuantity(gasUsed),
317
317
  contractAddress:
318
318
  createdAddress !== undefined
@@ -395,7 +395,7 @@ export function remoteReceiptToRpcReceiptOutput(
395
395
  };
396
396
  }
397
397
 
398
- export function toRpcLogOutput(log: RpcLog, index?: number): RpcLogOutput {
398
+ export function toRpcLogOutput(log: RpcLog): RpcLogOutput {
399
399
  return {
400
400
  removed: false,
401
401
  address: bufferToRpcData(log.address),
@@ -403,7 +403,7 @@ export function toRpcLogOutput(log: RpcLog, index?: number): RpcLogOutput {
403
403
  blockNumber:
404
404
  log.blockNumber !== null ? numberToRpcQuantity(log.blockNumber) : null,
405
405
  data: bufferToRpcData(log.data),
406
- logIndex: index !== undefined ? numberToRpcQuantity(index) : null,
406
+ logIndex: log.logIndex !== null ? numberToRpcQuantity(log.logIndex) : null,
407
407
  transactionIndex:
408
408
  log.transactionIndex !== null
409
409
  ? numberToRpcQuantity(log.transactionIndex)
@@ -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 {
@@ -40,6 +41,7 @@ import {
40
41
  ForkConfig,
41
42
  GenesisAccount,
42
43
  IntervalMiningConfig,
44
+ MempoolOrder,
43
45
  NodeConfig,
44
46
  TracingConfig,
45
47
  } from "./node-types";
@@ -54,6 +56,8 @@ const PRIVATE_RPC_METHODS = new Set([
54
56
 
55
57
  /* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
56
58
 
59
+ export const DEFAULT_COINBASE = "0xc014ba5ec014ba5ec014ba5ec014ba5ec014ba5e";
60
+
57
61
  export class HardhatNetworkProvider
58
62
  extends EventEmitter
59
63
  implements EIP1193Provider
@@ -81,6 +85,8 @@ export class HardhatNetworkProvider
81
85
  private readonly _throwOnCallFailures: boolean,
82
86
  private readonly _automine: boolean,
83
87
  private readonly _intervalMining: IntervalMiningConfig,
88
+ private readonly _mempoolOrder: MempoolOrder,
89
+ private readonly _chains: HardhatNetworkChainsConfig,
84
90
  private readonly _logger: ModulesLogger,
85
91
  private readonly _genesisAccounts: GenesisAccount[] = [],
86
92
  private readonly _artifacts?: Artifacts,
@@ -88,7 +94,8 @@ export class HardhatNetworkProvider
88
94
  private readonly _initialDate?: Date,
89
95
  private readonly _experimentalHardhatNetworkMessageTraceHooks: BoundExperimentalHardhatNetworkMessageTraceHook[] = [],
90
96
  private _forkConfig?: ForkConfig,
91
- private readonly _forkCachePath?: string
97
+ private readonly _forkCachePath?: string,
98
+ private readonly _coinbase = DEFAULT_COINBASE
92
99
  ) {
93
100
  super();
94
101
  }
@@ -159,7 +166,7 @@ export class HardhatNetworkProvider
159
166
  this._logger.printFailedMethod(method);
160
167
  this._logger.printLogs();
161
168
 
162
- if (!this._logger.isLoggedError(err)) {
169
+ if (err instanceof Error && !this._logger.isLoggedError(err)) {
163
170
  if (ProviderError.isProviderError(err)) {
164
171
  this._logger.printEmptyLine();
165
172
  this._logger.printErrorMessage(err.message);
@@ -227,6 +234,7 @@ export class HardhatNetworkProvider
227
234
  allowUnlimitedContractSize: this._allowUnlimitedContractSize,
228
235
  tracingConfig: await this._makeTracingConfig(),
229
236
  initialBaseFeePerGas: this._initialBaseFeePerGas,
237
+ mempoolOrder: this._mempoolOrder,
230
238
  hardfork: this._hardfork,
231
239
  networkName: this._networkName,
232
240
  chainId: this._chainId,
@@ -235,6 +243,8 @@ export class HardhatNetworkProvider
235
243
  forkConfig: this._forkConfig,
236
244
  forkCachePath:
237
245
  this._forkConfig !== undefined ? this._forkCachePath : undefined,
246
+ coinbase: this._coinbase,
247
+ chains: this._chains,
238
248
  };
239
249
 
240
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
@@ -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;
@@ -160,7 +160,7 @@ export class VMTracer {
160
160
  if (this._throwErrors) {
161
161
  next(error);
162
162
  } else {
163
- this._lastError = error;
163
+ this._lastError = error as Error;
164
164
  next();
165
165
  }
166
166
  }
@@ -187,7 +187,7 @@ export class VMTracer {
187
187
  if (this._throwErrors) {
188
188
  next(error);
189
189
  } else {
190
- this._lastError = error;
190
+ this._lastError = error as Error;
191
191
  next();
192
192
  }
193
193
  }
@@ -219,7 +219,7 @@ export class VMTracer {
219
219
  if (this._throwErrors) {
220
220
  next(error);
221
221
  } else {
222
- this._lastError = error;
222
+ this._lastError = error as Error;
223
223
  next();
224
224
  }
225
225
  }
@@ -29,7 +29,7 @@ export function resetHardhatContext() {
29
29
  function unloadModule(path: string) {
30
30
  try {
31
31
  delete require.cache[require.resolve(path)];
32
- } catch (err) {
32
+ } catch {
33
33
  // module wasn't loaded
34
34
  }
35
35
  }
@@ -36,7 +36,7 @@ async function main() {
36
36
  let event: any;
37
37
  try {
38
38
  event = JSON.parse(serializedEvent);
39
- } catch (error) {
39
+ } catch {
40
40
  log(
41
41
  "HARDHAT_SENTRY_EVENT env variable doesn't have a valid JSON, exiting: %o",
42
42
  serializedEvent
@@ -62,7 +62,7 @@ async function main() {
62
62
  `There was an error anonymizing an event: ${anonymizedEvent.value}`
63
63
  );
64
64
  }
65
- } catch (error) {
65
+ } catch (error: any) {
66
66
  log("Couldn't capture event %o, got error %O", event, error);
67
67
  Sentry.captureMessage(
68
68
  `There was an error capturing an event: ${error.message}`
@@ -141,25 +141,40 @@ export class CompilerDownloader {
141
141
  platform: compilerBuild.platform,
142
142
  };
143
143
  } catch (e) {
144
- if (HardhatError.isHardhatError(e)) {
145
- throw e;
144
+ if (e instanceof Error) {
145
+ if (HardhatError.isHardhatError(e)) {
146
+ throw e;
147
+ }
148
+ console.warn(
149
+ chalk.yellow(
150
+ `There was an unexpected problem downloading the compiler: ${e.message}`
151
+ )
152
+ );
146
153
  }
147
- console.warn(
148
- chalk.yellow(
149
- `There was an unexpected problem downloading the compiler: ${e.message}`
150
- )
151
- );
152
154
  }
153
155
  }
154
156
 
155
157
  public async getCompilersList(
156
- platform: CompilerPlatform
158
+ platform: CompilerPlatform,
159
+ pendingRetries: number = 3
157
160
  ): Promise<CompilersList> {
158
161
  if (!(await this.compilersListExists(platform))) {
159
162
  await this.downloadCompilersList(platform);
160
163
  }
161
164
 
162
- return fsExtra.readJson(this.getCompilersListPath(platform));
165
+ try {
166
+ return await fsExtra.readJSON(this.getCompilersListPath(platform));
167
+ } catch (error) {
168
+ // if parsing throws a syntax error, redownload and parse once more
169
+ if (!(error instanceof SyntaxError) || pendingRetries === 0) {
170
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
171
+ throw error;
172
+ }
173
+
174
+ // remove the malformed list and retry
175
+ await fsExtra.remove(this.getCompilersListPath(platform));
176
+ return this.getCompilersList(platform, pendingRetries - 1);
177
+ }
163
178
  }
164
179
 
165
180
  public async getCompilerBuild(version: string): Promise<CompilerBuild> {
@@ -168,7 +183,7 @@ export class CompilerDownloader {
168
183
  if (await this._versionExists(version, platform)) {
169
184
  try {
170
185
  return await this._getCompilerBuildByPlatform(version, platform);
171
- } catch (e) {
186
+ } catch {
172
187
  log("Couldn't download native compiler, using solcjs instead");
173
188
  }
174
189
  }
@@ -182,7 +197,7 @@ export class CompilerDownloader {
182
197
  getCompilerListURL(platform),
183
198
  this.getCompilersListPath(platform)
184
199
  );
185
- } catch (error) {
200
+ } catch (error: any) {
186
201
  throw new HardhatError(
187
202
  ERRORS.SOLC.VERSION_LIST_DOWNLOAD_FAILED,
188
203
  {},
@@ -212,7 +227,7 @@ export class CompilerDownloader {
212
227
  {
213
228
  remoteVersion: compilerBuild.version,
214
229
  },
215
- error
230
+ error as Error
216
231
  );
217
232
  }
218
233
  }
@@ -227,7 +227,7 @@ export class Resolver {
227
227
  {
228
228
  library: libraryName,
229
229
  },
230
- error
230
+ error as Error
231
231
  );
232
232
  }
233
233
  }
@@ -21,7 +21,7 @@ export class AbiHelpers {
21
21
  const selectorHex = abi.Interface.getSighash(fragment);
22
22
 
23
23
  return Buffer.from(selectorHex.slice(2), "hex");
24
- } catch (e) {
24
+ } catch {
25
25
  return;
26
26
  }
27
27
  }