hardhat 2.19.5 → 2.20.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 (275) hide show
  1. package/builtin-tasks/node.js +3 -3
  2. package/builtin-tasks/node.js.map +1 -1
  3. package/internal/cli/analytics.d.ts.map +1 -1
  4. package/internal/cli/analytics.js +2 -1
  5. package/internal/cli/analytics.js.map +1 -1
  6. package/internal/cli/project-creation.d.ts +1 -1
  7. package/internal/cli/project-creation.js +1 -1
  8. package/internal/constants.d.ts.map +1 -1
  9. package/internal/constants.js +1 -0
  10. package/internal/constants.js.map +1 -1
  11. package/internal/core/config/config-resolution.d.ts.map +1 -1
  12. package/internal/core/config/config-resolution.js +8 -0
  13. package/internal/core/config/config-resolution.js.map +1 -1
  14. package/internal/core/config/config-validation.d.ts.map +1 -1
  15. package/internal/core/config/config-validation.js +10 -0
  16. package/internal/core/config/config-validation.js.map +1 -1
  17. package/internal/core/config/default-config.d.ts.map +1 -1
  18. package/internal/core/config/default-config.js +11 -0
  19. package/internal/core/config/default-config.js.map +1 -1
  20. package/internal/core/jsonrpc/types/base-types.d.ts +1 -1
  21. package/internal/core/jsonrpc/types/base-types.d.ts.map +1 -1
  22. package/internal/core/jsonrpc/types/base-types.js +7 -5
  23. package/internal/core/jsonrpc/types/base-types.js.map +1 -1
  24. package/internal/core/jsonrpc/types/input/callRequest.d.ts +2 -0
  25. package/internal/core/jsonrpc/types/input/callRequest.d.ts.map +1 -1
  26. package/internal/core/jsonrpc/types/input/callRequest.js +2 -0
  27. package/internal/core/jsonrpc/types/input/callRequest.js.map +1 -1
  28. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts +4 -0
  29. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts.map +1 -1
  30. package/internal/core/jsonrpc/types/input/transactionRequest.js +2 -0
  31. package/internal/core/jsonrpc/types/input/transactionRequest.js.map +1 -1
  32. package/internal/core/jsonrpc/types/output/block.d.ts +6 -0
  33. package/internal/core/jsonrpc/types/output/block.d.ts.map +1 -1
  34. package/internal/core/jsonrpc/types/output/block.js +3 -0
  35. package/internal/core/jsonrpc/types/output/block.js.map +1 -1
  36. package/internal/core/providers/accounts.d.ts.map +1 -1
  37. package/internal/core/providers/accounts.js +10 -10
  38. package/internal/core/providers/accounts.js.map +1 -1
  39. package/internal/core/providers/util.js +2 -2
  40. package/internal/core/providers/util.js.map +1 -1
  41. package/internal/hardhat-network/jsonrpc/client.d.ts +3 -3
  42. package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
  43. package/internal/hardhat-network/jsonrpc/client.js +9 -9
  44. package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
  45. package/internal/hardhat-network/provider/BlockchainData.d.ts +5 -5
  46. package/internal/hardhat-network/provider/BlockchainData.d.ts.map +1 -1
  47. package/internal/hardhat-network/provider/BlockchainData.js +10 -10
  48. package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
  49. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts +7 -0
  50. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts.map +1 -1
  51. package/internal/hardhat-network/provider/HardhatBlockchain.js +14 -2
  52. package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
  53. package/internal/hardhat-network/provider/TxPool.d.ts +2 -3
  54. package/internal/hardhat-network/provider/TxPool.d.ts.map +1 -1
  55. package/internal/hardhat-network/provider/TxPool.js +16 -16
  56. package/internal/hardhat-network/provider/TxPool.js.map +1 -1
  57. package/internal/hardhat-network/provider/ethereumjs-workarounds.js +1 -1
  58. package/internal/hardhat-network/provider/ethereumjs-workarounds.js.map +1 -1
  59. package/internal/hardhat-network/provider/filter.d.ts +5 -6
  60. package/internal/hardhat-network/provider/filter.d.ts.map +1 -1
  61. package/internal/hardhat-network/provider/filter.js +2 -2
  62. package/internal/hardhat-network/provider/filter.js.map +1 -1
  63. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts +7 -0
  64. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -1
  65. package/internal/hardhat-network/provider/fork/ForkBlockchain.js +21 -4
  66. package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
  67. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts +16 -9
  68. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts.map +1 -1
  69. package/internal/hardhat-network/provider/fork/ForkStateManager.js +42 -25
  70. package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
  71. package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts.map +1 -1
  72. package/internal/hardhat-network/provider/fork/rpcToBlockData.js +3 -0
  73. package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -1
  74. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts +2 -2
  75. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts.map +1 -1
  76. package/internal/hardhat-network/provider/modules/base.js +4 -4
  77. package/internal/hardhat-network/provider/modules/base.js.map +1 -1
  78. package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
  79. package/internal/hardhat-network/provider/modules/eth.js +16 -9
  80. package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
  81. package/internal/hardhat-network/provider/modules/logger.d.ts +1 -1
  82. package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
  83. package/internal/hardhat-network/provider/modules/logger.js +17 -17
  84. package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
  85. package/internal/hardhat-network/provider/node-types.d.ts +17 -13
  86. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
  87. package/internal/hardhat-network/provider/node.d.ts +6 -2
  88. package/internal/hardhat-network/provider/node.d.ts.map +1 -1
  89. package/internal/hardhat-network/provider/node.js +148 -79
  90. package/internal/hardhat-network/provider/node.js.map +1 -1
  91. package/internal/hardhat-network/provider/output.d.ts +3 -0
  92. package/internal/hardhat-network/provider/output.d.ts.map +1 -1
  93. package/internal/hardhat-network/provider/output.js +23 -9
  94. package/internal/hardhat-network/provider/output.js.map +1 -1
  95. package/internal/hardhat-network/provider/return-data.d.ts +3 -4
  96. package/internal/hardhat-network/provider/return-data.d.ts.map +1 -1
  97. package/internal/hardhat-network/provider/return-data.js +4 -3
  98. package/internal/hardhat-network/provider/return-data.js.map +1 -1
  99. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts +8 -10
  100. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
  101. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +9 -9
  102. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
  103. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts +8 -10
  104. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
  105. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +9 -9
  106. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
  107. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts +9 -10
  108. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
  109. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +6 -7
  110. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
  111. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts +5 -6
  112. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts.map +1 -1
  113. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +1 -1
  114. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
  115. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts +4 -5
  116. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts.map +1 -1
  117. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js +1 -1
  118. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js.map +1 -1
  119. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts +7 -8
  120. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts.map +1 -1
  121. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js +2 -2
  122. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js.map +1 -1
  123. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.d.ts +7 -8
  124. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.d.ts.map +1 -1
  125. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.js +2 -2
  126. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.js.map +1 -1
  127. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts +4 -5
  128. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts.map +1 -1
  129. package/internal/hardhat-network/provider/utils/makeAccount.js +1 -1
  130. package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -1
  131. package/internal/hardhat-network/provider/utils/makeCommon.d.ts.map +1 -1
  132. package/internal/hardhat-network/provider/utils/makeCommon.js +5 -3
  133. package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
  134. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts +2 -2
  135. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts.map +1 -1
  136. package/internal/hardhat-network/provider/utils/makeFakeSignature.js +15 -1
  137. package/internal/hardhat-network/provider/utils/makeFakeSignature.js.map +1 -1
  138. package/internal/hardhat-network/provider/utils/makeStateTrie.js +2 -2
  139. package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
  140. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +1 -3
  141. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
  142. package/internal/hardhat-network/provider/utils/putGenesisBlock.js +6 -2
  143. package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
  144. package/internal/hardhat-network/provider/utils/random.d.ts +3 -3
  145. package/internal/hardhat-network/provider/utils/random.d.ts.map +1 -1
  146. package/internal/hardhat-network/provider/utils/random.js +2 -2
  147. package/internal/hardhat-network/provider/utils/random.js.map +1 -1
  148. package/internal/hardhat-network/stack-traces/consoleLogger.js +42 -44
  149. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  150. package/internal/hardhat-network/stack-traces/constants.d.ts +1 -1
  151. package/internal/hardhat-network/stack-traces/constants.js +1 -1
  152. package/internal/hardhat-network/stack-traces/contracts-identifier.js +1 -1
  153. package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
  154. package/internal/hardhat-network/stack-traces/debug.js +12 -12
  155. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  156. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +1 -1
  157. package/internal/hardhat-network/stack-traces/error-inferrer.js +5 -4
  158. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
  159. package/internal/hardhat-network/stack-traces/library-utils.d.ts +4 -4
  160. package/internal/hardhat-network/stack-traces/library-utils.d.ts.map +1 -1
  161. package/internal/hardhat-network/stack-traces/library-utils.js.map +1 -1
  162. package/internal/hardhat-network/stack-traces/message-trace.d.ts +8 -9
  163. package/internal/hardhat-network/stack-traces/message-trace.d.ts.map +1 -1
  164. package/internal/hardhat-network/stack-traces/model.d.ts +5 -5
  165. package/internal/hardhat-network/stack-traces/model.d.ts.map +1 -1
  166. package/internal/hardhat-network/stack-traces/model.js +5 -5
  167. package/internal/hardhat-network/stack-traces/model.js.map +1 -1
  168. package/internal/hardhat-network/stack-traces/solidity-errors.d.ts.map +1 -1
  169. package/internal/hardhat-network/stack-traces/solidity-errors.js +3 -3
  170. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  171. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +2 -3
  172. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -1
  173. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
  174. package/internal/hardhat-network/stack-traces/solidityTracer.js +3 -2
  175. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  176. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts.map +1 -1
  177. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +34 -28
  178. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
  179. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +1 -2
  180. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
  181. package/internal/hardhat-network/stack-traces/vm-tracer.js +9 -9
  182. package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
  183. package/internal/solidity/compiler/downloader.d.ts.map +1 -1
  184. package/internal/solidity/compiler/downloader.js +2 -2
  185. package/internal/solidity/compiler/downloader.js.map +1 -1
  186. package/internal/solidity/compiler/solc-info.d.ts.map +1 -1
  187. package/internal/solidity/compiler/solc-info.js +1 -0
  188. package/internal/solidity/compiler/solc-info.js.map +1 -1
  189. package/internal/util/abi-helpers.d.ts +2 -3
  190. package/internal/util/abi-helpers.d.ts.map +1 -1
  191. package/internal/util/abi-helpers.js.map +1 -1
  192. package/internal/util/bigint.d.ts +1 -2
  193. package/internal/util/bigint.d.ts.map +1 -1
  194. package/internal/util/bigint.js +2 -2
  195. package/internal/util/bigint.js.map +1 -1
  196. package/internal/util/hardforks.d.ts +2 -1
  197. package/internal/util/hardforks.d.ts.map +1 -1
  198. package/internal/util/hardforks.js +2 -0
  199. package/internal/util/hardforks.js.map +1 -1
  200. package/internal/util/keccak.d.ts +1 -2
  201. package/internal/util/keccak.d.ts.map +1 -1
  202. package/internal/util/keccak.js +1 -1
  203. package/internal/util/keccak.js.map +1 -1
  204. package/package.json +12 -11
  205. package/sample-projects/javascript/contracts/Lock.sol +1 -1
  206. package/sample-projects/javascript/hardhat.config.js +1 -1
  207. package/sample-projects/javascript-esm/contracts/Lock.sol +1 -1
  208. package/sample-projects/javascript-esm/hardhat.config.cjs +1 -1
  209. package/sample-projects/typescript/contracts/Lock.sol +1 -1
  210. package/sample-projects/typescript/hardhat.config.ts +1 -1
  211. package/sample-projects/typescript-viem/contracts/Lock.sol +1 -1
  212. package/sample-projects/typescript-viem/hardhat.config.ts +1 -1
  213. package/src/builtin-tasks/node.ts +8 -4
  214. package/src/internal/cli/analytics.ts +4 -1
  215. package/src/internal/cli/project-creation.ts +1 -1
  216. package/src/internal/constants.ts +1 -0
  217. package/src/internal/core/config/config-resolution.ts +13 -0
  218. package/src/internal/core/config/config-validation.ts +19 -0
  219. package/src/internal/core/config/default-config.ts +11 -0
  220. package/src/internal/core/jsonrpc/types/base-types.ts +12 -7
  221. package/src/internal/core/jsonrpc/types/input/callRequest.ts +3 -0
  222. package/src/internal/core/jsonrpc/types/input/transactionRequest.ts +5 -1
  223. package/src/internal/core/jsonrpc/types/output/block.ts +3 -0
  224. package/src/internal/core/providers/accounts.ts +24 -13
  225. package/src/internal/core/providers/util.ts +2 -2
  226. package/src/internal/hardhat-network/jsonrpc/client.ts +7 -4
  227. package/src/internal/hardhat-network/provider/BlockchainData.ts +6 -6
  228. package/src/internal/hardhat-network/provider/HardhatBlockchain.ts +28 -3
  229. package/src/internal/hardhat-network/provider/TxPool.ts +19 -16
  230. package/src/internal/hardhat-network/provider/ethereumjs-workarounds.ts +4 -5
  231. package/src/internal/hardhat-network/provider/filter.ts +11 -8
  232. package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +40 -7
  233. package/src/internal/hardhat-network/provider/fork/ForkStateManager.ts +79 -39
  234. package/src/internal/hardhat-network/provider/fork/rpcToBlockData.ts +3 -0
  235. package/src/internal/hardhat-network/provider/fork/rpcToTxData.ts +2 -2
  236. package/src/internal/hardhat-network/provider/modules/base.ts +5 -5
  237. package/src/internal/hardhat-network/provider/modules/eth.ts +40 -14
  238. package/src/internal/hardhat-network/provider/modules/logger.ts +17 -14
  239. package/src/internal/hardhat-network/provider/node-types.ts +19 -12
  240. package/src/internal/hardhat-network/provider/node.ts +210 -86
  241. package/src/internal/hardhat-network/provider/output.ts +35 -8
  242. package/src/internal/hardhat-network/provider/return-data.ts +6 -5
  243. package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +24 -25
  244. package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +24 -25
  245. package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +27 -16
  246. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +7 -8
  247. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.ts +6 -5
  248. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.ts +15 -8
  249. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.ts +15 -8
  250. package/src/internal/hardhat-network/provider/types/HardhatBlockchainInterface.ts +4 -4
  251. package/src/internal/hardhat-network/provider/utils/makeAccount.ts +2 -2
  252. package/src/internal/hardhat-network/provider/utils/makeCommon.ts +9 -3
  253. package/src/internal/hardhat-network/provider/utils/makeFakeSignature.ts +21 -7
  254. package/src/internal/hardhat-network/provider/utils/makeStateTrie.ts +3 -3
  255. package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +10 -5
  256. package/src/internal/hardhat-network/provider/utils/random.ts +5 -5
  257. package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +13 -13
  258. package/src/internal/hardhat-network/stack-traces/constants.ts +1 -1
  259. package/src/internal/hardhat-network/stack-traces/contracts-identifier.ts +4 -4
  260. package/src/internal/hardhat-network/stack-traces/debug.ts +1 -1
  261. package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +6 -5
  262. package/src/internal/hardhat-network/stack-traces/library-utils.ts +6 -6
  263. package/src/internal/hardhat-network/stack-traces/message-trace.ts +8 -8
  264. package/src/internal/hardhat-network/stack-traces/model.ts +5 -5
  265. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +4 -2
  266. package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +2 -2
  267. package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +3 -2
  268. package/src/internal/hardhat-network/stack-traces/vm-debug-tracer.ts +49 -38
  269. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +15 -13
  270. package/src/internal/solidity/compiler/downloader.ts +3 -2
  271. package/src/internal/solidity/compiler/solc-info.ts +1 -0
  272. package/src/internal/util/abi-helpers.ts +2 -2
  273. package/src/internal/util/bigint.ts +4 -4
  274. package/src/internal/util/hardforks.ts +2 -0
  275. package/src/internal/util/keccak.ts +2 -2
@@ -26,14 +26,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.HardhatNode = void 0;
29
+ exports.assertTransientStorageCompatibility = exports.HardhatNode = void 0;
30
30
  const ethereumjs_block_1 = require("@nomicfoundation/ethereumjs-block");
31
31
  const ethereumjs_common_1 = require("@nomicfoundation/ethereumjs-common");
32
+ const exceptions_1 = require("@nomicfoundation/ethereumjs-evm/dist/cjs/exceptions");
32
33
  const ethereumjs_tx_1 = require("@nomicfoundation/ethereumjs-tx");
33
34
  const ethereumjs_util_1 = require("@nomicfoundation/ethereumjs-util");
34
35
  const ethereumjs_vm_1 = require("@nomicfoundation/ethereumjs-vm");
35
36
  const ethereumjs_evm_1 = require("@nomicfoundation/ethereumjs-evm");
36
- const exceptions_1 = require("@nomicfoundation/ethereumjs-evm/dist/exceptions");
37
37
  const ethereumjs_statemanager_1 = require("@nomicfoundation/ethereumjs-statemanager");
38
38
  const eth_sig_util_1 = require("@metamask/eth-sig-util");
39
39
  const chalk_1 = __importDefault(require("chalk"));
@@ -79,6 +79,8 @@ const makeStateTrie_1 = require("./utils/makeStateTrie");
79
79
  const putGenesisBlock_1 = require("./utils/putGenesisBlock");
80
80
  const txMapToArray_1 = require("./utils/txMapToArray");
81
81
  const random_1 = require("./utils/random");
82
+ const BEACON_ROOT_ADDRESS = "0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02";
83
+ const BEACON_ROOT_BYTECODE = "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500";
82
84
  const log = (0, debug_1.default)("hardhat:core:hardhat-network:node");
83
85
  /* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */
84
86
  class HardhatNode extends events_1.default {
@@ -98,6 +100,7 @@ class HardhatNode extends events_1.default {
98
100
  : undefined;
99
101
  const hardfork = (0, hardforks_1.getHardforkName)(config.hardfork);
100
102
  const mixHashGenerator = random_1.RandomBufferGenerator.create("randomMixHashSeed");
103
+ const parentBeaconBlockRootGenerator = random_1.RandomBufferGenerator.create("randomParentBeaconBlockRootSeed");
101
104
  let forkClient;
102
105
  const common = (0, makeCommon_1.makeCommon)(config);
103
106
  if ((0, node_types_1.isForkedNodeConfig)(config)) {
@@ -109,6 +112,9 @@ class HardhatNode extends events_1.default {
109
112
  this._validateHardforks(config.forkConfig.blockNumber, common, forkNetworkId);
110
113
  const forkStateManager = new ForkStateManager_1.ForkStateManager(forkClient, forkBlockNumber);
111
114
  await forkStateManager.initializeGenesisAccounts(genesisAccounts);
115
+ if ((0, hardforks_1.hardforkGte)(hardfork, hardforks_1.HardforkName.CANCUN)) {
116
+ await forkStateManager.putContractCode(ethereumjs_util_1.Address.fromString(BEACON_ROOT_ADDRESS), Buffer.from((0, ethereumjs_util_1.toBytes)(BEACON_ROOT_BYTECODE)));
117
+ }
112
118
  stateManager = forkStateManager;
113
119
  blockchain = new ForkBlockchain_1.ForkBlockchain(forkClient, forkBlockNumber, common);
114
120
  initialBlockTimeOffset = BigInt((0, date_1.getDifferenceInSeconds)(new Date(forkBlockTimestamp), new Date()));
@@ -137,23 +143,27 @@ class HardhatNode extends events_1.default {
137
143
  stateManager = new ethereumjs_statemanager_1.DefaultStateManager({
138
144
  trie: stateTrie,
139
145
  });
146
+ if ((0, hardforks_1.hardforkGte)(hardfork, hardforks_1.HardforkName.CANCUN)) {
147
+ await stateManager.putContractCode(ethereumjs_util_1.Address.fromString(BEACON_ROOT_ADDRESS), Buffer.from((0, ethereumjs_util_1.toBytes)(BEACON_ROOT_BYTECODE)));
148
+ }
140
149
  const hardhatBlockchain = new HardhatBlockchain_1.HardhatBlockchain(common);
141
150
  const genesisBlockBaseFeePerGas = (0, hardforks_1.hardforkGte)(hardfork, hardforks_1.HardforkName.LONDON)
142
151
  ? initialBaseFeePerGasConfig ??
143
152
  BigInt(default_config_1.HARDHAT_NETWORK_DEFAULT_INITIAL_BASE_FEE_PER_GAS)
144
153
  : undefined;
145
- await (0, putGenesisBlock_1.putGenesisBlock)(hardhatBlockchain, common, config, stateTrie, hardfork, mixHashGenerator.next(), genesisBlockBaseFeePerGas);
154
+ await (0, putGenesisBlock_1.putGenesisBlock)(hardhatBlockchain, common, config, await stateManager.getStateRoot(), hardfork, mixHashGenerator.next(), parentBeaconBlockRootGenerator.next(), genesisBlockBaseFeePerGas);
146
155
  if (config.initialDate !== undefined) {
147
156
  initialBlockTimeOffset = BigInt((0, date_1.getDifferenceInSeconds)(config.initialDate, new Date()));
148
157
  }
149
158
  blockchain = hardhatBlockchain;
150
159
  }
151
160
  const txPool = new TxPool_1.TxPool(stateManager, BigInt(blockGasLimit), common);
152
- const eei = new ethereumjs_vm_1.EEI(stateManager, common, blockchain);
153
- const evm = await ethereumjs_evm_1.EVM.create({
154
- eei,
161
+ const evm = new ethereumjs_evm_1.EVM({
155
162
  allowUnlimitedContractSize,
163
+ allowUnlimitedInitCodeSize: allowUnlimitedContractSize,
164
+ blockchain,
156
165
  common,
166
+ stateManager,
157
167
  });
158
168
  const vm = await ethereumjs_vm_1.VM.create({
159
169
  evm,
@@ -162,8 +172,8 @@ class HardhatNode extends events_1.default {
162
172
  stateManager,
163
173
  blockchain,
164
174
  });
165
- const instanceId = (0, ethereumjs_util_1.bufferToBigInt)((0, crypto_1.randomBytes)(32));
166
- const node = new HardhatNode(vm, instanceId, stateManager, blockchain, txPool, automine, minGasPrice, initialBlockTimeOffset, mempoolOrder, config.coinbase, genesisAccounts, networkId, chainId, hardfork, hardforkActivations, mixHashGenerator, allowUnlimitedContractSize, allowBlocksWithSameTimestamp, tracingConfig, forkNetworkId, forkBlockNum, forkBlockHash, nextBlockBaseFeePerGas, forkClient, enableTransientStorage);
175
+ const instanceId = (0, ethereumjs_util_1.bytesToBigInt)((0, crypto_1.randomBytes)(32));
176
+ const node = new HardhatNode(vm, instanceId, stateManager, blockchain, txPool, automine, minGasPrice, initialBlockTimeOffset, mempoolOrder, config.coinbase, genesisAccounts, networkId, chainId, hardfork, hardforkActivations, mixHashGenerator, parentBeaconBlockRootGenerator, allowUnlimitedContractSize, allowBlocksWithSameTimestamp, tracingConfig, forkNetworkId, forkBlockNum, forkBlockHash, nextBlockBaseFeePerGas, forkClient, enableTransientStorage);
167
177
  return [common, node];
168
178
  }
169
179
  static _validateHardforks(forkBlockNumber, common, remoteChainId) {
@@ -183,7 +193,7 @@ The hardfork must be at least spuriousDragon, but ${common.hardfork()} was given
183
193
  // this validation.
184
194
  return;
185
195
  }
186
- upstreamCommon.setHardforkByBlockNumber(forkBlockNumber);
196
+ upstreamCommon.setHardforkBy({ blockNumber: forkBlockNumber });
187
197
  if (!upstreamCommon.gteHardfork("spuriousDragon")) {
188
198
  throw new errors_2.InternalError(`Cannot fork ${upstreamCommon.chainName()} from block ${forkBlockNumber}.
189
199
 
@@ -191,7 +201,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
191
201
  }
192
202
  }
193
203
  }
194
- constructor(_vm, _instanceId, _stateManager, _blockchain, _txPool, _automine, _minGasPrice, _blockTimeOffsetSeconds = 0n, _mempoolOrder, _coinbase, genesisAccounts, _configNetworkId, _configChainId, hardfork, _hardforkActivations, _mixHashGenerator, allowUnlimitedContractSize, _allowBlocksWithSameTimestamp, tracingConfig, _forkNetworkId, _forkBlockNumber, _forkBlockHash, nextBlockBaseFee, _forkClient, _enableTransientStorage = false) {
204
+ constructor(_vm, _instanceId, _stateManager, _blockchain, _txPool, _automine, _minGasPrice, _blockTimeOffsetSeconds = 0n, _mempoolOrder, _coinbase, genesisAccounts, _configNetworkId, _configChainId, hardfork, _hardforkActivations, _mixHashGenerator, _parentBeaconBlockRootGenerator, allowUnlimitedContractSize, _allowBlocksWithSameTimestamp, tracingConfig, _forkNetworkId, _forkBlockNumber, _forkBlockHash, nextBlockBaseFee, _forkClient, _enableTransientStorage = false) {
195
205
  super();
196
206
  this._vm = _vm;
197
207
  this._instanceId = _instanceId;
@@ -208,6 +218,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
208
218
  this.hardfork = hardfork;
209
219
  this._hardforkActivations = _hardforkActivations;
210
220
  this._mixHashGenerator = _mixHashGenerator;
221
+ this._parentBeaconBlockRootGenerator = _parentBeaconBlockRootGenerator;
211
222
  this.allowUnlimitedContractSize = allowUnlimitedContractSize;
212
223
  this._allowBlocksWithSameTimestamp = _allowBlocksWithSameTimestamp;
213
224
  this._forkNetworkId = _forkNetworkId;
@@ -255,26 +266,32 @@ Hardhat Network's forking functionality only works with blocks from at least spu
255
266
  }
256
267
  }
257
268
  async getSignedTransaction(txParams) {
258
- const senderAddress = (0, ethereumjs_util_1.bufferToHex)(txParams.from);
269
+ const senderAddress = (0, ethereumjs_util_1.bytesToHex)(txParams.from);
259
270
  const pk = this._localAccounts.get(senderAddress);
260
271
  if (pk !== undefined) {
261
272
  let tx;
262
- if ("maxFeePerGas" in txParams) {
273
+ if ("blobs" in txParams) {
274
+ tx = ethereumjs_tx_1.BlobEIP4844Transaction.fromTxData(txParams, {
275
+ common: this._vm.common,
276
+ allowUnlimitedInitCodeSize: true,
277
+ });
278
+ }
279
+ else if ("maxFeePerGas" in txParams) {
263
280
  tx = ethereumjs_tx_1.FeeMarketEIP1559Transaction.fromTxData(txParams, {
264
- common: this._vm._common,
265
- disableMaxInitCodeSizeCheck: true,
281
+ common: this._vm.common,
282
+ allowUnlimitedInitCodeSize: true,
266
283
  });
267
284
  }
268
285
  else if ("accessList" in txParams) {
269
286
  tx = ethereumjs_tx_1.AccessListEIP2930Transaction.fromTxData(txParams, {
270
- common: this._vm._common,
271
- disableMaxInitCodeSizeCheck: true,
287
+ common: this._vm.common,
288
+ allowUnlimitedInitCodeSize: true,
272
289
  });
273
290
  }
274
291
  else {
275
- tx = ethereumjs_tx_1.Transaction.fromTxData(txParams, {
276
- common: this._vm._common,
277
- disableMaxInitCodeSizeCheck: true,
292
+ tx = ethereumjs_tx_1.LegacyTransaction.fromTxData(txParams, {
293
+ common: this._vm.common,
294
+ allowUnlimitedInitCodeSize: true,
278
295
  });
279
296
  }
280
297
  return tx.sign(pk);
@@ -417,11 +434,11 @@ Hardhat Network's forking functionality only works with blocks from at least spu
417
434
  blockNumberOrPending = this.getLatestBlockNumber();
418
435
  }
419
436
  const account = await this._runInBlockContext(blockNumberOrPending, () => this._stateManager.getAccount(address));
420
- return account.balance;
437
+ return account?.balance ?? 0n;
421
438
  }
422
439
  async getNextConfirmedNonce(address, blockNumberOrPending) {
423
440
  const account = await this._runInBlockContext(blockNumberOrPending, () => this._stateManager.getAccount(address));
424
- return account.nonce;
441
+ return account?.nonce ?? 0n;
425
442
  }
426
443
  async getAccountNextPendingNonce(address) {
427
444
  return this._txPool.getNextPendingNonce(address);
@@ -536,13 +553,19 @@ Hardhat Network's forking functionality only works with blocks from at least spu
536
553
  return ethereumjs_util_1.Address.fromString(this._coinbase);
537
554
  }
538
555
  async getStorageAt(address, positionIndex, blockNumberOrPending) {
539
- const key = (0, ethereumjs_util_1.setLengthLeft)((0, ethereumjs_util_1.bigIntToBuffer)(positionIndex), 32);
540
- const data = await this._runInBlockContext(blockNumberOrPending, () => this._stateManager.getContractStorage(address, key));
556
+ const key = (0, ethereumjs_util_1.setLengthLeft)((0, ethereumjs_util_1.bigIntToBytes)(positionIndex), 32);
557
+ const data = await this._runInBlockContext(blockNumberOrPending, async () => {
558
+ const account = await this._stateManager.getAccount(address);
559
+ if (account === undefined) {
560
+ return Uint8Array.from([]);
561
+ }
562
+ return this._stateManager.getContractStorage(address, key);
563
+ });
541
564
  const EXPECTED_DATA_SIZE = 32;
542
565
  if (data.length < EXPECTED_DATA_SIZE) {
543
566
  return Buffer.concat([Buffer.alloc(EXPECTED_DATA_SIZE - data.length, 0), data], EXPECTED_DATA_SIZE);
544
567
  }
545
- return data;
568
+ return Buffer.from(data);
546
569
  }
547
570
  async getBlockByNumber(blockNumberOrPending) {
548
571
  if (blockNumberOrPending === "pending") {
@@ -573,7 +596,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
573
596
  return this._blockchain.getTotalDifficulty(block.hash());
574
597
  }
575
598
  async getCode(address, blockNumberOrPending) {
576
- return this._runInBlockContext(blockNumberOrPending, () => this._stateManager.getContractCode(address));
599
+ return this._runInBlockContext(blockNumberOrPending, () => this._stateManager.getContractCode(address).then(Buffer.from));
577
600
  }
578
601
  getNextBlockTimestamp() {
579
602
  return this._nextBlockTimestamp;
@@ -614,7 +637,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
614
637
  return this._txPool.getTransactionByHash(hash)?.data;
615
638
  }
616
639
  async getTransactionReceipt(hash) {
617
- const hashBuffer = hash instanceof Buffer ? hash : (0, ethereumjs_util_1.toBuffer)(hash);
640
+ const hashBuffer = hash instanceof Buffer ? hash : (0, ethereumjs_util_1.toBytes)(hash);
618
641
  const receipt = await this._blockchain.getTransactionReceipt(hashBuffer);
619
642
  return receipt ?? undefined;
620
643
  }
@@ -631,7 +654,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
631
654
  async signTypedDataV4(address, typedData) {
632
655
  const privateKey = this._getLocalAccountPrivateKey(address);
633
656
  return (0, eth_sig_util_1.signTypedData)({
634
- privateKey,
657
+ privateKey: Buffer.from(privateKey),
635
658
  version: eth_sig_util_1.SignTypedDataVersion.V4,
636
659
  data: typedData,
637
660
  });
@@ -653,6 +676,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
653
676
  userProvidedNextBlockBaseFeePerGas: this.getUserProvidedNextBlockBaseFeePerGas(),
654
677
  coinbase: this.getCoinbaseAddress().toString(),
655
678
  mixHashGenerator: this._mixHashGenerator.clone(),
679
+ parentBeaconBlockRootGenerator: this._parentBeaconBlockRootGenerator.clone(),
656
680
  };
657
681
  this._irregularStatesByBlockNumber = new Map(this._irregularStatesByBlockNumber);
658
682
  this._snapshots.push(snapshot);
@@ -691,6 +715,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
691
715
  }
692
716
  this._coinbase = snapshot.coinbase;
693
717
  this._mixHashGenerator = snapshot.mixHashGenerator;
718
+ this._parentBeaconBlockRootGenerator =
719
+ snapshot.parentBeaconBlockRootGenerator;
694
720
  // We delete this and the following snapshots, as they can only be used
695
721
  // once in Ganache
696
722
  this._snapshots.splice(snapshotIndex);
@@ -722,7 +748,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
722
748
  id: filterId,
723
749
  type: filter_1.Type.BLOCK_SUBSCRIPTION,
724
750
  deadline: this._newDeadline(),
725
- hashes: [(0, ethereumjs_util_1.bufferToHex)(block.header.hash())],
751
+ hashes: [(0, ethereumjs_util_1.bytesToHex)(block.header.hash())],
726
752
  logs: [],
727
753
  subscription: isSubscription,
728
754
  });
@@ -804,11 +830,11 @@ Hardhat Network's forking functionality only works with blocks from at least spu
804
830
  return true;
805
831
  }
806
832
  addImpersonatedAccount(address) {
807
- this._impersonatedAccounts.add((0, ethereumjs_util_1.bufferToHex)(address));
833
+ this._impersonatedAccounts.add((0, ethereumjs_util_1.bytesToHex)(address));
808
834
  return true;
809
835
  }
810
836
  removeImpersonatedAccount(address) {
811
- return this._impersonatedAccounts.delete((0, ethereumjs_util_1.bufferToHex)(address));
837
+ return this._impersonatedAccounts.delete((0, ethereumjs_util_1.bytesToHex)(address));
812
838
  }
813
839
  setAutomine(automine) {
814
840
  this._automine = automine;
@@ -830,14 +856,18 @@ Hardhat Network's forking functionality only works with blocks from at least spu
830
856
  }
831
857
  const isTransactionMined = await this._isTransactionMined(hash);
832
858
  if (isTransactionMined) {
833
- throw new errors_2.InvalidArgumentsError(`Transaction ${(0, ethereumjs_util_1.bufferToHex)(hash)} cannot be dropped because it's already mined`);
859
+ throw new errors_2.InvalidArgumentsError(`Transaction ${(0, ethereumjs_util_1.bytesToHex)(hash)} cannot be dropped because it's already mined`);
834
860
  }
835
861
  return false;
836
862
  }
837
863
  async setAccountBalance(address, newBalance) {
838
864
  const account = await this._stateManager.getAccount(address);
839
- account.balance = newBalance;
840
- await this._stateManager.putAccount(address, account);
865
+ await this._stateManager.putAccount(address, ethereumjs_util_1.Account.fromAccountData({
866
+ nonce: account?.nonce,
867
+ balance: newBalance,
868
+ storageRoot: account?.storageRoot,
869
+ codeHash: account?.codeHash,
870
+ }));
841
871
  await this._persistIrregularWorldState();
842
872
  }
843
873
  async setAccountCode(address, newCode) {
@@ -849,15 +879,20 @@ Hardhat Network's forking functionality only works with blocks from at least spu
849
879
  throw new errors_2.InternalError("Cannot set account nonce when the transaction pool is not empty");
850
880
  }
851
881
  const account = await this._stateManager.getAccount(address);
852
- if (newNonce < account.nonce) {
853
- throw new errors_2.InvalidInputError(`New nonce (${newNonce.toString()}) must not be smaller than the existing nonce (${account.nonce.toString()})`);
854
- }
855
- account.nonce = newNonce;
856
- await this._stateManager.putAccount(address, account);
882
+ const accountNonce = account?.nonce ?? 0n;
883
+ if (newNonce < accountNonce) {
884
+ throw new errors_2.InvalidInputError(`New nonce (${newNonce.toString()}) must not be smaller than the existing nonce (${accountNonce.toString()})`);
885
+ }
886
+ await this._stateManager.putAccount(address, ethereumjs_util_1.Account.fromAccountData({
887
+ nonce: newNonce,
888
+ balance: account?.balance,
889
+ storageRoot: account?.storageRoot,
890
+ codeHash: account?.codeHash,
891
+ }));
857
892
  await this._persistIrregularWorldState();
858
893
  }
859
894
  async setStorageAt(address, positionIndex, value) {
860
- await this._stateManager.putContractStorage(address, (0, ethereumjs_util_1.setLengthLeft)((0, ethereumjs_util_1.bigIntToBuffer)(positionIndex), 32), value);
895
+ await this._stateManager.putContractStorage(address, (0, ethereumjs_util_1.setLengthLeft)((0, ethereumjs_util_1.bigIntToBytes)(positionIndex), 32), value);
861
896
  await this._persistIrregularWorldState();
862
897
  }
863
898
  async traceCall(callParams, block, traceConfig) {
@@ -869,7 +904,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
869
904
  async traceTransaction(hash, config) {
870
905
  const block = await this.getBlockByTransactionHash(hash);
871
906
  if (block === undefined) {
872
- throw new errors_2.InvalidInputError(`Unable to find a block containing transaction ${(0, ethereumjs_util_1.bufferToHex)(hash)}`);
907
+ throw new errors_2.InvalidInputError(`Unable to find a block containing transaction ${(0, ethereumjs_util_1.bytesToHex)(hash)}`);
873
908
  }
874
909
  return this._runInBlockContext(block.header.number - 1n, async () => {
875
910
  const blockNumber = block.header.number;
@@ -890,7 +925,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
890
925
  // to avoid having to distinguish between empty and non-existing accounts.
891
926
  // We *could* do it during the non-forked mode, but for simplicity we just
892
927
  // don't support it at all.
893
- const isPreSpuriousDragon = !vm._common.gteHardfork("spuriousDragon");
928
+ const isPreSpuriousDragon = !vm.common.gteHardfork("spuriousDragon");
894
929
  if (isPreSpuriousDragon) {
895
930
  throw new errors_2.InvalidInputError("Tracing is not supported for transactions using hardforks older than Spurious Dragon. ");
896
931
  }
@@ -899,20 +934,20 @@ Hardhat Network's forking functionality only works with blocks from at least spu
899
934
  const sender = tx.getSenderAddress();
900
935
  if (tx.type === 0) {
901
936
  txWithCommon = new FakeSenderTransaction_1.FakeSenderTransaction(sender, tx, {
902
- common: vm._common,
937
+ common: vm.common,
903
938
  });
904
939
  }
905
940
  else if (tx.type === 1) {
906
- txWithCommon = new FakeSenderAccessListEIP2930Transaction_1.FakeSenderAccessListEIP2930Transaction(sender, tx, { common: vm._common });
941
+ txWithCommon = new FakeSenderAccessListEIP2930Transaction_1.FakeSenderAccessListEIP2930Transaction(sender, tx, { common: vm.common });
907
942
  }
908
943
  else if (tx.type === 2) {
909
- txWithCommon = new FakeSenderEIP1559Transaction_1.FakeSenderEIP1559Transaction(sender, { ...tx, gasPrice: undefined }, { common: vm._common });
944
+ txWithCommon = new FakeSenderEIP1559Transaction_1.FakeSenderEIP1559Transaction(sender, { ...tx, gasPrice: undefined }, { common: vm.common });
910
945
  }
911
946
  else {
912
947
  throw new errors_2.InternalError("Only legacy, EIP2930, and EIP1559 txs are supported");
913
948
  }
914
949
  const txHash = txWithCommon.hash();
915
- if (txHash.equals(hash)) {
950
+ if ((0, ethereumjs_util_1.equalsBytes)(txHash, hash)) {
916
951
  const vmDebugTracer = new vm_debug_tracer_1.VMDebugTracer(vm);
917
952
  return vmDebugTracer.trace(async () => {
918
953
  await vm.runTx({
@@ -1063,7 +1098,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1063
1098
  async _addPendingTransaction(tx) {
1064
1099
  await this._txPool.addTransaction(tx);
1065
1100
  await this._notifyPendingTransaction(tx);
1066
- return (0, ethereumjs_util_1.bufferToHex)(tx.hash());
1101
+ return (0, ethereumjs_util_1.bytesToHex)(tx.hash());
1067
1102
  }
1068
1103
  async _mineTransaction(tx) {
1069
1104
  await this._addPendingTransaction(tx);
@@ -1174,6 +1209,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1174
1209
  if (this.isPostMergeHardfork()) {
1175
1210
  headerData.mixHash = this._getNextMixHash();
1176
1211
  }
1212
+ if (this.isPostCancunHardfork()) {
1213
+ headerData.parentBeaconBlockRoot = this._getNextParentBeaconBlockRoot();
1214
+ }
1177
1215
  headerData.baseFeePerGas = await this.getNextBlockBaseFeePerGas();
1178
1216
  const blockBuilder = await this._vm.buildBlock({
1179
1217
  parentBlock,
@@ -1225,22 +1263,22 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1225
1263
  }
1226
1264
  _getMinimalTransactionFee() {
1227
1265
  // Typically 21_000 gas
1228
- return this._vm._common.param("gasPrices", "tx");
1266
+ return this._vm.common.param("gasPrices", "tx");
1229
1267
  }
1230
1268
  async _getFakeTransaction(txParams) {
1231
1269
  const sender = new ethereumjs_util_1.Address(txParams.from);
1232
1270
  if ("maxFeePerGas" in txParams && txParams.maxFeePerGas !== undefined) {
1233
1271
  return new FakeSenderEIP1559Transaction_1.FakeSenderEIP1559Transaction(sender, txParams, {
1234
- common: this._vm._common,
1272
+ common: this._vm.common,
1235
1273
  });
1236
1274
  }
1237
1275
  if ("accessList" in txParams && txParams.accessList !== undefined) {
1238
1276
  return new FakeSenderAccessListEIP2930Transaction_1.FakeSenderAccessListEIP2930Transaction(sender, txParams, {
1239
- common: this._vm._common,
1277
+ common: this._vm.common,
1240
1278
  });
1241
1279
  }
1242
1280
  return new FakeSenderTransaction_1.FakeSenderTransaction(sender, txParams, {
1243
- common: this._vm._common,
1281
+ common: this._vm.common,
1244
1282
  });
1245
1283
  }
1246
1284
  _getSnapshotIndex(id) {
@@ -1263,9 +1301,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1263
1301
  this._snapshots.splice(snapshotIndex);
1264
1302
  }
1265
1303
  _initLocalAccounts(genesisAccounts) {
1266
- const privateKeys = genesisAccounts.map((acc) => (0, ethereumjs_util_1.toBuffer)(acc.privateKey));
1304
+ const privateKeys = genesisAccounts.map((acc) => (0, ethereumjs_util_1.toBytes)(acc.privateKey));
1267
1305
  for (const pk of privateKeys) {
1268
- this._localAccounts.set((0, ethereumjs_util_1.bufferToHex)((0, ethereumjs_util_1.privateToAddress)(pk)), pk);
1306
+ this._localAccounts.set((0, ethereumjs_util_1.bytesToHex)((0, ethereumjs_util_1.privateToAddress)(pk)), pk);
1269
1307
  }
1270
1308
  }
1271
1309
  async _getConsoleLogMessages(vmTrace, vmTracerError) {
@@ -1371,7 +1409,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1371
1409
  async _notifyPendingTransaction(tx) {
1372
1410
  this._filters.forEach((filter) => {
1373
1411
  if (filter.type === filter_1.Type.PENDING_TRANSACTION_SUBSCRIPTION) {
1374
- const hash = (0, ethereumjs_util_1.bufferToHex)(tx.hash());
1412
+ const hash = (0, ethereumjs_util_1.bytesToHex)(tx.hash());
1375
1413
  if (filter.subscription) {
1376
1414
  this._emitEthEvent(filter.id, hash);
1377
1415
  return;
@@ -1392,7 +1430,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1392
1430
  * was added to the blockchain.
1393
1431
  */
1394
1432
  async _saveBlockAsSuccessfullyRun(block, runBlockResult) {
1395
- const receipts = (0, output_1.getRpcReceiptOutputsFromLocalBlockExecution)(block, runBlockResult, (0, output_1.shouldShowTransactionTypeForHardfork)(this._vm._common));
1433
+ const receipts = (0, output_1.getRpcReceiptOutputsFromLocalBlockExecution)(block, runBlockResult, (0, output_1.shouldShowTransactionTypeForHardfork)(this._vm.common));
1396
1434
  this._blockchain.addTransactionReceipts(receipts);
1397
1435
  const td = await this.getBlockTotalDifficulty(block);
1398
1436
  const rpcLogs = [];
@@ -1407,10 +1445,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1407
1445
  case filter_1.Type.BLOCK_SUBSCRIPTION:
1408
1446
  const hash = block.hash();
1409
1447
  if (filter.subscription) {
1410
- this._emitEthEvent(filter.id, (0, output_1.getRpcBlock)(block, td, (0, output_1.shouldShowTransactionTypeForHardfork)(this._vm._common), false));
1448
+ this._emitEthEvent(filter.id, (0, output_1.getRpcBlock)(block, td, (0, output_1.shouldShowTransactionTypeForHardfork)(this._vm.common), false));
1411
1449
  return;
1412
1450
  }
1413
- filter.hashes.push((0, ethereumjs_util_1.bufferToHex)(hash));
1451
+ filter.hashes.push((0, ethereumjs_util_1.bytesToHex)(hash));
1414
1452
  break;
1415
1453
  case filter_1.Type.LOGS_SUBSCRIPTION:
1416
1454
  if ((0, filter_1.bloomFilter)(new ethereumjs_vm_1.Bloom(block.header.logsBloom), filter.criteria.addresses, filter.criteria.normalizedTopics)) {
@@ -1544,7 +1582,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1544
1582
  async _applyStateOverrideSet(stateOverrideSet) {
1545
1583
  // Multiple state override set can be configured for different addresses, hence the loop
1546
1584
  for (const [addrToOverride, stateOverrideOptions] of Object.entries(stateOverrideSet)) {
1547
- const address = new ethereumjs_util_1.Address((0, ethereumjs_util_1.toBuffer)(addrToOverride));
1585
+ const address = new ethereumjs_util_1.Address((0, ethereumjs_util_1.toBytes)(addrToOverride));
1548
1586
  const { balance, nonce, code, state, stateDiff } = stateOverrideOptions;
1549
1587
  await this._overrideBalanceAndNonce(address, balance, nonce);
1550
1588
  await this._overrideCode(address, code);
@@ -1587,7 +1625,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1587
1625
  throw new errors_2.InvalidInputError("The properties 'state' and 'stateDiff' cannot be used simultaneously when configuring the state override set passed to the eth_call method.");
1588
1626
  }
1589
1627
  for (const [storageKey, value] of Object.entries(newState)) {
1590
- await this._stateManager.putContractStorage(address, (0, ethereumjs_util_1.toBuffer)(storageKey), (0, ethereumjs_util_1.setLengthLeft)((0, ethereumjs_util_1.bigIntToBuffer)(value), 32));
1628
+ await this._stateManager.putContractStorage(address, (0, ethereumjs_util_1.toBytes)(storageKey), (0, ethereumjs_util_1.setLengthLeft)((0, ethereumjs_util_1.bigIntToBytes)(value), 32));
1591
1629
  }
1592
1630
  }
1593
1631
  /**
@@ -1613,8 +1651,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1613
1651
  // we don't need to add the tx to the block because runTx doesn't
1614
1652
  // know anything about the txs in the current block
1615
1653
  }
1616
- originalCommon = this._vm._common;
1617
- this._vm._common = ethereumjs_common_1.Common.custom({
1654
+ originalCommon = this._vm.common;
1655
+ assertTransientStorageCompatibility(this._enableTransientStorage, this._vm.common.hardfork());
1656
+ this._vm.common = ethereumjs_common_1.Common.custom({
1618
1657
  chainId: this._forkBlockNumber === undefined ||
1619
1658
  blockContext.header.number >= this._forkBlockNumber
1620
1659
  ? this._configChainId
@@ -1622,7 +1661,6 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1622
1661
  networkId: this._forkNetworkId ?? this._configNetworkId,
1623
1662
  }, {
1624
1663
  hardfork: this._selectHardfork(blockContext.header.number),
1625
- ...this._getTransientStorageSettings(),
1626
1664
  });
1627
1665
  // If this VM is running without EIP4895, but the block has withdrawals,
1628
1666
  // we remove them and the withdrawal root from the block
@@ -1637,7 +1675,25 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1637
1675
  },
1638
1676
  }, {
1639
1677
  freeze: false,
1640
- common: this._vm._common,
1678
+ common: this._vm.common,
1679
+ skipConsensusFormatValidation: true,
1680
+ });
1681
+ }
1682
+ // If this VM is running without cancun, but the block has cancun fields,
1683
+ // we remove them from the block
1684
+ if (!this.isCancunBlock(blockNumberOrPending) &&
1685
+ blockContext.header.blobGasUsed !== undefined) {
1686
+ blockContext = ethereumjs_block_1.Block.fromBlockData({
1687
+ ...blockContext,
1688
+ header: {
1689
+ ...blockContext.header,
1690
+ blobGasUsed: undefined,
1691
+ excessBlobGas: undefined,
1692
+ parentBeaconBlockRoot: undefined,
1693
+ },
1694
+ }, {
1695
+ freeze: false,
1696
+ common: this._vm.common,
1641
1697
  skipConsensusFormatValidation: true,
1642
1698
  });
1643
1699
  }
@@ -1658,7 +1714,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1658
1714
  (blockContext.header.baseFeePerGas === undefined || forceBaseFeeZero)) {
1659
1715
  blockContext = ethereumjs_block_1.Block.fromBlockData(blockContext, {
1660
1716
  freeze: false,
1661
- common: this._vm._common,
1717
+ common: this._vm.common,
1662
1718
  skipConsensusFormatValidation: true,
1663
1719
  });
1664
1720
  blockContext.header.baseFeePerGas = 0n;
@@ -1674,7 +1730,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1674
1730
  }
1675
1731
  finally {
1676
1732
  if (originalCommon !== undefined) {
1677
- this._vm._common = originalCommon;
1733
+ this._vm.common = originalCommon;
1678
1734
  }
1679
1735
  await this._stateManager.setStateRoot(initialStateRoot);
1680
1736
  }
@@ -1720,7 +1776,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1720
1776
  }
1721
1777
  return this._runInBlockContext(blockNumberOrPending, async () => {
1722
1778
  const account = await this._stateManager.getAccount(address);
1723
- return account.nonce;
1779
+ return account?.nonce ?? 0n;
1724
1780
  });
1725
1781
  }
1726
1782
  async _isTransactionMined(hash) {
@@ -1741,20 +1797,30 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1741
1797
  isEip1559Active(blockNumberOrPending) {
1742
1798
  if (blockNumberOrPending !== undefined &&
1743
1799
  blockNumberOrPending !== "pending") {
1744
- return this._vm._common.hardforkGteHardfork(this._selectHardfork(blockNumberOrPending), "london");
1800
+ return this._vm.common.hardforkGteHardfork(this._selectHardfork(blockNumberOrPending), "london");
1745
1801
  }
1746
- return this._vm._common.gteHardfork("london");
1802
+ return this._vm.common.gteHardfork("london");
1747
1803
  }
1748
1804
  isEip4895Active(blockNumberOrPending) {
1749
1805
  if (blockNumberOrPending !== undefined &&
1750
1806
  blockNumberOrPending !== "pending") {
1751
- return this._vm._common.hardforkGteHardfork(this._selectHardfork(blockNumberOrPending), "shanghai");
1807
+ return this._vm.common.hardforkGteHardfork(this._selectHardfork(blockNumberOrPending), "shanghai");
1752
1808
  }
1753
- return this._vm._common.gteHardfork("shanghai");
1809
+ return this._vm.common.gteHardfork("shanghai");
1810
+ }
1811
+ isCancunBlock(blockNumberOrPending) {
1812
+ if (blockNumberOrPending !== undefined &&
1813
+ blockNumberOrPending !== "pending") {
1814
+ return this._vm.common.hardforkGteHardfork(this._selectHardfork(blockNumberOrPending), "cancun");
1815
+ }
1816
+ return this._vm.common.gteHardfork("cancun");
1754
1817
  }
1755
1818
  isPostMergeHardfork() {
1756
1819
  return (0, hardforks_1.hardforkGte)(this.hardfork, hardforks_1.HardforkName.MERGE);
1757
1820
  }
1821
+ isPostCancunHardfork() {
1822
+ return (0, hardforks_1.hardforkGte)(this.hardfork, hardforks_1.HardforkName.CANCUN);
1823
+ }
1758
1824
  setPrevRandao(prevRandao) {
1759
1825
  this._mixHashGenerator.setNext(prevRandao);
1760
1826
  }
@@ -1768,7 +1834,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1768
1834
  const instanceIdHex = BigIntUtils.toEvmWord(this._instanceId);
1769
1835
  const instanceId = `0x${instanceIdHex}`;
1770
1836
  const latestBlock = await this.getLatestBlock();
1771
- const latestBlockHashHex = latestBlock.header.hash().toString("hex");
1837
+ const latestBlockHashHex = Buffer.from(latestBlock.header.hash()).toString("hex");
1772
1838
  const latestBlockHash = `0x${latestBlockHashHex}`;
1773
1839
  const metadata = {
1774
1840
  clientVersion,
@@ -1791,6 +1857,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1791
1857
  _getNextMixHash() {
1792
1858
  return this._mixHashGenerator.next();
1793
1859
  }
1860
+ _getNextParentBeaconBlockRoot() {
1861
+ return this._parentBeaconBlockRootGenerator.next();
1862
+ }
1794
1863
  async _getEstimateGasFeePriceFields(callParams, blockNumberOrPending) {
1795
1864
  if (!this.isEip1559Active(blockNumberOrPending) ||
1796
1865
  callParams.gasPrice !== undefined) {
@@ -1820,7 +1889,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1820
1889
  _selectHardfork(blockNumber) {
1821
1890
  if (this._forkBlockNumber === undefined ||
1822
1891
  blockNumber >= this._forkBlockNumber) {
1823
- return this._vm._common.hardfork();
1892
+ return this._vm.common.hardfork();
1824
1893
  }
1825
1894
  if (this._hardforkActivations.size === 0) {
1826
1895
  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/custom-hardfork-history`);
@@ -1838,16 +1907,16 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1838
1907
  if (!constants_1.HARDHAT_NETWORK_SUPPORTED_HARDFORKS.includes(hardfork)) {
1839
1908
  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(", ")}`);
1840
1909
  }
1841
- return hardfork;
1910
+ return hardfork === "merge" ? "mergeForkIdTransition" : hardfork;
1842
1911
  }
1843
1912
  _getCommonForTracing(networkId, blockNumber) {
1913
+ assertTransientStorageCompatibility(this._enableTransientStorage, this._vm.common.hardfork());
1844
1914
  try {
1845
1915
  const common = ethereumjs_common_1.Common.custom({
1846
1916
  chainId: networkId,
1847
1917
  networkId,
1848
1918
  }, {
1849
1919
  hardfork: this._selectHardfork(BigInt(blockNumber)),
1850
- ...this._getTransientStorageSettings(),
1851
1920
  });
1852
1921
  return common;
1853
1922
  }
@@ -1855,12 +1924,12 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1855
1924
  throw new errors_2.InternalError(`Network id ${networkId} does not correspond to a network that Hardhat can trace`);
1856
1925
  }
1857
1926
  }
1858
- _getTransientStorageSettings() {
1859
- if (this._enableTransientStorage) {
1860
- return { eips: [1153] };
1861
- }
1862
- return {};
1863
- }
1864
1927
  }
1865
1928
  exports.HardhatNode = HardhatNode;
1929
+ function assertTransientStorageCompatibility(enableTransientStorage, hardfork) {
1930
+ if (enableTransientStorage && !(0, hardforks_1.hardforkGte)(hardfork, hardforks_1.HardforkName.CANCUN)) {
1931
+ throw new errors_2.InternalError(`Transient storage is not compatible with hardfork "${hardfork}". To use transient storage, set the hardfork to "cancun" or later.`);
1932
+ }
1933
+ }
1934
+ exports.assertTransientStorageCompatibility = assertTransientStorageCompatibility;
1866
1935
  //# sourceMappingURL=node.js.map