hardhat 2.7.0 → 2.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. package/builtin-tasks/check.js +1 -1
  2. package/builtin-tasks/check.js.map +1 -1
  3. package/builtin-tasks/clean.js +3 -3
  4. package/builtin-tasks/clean.js.map +1 -1
  5. package/builtin-tasks/compile.js +48 -48
  6. package/builtin-tasks/compile.js.map +1 -1
  7. package/builtin-tasks/console.js +3 -3
  8. package/builtin-tasks/console.js.map +1 -1
  9. package/builtin-tasks/flatten.js +8 -6
  10. package/builtin-tasks/flatten.js.map +1 -1
  11. package/builtin-tasks/help.js +2 -2
  12. package/builtin-tasks/help.js.map +1 -1
  13. package/builtin-tasks/node.js +19 -13
  14. package/builtin-tasks/node.js.map +1 -1
  15. package/builtin-tasks/run.js +11 -7
  16. package/builtin-tasks/run.js.map +1 -1
  17. package/builtin-tasks/test.js +12 -11
  18. package/builtin-tasks/test.js.map +1 -1
  19. package/builtin-tasks/utils/solidity-files-cache.js +1 -1
  20. package/builtin-tasks/utils/solidity-files-cache.js.map +1 -1
  21. package/builtin-tasks/utils/watch.d.ts.map +1 -1
  22. package/builtin-tasks/utils/watch.js +4 -2
  23. package/builtin-tasks/utils/watch.js.map +1 -1
  24. package/internal/artifacts.js +17 -17
  25. package/internal/artifacts.js.map +1 -1
  26. package/internal/cli/analytics.js +10 -9
  27. package/internal/cli/analytics.js.map +1 -1
  28. package/internal/cli/autocomplete.js +7 -7
  29. package/internal/cli/autocomplete.js.map +1 -1
  30. package/internal/cli/bootstrap.js +2 -2
  31. package/internal/cli/bootstrap.js.map +1 -1
  32. package/internal/cli/cli.js +18 -16
  33. package/internal/cli/cli.js.map +1 -1
  34. package/internal/cli/project-creation.js +14 -14
  35. package/internal/cli/project-creation.js.map +1 -1
  36. package/internal/constants.d.ts.map +1 -1
  37. package/internal/constants.js +1 -0
  38. package/internal/constants.js.map +1 -1
  39. package/internal/context.d.ts +1 -2
  40. package/internal/context.d.ts.map +1 -1
  41. package/internal/context.js +3 -3
  42. package/internal/context.js.map +1 -1
  43. package/internal/core/config/config-loading.d.ts +3 -2
  44. package/internal/core/config/config-loading.d.ts.map +1 -1
  45. package/internal/core/config/config-loading.js +25 -8
  46. package/internal/core/config/config-loading.js.map +1 -1
  47. package/internal/core/config/config-resolution.d.ts.map +1 -1
  48. package/internal/core/config/config-resolution.js +29 -12
  49. package/internal/core/config/config-resolution.js.map +1 -1
  50. package/internal/core/config/config-validation.d.ts.map +1 -1
  51. package/internal/core/config/config-validation.js +68 -30
  52. package/internal/core/config/config-validation.js.map +1 -1
  53. package/internal/core/config/default-config.d.ts.map +1 -1
  54. package/internal/core/config/default-config.js +59 -1
  55. package/internal/core/config/default-config.js.map +1 -1
  56. package/internal/core/errors.js +3 -3
  57. package/internal/core/errors.js.map +1 -1
  58. package/internal/core/execution-mode.js +2 -2
  59. package/internal/core/execution-mode.js.map +1 -1
  60. package/internal/core/jsonrpc/types/access-list.d.ts +0 -1
  61. package/internal/core/jsonrpc/types/access-list.d.ts.map +1 -1
  62. package/internal/core/jsonrpc/types/access-list.js +1 -1
  63. package/internal/core/jsonrpc/types/access-list.js.map +1 -1
  64. package/internal/core/jsonrpc/types/base-types.js +9 -9
  65. package/internal/core/jsonrpc/types/base-types.js.map +1 -1
  66. package/internal/core/jsonrpc/types/input/blockTag.d.ts +3 -4
  67. package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -1
  68. package/internal/core/jsonrpc/types/input/blockTag.js +3 -3
  69. package/internal/core/jsonrpc/types/input/blockTag.js.map +1 -1
  70. package/internal/core/jsonrpc/types/input/callRequest.d.ts +0 -1
  71. package/internal/core/jsonrpc/types/input/callRequest.d.ts.map +1 -1
  72. package/internal/core/jsonrpc/types/input/callRequest.js +9 -9
  73. package/internal/core/jsonrpc/types/input/callRequest.js.map +1 -1
  74. package/internal/core/jsonrpc/types/input/debugTraceTransaction.js +4 -4
  75. package/internal/core/jsonrpc/types/input/debugTraceTransaction.js.map +1 -1
  76. package/internal/core/jsonrpc/types/input/filterRequest.d.ts +0 -1
  77. package/internal/core/jsonrpc/types/input/filterRequest.d.ts.map +1 -1
  78. package/internal/core/jsonrpc/types/input/filterRequest.js +2 -2
  79. package/internal/core/jsonrpc/types/input/filterRequest.js.map +1 -1
  80. package/internal/core/jsonrpc/types/input/hardhat-network.js +4 -4
  81. package/internal/core/jsonrpc/types/input/hardhat-network.js.map +1 -1
  82. package/internal/core/jsonrpc/types/input/logAddress.js +1 -1
  83. package/internal/core/jsonrpc/types/input/logAddress.js.map +1 -1
  84. package/internal/core/jsonrpc/types/input/logTopics.js +1 -1
  85. package/internal/core/jsonrpc/types/input/logTopics.js.map +1 -1
  86. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts +0 -1
  87. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts.map +1 -1
  88. package/internal/core/jsonrpc/types/input/transactionRequest.js +10 -10
  89. package/internal/core/jsonrpc/types/input/transactionRequest.js.map +1 -1
  90. package/internal/core/jsonrpc/types/output/block.d.ts +0 -1
  91. package/internal/core/jsonrpc/types/output/block.d.ts.map +1 -1
  92. package/internal/core/jsonrpc/types/output/block.js +5 -5
  93. package/internal/core/jsonrpc/types/output/block.js.map +1 -1
  94. package/internal/core/jsonrpc/types/output/log.d.ts +0 -1
  95. package/internal/core/jsonrpc/types/output/log.d.ts.map +1 -1
  96. package/internal/core/jsonrpc/types/output/log.js +5 -5
  97. package/internal/core/jsonrpc/types/output/log.js.map +1 -1
  98. package/internal/core/jsonrpc/types/output/receipt.d.ts +0 -1
  99. package/internal/core/jsonrpc/types/output/receipt.d.ts.map +1 -1
  100. package/internal/core/jsonrpc/types/output/receipt.js +6 -6
  101. package/internal/core/jsonrpc/types/output/receipt.js.map +1 -1
  102. package/internal/core/jsonrpc/types/output/transaction.d.ts +0 -1
  103. package/internal/core/jsonrpc/types/output/transaction.d.ts.map +1 -1
  104. package/internal/core/jsonrpc/types/output/transaction.js +9 -9
  105. package/internal/core/jsonrpc/types/output/transaction.js.map +1 -1
  106. package/internal/core/params/argumentTypes.d.ts.map +1 -1
  107. package/internal/core/params/argumentTypes.js +25 -13
  108. package/internal/core/params/argumentTypes.js.map +1 -1
  109. package/internal/core/params/env-variables.d.ts.map +1 -1
  110. package/internal/core/params/env-variables.js +9 -5
  111. package/internal/core/params/env-variables.js.map +1 -1
  112. package/internal/core/project-structure.js +1 -1
  113. package/internal/core/project-structure.js.map +1 -1
  114. package/internal/core/providers/accounts.d.ts.map +1 -1
  115. package/internal/core/providers/accounts.js +9 -8
  116. package/internal/core/providers/accounts.js.map +1 -1
  117. package/internal/core/providers/backwards-compatibility.js.map +1 -1
  118. package/internal/core/providers/chainId.js +3 -3
  119. package/internal/core/providers/chainId.js.map +1 -1
  120. package/internal/core/providers/construction.d.ts.map +1 -1
  121. package/internal/core/providers/construction.js +4 -4
  122. package/internal/core/providers/construction.js.map +1 -1
  123. package/internal/core/providers/gas-providers.d.ts.map +1 -1
  124. package/internal/core/providers/gas-providers.js +19 -17
  125. package/internal/core/providers/gas-providers.js.map +1 -1
  126. package/internal/core/providers/http.js +1 -1
  127. package/internal/core/providers/http.js.map +1 -1
  128. package/internal/core/providers/util.js +1 -1
  129. package/internal/core/providers/util.js.map +1 -1
  130. package/internal/core/providers/wrapper.d.ts.map +1 -1
  131. package/internal/core/runtime-environment.d.ts.map +1 -1
  132. package/internal/core/runtime-environment.js +7 -5
  133. package/internal/core/runtime-environment.js.map +1 -1
  134. package/internal/core/typescript-support.js +4 -4
  135. package/internal/core/typescript-support.js.map +1 -1
  136. package/internal/hardhat-network/jsonrpc/client.js +23 -23
  137. package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
  138. package/internal/hardhat-network/jsonrpc/handler.d.ts +1 -1
  139. package/internal/hardhat-network/jsonrpc/handler.d.ts.map +1 -1
  140. package/internal/hardhat-network/jsonrpc/handler.js +18 -9
  141. package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
  142. package/internal/hardhat-network/jsonrpc/server.js +3 -3
  143. package/internal/hardhat-network/jsonrpc/server.js.map +1 -1
  144. package/internal/hardhat-network/provider/BlockchainData.d.ts +1 -1
  145. package/internal/hardhat-network/provider/BlockchainData.js +12 -12
  146. package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
  147. package/internal/hardhat-network/provider/HardhatBlockchain.js +2 -2
  148. package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
  149. package/internal/hardhat-network/provider/PoolState.js +6 -6
  150. package/internal/hardhat-network/provider/PoolState.js.map +1 -1
  151. package/internal/hardhat-network/provider/TxPool.js +19 -19
  152. package/internal/hardhat-network/provider/TxPool.js.map +1 -1
  153. package/internal/hardhat-network/provider/filter.js +3 -3
  154. package/internal/hardhat-network/provider/filter.js.map +1 -1
  155. package/internal/hardhat-network/provider/fork/AccountState.js +4 -4
  156. package/internal/hardhat-network/provider/fork/AccountState.js.map +1 -1
  157. package/internal/hardhat-network/provider/fork/ForkBlockchain.js +7 -7
  158. package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
  159. package/internal/hardhat-network/provider/fork/ForkStateManager.js +34 -34
  160. package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
  161. package/internal/hardhat-network/provider/fork/random.d.ts +0 -1
  162. package/internal/hardhat-network/provider/fork/random.d.ts.map +1 -1
  163. package/internal/hardhat-network/provider/fork/random.js +13 -8
  164. package/internal/hardhat-network/provider/fork/random.js.map +1 -1
  165. package/internal/hardhat-network/provider/fork/rpcToBlockData.js +1 -0
  166. package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -1
  167. package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -1
  168. package/internal/hardhat-network/provider/modules/debug.js +1 -1
  169. package/internal/hardhat-network/provider/modules/debug.js.map +1 -1
  170. package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
  171. package/internal/hardhat-network/provider/modules/eth.js +86 -84
  172. package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
  173. package/internal/hardhat-network/provider/modules/evm.js +9 -9
  174. package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
  175. package/internal/hardhat-network/provider/modules/hardhat.js +16 -16
  176. package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
  177. package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
  178. package/internal/hardhat-network/provider/modules/logger.js +30 -25
  179. package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
  180. package/internal/hardhat-network/provider/modules/net.js +2 -2
  181. package/internal/hardhat-network/provider/modules/net.js.map +1 -1
  182. package/internal/hardhat-network/provider/modules/personal.js +2 -2
  183. package/internal/hardhat-network/provider/modules/personal.js.map +1 -1
  184. package/internal/hardhat-network/provider/modules/web3.js +4 -4
  185. package/internal/hardhat-network/provider/modules/web3.js.map +1 -1
  186. package/internal/hardhat-network/provider/node-types.d.ts +2 -1
  187. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
  188. package/internal/hardhat-network/provider/node.d.ts +7 -1
  189. package/internal/hardhat-network/provider/node.d.ts.map +1 -1
  190. package/internal/hardhat-network/provider/node.js +141 -76
  191. package/internal/hardhat-network/provider/node.js.map +1 -1
  192. package/internal/hardhat-network/provider/output.js +87 -87
  193. package/internal/hardhat-network/provider/output.js.map +1 -1
  194. package/internal/hardhat-network/provider/provider.d.ts +3 -2
  195. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  196. package/internal/hardhat-network/provider/provider.js +5 -3
  197. package/internal/hardhat-network/provider/provider.js.map +1 -1
  198. package/internal/hardhat-network/provider/return-data.js +4 -4
  199. package/internal/hardhat-network/provider/return-data.js.map +1 -1
  200. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
  201. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
  202. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
  203. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +1 -1
  204. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
  205. package/internal/hardhat-network/provider/utils/bnToHex.js +1 -1
  206. package/internal/hardhat-network/provider/utils/bnToHex.js.map +1 -1
  207. package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js.map +1 -1
  208. package/internal/hardhat-network/provider/utils/makeAccount.js +4 -4
  209. package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -1
  210. package/internal/hardhat-network/provider/utils/makeCommon.d.ts +1 -2
  211. package/internal/hardhat-network/provider/utils/makeCommon.d.ts.map +1 -1
  212. package/internal/hardhat-network/provider/utils/makeCommon.js +4 -4
  213. package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
  214. package/internal/hardhat-network/provider/utils/makeForkClient.js +4 -4
  215. package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -1
  216. package/internal/hardhat-network/provider/utils/makeStateTrie.js +1 -1
  217. package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
  218. package/internal/hardhat-network/provider/utils/txMapToArray.js +1 -1
  219. package/internal/hardhat-network/provider/utils/txMapToArray.js.map +1 -1
  220. package/internal/hardhat-network/stack-traces/compiler-to-model.js +4 -4
  221. package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
  222. package/internal/hardhat-network/stack-traces/consoleLogger.js +44 -44
  223. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  224. package/internal/hardhat-network/stack-traces/contracts-identifier.js +6 -6
  225. package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
  226. package/internal/hardhat-network/stack-traces/debug.js +17 -17
  227. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  228. package/internal/hardhat-network/stack-traces/error-inferrer.js +28 -28
  229. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
  230. package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.js +3 -3
  231. package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.js.map +1 -1
  232. package/internal/hardhat-network/stack-traces/model.js +5 -5
  233. package/internal/hardhat-network/stack-traces/model.js.map +1 -1
  234. package/internal/hardhat-network/stack-traces/solidity-errors.js +3 -3
  235. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  236. package/internal/hardhat-network/stack-traces/solidityTracer.js +10 -10
  237. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  238. package/internal/hardhat-network/stack-traces/source-maps.js +7 -7
  239. package/internal/hardhat-network/stack-traces/source-maps.js.map +1 -1
  240. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +5 -5
  241. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
  242. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js +2 -2
  243. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js.map +1 -1
  244. package/internal/hardhat-network/stack-traces/vm-tracer.js +3 -3
  245. package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
  246. package/internal/lib/hardhat-lib.js +3 -3
  247. package/internal/lib/hardhat-lib.js.map +1 -1
  248. package/internal/reset.js +1 -1
  249. package/internal/reset.js.map +1 -1
  250. package/internal/sentry/anonymizer.js.map +1 -1
  251. package/internal/sentry/reporter.js +5 -5
  252. package/internal/sentry/reporter.js.map +1 -1
  253. package/internal/sentry/subprocess.js +2 -2
  254. package/internal/sentry/subprocess.js.map +1 -1
  255. package/internal/sentry/transport.js +1 -1
  256. package/internal/sentry/transport.js.map +1 -1
  257. package/internal/solidity/compilation-job.js +4 -4
  258. package/internal/solidity/compilation-job.js.map +1 -1
  259. package/internal/solidity/compiler/downloader.d.ts +1 -1
  260. package/internal/solidity/compiler/downloader.d.ts.map +1 -1
  261. package/internal/solidity/compiler/downloader.js +21 -7
  262. package/internal/solidity/compiler/downloader.js.map +1 -1
  263. package/internal/solidity/compiler/index.js +1 -1
  264. package/internal/solidity/compiler/index.js.map +1 -1
  265. package/internal/solidity/dependencyGraph.js +2 -1
  266. package/internal/solidity/dependencyGraph.js.map +1 -1
  267. package/internal/solidity/parse.js +3 -2
  268. package/internal/solidity/parse.js.map +1 -1
  269. package/internal/solidity/resolver.js +10 -10
  270. package/internal/solidity/resolver.js.map +1 -1
  271. package/internal/util/abi-helpers.js +1 -1
  272. package/internal/util/abi-helpers.js.map +1 -1
  273. package/internal/util/download.d.ts.map +1 -1
  274. package/internal/util/download.js +12 -1
  275. package/internal/util/download.js.map +1 -1
  276. package/internal/util/global-dir.js +1 -1
  277. package/internal/util/global-dir.js.map +1 -1
  278. package/internal/util/hardforks.d.ts +2 -1
  279. package/internal/util/hardforks.d.ts.map +1 -1
  280. package/internal/util/hardforks.js +3 -1
  281. package/internal/util/hardforks.js.map +1 -1
  282. package/internal/util/jsonrpc.js +1 -1
  283. package/internal/util/jsonrpc.js.map +1 -1
  284. package/internal/util/packageInfo.js +1 -1
  285. package/internal/util/packageInfo.js.map +1 -1
  286. package/internal/util/scripts-runner.js +3 -3
  287. package/internal/util/scripts-runner.js.map +1 -1
  288. package/package.json +14 -14
  289. package/register.js +7 -7
  290. package/register.js.map +1 -1
  291. package/src/builtin-tasks/flatten.ts +4 -2
  292. package/src/builtin-tasks/node.ts +15 -8
  293. package/src/builtin-tasks/run.ts +13 -8
  294. package/src/builtin-tasks/test.ts +2 -0
  295. package/src/builtin-tasks/utils/watch.ts +3 -1
  296. package/src/internal/artifacts.ts +3 -3
  297. package/src/internal/cli/autocomplete.ts +3 -3
  298. package/src/internal/cli/bootstrap.ts +1 -1
  299. package/src/internal/cli/cli.ts +4 -1
  300. package/src/internal/cli/project-creation.ts +3 -3
  301. package/src/internal/constants.ts +1 -0
  302. package/src/internal/context.ts +1 -1
  303. package/src/internal/core/config/config-loading.ts +33 -3
  304. package/src/internal/core/config/config-resolution.ts +33 -3
  305. package/src/internal/core/config/config-validation.ts +70 -0
  306. package/src/internal/core/config/default-config.ts +59 -1
  307. package/src/internal/core/execution-mode.ts +1 -1
  308. package/src/internal/core/params/argumentTypes.ts +40 -25
  309. package/src/internal/core/params/env-variables.ts +13 -8
  310. package/src/internal/core/providers/accounts.ts +4 -3
  311. package/src/internal/core/providers/backwards-compatibility.ts +1 -1
  312. package/src/internal/core/providers/chainId.ts +1 -1
  313. package/src/internal/core/providers/construction.ts +1 -0
  314. package/src/internal/core/providers/gas-providers.ts +6 -4
  315. package/src/internal/core/providers/http.ts +1 -1
  316. package/src/internal/core/providers/wrapper.ts +1 -1
  317. package/src/internal/core/runtime-environment.ts +3 -1
  318. package/src/internal/core/typescript-support.ts +2 -2
  319. package/src/internal/hardhat-network/jsonrpc/client.ts +2 -2
  320. package/src/internal/hardhat-network/jsonrpc/handler.ts +13 -3
  321. package/src/internal/hardhat-network/jsonrpc/server.ts +3 -3
  322. package/src/internal/hardhat-network/provider/TxPool.ts +1 -1
  323. package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +1 -1
  324. package/src/internal/hardhat-network/provider/modules/eth.ts +23 -21
  325. package/src/internal/hardhat-network/provider/modules/hardhat.ts +1 -1
  326. package/src/internal/hardhat-network/provider/modules/logger.ts +13 -9
  327. package/src/internal/hardhat-network/provider/node-types.ts +2 -1
  328. package/src/internal/hardhat-network/provider/node.ts +149 -31
  329. package/src/internal/hardhat-network/provider/provider.ts +4 -1
  330. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +1 -1
  331. package/src/internal/hardhat-network/provider/utils/makeCommon.ts +2 -2
  332. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +1 -1
  333. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +3 -3
  334. package/src/internal/reset.ts +1 -1
  335. package/src/internal/sentry/subprocess.ts +2 -2
  336. package/src/internal/solidity/compiler/downloader.ts +27 -12
  337. package/src/internal/solidity/resolver.ts +1 -1
  338. package/src/internal/util/abi-helpers.ts +1 -1
  339. package/src/internal/util/download.ts +17 -1
  340. package/src/internal/util/hardforks.ts +2 -0
  341. package/src/internal/util/jsonrpc.ts +1 -1
  342. package/src/internal/util/packageInfo.ts +1 -1
  343. package/src/internal/util/scripts-runner.ts +1 -1
  344. package/src/types/config.ts +28 -0
  345. package/src/utils/source-names.ts +13 -11
  346. package/types/config.d.ts +16 -0
  347. package/types/config.d.ts.map +1 -1
  348. package/utils/source-names.js +7 -5
  349. package/utils/source-names.js.map +1 -1
  350. package/CHANGELOG.md +0 -71
  351. package/internal/hardhat-network/provider/HardhatStateManager.d.ts +0 -50
  352. package/internal/hardhat-network/provider/HardhatStateManager.d.ts.map +0 -1
  353. package/internal/hardhat-network/provider/HardhatStateManager.js +0 -249
  354. package/internal/hardhat-network/provider/HardhatStateManager.js.map +0 -1
  355. package/src/internal/hardhat-network/provider/HardhatStateManager.ts +0 -349
@@ -10,10 +10,12 @@ const tx_1 = require("@ethereumjs/tx");
10
10
  const vm_1 = __importDefault(require("@ethereumjs/vm"));
11
11
  const bloom_1 = __importDefault(require("@ethereumjs/vm/dist/bloom"));
12
12
  const exceptions_1 = require("@ethereumjs/vm/dist/exceptions");
13
+ const state_1 = require("@ethereumjs/vm/dist/state");
13
14
  const chalk_1 = __importDefault(require("chalk"));
14
15
  const debug_1 = __importDefault(require("debug"));
15
16
  const ethereumjs_util_1 = require("ethereumjs-util");
16
17
  const events_1 = __importDefault(require("events"));
18
+ const constants_1 = require("../../constants");
17
19
  const default_config_1 = require("../../core/config/default-config");
18
20
  const errors_1 = require("../../core/errors");
19
21
  const errors_2 = require("../../core/providers/errors");
@@ -36,7 +38,6 @@ const filter_1 = require("./filter");
36
38
  const ForkBlockchain_1 = require("./fork/ForkBlockchain");
37
39
  const ForkStateManager_1 = require("./fork/ForkStateManager");
38
40
  const HardhatBlockchain_1 = require("./HardhatBlockchain");
39
- const HardhatStateManager_1 = require("./HardhatStateManager");
40
41
  const node_types_1 = require("./node-types");
41
42
  const output_1 = require("./output");
42
43
  const return_data_1 = require("./return-data");
@@ -48,14 +49,15 @@ const TransactionQueue_1 = require("./TransactionQueue");
48
49
  const getCurrentTimestamp_1 = require("./utils/getCurrentTimestamp");
49
50
  const makeCommon_1 = require("./utils/makeCommon");
50
51
  const makeForkClient_1 = require("./utils/makeForkClient");
52
+ const makeStateTrie_1 = require("./utils/makeStateTrie");
51
53
  const makeForkCommon_1 = require("./utils/makeForkCommon");
52
54
  const putGenesisBlock_1 = require("./utils/putGenesisBlock");
53
55
  const txMapToArray_1 = require("./utils/txMapToArray");
54
- const log = debug_1.default("hardhat:core:hardhat-network:node");
56
+ const log = (0, debug_1.default)("hardhat:core:hardhat-network:node");
55
57
  const ethSigUtil = require("eth-sig-util");
56
58
  /* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
57
59
  class HardhatNode extends events_1.default {
58
- constructor(_vm, _stateManager, _blockchain, _txPool, _automine, _minGasPrice, _blockTimeOffsetSeconds = new ethereumjs_util_1.BN(0), _mempoolOrder, _coinbase, genesisAccounts, tracingConfig, _forkNetworkId, nextBlockBaseFee) {
60
+ constructor(_vm, _stateManager, _blockchain, _txPool, _automine, _minGasPrice, _blockTimeOffsetSeconds = new ethereumjs_util_1.BN(0), _mempoolOrder, _coinbase, genesisAccounts, _configNetworkId, _configChainId, _hardforkActivations, tracingConfig, _forkNetworkId, _forkBlockNumber, nextBlockBaseFee) {
59
61
  super();
60
62
  this._vm = _vm;
61
63
  this._stateManager = _stateManager;
@@ -66,7 +68,11 @@ class HardhatNode extends events_1.default {
66
68
  this._blockTimeOffsetSeconds = _blockTimeOffsetSeconds;
67
69
  this._mempoolOrder = _mempoolOrder;
68
70
  this._coinbase = _coinbase;
71
+ this._configNetworkId = _configNetworkId;
72
+ this._configChainId = _configChainId;
73
+ this._hardforkActivations = _hardforkActivations;
69
74
  this._forkNetworkId = _forkNetworkId;
75
+ this._forkBlockNumber = _forkBlockNumber;
70
76
  this._localAccounts = new Map(); // address => private key
71
77
  this._impersonatedAccounts = new Set(); // address
72
78
  this._nextBlockTimestamp = new ethereumjs_util_1.BN(0);
@@ -91,7 +97,7 @@ class HardhatNode extends events_1.default {
91
97
  }
92
98
  try {
93
99
  for (const buildInfo of tracingConfig.buildInfos) {
94
- const bytecodes = compiler_to_model_1.createModelsAndDecodeBytecodes(buildInfo.solcVersion, buildInfo.input, buildInfo.output);
100
+ const bytecodes = (0, compiler_to_model_1.createModelsAndDecodeBytecodes)(buildInfo.solcVersion, buildInfo.input, buildInfo.output);
95
101
  for (const bytecode of bytecodes) {
96
102
  this._vmTraceDecoder.addBytecode(bytecode);
97
103
  }
@@ -100,37 +106,42 @@ class HardhatNode extends events_1.default {
100
106
  catch (error) {
101
107
  console.warn(chalk_1.default.yellow("The Hardhat Network tracing engine could not be initialized. Run Hardhat with --verbose to learn more."));
102
108
  log("Hardhat Network tracing disabled: ContractsIdentifier failed to be initialized. Please report this to help us improve Hardhat.\n", error);
103
- reporter_1.Reporter.reportError(error);
109
+ if (error instanceof Error) {
110
+ reporter_1.Reporter.reportError(error);
111
+ }
104
112
  }
105
113
  }
106
114
  static async create(config) {
107
- const { automine, genesisAccounts, blockGasLimit, allowUnlimitedContractSize, tracingConfig, minGasPrice, mempoolOrder, } = config;
115
+ const { automine, genesisAccounts, blockGasLimit, allowUnlimitedContractSize, tracingConfig, minGasPrice, mempoolOrder, networkId, chainId, } = config;
108
116
  let common;
109
117
  let stateManager;
110
118
  let blockchain;
111
119
  let initialBlockTimeOffset;
112
120
  let nextBlockBaseFeePerGas;
113
121
  let forkNetworkId;
122
+ let forkBlockNum;
123
+ let hardforkActivations = new Map();
114
124
  const initialBaseFeePerGasConfig = config.initialBaseFeePerGas !== undefined
115
125
  ? new ethereumjs_util_1.BN(config.initialBaseFeePerGas)
116
126
  : undefined;
117
- const hardfork = hardforks_1.getHardforkName(config.hardfork);
118
- if (node_types_1.isForkedNodeConfig(config)) {
119
- const { forkClient, forkBlockNumber, forkBlockTimestamp } = await makeForkClient_1.makeForkClient(config.forkConfig, config.forkCachePath);
120
- common = await makeForkCommon_1.makeForkCommon(config);
127
+ const hardfork = (0, hardforks_1.getHardforkName)(config.hardfork);
128
+ if ((0, node_types_1.isForkedNodeConfig)(config)) {
129
+ const { forkClient, forkBlockNumber, forkBlockTimestamp } = await (0, makeForkClient_1.makeForkClient)(config.forkConfig, config.forkCachePath);
130
+ common = await (0, makeForkCommon_1.makeForkCommon)(config);
121
131
  forkNetworkId = forkClient.getNetworkId();
132
+ forkBlockNum = forkBlockNumber.toNumber();
122
133
  this._validateHardforks(config.forkConfig.blockNumber, common, forkNetworkId);
123
134
  const forkStateManager = new ForkStateManager_1.ForkStateManager(forkClient, forkBlockNumber);
124
135
  await forkStateManager.initializeGenesisAccounts(genesisAccounts);
125
136
  stateManager = forkStateManager;
126
137
  blockchain = new ForkBlockchain_1.ForkBlockchain(forkClient, forkBlockNumber, common);
127
- initialBlockTimeOffset = new ethereumjs_util_1.BN(date_1.getDifferenceInSeconds(new Date(forkBlockTimestamp), new Date()));
138
+ initialBlockTimeOffset = new ethereumjs_util_1.BN((0, date_1.getDifferenceInSeconds)(new Date(forkBlockTimestamp), new Date()));
128
139
  // If the hardfork is London or later we need a base fee per gas for the
129
140
  // first local block. If initialBaseFeePerGas config was provided we use
130
141
  // that. Otherwise, what we do depends on the block we forked from. If
131
142
  // it's an EIP-1559 block we don't need to do anything here, as we'll
132
143
  // end up automatically computing the next base fee per gas based on it.
133
- if (hardforks_1.hardforkGte(hardfork, hardforks_1.HardforkName.LONDON)) {
144
+ if ((0, hardforks_1.hardforkGte)(hardfork, hardforks_1.HardforkName.LONDON)) {
134
145
  if (initialBaseFeePerGasConfig !== undefined) {
135
146
  nextBlockBaseFeePerGas = initialBaseFeePerGasConfig;
136
147
  }
@@ -141,21 +152,26 @@ class HardhatNode extends events_1.default {
141
152
  }
142
153
  }
143
154
  }
155
+ if (config.chains.has(forkNetworkId)) {
156
+ hardforkActivations = config.chains.get(forkNetworkId).hardforkHistory;
157
+ }
144
158
  }
145
159
  else {
146
- const hardhatStateManager = new HardhatStateManager_1.HardhatStateManager();
147
- await hardhatStateManager.initializeGenesisAccounts(genesisAccounts);
148
- const initialStateRoot = await hardhatStateManager.getStateRoot();
149
- common = makeCommon_1.makeCommon(config, initialStateRoot);
160
+ const stateTrie = await (0, makeStateTrie_1.makeStateTrie)(genesisAccounts);
161
+ common = (0, makeCommon_1.makeCommon)(config, stateTrie);
162
+ stateManager = new state_1.DefaultStateManager({
163
+ common,
164
+ trie: stateTrie,
165
+ });
150
166
  const hardhatBlockchain = new HardhatBlockchain_1.HardhatBlockchain();
151
- const genesisBlockBaseFeePerGas = hardforks_1.hardforkGte(hardfork, hardforks_1.HardforkName.LONDON)
152
- ? initialBaseFeePerGasConfig !== null && initialBaseFeePerGasConfig !== void 0 ? initialBaseFeePerGasConfig : new ethereumjs_util_1.BN(default_config_1.HARDHAT_NETWORK_DEFAULT_INITIAL_BASE_FEE_PER_GAS) : undefined;
153
- await putGenesisBlock_1.putGenesisBlock(hardhatBlockchain, common, genesisBlockBaseFeePerGas);
167
+ const genesisBlockBaseFeePerGas = (0, hardforks_1.hardforkGte)(hardfork, hardforks_1.HardforkName.LONDON)
168
+ ? initialBaseFeePerGasConfig !== null && initialBaseFeePerGasConfig !== void 0 ? initialBaseFeePerGasConfig : new ethereumjs_util_1.BN(default_config_1.HARDHAT_NETWORK_DEFAULT_INITIAL_BASE_FEE_PER_GAS)
169
+ : undefined;
170
+ await (0, putGenesisBlock_1.putGenesisBlock)(hardhatBlockchain, common, genesisBlockBaseFeePerGas);
154
171
  if (config.initialDate !== undefined) {
155
- initialBlockTimeOffset = new ethereumjs_util_1.BN(date_1.getDifferenceInSeconds(config.initialDate, new Date()));
172
+ initialBlockTimeOffset = new ethereumjs_util_1.BN((0, date_1.getDifferenceInSeconds)(config.initialDate, new Date()));
156
173
  }
157
174
  blockchain = hardhatBlockchain;
158
- stateManager = hardhatStateManager;
159
175
  }
160
176
  const txPool = new TxPool_1.TxPool(stateManager, new ethereumjs_util_1.BN(blockGasLimit), common);
161
177
  const vm = new vm_1.default({
@@ -165,7 +181,7 @@ class HardhatNode extends events_1.default {
165
181
  blockchain: blockchain,
166
182
  allowUnlimitedContractSize,
167
183
  });
168
- const node = new HardhatNode(vm, stateManager, blockchain, txPool, automine, minGasPrice, initialBlockTimeOffset, mempoolOrder, config.coinbase, genesisAccounts, tracingConfig, forkNetworkId, nextBlockBaseFeePerGas);
184
+ const node = new HardhatNode(vm, stateManager, blockchain, txPool, automine, minGasPrice, initialBlockTimeOffset, mempoolOrder, config.coinbase, genesisAccounts, networkId, chainId, hardforkActivations, tracingConfig, forkNetworkId, forkBlockNum, nextBlockBaseFeePerGas);
169
185
  return [common, node];
170
186
  }
171
187
  static _validateHardforks(forkBlockNumber, common, remoteChainId) {
@@ -179,7 +195,7 @@ The hardfork must be at least spuriousDragon, but ${common.hardfork()} was given
179
195
  try {
180
196
  upstreamCommon = new common_1.default({ chain: remoteChainId });
181
197
  }
182
- catch (error) {
198
+ catch (_a) {
183
199
  // If ethereumjs doesn't have a common it will throw and we won't have
184
200
  // info about the activation block of each hardfork, so we don't run
185
201
  // this validation.
@@ -194,7 +210,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
194
210
  }
195
211
  }
196
212
  async getSignedTransaction(txParams) {
197
- const senderAddress = ethereumjs_util_1.bufferToHex(txParams.from);
213
+ const senderAddress = (0, ethereumjs_util_1.bufferToHex)(txParams.from);
198
214
  const pk = this._localAccounts.get(senderAddress);
199
215
  if (pk !== undefined) {
200
216
  let tx;
@@ -240,14 +256,18 @@ Hardhat Network's forking functionality only works with blocks from at least spu
240
256
  result = await this._mineBlockWithPendingTxs(blockTimestamp);
241
257
  }
242
258
  catch (err) {
243
- if (err === null || err === void 0 ? void 0 : err.message.includes("sender doesn't have enough funds")) {
244
- throw new errors_2.InvalidInputError(err.message, err);
245
- }
246
- // Some network errors are HardhatErrors, and can end up here when forking
247
- if (errors_1.HardhatError.isHardhatError(err)) {
248
- throw err;
259
+ if (err instanceof Error) {
260
+ if (err === null || err === void 0 ? void 0 : err.message.includes("sender doesn't have enough funds")) {
261
+ throw new errors_2.InvalidInputError(err.message, err);
262
+ }
263
+ // Some network errors are HardhatErrors, and can end up here when forking
264
+ if (errors_1.HardhatError.isHardhatError(err)) {
265
+ throw err;
266
+ }
267
+ throw new errors_2.TransactionExecutionError(err);
249
268
  }
250
- throw new errors_2.TransactionExecutionError(err);
269
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
270
+ throw err;
251
271
  }
252
272
  await this._saveBlockAsSuccessfullyRun(result.block, result.blockResult);
253
273
  if (needsTimestampIncrease) {
@@ -264,7 +284,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
264
284
  var _a, _b, _c, _d;
265
285
  let txParams;
266
286
  const nonce = await this._getNonce(new ethereumjs_util_1.Address(call.from), blockNumberOrPending);
267
- if (call.gasPrice !== undefined || !this.isEip1559Active()) {
287
+ if (call.gasPrice !== undefined ||
288
+ !this.isEip1559Active(blockNumberOrPending)) {
268
289
  txParams = Object.assign({ gasPrice: new ethereumjs_util_1.BN(0), nonce }, call);
269
290
  }
270
291
  else {
@@ -295,8 +316,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
295
316
  }
296
317
  async getCodeFromTrace(trace, blockNumberOrPending) {
297
318
  if (trace === undefined ||
298
- message_trace_1.isPrecompileTrace(trace) ||
299
- message_trace_1.isCreateTrace(trace)) {
319
+ (0, message_trace_1.isPrecompileTrace)(trace) ||
320
+ (0, message_trace_1.isCreateTrace)(trace)) {
300
321
  return Buffer.from("");
301
322
  }
302
323
  return this.getCode(new ethereumjs_util_1.Address(trace.address), blockNumberOrPending);
@@ -458,19 +479,19 @@ Hardhat Network's forking functionality only works with blocks from at least spu
458
479
  return (_a = this._txPool.getTransactionByHash(hash)) === null || _a === void 0 ? void 0 : _a.data;
459
480
  }
460
481
  async getTransactionReceipt(hash) {
461
- const hashBuffer = hash instanceof Buffer ? hash : ethereumjs_util_1.toBuffer(hash);
482
+ const hashBuffer = hash instanceof Buffer ? hash : (0, ethereumjs_util_1.toBuffer)(hash);
462
483
  const receipt = await this._blockchain.getTransactionReceipt(hashBuffer);
463
484
  return receipt !== null && receipt !== void 0 ? receipt : undefined;
464
485
  }
465
486
  async getPendingTransactions() {
466
- const txPoolPending = txMapToArray_1.txMapToArray(this._txPool.getPendingTransactions());
467
- const txPoolQueued = txMapToArray_1.txMapToArray(this._txPool.getQueuedTransactions());
487
+ const txPoolPending = (0, txMapToArray_1.txMapToArray)(this._txPool.getPendingTransactions());
488
+ const txPoolQueued = (0, txMapToArray_1.txMapToArray)(this._txPool.getQueuedTransactions());
468
489
  return txPoolPending.concat(txPoolQueued);
469
490
  }
470
491
  async signPersonalMessage(address, data) {
471
- const messageHash = ethereumjs_util_1.hashPersonalMessage(data);
492
+ const messageHash = (0, ethereumjs_util_1.hashPersonalMessage)(data);
472
493
  const privateKey = this._getLocalAccountPrivateKey(address);
473
- return ethereumjs_util_1.ecsign(messageHash, privateKey);
494
+ return (0, ethereumjs_util_1.ecsign)(messageHash, privateKey);
474
495
  }
475
496
  async signTypedDataV4(address, typedData) {
476
497
  const privateKey = this._getLocalAccountPrivateKey(address);
@@ -562,7 +583,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
562
583
  id: filterId,
563
584
  type: filter_1.Type.BLOCK_SUBSCRIPTION,
564
585
  deadline: this._newDeadline(),
565
- hashes: [ethereumjs_util_1.bufferToHex(block.header.hash())],
586
+ hashes: [(0, ethereumjs_util_1.bufferToHex)(block.header.hash())],
566
587
  logs: [],
567
588
  subscription: isSubscription,
568
589
  });
@@ -631,7 +652,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
631
652
  async addCompilationResult(solcVersion, compilerInput, compilerOutput) {
632
653
  let bytecodes;
633
654
  try {
634
- bytecodes = compiler_to_model_1.createModelsAndDecodeBytecodes(solcVersion, compilerInput, compilerOutput);
655
+ bytecodes = (0, compiler_to_model_1.createModelsAndDecodeBytecodes)(solcVersion, compilerInput, compilerOutput);
635
656
  }
636
657
  catch (error) {
637
658
  console.warn(chalk_1.default.yellow("The Hardhat Network tracing engine could not be updated. Run Hardhat with --verbose to learn more."));
@@ -644,11 +665,11 @@ Hardhat Network's forking functionality only works with blocks from at least spu
644
665
  return true;
645
666
  }
646
667
  addImpersonatedAccount(address) {
647
- this._impersonatedAccounts.add(ethereumjs_util_1.bufferToHex(address));
668
+ this._impersonatedAccounts.add((0, ethereumjs_util_1.bufferToHex)(address));
648
669
  return true;
649
670
  }
650
671
  removeImpersonatedAccount(address) {
651
- return this._impersonatedAccounts.delete(ethereumjs_util_1.bufferToHex(address));
672
+ return this._impersonatedAccounts.delete((0, ethereumjs_util_1.bufferToHex)(address));
652
673
  }
653
674
  setAutomine(automine) {
654
675
  this._automine = automine;
@@ -670,7 +691,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
670
691
  }
671
692
  const isTransactionMined = await this._isTransactionMined(hash);
672
693
  if (isTransactionMined) {
673
- throw new errors_2.InvalidArgumentsError(`Transaction ${ethereumjs_util_1.bufferToHex(hash)} cannot be dropped because it's already mined`);
694
+ throw new errors_2.InvalidArgumentsError(`Transaction ${(0, ethereumjs_util_1.bufferToHex)(hash)} cannot be dropped because it's already mined`);
674
695
  }
675
696
  return false;
676
697
  }
@@ -703,7 +724,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
703
724
  async traceTransaction(hash, config) {
704
725
  const block = await this.getBlockByTransactionHash(hash);
705
726
  if (block === undefined) {
706
- throw new errors_2.InvalidInputError(`Unable to find a block containing transaction ${ethereumjs_util_1.bufferToHex(hash)}`);
727
+ throw new errors_2.InvalidInputError(`Unable to find a block containing transaction ${(0, ethereumjs_util_1.bufferToHex)(hash)}`);
707
728
  }
708
729
  return this._runInBlockContext(new ethereumjs_util_1.BN(block.header.number).subn(1), async () => {
709
730
  const blockNumber = block.header.number.toNumber();
@@ -711,8 +732,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
711
732
  let vm = this._vm;
712
733
  if (blockchain instanceof ForkBlockchain_1.ForkBlockchain &&
713
734
  blockNumber <= blockchain.getForkBlockNumber().toNumber()) {
714
- errors_1.assertHardhatInvariant(this._forkNetworkId !== undefined, "this._forkNetworkId should exist if the blockchain is an instance of ForkBlockchain");
715
- const common = getCommonForTracing(this._forkNetworkId, blockNumber);
735
+ (0, errors_1.assertHardhatInvariant)(this._forkNetworkId !== undefined, "this._forkNetworkId should exist if the blockchain is an instance of ForkBlockchain");
736
+ const common = this._getCommonForTracing(this._forkNetworkId, blockNumber);
716
737
  vm = new vm_1.default({
717
738
  common,
718
739
  activatePrecompiles: true,
@@ -805,7 +826,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
805
826
  baseFeePerGas.push(pendingBlock.header.calcNextBaseFee());
806
827
  }
807
828
  else {
808
- errors_1.assertHardhatInvariant(false, "This should never happen");
829
+ (0, errors_1.assertHardhatInvariant)(false, "This should never happen");
809
830
  }
810
831
  }
811
832
  return {
@@ -851,7 +872,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
851
872
  }
852
873
  return {
853
874
  effectiveGasReward,
854
- gasUsed: base_types_1.rpcQuantityToBN(r === null || r === void 0 ? void 0 : r.gasUsed),
875
+ gasUsed: (0, base_types_1.rpcQuantityToBN)(r === null || r === void 0 ? void 0 : r.gasUsed),
855
876
  };
856
877
  })
857
878
  .sort((a, b) => a.effectiveGasReward.cmp(b.effectiveGasReward));
@@ -873,7 +894,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
873
894
  async _addPendingTransaction(tx) {
874
895
  await this._txPool.addTransaction(tx);
875
896
  await this._notifyPendingTransaction(tx);
876
- return ethereumjs_util_1.bufferToHex(tx.hash());
897
+ return (0, ethereumjs_util_1.bufferToHex)(tx.hash());
877
898
  }
878
899
  async _mineTransaction(tx) {
879
900
  await this._addPendingTransaction(tx);
@@ -929,7 +950,11 @@ Hardhat Network's forking functionality only works with blocks from at least spu
929
950
  sender = tx.getSenderAddress(); // verifies signature as a side effect
930
951
  }
931
952
  catch (e) {
932
- throw new errors_2.InvalidInputError(e.message);
953
+ if (e instanceof Error) {
954
+ throw new errors_2.InvalidInputError(e.message);
955
+ }
956
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
957
+ throw e;
933
958
  }
934
959
  // validate nonce
935
960
  const nextPendingNonce = await this._txPool.getNextPendingNonce(sender);
@@ -1064,9 +1089,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1064
1089
  this._snapshots.splice(snapshotIndex);
1065
1090
  }
1066
1091
  _initLocalAccounts(genesisAccounts) {
1067
- const privateKeys = genesisAccounts.map((acc) => ethereumjs_util_1.toBuffer(acc.privateKey));
1092
+ const privateKeys = genesisAccounts.map((acc) => (0, ethereumjs_util_1.toBuffer)(acc.privateKey));
1068
1093
  for (const pk of privateKeys) {
1069
- this._localAccounts.set(ethereumjs_util_1.bufferToHex(ethereumjs_util_1.privateToAddress(pk)), pk);
1094
+ this._localAccounts.set((0, ethereumjs_util_1.bufferToHex)((0, ethereumjs_util_1.privateToAddress)(pk)), pk);
1070
1095
  }
1071
1096
  }
1072
1097
  async _getConsoleLogMessages(vmTrace, vmTracerError) {
@@ -1104,7 +1129,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1104
1129
  if (error.error === exceptions_1.ERROR.OUT_OF_GAS) {
1105
1130
  if (stackTrace !== undefined &&
1106
1131
  this._isContractTooLargeStackTrace(stackTrace)) {
1107
- return solidity_errors_1.encodeSolidityStackTrace("Transaction ran out of gas", stackTrace);
1132
+ return (0, solidity_errors_1.encodeSolidityStackTrace)("Transaction ran out of gas", stackTrace);
1108
1133
  }
1109
1134
  return new errors_2.TransactionExecutionError("Transaction ran out of gas");
1110
1135
  }
@@ -1126,12 +1151,12 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1126
1151
  if (error.error === exceptions_1.ERROR.REVERT) {
1127
1152
  const fallbackMessage = `VM Exception while processing transaction: revert ${returnDataExplanation}`;
1128
1153
  if (stackTrace !== undefined) {
1129
- return solidity_errors_1.encodeSolidityStackTrace(fallbackMessage, stackTrace);
1154
+ return (0, solidity_errors_1.encodeSolidityStackTrace)(fallbackMessage, stackTrace);
1130
1155
  }
1131
1156
  return new errors_2.TransactionExecutionError(fallbackMessage);
1132
1157
  }
1133
1158
  if (stackTrace !== undefined) {
1134
- return solidity_errors_1.encodeSolidityStackTrace(`Transaction failed: revert ${returnDataExplanation}`, stackTrace);
1159
+ return (0, solidity_errors_1.encodeSolidityStackTrace)(`Transaction failed: revert ${returnDataExplanation}`, stackTrace);
1135
1160
  }
1136
1161
  return new errors_2.TransactionExecutionError(`Transaction reverted ${returnDataExplanation}`);
1137
1162
  }
@@ -1144,7 +1169,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1144
1169
  let blockTimestamp;
1145
1170
  let offsetShouldChange;
1146
1171
  let newOffset = new ethereumjs_util_1.BN(0);
1147
- const currentTimestamp = new ethereumjs_util_1.BN(getCurrentTimestamp_1.getCurrentTimestamp());
1172
+ const currentTimestamp = new ethereumjs_util_1.BN((0, getCurrentTimestamp_1.getCurrentTimestamp)());
1148
1173
  // if timestamp is not provided, we check nextBlockTimestamp, if it is
1149
1174
  // set, we use it as the timestamp instead. If it is not set, we use
1150
1175
  // time offset + real time as the timestamp.
@@ -1173,7 +1198,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1173
1198
  async _notifyPendingTransaction(tx) {
1174
1199
  this._filters.forEach((filter) => {
1175
1200
  if (filter.type === filter_1.Type.PENDING_TRANSACTION_SUBSCRIPTION) {
1176
- const hash = ethereumjs_util_1.bufferToHex(tx.hash());
1201
+ const hash = (0, ethereumjs_util_1.bufferToHex)(tx.hash());
1177
1202
  if (filter.subscription) {
1178
1203
  this._emitEthEvent(filter.id, hash);
1179
1204
  return;
@@ -1194,7 +1219,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1194
1219
  * was added to the blockchain.
1195
1220
  */
1196
1221
  async _saveBlockAsSuccessfullyRun(block, runBlockResult) {
1197
- const receipts = output_1.getRpcReceiptOutputsFromLocalBlockExecution(block, runBlockResult, output_1.shouldShowTransactionTypeForHardfork(this._vm._common));
1222
+ const receipts = (0, output_1.getRpcReceiptOutputsFromLocalBlockExecution)(block, runBlockResult, (0, output_1.shouldShowTransactionTypeForHardfork)(this._vm._common));
1198
1223
  this._blockchain.addTransactionReceipts(receipts);
1199
1224
  const td = await this.getBlockTotalDifficulty(block);
1200
1225
  const rpcLogs = [];
@@ -1209,14 +1234,14 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1209
1234
  case filter_1.Type.BLOCK_SUBSCRIPTION:
1210
1235
  const hash = block.hash();
1211
1236
  if (filter.subscription) {
1212
- this._emitEthEvent(filter.id, output_1.getRpcBlock(block, td, output_1.shouldShowTransactionTypeForHardfork(this._vm._common), false));
1237
+ this._emitEthEvent(filter.id, (0, output_1.getRpcBlock)(block, td, (0, output_1.shouldShowTransactionTypeForHardfork)(this._vm._common), false));
1213
1238
  return;
1214
1239
  }
1215
- filter.hashes.push(ethereumjs_util_1.bufferToHex(hash));
1240
+ filter.hashes.push((0, ethereumjs_util_1.bufferToHex)(hash));
1216
1241
  break;
1217
1242
  case filter_1.Type.LOGS_SUBSCRIPTION:
1218
- if (filter_1.bloomFilter(new bloom_1.default(block.header.bloom), filter.criteria.addresses, filter.criteria.normalizedTopics)) {
1219
- const logs = filter_1.filterLogs(rpcLogs, filter.criteria);
1243
+ if ((0, filter_1.bloomFilter)(new bloom_1.default(block.header.bloom), filter.criteria.addresses, filter.criteria.normalizedTopics)) {
1244
+ const logs = (0, filter_1.filterLogs)(rpcLogs, filter.criteria);
1220
1245
  if (logs.length === 0) {
1221
1246
  return;
1222
1247
  }
@@ -1339,8 +1364,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1339
1364
  * makes.
1340
1365
  */
1341
1366
  async _runTxAndRevertMutations(tx, blockNumberOrPending, forceBaseFeeZero = false) {
1367
+ var _a, _b;
1342
1368
  const initialStateRoot = await this._stateManager.getStateRoot();
1343
1369
  let blockContext;
1370
+ let originalCommon;
1344
1371
  try {
1345
1372
  if (blockNumberOrPending === "pending") {
1346
1373
  // the new block has already been mined by _runInBlockContext hence we take latest here
@@ -1350,7 +1377,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1350
1377
  // We know that this block number exists, because otherwise
1351
1378
  // there would be an error in the RPC layer.
1352
1379
  const block = await this.getBlockByNumber(blockNumberOrPending);
1353
- errors_1.assertHardhatInvariant(block !== undefined, "Tried to run a tx in the context of a non-existent block");
1380
+ (0, errors_1.assertHardhatInvariant)(block !== undefined, "Tried to run a tx in the context of a non-existent block");
1354
1381
  blockContext = block;
1355
1382
  // we don't need to add the tx to the block because runTx doesn't
1356
1383
  // know anything about the txs in the current block
@@ -1368,7 +1395,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1368
1395
  // we don't want to debit any balance nor fail any tx when running an
1369
1396
  // eth_call. This will make the BASEFEE option also return 0, which
1370
1397
  // shouldn't. See: https://github.com/nomiclabs/hardhat/issues/1688
1371
- if (this.isEip1559Active() &&
1398
+ if (this.isEip1559Active(blockNumberOrPending) &&
1372
1399
  (blockContext.header.baseFeePerGas === undefined || forceBaseFeeZero)) {
1373
1400
  blockContext = block_1.Block.fromBlockData(blockContext, {
1374
1401
  freeze: false,
@@ -1376,6 +1403,11 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1376
1403
  });
1377
1404
  blockContext.header.baseFeePerGas = new ethereumjs_util_1.BN(0);
1378
1405
  }
1406
+ originalCommon = this._vm._common;
1407
+ this._vm._common = new common_1.default({
1408
+ 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 }),
1409
+ hardfork: this._selectHardfork(blockContext.header.number),
1410
+ });
1379
1411
  return await this._vm.runTx({
1380
1412
  block: blockContext,
1381
1413
  tx,
@@ -1385,6 +1417,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1385
1417
  });
1386
1418
  }
1387
1419
  finally {
1420
+ if (originalCommon !== undefined) {
1421
+ this._vm._common = originalCommon;
1422
+ }
1388
1423
  await this._stateManager.setStateRoot(initialStateRoot);
1389
1424
  }
1390
1425
  }
@@ -1447,12 +1482,17 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1447
1482
  async _persistIrregularWorldState() {
1448
1483
  this._irregularStatesByBlockNumber.set((await this.getLatestBlock()).header.number.toString(), await this._stateManager.getStateRoot());
1449
1484
  }
1450
- isEip1559Active() {
1485
+ isEip1559Active(blockNumberOrPending) {
1486
+ if (blockNumberOrPending !== undefined &&
1487
+ blockNumberOrPending !== "pending") {
1488
+ return this._vm._common.hardforkGteHardfork(this._selectHardfork(blockNumberOrPending), "london");
1489
+ }
1451
1490
  return this._vm._common.gteHardfork("london");
1452
1491
  }
1453
1492
  async _getEstimateGasFeePriceFields(callParams, blockNumberOrPending) {
1454
1493
  var _a, _b;
1455
- if (!this.isEip1559Active() || callParams.gasPrice !== undefined) {
1494
+ if (!this.isEip1559Active(blockNumberOrPending) ||
1495
+ callParams.gasPrice !== undefined) {
1456
1496
  return { gasPrice: (_a = callParams.gasPrice) !== null && _a !== void 0 ? _a : (await this.getGasPrice()) };
1457
1497
  }
1458
1498
  let maxFeePerGas = callParams.maxFeePerGas;
@@ -1475,16 +1515,41 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1475
1515
  }
1476
1516
  return { maxFeePerGas, maxPriorityFeePerGas };
1477
1517
  }
1478
- }
1479
- exports.HardhatNode = HardhatNode;
1480
- function getCommonForTracing(networkId, blockNumber) {
1481
- try {
1482
- const common = new common_1.default({ chain: networkId });
1483
- common.setHardfork(common.activeHardfork(blockNumber));
1484
- return common;
1518
+ _selectHardfork(blockNumber) {
1519
+ if (this._forkBlockNumber === undefined ||
1520
+ blockNumber.gte(new ethereumjs_util_1.BN(this._forkBlockNumber))) {
1521
+ return this._vm._common.hardfork();
1522
+ }
1523
+ if (this._hardforkActivations.size === 0) {
1524
+ 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`);
1525
+ }
1526
+ /** search this._hardforkActivations for the highest block number that
1527
+ * isn't higher than blockNumber, and then return that found block number's
1528
+ * associated hardfork name. */
1529
+ const hardforkHistory = Array.from(this._hardforkActivations.entries());
1530
+ const [hardfork, activationBlock] = hardforkHistory.reduce(([highestHardfork, highestBlock], [thisHardfork, thisBlock]) => thisBlock > highestBlock && new ethereumjs_util_1.BN(thisBlock).lte(blockNumber)
1531
+ ? [thisHardfork, thisBlock]
1532
+ : [highestHardfork, highestBlock]);
1533
+ if (hardfork === undefined || blockNumber.ltn(activationBlock)) {
1534
+ 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`);
1535
+ }
1536
+ if (!constants_1.HARDHAT_NETWORK_SUPPORTED_HARDFORKS.includes(hardfork)) {
1537
+ 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(", ")}`);
1538
+ }
1539
+ return hardfork;
1485
1540
  }
1486
- catch (e) {
1487
- throw new errors_2.InternalError(`Network id ${networkId} does not correspond to a network that Hardhat can trace`);
1541
+ _getCommonForTracing(networkId, blockNumber) {
1542
+ try {
1543
+ const common = new common_1.default({
1544
+ chain: Object.assign(Object.assign({}, common_1.default["_getChainParams"]("mainnet")), { chainId: networkId, networkId }),
1545
+ hardfork: this._selectHardfork(new ethereumjs_util_1.BN(blockNumber)),
1546
+ });
1547
+ return common;
1548
+ }
1549
+ catch (_a) {
1550
+ throw new errors_2.InternalError(`Network id ${networkId} does not correspond to a network that Hardhat can trace`);
1551
+ }
1488
1552
  }
1489
1553
  }
1554
+ exports.HardhatNode = HardhatNode;
1490
1555
  //# sourceMappingURL=node.js.map