hardhat 2.11.0-dev.0 → 2.11.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 (406) hide show
  1. package/builtin-tasks/clean.js +2 -1
  2. package/builtin-tasks/clean.js.map +1 -1
  3. package/builtin-tasks/compile.js +52 -95
  4. package/builtin-tasks/compile.js.map +1 -1
  5. package/builtin-tasks/flatten.js +2 -21
  6. package/builtin-tasks/flatten.js.map +1 -1
  7. package/builtin-tasks/node.js +1 -1
  8. package/builtin-tasks/node.js.map +1 -1
  9. package/builtin-tasks/test.js +3 -3
  10. package/builtin-tasks/test.js.map +1 -1
  11. package/builtin-tasks/utils/solidity-files-cache.d.ts.map +1 -1
  12. package/builtin-tasks/utils/solidity-files-cache.js +5 -6
  13. package/builtin-tasks/utils/solidity-files-cache.js.map +1 -1
  14. package/internal/artifacts.d.ts +3 -11
  15. package/internal/artifacts.d.ts.map +1 -1
  16. package/internal/artifacts.js +266 -133
  17. package/internal/artifacts.js.map +1 -1
  18. package/internal/cli/cli.js +26 -12
  19. package/internal/cli/cli.js.map +1 -1
  20. package/internal/core/config/config-loading.js +2 -2
  21. package/internal/core/config/config-loading.js.map +1 -1
  22. package/internal/core/config/config-resolution.d.ts.map +1 -1
  23. package/internal/core/config/config-resolution.js +11 -31
  24. package/internal/core/config/config-resolution.js.map +1 -1
  25. package/internal/core/config/default-config.js +1 -1
  26. package/internal/core/config/default-config.js.map +1 -1
  27. package/internal/core/errors-list.d.ts +7 -0
  28. package/internal/core/errors-list.d.ts.map +1 -1
  29. package/internal/core/errors-list.js +28 -11
  30. package/internal/core/errors-list.js.map +1 -1
  31. package/internal/core/errors.d.ts +2 -1
  32. package/internal/core/errors.d.ts.map +1 -1
  33. package/internal/core/errors.js +5 -1
  34. package/internal/core/errors.js.map +1 -1
  35. package/internal/core/execution-mode.d.ts.map +1 -1
  36. package/internal/core/execution-mode.js +2 -21
  37. package/internal/core/execution-mode.js.map +1 -1
  38. package/internal/core/flamegraph.d.ts +4 -0
  39. package/internal/core/flamegraph.d.ts.map +1 -1
  40. package/internal/core/flamegraph.js +13 -3
  41. package/internal/core/flamegraph.js.map +1 -1
  42. package/internal/core/jsonrpc/types/base-types.d.ts.map +1 -1
  43. package/internal/core/jsonrpc/types/base-types.js +12 -12
  44. package/internal/core/jsonrpc/types/base-types.js.map +1 -1
  45. package/internal/core/params/hardhat-params.d.ts.map +1 -1
  46. package/internal/core/params/hardhat-params.js +18 -0
  47. package/internal/core/params/hardhat-params.js.map +1 -1
  48. package/internal/core/providers/accounts.js +9 -9
  49. package/internal/core/providers/accounts.js.map +1 -1
  50. package/internal/core/providers/construction.d.ts.map +1 -1
  51. package/internal/core/providers/construction.js +5 -6
  52. package/internal/core/providers/construction.js.map +1 -1
  53. package/internal/core/providers/gas-providers.d.ts +2 -2
  54. package/internal/core/providers/util.js +1 -1
  55. package/internal/core/providers/util.js.map +1 -1
  56. package/internal/core/runtime-environment.d.ts +6 -0
  57. package/internal/core/runtime-environment.d.ts.map +1 -1
  58. package/internal/core/runtime-environment.js +72 -6
  59. package/internal/core/runtime-environment.js.map +1 -1
  60. package/internal/core/typescript-support.d.ts +1 -1
  61. package/internal/core/typescript-support.d.ts.map +1 -1
  62. package/internal/core/typescript-support.js +6 -2
  63. package/internal/core/typescript-support.js.map +1 -1
  64. package/internal/hardhat-network/jsonrpc/client.d.ts +1 -1
  65. package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
  66. package/internal/hardhat-network/jsonrpc/client.js +10 -10
  67. package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
  68. package/internal/hardhat-network/provider/BlockchainBase.d.ts +4 -4
  69. package/internal/hardhat-network/provider/BlockchainBase.d.ts.map +1 -1
  70. package/internal/hardhat-network/provider/BlockchainBase.js +31 -12
  71. package/internal/hardhat-network/provider/BlockchainBase.js.map +1 -1
  72. package/internal/hardhat-network/provider/BlockchainData.d.ts +3 -3
  73. package/internal/hardhat-network/provider/BlockchainData.d.ts.map +1 -1
  74. package/internal/hardhat-network/provider/BlockchainData.js +15 -15
  75. package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
  76. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts +3 -3
  77. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts.map +1 -1
  78. package/internal/hardhat-network/provider/HardhatBlockchain.js +2 -2
  79. package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
  80. package/internal/hardhat-network/provider/PoolState.d.ts +1 -1
  81. package/internal/hardhat-network/provider/PoolState.d.ts.map +1 -1
  82. package/internal/hardhat-network/provider/PoolState.js +21 -2
  83. package/internal/hardhat-network/provider/PoolState.js.map +1 -1
  84. package/internal/hardhat-network/provider/TransactionQueue.d.ts +1 -1
  85. package/internal/hardhat-network/provider/TransactionQueue.d.ts.map +1 -1
  86. package/internal/hardhat-network/provider/TransactionQueue.js +22 -3
  87. package/internal/hardhat-network/provider/TransactionQueue.js.map +1 -1
  88. package/internal/hardhat-network/provider/TxPool.d.ts +4 -4
  89. package/internal/hardhat-network/provider/TxPool.d.ts.map +1 -1
  90. package/internal/hardhat-network/provider/TxPool.js +35 -16
  91. package/internal/hardhat-network/provider/TxPool.js.map +1 -1
  92. package/internal/hardhat-network/provider/ethereumjs-workarounds.js +4 -4
  93. package/internal/hardhat-network/provider/ethereumjs-workarounds.js.map +1 -1
  94. package/internal/hardhat-network/provider/filter.d.ts +1 -1
  95. package/internal/hardhat-network/provider/filter.d.ts.map +1 -1
  96. package/internal/hardhat-network/provider/filter.js +3 -3
  97. package/internal/hardhat-network/provider/filter.js.map +1 -1
  98. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts +3 -3
  99. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -1
  100. package/internal/hardhat-network/provider/fork/ForkBlockchain.js +13 -12
  101. package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
  102. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts +3 -5
  103. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts.map +1 -1
  104. package/internal/hardhat-network/provider/fork/ForkStateManager.js +36 -40
  105. package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
  106. package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts +1 -1
  107. package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts.map +1 -1
  108. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts +2 -2
  109. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts.map +1 -1
  110. package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -1
  111. package/internal/hardhat-network/provider/modules/eth.d.ts +1 -1
  112. package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
  113. package/internal/hardhat-network/provider/modules/eth.js +22 -22
  114. package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
  115. package/internal/hardhat-network/provider/modules/hardhat.d.ts +2 -0
  116. package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -1
  117. package/internal/hardhat-network/provider/modules/hardhat.js +20 -6
  118. package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
  119. package/internal/hardhat-network/provider/modules/logger.d.ts +2 -2
  120. package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
  121. package/internal/hardhat-network/provider/modules/logger.js +14 -14
  122. package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
  123. package/internal/hardhat-network/provider/modules/net.d.ts +1 -1
  124. package/internal/hardhat-network/provider/modules/net.d.ts.map +1 -1
  125. package/internal/hardhat-network/provider/modules/personal.js +3 -3
  126. package/internal/hardhat-network/provider/modules/personal.js.map +1 -1
  127. package/internal/hardhat-network/provider/modules/web3.d.ts.map +1 -1
  128. package/internal/hardhat-network/provider/modules/web3.js +4 -5
  129. package/internal/hardhat-network/provider/modules/web3.js.map +1 -1
  130. package/internal/hardhat-network/provider/node-types.d.ts +4 -4
  131. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
  132. package/internal/hardhat-network/provider/node.d.ts +5 -4
  133. package/internal/hardhat-network/provider/node.d.ts.map +1 -1
  134. package/internal/hardhat-network/provider/node.js +71 -49
  135. package/internal/hardhat-network/provider/node.js.map +1 -1
  136. package/internal/hardhat-network/provider/output.d.ts +4 -4
  137. package/internal/hardhat-network/provider/output.d.ts.map +1 -1
  138. package/internal/hardhat-network/provider/output.js +24 -5
  139. package/internal/hardhat-network/provider/output.js.map +1 -1
  140. package/internal/hardhat-network/provider/provider.d.ts +2 -2
  141. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  142. package/internal/hardhat-network/provider/provider.js +3 -3
  143. package/internal/hardhat-network/provider/provider.js.map +1 -1
  144. package/internal/hardhat-network/provider/return-data.d.ts +1 -1
  145. package/internal/hardhat-network/provider/return-data.d.ts.map +1 -1
  146. package/internal/hardhat-network/provider/return-data.js +5 -4
  147. package/internal/hardhat-network/provider/return-data.js.map +1 -1
  148. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts +4 -4
  149. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
  150. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +8 -8
  151. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
  152. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts +3 -3
  153. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
  154. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +8 -8
  155. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
  156. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts +3 -3
  157. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
  158. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +5 -5
  159. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
  160. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts +4 -4
  161. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts.map +1 -1
  162. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +25 -6
  163. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
  164. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts +3 -3
  165. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts.map +1 -1
  166. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js +25 -6
  167. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js.map +1 -1
  168. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts +3 -3
  169. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts.map +1 -1
  170. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js +2 -2
  171. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js.map +1 -1
  172. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts +2 -2
  173. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts.map +1 -1
  174. package/internal/hardhat-network/provider/utils/makeAccount.d.ts +1 -1
  175. package/internal/hardhat-network/provider/utils/makeAccount.d.ts.map +1 -1
  176. package/internal/hardhat-network/provider/utils/makeAccount.js +4 -4
  177. package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -1
  178. package/internal/hardhat-network/provider/utils/makeCommon.d.ts +1 -1
  179. package/internal/hardhat-network/provider/utils/makeCommon.d.ts.map +1 -1
  180. package/internal/hardhat-network/provider/utils/makeCommon.js +2 -2
  181. package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
  182. package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts +1 -1
  183. package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts.map +1 -1
  184. package/internal/hardhat-network/provider/utils/makeStateTrie.js +4 -4
  185. package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
  186. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +3 -3
  187. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
  188. package/internal/hardhat-network/provider/utils/putGenesisBlock.js +4 -4
  189. package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
  190. package/internal/hardhat-network/provider/utils/random.d.ts +2 -1
  191. package/internal/hardhat-network/provider/utils/random.d.ts.map +1 -1
  192. package/internal/hardhat-network/provider/utils/random.js +10 -9
  193. package/internal/hardhat-network/provider/utils/random.js.map +1 -1
  194. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js +21 -2
  195. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js.map +1 -1
  196. package/internal/hardhat-network/provider/utils/txMapToArray.d.ts +1 -1
  197. package/internal/hardhat-network/provider/utils/txMapToArray.d.ts.map +1 -1
  198. package/internal/hardhat-network/stack-traces/consoleLogger.js +45 -45
  199. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  200. package/internal/hardhat-network/stack-traces/constants.d.ts +1 -1
  201. package/internal/hardhat-network/stack-traces/constants.d.ts.map +1 -1
  202. package/internal/hardhat-network/stack-traces/constants.js +1 -1
  203. package/internal/hardhat-network/stack-traces/constants.js.map +1 -1
  204. package/internal/hardhat-network/stack-traces/contracts-identifier.js +2 -2
  205. package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
  206. package/internal/hardhat-network/stack-traces/debug.js +13 -13
  207. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  208. package/internal/hardhat-network/stack-traces/error-inferrer.js +2 -2
  209. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
  210. package/internal/hardhat-network/stack-traces/message-trace.d.ts +1 -1
  211. package/internal/hardhat-network/stack-traces/message-trace.d.ts.map +1 -1
  212. package/internal/hardhat-network/stack-traces/model.js +6 -6
  213. package/internal/hardhat-network/stack-traces/model.js.map +1 -1
  214. package/internal/hardhat-network/stack-traces/panic-errors.d.ts +1 -1
  215. package/internal/hardhat-network/stack-traces/panic-errors.js +9 -9
  216. package/internal/hardhat-network/stack-traces/panic-errors.js.map +1 -1
  217. package/internal/hardhat-network/stack-traces/solidity-errors.js +3 -3
  218. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  219. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +1 -1
  220. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts +0 -2
  221. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
  222. package/internal/hardhat-network/stack-traces/solidityTracer.js +2 -4
  223. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  224. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts +1 -1
  225. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts.map +1 -1
  226. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +27 -25
  227. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
  228. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +2 -2
  229. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
  230. package/internal/hardhat-network/stack-traces/vm-tracer.js +15 -12
  231. package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
  232. package/internal/lib/hardhat-lib.d.ts.map +1 -1
  233. package/internal/lib/hardhat-lib.js +0 -2
  234. package/internal/lib/hardhat-lib.js.map +1 -1
  235. package/internal/solidity/compilation-job.d.ts.map +1 -1
  236. package/internal/solidity/compilation-job.js +6 -7
  237. package/internal/solidity/compilation-job.js.map +1 -1
  238. package/internal/solidity/compiler/downloader.d.ts +66 -40
  239. package/internal/solidity/compiler/downloader.d.ts.map +1 -1
  240. package/internal/solidity/compiler/downloader.js +180 -154
  241. package/internal/solidity/compiler/downloader.js.map +1 -1
  242. package/internal/solidity/compiler/index.d.ts +8 -4
  243. package/internal/solidity/compiler/index.d.ts.map +1 -1
  244. package/internal/solidity/compiler/index.js +1 -1
  245. package/internal/solidity/compiler/index.js.map +1 -1
  246. package/internal/solidity/dependencyGraph.d.ts.map +1 -1
  247. package/internal/solidity/dependencyGraph.js +3 -5
  248. package/internal/solidity/dependencyGraph.js.map +1 -1
  249. package/internal/solidity/parse.d.ts.map +1 -1
  250. package/internal/solidity/parse.js +2 -58
  251. package/internal/solidity/parse.js.map +1 -1
  252. package/internal/solidity/resolver.d.ts +1 -0
  253. package/internal/solidity/resolver.d.ts.map +1 -1
  254. package/internal/solidity/resolver.js +33 -8
  255. package/internal/solidity/resolver.js.map +1 -1
  256. package/internal/util/bigint.d.ts +13 -24
  257. package/internal/util/bigint.d.ts.map +1 -1
  258. package/internal/util/bigint.js +22 -29
  259. package/internal/util/bigint.js.map +1 -1
  260. package/internal/util/download.d.ts.map +1 -1
  261. package/internal/util/download.js +1 -1
  262. package/internal/util/download.js.map +1 -1
  263. package/internal/util/fs-utils.d.ts +26 -9
  264. package/internal/util/fs-utils.d.ts.map +1 -1
  265. package/internal/util/fs-utils.js +111 -68
  266. package/internal/util/fs-utils.js.map +1 -1
  267. package/internal/util/glob.d.ts +13 -0
  268. package/internal/util/glob.d.ts.map +1 -1
  269. package/internal/util/glob.js +13 -0
  270. package/internal/util/glob.js.map +1 -1
  271. package/internal/util/keccak.d.ts +3 -0
  272. package/internal/util/keccak.d.ts.map +1 -0
  273. package/internal/util/keccak.js +12 -0
  274. package/internal/util/keccak.js.map +1 -0
  275. package/internal/util/scripts-runner.d.ts.map +1 -1
  276. package/internal/util/scripts-runner.js +7 -4
  277. package/internal/util/scripts-runner.js.map +1 -1
  278. package/package.json +15 -15
  279. package/register.js +1 -3
  280. package/register.js.map +1 -1
  281. package/sample-projects/javascript/contracts/Lock.sol +3 -3
  282. package/sample-projects/typescript/contracts/Lock.sol +3 -3
  283. package/src/builtin-tasks/clean.ts +9 -6
  284. package/src/builtin-tasks/compile.ts +96 -128
  285. package/src/builtin-tasks/flatten.ts +2 -3
  286. package/src/builtin-tasks/node.ts +2 -2
  287. package/src/builtin-tasks/test.ts +7 -3
  288. package/src/builtin-tasks/utils/solidity-files-cache.ts +9 -8
  289. package/src/internal/artifacts.ts +392 -182
  290. package/src/internal/cli/cli.ts +43 -17
  291. package/src/internal/core/config/config-loading.ts +1 -1
  292. package/src/internal/core/config/config-resolution.ts +12 -24
  293. package/src/internal/core/config/default-config.ts +1 -1
  294. package/src/internal/core/errors-list.ts +29 -13
  295. package/src/internal/core/errors.ts +10 -2
  296. package/src/internal/core/execution-mode.ts +2 -3
  297. package/src/internal/core/flamegraph.ts +270 -0
  298. package/src/internal/core/jsonrpc/types/base-types.ts +7 -3
  299. package/src/internal/core/params/hardhat-params.ts +18 -0
  300. package/src/internal/core/providers/accounts.ts +8 -8
  301. package/src/internal/core/providers/construction.ts +10 -8
  302. package/src/internal/core/providers/gas-providers.ts +2 -2
  303. package/src/internal/core/providers/util.ts +1 -1
  304. package/src/internal/core/runtime-environment.ts +103 -10
  305. package/src/internal/core/task-profiling.ts +56 -0
  306. package/src/internal/core/typescript-support.ts +11 -2
  307. package/src/internal/hardhat-network/jsonrpc/client.ts +1 -1
  308. package/src/internal/hardhat-network/provider/BlockchainBase.ts +6 -6
  309. package/src/internal/hardhat-network/provider/BlockchainData.ts +5 -5
  310. package/src/internal/hardhat-network/provider/HardhatBlockchain.ts +4 -4
  311. package/src/internal/hardhat-network/provider/PoolState.ts +2 -2
  312. package/src/internal/hardhat-network/provider/TransactionQueue.ts +2 -2
  313. package/src/internal/hardhat-network/provider/TxPool.ts +12 -5
  314. package/src/internal/hardhat-network/provider/ethereumjs-workarounds.ts +3 -3
  315. package/src/internal/hardhat-network/provider/filter.ts +2 -2
  316. package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +10 -10
  317. package/src/internal/hardhat-network/provider/fork/ForkStateManager.ts +12 -18
  318. package/src/internal/hardhat-network/provider/fork/rpcToBlockData.ts +1 -1
  319. package/src/internal/hardhat-network/provider/fork/rpcToTxData.ts +5 -2
  320. package/src/internal/hardhat-network/provider/modules/eth.ts +10 -6
  321. package/src/internal/hardhat-network/provider/modules/hardhat.ts +25 -1
  322. package/src/internal/hardhat-network/provider/modules/logger.ts +3 -3
  323. package/src/internal/hardhat-network/provider/modules/net.ts +1 -1
  324. package/src/internal/hardhat-network/provider/modules/personal.ts +1 -1
  325. package/src/internal/hardhat-network/provider/modules/web3.ts +4 -6
  326. package/src/internal/hardhat-network/provider/node-types.ts +6 -6
  327. package/src/internal/hardhat-network/provider/node.ts +25 -12
  328. package/src/internal/hardhat-network/provider/output.ts +6 -6
  329. package/src/internal/hardhat-network/provider/provider.ts +7 -6
  330. package/src/internal/hardhat-network/provider/return-data.ts +9 -5
  331. package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +9 -5
  332. package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +8 -4
  333. package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +4 -4
  334. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +8 -5
  335. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.ts +4 -4
  336. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.ts +3 -3
  337. package/src/internal/hardhat-network/provider/types/HardhatBlockchainInterface.ts +2 -2
  338. package/src/internal/hardhat-network/provider/utils/makeAccount.ts +6 -1
  339. package/src/internal/hardhat-network/provider/utils/makeCommon.ts +1 -1
  340. package/src/internal/hardhat-network/provider/utils/makeStateTrie.ts +7 -3
  341. package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +6 -6
  342. package/src/internal/hardhat-network/provider/utils/random.ts +17 -14
  343. package/src/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.ts +1 -1
  344. package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +1 -1
  345. package/src/internal/hardhat-network/stack-traces/constants.ts +2 -0
  346. package/src/internal/hardhat-network/stack-traces/contracts-identifier.ts +1 -1
  347. package/src/internal/hardhat-network/stack-traces/debug.ts +1 -1
  348. package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +3 -3
  349. package/src/internal/hardhat-network/stack-traces/message-trace.ts +1 -1
  350. package/src/internal/hardhat-network/stack-traces/model.ts +1 -1
  351. package/src/internal/hardhat-network/stack-traces/panic-errors.ts +11 -11
  352. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +1 -1
  353. package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +1 -1
  354. package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +1 -4
  355. package/src/internal/hardhat-network/stack-traces/vm-debug-tracer.ts +31 -17
  356. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +29 -14
  357. package/src/internal/lib/hardhat-lib.ts +0 -3
  358. package/src/internal/solidity/compilation-job.ts +11 -11
  359. package/src/internal/solidity/compiler/downloader.ts +271 -243
  360. package/src/internal/solidity/compiler/index.ts +13 -7
  361. package/src/internal/solidity/dependencyGraph.ts +12 -8
  362. package/src/internal/solidity/parse.ts +4 -70
  363. package/src/internal/solidity/resolver.ts +36 -8
  364. package/src/internal/util/bigint.ts +25 -43
  365. package/src/internal/util/download.ts +2 -2
  366. package/src/internal/util/fs-utils.ts +223 -0
  367. package/src/internal/util/glob.ts +13 -0
  368. package/src/internal/util/keccak.ts +5 -0
  369. package/src/internal/util/scripts-runner.ts +13 -4
  370. package/src/internal/util/wei-values.ts +1 -1
  371. package/src/internal/{hardhat-network/vendor → vendor}/await-semaphore/index.ts +0 -0
  372. package/src/profiling.ts +37 -0
  373. package/src/register.ts +1 -4
  374. package/src/types/artifacts.ts +21 -0
  375. package/src/types/config.ts +7 -7
  376. package/src/types/runtime.ts +2 -0
  377. package/src/utils/source-names.ts +36 -26
  378. package/types/artifacts.d.ts +19 -0
  379. package/types/artifacts.d.ts.map +1 -1
  380. package/types/config.d.ts +7 -7
  381. package/types/runtime.d.ts +2 -0
  382. package/types/runtime.d.ts.map +1 -1
  383. package/utils/source-names.d.ts.map +1 -1
  384. package/utils/source-names.js +25 -36
  385. package/utils/source-names.js.map +1 -1
  386. package/internal/hardhat-network/provider/fork/random.d.ts +0 -7
  387. package/internal/hardhat-network/provider/fork/random.d.ts.map +0 -1
  388. package/internal/hardhat-network/provider/fork/random.js +0 -32
  389. package/internal/hardhat-network/provider/fork/random.js.map +0 -1
  390. package/internal/hardhat-network/provider/utils/bnToHex.d.ts +0 -3
  391. package/internal/hardhat-network/provider/utils/bnToHex.d.ts.map +0 -1
  392. package/internal/hardhat-network/provider/utils/bnToHex.js +0 -9
  393. package/internal/hardhat-network/provider/utils/bnToHex.js.map +0 -1
  394. package/internal/hardhat-network/provider/utils/makeForkCommon.d.ts +0 -4
  395. package/internal/hardhat-network/provider/utils/makeForkCommon.d.ts.map +0 -1
  396. package/internal/hardhat-network/provider/utils/makeForkCommon.js +0 -16
  397. package/internal/hardhat-network/provider/utils/makeForkCommon.js.map +0 -1
  398. package/internal/hardhat-network/vendor/await-semaphore/index.d.ts +0 -12
  399. package/internal/hardhat-network/vendor/await-semaphore/index.d.ts.map +0 -1
  400. package/internal/hardhat-network/vendor/await-semaphore/index.js +0 -64
  401. package/internal/hardhat-network/vendor/await-semaphore/index.js.map +0 -1
  402. package/internal/util/antlr-prototype-pollution-workaround.d.ts +0 -16
  403. package/internal/util/antlr-prototype-pollution-workaround.d.ts.map +0 -1
  404. package/internal/util/antlr-prototype-pollution-workaround.js +0 -22
  405. package/internal/util/antlr-prototype-pollution-workaround.js.map +0 -1
  406. package/src/internal/util/antlr-prototype-pollution-workaround.ts +0 -17
@@ -4,12 +4,20 @@ import debug from "debug";
4
4
  import semver from "semver";
5
5
  import "source-map-support/register";
6
6
 
7
- import { TASK_COMPILE, TASK_HELP } from "../../builtin-tasks/task-names";
7
+ import {
8
+ TASK_COMPILE,
9
+ TASK_HELP,
10
+ TASK_TEST,
11
+ } from "../../builtin-tasks/task-names";
8
12
  import { TaskArguments } from "../../types";
9
13
  import { HARDHAT_NAME } from "../constants";
10
14
  import { HardhatContext } from "../context";
11
15
  import { loadConfigAndTasks } from "../core/config/config-loading";
12
- import { HardhatError, HardhatPluginError } from "../core/errors";
16
+ import {
17
+ assertHardhatInvariant,
18
+ HardhatError,
19
+ HardhatPluginError,
20
+ } from "../core/errors";
13
21
  import { ERRORS, getErrorCode } from "../core/errors-list";
14
22
  import { isHardhatInstalledLocallyOrLinked } from "../core/execution-mode";
15
23
  import { getEnvHardhatArguments } from "../core/params/env-variables";
@@ -27,7 +35,7 @@ import {
27
35
  } from "../util/global-dir";
28
36
  import { getPackageJson, PackageJson } from "../util/packageInfo";
29
37
 
30
- import { applyWorkaround } from "../util/antlr-prototype-pollution-workaround";
38
+ import { saveFlamegraph } from "../core/flamegraph";
31
39
  import { Analytics } from "./analytics";
32
40
  import { ArgumentsParser } from "./ArgumentsParser";
33
41
  import { enableEmoji } from "./emoji";
@@ -41,8 +49,6 @@ import {
41
49
 
42
50
  const log = debug("hardhat:core:cli");
43
51
 
44
- applyWorkaround();
45
-
46
52
  const ANALYTICS_SLOW_TASK_THRESHOLD = 300;
47
53
 
48
54
  async function printVersionMessage(packageJson: PackageJson) {
@@ -167,7 +173,13 @@ async function main() {
167
173
  }
168
174
 
169
175
  if (willRunWithTypescript(hardhatArguments.config)) {
170
- loadTsNode(hardhatArguments.tsconfig);
176
+ loadTsNode(hardhatArguments.tsconfig, hardhatArguments.typecheck);
177
+ } else {
178
+ if (hardhatArguments.typecheck === true) {
179
+ throw new HardhatError(
180
+ ERRORS.ARGUMENTS.TYPECHECK_USED_IN_JAVASCRIPT_PROJECT
181
+ );
182
+ }
171
183
  }
172
184
 
173
185
  let taskName = parsedTaskName ?? TASK_HELP;
@@ -251,23 +263,37 @@ async function main() {
251
263
 
252
264
  ctx.setHardhatRuntimeEnvironment(env);
253
265
 
254
- const timestampBeforeRun = new Date().getTime();
266
+ try {
267
+ const timestampBeforeRun = new Date().getTime();
255
268
 
256
- await env.run(taskName, taskArguments);
269
+ await env.run(taskName, taskArguments);
257
270
 
258
- const timestampAfterRun = new Date().getTime();
259
- if (
260
- timestampAfterRun - timestampBeforeRun >
261
- ANALYTICS_SLOW_TASK_THRESHOLD
262
- ) {
263
- await hitPromise;
264
- } else {
265
- abortAnalytics();
271
+ const timestampAfterRun = new Date().getTime();
272
+
273
+ if (
274
+ timestampAfterRun - timestampBeforeRun >
275
+ ANALYTICS_SLOW_TASK_THRESHOLD &&
276
+ taskName !== TASK_COMPILE
277
+ ) {
278
+ await hitPromise;
279
+ } else {
280
+ abortAnalytics();
281
+ }
282
+ } finally {
283
+ if (hardhatArguments.flamegraph === true) {
284
+ assertHardhatInvariant(
285
+ env.entryTaskProfile !== undefined,
286
+ "--flamegraph was set but entryTaskProfile is not defined"
287
+ );
288
+
289
+ const flamegraphPath = saveFlamegraph(env.entryTaskProfile);
290
+ console.log("Created flamegraph file", flamegraphPath);
291
+ }
266
292
  }
267
293
 
268
294
  // VSCode extension prompt for installation
269
295
  if (
270
- taskName === "test" &&
296
+ taskName === TASK_TEST &&
271
297
  !isRunningOnCiServer() &&
272
298
  process.stdout.isTTY === true
273
299
  ) {
@@ -12,12 +12,12 @@ import {
12
12
  HardhatUserConfig,
13
13
  } from "../../../types";
14
14
  import { HardhatContext } from "../../context";
15
- import { SUPPORTED_SOLIDITY_VERSION_RANGE } from "../../hardhat-network/stack-traces/solidityTracer";
16
15
  import { findClosestPackageJson } from "../../util/packageInfo";
17
16
  import { HardhatError } from "../errors";
18
17
  import { ERRORS } from "../errors-list";
19
18
  import { getUserConfigPath } from "../project-structure";
20
19
 
20
+ import { SUPPORTED_SOLIDITY_VERSION_RANGE } from "../../hardhat-network/stack-traces/constants";
21
21
  import { resolveConfig } from "./config-resolution";
22
22
  import { validateConfig } from "./config-validation";
23
23
  import { DEFAULT_SOLC_VERSION } from "./default-config";
@@ -1,4 +1,3 @@
1
- import * as fs from "fs";
2
1
  import cloneDeep from "lodash/cloneDeep";
3
2
  import path from "path";
4
3
 
@@ -32,11 +31,11 @@ import {
32
31
  SolidityUserConfig,
33
32
  } from "../../../types";
34
33
  import { HARDHAT_NETWORK_NAME } from "../../constants";
35
- import { BigIntUtils } from "../../util/bigint";
36
34
  import { HardforkName } from "../../util/hardforks";
37
35
  import { fromEntries } from "../../util/lang";
38
36
  import { assertHardhatInvariant } from "../errors";
39
37
 
38
+ import { getRealPathSync } from "../../util/fs-utils";
40
39
  import {
41
40
  DEFAULT_SOLC_VERSION,
42
41
  defaultDefaultNetwork,
@@ -157,9 +156,7 @@ function resolveHardhatNetworkConfig(
157
156
  if (forking !== undefined) {
158
157
  const blockNumber = hardhatNetworkConfig?.forking?.blockNumber;
159
158
  if (blockNumber !== undefined) {
160
- forking.blockNumber = BigIntUtils.mapNumberToBigInt(
161
- hardhatNetworkConfig?.forking?.blockNumber
162
- );
159
+ forking.blockNumber = hardhatNetworkConfig?.forking?.blockNumber;
163
160
  }
164
161
 
165
162
  const httpHeaders = hardhatNetworkConfig.forking?.httpHeaders;
@@ -175,21 +172,16 @@ function resolveHardhatNetworkConfig(
175
172
  clonedDefaultHardhatNetworkParams.minGasPrice
176
173
  );
177
174
 
178
- const blockGasLimit = BigInt(
175
+ const blockGasLimit =
179
176
  hardhatNetworkConfig.blockGasLimit ??
180
- clonedDefaultHardhatNetworkParams.blockGasLimit
181
- );
177
+ clonedDefaultHardhatNetworkParams.blockGasLimit;
182
178
 
183
- const gas = BigIntUtils.mapNumberToBigInt(
184
- hardhatNetworkConfig.gas ?? blockGasLimit
185
- );
186
- const gasPrice = BigIntUtils.mapNumberToBigInt(
187
- hardhatNetworkConfig.gasPrice ?? clonedDefaultHardhatNetworkParams.gasPrice
188
- );
189
- const initialBaseFeePerGas = BigIntUtils.mapNumberToBigInt(
179
+ const gas = hardhatNetworkConfig.gas ?? blockGasLimit;
180
+ const gasPrice =
181
+ hardhatNetworkConfig.gasPrice ?? clonedDefaultHardhatNetworkParams.gasPrice;
182
+ const initialBaseFeePerGas =
190
183
  hardhatNetworkConfig.initialBaseFeePerGas ??
191
- clonedDefaultHardhatNetworkParams.initialBaseFeePerGas
192
- );
184
+ clonedDefaultHardhatNetworkParams.initialBaseFeePerGas;
193
185
 
194
186
  const initialDate =
195
187
  hardhatNetworkConfig.initialDate ?? new Date().toISOString();
@@ -277,12 +269,8 @@ function resolveHttpNetworkConfig(
277
269
  ...networkConfig,
278
270
  accounts,
279
271
  url,
280
- gas: BigIntUtils.mapNumberToBigInt(
281
- networkConfig.gas ?? defaultHttpNetworkParams.gas
282
- ),
283
- gasPrice: BigIntUtils.mapNumberToBigInt(
284
- networkConfig.gasPrice ?? defaultHttpNetworkParams.gasPrice
285
- ),
272
+ gas: networkConfig.gas ?? defaultHttpNetworkParams.gas,
273
+ gasPrice: networkConfig.gasPrice ?? defaultHttpNetworkParams.gasPrice,
286
274
  };
287
275
  }
288
276
 
@@ -455,7 +443,7 @@ export function resolveProjectPaths(
455
443
  userConfigPath: string,
456
444
  userPaths: ProjectPathsUserConfig = {}
457
445
  ): ProjectPathsConfig {
458
- const configFile = fs.realpathSync(userConfigPath);
446
+ const configFile = getRealPathSync(userConfigPath);
459
447
  const configDir = path.dirname(configFile);
460
448
 
461
449
  const root = resolvePathFrom(configDir, "", userPaths.root);
@@ -37,7 +37,7 @@ export const defaultHardhatNetworkParams: Omit<
37
37
  "gas" | "initialDate"
38
38
  > = {
39
39
  hardfork: "arrowGlacier",
40
- blockGasLimit: 30_000_000n,
40
+ blockGasLimit: 30_000_000,
41
41
  gasPrice: HARDHAT_NETWORK_DEFAULT_GAS_PRICE,
42
42
  chainId: 31337,
43
43
  throwOnTransactionFailures: true,
@@ -668,6 +668,16 @@ Please double check how you invoked Hardhat or ran your task.`,
668
668
  This is not supported. Please run the help task to see the available options.`,
669
669
  shouldBeReported: false,
670
670
  },
671
+ TYPECHECK_USED_IN_JAVASCRIPT_PROJECT: {
672
+ number: 313,
673
+ title: "The --typecheck flag was used in a javascript project",
674
+ message:
675
+ "Trying to use the --typecheck flag, but the project is not in typescript",
676
+ description: `You tried to run Hardhat with the \`--typecheck\` flag in a javascript project.
677
+
678
+ This flag can only be used in typescript projects.`,
679
+ shouldBeReported: false,
680
+ },
671
681
  },
672
682
  RESOLVER: {
673
683
  FILE_NOT_FOUND: {
@@ -787,42 +797,48 @@ Try installing the library using npm.`,
787
797
  SOLC: {
788
798
  INVALID_VERSION: {
789
799
  number: 500,
790
- message:
791
- "Solidity version %version% is invalid or hasn't been released yet.",
792
- title: "Invalid `solc` version",
800
+ message: `Solidity version %version% is invalid or hasn't been released yet.
801
+
802
+ If you are certain it has been released, run "npx hardhat clean --global" and try again`,
803
+ title: "Invalid or unreleased `solc` version",
793
804
  description: `The Solidity version in your config is invalid or hasn't been released yet.
794
805
 
795
- Please double check your \`solc\` config.`,
806
+ If you are certain it has been released, run \`npx hardhat clean --global\` and try again.`,
796
807
  shouldBeReported: false,
797
808
  },
798
809
  DOWNLOAD_FAILED: {
799
810
  number: 501,
800
811
  message:
801
- "Couldn't download compiler version %remoteVersion%. Please check your connection.",
812
+ "Couldn't download compiler version %remoteVersion%. Please check your internet connection and try again.",
802
813
  title: "`solc` download failed",
803
814
  description: `Couldn't download \`solc\`.
804
815
 
805
- Please check your Internet connection.`,
816
+ Please check your internet connection and try again.`,
806
817
  shouldBeReported: false,
807
818
  },
808
819
  VERSION_LIST_DOWNLOAD_FAILED: {
809
820
  number: 502,
810
821
  message:
811
- "Couldn't download compiler versions list. Please check your connection.",
822
+ "Couldn't download compiler version list. Please check your internet connection and try again.",
812
823
  title: "Couldn't obtain `solc` version list",
813
824
  description: `Couldn't download \`solc\`'s version list.
814
825
 
815
- Please check your Internet connection.`,
826
+ Please check your internet connection and try again.`,
816
827
  shouldBeReported: false,
817
828
  },
818
829
  INVALID_DOWNLOAD: {
819
830
  number: 503,
820
- message:
821
- "Couldn't download compiler version %remoteVersion%. Checksum verification failed. Please check your connection.",
831
+ message: `Couldn't download compiler version %remoteVersion%: Checksum verification failed.
832
+
833
+ Please check your internet connection and try again.
834
+
835
+ If this error persists, run "npx hardhat clean --global".`,
822
836
  title: "Downloaded `solc` checksum verification failed",
823
- description: `Downloaded \`solc\` verification failed.
824
-
825
- Please check your Internet connection.`,
837
+ description: `Hardhat downloaded a version of the Solidity compiler, and its checksum verification failed.
838
+
839
+ Please check your internet connection and try again.
840
+
841
+ If this error persists, run \`npx hardhat clean --global\`.`,
826
842
  shouldBeReported: false,
827
843
  },
828
844
  CANT_GET_COMPILER: {
@@ -6,6 +6,8 @@ import { ErrorDescriptor, ERRORS, getErrorCode } from "./errors-list";
6
6
  const inspect = Symbol.for("nodejs.util.inspect.custom");
7
7
 
8
8
  export class CustomError extends Error {
9
+ private _stack: string;
10
+
9
11
  constructor(message: string, public readonly parent?: Error) {
10
12
  // WARNING: Using super when extending a builtin class doesn't work well
11
13
  // with TS if you are compiling to a version of JavaScript that doesn't have
@@ -20,10 +22,16 @@ export class CustomError extends Error {
20
22
  if ((Error as any).captureStackTrace !== undefined) {
21
23
  (Error as any).captureStackTrace(this, this.constructor);
22
24
  }
25
+
26
+ this._stack = this.stack ?? "";
27
+
28
+ Object.defineProperty(this, "stack", {
29
+ get: () => this[inspect](),
30
+ });
23
31
  }
24
32
 
25
- public [inspect]() {
26
- let str = this.stack;
33
+ public [inspect](): string {
34
+ let str = this._stack;
27
35
  if (this.parent !== undefined) {
28
36
  const parentAsAny = this.parent as any;
29
37
  const causeString =
@@ -1,6 +1,5 @@
1
- import * as fs from "fs";
2
-
3
1
  import { getPackageJsonPath } from "../util/packageInfo";
2
+ import { getRealPathSync } from "../util/fs-utils";
4
3
 
5
4
  /**
6
5
  * Returns true if Hardhat is installed locally or linked from its repository,
@@ -20,7 +19,7 @@ export function isHardhatInstalledLocallyOrLinked(configPath?: string) {
20
19
  // We need to get the realpaths here, as hardhat may be linked and
21
20
  // running with `node --preserve-symlinks`
22
21
  return (
23
- fs.realpathSync(resolvedPackageJson) === fs.realpathSync(thisPackageJson)
22
+ getRealPathSync(resolvedPackageJson) === getRealPathSync(thisPackageJson)
24
23
  );
25
24
  } catch {
26
25
  return false;
@@ -0,0 +1,270 @@
1
+ import fs from "fs";
2
+ import { assertHardhatInvariant } from "./errors";
3
+ import { flagParallelChildren, TaskProfile } from "./task-profiling";
4
+
5
+ export interface Flamegraph {
6
+ name: string;
7
+ value: number;
8
+ children: Flamegraph[];
9
+ parallel: boolean;
10
+ }
11
+
12
+ export function profileToFlamegraph(profile: TaskProfile): Flamegraph {
13
+ assertHardhatInvariant(
14
+ profile.end !== undefined,
15
+ `Formatting invalid task profile for ${profile.name}. No end was recorded.`
16
+ );
17
+
18
+ return {
19
+ name: profile.name,
20
+ // We assume this is a safe int, which is ok unless a task runs for months
21
+ value: Number(profile.end - profile.start),
22
+ children: profile.children.map((c) => profileToFlamegraph(c)),
23
+ parallel: profile.parallel === true,
24
+ };
25
+ }
26
+
27
+ /**
28
+ * Merges compatible children of toFold and its children.
29
+ *
30
+ * Compatible in a traditional Flamegraph means having the same name. We
31
+ * modified that notion and also require their `parallel` flag to have the same
32
+ * value. This means that parallel and non-parallel calls to the same function
33
+ * are shown with two Flamegraph "blocks".
34
+ *
35
+ * The parallel block shows the max running time, instead of the sum of them.
36
+ **/
37
+ function foldFramegraph(toFold: Flamegraph): Flamegraph {
38
+ if (toFold.children.length === 0) {
39
+ return {
40
+ name: toFold.name,
41
+ value: toFold.value,
42
+ children: [],
43
+ parallel: toFold.parallel,
44
+ };
45
+ }
46
+
47
+ const children = toFold.children.map((c) => foldFramegraph(c));
48
+ children.sort((a, b) =>
49
+ a.parallel === b.parallel ? 0 : b.parallel ? -1 : 1
50
+ );
51
+ children.sort((a, b) => a.name.localeCompare(b.name));
52
+
53
+ const foldedChildren = [children[0]];
54
+ const mergedChildren = new Set<number>();
55
+ for (let i = 1; i < children.length; i++) {
56
+ const latest = foldedChildren[foldedChildren.length - 1];
57
+ if (
58
+ children[i].name === latest.name &&
59
+ children[i].parallel === latest.parallel
60
+ ) {
61
+ if (latest.parallel) {
62
+ latest.value = Math.max(latest.value, children[i].value);
63
+ } else {
64
+ latest.value += children[i].value;
65
+ }
66
+
67
+ latest.children.push(...children[i].children);
68
+ mergedChildren.add(foldedChildren.length - 1);
69
+ } else {
70
+ foldedChildren.push(children[i]);
71
+ }
72
+ }
73
+
74
+ for (const i of mergedChildren.values()) {
75
+ foldedChildren[i] = foldFramegraph(foldedChildren[i]);
76
+ }
77
+
78
+ return {
79
+ name: toFold.name,
80
+ value: toFold.value,
81
+ children: foldedChildren,
82
+ parallel: toFold.parallel,
83
+ };
84
+ }
85
+
86
+ export function createFlamegraphHtmlFile(flamegraph: Flamegraph): string {
87
+ const content = getFlamegraphFileContent(foldFramegraph(flamegraph));
88
+ const path = "flamegraph.html";
89
+
90
+ fs.writeFileSync(path, content, { encoding: "utf8" });
91
+
92
+ return path;
93
+ }
94
+
95
+ function getFlamegraphFileContent(flamegraph: Flamegraph): string {
96
+ const data = JSON.stringify(foldFramegraph(flamegraph), undefined, 2);
97
+ return `<!-- Based on d3-flamegraph's example. See its license in: https://github.com/spiermar/d3-flame-graph/blob/master/LICENSE -->
98
+ <!DOCTYPE html>
99
+ <html lang="en">
100
+ <head>
101
+ <meta charset="utf-8">
102
+ <meta name="viewport" content="width=device-width, initial-scale=1">
103
+
104
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
105
+ <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/spiermar/d3-flame-graph@2.0.3/dist/d3-flamegraph.css">
106
+
107
+ <style>
108
+ /* Space out content a bit */
109
+ body {
110
+ padding-top: 20px;
111
+ padding-bottom: 20px;
112
+ }
113
+
114
+ /* Custom page header */
115
+ .header {
116
+ padding-bottom: 20px;
117
+ padding-right: 15px;
118
+ padding-left: 15px;
119
+ border-bottom: 1px solid #e5e5e5;
120
+ }
121
+
122
+ /* Make the masthead heading the same height as the navigation */
123
+ .header h3 {
124
+ margin-top: 0;
125
+ margin-bottom: 0;
126
+ line-height: 40px;
127
+ }
128
+
129
+ /* Customize container */
130
+ .container {
131
+ max-width: 990px;
132
+ }
133
+ </style>
134
+
135
+ <title>Hardhat task flamegraph</title>
136
+ </head>
137
+ <body>
138
+ <div class="container">
139
+ <div class="header clearfix">
140
+ <nav>
141
+ <div class="pull-right">
142
+ <form class="form-inline" id="form">
143
+ <a class="btn" href="javascript: resetZoom();">Reset zoom</a>
144
+ <a class="btn" href="javascript: clear();">Clear</a>
145
+ <div class="form-group">
146
+ <input type="text" class="form-control" id="term">
147
+ </div>
148
+ <a class="btn btn-primary" href="javascript: search();">Search</a>
149
+ </form>
150
+ </div>
151
+ </nav>
152
+ <h3 class="text-muted">Hardhat task flamegraph</h3>
153
+ </div>
154
+ <div id="chart">
155
+ </div>
156
+ <hr>
157
+ <div id="details">
158
+ </div>
159
+ </div>
160
+
161
+ <!-- D3.js -->
162
+ <script src="https://d3js.org/d3.v4.min.js" charset="utf-8"></script>
163
+
164
+ <!-- d3-tip -->
165
+ <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3-tip/0.9.1/d3-tip.min.js"></script>
166
+
167
+ <!-- d3-flamegraph -->
168
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/gh/spiermar/d3-flame-graph@2.0.3/dist/d3-flamegraph.min.js"></script>
169
+
170
+ <script type="text/javascript">
171
+ const flameGraph = d3.flamegraph()
172
+ .width(960)
173
+ .cellHeight(18)
174
+ .transitionDuration(750)
175
+ .minFrameSize(5)
176
+ .transitionEase(d3.easeCubic)
177
+ .sort(true)
178
+ .title("")
179
+ .onClick(onClick)
180
+ .differential(false)
181
+ .selfValue(false);
182
+
183
+ function label(d) {
184
+ if (d.data.parallel) {
185
+ return "(multiple parallel runs) task: " + d.data.name + ", max time: " + readableTime(d.data.value);
186
+ }
187
+
188
+ return "task: " + d.data.name + ", time: " + readableTime(d.data.value);
189
+ }
190
+
191
+ function readableTime(t) {
192
+ const NANOSECONDS_TO_MILLISECONDS = 1_000_000;
193
+ const NANOSECONDS_TO_SECONDS = 1_000_000_000;
194
+
195
+ if (t < NANOSECONDS_TO_MILLISECONDS) {
196
+ return t + "ns";
197
+ }
198
+
199
+ if (t < NANOSECONDS_TO_SECONDS) {
200
+ return (t / NANOSECONDS_TO_MILLISECONDS).toFixed(4) + "ms";
201
+ }
202
+
203
+ return (t / NANOSECONDS_TO_SECONDS).toFixed(4) + "s";
204
+ }
205
+
206
+ const tip = d3.tip()
207
+ .direction("s")
208
+ .offset([8, 0])
209
+ .attr('class', 'd3-flame-graph-tip')
210
+ .html(label);
211
+
212
+ flameGraph.tooltip(tip);
213
+
214
+ const details = document.getElementById("details");
215
+ flameGraph.setDetailsElement(details);
216
+
217
+ flameGraph.label(label);
218
+
219
+ flameGraph.setColorMapper(function(d, originalColor) {
220
+ if (d.highlight) {
221
+ return '#E600E6';
222
+ }
223
+
224
+ if (d.data.parallel) {
225
+ return '#1478eb'
226
+ }
227
+
228
+ return "#EB5414"
229
+ });
230
+
231
+ d3.select("#chart")
232
+ .datum(${data})
233
+ .call(flameGraph);
234
+
235
+ document.getElementById("form").addEventListener("submit", function(event){
236
+ event.preventDefault();
237
+ search();
238
+ });
239
+
240
+ function search() {
241
+ const term = document.getElementById("term").value;
242
+ flameGraph.search(term);
243
+ }
244
+
245
+ function clear() {
246
+ document.getElementById('term').value = '';
247
+ flameGraph.clear();
248
+ }
249
+
250
+ function resetZoom() {
251
+ flameGraph.resetZoom();
252
+ }
253
+
254
+ function onClick(d) {
255
+ console.info("Clicked on " + d.data.name);
256
+ }
257
+ </script>
258
+ </body>
259
+ </html>
260
+ `;
261
+ }
262
+
263
+ /**
264
+ * Converts the TaskProfile into a flamegraph, saves it, and returns its path.
265
+ */
266
+ export function saveFlamegraph(profile: TaskProfile): string {
267
+ flagParallelChildren(profile);
268
+ const flamegraph = profileToFlamegraph(profile);
269
+ return createFlamegraphHtmlFile(flamegraph);
270
+ }
@@ -1,7 +1,11 @@
1
- import { bufferToHex, isValidAddress, toBuffer } from "@ignored/util";
1
+ import {
2
+ bufferToHex,
3
+ isValidAddress,
4
+ toBuffer,
5
+ } from "@nomicfoundation/ethereumjs-util";
2
6
  import * as t from "io-ts";
3
7
 
4
- import { BigIntUtils } from "../../../util/bigint";
8
+ import * as BigIntUtils from "../../../util/bigint";
5
9
  import { assertHardhatInvariant, HardhatError } from "../../errors";
6
10
  import { ERRORS } from "../../errors-list";
7
11
 
@@ -128,7 +132,7 @@ export function numberToRpcStorageSlot(n: number | bigint): string {
128
132
  "Expected number"
129
133
  );
130
134
 
131
- return `0x${BigIntUtils.toWord(n)}`;
135
+ return `0x${BigIntUtils.toEvmWord(n)}`;
132
136
  }
133
137
 
134
138
  /**
@@ -84,4 +84,22 @@ export const HARDHAT_PARAM_DEFINITIONS: HardhatParamDefinitions = {
84
84
  isFlag: false,
85
85
  isVariadic: false,
86
86
  },
87
+ flamegraph: {
88
+ name: "flamegraph",
89
+ defaultValue: undefined,
90
+ description: "Generate a flamegraph of your Hardhat tasks",
91
+ type: types.boolean,
92
+ isOptional: true,
93
+ isFlag: true,
94
+ isVariadic: false,
95
+ },
96
+ typecheck: {
97
+ name: "typecheck",
98
+ defaultValue: false,
99
+ description: "Enable TypeScript type-checking of your scripts/tests",
100
+ type: types.boolean,
101
+ isFlag: true,
102
+ isOptional: true,
103
+ isVariadic: false,
104
+ },
87
105
  };