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
@@ -1,4 +1,5 @@
1
- import { ERROR } from "@nomicfoundation/ethereumjs-evm/dist/exceptions";
1
+ import { ERROR } from "@nomicfoundation/ethereumjs-evm/dist/cjs/exceptions";
2
+ import { equalsBytes } from "@nomicfoundation/ethereumjs-util";
2
3
  import { ReturnData } from "../provider/return-data";
3
4
 
4
5
  import {
@@ -80,7 +81,7 @@ export class SolidityTracer {
80
81
  // reverts if a call fails, and most contracts are in solidity
81
82
  if (
82
83
  subtrace.error !== undefined &&
83
- trace.returnData.equals(subtrace.returnData)
84
+ equalsBytes(trace.returnData, subtrace.returnData)
84
85
  ) {
85
86
  let unrecognizedEntry: SolidityStackTraceEntry;
86
87
 
@@ -1,13 +1,16 @@
1
+ import { Journal } from "@nomicfoundation/ethereumjs-evm/dist/cjs/journal";
1
2
  import { TypedTransaction } from "@nomicfoundation/ethereumjs-tx";
2
3
  import { AfterTxEvent, VM } from "@nomicfoundation/ethereumjs-vm";
3
- import { EVMResult } from "@nomicfoundation/ethereumjs-evm";
4
- import { InterpreterStep } from "@nomicfoundation/ethereumjs-evm/dist/interpreter";
5
- import { Message } from "@nomicfoundation/ethereumjs-evm/dist/message";
4
+ import {
5
+ EVMResult,
6
+ InterpreterStep,
7
+ Message,
8
+ } from "@nomicfoundation/ethereumjs-evm";
6
9
  import {
7
10
  Address,
8
- bufferToBigInt,
11
+ bytesToBigInt,
9
12
  setLengthLeft,
10
- toBuffer,
13
+ toBytes,
11
14
  } from "@nomicfoundation/ethereumjs-util";
12
15
 
13
16
  import { assertHardhatInvariant } from "../../core/errors";
@@ -232,7 +235,7 @@ export class VMDebugTracer {
232
235
  this._lastTrace = {
233
236
  gas: Number(result.totalGasSpent),
234
237
  failed: result.execResult.exceptionError !== undefined,
235
- returnValue: result.execResult.returnValue.toString("hex"),
238
+ returnValue: Buffer.from(result.execResult.returnValue).toString("hex"),
236
239
  structLogs: rpcStructLogs,
237
240
  };
238
241
 
@@ -339,7 +342,7 @@ export class VMDebugTracer {
339
342
 
340
343
  let gasCost = step.opcode.fee;
341
344
 
342
- let op = step.opcode.name;
345
+ let op = step.opcode.name === "KECCAK256" ? "SHA3" : step.opcode.name;
343
346
  let error: object | undefined;
344
347
 
345
348
  const storage: Storage = {};
@@ -347,7 +350,7 @@ export class VMDebugTracer {
347
350
  if (step.opcode.name === "SLOAD") {
348
351
  const address = step.address;
349
352
  const [keyBuffer] = this._getFromStack(stack, 1);
350
- const key: Buffer = setLengthLeft(keyBuffer, 32);
353
+ const key: Uint8Array = setLengthLeft(keyBuffer, 32);
351
354
 
352
355
  const storageValue = await this._getContractStorage(address, key);
353
356
 
@@ -360,8 +363,8 @@ export class VMDebugTracer {
360
363
  storage[key] = storageValue;
361
364
  } else if (step.opcode.name === "REVERT") {
362
365
  const [offsetBuffer, lengthBuffer] = this._getFromStack(stack, 2);
363
- const length = bufferToBigInt(lengthBuffer);
364
- const offset = bufferToBigInt(offsetBuffer);
366
+ const length = bytesToBigInt(lengthBuffer);
367
+ const offset = bytesToBigInt(offsetBuffer);
365
368
 
366
369
  const [gasIncrease, addedWords] = this._memoryExpansion(
367
370
  BigInt(memory.length),
@@ -375,7 +378,7 @@ export class VMDebugTracer {
375
378
  }
376
379
  } else if (step.opcode.name === "CREATE2") {
377
380
  const [, , memoryUsedBuffer] = this._getFromStack(stack, 3);
378
- const memoryUsed = bufferToBigInt(memoryUsedBuffer);
381
+ const memoryUsed = bytesToBigInt(memoryUsedBuffer);
379
382
  const sha3ExtraCost =
380
383
  BigIntUtils.divUp(memoryUsed, 32n) * this._sha3WordGas();
381
384
  gasCost += Number(sha3ExtraCost);
@@ -387,7 +390,7 @@ export class VMDebugTracer {
387
390
  // this is a port of what geth does to compute the
388
391
  // gasCost of a *CALL step, with some simplifications
389
392
  // because we don't support pre-spuriousDragon hardforks
390
- let valueBuffer = Buffer.from([]);
393
+ let valueBuffer = Uint8Array.from([]);
391
394
  let [
392
395
  callCostBuffer,
393
396
  recipientAddressBuffer,
@@ -410,16 +413,16 @@ export class VMDebugTracer {
410
413
  ] = this._getFromStack(stack, 7);
411
414
  }
412
415
 
413
- const callCost = bufferToBigInt(callCostBuffer);
416
+ const callCost = bytesToBigInt(callCostBuffer);
414
417
 
415
- const value = bufferToBigInt(valueBuffer);
418
+ const value = bytesToBigInt(valueBuffer);
416
419
 
417
420
  const memoryLength = BigInt(memory.length);
418
- const inBN = bufferToBigInt(inBuffer);
419
- const inSizeBN = bufferToBigInt(inSizeBuffer);
421
+ const inBN = bytesToBigInt(inBuffer);
422
+ const inSizeBN = bytesToBigInt(inSizeBuffer);
420
423
  const inPosition = inSizeBN === 0n ? inSizeBN : inBN + inSizeBN;
421
- const outBN = bufferToBigInt(outBuffer);
422
- const outSizeBN = bufferToBigInt(outSizeBuffer);
424
+ const outBN = bytesToBigInt(outBuffer);
425
+ const outSizeBN = bytesToBigInt(outSizeBuffer);
423
426
  const outPosition = outSizeBN === 0n ? outSizeBN : outBN + outSizeBN;
424
427
  const memSize = inPosition > outPosition ? inPosition : outPosition;
425
428
  const toAddress = new Address(recipientAddressBuffer.slice(-20));
@@ -473,42 +476,46 @@ export class VMDebugTracer {
473
476
  }
474
477
 
475
478
  private _memoryGas(): bigint {
476
- return this._vm._common.param("gasPrices", "memory");
479
+ return this._vm.common.param("gasPrices", "memory");
477
480
  }
478
481
 
479
482
  private _sha3WordGas(): bigint {
480
- return this._vm._common.param("gasPrices", "sha3Word");
483
+ return this._vm.common.param("gasPrices", "sha3Word");
481
484
  }
482
485
 
483
486
  private _callConstantGas(): bigint {
484
- if (this._vm._common.gteHardfork("berlin")) {
485
- return this._vm._common.param("gasPrices", "warmstorageread");
487
+ if (this._vm.common.gteHardfork("berlin")) {
488
+ return this._vm.common.param("gasPrices", "warmstorageread");
486
489
  }
487
490
 
488
- return this._vm._common.param("gasPrices", "call");
491
+ return this._vm.common.param("gasPrices", "call");
489
492
  }
490
493
 
491
494
  private _callNewAccountGas(): bigint {
492
- return this._vm._common.param("gasPrices", "callNewAccount");
495
+ return this._vm.common.param("gasPrices", "callNewAccount");
493
496
  }
494
497
 
495
498
  private _callValueTransferGas(): bigint {
496
- return this._vm._common.param("gasPrices", "callValueTransfer");
499
+ return this._vm.common.param("gasPrices", "callValueTransfer");
497
500
  }
498
501
 
499
502
  private _quadCoeffDiv(): bigint {
500
- return this._vm._common.param("gasPrices", "quadCoeffDiv");
503
+ return this._vm.common.param("gasPrices", "quadCoeffDiv");
501
504
  }
502
505
 
503
- private _isAddressEmpty(address: Address): Promise<boolean> {
504
- return this._vm.stateManager.accountIsEmpty(address);
506
+ private async _isAddressEmpty(address: Address): Promise<boolean> {
507
+ const account = await this._vm.stateManager.getAccount(address);
508
+ return account?.isEmpty() ?? true;
505
509
  }
506
510
 
507
- private _getContractStorage(address: Address, key: Buffer): Promise<Buffer> {
511
+ private _getContractStorage(
512
+ address: Address,
513
+ key: Uint8Array
514
+ ): Promise<Uint8Array> {
508
515
  return this._vm.stateManager.getContractStorage(address, key);
509
516
  }
510
517
 
511
- private _getContractCode(address: Address): Promise<Buffer> {
518
+ private _getContractCode(address: Address): Promise<Uint8Array> {
512
519
  return this._vm.stateManager.getContractCode(address);
513
520
  }
514
521
 
@@ -520,12 +527,16 @@ export class VMDebugTracer {
520
527
  callCost: bigint
521
528
  ): Promise<bigint> {
522
529
  // The available gas is reduced when the address is cold
523
- if (this._vm._common.gteHardfork("berlin")) {
524
- const isWarmed = this._vm.eei.isWarmedAddress(address.toBuffer());
530
+ if (this._vm.common.gteHardfork("berlin")) {
531
+ const journal = this._vm.evm.journal;
532
+ if (!(journal instanceof Journal)) {
533
+ throw new Error("evm.journal is not an instance of Journal");
534
+ }
535
+ const isWarmed = journal.isWarmedAddress(address.toBytes());
525
536
 
526
537
  const coldCost =
527
- this._vm._common.param("gasPrices", "coldaccountaccess") -
528
- this._vm._common.param("gasPrices", "warmstorageread");
538
+ this._vm.common.param("gasPrices", "coldaccountaccess") -
539
+ this._vm.common.param("gasPrices", "warmstorageread");
529
540
 
530
541
  // This comment is copied verbatim from geth:
531
542
  // The WarmStorageReadCostEIP2929 (100) is already deducted in the form of a constant cost, so
@@ -596,12 +607,12 @@ export class VMDebugTracer {
596
607
  return [0n, 0n];
597
608
  }
598
609
 
599
- private _getFromStack(stack: string[], count: number): Buffer[] {
610
+ private _getFromStack(stack: string[], count: number): Uint8Array[] {
600
611
  return stack
601
612
  .slice(-count)
602
613
  .reverse()
603
614
  .map((value) => `0x${value}`)
604
- .map(toBuffer);
615
+ .map(toBytes);
605
616
  }
606
617
 
607
618
  private _memoryFee(words: bigint): bigint {
@@ -614,6 +625,6 @@ export class VMDebugTracer {
614
625
  }
615
626
  }
616
627
 
617
- function toWord(b: Buffer): string {
618
- return b.toString("hex").padStart(64, "0");
628
+ function toWord(b: Uint8Array): string {
629
+ return Buffer.from(b).toString("hex").padStart(64, "0");
619
630
  }
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  EVMResult,
3
3
  getActivePrecompiles,
4
+ InterpreterStep,
5
+ Message,
4
6
  } from "@nomicfoundation/ethereumjs-evm";
5
- import { InterpreterStep } from "@nomicfoundation/ethereumjs-evm/dist/interpreter";
6
- import { Message } from "@nomicfoundation/ethereumjs-evm/dist/message";
7
- import { Address, bufferToBigInt } from "@nomicfoundation/ethereumjs-util";
7
+ import { Address, bytesToBigInt } from "@nomicfoundation/ethereumjs-util";
8
8
  import { VM } from "@nomicfoundation/ethereumjs-vm";
9
9
  import { assertHardhatInvariant } from "../../core/errors";
10
10
 
@@ -19,18 +19,20 @@ import {
19
19
 
20
20
  /* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */
21
21
 
22
- const DUMMY_RETURN_DATA = Buffer.from([]);
22
+ const DUMMY_RETURN_DATA = Uint8Array.from([]);
23
23
  const DUMMY_GAS_USED = 0n;
24
24
 
25
25
  export class VMTracer {
26
26
  private _messageTraces: MessageTrace[] = [];
27
27
  private _enabled = false;
28
28
  private _lastError: Error | undefined;
29
- private _maxPrecompileNumber = getActivePrecompiles(this._vm._common).size;
29
+ private _maxPrecompileNumber = getActivePrecompiles(this._vm.common).size;
30
30
 
31
31
  constructor(
32
32
  private readonly _vm: VM,
33
- private readonly _getContractCode: (address: Address) => Promise<Buffer>,
33
+ private readonly _getContractCode: (
34
+ address: Address
35
+ ) => Promise<Uint8Array>,
34
36
  private readonly _throwErrors = true
35
37
  ) {
36
38
  this._beforeMessageHandler = this._beforeMessageHandler.bind(this);
@@ -114,7 +116,7 @@ export class VMTracer {
114
116
 
115
117
  if (message.to === undefined) {
116
118
  const createTrace: CreateMessageTrace = {
117
- code: message.data,
119
+ code: new Uint8Array(message.data),
118
120
  steps: [],
119
121
  value: message.value,
120
122
  returnData: DUMMY_RETURN_DATA,
@@ -126,12 +128,12 @@ export class VMTracer {
126
128
 
127
129
  trace = createTrace;
128
130
  } else {
129
- const toAsBigInt = bufferToBigInt(message.to.toBuffer());
131
+ const toAsBigInt = bytesToBigInt(message.to.toBytes());
130
132
 
131
133
  if (toAsBigInt > 0 && toAsBigInt <= this._maxPrecompileNumber) {
132
134
  const precompileTrace: PrecompileMessageTrace = {
133
135
  precompile: Number(toAsBigInt),
134
- calldata: message.data,
136
+ calldata: new Uint8Array(message.data),
135
137
  value: message.value,
136
138
  returnData: DUMMY_RETURN_DATA,
137
139
  depth: message.depth,
@@ -146,15 +148,15 @@ export class VMTracer {
146
148
 
147
149
  const callTrace: CallMessageTrace = {
148
150
  code,
149
- calldata: message.data,
151
+ calldata: new Uint8Array(message.data),
150
152
  steps: [],
151
153
  value: message.value,
152
154
  returnData: DUMMY_RETURN_DATA,
153
- address: message.to.toBuffer(),
155
+ address: message.to.toBytes(),
154
156
  numberOfSubtraces: 0,
155
157
  depth: message.depth,
156
158
  gasUsed: DUMMY_GAS_USED,
157
- codeAddress: codeAddress.toBuffer(),
159
+ codeAddress: codeAddress.toBytes(),
158
160
  };
159
161
 
160
162
  trace = callTrace;
@@ -227,7 +229,7 @@ export class VMTracer {
227
229
  trace.gasUsed = result.execResult.executionGasUsed;
228
230
 
229
231
  if (isCreateTrace(trace)) {
230
- trace.deployedContract = result?.createdAddress?.toBuffer();
232
+ trace.deployedContract = result?.createdAddress?.toBytes();
231
233
  }
232
234
 
233
235
  if (this._messageTraces.length > 1) {
@@ -316,13 +316,14 @@ export class CompilerDownloader implements ICompilerDownloader {
316
316
  build: CompilerBuild,
317
317
  downloadPath: string
318
318
  ): Promise<boolean> {
319
- const ethereumjsUtil = require("@nomicfoundation/ethereumjs-util");
319
+ const { bytesToHex } =
320
+ require("@nomicfoundation/ethereumjs-util") as typeof import("@nomicfoundation/ethereumjs-util");
320
321
  const { keccak256 } = await import("../../util/keccak");
321
322
 
322
323
  const expectedKeccak256 = build.keccak256;
323
324
  const compiler = await fsExtra.readFile(downloadPath);
324
325
 
325
- const compilerKeccak256 = ethereumjsUtil.bufferToHex(keccak256(compiler));
326
+ const compilerKeccak256 = bytesToHex(keccak256(compiler));
326
327
 
327
328
  if (expectedKeccak256 !== compilerKeccak256) {
328
329
  await fsExtra.unlink(downloadPath);
@@ -60,6 +60,7 @@ const defaultEvmTargets: { [key: string]: string } = {
60
60
  "0.8.21": "shanghai",
61
61
  "0.8.22": "shanghai",
62
62
  "0.8.23": "shanghai",
63
+ "0.8.24": "shanghai",
63
64
  };
64
65
 
65
66
  export function getEvmVersionFromSolcVersion(
@@ -10,7 +10,7 @@ export class AbiHelpers {
10
10
  public static computeSelector(
11
11
  name: string,
12
12
  inputs: any[]
13
- ): Buffer | undefined {
13
+ ): Uint8Array | undefined {
14
14
  try {
15
15
  const fragment = abi.FunctionFragment.from({
16
16
  type: "function",
@@ -26,7 +26,7 @@ export class AbiHelpers {
26
26
  }
27
27
  }
28
28
 
29
- public static isValidCalldata(inputs: any[], calldata: Buffer): boolean {
29
+ public static isValidCalldata(inputs: any[], calldata: Uint8Array): boolean {
30
30
  try {
31
31
  abi.defaultAbiCoder.decode(inputs, calldata);
32
32
  return true;
@@ -34,13 +34,13 @@ export function toEvmWord(x: bigint | number): string {
34
34
  return x.toString(16).padStart(64, "0");
35
35
  }
36
36
 
37
- function bufferToBigInt(x: Buffer): bigint {
38
- const hex = `0x${x.toString("hex")}`;
37
+ function bufferToBigInt(x: Uint8Array): bigint {
38
+ const hex = `0x${Buffer.from(x).toString("hex")}`;
39
39
  return hex === "0x" ? 0n : BigInt(hex);
40
40
  }
41
41
 
42
42
  export function fromBigIntLike(
43
- x: string | number | bigint | Buffer | undefined
43
+ x: string | number | bigint | Uint8Array | undefined
44
44
  ): bigint | undefined {
45
45
  if (x === undefined || typeof x === "bigint") {
46
46
  return x;
@@ -48,7 +48,7 @@ export function fromBigIntLike(
48
48
  if (typeof x === "number" || typeof x === "string") {
49
49
  return BigInt(x);
50
50
  }
51
- if (Buffer.isBuffer(x)) {
51
+ if (x instanceof Uint8Array) {
52
52
  return bufferToBigInt(x);
53
53
  }
54
54
 
@@ -17,6 +17,7 @@ export enum HardforkName {
17
17
  GRAY_GLACIER = "grayGlacier",
18
18
  MERGE = "merge",
19
19
  SHANGHAI = "shanghai",
20
+ CANCUN = "cancun",
20
21
  }
21
22
 
22
23
  const HARDFORKS_ORDER: HardforkName[] = [
@@ -36,6 +37,7 @@ const HARDFORKS_ORDER: HardforkName[] = [
36
37
  HardforkName.GRAY_GLACIER,
37
38
  HardforkName.MERGE,
38
39
  HardforkName.SHANGHAI,
40
+ HardforkName.CANCUN,
39
41
  ];
40
42
 
41
43
  export function getHardforkName(name: string): HardforkName {
@@ -1,5 +1,5 @@
1
1
  import createKeccakHash from "keccak";
2
2
 
3
- export function keccak256(data: Buffer): Buffer {
4
- return createKeccakHash("keccak256").update(data).digest();
3
+ export function keccak256(data: Uint8Array): Uint8Array {
4
+ return createKeccakHash("keccak256").update(Buffer.from(data)).digest();
5
5
  }