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
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.HardhatNode = exports.COINBASE_ADDRESS = void 0;
6
+ exports.HardhatNode = void 0;
7
7
  const block_1 = require("@ethereumjs/block");
8
8
  const common_1 = __importDefault(require("@ethereumjs/common"));
9
9
  const tx_1 = require("@ethereumjs/tx");
@@ -14,6 +14,7 @@ const chalk_1 = __importDefault(require("chalk"));
14
14
  const debug_1 = __importDefault(require("debug"));
15
15
  const ethereumjs_util_1 = require("ethereumjs-util");
16
16
  const events_1 = __importDefault(require("events"));
17
+ const constants_1 = require("../../constants");
17
18
  const default_config_1 = require("../../core/config/default-config");
18
19
  const errors_1 = require("../../core/errors");
19
20
  const errors_2 = require("../../core/providers/errors");
@@ -51,12 +52,11 @@ const makeForkClient_1 = require("./utils/makeForkClient");
51
52
  const makeForkCommon_1 = require("./utils/makeForkCommon");
52
53
  const putGenesisBlock_1 = require("./utils/putGenesisBlock");
53
54
  const txMapToArray_1 = require("./utils/txMapToArray");
54
- const log = debug_1.default("hardhat:core:hardhat-network:node");
55
+ const log = (0, debug_1.default)("hardhat:core:hardhat-network:node");
55
56
  const ethSigUtil = require("eth-sig-util");
56
- exports.COINBASE_ADDRESS = ethereumjs_util_1.Address.fromString("0xc014ba5ec014ba5ec014ba5ec014ba5ec014ba5e");
57
57
  /* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
58
58
  class HardhatNode extends events_1.default {
59
- constructor(_vm, _stateManager, _blockchain, _txPool, _automine, _minGasPrice, _blockTimeOffsetSeconds = new ethereumjs_util_1.BN(0), genesisAccounts, tracingConfig, _forkNetworkId, nextBlockBaseFee) {
59
+ constructor(_vm, _stateManager, _blockchain, _txPool, _automine, _minGasPrice, _blockTimeOffsetSeconds = new ethereumjs_util_1.BN(0), _mempoolOrder, _coinbase, genesisAccounts, _configNetworkId, _configChainId, _hardforkActivations, tracingConfig, _forkNetworkId, _forkBlockNumber, nextBlockBaseFee) {
60
60
  super();
61
61
  this._vm = _vm;
62
62
  this._stateManager = _stateManager;
@@ -65,7 +65,13 @@ class HardhatNode extends events_1.default {
65
65
  this._automine = _automine;
66
66
  this._minGasPrice = _minGasPrice;
67
67
  this._blockTimeOffsetSeconds = _blockTimeOffsetSeconds;
68
+ this._mempoolOrder = _mempoolOrder;
69
+ this._coinbase = _coinbase;
70
+ this._configNetworkId = _configNetworkId;
71
+ this._configChainId = _configChainId;
72
+ this._hardforkActivations = _hardforkActivations;
68
73
  this._forkNetworkId = _forkNetworkId;
74
+ this._forkBlockNumber = _forkBlockNumber;
69
75
  this._localAccounts = new Map(); // address => private key
70
76
  this._impersonatedAccounts = new Set(); // address
71
77
  this._nextBlockTimestamp = new ethereumjs_util_1.BN(0);
@@ -90,7 +96,7 @@ class HardhatNode extends events_1.default {
90
96
  }
91
97
  try {
92
98
  for (const buildInfo of tracingConfig.buildInfos) {
93
- const bytecodes = compiler_to_model_1.createModelsAndDecodeBytecodes(buildInfo.solcVersion, buildInfo.input, buildInfo.output);
99
+ const bytecodes = (0, compiler_to_model_1.createModelsAndDecodeBytecodes)(buildInfo.solcVersion, buildInfo.input, buildInfo.output);
94
100
  for (const bytecode of bytecodes) {
95
101
  this._vmTraceDecoder.addBytecode(bytecode);
96
102
  }
@@ -99,37 +105,42 @@ class HardhatNode extends events_1.default {
99
105
  catch (error) {
100
106
  console.warn(chalk_1.default.yellow("The Hardhat Network tracing engine could not be initialized. Run Hardhat with --verbose to learn more."));
101
107
  log("Hardhat Network tracing disabled: ContractsIdentifier failed to be initialized. Please report this to help us improve Hardhat.\n", error);
102
- reporter_1.Reporter.reportError(error);
108
+ if (error instanceof Error) {
109
+ reporter_1.Reporter.reportError(error);
110
+ }
103
111
  }
104
112
  }
105
113
  static async create(config) {
106
- const { automine, genesisAccounts, blockGasLimit, allowUnlimitedContractSize, tracingConfig, minGasPrice, } = config;
114
+ const { automine, genesisAccounts, blockGasLimit, allowUnlimitedContractSize, tracingConfig, minGasPrice, mempoolOrder, networkId, chainId, } = config;
107
115
  let common;
108
116
  let stateManager;
109
117
  let blockchain;
110
118
  let initialBlockTimeOffset;
111
119
  let nextBlockBaseFeePerGas;
112
120
  let forkNetworkId;
121
+ let forkBlockNum;
122
+ let hardforkActivations = new Map();
113
123
  const initialBaseFeePerGasConfig = config.initialBaseFeePerGas !== undefined
114
124
  ? new ethereumjs_util_1.BN(config.initialBaseFeePerGas)
115
125
  : undefined;
116
- const hardfork = hardforks_1.getHardforkName(config.hardfork);
117
- if (node_types_1.isForkedNodeConfig(config)) {
118
- const { forkClient, forkBlockNumber, forkBlockTimestamp } = await makeForkClient_1.makeForkClient(config.forkConfig, config.forkCachePath);
119
- common = await makeForkCommon_1.makeForkCommon(config);
126
+ const hardfork = (0, hardforks_1.getHardforkName)(config.hardfork);
127
+ if ((0, node_types_1.isForkedNodeConfig)(config)) {
128
+ const { forkClient, forkBlockNumber, forkBlockTimestamp } = await (0, makeForkClient_1.makeForkClient)(config.forkConfig, config.forkCachePath);
129
+ common = await (0, makeForkCommon_1.makeForkCommon)(config);
120
130
  forkNetworkId = forkClient.getNetworkId();
131
+ forkBlockNum = forkBlockNumber.toNumber();
121
132
  this._validateHardforks(config.forkConfig.blockNumber, common, forkNetworkId);
122
133
  const forkStateManager = new ForkStateManager_1.ForkStateManager(forkClient, forkBlockNumber);
123
134
  await forkStateManager.initializeGenesisAccounts(genesisAccounts);
124
135
  stateManager = forkStateManager;
125
136
  blockchain = new ForkBlockchain_1.ForkBlockchain(forkClient, forkBlockNumber, common);
126
- initialBlockTimeOffset = new ethereumjs_util_1.BN(date_1.getDifferenceInSeconds(new Date(forkBlockTimestamp), new Date()));
137
+ initialBlockTimeOffset = new ethereumjs_util_1.BN((0, date_1.getDifferenceInSeconds)(new Date(forkBlockTimestamp), new Date()));
127
138
  // If the hardfork is London or later we need a base fee per gas for the
128
139
  // first local block. If initialBaseFeePerGas config was provided we use
129
140
  // that. Otherwise, what we do depends on the block we forked from. If
130
141
  // it's an EIP-1559 block we don't need to do anything here, as we'll
131
142
  // end up automatically computing the next base fee per gas based on it.
132
- if (hardforks_1.hardforkGte(hardfork, hardforks_1.HardforkName.LONDON)) {
143
+ if ((0, hardforks_1.hardforkGte)(hardfork, hardforks_1.HardforkName.LONDON)) {
133
144
  if (initialBaseFeePerGasConfig !== undefined) {
134
145
  nextBlockBaseFeePerGas = initialBaseFeePerGasConfig;
135
146
  }
@@ -140,18 +151,22 @@ class HardhatNode extends events_1.default {
140
151
  }
141
152
  }
142
153
  }
154
+ if (config.chains.has(forkNetworkId)) {
155
+ hardforkActivations = config.chains.get(forkNetworkId).hardforkHistory;
156
+ }
143
157
  }
144
158
  else {
145
159
  const hardhatStateManager = new HardhatStateManager_1.HardhatStateManager();
146
160
  await hardhatStateManager.initializeGenesisAccounts(genesisAccounts);
147
161
  const initialStateRoot = await hardhatStateManager.getStateRoot();
148
- common = makeCommon_1.makeCommon(config, initialStateRoot);
162
+ common = (0, makeCommon_1.makeCommon)(config, initialStateRoot);
149
163
  const hardhatBlockchain = new HardhatBlockchain_1.HardhatBlockchain();
150
- const genesisBlockBaseFeePerGas = hardforks_1.hardforkGte(hardfork, hardforks_1.HardforkName.LONDON)
151
- ? initialBaseFeePerGasConfig !== null && initialBaseFeePerGasConfig !== void 0 ? initialBaseFeePerGasConfig : new ethereumjs_util_1.BN(default_config_1.HARDHAT_NETWORK_DEFAULT_INITIAL_BASE_FEE_PER_GAS) : undefined;
152
- await putGenesisBlock_1.putGenesisBlock(hardhatBlockchain, common, genesisBlockBaseFeePerGas);
164
+ const genesisBlockBaseFeePerGas = (0, hardforks_1.hardforkGte)(hardfork, hardforks_1.HardforkName.LONDON)
165
+ ? initialBaseFeePerGasConfig !== null && initialBaseFeePerGasConfig !== void 0 ? initialBaseFeePerGasConfig : new ethereumjs_util_1.BN(default_config_1.HARDHAT_NETWORK_DEFAULT_INITIAL_BASE_FEE_PER_GAS)
166
+ : undefined;
167
+ await (0, putGenesisBlock_1.putGenesisBlock)(hardhatBlockchain, common, genesisBlockBaseFeePerGas);
153
168
  if (config.initialDate !== undefined) {
154
- initialBlockTimeOffset = new ethereumjs_util_1.BN(date_1.getDifferenceInSeconds(config.initialDate, new Date()));
169
+ initialBlockTimeOffset = new ethereumjs_util_1.BN((0, date_1.getDifferenceInSeconds)(config.initialDate, new Date()));
155
170
  }
156
171
  blockchain = hardhatBlockchain;
157
172
  stateManager = hardhatStateManager;
@@ -164,7 +179,7 @@ class HardhatNode extends events_1.default {
164
179
  blockchain: blockchain,
165
180
  allowUnlimitedContractSize,
166
181
  });
167
- const node = new HardhatNode(vm, stateManager, blockchain, txPool, automine, minGasPrice, initialBlockTimeOffset, genesisAccounts, tracingConfig, forkNetworkId, nextBlockBaseFeePerGas);
182
+ const node = new HardhatNode(vm, stateManager, blockchain, txPool, automine, minGasPrice, initialBlockTimeOffset, mempoolOrder, config.coinbase, genesisAccounts, networkId, chainId, hardforkActivations, tracingConfig, forkNetworkId, forkBlockNum, nextBlockBaseFeePerGas);
168
183
  return [common, node];
169
184
  }
170
185
  static _validateHardforks(forkBlockNumber, common, remoteChainId) {
@@ -178,7 +193,7 @@ The hardfork must be at least spuriousDragon, but ${common.hardfork()} was given
178
193
  try {
179
194
  upstreamCommon = new common_1.default({ chain: remoteChainId });
180
195
  }
181
- catch (error) {
196
+ catch (_a) {
182
197
  // If ethereumjs doesn't have a common it will throw and we won't have
183
198
  // info about the activation block of each hardfork, so we don't run
184
199
  // this validation.
@@ -193,7 +208,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
193
208
  }
194
209
  }
195
210
  async getSignedTransaction(txParams) {
196
- const senderAddress = ethereumjs_util_1.bufferToHex(txParams.from);
211
+ const senderAddress = (0, ethereumjs_util_1.bufferToHex)(txParams.from);
197
212
  const pk = this._localAccounts.get(senderAddress);
198
213
  if (pk !== undefined) {
199
214
  let tx;
@@ -239,14 +254,18 @@ Hardhat Network's forking functionality only works with blocks from at least spu
239
254
  result = await this._mineBlockWithPendingTxs(blockTimestamp);
240
255
  }
241
256
  catch (err) {
242
- if (err === null || err === void 0 ? void 0 : err.message.includes("sender doesn't have enough funds")) {
243
- throw new errors_2.InvalidInputError(err.message, err);
244
- }
245
- // Some network errors are HardhatErrors, and can end up here when forking
246
- if (errors_1.HardhatError.isHardhatError(err)) {
247
- throw err;
257
+ if (err instanceof Error) {
258
+ if (err === null || err === void 0 ? void 0 : err.message.includes("sender doesn't have enough funds")) {
259
+ throw new errors_2.InvalidInputError(err.message, err);
260
+ }
261
+ // Some network errors are HardhatErrors, and can end up here when forking
262
+ if (errors_1.HardhatError.isHardhatError(err)) {
263
+ throw err;
264
+ }
265
+ throw new errors_2.TransactionExecutionError(err);
248
266
  }
249
- throw new errors_2.TransactionExecutionError(err);
267
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
268
+ throw err;
250
269
  }
251
270
  await this._saveBlockAsSuccessfullyRun(result.block, result.blockResult);
252
271
  if (needsTimestampIncrease) {
@@ -263,7 +282,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
263
282
  var _a, _b, _c, _d;
264
283
  let txParams;
265
284
  const nonce = await this._getNonce(new ethereumjs_util_1.Address(call.from), blockNumberOrPending);
266
- if (call.gasPrice !== undefined || !this.isEip1559Active()) {
285
+ if (call.gasPrice !== undefined ||
286
+ !this.isEip1559Active(blockNumberOrPending)) {
267
287
  txParams = Object.assign({ gasPrice: new ethereumjs_util_1.BN(0), nonce }, call);
268
288
  }
269
289
  else {
@@ -294,8 +314,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
294
314
  }
295
315
  async getCodeFromTrace(trace, blockNumberOrPending) {
296
316
  if (trace === undefined ||
297
- message_trace_1.isPrecompileTrace(trace) ||
298
- message_trace_1.isCreateTrace(trace)) {
317
+ (0, message_trace_1.isPrecompileTrace)(trace) ||
318
+ (0, message_trace_1.isCreateTrace)(trace)) {
299
319
  return Buffer.from("");
300
320
  }
301
321
  return this.getCode(new ethereumjs_util_1.Address(trace.address), blockNumberOrPending);
@@ -385,7 +405,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
385
405
  return new ethereumjs_util_1.BN(default_config_1.HARDHAT_NETWORK_DEFAULT_MAX_PRIORITY_FEE_PER_GAS);
386
406
  }
387
407
  getCoinbaseAddress() {
388
- return exports.COINBASE_ADDRESS;
408
+ return ethereumjs_util_1.Address.fromString(this._coinbase);
389
409
  }
390
410
  async getStorageAt(address, positionIndex, blockNumberOrPending) {
391
411
  const key = positionIndex.toArrayLike(Buffer, "be", 32);
@@ -457,19 +477,19 @@ Hardhat Network's forking functionality only works with blocks from at least spu
457
477
  return (_a = this._txPool.getTransactionByHash(hash)) === null || _a === void 0 ? void 0 : _a.data;
458
478
  }
459
479
  async getTransactionReceipt(hash) {
460
- const hashBuffer = hash instanceof Buffer ? hash : ethereumjs_util_1.toBuffer(hash);
480
+ const hashBuffer = hash instanceof Buffer ? hash : (0, ethereumjs_util_1.toBuffer)(hash);
461
481
  const receipt = await this._blockchain.getTransactionReceipt(hashBuffer);
462
482
  return receipt !== null && receipt !== void 0 ? receipt : undefined;
463
483
  }
464
484
  async getPendingTransactions() {
465
- const txPoolPending = txMapToArray_1.txMapToArray(this._txPool.getPendingTransactions());
466
- const txPoolQueued = txMapToArray_1.txMapToArray(this._txPool.getQueuedTransactions());
485
+ const txPoolPending = (0, txMapToArray_1.txMapToArray)(this._txPool.getPendingTransactions());
486
+ const txPoolQueued = (0, txMapToArray_1.txMapToArray)(this._txPool.getQueuedTransactions());
467
487
  return txPoolPending.concat(txPoolQueued);
468
488
  }
469
489
  async signPersonalMessage(address, data) {
470
- const messageHash = ethereumjs_util_1.hashPersonalMessage(data);
490
+ const messageHash = (0, ethereumjs_util_1.hashPersonalMessage)(data);
471
491
  const privateKey = this._getLocalAccountPrivateKey(address);
472
- return ethereumjs_util_1.ecsign(messageHash, privateKey);
492
+ return (0, ethereumjs_util_1.ecsign)(messageHash, privateKey);
473
493
  }
474
494
  async signTypedDataV4(address, typedData) {
475
495
  const privateKey = this._getLocalAccountPrivateKey(address);
@@ -492,6 +512,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
492
512
  nextBlockTimestamp: this.getNextBlockTimestamp(),
493
513
  irregularStatesByBlockNumber: this._irregularStatesByBlockNumber,
494
514
  userProvidedNextBlockBaseFeePerGas: this.getUserProvidedNextBlockBaseFeePerGas(),
515
+ coinbase: this.getCoinbaseAddress().toString(),
495
516
  };
496
517
  this._irregularStatesByBlockNumber = new Map(this._irregularStatesByBlockNumber);
497
518
  this._snapshots.push(snapshot);
@@ -528,6 +549,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
528
549
  else {
529
550
  this._resetUserProvidedNextBlockBaseFeePerGas();
530
551
  }
552
+ this._coinbase = snapshot.coinbase;
531
553
  // We delete this and the following snapshots, as they can only be used
532
554
  // once in Ganache
533
555
  this._snapshots.splice(snapshotIndex);
@@ -559,7 +581,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
559
581
  id: filterId,
560
582
  type: filter_1.Type.BLOCK_SUBSCRIPTION,
561
583
  deadline: this._newDeadline(),
562
- hashes: [ethereumjs_util_1.bufferToHex(block.header.hash())],
584
+ hashes: [(0, ethereumjs_util_1.bufferToHex)(block.header.hash())],
563
585
  logs: [],
564
586
  subscription: isSubscription,
565
587
  });
@@ -628,7 +650,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
628
650
  async addCompilationResult(solcVersion, compilerInput, compilerOutput) {
629
651
  let bytecodes;
630
652
  try {
631
- bytecodes = compiler_to_model_1.createModelsAndDecodeBytecodes(solcVersion, compilerInput, compilerOutput);
653
+ bytecodes = (0, compiler_to_model_1.createModelsAndDecodeBytecodes)(solcVersion, compilerInput, compilerOutput);
632
654
  }
633
655
  catch (error) {
634
656
  console.warn(chalk_1.default.yellow("The Hardhat Network tracing engine could not be updated. Run Hardhat with --verbose to learn more."));
@@ -641,11 +663,11 @@ Hardhat Network's forking functionality only works with blocks from at least spu
641
663
  return true;
642
664
  }
643
665
  addImpersonatedAccount(address) {
644
- this._impersonatedAccounts.add(ethereumjs_util_1.bufferToHex(address));
666
+ this._impersonatedAccounts.add((0, ethereumjs_util_1.bufferToHex)(address));
645
667
  return true;
646
668
  }
647
669
  removeImpersonatedAccount(address) {
648
- return this._impersonatedAccounts.delete(ethereumjs_util_1.bufferToHex(address));
670
+ return this._impersonatedAccounts.delete((0, ethereumjs_util_1.bufferToHex)(address));
649
671
  }
650
672
  setAutomine(automine) {
651
673
  this._automine = automine;
@@ -667,7 +689,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
667
689
  }
668
690
  const isTransactionMined = await this._isTransactionMined(hash);
669
691
  if (isTransactionMined) {
670
- throw new errors_2.InvalidArgumentsError(`Transaction ${ethereumjs_util_1.bufferToHex(hash)} cannot be dropped because it's already mined`);
692
+ throw new errors_2.InvalidArgumentsError(`Transaction ${(0, ethereumjs_util_1.bufferToHex)(hash)} cannot be dropped because it's already mined`);
671
693
  }
672
694
  return false;
673
695
  }
@@ -700,7 +722,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
700
722
  async traceTransaction(hash, config) {
701
723
  const block = await this.getBlockByTransactionHash(hash);
702
724
  if (block === undefined) {
703
- throw new errors_2.InvalidInputError(`Unable to find a block containing transaction ${ethereumjs_util_1.bufferToHex(hash)}`);
725
+ throw new errors_2.InvalidInputError(`Unable to find a block containing transaction ${(0, ethereumjs_util_1.bufferToHex)(hash)}`);
704
726
  }
705
727
  return this._runInBlockContext(new ethereumjs_util_1.BN(block.header.number).subn(1), async () => {
706
728
  const blockNumber = block.header.number.toNumber();
@@ -708,8 +730,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
708
730
  let vm = this._vm;
709
731
  if (blockchain instanceof ForkBlockchain_1.ForkBlockchain &&
710
732
  blockNumber <= blockchain.getForkBlockNumber().toNumber()) {
711
- errors_1.assertHardhatInvariant(this._forkNetworkId !== undefined, "this._forkNetworkId should exist if the blockchain is an instance of ForkBlockchain");
712
- const common = getCommonForTracing(this._forkNetworkId, blockNumber);
733
+ (0, errors_1.assertHardhatInvariant)(this._forkNetworkId !== undefined, "this._forkNetworkId should exist if the blockchain is an instance of ForkBlockchain");
734
+ const common = this._getCommonForTracing(this._forkNetworkId, blockNumber);
713
735
  vm = new vm_1.default({
714
736
  common,
715
737
  activatePrecompiles: true,
@@ -802,7 +824,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
802
824
  baseFeePerGas.push(pendingBlock.header.calcNextBaseFee());
803
825
  }
804
826
  else {
805
- errors_1.assertHardhatInvariant(false, "This should never happen");
827
+ (0, errors_1.assertHardhatInvariant)(false, "This should never happen");
806
828
  }
807
829
  }
808
830
  return {
@@ -812,6 +834,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
812
834
  reward: rewardPercentiles.length > 0 ? reward : undefined,
813
835
  };
814
836
  }
837
+ async setCoinbase(coinbase) {
838
+ this._coinbase = coinbase.toString();
839
+ }
815
840
  _getGasUsedRatio(block) {
816
841
  const FLOATS_PRECISION = 100000;
817
842
  return (block.header.gasUsed
@@ -845,7 +870,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
845
870
  }
846
871
  return {
847
872
  effectiveGasReward,
848
- gasUsed: base_types_1.rpcQuantityToBN(r === null || r === void 0 ? void 0 : r.gasUsed),
873
+ gasUsed: (0, base_types_1.rpcQuantityToBN)(r === null || r === void 0 ? void 0 : r.gasUsed),
849
874
  };
850
875
  })
851
876
  .sort((a, b) => a.effectiveGasReward.cmp(b.effectiveGasReward));
@@ -867,7 +892,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
867
892
  async _addPendingTransaction(tx) {
868
893
  await this._txPool.addTransaction(tx);
869
894
  await this._notifyPendingTransaction(tx);
870
- return ethereumjs_util_1.bufferToHex(tx.hash());
895
+ return (0, ethereumjs_util_1.bufferToHex)(tx.hash());
871
896
  }
872
897
  async _mineTransaction(tx) {
873
898
  await this._addPendingTransaction(tx);
@@ -923,7 +948,11 @@ Hardhat Network's forking functionality only works with blocks from at least spu
923
948
  sender = tx.getSenderAddress(); // verifies signature as a side effect
924
949
  }
925
950
  catch (e) {
926
- throw new errors_2.InvalidInputError(e.message);
951
+ if (e instanceof Error) {
952
+ throw new errors_2.InvalidInputError(e.message);
953
+ }
954
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
955
+ throw e;
927
956
  }
928
957
  // validate nonce
929
958
  const nextPendingNonce = await this._txPool.getNextPendingNonce(sender);
@@ -980,7 +1009,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
980
1009
  const blockGasLimit = this.getBlockGasLimit();
981
1010
  const minTxFee = this._getMinimalTransactionFee();
982
1011
  const pendingTxs = this._txPool.getPendingTransactions();
983
- const transactionQueue = new TransactionQueue_1.TransactionQueue(pendingTxs, headerData.baseFeePerGas);
1012
+ const transactionQueue = new TransactionQueue_1.TransactionQueue(pendingTxs, this._mempoolOrder, headerData.baseFeePerGas);
984
1013
  let tx = transactionQueue.getNextTransaction();
985
1014
  const results = [];
986
1015
  const receipts = [];
@@ -1058,9 +1087,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1058
1087
  this._snapshots.splice(snapshotIndex);
1059
1088
  }
1060
1089
  _initLocalAccounts(genesisAccounts) {
1061
- const privateKeys = genesisAccounts.map((acc) => ethereumjs_util_1.toBuffer(acc.privateKey));
1090
+ const privateKeys = genesisAccounts.map((acc) => (0, ethereumjs_util_1.toBuffer)(acc.privateKey));
1062
1091
  for (const pk of privateKeys) {
1063
- this._localAccounts.set(ethereumjs_util_1.bufferToHex(ethereumjs_util_1.privateToAddress(pk)), pk);
1092
+ this._localAccounts.set((0, ethereumjs_util_1.bufferToHex)((0, ethereumjs_util_1.privateToAddress)(pk)), pk);
1064
1093
  }
1065
1094
  }
1066
1095
  async _getConsoleLogMessages(vmTrace, vmTracerError) {
@@ -1098,7 +1127,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1098
1127
  if (error.error === exceptions_1.ERROR.OUT_OF_GAS) {
1099
1128
  if (stackTrace !== undefined &&
1100
1129
  this._isContractTooLargeStackTrace(stackTrace)) {
1101
- return solidity_errors_1.encodeSolidityStackTrace("Transaction ran out of gas", stackTrace);
1130
+ return (0, solidity_errors_1.encodeSolidityStackTrace)("Transaction ran out of gas", stackTrace);
1102
1131
  }
1103
1132
  return new errors_2.TransactionExecutionError("Transaction ran out of gas");
1104
1133
  }
@@ -1120,12 +1149,12 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1120
1149
  if (error.error === exceptions_1.ERROR.REVERT) {
1121
1150
  const fallbackMessage = `VM Exception while processing transaction: revert ${returnDataExplanation}`;
1122
1151
  if (stackTrace !== undefined) {
1123
- return solidity_errors_1.encodeSolidityStackTrace(fallbackMessage, stackTrace);
1152
+ return (0, solidity_errors_1.encodeSolidityStackTrace)(fallbackMessage, stackTrace);
1124
1153
  }
1125
1154
  return new errors_2.TransactionExecutionError(fallbackMessage);
1126
1155
  }
1127
1156
  if (stackTrace !== undefined) {
1128
- return solidity_errors_1.encodeSolidityStackTrace(`Transaction failed: revert ${returnDataExplanation}`, stackTrace);
1157
+ return (0, solidity_errors_1.encodeSolidityStackTrace)(`Transaction failed: revert ${returnDataExplanation}`, stackTrace);
1129
1158
  }
1130
1159
  return new errors_2.TransactionExecutionError(`Transaction reverted ${returnDataExplanation}`);
1131
1160
  }
@@ -1138,7 +1167,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1138
1167
  let blockTimestamp;
1139
1168
  let offsetShouldChange;
1140
1169
  let newOffset = new ethereumjs_util_1.BN(0);
1141
- const currentTimestamp = new ethereumjs_util_1.BN(getCurrentTimestamp_1.getCurrentTimestamp());
1170
+ const currentTimestamp = new ethereumjs_util_1.BN((0, getCurrentTimestamp_1.getCurrentTimestamp)());
1142
1171
  // if timestamp is not provided, we check nextBlockTimestamp, if it is
1143
1172
  // set, we use it as the timestamp instead. If it is not set, we use
1144
1173
  // time offset + real time as the timestamp.
@@ -1167,7 +1196,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1167
1196
  async _notifyPendingTransaction(tx) {
1168
1197
  this._filters.forEach((filter) => {
1169
1198
  if (filter.type === filter_1.Type.PENDING_TRANSACTION_SUBSCRIPTION) {
1170
- const hash = ethereumjs_util_1.bufferToHex(tx.hash());
1199
+ const hash = (0, ethereumjs_util_1.bufferToHex)(tx.hash());
1171
1200
  if (filter.subscription) {
1172
1201
  this._emitEthEvent(filter.id, hash);
1173
1202
  return;
@@ -1188,7 +1217,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1188
1217
  * was added to the blockchain.
1189
1218
  */
1190
1219
  async _saveBlockAsSuccessfullyRun(block, runBlockResult) {
1191
- const receipts = output_1.getRpcReceiptOutputsFromLocalBlockExecution(block, runBlockResult, output_1.shouldShowTransactionTypeForHardfork(this._vm._common));
1220
+ const receipts = (0, output_1.getRpcReceiptOutputsFromLocalBlockExecution)(block, runBlockResult, (0, output_1.shouldShowTransactionTypeForHardfork)(this._vm._common));
1192
1221
  this._blockchain.addTransactionReceipts(receipts);
1193
1222
  const td = await this.getBlockTotalDifficulty(block);
1194
1223
  const rpcLogs = [];
@@ -1203,14 +1232,14 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1203
1232
  case filter_1.Type.BLOCK_SUBSCRIPTION:
1204
1233
  const hash = block.hash();
1205
1234
  if (filter.subscription) {
1206
- this._emitEthEvent(filter.id, output_1.getRpcBlock(block, td, output_1.shouldShowTransactionTypeForHardfork(this._vm._common), false));
1235
+ this._emitEthEvent(filter.id, (0, output_1.getRpcBlock)(block, td, (0, output_1.shouldShowTransactionTypeForHardfork)(this._vm._common), false));
1207
1236
  return;
1208
1237
  }
1209
- filter.hashes.push(ethereumjs_util_1.bufferToHex(hash));
1238
+ filter.hashes.push((0, ethereumjs_util_1.bufferToHex)(hash));
1210
1239
  break;
1211
1240
  case filter_1.Type.LOGS_SUBSCRIPTION:
1212
- if (filter_1.bloomFilter(new bloom_1.default(block.header.bloom), filter.criteria.addresses, filter.criteria.normalizedTopics)) {
1213
- const logs = filter_1.filterLogs(rpcLogs, filter.criteria);
1241
+ if ((0, filter_1.bloomFilter)(new bloom_1.default(block.header.bloom), filter.criteria.addresses, filter.criteria.normalizedTopics)) {
1242
+ const logs = (0, filter_1.filterLogs)(rpcLogs, filter.criteria);
1214
1243
  if (logs.length === 0) {
1215
1244
  return;
1216
1245
  }
@@ -1333,8 +1362,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1333
1362
  * makes.
1334
1363
  */
1335
1364
  async _runTxAndRevertMutations(tx, blockNumberOrPending, forceBaseFeeZero = false) {
1365
+ var _a, _b;
1336
1366
  const initialStateRoot = await this._stateManager.getStateRoot();
1337
1367
  let blockContext;
1368
+ let originalCommon;
1338
1369
  try {
1339
1370
  if (blockNumberOrPending === "pending") {
1340
1371
  // the new block has already been mined by _runInBlockContext hence we take latest here
@@ -1344,7 +1375,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1344
1375
  // We know that this block number exists, because otherwise
1345
1376
  // there would be an error in the RPC layer.
1346
1377
  const block = await this.getBlockByNumber(blockNumberOrPending);
1347
- errors_1.assertHardhatInvariant(block !== undefined, "Tried to run a tx in the context of a non-existent block");
1378
+ (0, errors_1.assertHardhatInvariant)(block !== undefined, "Tried to run a tx in the context of a non-existent block");
1348
1379
  blockContext = block;
1349
1380
  // we don't need to add the tx to the block because runTx doesn't
1350
1381
  // know anything about the txs in the current block
@@ -1362,7 +1393,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1362
1393
  // we don't want to debit any balance nor fail any tx when running an
1363
1394
  // eth_call. This will make the BASEFEE option also return 0, which
1364
1395
  // shouldn't. See: https://github.com/nomiclabs/hardhat/issues/1688
1365
- if (this.isEip1559Active() &&
1396
+ if (this.isEip1559Active(blockNumberOrPending) &&
1366
1397
  (blockContext.header.baseFeePerGas === undefined || forceBaseFeeZero)) {
1367
1398
  blockContext = block_1.Block.fromBlockData(blockContext, {
1368
1399
  freeze: false,
@@ -1370,6 +1401,11 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1370
1401
  });
1371
1402
  blockContext.header.baseFeePerGas = new ethereumjs_util_1.BN(0);
1372
1403
  }
1404
+ originalCommon = this._vm._common;
1405
+ this._vm._common = new common_1.default({
1406
+ chain: Object.assign(Object.assign({}, this._vm._common["_chainParams"]), { chainId: (_a = this._forkNetworkId) !== null && _a !== void 0 ? _a : this._configChainId, networkId: (_b = this._forkNetworkId) !== null && _b !== void 0 ? _b : this._configNetworkId }),
1407
+ hardfork: this._selectHardfork(blockContext.header.number),
1408
+ });
1373
1409
  return await this._vm.runTx({
1374
1410
  block: blockContext,
1375
1411
  tx,
@@ -1379,6 +1415,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1379
1415
  });
1380
1416
  }
1381
1417
  finally {
1418
+ if (originalCommon !== undefined) {
1419
+ this._vm._common = originalCommon;
1420
+ }
1382
1421
  await this._stateManager.setStateRoot(initialStateRoot);
1383
1422
  }
1384
1423
  }
@@ -1441,12 +1480,17 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1441
1480
  async _persistIrregularWorldState() {
1442
1481
  this._irregularStatesByBlockNumber.set((await this.getLatestBlock()).header.number.toString(), await this._stateManager.getStateRoot());
1443
1482
  }
1444
- isEip1559Active() {
1483
+ isEip1559Active(blockNumberOrPending) {
1484
+ if (blockNumberOrPending !== undefined &&
1485
+ blockNumberOrPending !== "pending") {
1486
+ return this._vm._common.hardforkGteHardfork(this._selectHardfork(blockNumberOrPending), "london");
1487
+ }
1445
1488
  return this._vm._common.gteHardfork("london");
1446
1489
  }
1447
1490
  async _getEstimateGasFeePriceFields(callParams, blockNumberOrPending) {
1448
1491
  var _a, _b;
1449
- if (!this.isEip1559Active() || callParams.gasPrice !== undefined) {
1492
+ if (!this.isEip1559Active(blockNumberOrPending) ||
1493
+ callParams.gasPrice !== undefined) {
1450
1494
  return { gasPrice: (_a = callParams.gasPrice) !== null && _a !== void 0 ? _a : (await this.getGasPrice()) };
1451
1495
  }
1452
1496
  let maxFeePerGas = callParams.maxFeePerGas;
@@ -1469,16 +1513,41 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1469
1513
  }
1470
1514
  return { maxFeePerGas, maxPriorityFeePerGas };
1471
1515
  }
1472
- }
1473
- exports.HardhatNode = HardhatNode;
1474
- function getCommonForTracing(networkId, blockNumber) {
1475
- try {
1476
- const common = new common_1.default({ chain: networkId });
1477
- common.setHardfork(common.activeHardfork(blockNumber));
1478
- return common;
1516
+ _selectHardfork(blockNumber) {
1517
+ if (this._forkBlockNumber === undefined ||
1518
+ blockNumber.gte(new ethereumjs_util_1.BN(this._forkBlockNumber))) {
1519
+ return this._vm._common.hardfork();
1520
+ }
1521
+ if (this._hardforkActivations.size === 0) {
1522
+ throw new errors_2.InternalError(`No known hardfork for execution on historical block ${blockNumber.toString()} (relative to fork block number ${this._forkBlockNumber}). 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`);
1523
+ }
1524
+ /** search this._hardforkActivations for the highest block number that
1525
+ * isn't higher than blockNumber, and then return that found block number's
1526
+ * associated hardfork name. */
1527
+ const hardforkHistory = Array.from(this._hardforkActivations.entries());
1528
+ const [hardfork, activationBlock] = hardforkHistory.reduce(([highestHardfork, highestBlock], [thisHardfork, thisBlock]) => thisBlock > highestBlock && new ethereumjs_util_1.BN(thisBlock).lte(blockNumber)
1529
+ ? [thisHardfork, thisBlock]
1530
+ : [highestHardfork, highestBlock]);
1531
+ if (hardfork === undefined || blockNumber.ltn(activationBlock)) {
1532
+ throw new errors_2.InternalError(`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(hardforkHistory)}. For more information, see https://hardhat.org/hardhat-network/reference/#config`);
1533
+ }
1534
+ if (!constants_1.HARDHAT_NETWORK_SUPPORTED_HARDFORKS.includes(hardfork)) {
1535
+ throw new errors_2.InternalError(`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: ${constants_1.HARDHAT_NETWORK_SUPPORTED_HARDFORKS.join(", ")}`);
1536
+ }
1537
+ return hardfork;
1479
1538
  }
1480
- catch (e) {
1481
- throw new errors_2.InternalError(`Network id ${networkId} does not correspond to a network that Hardhat can trace`);
1539
+ _getCommonForTracing(networkId, blockNumber) {
1540
+ try {
1541
+ const common = new common_1.default({
1542
+ chain: Object.assign(Object.assign({}, common_1.default["_getChainParams"]("mainnet")), { chainId: networkId, networkId }),
1543
+ hardfork: this._selectHardfork(new ethereumjs_util_1.BN(blockNumber)),
1544
+ });
1545
+ return common;
1546
+ }
1547
+ catch (_a) {
1548
+ throw new errors_2.InternalError(`Network id ${networkId} does not correspond to a network that Hardhat can trace`);
1549
+ }
1482
1550
  }
1483
1551
  }
1552
+ exports.HardhatNode = HardhatNode;
1484
1553
  //# sourceMappingURL=node.js.map