hardhat 2.13.0-dev.1 → 2.13.0-dev.3

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 (367) hide show
  1. package/builtin-tasks/compile.js +17 -7
  2. package/builtin-tasks/compile.js.map +1 -1
  3. package/builtin-tasks/flatten.js +10 -4
  4. package/builtin-tasks/flatten.js.map +1 -1
  5. package/builtin-tasks/help.js +2 -4
  6. package/builtin-tasks/help.js.map +1 -1
  7. package/builtin-tasks/task-names.d.ts +1 -0
  8. package/builtin-tasks/task-names.d.ts.map +1 -1
  9. package/builtin-tasks/task-names.js +3 -2
  10. package/builtin-tasks/task-names.js.map +1 -1
  11. package/builtin-tasks/test.js +22 -1
  12. package/builtin-tasks/test.js.map +1 -1
  13. package/internal/artifacts.d.ts +5 -0
  14. package/internal/artifacts.d.ts.map +1 -1
  15. package/internal/artifacts.js +29 -10
  16. package/internal/artifacts.js.map +1 -1
  17. package/internal/cli/bootstrap.d.ts +1 -0
  18. package/internal/cli/bootstrap.js +12 -20
  19. package/internal/cli/bootstrap.js.map +1 -1
  20. package/internal/cli/cli.d.ts +0 -1
  21. package/internal/cli/cli.d.ts.map +1 -1
  22. package/internal/cli/cli.js +24 -24
  23. package/internal/cli/cli.js.map +1 -1
  24. package/internal/cli/project-creation.d.ts +1 -1
  25. package/internal/cli/project-creation.d.ts.map +1 -1
  26. package/internal/cli/project-creation.js +105 -25
  27. package/internal/cli/project-creation.js.map +1 -1
  28. package/internal/cli/prompt.d.ts +2 -2
  29. package/internal/cli/prompt.d.ts.map +1 -1
  30. package/internal/cli/prompt.js +1 -2
  31. package/internal/cli/prompt.js.map +1 -1
  32. package/internal/cli/types.d.ts +1 -0
  33. package/internal/cli/types.d.ts.map +1 -1
  34. package/internal/core/config/config-env.d.ts +5 -11
  35. package/internal/core/config/config-env.d.ts.map +1 -1
  36. package/internal/core/config/config-env.js +2 -13
  37. package/internal/core/config/config-env.js.map +1 -1
  38. package/internal/core/config/config-loading.d.ts +2 -1
  39. package/internal/core/config/config-loading.d.ts.map +1 -1
  40. package/internal/core/config/config-loading.js +25 -7
  41. package/internal/core/config/config-loading.js.map +1 -1
  42. package/internal/core/config/config-resolution.d.ts.map +1 -1
  43. package/internal/core/config/config-resolution.js +2 -1
  44. package/internal/core/config/config-resolution.js.map +1 -1
  45. package/internal/core/config/config-validation.d.ts +2 -0
  46. package/internal/core/config/config-validation.d.ts.map +1 -1
  47. package/internal/core/config/config-validation.js +18 -1
  48. package/internal/core/config/config-validation.js.map +1 -1
  49. package/internal/core/config/extenders.d.ts +4 -7
  50. package/internal/core/config/extenders.d.ts.map +1 -1
  51. package/internal/core/config/extenders.js +5 -12
  52. package/internal/core/config/extenders.js.map +1 -1
  53. package/internal/core/errors-list.d.ts +35 -7
  54. package/internal/core/errors-list.d.ts.map +1 -1
  55. package/internal/core/errors-list.js +117 -85
  56. package/internal/core/errors-list.js.map +1 -1
  57. package/internal/core/flamegraph.js +10 -10
  58. package/internal/core/jsonrpc/types/output/metadata.d.ts +13 -0
  59. package/internal/core/jsonrpc/types/output/metadata.d.ts.map +1 -0
  60. package/internal/core/jsonrpc/types/output/metadata.js +3 -0
  61. package/internal/core/jsonrpc/types/output/metadata.js.map +1 -0
  62. package/internal/core/project-structure.d.ts.map +1 -1
  63. package/internal/core/project-structure.js +6 -0
  64. package/internal/core/project-structure.js.map +1 -1
  65. package/internal/core/providers/accounts.d.ts.map +1 -1
  66. package/internal/core/providers/accounts.js +4 -1
  67. package/internal/core/providers/accounts.js.map +1 -1
  68. package/internal/core/providers/backwards-compatibility.d.ts.map +1 -1
  69. package/internal/core/providers/backwards-compatibility.js +3 -0
  70. package/internal/core/providers/backwards-compatibility.js.map +1 -1
  71. package/internal/core/providers/construction.d.ts.map +1 -1
  72. package/internal/core/providers/construction.js +25 -5
  73. package/internal/core/providers/construction.js.map +1 -1
  74. package/internal/core/providers/gas-providers.d.ts +1 -1
  75. package/internal/core/providers/gas-providers.d.ts.map +1 -1
  76. package/internal/core/providers/gas-providers.js +1 -1
  77. package/internal/core/providers/gas-providers.js.map +1 -1
  78. package/internal/core/providers/http.d.ts +2 -2
  79. package/internal/core/providers/http.d.ts.map +1 -1
  80. package/internal/core/providers/http.js +41 -19
  81. package/internal/core/providers/http.js.map +1 -1
  82. package/internal/core/runtime-environment.d.ts +4 -2
  83. package/internal/core/runtime-environment.d.ts.map +1 -1
  84. package/internal/core/runtime-environment.js +39 -47
  85. package/internal/core/runtime-environment.js.map +1 -1
  86. package/internal/core/tasks/dsl.d.ts +6 -6
  87. package/internal/core/tasks/dsl.d.ts.map +1 -1
  88. package/internal/core/tasks/dsl.js.map +1 -1
  89. package/internal/core/tasks/task-definitions.d.ts +2 -2
  90. package/internal/core/tasks/task-definitions.d.ts.map +1 -1
  91. package/internal/core/tasks/task-definitions.js.map +1 -1
  92. package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
  93. package/internal/hardhat-network/jsonrpc/client.js +5 -3
  94. package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
  95. package/internal/hardhat-network/jsonrpc/handler.d.ts +1 -0
  96. package/internal/hardhat-network/jsonrpc/handler.d.ts.map +1 -1
  97. package/internal/hardhat-network/jsonrpc/handler.js +13 -18
  98. package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
  99. package/internal/hardhat-network/provider/RethnetState.d.ts +26 -0
  100. package/internal/hardhat-network/provider/RethnetState.d.ts.map +1 -0
  101. package/internal/hardhat-network/provider/RethnetState.js +84 -0
  102. package/internal/hardhat-network/provider/RethnetState.js.map +1 -0
  103. package/internal/hardhat-network/provider/modules/eth.js +4 -4
  104. package/internal/hardhat-network/provider/modules/evm.d.ts +2 -1
  105. package/internal/hardhat-network/provider/modules/evm.d.ts.map +1 -1
  106. package/internal/hardhat-network/provider/modules/evm.js +10 -4
  107. package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
  108. package/internal/hardhat-network/provider/modules/hardhat.d.ts +2 -0
  109. package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -1
  110. package/internal/hardhat-network/provider/modules/hardhat.js +9 -0
  111. package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
  112. package/internal/hardhat-network/provider/modules/web3.d.ts +3 -0
  113. package/internal/hardhat-network/provider/modules/web3.d.ts.map +1 -1
  114. package/internal/hardhat-network/provider/modules/web3.js +4 -4
  115. package/internal/hardhat-network/provider/modules/web3.js.map +1 -1
  116. package/internal/hardhat-network/provider/node-types.d.ts +1 -1
  117. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
  118. package/internal/hardhat-network/provider/node.d.ts +6 -0
  119. package/internal/hardhat-network/provider/node.d.ts.map +1 -1
  120. package/internal/hardhat-network/provider/node.js +44 -5
  121. package/internal/hardhat-network/provider/node.js.map +1 -1
  122. package/internal/hardhat-network/provider/output.d.ts +1 -1
  123. package/internal/hardhat-network/provider/output.d.ts.map +1 -1
  124. package/internal/hardhat-network/provider/output.js +1 -1
  125. package/internal/hardhat-network/provider/output.js.map +1 -1
  126. package/internal/hardhat-network/provider/provider.d.ts +25 -21
  127. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  128. package/internal/hardhat-network/provider/provider.js +26 -43
  129. package/internal/hardhat-network/provider/provider.js.map +1 -1
  130. package/internal/hardhat-network/provider/return-data.js +2 -2
  131. package/internal/hardhat-network/provider/return-data.js.map +1 -1
  132. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
  133. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +4 -2
  134. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
  135. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
  136. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +4 -2
  137. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
  138. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
  139. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +4 -2
  140. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
  141. package/internal/hardhat-network/provider/utils/bloom.d.ts +4 -0
  142. package/internal/hardhat-network/provider/utils/bloom.d.ts.map +1 -1
  143. package/internal/hardhat-network/provider/utils/bloom.js +6 -0
  144. package/internal/hardhat-network/provider/utils/bloom.js.map +1 -1
  145. package/internal/hardhat-network/provider/utils/convertToRethnet.d.ts +8 -25
  146. package/internal/hardhat-network/provider/utils/convertToRethnet.d.ts.map +1 -1
  147. package/internal/hardhat-network/provider/utils/convertToRethnet.js +122 -174
  148. package/internal/hardhat-network/provider/utils/convertToRethnet.js.map +1 -1
  149. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts +7 -0
  150. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts.map +1 -0
  151. package/internal/hardhat-network/provider/utils/makeFakeSignature.js +31 -0
  152. package/internal/hardhat-network/provider/utils/makeFakeSignature.js.map +1 -0
  153. package/internal/hardhat-network/provider/utils/makeForkClient.d.ts +1 -0
  154. package/internal/hardhat-network/provider/utils/makeForkClient.d.ts.map +1 -1
  155. package/internal/hardhat-network/provider/utils/makeForkClient.js +4 -1
  156. package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -1
  157. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +1 -1
  158. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
  159. package/internal/hardhat-network/provider/utils/putGenesisBlock.js +2 -2
  160. package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
  161. package/internal/hardhat-network/provider/vm/block-builder.d.ts +4 -3
  162. package/internal/hardhat-network/provider/vm/block-builder.d.ts.map +1 -1
  163. package/internal/hardhat-network/provider/vm/block-builder.js +9 -5
  164. package/internal/hardhat-network/provider/vm/block-builder.js.map +1 -1
  165. package/internal/hardhat-network/provider/vm/creation.d.ts +10 -0
  166. package/internal/hardhat-network/provider/vm/creation.d.ts.map +1 -0
  167. package/internal/hardhat-network/provider/vm/creation.js +29 -0
  168. package/internal/hardhat-network/provider/vm/creation.js.map +1 -0
  169. package/internal/hardhat-network/provider/vm/dual.d.ts +14 -14
  170. package/internal/hardhat-network/provider/vm/dual.d.ts.map +1 -1
  171. package/internal/hardhat-network/provider/vm/dual.js +426 -58
  172. package/internal/hardhat-network/provider/vm/dual.js.map +1 -1
  173. package/internal/hardhat-network/provider/vm/ethereumjs.d.ts +23 -22
  174. package/internal/hardhat-network/provider/vm/ethereumjs.d.ts.map +1 -1
  175. package/internal/hardhat-network/provider/vm/ethereumjs.js +181 -37
  176. package/internal/hardhat-network/provider/vm/ethereumjs.js.map +1 -1
  177. package/internal/hardhat-network/provider/vm/exit.d.ts +23 -0
  178. package/internal/hardhat-network/provider/vm/exit.d.ts.map +1 -0
  179. package/internal/hardhat-network/provider/vm/exit.js +130 -0
  180. package/internal/hardhat-network/provider/vm/exit.js.map +1 -0
  181. package/internal/hardhat-network/provider/vm/rethnet.d.ts +18 -30
  182. package/internal/hardhat-network/provider/vm/rethnet.d.ts.map +1 -1
  183. package/internal/hardhat-network/provider/vm/rethnet.js +164 -51
  184. package/internal/hardhat-network/provider/vm/rethnet.js.map +1 -1
  185. package/internal/hardhat-network/provider/vm/vm-adapter.d.ts +29 -13
  186. package/internal/hardhat-network/provider/vm/vm-adapter.d.ts.map +1 -1
  187. package/internal/hardhat-network/stack-traces/compiler-to-model.d.ts.map +1 -1
  188. package/internal/hardhat-network/stack-traces/compiler-to-model.js +37 -11
  189. package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
  190. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  191. package/internal/hardhat-network/stack-traces/constants.d.ts +1 -1
  192. package/internal/hardhat-network/stack-traces/constants.js +1 -1
  193. package/internal/hardhat-network/stack-traces/debug.d.ts.map +1 -1
  194. package/internal/hardhat-network/stack-traces/debug.js +6 -2
  195. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  196. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts +1 -0
  197. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +1 -1
  198. package/internal/hardhat-network/stack-traces/error-inferrer.js +87 -60
  199. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
  200. package/internal/hardhat-network/stack-traces/model.d.ts +3 -1
  201. package/internal/hardhat-network/stack-traces/model.d.ts.map +1 -1
  202. package/internal/hardhat-network/stack-traces/model.js +9 -1
  203. package/internal/hardhat-network/stack-traces/model.js.map +1 -1
  204. package/internal/hardhat-network/stack-traces/solidity-errors.d.ts.map +1 -1
  205. package/internal/hardhat-network/stack-traces/solidity-errors.js +4 -3
  206. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  207. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +2 -2
  208. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -1
  209. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
  210. package/internal/hardhat-network/stack-traces/solidityTracer.js +1 -0
  211. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  212. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts.map +1 -1
  213. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +2 -1
  214. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
  215. package/internal/lib/hardhat-lib.d.ts.map +1 -1
  216. package/internal/lib/hardhat-lib.js +1 -4
  217. package/internal/lib/hardhat-lib.js.map +1 -1
  218. package/internal/solidity/compiler/downloader.js +2 -2
  219. package/internal/solidity/compiler/downloader.js.map +1 -1
  220. package/internal/solidity/compiler/index.d.ts.map +1 -1
  221. package/internal/solidity/compiler/index.js +7 -1
  222. package/internal/solidity/compiler/index.js.map +1 -1
  223. package/internal/solidity/dependencyGraph.d.ts.map +1 -1
  224. package/internal/solidity/dependencyGraph.js +2 -0
  225. package/internal/solidity/dependencyGraph.js.map +1 -1
  226. package/internal/solidity/resolver.d.ts +4 -3
  227. package/internal/solidity/resolver.d.ts.map +1 -1
  228. package/internal/solidity/resolver.js +26 -7
  229. package/internal/solidity/resolver.js.map +1 -1
  230. package/internal/util/abi-helpers.d.ts +1 -0
  231. package/internal/util/abi-helpers.d.ts.map +1 -1
  232. package/internal/util/abi-helpers.js +9 -0
  233. package/internal/util/abi-helpers.js.map +1 -1
  234. package/internal/util/console.d.ts.map +1 -1
  235. package/internal/util/console.js +1 -1
  236. package/internal/util/console.js.map +1 -1
  237. package/internal/util/download.d.ts +3 -1
  238. package/internal/util/download.d.ts.map +1 -1
  239. package/internal/util/download.js +14 -12
  240. package/internal/util/download.js.map +1 -1
  241. package/internal/util/keys-derivation.d.ts.map +1 -1
  242. package/internal/util/keys-derivation.js +4 -1
  243. package/internal/util/keys-derivation.js.map +1 -1
  244. package/internal/util/packageInfo.d.ts +7 -1
  245. package/internal/util/packageInfo.d.ts.map +1 -1
  246. package/internal/util/packageInfo.js +23 -11
  247. package/internal/util/packageInfo.js.map +1 -1
  248. package/internal/util/proxy.d.ts +2 -0
  249. package/internal/util/proxy.d.ts.map +1 -0
  250. package/internal/util/proxy.js +19 -0
  251. package/internal/util/proxy.js.map +1 -0
  252. package/package.json +9 -10
  253. package/recommended-gitignore.txt +1 -1
  254. package/register.js +1 -4
  255. package/register.js.map +1 -1
  256. package/sample-projects/javascript/hardhat.config.js +1 -1
  257. package/sample-projects/javascript/scripts/deploy.js +2 -2
  258. package/sample-projects/javascript-esm/LICENSE.md +11 -0
  259. package/sample-projects/javascript-esm/README.md +13 -0
  260. package/sample-projects/javascript-esm/contracts/Lock.sol +34 -0
  261. package/sample-projects/javascript-esm/hardhat.config.cjs +6 -0
  262. package/sample-projects/javascript-esm/scripts/deploy.js +22 -0
  263. package/sample-projects/javascript-esm/test/Lock.js +123 -0
  264. package/sample-projects/typescript/hardhat.config.ts +1 -1
  265. package/sample-projects/typescript/scripts/deploy.ts +2 -2
  266. package/sample-projects/typescript/tsconfig.json +2 -1
  267. package/src/builtin-tasks/compile.ts +30 -11
  268. package/src/builtin-tasks/flatten.ts +18 -4
  269. package/src/builtin-tasks/help.ts +15 -16
  270. package/src/builtin-tasks/task-names.ts +2 -0
  271. package/src/builtin-tasks/test.ts +30 -2
  272. package/src/internal/artifacts.ts +947 -0
  273. package/src/internal/cli/bootstrap.ts +14 -36
  274. package/src/internal/cli/cli.ts +44 -35
  275. package/src/internal/cli/project-creation.ts +129 -32
  276. package/src/internal/cli/prompt.ts +2 -4
  277. package/src/internal/cli/types.ts +2 -0
  278. package/src/internal/core/config/config-env.ts +15 -27
  279. package/src/internal/core/config/config-loading.ts +35 -11
  280. package/src/internal/core/config/config-resolution.ts +4 -3
  281. package/src/internal/core/config/config-validation.ts +20 -0
  282. package/src/internal/core/config/extenders.ts +6 -15
  283. package/src/internal/core/errors-list.ts +121 -85
  284. package/src/internal/core/flamegraph.ts +10 -10
  285. package/src/internal/core/jsonrpc/types/output/metadata.ts +32 -0
  286. package/src/internal/core/project-structure.ts +8 -0
  287. package/src/internal/core/providers/accounts.ts +5 -2
  288. package/src/internal/core/providers/backwards-compatibility.ts +3 -0
  289. package/src/internal/core/providers/construction.ts +29 -24
  290. package/src/internal/core/providers/gas-providers.ts +1 -1
  291. package/src/internal/core/providers/http.ts +38 -26
  292. package/src/internal/core/runtime-environment.ts +65 -60
  293. package/src/internal/core/tasks/dsl.ts +17 -17
  294. package/src/internal/core/tasks/task-definitions.ts +6 -2
  295. package/src/internal/hardhat-network/jsonrpc/client.ts +7 -4
  296. package/src/internal/hardhat-network/jsonrpc/handler.ts +31 -28
  297. package/src/internal/hardhat-network/provider/modules/eth.ts +4 -4
  298. package/src/internal/hardhat-network/provider/modules/evm.ts +15 -3
  299. package/src/internal/hardhat-network/provider/modules/hardhat.ts +14 -0
  300. package/src/internal/hardhat-network/provider/modules/web3.ts +4 -4
  301. package/src/internal/hardhat-network/provider/node-types.ts +1 -1
  302. package/src/internal/hardhat-network/provider/node.ts +63 -1
  303. package/src/internal/hardhat-network/provider/output.ts +2 -2
  304. package/src/internal/hardhat-network/provider/provider.ts +61 -50
  305. package/src/internal/hardhat-network/provider/return-data.ts +2 -2
  306. package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +5 -2
  307. package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +5 -2
  308. package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +5 -2
  309. package/src/internal/hardhat-network/provider/utils/makeFakeSignature.ts +46 -0
  310. package/src/internal/hardhat-network/provider/utils/makeForkClient.ts +10 -1
  311. package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +2 -2
  312. package/src/internal/hardhat-network/stack-traces/compiler-to-model.ts +73 -11
  313. package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +1 -1
  314. package/src/internal/hardhat-network/stack-traces/constants.ts +1 -1
  315. package/src/internal/hardhat-network/stack-traces/debug.ts +9 -2
  316. package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +179 -95
  317. package/src/internal/hardhat-network/stack-traces/model.ts +11 -1
  318. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +5 -3
  319. package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +2 -2
  320. package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +3 -0
  321. package/src/internal/hardhat-network/stack-traces/vm-debug-tracer.ts +4 -1
  322. package/src/internal/lib/hardhat-lib.ts +1 -6
  323. package/src/internal/solidity/compiler/downloader.ts +3 -3
  324. package/src/internal/solidity/compiler/index.ts +9 -1
  325. package/src/internal/solidity/dependencyGraph.ts +2 -0
  326. package/src/internal/solidity/resolver.ts +38 -11
  327. package/src/internal/util/abi-helpers.ts +9 -0
  328. package/src/internal/util/console.ts +4 -2
  329. package/src/internal/util/download.ts +16 -16
  330. package/src/internal/util/keys-derivation.ts +4 -1
  331. package/src/internal/util/packageInfo.ts +33 -10
  332. package/src/internal/util/proxy.ts +18 -0
  333. package/src/register.ts +1 -6
  334. package/src/types/artifacts.ts +19 -105
  335. package/src/types/config.ts +2 -0
  336. package/src/types/runtime.ts +16 -13
  337. package/src/utils/source-names.ts +15 -0
  338. package/types/artifacts.d.ts +14 -90
  339. package/types/artifacts.d.ts.map +1 -1
  340. package/types/config.d.ts +2 -0
  341. package/types/config.d.ts.map +1 -1
  342. package/types/runtime.d.ts +9 -10
  343. package/types/runtime.d.ts.map +1 -1
  344. package/utils/source-names.d.ts +5 -0
  345. package/utils/source-names.d.ts.map +1 -1
  346. package/utils/source-names.js +14 -1
  347. package/utils/source-names.js.map +1 -1
  348. package/internal/artifacts/caching.d.ts +0 -27
  349. package/internal/artifacts/caching.d.ts.map +0 -1
  350. package/internal/artifacts/caching.js +0 -167
  351. package/internal/artifacts/caching.js.map +0 -1
  352. package/internal/artifacts/index.d.ts +0 -44
  353. package/internal/artifacts/index.d.ts.map +0 -1
  354. package/internal/artifacts/index.js +0 -187
  355. package/internal/artifacts/index.js.map +0 -1
  356. package/internal/artifacts/mutable.d.ts +0 -29
  357. package/internal/artifacts/mutable.d.ts.map +0 -1
  358. package/internal/artifacts/mutable.js +0 -226
  359. package/internal/artifacts/mutable.js.map +0 -1
  360. package/internal/artifacts/readonly.d.ts +0 -88
  361. package/internal/artifacts/readonly.d.ts.map +0 -1
  362. package/internal/artifacts/readonly.js +0 -324
  363. package/internal/artifacts/readonly.js.map +0 -1
  364. package/src/internal/artifacts/caching.ts +0 -239
  365. package/src/internal/artifacts/index.ts +0 -296
  366. package/src/internal/artifacts/mutable.ts +0 -330
  367. package/src/internal/artifacts/readonly.ts +0 -438
@@ -1,119 +1,487 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DualModeAdapter = void 0;
4
+ const ethereumjs_util_1 = require("@nomicfoundation/ethereumjs-util");
5
+ const errors_1 = require("../../../core/errors");
6
+ const message_trace_1 = require("../../stack-traces/message-trace");
7
+ const vm_tracer_1 = require("../../stack-traces/vm-tracer");
4
8
  const ethereumjs_1 = require("./ethereumjs");
9
+ const exit_1 = require("./exit");
5
10
  const rethnet_1 = require("./rethnet");
6
11
  /* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
7
12
  /* eslint-disable @typescript-eslint/restrict-template-expressions */
13
+ function _printEthereumJSTrace(trace) {
14
+ console.log(JSON.stringify(trace, null, 2));
15
+ }
16
+ function _printRethnetTrace(trace) {
17
+ console.log(JSON.stringify(trace, (key, value) => (typeof value === "bigint" ? value.toString() : value), 2));
18
+ }
8
19
  class DualModeAdapter {
9
- constructor(_ethereumJSAdapter, _rethnetAdapter) {
20
+ constructor(_ethereumJSAdapter, _rethnetAdapter, _ethereumJSVMTracer, _rethnetVMTracer) {
10
21
  this._ethereumJSAdapter = _ethereumJSAdapter;
11
22
  this._rethnetAdapter = _rethnetAdapter;
23
+ this._ethereumJSVMTracer = _ethereumJSVMTracer;
24
+ this._rethnetVMTracer = _rethnetVMTracer;
12
25
  }
13
26
  static async create(common, blockchain, config, selectHardfork) {
14
27
  const ethereumJSAdapter = await ethereumjs_1.EthereumJSAdapter.create(common, blockchain, config, selectHardfork);
15
- const rethnetAdapter = await rethnet_1.RethnetAdapter.create(
16
- // eslint-disable-next-line @typescript-eslint/dot-notation
17
- ethereumJSAdapter["_stateManager"], blockchain, config, selectHardfork);
18
- return new DualModeAdapter(ethereumJSAdapter, rethnetAdapter);
28
+ const rethnetAdapter = await rethnet_1.RethnetAdapter.create(config, selectHardfork, async (blockNumber) => {
29
+ const block = await blockchain.getBlock(blockNumber);
30
+ (0, errors_1.assertHardhatInvariant)(block !== null, "Should be able to get block");
31
+ return block.header.hash();
32
+ }, common);
33
+ const ethereumJSVMTracer = new vm_tracer_1.VMTracer(common, false);
34
+ const rethnetVMTracer = new vm_tracer_1.VMTracer(common, false);
35
+ return new DualModeAdapter(ethereumJSAdapter, rethnetAdapter, ethereumJSVMTracer, rethnetVMTracer);
19
36
  }
20
37
  async dryRun(tx, blockContext, forceBaseFeeZero) {
21
- const ethereumJSResult = await this._ethereumJSAdapter.dryRun(tx, blockContext, forceBaseFeeZero);
22
- const rethnetResult = await this._rethnetAdapter.dryRun(tx, blockContext, forceBaseFeeZero);
23
- assertEqualRunTxResults(ethereumJSResult, rethnetResult);
24
- return rethnetResult;
25
- }
26
- getCommon() {
27
- return this._ethereumJSAdapter.getCommon();
38
+ const ethereumJSResultPromise = this._ethereumJSAdapter.dryRun(tx, blockContext, forceBaseFeeZero);
39
+ const rethnetResultPromise = this._rethnetAdapter.dryRun(tx, blockContext, forceBaseFeeZero);
40
+ const [[ethereumJSResult, _ethereumJSTrace], [rethnetResult, rethnetTrace],] = await Promise.all([ethereumJSResultPromise, rethnetResultPromise]);
41
+ try {
42
+ assertEqualRunTxResults(ethereumJSResult, rethnetResult);
43
+ return [rethnetResult, rethnetTrace];
44
+ }
45
+ catch (e) {
46
+ // if the results didn't match, print the traces
47
+ // console.log("EthereumJS trace");
48
+ // printEthereumJSTrace(ethereumJSTrace);
49
+ // console.log();
50
+ // console.log("Rethnet trace");
51
+ // printRethnetTrace(rethnetTrace);
52
+ throw e;
53
+ }
28
54
  }
29
55
  async getStateRoot() {
30
- return this._ethereumJSAdapter.getStateRoot();
56
+ const ethereumJSRoot = await this._ethereumJSAdapter.getStateRoot();
57
+ const rethnetRoot = await this._rethnetAdapter.getStateRoot();
58
+ if (!ethereumJSRoot.equals(rethnetRoot)) {
59
+ console.trace(`Different state root: ${ethereumJSRoot.toString("hex")} !== ${rethnetRoot.toString("hex")}`);
60
+ throw new Error("Different state root");
61
+ }
62
+ return rethnetRoot;
31
63
  }
32
64
  async getAccount(address) {
33
- return this._ethereumJSAdapter.getAccount(address);
65
+ const ethereumJSAccount = await this._ethereumJSAdapter.getAccount(address);
66
+ const rethnetAccount = await this._rethnetAdapter.getAccount(address);
67
+ assertEqualAccounts(address, ethereumJSAccount, rethnetAccount);
68
+ return ethereumJSAccount;
34
69
  }
35
70
  async getContractStorage(address, key) {
36
- return this._ethereumJSAdapter.getContractStorage(address, key);
71
+ const ethereumJSStorageSlot = await this._ethereumJSAdapter.getContractStorage(address, key);
72
+ const rethnetStorageSlot = await this._rethnetAdapter.getContractStorage(address, key);
73
+ if (!ethereumJSStorageSlot.equals(rethnetStorageSlot)) {
74
+ // we only throw if any of the returned values was non-empty, but
75
+ // ethereumjs and rethnet return different values when that happens
76
+ if (ethereumJSStorageSlot.length !== 0 ||
77
+ !rethnetStorageSlot.equals(Buffer.from([0x00]))) {
78
+ console.trace(`Different storage slot: ${(0, ethereumjs_util_1.bufferToHex)(ethereumJSStorageSlot)} !== ${(0, ethereumjs_util_1.bufferToHex)(rethnetStorageSlot)}`);
79
+ throw new Error("Different storage slot");
80
+ }
81
+ }
82
+ return rethnetStorageSlot;
37
83
  }
38
84
  async getContractCode(address) {
39
- return this._ethereumJSAdapter.getContractCode(address);
85
+ const ethereumJSCode = await this._ethereumJSAdapter.getContractCode(address);
86
+ const rethnetCode = await this._rethnetAdapter.getContractCode(address);
87
+ if (!ethereumJSCode.equals(rethnetCode)) {
88
+ console.trace(`Different contract code: ${ethereumJSCode.toString("hex")} !== ${rethnetCode.toString("hex")}`);
89
+ throw new Error("Different contract code");
90
+ }
91
+ return rethnetCode;
40
92
  }
41
93
  async putAccount(address, account) {
42
- return this._ethereumJSAdapter.putAccount(address, account);
94
+ await this._ethereumJSAdapter.putAccount(address, account);
95
+ await this._rethnetAdapter.putAccount(address, account);
43
96
  }
44
97
  async putContractCode(address, value) {
45
- return this._ethereumJSAdapter.putContractCode(address, value);
98
+ await this._ethereumJSAdapter.putContractCode(address, value);
99
+ await this._rethnetAdapter.putContractCode(address, value);
46
100
  }
47
101
  async putContractStorage(address, key, value) {
48
- return this._ethereumJSAdapter.putContractStorage(address, key, value);
102
+ await this._ethereumJSAdapter.putContractStorage(address, key, value);
103
+ await this._rethnetAdapter.putContractStorage(address, key, value);
49
104
  }
50
105
  async restoreContext(stateRoot) {
51
- return this._ethereumJSAdapter.restoreContext(stateRoot);
106
+ await this._ethereumJSAdapter.restoreContext(stateRoot);
107
+ await this._rethnetAdapter.restoreContext(stateRoot);
52
108
  }
53
109
  async traceTransaction(hash, block, config) {
54
110
  return this._ethereumJSAdapter.traceTransaction(hash, block, config);
55
111
  }
56
- enableTracing(callbacks) {
57
- return this._ethereumJSAdapter.enableTracing(callbacks);
58
- }
59
- disableTracing() {
60
- return this._ethereumJSAdapter.disableTracing();
61
- }
62
112
  async setBlockContext(block, irregularStateOrUndefined) {
63
- return this._ethereumJSAdapter.setBlockContext(block, irregularStateOrUndefined);
64
- }
65
- isEip1559Active(blockNumberOrPending) {
66
- return this._ethereumJSAdapter.isEip1559Active(blockNumberOrPending);
113
+ await this._ethereumJSAdapter.setBlockContext(block, irregularStateOrUndefined);
114
+ await this._rethnetAdapter.setBlockContext(block, irregularStateOrUndefined);
67
115
  }
68
116
  async startBlock() {
69
- return this._ethereumJSAdapter.startBlock();
117
+ await this._rethnetAdapter.startBlock();
118
+ await this._ethereumJSAdapter.startBlock();
70
119
  }
71
120
  async runTxInBlock(tx, block) {
72
- return this._ethereumJSAdapter.runTxInBlock(tx, block);
121
+ const ethereumJSResultPromise = this._ethereumJSAdapter.runTxInBlock(tx, block);
122
+ const rethnetResultPromise = this._rethnetAdapter.runTxInBlock(tx, block);
123
+ const [[ethereumJSResult, ethereumJSTrace], [rethnetResult, _rethnetTrace],] = await Promise.all([ethereumJSResultPromise, rethnetResultPromise]);
124
+ try {
125
+ assertEqualRunTxResults(ethereumJSResult, rethnetResult);
126
+ return [ethereumJSResult, ethereumJSTrace];
127
+ }
128
+ catch (e) {
129
+ // if the results didn't match, print the traces
130
+ // console.log("EthereumJS trace");
131
+ // printEthereumJSTrace(ethereumJSTrace);
132
+ // console.log();
133
+ // console.log("Rethnet trace");
134
+ // printRethnetTrace(rethnetTrace);
135
+ throw e;
136
+ }
73
137
  }
74
138
  async addBlockRewards(rewards) {
139
+ await this._rethnetAdapter.addBlockRewards(rewards);
75
140
  return this._ethereumJSAdapter.addBlockRewards(rewards);
76
141
  }
77
142
  async sealBlock() {
143
+ await this._rethnetAdapter.sealBlock();
78
144
  return this._ethereumJSAdapter.sealBlock();
79
145
  }
80
146
  async revertBlock() {
147
+ await this._rethnetAdapter.revertBlock();
81
148
  return this._ethereumJSAdapter.revertBlock();
82
149
  }
150
+ async makeSnapshot() {
151
+ const ethereumJSRoot = await this._ethereumJSAdapter.makeSnapshot();
152
+ const rethnetRoot = await this._rethnetAdapter.makeSnapshot();
153
+ if (!ethereumJSRoot.equals(rethnetRoot)) {
154
+ console.trace(`Different snapshot state root: ${ethereumJSRoot.toString("hex")} !== ${rethnetRoot.toString("hex")}`);
155
+ throw new Error("Different snapshot state root");
156
+ }
157
+ return rethnetRoot;
158
+ }
159
+ getLastTrace() {
160
+ const { trace: ethereumJSTrace, error: ethereumJSError } = this._ethereumJSAdapter.getLastTrace();
161
+ const { trace: rethnetTrace, error: rethnetError } = this._rethnetAdapter.getLastTrace();
162
+ if (ethereumJSTrace === undefined) {
163
+ if (rethnetTrace !== undefined) {
164
+ throw new Error("ethereumJSTrace is undefined but rethnetTrace is defined");
165
+ }
166
+ }
167
+ else {
168
+ if (rethnetTrace === undefined) {
169
+ throw new Error("ethereumJSTrace is defined but rethnetTrace is undefined");
170
+ }
171
+ assertEqualTraces(ethereumJSTrace, rethnetTrace);
172
+ }
173
+ if (ethereumJSError === undefined) {
174
+ if (rethnetError !== undefined) {
175
+ throw new Error("ethereumJSError is undefined but rethnetError is defined");
176
+ }
177
+ }
178
+ else {
179
+ if (rethnetError === undefined) {
180
+ throw new Error("ethereumJSError is defined but rethnetError is undefined");
181
+ }
182
+ // both errors are defined
183
+ if (ethereumJSError.name !== rethnetError.name) {
184
+ throw new Error(`Different error name: ${ethereumJSError.name} !== ${rethnetError.name}`);
185
+ }
186
+ if (ethereumJSError.message !== rethnetError.message) {
187
+ throw new Error(`Different error message: ${ethereumJSError.message} !== ${rethnetError.message}`);
188
+ }
189
+ if (ethereumJSError.stack === undefined) {
190
+ if (rethnetError.stack !== undefined) {
191
+ throw new Error("ethereumJSError.stack is undefined but rethnetError.stack is defined");
192
+ }
193
+ }
194
+ else {
195
+ if (rethnetError.stack === undefined) {
196
+ throw new Error("ethereumJSError.stack is defined but rethnetError.stack is undefined");
197
+ }
198
+ // both error stacks are defined
199
+ if (ethereumJSError.stack !== rethnetError.stack) {
200
+ throw new Error(`Different error stack: ${ethereumJSError.stack} !== ${rethnetError.stack}`);
201
+ }
202
+ }
203
+ }
204
+ const ethereumJSSteps = this._ethereumJSVMTracer.tracingSteps;
205
+ const rethnetSteps = this._rethnetVMTracer.tracingSteps;
206
+ if (ethereumJSSteps.length !== rethnetSteps.length) {
207
+ throw new Error(`Different number of steps in tracers: ${this._ethereumJSVMTracer.tracingSteps.length} !== ${this._rethnetVMTracer.tracingSteps.length}`);
208
+ }
209
+ for (let stepIdx = 0; stepIdx < ethereumJSSteps.length; ++stepIdx) {
210
+ const ethereumJSStep = ethereumJSSteps[stepIdx];
211
+ const rethnetStep = rethnetSteps[stepIdx];
212
+ if (ethereumJSStep.depth !== rethnetStep.depth) {
213
+ console.trace(`Different steps[${stepIdx}] depth: ${ethereumJSStep.depth} !== ${rethnetStep.depth}`);
214
+ throw new Error("Different step depth");
215
+ }
216
+ if (ethereumJSStep.pc !== rethnetStep.pc) {
217
+ console.trace(`Different steps[${stepIdx}] pc: ${ethereumJSStep.pc} !== ${rethnetStep.pc}`);
218
+ throw new Error("Different step pc");
219
+ }
220
+ if (ethereumJSStep.opcode !== rethnetStep.opcode) {
221
+ console.trace(`Different steps[${stepIdx}] opcode: ${ethereumJSStep.opcode} !== ${rethnetStep.opcode}`);
222
+ throw new Error("Different step opcode");
223
+ }
224
+ if (ethereumJSStep.gasCost !== rethnetStep.gasCost) {
225
+ console.trace(`Different steps[${stepIdx}] gasCost: ${ethereumJSStep.gasCost} !== ${rethnetStep.gasCost}`);
226
+ throw new Error("Different step gasCost");
227
+ }
228
+ if (ethereumJSStep.gasLeft !== rethnetStep.gasLeft) {
229
+ console.trace(`Different steps[${stepIdx}] gasLeft: ${ethereumJSStep.gasLeft} !== ${rethnetStep.gasLeft}`);
230
+ throw new Error("Different step gasLeft");
231
+ }
232
+ const ethereumJSStack = ethereumJSStep.stack;
233
+ const rethnetStack = rethnetStep.stack;
234
+ if (ethereumJSStack.length !== rethnetStack.length) {
235
+ throw new Error(`Different number of stack elements in tracers: ${ethereumJSStack.length} !== ${rethnetStack.length}`);
236
+ }
237
+ for (let stackIdx = 0; stackIdx < ethereumJSSteps.length; ++stackIdx) {
238
+ const ethereumJSStackElement = ethereumJSStack[stackIdx];
239
+ const rethnetStackElement = rethnetStack[stackIdx];
240
+ if (ethereumJSStackElement !== rethnetStackElement) {
241
+ console.trace(`Different steps[${stepIdx}] stack[${stackIdx}]: ${ethereumJSStackElement} !== ${rethnetStackElement}`);
242
+ throw new Error("Different step stack element");
243
+ }
244
+ }
245
+ if (!ethereumJSStep.memory.equals(rethnetStep.memory)) {
246
+ console.trace(`Different steps[${stepIdx}] memory: ${ethereumJSStep.memory} !== ${rethnetStep.memory}`);
247
+ throw new Error("Different step memory");
248
+ }
249
+ if (ethereumJSStep.contract.balance !== rethnetStep.contract.balance) {
250
+ console.trace(`Different steps[${stepIdx}] contract balance: ${ethereumJSStep.contract.balance} !== ${rethnetStep.contract.balance}`);
251
+ throw new Error("Different step contract balance");
252
+ }
253
+ if (ethereumJSStep.contract.nonce !== rethnetStep.contract.nonce) {
254
+ console.trace(`Different steps[${stepIdx}] contract nonce: ${ethereumJSStep.contract.nonce} !== ${rethnetStep.contract.nonce}`);
255
+ throw new Error("Different step contract nonce");
256
+ }
257
+ // Code can be stored separately from the account in Rethnet
258
+ // const ethereumJSCode = ethereumJSStep.contract.code;
259
+ // const rethnetCode = rethnetStep.contract.code;
260
+ // if (ethereumJSCode === undefined) {
261
+ // if (rethnetCode !== undefined) {
262
+ // console.trace(
263
+ // `Different steps[${stepIdx}] contract code: ${ethereumJSCode} !== ${rethnetCode}`
264
+ // );
265
+ // throw new Error(
266
+ // "ethereumJSCode is undefined but rethnetCode is defined"
267
+ // );
268
+ // }
269
+ // } else {
270
+ // if (rethnetCode === undefined) {
271
+ // console.trace(
272
+ // `Different steps[${stepIdx}] contract code: ${ethereumJSCode} !== ${rethnetCode}`
273
+ // );
274
+ // throw new Error(
275
+ // "ethereumJSCode is defined but rethnetCode is undefined"
276
+ // );
277
+ // }
278
+ // if (!ethereumJSCode.equals(rethnetCode)) {
279
+ // console.trace(
280
+ // `Different steps[${stepIdx}] contract code: ${ethereumJSCode} !== ${rethnetCode}`
281
+ // );
282
+ // throw new Error("Different step contract code");
283
+ // }
284
+ // }
285
+ if (!ethereumJSStep.contractAddress.equals(rethnetStep.contractAddress)) {
286
+ console.trace(`Different steps[${stepIdx}] contract address: ${ethereumJSStep.contractAddress} !== ${rethnetStep.contractAddress}`);
287
+ throw new Error("Different step contract address");
288
+ }
289
+ }
290
+ // TODO: compare each step
291
+ // TODO: compare tracers tracingMessages and tracingMessageResults
292
+ return {
293
+ trace: rethnetTrace,
294
+ error: rethnetError,
295
+ };
296
+ }
297
+ clearLastError() {
298
+ this._ethereumJSVMTracer.clearLastError();
299
+ this._rethnetVMTracer.clearLastError();
300
+ }
83
301
  }
84
302
  exports.DualModeAdapter = DualModeAdapter;
85
303
  function assertEqualRunTxResults(ethereumJSResult, rethnetResult) {
86
- if (ethereumJSResult.totalGasSpent !== rethnetResult.totalGasSpent) {
87
- console.trace(`Different totalGasSpent: ${ethereumJSResult.totalGasSpent} !== ${rethnetResult.totalGasSpent}`);
304
+ if (ethereumJSResult.exit.kind !== rethnetResult.exit.kind) {
305
+ console.trace(`Different exceptionError.error: ${ethereumJSResult.exit.kind} !== ${rethnetResult.exit.kind}`);
306
+ throw new Error("Different exceptionError.error");
307
+ }
308
+ if (ethereumJSResult.gasUsed !== rethnetResult.gasUsed) {
309
+ console.trace(`Different totalGasSpent: ${ethereumJSResult.gasUsed} !== ${rethnetResult.gasUsed}`);
88
310
  throw new Error("Different totalGasSpent");
89
311
  }
90
- if (ethereumJSResult.gasRefund !== rethnetResult.gasRefund) {
91
- console.trace(`Different gasRefund: ${ethereumJSResult.gasRefund} !== ${rethnetResult.gasRefund}`);
92
- throw new Error("Different gasRefund");
312
+ const exitCode = ethereumJSResult.exit.kind;
313
+ if (exitCode === exit_1.ExitCode.SUCCESS || exitCode === exit_1.ExitCode.REVERT) {
314
+ // TODO: we only compare the return values when a contract was *not* created,
315
+ // because sometimes ethereumjs has the created bytecode in the return value
316
+ // and rethnet doesn't
317
+ // if (ethereumJSResult.createdAddress === undefined) {
318
+ if (ethereumJSResult.returnValue.toString("hex") !==
319
+ rethnetResult.returnValue.toString("hex")) {
320
+ console.trace(`Different returnValue: ${ethereumJSResult.returnValue.toString("hex")} !== ${rethnetResult.returnValue.toString("hex")}`);
321
+ throw new Error("Different returnValue");
322
+ }
323
+ // }
324
+ if (!ethereumJSResult.bloom.equals(rethnetResult.bloom)) {
325
+ console.trace(`Different bloom: ${ethereumJSResult.bloom} !== ${rethnetResult.bloom}`);
326
+ throw new Error("Different bloom");
327
+ }
328
+ if (!ethereumJSResult.receipt.bitvector.equals(rethnetResult.receipt.bitvector)) {
329
+ console.trace(`Different receipt bitvector: ${ethereumJSResult.receipt.bitvector} !== ${rethnetResult.receipt.bitvector}`);
330
+ throw new Error("Different receipt bitvector");
331
+ }
332
+ if (ethereumJSResult.receipt.cumulativeBlockGasUsed !==
333
+ rethnetResult.receipt.cumulativeBlockGasUsed) {
334
+ console.trace(`Different receipt cumulativeBlockGasUsed: ${ethereumJSResult.receipt.cumulativeBlockGasUsed} !== ${rethnetResult.receipt.cumulativeBlockGasUsed}`);
335
+ throw new Error("Different receipt cumulativeBlockGasUsed");
336
+ }
337
+ assertEqualLogs(ethereumJSResult.receipt.logs, rethnetResult.receipt.logs);
338
+ }
339
+ if (exitCode === exit_1.ExitCode.SUCCESS) {
340
+ if (ethereumJSResult.createdAddress?.toString() !==
341
+ rethnetResult.createdAddress?.toString() &&
342
+ // ethereumjs returns a createdAddress, even when reverting
343
+ !(rethnetResult.createdAddress === undefined &&
344
+ ethereumJSResult.exit.kind !== exit_1.ExitCode.SUCCESS)) {
345
+ console.trace(`Different createdAddress: ${ethereumJSResult.createdAddress?.toString()} !== ${rethnetResult.createdAddress?.toString()}`);
346
+ throw new Error("Different createdAddress");
347
+ }
93
348
  }
94
- if (ethereumJSResult.createdAddress?.toString() !==
95
- rethnetResult.createdAddress?.toString()) {
96
- console.trace(`Different createdAddress: ${ethereumJSResult.createdAddress?.toString()} !== ${rethnetResult.createdAddress?.toString()}`);
97
- throw new Error("Different createdAddress");
349
+ }
350
+ function assertEqualLogs(ethereumJSLogs, rethnetLogs) {
351
+ if (ethereumJSLogs.length !== rethnetLogs.length) {
352
+ console.trace(`Different logs length: ${ethereumJSLogs.length} !== ${rethnetLogs.length}`);
353
+ throw new Error("Different logs length");
98
354
  }
99
- if (ethereumJSResult.execResult.exceptionError?.error !==
100
- rethnetResult.execResult.exceptionError?.error) {
101
- console.trace(`Different exceptionError.error: ${ethereumJSResult.execResult.exceptionError?.error} !== ${rethnetResult.execResult.exceptionError?.error}`);
102
- throw new Error("Different exceptionError.error");
355
+ for (let logIdx = 0; logIdx < ethereumJSLogs.length; ++logIdx) {
356
+ if (!ethereumJSLogs[logIdx][0].equals(rethnetLogs[logIdx][0])) {
357
+ console.trace(`Different log[${logIdx}] address: ${ethereumJSLogs[logIdx][0]} !== ${rethnetLogs[logIdx][0]}`);
358
+ throw new Error("Different log address");
359
+ }
360
+ const ethereumJSTopics = ethereumJSLogs[logIdx][1];
361
+ const rethnetTopics = rethnetLogs[logIdx][1];
362
+ if (ethereumJSTopics.length !== rethnetTopics.length) {
363
+ console.trace(`Different log[${logIdx}] topics length: ${ethereumJSTopics.length} !== ${rethnetTopics.length}`);
364
+ throw new Error("Different log topics length");
365
+ }
366
+ for (let topicIdx = 0; topicIdx < ethereumJSTopics.length; ++topicIdx) {
367
+ if (!ethereumJSTopics[topicIdx].equals(rethnetTopics[topicIdx])) {
368
+ console.trace(`Different log[${logIdx}] topic[${topicIdx}]: ${ethereumJSTopics[topicIdx]} !== ${rethnetTopics[topicIdx]}`);
369
+ throw new Error("Different log topic");
370
+ }
371
+ }
372
+ if (!ethereumJSLogs[logIdx][2].equals(rethnetLogs[logIdx][2])) {
373
+ console.trace(`Different log[${logIdx}] data: ${ethereumJSLogs[logIdx][2]} !== ${rethnetLogs[logIdx][2]}`);
374
+ throw new Error("Different log data");
375
+ }
103
376
  }
104
- if (ethereumJSResult.execResult.exceptionError?.errorType !==
105
- rethnetResult.execResult.exceptionError?.errorType) {
106
- console.trace(`Different exceptionError.errorType: ${ethereumJSResult.execResult.exceptionError?.errorType} !== ${rethnetResult.execResult.exceptionError?.errorType}`);
107
- throw new Error("Different exceptionError.errorType");
108
- }
109
- // TODO: we only compare the return values when a contract was *not* created,
110
- // because sometimes ethereumjs has the created bytecode in the return value
111
- // and rethnet doesn't
112
- if (ethereumJSResult.createdAddress === undefined) {
113
- if (ethereumJSResult.execResult.returnValue.toString("hex") !==
114
- rethnetResult.execResult.returnValue.toString("hex")) {
115
- console.trace(`Different returnValue: ${ethereumJSResult.execResult.returnValue.toString("hex")} !== ${rethnetResult.execResult.returnValue.toString("hex")}`);
116
- throw new Error("Different returnValue");
377
+ }
378
+ function assertEqualAccounts(address, ethereumJSAccount, rethnetAccount) {
379
+ if (ethereumJSAccount.balance !== rethnetAccount.balance) {
380
+ console.trace(`Account: ${address}`);
381
+ console.trace(`Different balance: ${ethereumJSAccount.balance} !== ${rethnetAccount.balance}`);
382
+ throw new Error("Different balance");
383
+ }
384
+ if (!ethereumJSAccount.codeHash.equals(rethnetAccount.codeHash)) {
385
+ console.trace(`Different codeHash: ${ethereumJSAccount.codeHash} !== ${rethnetAccount.codeHash}`);
386
+ throw new Error("Different codeHash");
387
+ }
388
+ if (ethereumJSAccount.nonce !== rethnetAccount.nonce) {
389
+ console.trace(`Different nonce: ${ethereumJSAccount.nonce} !== ${rethnetAccount.nonce}`);
390
+ throw new Error("Different nonce");
391
+ }
392
+ if (!ethereumJSAccount.storageRoot.equals(rethnetAccount.storageRoot)) {
393
+ // TODO re-enable
394
+ // console.trace(
395
+ // `Different storageRoot: ${ethereumJSAccount.storageRoot.toString(
396
+ // "hex"
397
+ // )} !== ${rethnetAccount.storageRoot.toString("hex")}`
398
+ // );
399
+ // throw new Error("Different storageRoot");
400
+ }
401
+ }
402
+ function assertEqualTraces(ethereumJSTrace, rethnetTrace) {
403
+ // both traces are defined
404
+ if (ethereumJSTrace.depth !== rethnetTrace.depth) {
405
+ throw new Error(`Different depth: ${ethereumJSTrace.depth} !== ${rethnetTrace.depth}`);
406
+ }
407
+ if (ethereumJSTrace.exit.kind !== rethnetTrace.exit.kind) {
408
+ throw new Error(`Different exit: ${ethereumJSTrace.exit.kind} !== ${rethnetTrace.exit.kind}`);
409
+ }
410
+ if (ethereumJSTrace.gasUsed !== rethnetTrace.gasUsed) {
411
+ throw new Error(`Different gasUsed: ${ethereumJSTrace.gasUsed} !== ${rethnetTrace.gasUsed}`);
412
+ }
413
+ if (!ethereumJSTrace.returnData.equals(rethnetTrace.returnData)) {
414
+ throw new Error(`Different returnData: ${ethereumJSTrace.returnData} !== ${rethnetTrace.returnData}`);
415
+ }
416
+ if (ethereumJSTrace.value !== rethnetTrace.value) {
417
+ throw new Error(`Different value: ${ethereumJSTrace.value} !== ${rethnetTrace.value}`);
418
+ }
419
+ if ((0, message_trace_1.isPrecompileTrace)(ethereumJSTrace)) {
420
+ if (!(0, message_trace_1.isPrecompileTrace)(rethnetTrace)) {
421
+ throw new Error(`ethereumJSTrace is a precompiled trace but rethnetTrace is not`);
422
+ }
423
+ // Both traces are precompile traces
424
+ if (ethereumJSTrace.precompile !== rethnetTrace.precompile) {
425
+ throw new Error(`Different precompile: ${ethereumJSTrace.precompile} !== ${rethnetTrace.precompile}`);
426
+ }
427
+ if (!ethereumJSTrace.calldata.equals(rethnetTrace.calldata)) {
428
+ throw new Error(`Different calldata: ${ethereumJSTrace.calldata} !== ${rethnetTrace.calldata}`);
429
+ }
430
+ }
431
+ else {
432
+ if ((0, message_trace_1.isPrecompileTrace)(rethnetTrace)) {
433
+ throw new Error(`ethereumJSTrace is a precompiled trace but ethereumJSTrace is not`);
434
+ }
435
+ // Both traces are NOT precompile traces
436
+ if (!ethereumJSTrace.code.equals(rethnetTrace.code)) {
437
+ console.log("ethereumjs:", ethereumJSTrace);
438
+ console.log("rethnet:", rethnetTrace);
439
+ throw new Error(`Different code: ${ethereumJSTrace.code.toString("hex")} !== ${rethnetTrace.code.toString("hex")}`);
440
+ }
441
+ if (ethereumJSTrace.steps.length !== rethnetTrace.steps.length) {
442
+ throw new Error(`Different steps length: ${ethereumJSTrace.steps.length} !== ${rethnetTrace.steps.length}`);
443
+ }
444
+ for (let stepIdx = 0; stepIdx < ethereumJSTrace.steps.length; stepIdx++) {
445
+ const ethereumJSStep = ethereumJSTrace.steps[stepIdx];
446
+ const rethnetStep = rethnetTrace.steps[stepIdx];
447
+ if ((0, message_trace_1.isEvmStep)(ethereumJSStep)) {
448
+ // if (stepIdx >= rethnetTrace.steps.length) {
449
+ // console.log("code:", ethereumJSTrace.code);
450
+ // console.log(stepIdx);
451
+ // console.log(ethereumJSStep);
452
+ // console.log("opcode:", ethereumJSTrace.code[ethereumJSStep.pc]);
453
+ // continue;
454
+ // }
455
+ if (!(0, message_trace_1.isEvmStep)(rethnetStep)) {
456
+ throw new Error(`ethereumJSStep '${stepIdx}' is an EVM step but rethnetStep '${stepIdx}' is not`);
457
+ }
458
+ if (ethereumJSStep.pc !== rethnetStep.pc) {
459
+ throw new Error(`Different step[${stepIdx}]: ${ethereumJSStep.pc} !== ${rethnetStep.pc}`);
460
+ }
461
+ }
462
+ else {
463
+ if ((0, message_trace_1.isEvmStep)(rethnetStep)) {
464
+ throw new Error(`rethnetStep '${stepIdx}' is an EVM step but ethereumJSStep '${stepIdx}' is not`);
465
+ }
466
+ assertEqualTraces(ethereumJSStep, rethnetStep);
467
+ }
468
+ }
469
+ if (ethereumJSTrace.bytecode === undefined) {
470
+ if (rethnetTrace.bytecode !== undefined) {
471
+ throw new Error("ethereumJSTrace.bytecode is undefined but rethnetTrace.bytecode is defined");
472
+ }
473
+ }
474
+ else {
475
+ if (rethnetTrace.bytecode === undefined) {
476
+ throw new Error("ethereumJSTrace.bytecode is defined but rethnetTrace.bytecode is undefined");
477
+ }
478
+ // Both traces contain bytecode
479
+ if (!ethereumJSTrace.bytecode.equals(rethnetTrace.bytecode)) {
480
+ throw new Error(`Different bytecode: ${ethereumJSTrace.bytecode} !== ${rethnetTrace.bytecode}`);
481
+ }
482
+ }
483
+ if (ethereumJSTrace.numberOfSubtraces !== rethnetTrace.numberOfSubtraces) {
484
+ throw new Error(`Different numberOfSubtraces: ${ethereumJSTrace.numberOfSubtraces} !== ${rethnetTrace.numberOfSubtraces}`);
117
485
  }
118
486
  }
119
487
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dual.js","sourceRoot":"","sources":["../../../../src/internal/hardhat-network/provider/vm/dual.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dual.js","sourceRoot":"","sources":["../../../../src/internal/hardhat-network/provider/vm/dual.ts"],"names":[],"mappings":"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"}