hardhat 2.10.1 → 2.11.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 (440) hide show
  1. package/README.md +1 -1
  2. package/builtin-tasks/compile.js +6 -8
  3. package/builtin-tasks/compile.js.map +1 -1
  4. package/builtin-tasks/node.js +9 -12
  5. package/builtin-tasks/node.js.map +1 -1
  6. package/builtin-tasks/test.js +2 -3
  7. package/builtin-tasks/test.js.map +1 -1
  8. package/console.sol +444 -444
  9. package/internal/artifacts.js +1 -1
  10. package/internal/artifacts.js.map +1 -1
  11. package/internal/cli/ArgumentsParser.js +5 -2
  12. package/internal/cli/ArgumentsParser.js.map +1 -1
  13. package/internal/cli/analytics.js +2 -2
  14. package/internal/cli/analytics.js.map +1 -1
  15. package/internal/cli/autocomplete.js +20 -32
  16. package/internal/cli/autocomplete.js.map +1 -1
  17. package/internal/cli/cli.js +1 -1
  18. package/internal/cli/cli.js.map +1 -1
  19. package/internal/cli/project-creation.js +14 -4
  20. package/internal/cli/project-creation.js.map +1 -1
  21. package/internal/constants.d.ts.map +1 -1
  22. package/internal/constants.js +2 -0
  23. package/internal/constants.js.map +1 -1
  24. package/internal/core/config/config-loading.js +2 -3
  25. package/internal/core/config/config-loading.js.map +1 -1
  26. package/internal/core/config/config-resolution.d.ts.map +1 -1
  27. package/internal/core/config/config-resolution.js +84 -35
  28. package/internal/core/config/config-resolution.js.map +1 -1
  29. package/internal/core/config/config-validation.js +38 -20
  30. package/internal/core/config/config-validation.js.map +1 -1
  31. package/internal/core/config/default-config.d.ts.map +1 -1
  32. package/internal/core/config/default-config.js +17 -4
  33. package/internal/core/config/default-config.js.map +1 -1
  34. package/internal/core/errors.js +4 -2
  35. package/internal/core/errors.js.map +1 -1
  36. package/internal/core/execution-mode.js +2 -2
  37. package/internal/core/execution-mode.js.map +1 -1
  38. package/internal/core/flamegraph.d.ts +10 -0
  39. package/internal/core/flamegraph.d.ts.map +1 -0
  40. package/internal/core/flamegraph.js +245 -0
  41. package/internal/core/flamegraph.js.map +1 -0
  42. package/internal/core/jsonrpc/types/base-types.d.ts +7 -8
  43. package/internal/core/jsonrpc/types/base-types.d.ts.map +1 -1
  44. package/internal/core/jsonrpc/types/base-types.js +24 -24
  45. package/internal/core/jsonrpc/types/base-types.js.map +1 -1
  46. package/internal/core/jsonrpc/types/input/blockTag.d.ts +15 -10
  47. package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -1
  48. package/internal/core/jsonrpc/types/input/blockTag.js +2 -0
  49. package/internal/core/jsonrpc/types/input/blockTag.js.map +1 -1
  50. package/internal/core/jsonrpc/types/input/callRequest.d.ts +5 -6
  51. package/internal/core/jsonrpc/types/input/callRequest.d.ts.map +1 -1
  52. package/internal/core/jsonrpc/types/input/callRequest.js.map +1 -1
  53. package/internal/core/jsonrpc/types/input/filterRequest.d.ts +6 -7
  54. package/internal/core/jsonrpc/types/input/filterRequest.d.ts.map +1 -1
  55. package/internal/core/jsonrpc/types/input/filterRequest.js.map +1 -1
  56. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts +7 -8
  57. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts.map +1 -1
  58. package/internal/core/jsonrpc/types/input/transactionRequest.js.map +1 -1
  59. package/internal/core/jsonrpc/types/output/block.d.ts +29 -30
  60. package/internal/core/jsonrpc/types/output/block.d.ts.map +1 -1
  61. package/internal/core/jsonrpc/types/output/block.js +8 -2
  62. package/internal/core/jsonrpc/types/output/block.js.map +1 -1
  63. package/internal/core/jsonrpc/types/output/log.d.ts +3 -4
  64. package/internal/core/jsonrpc/types/output/log.d.ts.map +1 -1
  65. package/internal/core/jsonrpc/types/output/log.js.map +1 -1
  66. package/internal/core/jsonrpc/types/output/receipt.d.ts +10 -11
  67. package/internal/core/jsonrpc/types/output/receipt.d.ts.map +1 -1
  68. package/internal/core/jsonrpc/types/output/receipt.js.map +1 -1
  69. package/internal/core/jsonrpc/types/output/transaction.d.ts +13 -14
  70. package/internal/core/jsonrpc/types/output/transaction.d.ts.map +1 -1
  71. package/internal/core/jsonrpc/types/output/transaction.js.map +1 -1
  72. package/internal/core/providers/accounts.d.ts.map +1 -1
  73. package/internal/core/providers/accounts.js +30 -24
  74. package/internal/core/providers/accounts.js.map +1 -1
  75. package/internal/core/providers/chainId.js +1 -1
  76. package/internal/core/providers/chainId.js.map +1 -1
  77. package/internal/core/providers/construction.d.ts.map +1 -1
  78. package/internal/core/providers/construction.js +5 -5
  79. package/internal/core/providers/construction.js.map +1 -1
  80. package/internal/core/providers/gas-providers.d.ts +4 -4
  81. package/internal/core/providers/gas-providers.d.ts.map +1 -1
  82. package/internal/core/providers/gas-providers.js +16 -15
  83. package/internal/core/providers/gas-providers.js.map +1 -1
  84. package/internal/core/providers/http.js +7 -2
  85. package/internal/core/providers/http.js.map +1 -1
  86. package/internal/core/providers/util.js +5 -8
  87. package/internal/core/providers/util.js.map +1 -1
  88. package/internal/core/runtime-environment.js +1 -1
  89. package/internal/core/runtime-environment.js.map +1 -1
  90. package/internal/core/task-profiling.d.ts +18 -0
  91. package/internal/core/task-profiling.d.ts.map +1 -0
  92. package/internal/core/task-profiling.js +50 -0
  93. package/internal/core/task-profiling.js.map +1 -0
  94. package/internal/core/typescript-support.js +3 -3
  95. package/internal/core/typescript-support.js.map +1 -1
  96. package/internal/hardhat-network/jsonrpc/client.d.ts +39 -39
  97. package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
  98. package/internal/hardhat-network/jsonrpc/client.js +14 -14
  99. package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
  100. package/internal/hardhat-network/provider/BlockchainBase.d.ts +13 -10
  101. package/internal/hardhat-network/provider/BlockchainBase.d.ts.map +1 -1
  102. package/internal/hardhat-network/provider/BlockchainBase.js +38 -16
  103. package/internal/hardhat-network/provider/BlockchainBase.js.map +1 -1
  104. package/internal/hardhat-network/provider/BlockchainData.d.ts +15 -16
  105. package/internal/hardhat-network/provider/BlockchainData.d.ts.map +1 -1
  106. package/internal/hardhat-network/provider/BlockchainData.js +33 -29
  107. package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
  108. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts +7 -8
  109. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts.map +1 -1
  110. package/internal/hardhat-network/provider/HardhatBlockchain.js +13 -14
  111. package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
  112. package/internal/hardhat-network/provider/PoolState.d.ts +1 -1
  113. package/internal/hardhat-network/provider/PoolState.d.ts.map +1 -1
  114. package/internal/hardhat-network/provider/PoolState.js +2 -3
  115. package/internal/hardhat-network/provider/PoolState.js.map +1 -1
  116. package/internal/hardhat-network/provider/TransactionQueue.d.ts +2 -3
  117. package/internal/hardhat-network/provider/TransactionQueue.d.ts.map +1 -1
  118. package/internal/hardhat-network/provider/TransactionQueue.js +3 -3
  119. package/internal/hardhat-network/provider/TransactionQueue.js.map +1 -1
  120. package/internal/hardhat-network/provider/TxPool.d.ts +8 -8
  121. package/internal/hardhat-network/provider/TxPool.d.ts.map +1 -1
  122. package/internal/hardhat-network/provider/TxPool.js +66 -68
  123. package/internal/hardhat-network/provider/TxPool.js.map +1 -1
  124. package/internal/hardhat-network/provider/ethereumjs-workarounds.js +2 -2
  125. package/internal/hardhat-network/provider/ethereumjs-workarounds.js.map +1 -1
  126. package/internal/hardhat-network/provider/filter.d.ts +5 -6
  127. package/internal/hardhat-network/provider/filter.d.ts.map +1 -1
  128. package/internal/hardhat-network/provider/filter.js +7 -8
  129. package/internal/hardhat-network/provider/filter.js.map +1 -1
  130. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts +10 -11
  131. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -1
  132. package/internal/hardhat-network/provider/fork/ForkBlockchain.js +51 -47
  133. package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
  134. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts +8 -10
  135. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts.map +1 -1
  136. package/internal/hardhat-network/provider/fork/ForkStateManager.js +51 -69
  137. package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
  138. package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts +1 -1
  139. package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts.map +1 -1
  140. package/internal/hardhat-network/provider/fork/rpcToBlockData.js +2 -3
  141. package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -1
  142. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts +2 -2
  143. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts.map +1 -1
  144. package/internal/hardhat-network/provider/fork/rpcToTxData.js +7 -11
  145. package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -1
  146. package/internal/hardhat-network/provider/modules/eth.d.ts +2 -1
  147. package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
  148. package/internal/hardhat-network/provider/modules/eth.js +92 -68
  149. package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
  150. package/internal/hardhat-network/provider/modules/evm.d.ts.map +1 -1
  151. package/internal/hardhat-network/provider/modules/evm.js +14 -14
  152. package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
  153. package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -1
  154. package/internal/hardhat-network/provider/modules/hardhat.js +13 -13
  155. package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
  156. package/internal/hardhat-network/provider/modules/logger.d.ts +7 -8
  157. package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
  158. package/internal/hardhat-network/provider/modules/logger.js +29 -32
  159. package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
  160. package/internal/hardhat-network/provider/modules/net.d.ts +1 -1
  161. package/internal/hardhat-network/provider/modules/net.d.ts.map +1 -1
  162. package/internal/hardhat-network/provider/modules/personal.d.ts.map +1 -1
  163. package/internal/hardhat-network/provider/modules/personal.js +3 -3
  164. package/internal/hardhat-network/provider/modules/personal.js.map +1 -1
  165. package/internal/hardhat-network/provider/modules/web3.d.ts.map +1 -1
  166. package/internal/hardhat-network/provider/modules/web3.js +5 -4
  167. package/internal/hardhat-network/provider/modules/web3.js.map +1 -1
  168. package/internal/hardhat-network/provider/node-types.d.ts +30 -29
  169. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
  170. package/internal/hardhat-network/provider/node.d.ts +47 -42
  171. package/internal/hardhat-network/provider/node.d.ts.map +1 -1
  172. package/internal/hardhat-network/provider/node.js +262 -208
  173. package/internal/hardhat-network/provider/node.js.map +1 -1
  174. package/internal/hardhat-network/provider/output.d.ts +5 -6
  175. package/internal/hardhat-network/provider/output.d.ts.map +1 -1
  176. package/internal/hardhat-network/provider/output.js +39 -36
  177. package/internal/hardhat-network/provider/output.js.map +1 -1
  178. package/internal/hardhat-network/provider/provider.d.ts +1 -2
  179. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  180. package/internal/hardhat-network/provider/provider.js.map +1 -1
  181. package/internal/hardhat-network/provider/return-data.d.ts +2 -2
  182. package/internal/hardhat-network/provider/return-data.d.ts.map +1 -1
  183. package/internal/hardhat-network/provider/return-data.js +4 -1
  184. package/internal/hardhat-network/provider/return-data.js.map +1 -1
  185. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts +5 -5
  186. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
  187. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +60 -17
  188. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
  189. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts +4 -4
  190. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
  191. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +59 -16
  192. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
  193. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts +3 -3
  194. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
  195. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +41 -9
  196. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
  197. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts +4 -4
  198. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts.map +1 -1
  199. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +7 -23
  200. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
  201. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts +3 -3
  202. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts.map +1 -1
  203. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js +7 -22
  204. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js.map +1 -1
  205. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts +3 -3
  206. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts.map +1 -1
  207. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js +1 -1
  208. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js.map +1 -1
  209. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts +5 -6
  210. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts.map +1 -1
  211. package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js +2 -3
  212. package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js.map +1 -1
  213. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.d.ts +1 -0
  214. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.d.ts.map +1 -1
  215. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.js +5 -1
  216. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.js.map +1 -1
  217. package/internal/hardhat-network/provider/utils/makeAccount.d.ts +1 -1
  218. package/internal/hardhat-network/provider/utils/makeAccount.d.ts.map +1 -1
  219. package/internal/hardhat-network/provider/utils/makeAccount.js +6 -6
  220. package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -1
  221. package/internal/hardhat-network/provider/utils/makeCommon.d.ts +2 -2
  222. package/internal/hardhat-network/provider/utils/makeCommon.d.ts.map +1 -1
  223. package/internal/hardhat-network/provider/utils/makeCommon.js +7 -23
  224. package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
  225. package/internal/hardhat-network/provider/utils/makeForkClient.d.ts +1 -2
  226. package/internal/hardhat-network/provider/utils/makeForkClient.d.ts.map +1 -1
  227. package/internal/hardhat-network/provider/utils/makeForkClient.js +7 -8
  228. package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -1
  229. package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts +1 -1
  230. package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts.map +1 -1
  231. package/internal/hardhat-network/provider/utils/makeStateTrie.js +4 -4
  232. package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
  233. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +6 -3
  234. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
  235. package/internal/hardhat-network/provider/utils/putGenesisBlock.js +22 -4
  236. package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
  237. package/internal/hardhat-network/provider/utils/random.d.ts +15 -0
  238. package/internal/hardhat-network/provider/utils/random.d.ts.map +1 -0
  239. package/internal/hardhat-network/provider/utils/random.js +48 -0
  240. package/internal/hardhat-network/provider/utils/random.js.map +1 -0
  241. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.d.ts +1 -2
  242. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.d.ts.map +1 -1
  243. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js +5 -4
  244. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js.map +1 -1
  245. package/internal/hardhat-network/provider/utils/reorgs-protection.d.ts +2 -2
  246. package/internal/hardhat-network/provider/utils/reorgs-protection.d.ts.map +1 -1
  247. package/internal/hardhat-network/provider/utils/reorgs-protection.js +7 -7
  248. package/internal/hardhat-network/provider/utils/reorgs-protection.js.map +1 -1
  249. package/internal/hardhat-network/provider/utils/txMapToArray.d.ts +1 -1
  250. package/internal/hardhat-network/provider/utils/txMapToArray.d.ts.map +1 -1
  251. package/internal/hardhat-network/stack-traces/compiler-to-model.js +6 -8
  252. package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
  253. package/internal/hardhat-network/stack-traces/consoleLogger.d.ts.map +1 -1
  254. package/internal/hardhat-network/stack-traces/consoleLogger.js +51 -47
  255. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  256. package/internal/hardhat-network/stack-traces/constants.d.ts +3 -0
  257. package/internal/hardhat-network/stack-traces/constants.d.ts.map +1 -0
  258. package/internal/hardhat-network/stack-traces/constants.js +6 -0
  259. package/internal/hardhat-network/stack-traces/constants.js.map +1 -0
  260. package/internal/hardhat-network/stack-traces/contracts-identifier.js +2 -2
  261. package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
  262. package/internal/hardhat-network/stack-traces/debug.js +29 -19
  263. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  264. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +1 -1
  265. package/internal/hardhat-network/stack-traces/error-inferrer.js +48 -26
  266. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
  267. package/internal/hardhat-network/stack-traces/logger.d.ts +223 -2
  268. package/internal/hardhat-network/stack-traces/logger.d.ts.map +1 -1
  269. package/internal/hardhat-network/stack-traces/logger.js +445 -224
  270. package/internal/hardhat-network/stack-traces/logger.js.map +1 -1
  271. package/internal/hardhat-network/stack-traces/message-trace.d.ts +6 -7
  272. package/internal/hardhat-network/stack-traces/message-trace.d.ts.map +1 -1
  273. package/internal/hardhat-network/stack-traces/message-trace.js.map +1 -1
  274. package/internal/hardhat-network/stack-traces/model.js +6 -6
  275. package/internal/hardhat-network/stack-traces/model.js.map +1 -1
  276. package/internal/hardhat-network/stack-traces/panic-errors.d.ts +1 -2
  277. package/internal/hardhat-network/stack-traces/panic-errors.d.ts.map +1 -1
  278. package/internal/hardhat-network/stack-traces/panic-errors.js +1 -1
  279. package/internal/hardhat-network/stack-traces/panic-errors.js.map +1 -1
  280. package/internal/hardhat-network/stack-traces/solidity-errors.d.ts.map +1 -1
  281. package/internal/hardhat-network/stack-traces/solidity-errors.js +21 -12
  282. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  283. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +6 -5
  284. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -1
  285. package/internal/hardhat-network/stack-traces/solidity-stack-trace.js.map +1 -1
  286. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts +1 -1
  287. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
  288. package/internal/hardhat-network/stack-traces/solidityTracer.js +5 -1
  289. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  290. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts +2 -1
  291. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts.map +1 -1
  292. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +79 -78
  293. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
  294. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js +5 -1
  295. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js.map +1 -1
  296. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +3 -2
  297. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
  298. package/internal/hardhat-network/stack-traces/vm-tracer.js +15 -16
  299. package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
  300. package/internal/reset.js +1 -1
  301. package/internal/reset.js.map +1 -1
  302. package/internal/sentry/anonymizer.js +2 -3
  303. package/internal/sentry/anonymizer.js.map +1 -1
  304. package/internal/sentry/subprocess.js +1 -1
  305. package/internal/sentry/subprocess.js.map +1 -1
  306. package/internal/sentry/transport.js +3 -4
  307. package/internal/sentry/transport.js.map +1 -1
  308. package/internal/solidity/compilation-job.js +2 -4
  309. package/internal/solidity/compilation-job.js.map +1 -1
  310. package/internal/solidity/compiler/downloader.d.ts.map +1 -1
  311. package/internal/solidity/compiler/downloader.js +6 -6
  312. package/internal/solidity/compiler/downloader.js.map +1 -1
  313. package/internal/solidity/dependencyGraph.js +3 -5
  314. package/internal/solidity/dependencyGraph.js.map +1 -1
  315. package/internal/solidity/parse.js +1 -1
  316. package/internal/solidity/parse.js.map +1 -1
  317. package/internal/solidity/resolver.js +4 -1
  318. package/internal/solidity/resolver.js.map +1 -1
  319. package/internal/util/abi-helpers.js +1 -1
  320. package/internal/util/abi-helpers.js.map +1 -1
  321. package/internal/util/bigint.d.ts +25 -0
  322. package/internal/util/bigint.d.ts.map +1 -0
  323. package/internal/util/bigint.js +67 -0
  324. package/internal/util/bigint.js.map +1 -0
  325. package/internal/util/download.js +1 -1
  326. package/internal/util/download.js.map +1 -1
  327. package/internal/util/fs-utils.d.ts +32 -0
  328. package/internal/util/fs-utils.d.ts.map +1 -0
  329. package/internal/util/fs-utils.js +151 -0
  330. package/internal/util/fs-utils.js.map +1 -0
  331. package/internal/util/hardforks.d.ts +3 -3
  332. package/internal/util/hardforks.d.ts.map +1 -1
  333. package/internal/util/hardforks.js +5 -28
  334. package/internal/util/hardforks.js.map +1 -1
  335. package/internal/util/jsonrpc.js +1 -1
  336. package/internal/util/jsonrpc.js.map +1 -1
  337. package/internal/util/lazy.js +2 -2
  338. package/internal/util/lazy.js.map +1 -1
  339. package/internal/util/packageInfo.js +1 -1
  340. package/internal/util/packageInfo.js.map +1 -1
  341. package/internal/util/scripts-runner.js +5 -2
  342. package/internal/util/scripts-runner.js.map +1 -1
  343. package/internal/util/wei-values.d.ts +1 -2
  344. package/internal/util/wei-values.d.ts.map +1 -1
  345. package/internal/util/wei-values.js +9 -10
  346. package/internal/util/wei-values.js.map +1 -1
  347. package/internal/vendor/await-semaphore/index.d.ts +12 -0
  348. package/internal/vendor/await-semaphore/index.d.ts.map +1 -0
  349. package/internal/vendor/await-semaphore/index.js +64 -0
  350. package/internal/vendor/await-semaphore/index.js.map +1 -0
  351. package/package.json +13 -9
  352. package/profiling.d.ts +18 -0
  353. package/profiling.d.ts.map +1 -0
  354. package/profiling.js +32 -0
  355. package/profiling.js.map +1 -0
  356. package/sample-projects/javascript/scripts/deploy.js +3 -1
  357. package/sample-projects/javascript/test/Lock.js +1 -1
  358. package/sample-projects/typescript/scripts/deploy.ts +1 -1
  359. package/sample-projects/typescript/test/Lock.ts +1 -1
  360. package/src/builtin-tasks/node.ts +4 -6
  361. package/src/internal/constants.ts +3 -1
  362. package/src/internal/core/config/config-resolution.ts +30 -7
  363. package/src/internal/core/config/default-config.ts +12 -4
  364. package/src/internal/core/jsonrpc/types/base-types.ts +23 -24
  365. package/src/internal/core/jsonrpc/types/input/blockTag.ts +2 -4
  366. package/src/internal/core/jsonrpc/types/input/callRequest.ts +0 -4
  367. package/src/internal/core/jsonrpc/types/input/filterRequest.ts +0 -4
  368. package/src/internal/core/jsonrpc/types/input/transactionRequest.ts +0 -4
  369. package/src/internal/core/jsonrpc/types/output/block.ts +0 -4
  370. package/src/internal/core/jsonrpc/types/output/log.ts +0 -4
  371. package/src/internal/core/jsonrpc/types/output/receipt.ts +0 -4
  372. package/src/internal/core/jsonrpc/types/output/transaction.ts +0 -4
  373. package/src/internal/core/providers/accounts.ts +16 -26
  374. package/src/internal/core/providers/construction.ts +5 -3
  375. package/src/internal/core/providers/gas-providers.ts +25 -33
  376. package/src/internal/core/providers/util.ts +1 -1
  377. package/src/internal/hardhat-network/jsonrpc/client.ts +22 -22
  378. package/src/internal/hardhat-network/provider/BlockchainBase.ts +62 -25
  379. package/src/internal/hardhat-network/provider/BlockchainData.ts +39 -42
  380. package/src/internal/hardhat-network/provider/HardhatBlockchain.ts +21 -21
  381. package/src/internal/hardhat-network/provider/PoolState.ts +3 -4
  382. package/src/internal/hardhat-network/provider/TransactionQueue.ts +11 -8
  383. package/src/internal/hardhat-network/provider/TxPool.ts +62 -64
  384. package/src/internal/hardhat-network/provider/ethereumjs-workarounds.ts +3 -3
  385. package/src/internal/hardhat-network/provider/filter.ts +9 -12
  386. package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +52 -50
  387. package/src/internal/hardhat-network/provider/fork/ForkStateManager.ts +35 -60
  388. package/src/internal/hardhat-network/provider/fork/rpcToBlockData.ts +2 -2
  389. package/src/internal/hardhat-network/provider/fork/rpcToTxData.ts +3 -3
  390. package/src/internal/hardhat-network/provider/modules/eth.ts +88 -63
  391. package/src/internal/hardhat-network/provider/modules/evm.ts +19 -22
  392. package/src/internal/hardhat-network/provider/modules/hardhat.ts +21 -19
  393. package/src/internal/hardhat-network/provider/modules/logger.ts +33 -40
  394. package/src/internal/hardhat-network/provider/modules/net.ts +1 -1
  395. package/src/internal/hardhat-network/provider/modules/personal.ts +2 -1
  396. package/src/internal/hardhat-network/provider/modules/web3.ts +5 -4
  397. package/src/internal/hardhat-network/provider/node-types.ts +32 -31
  398. package/src/internal/hardhat-network/provider/node.ts +379 -343
  399. package/src/internal/hardhat-network/provider/output.ts +32 -37
  400. package/src/internal/hardhat-network/provider/provider.ts +5 -6
  401. package/src/internal/hardhat-network/provider/return-data.ts +6 -3
  402. package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +51 -24
  403. package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +50 -23
  404. package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +29 -11
  405. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +12 -24
  406. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.ts +11 -22
  407. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.ts +3 -3
  408. package/src/internal/hardhat-network/provider/types/HardhatBlockchainInterface.ts +8 -9
  409. package/src/internal/hardhat-network/provider/utils/getCurrentTimestamp.ts +4 -0
  410. package/src/internal/hardhat-network/provider/utils/makeAccount.ts +4 -10
  411. package/src/internal/hardhat-network/provider/utils/makeCommon.ts +8 -34
  412. package/src/internal/hardhat-network/provider/utils/makeForkClient.ts +8 -9
  413. package/src/internal/hardhat-network/provider/utils/makeStateTrie.ts +3 -3
  414. package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +34 -6
  415. package/src/internal/hardhat-network/provider/utils/random.ts +54 -0
  416. package/src/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.ts +6 -7
  417. package/src/internal/hardhat-network/provider/utils/reorgs-protection.ts +8 -8
  418. package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +16 -6
  419. package/src/internal/hardhat-network/stack-traces/contracts-identifier.ts +1 -1
  420. package/src/internal/hardhat-network/stack-traces/debug.ts +1 -1
  421. package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +11 -7
  422. package/src/internal/hardhat-network/stack-traces/logger.ts +444 -223
  423. package/src/internal/hardhat-network/stack-traces/message-trace.ts +6 -7
  424. package/src/internal/hardhat-network/stack-traces/model.ts +1 -1
  425. package/src/internal/hardhat-network/stack-traces/panic-errors.ts +3 -5
  426. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +16 -1
  427. package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +6 -6
  428. package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +6 -1
  429. package/src/internal/hardhat-network/stack-traces/vm-debug-tracer.ts +106 -103
  430. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +23 -18
  431. package/src/internal/solidity/compiler/downloader.ts +5 -2
  432. package/src/internal/util/bigint.ts +84 -0
  433. package/src/internal/util/hardforks.ts +4 -29
  434. package/src/internal/util/wei-values.ts +11 -13
  435. package/src/types/config.ts +8 -10
  436. package/types/config.d.ts +8 -9
  437. package/types/config.d.ts.map +1 -1
  438. package/src/internal/hardhat-network/provider/fork/random.ts +0 -33
  439. package/src/internal/hardhat-network/provider/utils/bnToHex.ts +0 -5
  440. package/src/internal/hardhat-network/provider/utils/makeForkCommon.ts +0 -15
@@ -1,5 +1,4 @@
1
- import type { VmError } from "@ethereumjs/vm/dist/exceptions";
2
- import type { BN } from "ethereumjs-util";
1
+ import type { EvmError } from "@ignored/evm";
3
2
 
4
3
  import type { Bytecode } from "./model";
5
4
 
@@ -15,10 +14,10 @@ export type DecodedEvmMessageTrace =
15
14
  | DecodedCallMessageTrace;
16
15
 
17
16
  export interface BaseMessageTrace {
18
- value: BN;
17
+ value: bigint;
19
18
  returnData: Buffer;
20
- error?: VmError;
21
- gasUsed: BN;
19
+ error?: EvmError;
20
+ gasUsed: bigint;
22
21
  depth: number;
23
22
  }
24
23
 
@@ -29,9 +28,9 @@ export interface PrecompileMessageTrace extends BaseMessageTrace {
29
28
 
30
29
  export interface BaseEvmMessageTrace extends BaseMessageTrace {
31
30
  code: Buffer;
32
- value: BN;
31
+ value: bigint;
33
32
  returnData: Buffer;
34
- error?: VmError;
33
+ error?: EvmError;
35
34
  steps: MessageTraceStep[];
36
35
  bytecode?: Bytecode;
37
36
  // The following is just an optimization: When processing this traces it's useful to know ahead of
@@ -1,4 +1,4 @@
1
- import { bufferToHex } from "ethereumjs-util";
1
+ import { bufferToHex } from "@ignored/util";
2
2
 
3
3
  import { AbiHelpers } from "../../util/abi-helpers";
4
4
 
@@ -1,6 +1,4 @@
1
- import { BN } from "ethereumjs-util";
2
-
3
- export function panicErrorCodeToMessage(errorCode: BN): string {
1
+ export function panicErrorCodeToMessage(errorCode: number): string {
4
2
  const reason = panicErrorCodeToReason(errorCode);
5
3
 
6
4
  if (reason !== undefined) {
@@ -10,8 +8,8 @@ export function panicErrorCodeToMessage(errorCode: BN): string {
10
8
  return `reverted with unknown panic code 0x${errorCode.toString(16)}`;
11
9
  }
12
10
 
13
- function panicErrorCodeToReason(errorCode: BN): string | undefined {
14
- switch (errorCode.toNumber()) {
11
+ function panicErrorCodeToReason(errorCode: number): string | undefined {
12
+ switch (errorCode) {
15
13
  case 0x1:
16
14
  return "Assertion error";
17
15
  case 0x11:
@@ -1,4 +1,4 @@
1
- import { bufferToHex } from "ethereumjs-util";
1
+ import { bufferToHex } from "@ignored/util";
2
2
 
3
3
  import { panicErrorCodeToMessage } from "./panic-errors";
4
4
  import {
@@ -263,6 +263,21 @@ function getMessageFromLastStackTraceEntry(
263
263
  return `VM Exception while processing transaction: reverted with reason string '${stackTraceEntry.message.decodeError()}'`;
264
264
  }
265
265
 
266
+ if (stackTraceEntry.message.isPanicReturnData()) {
267
+ const message = panicErrorCodeToMessage(
268
+ stackTraceEntry.message.decodePanic()
269
+ );
270
+ return `VM Exception while processing transaction: ${message}`;
271
+ }
272
+
273
+ if (!stackTraceEntry.message.isEmpty()) {
274
+ return `VM Exception while processing transaction: reverted with an unrecognized custom error`;
275
+ }
276
+
277
+ if (stackTraceEntry.isInvalidOpcodeError) {
278
+ return "VM Exception while processing transaction: invalid opcode";
279
+ }
280
+
266
281
  return "Transaction reverted without a reason string";
267
282
 
268
283
  case StackTraceEntryType.REVERT_ERROR:
@@ -1,5 +1,3 @@
1
- import { BN } from "ethereumjs-util";
2
-
3
1
  import { ReturnData } from "../provider/return-data";
4
2
 
5
3
  import { ContractFunctionType } from "./model";
@@ -82,7 +80,7 @@ export interface RevertErrorStackTraceEntry {
82
80
 
83
81
  export interface PanicErrorStackTraceEntry {
84
82
  type: StackTraceEntryType.PANIC_ERROR;
85
- errorCode: BN;
83
+ errorCode: number;
86
84
  sourceReference: SourceReference;
87
85
  }
88
86
 
@@ -100,7 +98,7 @@ export interface UnmappedSolc063RevertErrorStackTraceEntry {
100
98
 
101
99
  export interface FunctionNotPayableErrorStackTraceEntry {
102
100
  type: StackTraceEntryType.FUNCTION_NOT_PAYABLE_ERROR;
103
- value: BN;
101
+ value: bigint;
104
102
  sourceReference: SourceReference;
105
103
  }
106
104
 
@@ -111,13 +109,13 @@ export interface InvalidParamsErrorStackTraceEntry {
111
109
 
112
110
  export interface FallbackNotPayableErrorStackTraceEntry {
113
111
  type: StackTraceEntryType.FALLBACK_NOT_PAYABLE_ERROR;
114
- value: BN;
112
+ value: bigint;
115
113
  sourceReference: SourceReference;
116
114
  }
117
115
 
118
116
  export interface FallbackNotPayableAndNoReceiveErrorStackTraceEntry {
119
117
  type: StackTraceEntryType.FALLBACK_NOT_PAYABLE_AND_NO_RECEIVE_ERROR;
120
- value: BN;
118
+ value: bigint;
121
119
  sourceReference: SourceReference;
122
120
  }
123
121
 
@@ -155,6 +153,7 @@ export interface UnrecognizedCreateErrorStackTraceEntry {
155
153
  type: StackTraceEntryType.UNRECOGNIZED_CREATE_ERROR;
156
154
  message: ReturnData;
157
155
  sourceReference?: undefined;
156
+ isInvalidOpcodeError: boolean;
158
157
  }
159
158
 
160
159
  export interface UnrecognizedContractErrorStackTraceEntry {
@@ -162,6 +161,7 @@ export interface UnrecognizedContractErrorStackTraceEntry {
162
161
  address: Buffer;
163
162
  message: ReturnData;
164
163
  sourceReference?: undefined;
164
+ isInvalidOpcodeError: boolean;
165
165
  }
166
166
 
167
167
  export interface OtherExecutionErrorStackTraceEntry {
@@ -1,3 +1,4 @@
1
+ import { ERROR } from "@ignored/evm/dist/exceptions";
1
2
  import { ReturnData } from "../provider/return-data";
2
3
 
3
4
  import {
@@ -31,7 +32,7 @@ import {
31
32
  StackTraceEntryType,
32
33
  } from "./solidity-stack-trace";
33
34
 
34
- export const SUPPORTED_SOLIDITY_VERSION_RANGE = "<=0.8.9";
35
+ export const SUPPORTED_SOLIDITY_VERSION_RANGE = "<=0.8.16";
35
36
  export const FIRST_SOLC_VERSION_SUPPORTED = "0.5.1";
36
37
 
37
38
  export class SolidityTracer {
@@ -101,11 +102,14 @@ export class SolidityTracer {
101
102
  }
102
103
  }
103
104
 
105
+ const isInvalidOpcodeError = trace.error?.error === ERROR.INVALID_OPCODE;
106
+
104
107
  if (isCreateTrace(trace)) {
105
108
  return [
106
109
  {
107
110
  type: StackTraceEntryType.UNRECOGNIZED_CREATE_ERROR,
108
111
  message: new ReturnData(trace.returnData),
112
+ isInvalidOpcodeError,
109
113
  },
110
114
  ];
111
115
  }
@@ -115,6 +119,7 @@ export class SolidityTracer {
115
119
  type: StackTraceEntryType.UNRECOGNIZED_CONTRACT_ERROR,
116
120
  address: trace.address,
117
121
  message: new ReturnData(trace.returnData),
122
+ isInvalidOpcodeError,
118
123
  },
119
124
  ];
120
125
  }
@@ -1,18 +1,20 @@
1
- import { TypedTransaction } from "@ethereumjs/tx";
2
- import VM from "@ethereumjs/vm";
3
- import { EVMResult } from "@ethereumjs/vm/dist/evm/evm";
4
- import { InterpreterStep } from "@ethereumjs/vm/dist/evm/interpreter";
5
- import Message from "@ethereumjs/vm/dist/evm/message";
1
+ import { TypedTransaction } from "@ignored/tx";
2
+ import { AfterTxEvent, VM } from "@ignored/vm";
3
+ import { EVM, EVMResult } from "@ignored/evm";
4
+ import { InterpreterStep } from "@ignored/evm/dist/interpreter";
5
+ import { Message } from "@ignored/evm/dist/message";
6
6
  import {
7
- EIP2929StateManager,
8
- StateManager,
9
- } from "@ethereumjs/vm/dist/state/interface";
10
- import { Address, BN, setLengthLeft, toBuffer } from "ethereumjs-util";
7
+ Address,
8
+ bufferToBigInt,
9
+ setLengthLeft,
10
+ toBuffer,
11
+ } from "@ignored/util";
11
12
 
12
13
  import { assertHardhatInvariant } from "../../core/errors";
13
14
  import { RpcDebugTracingConfig } from "../../core/jsonrpc/types/input/debugTraceTransaction";
14
15
  import { InvalidInputError } from "../../core/providers/errors";
15
16
  import { RpcDebugTraceOutput, RpcStructLog } from "../provider/output";
17
+ import { BigIntUtils } from "../../util/bigint";
16
18
 
17
19
  /* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
18
20
 
@@ -54,6 +56,8 @@ export class VMDebugTracer {
54
56
  private _messages: DebugMessage[] = [];
55
57
  private _addressToStorage: Record<string, Storage> = {};
56
58
 
59
+ private _error: any;
60
+
57
61
  constructor(private readonly _vm: VM) {
58
62
  this._beforeMessageHandler = this._beforeMessageHandler.bind(this);
59
63
  this._afterMessageHandler = this._afterMessageHandler.bind(this);
@@ -75,6 +79,10 @@ export class VMDebugTracer {
75
79
 
76
80
  await action();
77
81
 
82
+ if (this._error !== undefined) {
83
+ throw this._error;
84
+ }
85
+
78
86
  return this._getDebugTrace();
79
87
  } finally {
80
88
  this._disableTracing();
@@ -83,19 +91,25 @@ export class VMDebugTracer {
83
91
 
84
92
  private _enableTracing(config: RpcDebugTracingConfig) {
85
93
  this._vm.on("beforeTx", this._beforeTxHandler);
86
- this._vm.on("beforeMessage", this._beforeMessageHandler);
87
- this._vm.on("step", this._stepHandler);
88
- this._vm.on("afterMessage", this._afterMessageHandler);
94
+ (this._vm.evm as EVM).on("beforeMessage", this._beforeMessageHandler);
95
+ (this._vm.evm as EVM).on("step", this._stepHandler);
96
+ (this._vm.evm as EVM).on("afterMessage", this._afterMessageHandler);
89
97
  this._vm.on("afterTx", this._afterTxHandler);
90
98
  this._config = config;
91
99
  }
92
100
 
93
101
  private _disableTracing() {
94
102
  this._vm.removeListener("beforeTx", this._beforeTxHandler);
95
- this._vm.removeListener("beforeMessage", this._beforeMessageHandler);
96
- this._vm.removeListener("step", this._stepHandler);
103
+ (this._vm.evm as EVM).removeListener(
104
+ "beforeMessage",
105
+ this._beforeMessageHandler
106
+ );
107
+ (this._vm.evm as EVM).removeListener("step", this._stepHandler);
108
+ (this._vm.evm as EVM).removeListener(
109
+ "afterMessage",
110
+ this._afterMessageHandler
111
+ );
97
112
  this._vm.removeListener("afterTx", this._afterTxHandler);
98
- this._vm.removeListener("afterMessage", this._afterMessageHandler);
99
113
  this._config = undefined;
100
114
  }
101
115
 
@@ -133,13 +147,20 @@ export class VMDebugTracer {
133
147
  }
134
148
 
135
149
  private async _stepHandler(step: InterpreterStep, next: any) {
136
- assertHardhatInvariant(
137
- this._messages.length > 0,
138
- "Step handler should be called after at least one beforeMessage handler"
139
- );
150
+ try {
151
+ assertHardhatInvariant(
152
+ this._messages.length > 0,
153
+ "Step handler should be called after at least one beforeMessage handler"
154
+ );
140
155
 
141
- const structLog = await this._stepToStructLog(step);
142
- this._messages[this._messages.length - 1].structLogs.push(structLog);
156
+ const structLog = await this._stepToStructLog(step);
157
+ this._messages[this._messages.length - 1].structLogs.push(structLog);
158
+ } catch (e: any) {
159
+ // errors thrown in event handlers are lost, so we save this error to
160
+ // re-throw it in the `trace` function
161
+ this._error = e;
162
+ this._disableTracing();
163
+ }
143
164
 
144
165
  next();
145
166
  }
@@ -156,7 +177,7 @@ export class VMDebugTracer {
156
177
  next();
157
178
  }
158
179
 
159
- private async _afterTxHandler(result: EVMResult, next: any) {
180
+ private async _afterTxHandler(result: AfterTxEvent, next: any) {
160
181
  const { default: flattenDeep } = await import("lodash/flattenDeep");
161
182
  const topLevelMessage = this._messages[0];
162
183
 
@@ -192,7 +213,7 @@ export class VMDebugTracer {
192
213
  }
193
214
 
194
215
  this._lastTrace = {
195
- gas: result.gasUsed.toNumber(),
216
+ gas: Number(result.totalGasSpent),
196
217
  failed: result.execResult.exceptionError !== undefined,
197
218
  returnValue: result.execResult.returnValue.toString("hex"),
198
219
  structLogs: rpcStructLogs,
@@ -289,7 +310,7 @@ export class VMDebugTracer {
289
310
  private _getStack(step: InterpreterStep): string[] {
290
311
  const stack = step.stack
291
312
  .slice()
292
- .map((el: BN) => el.toString("hex").padStart(64, "0"));
313
+ .map((el: bigint) => el.toString(16).padStart(64, "0"));
293
314
  return stack;
294
315
  }
295
316
 
@@ -320,26 +341,25 @@ export class VMDebugTracer {
320
341
  storage[key] = storageValue;
321
342
  } else if (step.opcode.name === "REVERT") {
322
343
  const [offsetBuffer, lengthBuffer] = this._getFromStack(stack, 2);
323
- const length = new BN(lengthBuffer);
324
- const offset = new BN(offsetBuffer);
344
+ const length = bufferToBigInt(lengthBuffer);
345
+ const offset = bufferToBigInt(offsetBuffer);
325
346
 
326
347
  const [gasIncrease, addedWords] = this._memoryExpansion(
327
- memory.length,
328
- length.add(offset)
348
+ BigInt(memory.length),
349
+ length + offset
329
350
  );
330
351
 
331
- gasCost += gasIncrease;
352
+ gasCost += Number(gasIncrease);
332
353
 
333
354
  for (let i = 0; i < addedWords; i++) {
334
355
  memory.push(EMPTY_MEMORY_WORD);
335
356
  }
336
357
  } else if (step.opcode.name === "CREATE2") {
337
358
  const [, , memoryUsedBuffer] = this._getFromStack(stack, 3);
338
- const memoryUsed = new BN(memoryUsedBuffer);
339
- const sha3ExtraCost = divUp(memoryUsed, 32)
340
- .muln(this._sha3WordGas())
341
- .toNumber();
342
- gasCost += sha3ExtraCost;
359
+ const memoryUsed = bufferToBigInt(memoryUsedBuffer);
360
+ const sha3ExtraCost =
361
+ BigIntUtils.divUp(memoryUsed, 32n) * this._sha3WordGas();
362
+ gasCost += Number(sha3ExtraCost);
343
363
  } else if (
344
364
  step.opcode.name === "CALL" ||
345
365
  step.opcode.name === "STATICCALL" ||
@@ -371,22 +391,22 @@ export class VMDebugTracer {
371
391
  ] = this._getFromStack(stack, 7);
372
392
  }
373
393
 
374
- const callCost = new BN(callCostBuffer);
394
+ const callCost = bufferToBigInt(callCostBuffer);
375
395
 
376
- const value = new BN(valueBuffer);
396
+ const value = bufferToBigInt(valueBuffer);
377
397
 
378
- const memoryLength = memory.length;
379
- const inBN = new BN(inBuffer);
380
- const inSizeBN = new BN(inSizeBuffer);
381
- const inPosition = inSizeBN.isZero() ? inSizeBN : inBN.add(inSizeBN);
382
- const outBN = new BN(outBuffer);
383
- const outSizeBN = new BN(outSizeBuffer);
384
- const outPosition = outSizeBN.isZero() ? outSizeBN : outBN.add(outSizeBN);
385
- const memSize = inPosition.gt(outPosition) ? inPosition : outPosition;
398
+ const memoryLength = BigInt(memory.length);
399
+ const inBN = bufferToBigInt(inBuffer);
400
+ const inSizeBN = bufferToBigInt(inSizeBuffer);
401
+ const inPosition = inSizeBN === 0n ? inSizeBN : inBN + inSizeBN;
402
+ const outBN = bufferToBigInt(outBuffer);
403
+ const outSizeBN = bufferToBigInt(outSizeBuffer);
404
+ const outPosition = outSizeBN === 0n ? outSizeBN : outBN + outSizeBN;
405
+ const memSize = inPosition > outPosition ? inPosition : outPosition;
386
406
  const toAddress = new Address(recipientAddressBuffer.slice(-20));
387
407
 
388
408
  const constantGas = this._callConstantGas();
389
- const availableGas = step.gasLeft.toNumber() - constantGas;
409
+ const availableGas = step.gasLeft - constantGas;
390
410
 
391
411
  const [memoryGas] = this._memoryExpansion(memoryLength, memSize);
392
412
 
@@ -398,7 +418,7 @@ export class VMDebugTracer {
398
418
  callCost
399
419
  );
400
420
 
401
- gasCost = constantGas + dynamicGas;
421
+ gasCost = Number(constantGas + dynamicGas);
402
422
  } else if (step.opcode.name === "CALLCODE") {
403
423
  // finding an existing tx that uses CALLCODE or compiling a contract
404
424
  // so that it uses this opcode is hard,
@@ -417,13 +437,13 @@ export class VMDebugTracer {
417
437
  const structLog: StructLog = {
418
438
  pc: step.pc,
419
439
  op,
420
- gas: step.gasLeft.toNumber(),
440
+ gas: Number(step.gasLeft),
421
441
  gasCost,
422
442
  depth: step.depth + 1,
423
443
  stack,
424
444
  memory,
425
445
  storage,
426
- memSize: step.memoryWordCount.toNumber(),
446
+ memSize: Number(step.memoryWordCount),
427
447
  };
428
448
 
429
449
  if (error !== undefined) {
@@ -433,15 +453,15 @@ export class VMDebugTracer {
433
453
  return structLog;
434
454
  }
435
455
 
436
- private _memoryGas(): number {
456
+ private _memoryGas(): bigint {
437
457
  return this._vm._common.param("gasPrices", "memory");
438
458
  }
439
459
 
440
- private _sha3WordGas(): number {
460
+ private _sha3WordGas(): bigint {
441
461
  return this._vm._common.param("gasPrices", "sha3Word");
442
462
  }
443
463
 
444
- private _callConstantGas(): number {
464
+ private _callConstantGas(): bigint {
445
465
  if (this._vm._common.gteHardfork("berlin")) {
446
466
  return this._vm._common.param("gasPrices", "warmstorageread");
447
467
  }
@@ -449,15 +469,15 @@ export class VMDebugTracer {
449
469
  return this._vm._common.param("gasPrices", "call");
450
470
  }
451
471
 
452
- private _callNewAccountGas(): number {
472
+ private _callNewAccountGas(): bigint {
453
473
  return this._vm._common.param("gasPrices", "callNewAccount");
454
474
  }
455
475
 
456
- private _callValueTransferGas(): number {
476
+ private _callValueTransferGas(): bigint {
457
477
  return this._vm._common.param("gasPrices", "callValueTransfer");
458
478
  }
459
479
 
460
- private _quadCoeffDiv(): number {
480
+ private _quadCoeffDiv(): bigint {
461
481
  return this._vm._common.param("gasPrices", "quadCoeffDiv");
462
482
  }
463
483
 
@@ -475,23 +495,14 @@ export class VMDebugTracer {
475
495
 
476
496
  private async _callDynamicGas(
477
497
  address: Address,
478
- value: BN,
479
- availableGas: number,
480
- memoryGas: number,
481
- callCost: BN
482
- ): Promise<number> {
498
+ value: bigint,
499
+ availableGas: bigint,
500
+ memoryGas: bigint,
501
+ callCost: bigint
502
+ ): Promise<bigint> {
483
503
  // The available gas is reduced when the address is cold
484
504
  if (this._vm._common.gteHardfork("berlin")) {
485
- const stateManager = this._vm.stateManager as
486
- | StateManager
487
- | EIP2929StateManager;
488
-
489
- assertHardhatInvariant(
490
- "isWarmedAddress" in stateManager,
491
- "The VM should have an EIP2929StateManger when berlin is enabled"
492
- );
493
-
494
- const isWarmed = stateManager.isWarmedAddress(address.toBuffer());
505
+ const isWarmed = this._vm.eei.isWarmedAddress(address.toBuffer());
495
506
 
496
507
  const coldCost =
497
508
  this._vm._common.param("gasPrices", "coldaccountaccess") -
@@ -505,9 +516,9 @@ export class VMDebugTracer {
505
516
  }
506
517
  }
507
518
 
508
- let gas = 0;
519
+ let gas = 0n;
509
520
 
510
- const transfersValue = !value.isZero();
521
+ const transfersValue = value !== 0n;
511
522
  const addressIsEmpty = await this._isAddressEmpty(address);
512
523
 
513
524
  if (transfersValue && addressIsEmpty) {
@@ -525,41 +536,45 @@ export class VMDebugTracer {
525
536
  return gas;
526
537
  }
527
538
 
528
- private _callGas(availableGas: number, base: number, callCost: BN): number {
539
+ private _callGas(
540
+ availableGas: bigint,
541
+ base: bigint,
542
+ callCost: bigint
543
+ ): bigint {
529
544
  availableGas -= base;
530
545
 
531
- const gas = availableGas - Math.floor(availableGas / 64);
546
+ const gas = availableGas - availableGas / 64n;
532
547
 
533
- if (callCost.gtn(gas)) {
548
+ if (callCost > gas) {
534
549
  return gas;
535
550
  }
536
551
 
537
- return callCost.toNumber();
552
+ return callCost;
538
553
  }
539
554
 
540
555
  /**
541
556
  * Returns the increase in gas and the number of added words
542
557
  */
543
558
  private _memoryExpansion(
544
- currentWords: number,
545
- newSize: BN
546
- ): [number, number] {
547
- const currentSize = new BN(currentWords).muln(32);
548
- const currentWordsLength = currentSize.addn(31).divn(32);
549
- const newWordsLength = newSize.addn(31).divn(32);
559
+ currentWords: bigint,
560
+ newSize: bigint
561
+ ): [bigint, bigint] {
562
+ const currentSize = currentWords * 32n;
563
+ const currentWordsLength = (currentSize + 31n) / 32n;
564
+ const newWordsLength = (newSize + 31n) / 32n;
550
565
 
551
- const wordsDiff = newWordsLength.sub(currentWordsLength);
566
+ const wordsDiff = newWordsLength - currentWordsLength;
552
567
 
553
- if (newSize.gt(currentSize)) {
568
+ if (newSize > currentSize) {
554
569
  const newTotalFee = this._memoryFee(newWordsLength);
555
570
  const currentTotalFee = this._memoryFee(currentWordsLength);
556
571
 
557
- const fee = newTotalFee.sub(currentTotalFee);
572
+ const fee = newTotalFee - currentTotalFee;
558
573
 
559
- return [fee.toNumber(), wordsDiff.toNumber()];
574
+ return [fee, wordsDiff];
560
575
  }
561
576
 
562
- return [0, 0];
577
+ return [0n, 0n];
563
578
  }
564
579
 
565
580
  private _getFromStack(stack: string[], count: number): Buffer[] {
@@ -570,28 +585,16 @@ export class VMDebugTracer {
570
585
  .map(toBuffer);
571
586
  }
572
587
 
573
- private _memoryFee(words: BN): BN {
574
- const square = words.mul(words);
575
- const linCoef = words.muln(this._memoryGas());
576
- const quadCoef = square.divn(this._quadCoeffDiv());
577
- const newTotalFee = linCoef.add(quadCoef);
588
+ private _memoryFee(words: bigint): bigint {
589
+ const square = words * words;
590
+ const linCoef = words * this._memoryGas();
591
+ const quadCoef = square / this._quadCoeffDiv();
592
+ const newTotalFee = linCoef + quadCoef;
578
593
 
579
594
  return newTotalFee;
580
595
  }
581
596
  }
582
597
 
583
- function divUp(x: BN, y: number | BN): BN {
584
- y = new BN(y);
585
-
586
- let result = x.div(y);
587
-
588
- if (!x.mod(y).eqn(0)) {
589
- result = result.addn(1);
590
- }
591
-
592
- return result;
593
- }
594
-
595
598
  function toWord(b: Buffer): string {
596
599
  return b.toString("hex").padStart(64, "0");
597
600
  }
@@ -1,9 +1,8 @@
1
- import VM from "@ethereumjs/vm";
2
- import { EVMResult } from "@ethereumjs/vm/dist/evm/evm";
3
- import { InterpreterStep } from "@ethereumjs/vm/dist/evm/interpreter";
4
- import Message from "@ethereumjs/vm/dist/evm/message";
5
- import { precompiles } from "@ethereumjs/vm/dist/evm/precompiles";
6
- import { Address, BN } from "ethereumjs-util";
1
+ import { EVM, EVMResult, getActivePrecompiles } from "@ignored/evm";
2
+ import { InterpreterStep } from "@ignored/evm/dist/interpreter";
3
+ import { Message } from "@ignored/evm/dist/message";
4
+ import { Address, bufferToBigInt } from "@ignored/util";
5
+ import { VM } from "@ignored/vm";
7
6
 
8
7
  import {
9
8
  CallMessageTrace,
@@ -16,14 +15,14 @@ import {
16
15
 
17
16
  /* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
18
17
 
19
- const MAX_PRECOMPILE_NUMBER = Object.keys(precompiles).length + 1;
20
18
  const DUMMY_RETURN_DATA = Buffer.from([]);
21
- const DUMMY_GAS_USED = new BN(0);
19
+ const DUMMY_GAS_USED = 0n;
22
20
 
23
21
  export class VMTracer {
24
22
  private _messageTraces: MessageTrace[] = [];
25
23
  private _enabled = false;
26
24
  private _lastError: Error | undefined;
25
+ private _maxPrecompileNumber = getActivePrecompiles(this._vm._common).size;
27
26
 
28
27
  constructor(
29
28
  private readonly _vm: VM,
@@ -39,9 +38,9 @@ export class VMTracer {
39
38
  if (this._enabled) {
40
39
  return;
41
40
  }
42
- this._vm.on("beforeMessage", this._beforeMessageHandler);
43
- this._vm.on("step", this._stepHandler);
44
- this._vm.on("afterMessage", this._afterMessageHandler);
41
+ (this._vm.evm as EVM).on("beforeMessage", this._beforeMessageHandler);
42
+ (this._vm.evm as EVM).on("step", this._stepHandler);
43
+ (this._vm.evm as EVM).on("afterMessage", this._afterMessageHandler);
45
44
  this._enabled = true;
46
45
  }
47
46
 
@@ -49,9 +48,15 @@ export class VMTracer {
49
48
  if (!this._enabled) {
50
49
  return;
51
50
  }
52
- this._vm.removeListener("beforeMessage", this._beforeMessageHandler);
53
- this._vm.removeListener("step", this._stepHandler);
54
- this._vm.removeListener("afterMessage", this._afterMessageHandler);
51
+ (this._vm.evm as EVM).removeListener(
52
+ "beforeMessage",
53
+ this._beforeMessageHandler
54
+ );
55
+ (this._vm.evm as EVM).removeListener("step", this._stepHandler);
56
+ (this._vm.evm as EVM).removeListener(
57
+ "afterMessage",
58
+ this._afterMessageHandler
59
+ );
55
60
  this._enabled = false;
56
61
  }
57
62
 
@@ -106,11 +111,11 @@ export class VMTracer {
106
111
 
107
112
  trace = createTrace;
108
113
  } else {
109
- const toAsBn = new BN(message.to.toBuffer());
114
+ const toAsNumber = bufferToBigInt(message.to.toBuffer());
110
115
 
111
- if (toAsBn.gtn(0) && toAsBn.lten(MAX_PRECOMPILE_NUMBER)) {
116
+ if (toAsNumber > 0 && toAsNumber <= this._maxPrecompileNumber) {
112
117
  const precompileTrace: PrecompileMessageTrace = {
113
- precompile: toAsBn.toNumber(),
118
+ precompile: Number(toAsNumber),
114
119
  calldata: message.data,
115
120
  value: message.value,
116
121
  returnData: DUMMY_RETURN_DATA,
@@ -204,7 +209,7 @@ export class VMTracer {
204
209
 
205
210
  trace.error = result.execResult.exceptionError;
206
211
  trace.returnData = result.execResult.returnValue;
207
- trace.gasUsed = result.gasUsed;
212
+ trace.gasUsed = result.execResult.executionGasUsed;
208
213
 
209
214
  if (isCreateTrace(trace)) {
210
215
  trace.deployedContract = result?.createdAddress?.toBuffer();