hardhat 2.20.0 → 2.21.0-dev.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 (271) hide show
  1. package/internal/core/jsonrpc/types/input/blockTag.d.ts +3 -3
  2. package/internal/core/jsonrpc/types/input/filterRequest.d.ts +6 -6
  3. package/internal/core/providers/construction.d.ts.map +1 -1
  4. package/internal/core/providers/construction.js +28 -4
  5. package/internal/core/providers/construction.js.map +1 -1
  6. package/internal/core/providers/http.d.ts +2 -0
  7. package/internal/core/providers/http.d.ts.map +1 -1
  8. package/internal/core/providers/http.js +2 -1
  9. package/internal/core/providers/http.js.map +1 -1
  10. package/internal/core/runtime-environment.d.ts.map +1 -1
  11. package/internal/core/runtime-environment.js.map +1 -1
  12. package/internal/hardhat-network/jsonrpc/client.d.ts +0 -2
  13. package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
  14. package/internal/hardhat-network/jsonrpc/client.js +0 -16
  15. package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
  16. package/internal/hardhat-network/jsonrpc/handler.js +9 -1
  17. package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
  18. package/internal/hardhat-network/provider/BlockchainData.d.ts +5 -5
  19. package/internal/hardhat-network/provider/BlockchainData.d.ts.map +1 -1
  20. package/internal/hardhat-network/provider/BlockchainData.js +10 -10
  21. package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
  22. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts +0 -7
  23. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts.map +1 -1
  24. package/internal/hardhat-network/provider/HardhatBlockchain.js +2 -14
  25. package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
  26. package/internal/hardhat-network/provider/TxPool.d.ts +3 -2
  27. package/internal/hardhat-network/provider/TxPool.d.ts.map +1 -1
  28. package/internal/hardhat-network/provider/TxPool.js +16 -16
  29. package/internal/hardhat-network/provider/TxPool.js.map +1 -1
  30. package/internal/hardhat-network/provider/ethereumjs-workarounds.js +1 -1
  31. package/internal/hardhat-network/provider/ethereumjs-workarounds.js.map +1 -1
  32. package/internal/hardhat-network/provider/filter.d.ts +6 -5
  33. package/internal/hardhat-network/provider/filter.d.ts.map +1 -1
  34. package/internal/hardhat-network/provider/filter.js +2 -2
  35. package/internal/hardhat-network/provider/filter.js.map +1 -1
  36. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts +0 -7
  37. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -1
  38. package/internal/hardhat-network/provider/fork/ForkBlockchain.js +4 -21
  39. package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
  40. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts +13 -19
  41. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts.map +1 -1
  42. package/internal/hardhat-network/provider/fork/ForkStateManager.js +61 -59
  43. package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
  44. package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts.map +1 -1
  45. package/internal/hardhat-network/provider/fork/rpcToBlockData.js +0 -3
  46. package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -1
  47. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts +2 -2
  48. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts.map +1 -1
  49. package/internal/hardhat-network/provider/fork/rpcToTxData.js +1 -1
  50. package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -1
  51. package/internal/hardhat-network/provider/modules/base.js +4 -4
  52. package/internal/hardhat-network/provider/modules/base.js.map +1 -1
  53. package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
  54. package/internal/hardhat-network/provider/modules/eth.js +9 -16
  55. package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
  56. package/internal/hardhat-network/provider/modules/logger.d.ts +6 -84
  57. package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
  58. package/internal/hardhat-network/provider/modules/logger.js +3 -530
  59. package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
  60. package/internal/hardhat-network/provider/node-types.d.ts +2 -65
  61. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
  62. package/internal/hardhat-network/provider/node-types.js +0 -5
  63. package/internal/hardhat-network/provider/node-types.js.map +1 -1
  64. package/internal/hardhat-network/provider/node.d.ts +2 -6
  65. package/internal/hardhat-network/provider/node.d.ts.map +1 -1
  66. package/internal/hardhat-network/provider/node.js +79 -148
  67. package/internal/hardhat-network/provider/node.js.map +1 -1
  68. package/internal/hardhat-network/provider/output.d.ts +0 -14
  69. package/internal/hardhat-network/provider/output.d.ts.map +1 -1
  70. package/internal/hardhat-network/provider/output.js +0 -264
  71. package/internal/hardhat-network/provider/output.js.map +1 -1
  72. package/internal/hardhat-network/provider/provider.d.ts +26 -25
  73. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  74. package/internal/hardhat-network/provider/provider.js +342 -186
  75. package/internal/hardhat-network/provider/provider.js.map +1 -1
  76. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts +10 -8
  77. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
  78. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +9 -9
  79. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
  80. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts +10 -8
  81. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
  82. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +9 -9
  83. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
  84. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts +10 -9
  85. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
  86. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +7 -6
  87. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
  88. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts +6 -5
  89. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts.map +1 -1
  90. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +1 -1
  91. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
  92. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts +5 -4
  93. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts.map +1 -1
  94. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js +1 -1
  95. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js.map +1 -1
  96. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts +8 -7
  97. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts.map +1 -1
  98. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js +2 -2
  99. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js.map +1 -1
  100. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.d.ts +8 -7
  101. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.d.ts.map +1 -1
  102. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.js +2 -2
  103. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.js.map +1 -1
  104. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts +5 -4
  105. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts.map +1 -1
  106. package/internal/hardhat-network/provider/utils/convertToEdr.d.ts +14 -0
  107. package/internal/hardhat-network/provider/utils/convertToEdr.d.ts.map +1 -0
  108. package/internal/hardhat-network/provider/utils/convertToEdr.js +191 -0
  109. package/internal/hardhat-network/provider/utils/convertToEdr.js.map +1 -0
  110. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.d.ts +0 -1
  111. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.d.ts.map +1 -1
  112. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.js +1 -5
  113. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.js.map +1 -1
  114. package/internal/hardhat-network/provider/utils/makeCommon.d.ts +1 -1
  115. package/internal/hardhat-network/provider/utils/makeCommon.d.ts.map +1 -1
  116. package/internal/hardhat-network/provider/utils/makeCommon.js +1 -3
  117. package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
  118. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts +2 -2
  119. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts.map +1 -1
  120. package/internal/hardhat-network/provider/utils/makeFakeSignature.js +1 -15
  121. package/internal/hardhat-network/provider/utils/makeFakeSignature.js.map +1 -1
  122. package/internal/hardhat-network/provider/utils/makeForkClient.d.ts +10 -1
  123. package/internal/hardhat-network/provider/utils/makeForkClient.d.ts.map +1 -1
  124. package/internal/hardhat-network/provider/utils/makeForkClient.js +38 -18
  125. package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -1
  126. package/internal/hardhat-network/provider/utils/makeStateTrie.js +2 -2
  127. package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
  128. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +3 -1
  129. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
  130. package/internal/hardhat-network/provider/utils/putGenesisBlock.js +2 -6
  131. package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
  132. package/internal/hardhat-network/provider/utils/random.d.ts +1 -0
  133. package/internal/hardhat-network/provider/utils/random.d.ts.map +1 -1
  134. package/internal/hardhat-network/provider/utils/random.js +7 -1
  135. package/internal/hardhat-network/provider/utils/random.js.map +1 -1
  136. package/internal/hardhat-network/provider/utils/reorgs-protection.d.ts +1 -1
  137. package/internal/hardhat-network/provider/utils/reorgs-protection.d.ts.map +1 -1
  138. package/internal/hardhat-network/provider/utils/reorgs-protection.js +5 -5
  139. package/internal/hardhat-network/provider/utils/reorgs-protection.js.map +1 -1
  140. package/internal/hardhat-network/provider/vm/exit.d.ts +22 -0
  141. package/internal/hardhat-network/provider/vm/exit.d.ts.map +1 -0
  142. package/internal/hardhat-network/provider/vm/exit.js +93 -0
  143. package/internal/hardhat-network/provider/vm/exit.js.map +1 -0
  144. package/internal/hardhat-network/provider/vm/minimal-vm.d.ts +29 -0
  145. package/internal/hardhat-network/provider/vm/minimal-vm.d.ts.map +1 -0
  146. package/internal/hardhat-network/provider/vm/minimal-vm.js +46 -0
  147. package/internal/hardhat-network/provider/vm/minimal-vm.js.map +1 -0
  148. package/internal/hardhat-network/provider/vm/proxy-vm.d.ts +36 -0
  149. package/internal/hardhat-network/provider/vm/proxy-vm.d.ts.map +1 -0
  150. package/internal/hardhat-network/provider/vm/proxy-vm.js +73 -0
  151. package/internal/hardhat-network/provider/vm/proxy-vm.js.map +1 -0
  152. package/internal/hardhat-network/provider/vm/types.d.ts +27 -0
  153. package/internal/hardhat-network/provider/vm/types.d.ts.map +1 -0
  154. package/internal/hardhat-network/provider/vm/types.js +3 -0
  155. package/internal/hardhat-network/provider/vm/types.js.map +1 -0
  156. package/internal/hardhat-network/stack-traces/consoleLogger.d.ts +6 -0
  157. package/internal/hardhat-network/stack-traces/consoleLogger.d.ts.map +1 -1
  158. package/internal/hardhat-network/stack-traces/consoleLogger.js +33 -16
  159. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  160. package/internal/hardhat-network/stack-traces/contracts-identifier.d.ts +1 -2
  161. package/internal/hardhat-network/stack-traces/contracts-identifier.d.ts.map +1 -1
  162. package/internal/hardhat-network/stack-traces/contracts-identifier.js +6 -7
  163. package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
  164. package/internal/hardhat-network/stack-traces/debug.js +6 -6
  165. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  166. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +1 -1
  167. package/internal/hardhat-network/stack-traces/error-inferrer.js +13 -7
  168. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
  169. package/internal/hardhat-network/stack-traces/message-trace.d.ts +8 -3
  170. package/internal/hardhat-network/stack-traces/message-trace.d.ts.map +1 -1
  171. package/internal/hardhat-network/stack-traces/message-trace.js +22 -1
  172. package/internal/hardhat-network/stack-traces/message-trace.js.map +1 -1
  173. package/internal/hardhat-network/stack-traces/model.d.ts +8 -0
  174. package/internal/hardhat-network/stack-traces/model.d.ts.map +1 -1
  175. package/internal/hardhat-network/stack-traces/model.js +52 -0
  176. package/internal/hardhat-network/stack-traces/model.js.map +1 -1
  177. package/internal/hardhat-network/stack-traces/opcodes.d.ts +1 -0
  178. package/internal/hardhat-network/stack-traces/opcodes.d.ts.map +1 -1
  179. package/internal/hardhat-network/stack-traces/opcodes.js +5 -1
  180. package/internal/hardhat-network/stack-traces/opcodes.js.map +1 -1
  181. package/internal/hardhat-network/stack-traces/solidity-errors.js +2 -2
  182. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  183. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
  184. package/internal/hardhat-network/stack-traces/solidityTracer.js +5 -5
  185. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  186. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts.map +1 -1
  187. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +28 -34
  188. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
  189. package/internal/hardhat-network/stack-traces/vm-trace-decoder.d.ts +7 -0
  190. package/internal/hardhat-network/stack-traces/vm-trace-decoder.d.ts.map +1 -1
  191. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js +69 -2
  192. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js.map +1 -1
  193. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +7 -12
  194. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
  195. package/internal/hardhat-network/stack-traces/vm-tracer.js +46 -65
  196. package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
  197. package/internal/util/date.d.ts +1 -0
  198. package/internal/util/date.d.ts.map +1 -1
  199. package/internal/util/date.js +5 -1
  200. package/internal/util/date.js.map +1 -1
  201. package/internal/util/hardforks.d.ts +2 -0
  202. package/internal/util/hardforks.d.ts.map +1 -1
  203. package/internal/util/hardforks.js +27 -1
  204. package/internal/util/hardforks.js.map +1 -1
  205. package/package.json +18 -16
  206. package/src/internal/core/providers/construction.ts +7 -9
  207. package/src/internal/core/providers/http.ts +3 -1
  208. package/src/internal/core/runtime-environment.ts +2 -1
  209. package/src/internal/hardhat-network/jsonrpc/client.ts +1 -28
  210. package/src/internal/hardhat-network/jsonrpc/handler.ts +9 -1
  211. package/src/internal/hardhat-network/provider/modules/logger.ts +6 -801
  212. package/src/internal/hardhat-network/provider/node-types.ts +2 -89
  213. package/src/internal/hardhat-network/provider/output.ts +0 -352
  214. package/src/internal/hardhat-network/provider/provider.ts +482 -263
  215. package/src/internal/hardhat-network/provider/utils/convertToEdr.ts +228 -0
  216. package/src/internal/hardhat-network/provider/utils/getCurrentTimestamp.ts +0 -4
  217. package/src/internal/hardhat-network/provider/utils/makeCommon.ts +1 -12
  218. package/src/internal/hardhat-network/provider/utils/makeForkClient.ts +63 -24
  219. package/src/internal/hardhat-network/provider/utils/random.ts +8 -1
  220. package/src/internal/hardhat-network/provider/utils/reorgs-protection.ts +5 -5
  221. package/src/internal/hardhat-network/provider/vm/exit.ts +101 -0
  222. package/src/internal/hardhat-network/provider/vm/minimal-vm.ts +101 -0
  223. package/src/internal/hardhat-network/provider/vm/types.ts +31 -0
  224. package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +40 -21
  225. package/src/internal/hardhat-network/stack-traces/contracts-identifier.ts +10 -12
  226. package/src/internal/hardhat-network/stack-traces/debug.ts +6 -6
  227. package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +15 -8
  228. package/src/internal/hardhat-network/stack-traces/message-trace.ts +40 -4
  229. package/src/internal/hardhat-network/stack-traces/model.ts +61 -0
  230. package/src/internal/hardhat-network/stack-traces/opcodes.ts +4 -0
  231. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +2 -2
  232. package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +6 -5
  233. package/src/internal/hardhat-network/stack-traces/vm-trace-decoder.ts +113 -4
  234. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +67 -95
  235. package/src/internal/util/date.ts +4 -0
  236. package/src/internal/util/hardforks.ts +52 -0
  237. package/src/internal/hardhat-network/provider/BlockchainBase.ts +0 -185
  238. package/src/internal/hardhat-network/provider/BlockchainData.ts +0 -261
  239. package/src/internal/hardhat-network/provider/HardhatBlockchain.ts +0 -140
  240. package/src/internal/hardhat-network/provider/PoolState.ts +0 -48
  241. package/src/internal/hardhat-network/provider/TransactionQueue.ts +0 -158
  242. package/src/internal/hardhat-network/provider/TxPool.ts +0 -715
  243. package/src/internal/hardhat-network/provider/ethereumjs-workarounds.ts +0 -21
  244. package/src/internal/hardhat-network/provider/filter.ts +0 -142
  245. package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +0 -433
  246. package/src/internal/hardhat-network/provider/fork/ForkStateManager.ts +0 -480
  247. package/src/internal/hardhat-network/provider/fork/rpcToBlockData.ts +0 -35
  248. package/src/internal/hardhat-network/provider/fork/rpcToTxData.ts +0 -44
  249. package/src/internal/hardhat-network/provider/modules/base.ts +0 -156
  250. package/src/internal/hardhat-network/provider/modules/debug.ts +0 -104
  251. package/src/internal/hardhat-network/provider/modules/eth.ts +0 -1781
  252. package/src/internal/hardhat-network/provider/modules/evm.ts +0 -249
  253. package/src/internal/hardhat-network/provider/modules/hardhat.ts +0 -481
  254. package/src/internal/hardhat-network/provider/modules/net.ts +0 -60
  255. package/src/internal/hardhat-network/provider/modules/personal.ts +0 -40
  256. package/src/internal/hardhat-network/provider/modules/web3.ts +0 -49
  257. package/src/internal/hardhat-network/provider/node.ts +0 -2993
  258. package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +0 -226
  259. package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +0 -224
  260. package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +0 -216
  261. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +0 -143
  262. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.ts +0 -144
  263. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.ts +0 -171
  264. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.ts +0 -169
  265. package/src/internal/hardhat-network/provider/types/HardhatBlockchainInterface.ts +0 -25
  266. package/src/internal/hardhat-network/provider/utils/makeFakeSignature.ts +0 -60
  267. package/src/internal/hardhat-network/provider/utils/makeStateTrie.ts +0 -29
  268. package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +0 -61
  269. package/src/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.ts +0 -45
  270. package/src/internal/hardhat-network/provider/utils/txMapToArray.ts +0 -7
  271. package/src/internal/hardhat-network/stack-traces/vm-debug-tracer.ts +0 -630
@@ -0,0 +1,228 @@
1
+ import {
2
+ SpecId,
3
+ MineOrdering,
4
+ IntervalRange,
5
+ DebugTraceResult,
6
+ TracingMessage,
7
+ TracingMessageResult,
8
+ TracingStep,
9
+ } from "@nomicfoundation/edr";
10
+ import { Address } from "@nomicfoundation/ethereumjs-util";
11
+
12
+ import { HardforkName } from "../../../util/hardforks";
13
+ import { IntervalMiningConfig, MempoolOrder } from "../node-types";
14
+ import { RpcDebugTraceOutput, RpcStructLog } from "../output";
15
+ import {
16
+ MinimalEVMResult,
17
+ MinimalInterpreterStep,
18
+ MinimalMessage,
19
+ } from "../vm/types";
20
+
21
+ /* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */
22
+
23
+ export function ethereumsjsHardforkToEdrSpecId(hardfork: HardforkName): SpecId {
24
+ switch (hardfork) {
25
+ case HardforkName.FRONTIER:
26
+ return SpecId.Frontier;
27
+ case HardforkName.HOMESTEAD:
28
+ return SpecId.Homestead;
29
+ case HardforkName.DAO:
30
+ return SpecId.DaoFork;
31
+ case HardforkName.TANGERINE_WHISTLE:
32
+ return SpecId.Tangerine;
33
+ case HardforkName.SPURIOUS_DRAGON:
34
+ return SpecId.SpuriousDragon;
35
+ case HardforkName.BYZANTIUM:
36
+ return SpecId.Byzantium;
37
+ case HardforkName.CONSTANTINOPLE:
38
+ return SpecId.Constantinople;
39
+ case HardforkName.PETERSBURG:
40
+ return SpecId.Petersburg;
41
+ case HardforkName.ISTANBUL:
42
+ return SpecId.Istanbul;
43
+ case HardforkName.MUIR_GLACIER:
44
+ return SpecId.MuirGlacier;
45
+ case HardforkName.BERLIN:
46
+ return SpecId.Berlin;
47
+ case HardforkName.LONDON:
48
+ return SpecId.London;
49
+ case HardforkName.ARROW_GLACIER:
50
+ return SpecId.ArrowGlacier;
51
+ case HardforkName.GRAY_GLACIER:
52
+ return SpecId.GrayGlacier;
53
+ case HardforkName.MERGE:
54
+ return SpecId.Merge;
55
+ case HardforkName.SHANGHAI:
56
+ return SpecId.Shanghai;
57
+ case HardforkName.CANCUN:
58
+ return SpecId.Cancun;
59
+ default:
60
+ const _exhaustiveCheck: never = hardfork;
61
+ throw new Error(
62
+ `Unknown hardfork name '${hardfork as string}', this shouldn't happen`
63
+ );
64
+ }
65
+ }
66
+
67
+ export function edrSpecIdToEthereumHardfork(specId: SpecId): HardforkName {
68
+ switch (specId) {
69
+ case SpecId.Frontier:
70
+ return HardforkName.FRONTIER;
71
+ case SpecId.Homestead:
72
+ return HardforkName.HOMESTEAD;
73
+ case SpecId.DaoFork:
74
+ return HardforkName.DAO;
75
+ case SpecId.Tangerine:
76
+ return HardforkName.TANGERINE_WHISTLE;
77
+ case SpecId.SpuriousDragon:
78
+ return HardforkName.SPURIOUS_DRAGON;
79
+ case SpecId.Byzantium:
80
+ return HardforkName.BYZANTIUM;
81
+ case SpecId.Constantinople:
82
+ return HardforkName.CONSTANTINOPLE;
83
+ case SpecId.Petersburg:
84
+ return HardforkName.PETERSBURG;
85
+ case SpecId.Istanbul:
86
+ return HardforkName.ISTANBUL;
87
+ case SpecId.MuirGlacier:
88
+ return HardforkName.MUIR_GLACIER;
89
+ case SpecId.Berlin:
90
+ return HardforkName.BERLIN;
91
+ case SpecId.London:
92
+ return HardforkName.LONDON;
93
+ case SpecId.ArrowGlacier:
94
+ return HardforkName.ARROW_GLACIER;
95
+ case SpecId.GrayGlacier:
96
+ return HardforkName.GRAY_GLACIER;
97
+ case SpecId.Merge:
98
+ return HardforkName.MERGE;
99
+ case SpecId.Shanghai:
100
+ return HardforkName.SHANGHAI;
101
+ // HACK: EthereumJS doesn't support Cancun, so report Shanghai
102
+ case SpecId.Cancun:
103
+ return HardforkName.SHANGHAI;
104
+
105
+ default:
106
+ throw new Error(`Unknown spec id '${specId}', this shouldn't happen`);
107
+ }
108
+ }
109
+
110
+ export function ethereumjsIntervalMiningConfigToEdr(
111
+ config: IntervalMiningConfig
112
+ ): bigint | IntervalRange | undefined {
113
+ if (typeof config === "number") {
114
+ // Is interval mining disabled?
115
+ if (config === 0) {
116
+ return undefined;
117
+ } else {
118
+ return BigInt(config);
119
+ }
120
+ } else {
121
+ return {
122
+ min: BigInt(config[0]),
123
+ max: BigInt(config[1]),
124
+ };
125
+ }
126
+ }
127
+
128
+ export function ethereumjsMempoolOrderToEdrMineOrdering(
129
+ mempoolOrder: MempoolOrder
130
+ ): MineOrdering {
131
+ switch (mempoolOrder) {
132
+ case "fifo":
133
+ return MineOrdering.Fifo;
134
+ case "priority":
135
+ return MineOrdering.Priority;
136
+ }
137
+ }
138
+
139
+ export function edrRpcDebugTraceToHardhat(
140
+ rpcDebugTrace: DebugTraceResult
141
+ ): RpcDebugTraceOutput {
142
+ const structLogs = rpcDebugTrace.structLogs.map((log) => {
143
+ const result: RpcStructLog = {
144
+ depth: Number(log.depth),
145
+ gas: Number(log.gas),
146
+ gasCost: Number(log.gasCost),
147
+ op: log.opName,
148
+ pc: Number(log.pc),
149
+ };
150
+
151
+ if (log.memory !== undefined) {
152
+ result.memory = log.memory;
153
+ }
154
+
155
+ if (log.stack !== undefined) {
156
+ // Remove 0x prefix which is required by EIP-3155, but not expected by Hardhat.
157
+ result.stack = log.stack?.map((item) => item.slice(2));
158
+ }
159
+
160
+ if (log.storage !== undefined) {
161
+ result.storage = Object.fromEntries(
162
+ Object.entries(log.storage).map(([key, value]) => {
163
+ return [key.slice(2), value.slice(2)];
164
+ })
165
+ );
166
+ }
167
+
168
+ if (log.error !== undefined) {
169
+ result.error = {
170
+ message: log.error,
171
+ };
172
+ }
173
+
174
+ return result;
175
+ });
176
+
177
+ // REVM trace adds initial STOP that Hardhat doesn't expect
178
+ if (structLogs.length > 0 && structLogs[0].op === "STOP") {
179
+ structLogs.shift();
180
+ }
181
+
182
+ let returnValue = rpcDebugTrace.output?.toString("hex") ?? "";
183
+ if (returnValue === "0x") {
184
+ returnValue = "";
185
+ }
186
+
187
+ return {
188
+ failed: !rpcDebugTrace.pass,
189
+ gas: Number(rpcDebugTrace.gasUsed),
190
+ returnValue,
191
+ structLogs,
192
+ };
193
+ }
194
+
195
+ export function edrTracingStepToMinimalInterpreterStep(
196
+ step: TracingStep
197
+ ): MinimalInterpreterStep {
198
+ return {
199
+ pc: Number(step.pc),
200
+ depth: step.depth,
201
+ opcode: {
202
+ name: step.opcode,
203
+ },
204
+ stack: step.stackTop !== undefined ? [step.stackTop] : [],
205
+ };
206
+ }
207
+
208
+ export function edrTracingMessageResultToMinimalEVMResult(
209
+ tracingMessageResult: TracingMessageResult
210
+ ): MinimalEVMResult {
211
+ return {
212
+ execResult: {
213
+ executionGasUsed: tracingMessageResult.executionResult.result.gasUsed,
214
+ },
215
+ };
216
+ }
217
+
218
+ export function edrTracingMessageToMinimalMessage(
219
+ message: TracingMessage
220
+ ): MinimalMessage {
221
+ return {
222
+ to: message.to !== undefined ? new Address(message.to) : undefined,
223
+ data: message.data,
224
+ value: message.value,
225
+ caller: new Address(message.caller),
226
+ gasLimit: message.gasLimit,
227
+ };
228
+ }
@@ -1,7 +1,3 @@
1
1
  export function getCurrentTimestamp(): number {
2
2
  return Math.ceil(new Date().getTime() / 1000);
3
3
  }
4
-
5
- export function getCurrentTimestampBigInt(): bigint {
6
- return BigInt(getCurrentTimestamp());
7
- }
@@ -2,19 +2,8 @@ import { Common } from "@nomicfoundation/ethereumjs-common";
2
2
 
3
3
  import { LocalNodeConfig } from "../node-types";
4
4
  import { HardforkName } from "../../../util/hardforks";
5
- import { assertTransientStorageCompatibility } from "../node";
6
-
7
- export function makeCommon({
8
- chainId,
9
- networkId,
10
- hardfork,
11
- enableTransientStorage,
12
- }: LocalNodeConfig) {
13
- assertTransientStorageCompatibility(
14
- enableTransientStorage,
15
- hardfork as HardforkName
16
- );
17
5
 
6
+ export function makeCommon({ chainId, networkId, hardfork }: LocalNodeConfig) {
18
7
  const common = Common.custom(
19
8
  {
20
9
  chainId,
@@ -23,47 +23,49 @@ import {
23
23
  // anymore, so this really should be revisited.
24
24
  const FORK_HTTP_TIMEOUT = 35000;
25
25
 
26
- export async function makeForkClient(
27
- forkConfig: ForkConfig,
28
- forkCachePath?: string
29
- ): Promise<{
30
- forkClient: JsonRpcClient;
26
+ export async function makeForkProvider(forkConfig: ForkConfig): Promise<{
27
+ forkProvider: HttpProvider;
28
+ networkId: number;
31
29
  forkBlockNumber: bigint;
32
- forkBlockTimestamp: number;
33
- forkBlockHash: string;
30
+ latestBlockNumber: bigint;
31
+ maxReorg: bigint;
34
32
  }> {
35
- const provider = new HttpProvider(
33
+ const forkProvider = new HttpProvider(
36
34
  forkConfig.jsonRpcUrl,
37
35
  HARDHAT_NETWORK_NAME,
38
36
  forkConfig.httpHeaders,
39
37
  FORK_HTTP_TIMEOUT
40
38
  );
41
39
 
42
- const networkId = await getNetworkId(provider);
40
+ const networkId = await getNetworkId(forkProvider);
43
41
  const actualMaxReorg = getLargestPossibleReorg(networkId);
44
42
  const maxReorg = actualMaxReorg ?? FALLBACK_MAX_REORG;
45
43
 
46
- const latestBlock = await getLatestBlockNumber(provider);
47
- const lastSafeBlock = getLastSafeBlock(latestBlock, maxReorg);
44
+ const latestBlockNumber = await getLatestBlockNumber(forkProvider);
45
+ const lastSafeBlockNumber = getLastSafeBlockNumber(
46
+ latestBlockNumber,
47
+ maxReorg
48
+ );
48
49
 
49
50
  let forkBlockNumber;
50
51
  if (forkConfig.blockNumber !== undefined) {
51
- if (forkConfig.blockNumber > latestBlock) {
52
+ if (forkConfig.blockNumber > latestBlockNumber) {
52
53
  // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error
53
54
  throw new Error(
54
- `Trying to initialize a provider with block ${forkConfig.blockNumber} but the current block is ${latestBlock}`
55
+ `Trying to initialize a provider with block ${forkConfig.blockNumber} but the current block is ${latestBlockNumber}`
55
56
  );
56
57
  }
57
58
 
58
- if (forkConfig.blockNumber > lastSafeBlock) {
59
- const confirmations = latestBlock - BigInt(forkConfig.blockNumber) + 1n;
59
+ if (forkConfig.blockNumber > lastSafeBlockNumber) {
60
+ const confirmations =
61
+ latestBlockNumber - BigInt(forkConfig.blockNumber) + 1n;
60
62
  const requiredConfirmations = maxReorg + 1n;
61
63
  console.warn(
62
64
  chalk.yellow(
63
65
  `You are forking from block ${
64
66
  forkConfig.blockNumber
65
67
  }, which has less than ${requiredConfirmations} confirmations, and will affect Hardhat Network's performance.
66
- Please use block number ${lastSafeBlock} or wait for the block to get ${
68
+ Please use block number ${lastSafeBlockNumber} or wait for the block to get ${
67
69
  requiredConfirmations - confirmations
68
70
  } more confirmations.`
69
71
  )
@@ -72,10 +74,37 @@ Please use block number ${lastSafeBlock} or wait for the block to get ${
72
74
 
73
75
  forkBlockNumber = BigInt(forkConfig.blockNumber);
74
76
  } else {
75
- forkBlockNumber = BigInt(lastSafeBlock);
77
+ forkBlockNumber = BigInt(lastSafeBlockNumber);
76
78
  }
77
79
 
78
- const block = await getBlockByNumber(provider, forkBlockNumber);
80
+ return {
81
+ forkProvider,
82
+ networkId,
83
+ forkBlockNumber,
84
+ latestBlockNumber,
85
+ maxReorg,
86
+ };
87
+ }
88
+
89
+ export async function makeForkClient(
90
+ forkConfig: ForkConfig,
91
+ forkCachePath?: string
92
+ ): Promise<{
93
+ forkClient: JsonRpcClient;
94
+ forkBlockNumber: bigint;
95
+ forkBlockTimestamp: number;
96
+ forkBlockHash: string;
97
+ forkBlockStateRoot: string;
98
+ }> {
99
+ const {
100
+ forkProvider,
101
+ networkId,
102
+ forkBlockNumber,
103
+ latestBlockNumber,
104
+ maxReorg,
105
+ } = await makeForkProvider(forkConfig);
106
+
107
+ const block = await getBlockByNumber(forkProvider, forkBlockNumber);
79
108
 
80
109
  const forkBlockTimestamp = rpcQuantityToNumber(block.timestamp) * 1000;
81
110
 
@@ -83,9 +112,9 @@ Please use block number ${lastSafeBlock} or wait for the block to get ${
83
112
  forkConfig.blockNumber !== undefined && forkCachePath !== undefined;
84
113
 
85
114
  const forkClient = new JsonRpcClient(
86
- provider,
115
+ forkProvider,
87
116
  networkId,
88
- latestBlock,
117
+ latestBlockNumber,
89
118
  maxReorg,
90
119
  cacheToDiskEnabled ? forkCachePath : undefined
91
120
  );
@@ -97,7 +126,15 @@ Please use block number ${lastSafeBlock} or wait for the block to get ${
97
126
  "Forked block should have a hash"
98
127
  );
99
128
 
100
- return { forkClient, forkBlockNumber, forkBlockTimestamp, forkBlockHash };
129
+ const forkBlockStateRoot = block.stateRoot;
130
+
131
+ return {
132
+ forkClient,
133
+ forkBlockNumber,
134
+ forkBlockTimestamp,
135
+ forkBlockHash,
136
+ forkBlockStateRoot,
137
+ };
101
138
  }
102
139
 
103
140
  async function getBlockByNumber(
@@ -128,11 +165,13 @@ async function getLatestBlockNumber(provider: HttpProvider) {
128
165
  return latestBlock;
129
166
  }
130
167
 
131
- export function getLastSafeBlock(
132
- latestBlock: bigint,
168
+ export function getLastSafeBlockNumber(
169
+ latestBlockNumber: bigint,
133
170
  maxReorg: bigint
134
171
  ): bigint {
135
172
  // Design choice: if latestBlock - maxReorg results in a negative number then the latestBlock block will be used.
136
173
  // This decision is based on the assumption that if maxReorg > latestBlock then there is a high probability that the fork is occurring on a devnet.
137
- return latestBlock - maxReorg >= 0 ? latestBlock - maxReorg : latestBlock;
174
+ return latestBlockNumber - maxReorg >= 0
175
+ ? latestBlockNumber - maxReorg
176
+ : latestBlockNumber;
138
177
  }
@@ -22,6 +22,10 @@ export class RandomBufferGenerator {
22
22
  return valueToReturn;
23
23
  }
24
24
 
25
+ public seed(): Uint8Array {
26
+ return this._nextValue;
27
+ }
28
+
25
29
  public setNext(nextValue: Buffer) {
26
30
  this._nextValue = Buffer.from(nextValue);
27
31
  }
@@ -54,4 +58,7 @@ export const randomAddressString = () => {
54
58
  return bufferToHex(randomAddressBuffer());
55
59
  };
56
60
 
57
- export const randomAddressBuffer = () => randomHashBuffer().slice(0, 20);
61
+ const addressGenerator = RandomBufferGenerator.create("seed");
62
+ export const randomAddressBuffer = (): Uint8Array => {
63
+ return addressGenerator.next().slice(0, 20);
64
+ };
@@ -8,22 +8,22 @@
8
8
  export function getLargestPossibleReorg(networkId: number): bigint | undefined {
9
9
  // mainnet
10
10
  if (networkId === 1) {
11
- return 5n;
11
+ return 32n;
12
12
  }
13
13
 
14
14
  // Kovan
15
15
  if (networkId === 42) {
16
- return 5n;
16
+ return 32n;
17
17
  }
18
18
 
19
19
  // Goerli
20
20
  if (networkId === 5) {
21
- return 5n;
21
+ return 32n;
22
22
  }
23
23
 
24
24
  // Rinkeby
25
25
  if (networkId === 4) {
26
- return 5n;
26
+ return 32n;
27
27
  }
28
28
 
29
29
  // Ropsten
@@ -37,4 +37,4 @@ export function getLargestPossibleReorg(networkId: number): bigint | undefined {
37
37
  }
38
38
  }
39
39
 
40
- export const FALLBACK_MAX_REORG = 30n;
40
+ export const FALLBACK_MAX_REORG = 128n;
@@ -0,0 +1,101 @@
1
+ import { ExceptionalHalt, SuccessReason } from "@nomicfoundation/edr";
2
+
3
+ export enum ExitCode {
4
+ SUCCESS,
5
+ REVERT,
6
+ OUT_OF_GAS,
7
+ INTERNAL_ERROR,
8
+ INVALID_OPCODE,
9
+ STACK_UNDERFLOW,
10
+ CODESIZE_EXCEEDS_MAXIMUM,
11
+ CREATE_COLLISION,
12
+ STATIC_STATE_CHANGE,
13
+ }
14
+
15
+ export class Exit {
16
+ public static fromEdrSuccessReason(reason: SuccessReason): Exit {
17
+ switch (reason) {
18
+ case SuccessReason.Stop:
19
+ case SuccessReason.Return:
20
+ case SuccessReason.SelfDestruct:
21
+ return new Exit(ExitCode.SUCCESS);
22
+ }
23
+
24
+ const _exhaustiveCheck: never = reason;
25
+ }
26
+
27
+ public static fromEdrExceptionalHalt(halt: ExceptionalHalt): Exit {
28
+ switch (halt) {
29
+ case ExceptionalHalt.OutOfGas:
30
+ return new Exit(ExitCode.OUT_OF_GAS);
31
+
32
+ case ExceptionalHalt.OpcodeNotFound:
33
+ case ExceptionalHalt.InvalidFEOpcode:
34
+ // Returned when an opcode is not implemented for the hardfork
35
+ case ExceptionalHalt.NotActivated:
36
+ return new Exit(ExitCode.INVALID_OPCODE);
37
+
38
+ case ExceptionalHalt.StackUnderflow:
39
+ return new Exit(ExitCode.STACK_UNDERFLOW);
40
+
41
+ case ExceptionalHalt.CreateCollision:
42
+ return new Exit(ExitCode.CREATE_COLLISION);
43
+
44
+ case ExceptionalHalt.CreateContractSizeLimit:
45
+ return new Exit(ExitCode.CODESIZE_EXCEEDS_MAXIMUM);
46
+
47
+ default: {
48
+ // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error
49
+ throw new Error(`Unmatched EDR exceptional halt: ${halt}`);
50
+ }
51
+ }
52
+ }
53
+
54
+ constructor(public kind: ExitCode) {}
55
+
56
+ public isError(): boolean {
57
+ return this.kind !== ExitCode.SUCCESS;
58
+ }
59
+
60
+ public getReason(): string {
61
+ switch (this.kind) {
62
+ case ExitCode.SUCCESS:
63
+ return "Success";
64
+ case ExitCode.REVERT:
65
+ return "Reverted";
66
+ case ExitCode.OUT_OF_GAS:
67
+ return "Out of gas";
68
+ case ExitCode.INTERNAL_ERROR:
69
+ return "Internal error";
70
+ case ExitCode.INVALID_OPCODE:
71
+ return "Invalid opcode";
72
+ case ExitCode.STACK_UNDERFLOW:
73
+ return "Stack underflow";
74
+ case ExitCode.CODESIZE_EXCEEDS_MAXIMUM:
75
+ return "Codesize exceeds maximum";
76
+ case ExitCode.CREATE_COLLISION:
77
+ return "Create collision";
78
+ case ExitCode.STATIC_STATE_CHANGE:
79
+ return "Static state change";
80
+ }
81
+
82
+ const _exhaustiveCheck: never = this.kind;
83
+ }
84
+
85
+ public getEdrExceptionalHalt(): ExceptionalHalt {
86
+ switch (this.kind) {
87
+ case ExitCode.OUT_OF_GAS:
88
+ return ExceptionalHalt.OutOfGas;
89
+ case ExitCode.INVALID_OPCODE:
90
+ return ExceptionalHalt.OpcodeNotFound;
91
+ case ExitCode.CODESIZE_EXCEEDS_MAXIMUM:
92
+ return ExceptionalHalt.CreateContractSizeLimit;
93
+ case ExitCode.CREATE_COLLISION:
94
+ return ExceptionalHalt.CreateCollision;
95
+
96
+ default:
97
+ // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error
98
+ throw new Error(`Unmatched exit code: ${this.kind}`);
99
+ }
100
+ }
101
+ }
@@ -0,0 +1,101 @@
1
+ import type { Provider as EdrProviderT } from "@nomicfoundation/edr";
2
+ import type { Address } from "@nomicfoundation/ethereumjs-util";
3
+ import type {
4
+ MinimalEVMResult,
5
+ MinimalInterpreterStep,
6
+ MinimalMessage,
7
+ } from "./types";
8
+
9
+ import { AsyncEventEmitter } from "@nomicfoundation/ethereumjs-util";
10
+
11
+ /**
12
+ * Used by the provider to keep the `_vm` variable used by some plugins. This
13
+ * interface only has the things used by those plugins.
14
+ */
15
+ export interface MinimalEthereumJsVm {
16
+ evm: {
17
+ events: AsyncEventEmitter<MinimalEthereumJsVmEvents>;
18
+ };
19
+ stateManager: {
20
+ putContractCode: (address: Address, code: Buffer) => Promise<void>;
21
+ getContractStorage: (address: Address, slotHash: Buffer) => Promise<Buffer>;
22
+ putContractStorage: (
23
+ address: Address,
24
+ slotHash: Buffer,
25
+ slotValue: Buffer
26
+ ) => Promise<void>;
27
+ };
28
+ }
29
+
30
+ // we need to use a type instead of an interface to satisfy the type constarint
31
+ // of the AsyncEventEmitter type param
32
+ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
33
+ type MinimalEthereumJsVmEvents = {
34
+ beforeMessage: (
35
+ data: MinimalMessage,
36
+ resolve?: (result?: any) => void
37
+ ) => void;
38
+ afterMessage: (
39
+ data: MinimalEVMResult,
40
+ resolve?: (result?: any) => void
41
+ ) => void;
42
+ step: (
43
+ data: MinimalInterpreterStep,
44
+ resolve?: (result?: any) => void
45
+ ) => void;
46
+ };
47
+
48
+ export class MinimalEthereumJsVmEventEmitter extends AsyncEventEmitter<MinimalEthereumJsVmEvents> {}
49
+
50
+ export function getMinimalEthereumJsVm(
51
+ provider: EdrProviderT
52
+ ): MinimalEthereumJsVm {
53
+ const minimalEthereumJsVm: MinimalEthereumJsVm = {
54
+ evm: {
55
+ events: new MinimalEthereumJsVmEventEmitter(),
56
+ },
57
+ stateManager: {
58
+ putContractCode: async (address: Address, code: Buffer) => {
59
+ await provider.handleRequest(
60
+ JSON.stringify({
61
+ method: "hardhat_setCode",
62
+ params: [`0x${address.toString()}`, `0x${code.toString("hex")}`],
63
+ })
64
+ );
65
+ },
66
+ getContractStorage: async (address: Address, slotHash: Buffer) => {
67
+ const responseObject = await provider.handleRequest(
68
+ JSON.stringify({
69
+ method: "eth_getStorageAt",
70
+ params: [
71
+ `0x${address.toString()}`,
72
+ `0x${slotHash.toString("hex")}`,
73
+ ],
74
+ })
75
+ );
76
+
77
+ const response = JSON.parse(responseObject.json);
78
+
79
+ return Buffer.from(response.result.slice(2), "hex");
80
+ },
81
+ putContractStorage: async (
82
+ address: Address,
83
+ slotHash: Buffer,
84
+ slotValue: Buffer
85
+ ) => {
86
+ await provider.handleRequest(
87
+ JSON.stringify({
88
+ method: "hardhat_setStorageAt",
89
+ params: [
90
+ `0x${address.toString()}`,
91
+ `0x${slotHash.toString("hex")}`,
92
+ `0x${slotValue.toString("hex")}`,
93
+ ],
94
+ })
95
+ );
96
+ },
97
+ },
98
+ };
99
+
100
+ return minimalEthereumJsVm;
101
+ }
@@ -0,0 +1,31 @@
1
+ import type { Address } from "@nomicfoundation/ethereumjs-util";
2
+
3
+ /**
4
+ * These types are minimal versions of the values returned by ethereumjs
5
+ * in the event listeners.
6
+ */
7
+
8
+ export interface MinimalInterpreterStep {
9
+ pc: number;
10
+ depth: number;
11
+ opcode: {
12
+ name: string;
13
+ };
14
+ stack: bigint[];
15
+ }
16
+
17
+ export interface MinimalExecResult {
18
+ executionGasUsed: bigint;
19
+ }
20
+
21
+ export interface MinimalEVMResult {
22
+ execResult: MinimalExecResult;
23
+ }
24
+
25
+ export interface MinimalMessage {
26
+ to?: Address;
27
+ value: bigint;
28
+ data: Uint8Array;
29
+ caller: Address;
30
+ gasLimit: bigint;
31
+ }