hardhat 2.20.1 → 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 -153
  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 -2999
  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
@@ -48,7 +48,6 @@ import {
48
48
  Uint256Ty,
49
49
  } from "./logger";
50
50
  import {
51
- CallMessageTrace,
52
51
  EvmMessageTrace,
53
52
  isCallTrace,
54
53
  isEvmStep,
@@ -77,18 +76,9 @@ export class ConsoleLogger {
77
76
  }
78
77
 
79
78
  public getLogMessages(maybeDecodedMessageTrace: MessageTrace): string[] {
80
- return this.getExecutionLogs(maybeDecodedMessageTrace).map((log) => {
81
- if (log === undefined) {
82
- return "";
83
- }
84
-
85
- // special case for console.log()
86
- if (log.length === 0) {
87
- return "";
88
- }
89
-
90
- return util.format(log[0], ...log.slice(1));
91
- });
79
+ return this.getExecutionLogs(maybeDecodedMessageTrace).map(
80
+ consoleLogToString
81
+ );
92
82
  }
93
83
 
94
84
  public getExecutionLogs(
@@ -113,7 +103,7 @@ export class ConsoleLogger {
113
103
  isCallTrace(messageTrace) &&
114
104
  bufferToHex(messageTrace.address) === CONSOLE_ADDRESS.toLowerCase()
115
105
  ) {
116
- const log = this._maybeConsoleLog(messageTrace);
106
+ const log = this._maybeConsoleLog(Buffer.from(messageTrace.calldata));
117
107
  if (log !== undefined) {
118
108
  logs.push(log);
119
109
  }
@@ -125,9 +115,25 @@ export class ConsoleLogger {
125
115
  }
126
116
  }
127
117
 
128
- private _maybeConsoleLog(call: CallMessageTrace): ConsoleLogs | undefined {
129
- const sig = bytesToInt(call.calldata.slice(0, 4));
130
- const parameters = call.calldata.slice(4);
118
+ /**
119
+ * Temporary code to print console.sol messages that come from EDR
120
+ */
121
+ public getDecodedLogs(messages: Buffer[]): string[] {
122
+ const logs: string[] = [];
123
+
124
+ for (const message of messages) {
125
+ const log = this._maybeConsoleLog(message);
126
+ if (log !== undefined) {
127
+ logs.push(consoleLogToString(log));
128
+ }
129
+ }
130
+
131
+ return logs;
132
+ }
133
+
134
+ private _maybeConsoleLog(calldata: Buffer): ConsoleLogs | undefined {
135
+ const sig = bytesToInt(calldata.slice(0, 4));
136
+ const parameters = calldata.slice(4);
131
137
 
132
138
  const types = this._consoleLogs[sig];
133
139
  if (types === undefined) {
@@ -162,7 +168,7 @@ export class ConsoleLogger {
162
168
  }
163
169
  }
164
170
 
165
- private _decode(data: Uint8Array, types: string[]): ConsoleLogs {
171
+ private _decode(data: Buffer, types: string[]): ConsoleLogs {
166
172
  return types.map((type, i) => {
167
173
  const position: number = i * 32;
168
174
  switch (types[i]) {
@@ -187,9 +193,9 @@ export class ConsoleLogger {
187
193
  data.slice(position, position + REGISTER_SIZE)
188
194
  );
189
195
  const sLen = bytesToInt(data.slice(sStart, sStart + REGISTER_SIZE));
190
- return Buffer.from(
191
- data.slice(sStart + REGISTER_SIZE, sStart + REGISTER_SIZE + sLen)
192
- ).toString();
196
+ return data
197
+ .slice(sStart + REGISTER_SIZE, sStart + REGISTER_SIZE + sLen)
198
+ .toString();
193
199
 
194
200
  case AddressTy:
195
201
  return bufferToHex(
@@ -276,3 +282,16 @@ export class ConsoleLogger {
276
282
  });
277
283
  }
278
284
  }
285
+
286
+ export function consoleLogToString(log: ConsoleLogs): string {
287
+ if (log === undefined) {
288
+ return "";
289
+ }
290
+
291
+ // special case for console.log()
292
+ if (log.length === 0) {
293
+ return "";
294
+ }
295
+
296
+ return util.format(log[0], ...log.slice(1));
297
+ }
@@ -1,11 +1,10 @@
1
- import { bytesToHex as bufferToHex } from "@nomicfoundation/ethereumjs-util";
1
+ import { bytesToHex } from "@nomicfoundation/ethereumjs-util";
2
2
 
3
3
  import {
4
4
  normalizeLibraryRuntimeBytecodeIfNecessary,
5
5
  zeroOutAddresses,
6
6
  zeroOutSlices,
7
7
  } from "./library-utils";
8
- import { EvmMessageTrace, isCreateTrace } from "./message-trace";
9
8
  import { Bytecode } from "./model";
10
9
  import { getOpcodeLength, Opcode } from "./opcodes";
11
10
 
@@ -100,16 +99,15 @@ export class ContractsIdentifier {
100
99
  this._cache.clear();
101
100
  }
102
101
 
103
- public getBytecodeFromMessageTrace(
104
- trace: EvmMessageTrace
102
+ public getBytecodeForCall(
103
+ code: Uint8Array,
104
+ isCreate: boolean
105
105
  ): Bytecode | undefined {
106
- const normalizedCode = normalizeLibraryRuntimeBytecodeIfNecessary(
107
- trace.code
108
- );
106
+ const normalizedCode = normalizeLibraryRuntimeBytecodeIfNecessary(code);
109
107
 
110
108
  let normalizedCodeHex: string | undefined;
111
109
  if (this._enableCache) {
112
- normalizedCodeHex = bufferToHex(normalizedCode);
110
+ normalizedCodeHex = bytesToHex(normalizedCode);
113
111
  const cached = this._cache.get(normalizedCodeHex);
114
112
 
115
113
  if (cached !== undefined) {
@@ -117,7 +115,7 @@ export class ContractsIdentifier {
117
115
  }
118
116
  }
119
117
 
120
- const result = this._searchBytecode(trace, normalizedCode);
118
+ const result = this._searchBytecode(isCreate, normalizedCode);
121
119
 
122
120
  if (this._enableCache) {
123
121
  if (result !== undefined) {
@@ -129,7 +127,7 @@ export class ContractsIdentifier {
129
127
  }
130
128
 
131
129
  private _searchBytecode(
132
- trace: EvmMessageTrace,
130
+ isCreate: boolean,
133
131
  code: Uint8Array,
134
132
  normalizeLibraries = true,
135
133
  trie = this._trie,
@@ -159,7 +157,7 @@ export class ContractsIdentifier {
159
157
  // We take advantage of this last observation, and just return the bytecode that exactly
160
158
  // matched the searchResult (sub)trie that we got.
161
159
  if (
162
- isCreateTrace(trace) &&
160
+ isCreate &&
163
161
  searchResult.match !== undefined &&
164
162
  searchResult.match.isDeployment
165
163
  ) {
@@ -186,7 +184,7 @@ export class ContractsIdentifier {
186
184
  );
187
185
 
188
186
  const normalizedResult = this._searchBytecode(
189
- trace,
187
+ isCreate,
190
188
  normalizedCode,
191
189
  false,
192
190
  searchResult,
@@ -58,8 +58,8 @@ export function printCreateTrace(trace: CreateMessageTrace, depth: number) {
58
58
  );
59
59
  }
60
60
 
61
- if (trace.error !== undefined) {
62
- console.log(`${margin} error: ${trace.error.error}`);
61
+ if (trace.exit.isError()) {
62
+ console.log(`${margin} error: ${trace.exit.getReason()}`);
63
63
 
64
64
  // The return data is the deployed-bytecode if there was no error, so we don't show it
65
65
  console.log(`${margin} returnData: ${bufferToHex(trace.returnData)}`);
@@ -79,8 +79,8 @@ export function printPrecompileTrace(
79
79
  console.log(`${margin} value: ${trace.value.toString(10)}`);
80
80
  console.log(`${margin} calldata: ${bufferToHex(trace.calldata)}`);
81
81
 
82
- if (trace.error !== undefined) {
83
- console.log(`${margin} error: ${trace.error.error}`);
82
+ if (trace.exit.isError()) {
83
+ console.log(`${margin} error: ${trace.exit.getReason()}`);
84
84
  }
85
85
 
86
86
  console.log(`${margin} returnData: ${bufferToHex(trace.returnData)}`);
@@ -104,8 +104,8 @@ export function printCallTrace(trace: CallMessageTrace, depth: number) {
104
104
  console.log(`${margin} value: ${trace.value.toString(10)}`);
105
105
  console.log(`${margin} calldata: ${bufferToHex(trace.calldata)}`);
106
106
 
107
- if (trace.error !== undefined) {
108
- console.log(`${margin} error: ${trace.error.error}`);
107
+ if (trace.exit.isError()) {
108
+ console.log(`${margin} error: ${trace.exit.getReason()}`);
109
109
  }
110
110
 
111
111
  console.log(`${margin} returnData: ${bufferToHex(trace.returnData)}`);
@@ -1,12 +1,12 @@
1
1
  /* eslint "@typescript-eslint/no-non-null-assertion": "error" */
2
2
  import { defaultAbiCoder as abi } from "@ethersproject/abi";
3
- import { ERROR } from "@nomicfoundation/ethereumjs-evm/dist/cjs/exceptions";
4
3
  import { equalsBytes } from "@nomicfoundation/ethereumjs-util";
5
4
  import semver from "semver";
6
5
 
7
6
  import { assertHardhatInvariant } from "../../core/errors";
8
7
  import { AbiHelpers } from "../../util/abi-helpers";
9
8
  import { ReturnData } from "../provider/return-data";
9
+ import { ExitCode } from "../provider/vm/exit";
10
10
 
11
11
  import {
12
12
  DecodedCallMessageTrace,
@@ -275,8 +275,7 @@ export class ErrorInferrer {
275
275
  callInst
276
276
  );
277
277
 
278
- const lastMessageFailed =
279
- lastSubmessageData.messageTrace.error !== undefined;
278
+ const lastMessageFailed = lastSubmessageData.messageTrace.exit.isError();
280
279
  if (lastMessageFailed) {
281
280
  // add the call/create that generated the message to the stack trace
282
281
  inferredStacktrace.push(callStackFrame);
@@ -579,6 +578,10 @@ export class ErrorInferrer {
579
578
  functionJumpdests: Instruction[],
580
579
  jumpedIntoFunction: boolean
581
580
  ): SolidityStackTrace | undefined {
581
+ if (trace.steps.length === 0) {
582
+ return;
583
+ }
584
+
582
585
  const lastStep = trace.steps[trace.steps.length - 1];
583
586
 
584
587
  if (!isEvmStep(lastStep)) {
@@ -1211,6 +1214,10 @@ export class ErrorInferrer {
1211
1214
  }
1212
1215
 
1213
1216
  private _solidity063MaybeUnmappedRevert(trace: DecodedEvmMessageTrace) {
1217
+ if (trace.steps.length === 0) {
1218
+ return false;
1219
+ }
1220
+
1214
1221
  const lastStep = trace.steps[trace.steps.length - 1];
1215
1222
  if (!isEvmStep(lastStep)) {
1216
1223
  return false;
@@ -1425,7 +1432,7 @@ export class ErrorInferrer {
1425
1432
  }
1426
1433
 
1427
1434
  private _isContractTooLargeError(trace: DecodedCreateMessageTrace) {
1428
- return trace.error?.error === ERROR.CODESIZE_EXCEEDS_MAXIMUM;
1435
+ return trace.exit.kind === ExitCode.CODESIZE_EXCEEDS_MAXIMUM;
1429
1436
  }
1430
1437
 
1431
1438
  private _solidity063CorrectLineNumber(
@@ -1629,8 +1636,8 @@ export class ErrorInferrer {
1629
1636
  }
1630
1637
 
1631
1638
  if (
1632
- trace.error?.error === ERROR.OUT_OF_GAS &&
1633
- call.error?.error === ERROR.OUT_OF_GAS
1639
+ trace.exit.kind === ExitCode.OUT_OF_GAS &&
1640
+ call.exit.kind === ExitCode.OUT_OF_GAS
1634
1641
  ) {
1635
1642
  return true;
1636
1643
  }
@@ -1719,12 +1726,12 @@ export class ErrorInferrer {
1719
1726
  return false;
1720
1727
  }
1721
1728
 
1722
- if (trace.error?.error !== ERROR.REVERT) {
1729
+ if (trace.exit.kind !== ExitCode.REVERT) {
1723
1730
  return false;
1724
1731
  }
1725
1732
 
1726
1733
  const call = trace.steps[callStepIndex] as MessageTrace;
1727
- if (call.error?.error !== ERROR.OUT_OF_GAS) {
1734
+ if (call.exit.kind !== ExitCode.OUT_OF_GAS) {
1728
1735
  return false;
1729
1736
  }
1730
1737
 
@@ -1,6 +1,12 @@
1
- import type { EvmError } from "@nomicfoundation/ethereumjs-evm";
2
-
3
1
  import type { Bytecode } from "./model";
2
+ import type { Exit } from "../provider/vm/exit";
3
+ import type {
4
+ CallOutput,
5
+ CreateOutput,
6
+ HaltResult,
7
+ RevertResult,
8
+ SuccessResult,
9
+ } from "@nomicfoundation/edr";
4
10
 
5
11
  export type MessageTrace =
6
12
  | CreateMessageTrace
@@ -16,7 +22,7 @@ export type DecodedEvmMessageTrace =
16
22
  export interface BaseMessageTrace {
17
23
  value: bigint;
18
24
  returnData: Uint8Array;
19
- error?: EvmError;
25
+ exit: Exit;
20
26
  gasUsed: bigint;
21
27
  depth: number;
22
28
  }
@@ -30,7 +36,6 @@ export interface BaseEvmMessageTrace extends BaseMessageTrace {
30
36
  code: Uint8Array;
31
37
  value: bigint;
32
38
  returnData: Uint8Array;
33
- error?: EvmError;
34
39
  steps: MessageTraceStep[];
35
40
  bytecode?: Bytecode;
36
41
  // The following is just an optimization: When processing this traces it's useful to know ahead of
@@ -93,3 +98,34 @@ export type MessageTraceStep = MessageTrace | EvmStep;
93
98
  export interface EvmStep {
94
99
  pc: number;
95
100
  }
101
+
102
+ export function isCallOutput(
103
+ output: CallOutput | CreateOutput
104
+ ): output is CallOutput {
105
+ return !isCreateOutput(output);
106
+ }
107
+
108
+ export function isCreateOutput(
109
+ output: CallOutput | CreateOutput
110
+ ): output is CreateOutput {
111
+ return "address" in output;
112
+ }
113
+
114
+ export function isSuccessResult(
115
+ result: SuccessResult | RevertResult | HaltResult
116
+ ): result is SuccessResult {
117
+ // Only need to check for one unique field
118
+ return "gasRefunded" in result;
119
+ }
120
+
121
+ export function isRevertResult(
122
+ result: SuccessResult | RevertResult | HaltResult
123
+ ): result is RevertResult {
124
+ return !("reason" in result);
125
+ }
126
+
127
+ export function isHaltResult(
128
+ result: SuccessResult | RevertResult | HaltResult
129
+ ): result is HaltResult {
130
+ return !("output" in result);
131
+ }
@@ -308,6 +308,49 @@ export class Instruction {
308
308
  public readonly pushData?: Buffer,
309
309
  public readonly location?: SourceLocation
310
310
  ) {}
311
+
312
+ /**
313
+ * Checks equality with another Instruction.
314
+ */
315
+ public equals(other: Instruction): boolean {
316
+ if (this.pc !== other.pc) {
317
+ return false;
318
+ }
319
+
320
+ if (this.opcode !== other.opcode) {
321
+ return false;
322
+ }
323
+
324
+ if (this.jumpType !== other.jumpType) {
325
+ return false;
326
+ }
327
+
328
+ if (this.pushData !== undefined) {
329
+ if (other.pushData === undefined) {
330
+ return false;
331
+ }
332
+
333
+ if (!this.pushData.equals(other.pushData)) {
334
+ return false;
335
+ }
336
+ } else if (other.pushData !== undefined) {
337
+ return false;
338
+ }
339
+
340
+ if (this.location !== undefined) {
341
+ if (other.location === undefined) {
342
+ return false;
343
+ }
344
+
345
+ if (!this.location.equals(other.location)) {
346
+ return false;
347
+ }
348
+ } else if (other.location !== undefined) {
349
+ return false;
350
+ }
351
+
352
+ return true;
353
+ }
311
354
  }
312
355
 
313
356
  interface ImmutableReference {
@@ -345,4 +388,22 @@ export class Bytecode {
345
388
  public hasInstruction(pc: number): boolean {
346
389
  return this._pcToInstruction.has(pc);
347
390
  }
391
+
392
+ /**
393
+ * Checks equality with another Bytecode.
394
+ */
395
+ public equals(other: Bytecode): boolean {
396
+ if (this._pcToInstruction.size !== other._pcToInstruction.size) {
397
+ return false;
398
+ }
399
+
400
+ for (const [key, val] of this._pcToInstruction) {
401
+ const otherVal = other._pcToInstruction.get(key);
402
+ if (otherVal === undefined || !val.equals(otherVal)) {
403
+ return false;
404
+ }
405
+ }
406
+
407
+ return true;
408
+ }
348
409
  }
@@ -306,6 +306,10 @@ export enum Opcode {
306
306
  SELFDESTRUCT = 0xff,
307
307
  }
308
308
 
309
+ export function opcodeName(opcode: number): string {
310
+ return Opcode[opcode] ?? `<unrecognized opcode ${opcode}>`;
311
+ }
312
+
309
313
  export function isPush(opcode: Opcode) {
310
314
  return opcode >= Opcode.PUSH1 && opcode <= Opcode.PUSH32;
311
315
  }
@@ -66,8 +66,8 @@ export function encodeSolidityStackTrace(
66
66
  if (previousStack !== undefined) {
67
67
  stack = previousStack;
68
68
  } else {
69
- // We remove Hardhat Network related stack traces
70
- stack.splice(0, 3);
69
+ // We remove error management related stack traces
70
+ stack.splice(0, 1);
71
71
  }
72
72
 
73
73
  for (const entry of stackTrace) {
@@ -1,6 +1,7 @@
1
- import { ERROR } from "@nomicfoundation/ethereumjs-evm/dist/cjs/exceptions";
2
1
  import { equalsBytes } from "@nomicfoundation/ethereumjs-util";
2
+
3
3
  import { ReturnData } from "../provider/return-data";
4
+ import { ExitCode } from "../provider/vm/exit";
4
5
 
5
6
  import {
6
7
  ErrorInferrer,
@@ -39,7 +40,7 @@ export class SolidityTracer {
39
40
  public getStackTrace(
40
41
  maybeDecodedMessageTrace: MessageTrace
41
42
  ): SolidityStackTrace {
42
- if (maybeDecodedMessageTrace.error === undefined) {
43
+ if (!maybeDecodedMessageTrace.exit.isError()) {
43
44
  return [];
44
45
  }
45
46
 
@@ -80,7 +81,7 @@ export class SolidityTracer {
80
81
  // This is not a very exact heuristic, but most of the time it will be right, as solidity
81
82
  // reverts if a call fails, and most contracts are in solidity
82
83
  if (
83
- subtrace.error !== undefined &&
84
+ subtrace.exit.isError() &&
84
85
  equalsBytes(trace.returnData, subtrace.returnData)
85
86
  ) {
86
87
  let unrecognizedEntry: SolidityStackTraceEntry;
@@ -100,7 +101,7 @@ export class SolidityTracer {
100
101
  }
101
102
  }
102
103
 
103
- if (trace.error?.error === ERROR.CODESIZE_EXCEEDS_MAXIMUM) {
104
+ if (trace.exit.kind === ExitCode.CODESIZE_EXCEEDS_MAXIMUM) {
104
105
  return [
105
106
  {
106
107
  type: StackTraceEntryType.CONTRACT_TOO_LARGE_ERROR,
@@ -108,7 +109,7 @@ export class SolidityTracer {
108
109
  ];
109
110
  }
110
111
 
111
- const isInvalidOpcodeError = trace.error?.error === ERROR.INVALID_OPCODE;
112
+ const isInvalidOpcodeError = trace.exit.kind === ExitCode.INVALID_OPCODE;
112
113
 
113
114
  if (isCreateTrace(trace)) {
114
115
  return [
@@ -1,10 +1,72 @@
1
+ import chalk from "chalk";
2
+ import debug from "debug";
3
+ import { Reporter } from "../../sentry/reporter";
4
+ import { TracingConfig } from "../provider/node-types";
5
+ import { createModelsAndDecodeBytecodes } from "./compiler-to-model";
1
6
  import { ContractsIdentifier } from "./contracts-identifier";
2
- import { isEvmStep, isPrecompileTrace, MessageTrace } from "./message-trace";
3
- import { Bytecode } from "./model";
7
+ import {
8
+ isCreateTrace,
9
+ isEvmStep,
10
+ isPrecompileTrace,
11
+ MessageTrace,
12
+ } from "./message-trace";
13
+ import { Bytecode, ContractFunctionType } from "./model";
14
+ import {
15
+ FALLBACK_FUNCTION_NAME,
16
+ RECEIVE_FUNCTION_NAME,
17
+ UNRECOGNIZED_CONTRACT_NAME,
18
+ UNRECOGNIZED_FUNCTION_NAME,
19
+ } from "./solidity-stack-trace";
20
+
21
+ const log = debug("hardhat:core:hardhat-network:node");
4
22
 
5
23
  export class VmTraceDecoder {
6
24
  constructor(private readonly _contractsIdentifier: ContractsIdentifier) {}
7
25
 
26
+ public getContractAndFunctionNamesForCall(
27
+ code: Buffer,
28
+ calldata?: Buffer
29
+ ): { contractName: string; functionName?: string } {
30
+ const isCreate = calldata === undefined;
31
+ const bytecode = this._contractsIdentifier.getBytecodeForCall(
32
+ code,
33
+ isCreate
34
+ );
35
+
36
+ const contractName = bytecode?.contract.name ?? UNRECOGNIZED_CONTRACT_NAME;
37
+
38
+ if (isCreate) {
39
+ return {
40
+ contractName,
41
+ };
42
+ } else {
43
+ if (bytecode === undefined) {
44
+ return {
45
+ contractName,
46
+ functionName: "",
47
+ };
48
+ } else {
49
+ const func = bytecode.contract.getFunctionFromSelector(
50
+ calldata.slice(0, 4)
51
+ );
52
+
53
+ const functionName: string =
54
+ func === undefined
55
+ ? UNRECOGNIZED_FUNCTION_NAME
56
+ : func.type === ContractFunctionType.FALLBACK
57
+ ? FALLBACK_FUNCTION_NAME
58
+ : func.type === ContractFunctionType.RECEIVE
59
+ ? RECEIVE_FUNCTION_NAME
60
+ : func.name;
61
+
62
+ return {
63
+ contractName,
64
+ functionName,
65
+ };
66
+ }
67
+ }
68
+ }
69
+
8
70
  public tryToDecodeMessageTrace(messageTrace: MessageTrace): MessageTrace {
9
71
  if (isPrecompileTrace(messageTrace)) {
10
72
  return messageTrace;
@@ -12,8 +74,10 @@ export class VmTraceDecoder {
12
74
 
13
75
  return {
14
76
  ...messageTrace,
15
- bytecode:
16
- this._contractsIdentifier.getBytecodeFromMessageTrace(messageTrace),
77
+ bytecode: this._contractsIdentifier.getBytecodeForCall(
78
+ messageTrace.code,
79
+ isCreateTrace(messageTrace)
80
+ ),
17
81
  steps: messageTrace.steps.map((s) =>
18
82
  isEvmStep(s) ? s : this.tryToDecodeMessageTrace(s)
19
83
  ),
@@ -24,3 +88,48 @@ export class VmTraceDecoder {
24
88
  this._contractsIdentifier.addBytecode(bytecode);
25
89
  }
26
90
  }
91
+
92
+ export function initializeVmTraceDecoder(
93
+ vmTraceDecoder: VmTraceDecoder,
94
+ tracingConfig: TracingConfig
95
+ ) {
96
+ if (tracingConfig.buildInfos === undefined) {
97
+ return;
98
+ }
99
+
100
+ try {
101
+ for (const buildInfo of tracingConfig.buildInfos) {
102
+ const bytecodes = createModelsAndDecodeBytecodes(
103
+ buildInfo.solcVersion,
104
+ buildInfo.input,
105
+ buildInfo.output
106
+ );
107
+
108
+ for (const bytecode of bytecodes) {
109
+ if (
110
+ tracingConfig.ignoreContracts === true &&
111
+ bytecode.contract.name.startsWith("Ignored")
112
+ ) {
113
+ continue;
114
+ }
115
+
116
+ vmTraceDecoder.addBytecode(bytecode);
117
+ }
118
+ }
119
+ } catch (error) {
120
+ console.warn(
121
+ chalk.yellow(
122
+ "The Hardhat Network tracing engine could not be initialized. Run Hardhat with --verbose to learn more."
123
+ )
124
+ );
125
+
126
+ log(
127
+ "Hardhat Network tracing disabled: ContractsIdentifier failed to be initialized. Please report this to help us improve Hardhat.\n",
128
+ error
129
+ );
130
+
131
+ if (error instanceof Error) {
132
+ Reporter.reportError(error);
133
+ }
134
+ }
135
+ }