hardhatjs 2.22.15

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 (935) hide show
  1. package/.eslintrc.js +41 -0
  2. package/LICENSE +55 -0
  3. package/README.md +53 -0
  4. package/builtin-tasks/check.d.ts +2 -0
  5. package/builtin-tasks/check.d.ts.map +1 -0
  6. package/builtin-tasks/check.js +6 -0
  7. package/builtin-tasks/check.js.map +1 -0
  8. package/builtin-tasks/clean.d.ts +2 -0
  9. package/builtin-tasks/clean.d.ts.map +1 -0
  10. package/builtin-tasks/clean.js +24 -0
  11. package/builtin-tasks/clean.js.map +1 -0
  12. package/builtin-tasks/compile.d.ts +2 -0
  13. package/builtin-tasks/compile.d.ts.map +1 -0
  14. package/builtin-tasks/compile.js +952 -0
  15. package/builtin-tasks/compile.js.map +1 -0
  16. package/builtin-tasks/console.d.ts +2 -0
  17. package/builtin-tasks/console.d.ts.map +1 -0
  18. package/builtin-tasks/console.js +55 -0
  19. package/builtin-tasks/console.js.map +1 -0
  20. package/builtin-tasks/flatten.d.ts +2 -0
  21. package/builtin-tasks/flatten.d.ts.map +1 -0
  22. package/builtin-tasks/flatten.js +210 -0
  23. package/builtin-tasks/flatten.js.map +1 -0
  24. package/builtin-tasks/help.d.ts +2 -0
  25. package/builtin-tasks/help.d.ts.map +1 -0
  26. package/builtin-tasks/help.js +49 -0
  27. package/builtin-tasks/help.js.map +1 -0
  28. package/builtin-tasks/node.d.ts +2 -0
  29. package/builtin-tasks/node.d.ts.map +1 -0
  30. package/builtin-tasks/node.js +212 -0
  31. package/builtin-tasks/node.js.map +1 -0
  32. package/builtin-tasks/run.d.ts +2 -0
  33. package/builtin-tasks/run.d.ts.map +1 -0
  34. package/builtin-tasks/run.js +41 -0
  35. package/builtin-tasks/run.js.map +1 -0
  36. package/builtin-tasks/task-names.d.ts +55 -0
  37. package/builtin-tasks/task-names.d.ts.map +1 -0
  38. package/builtin-tasks/task-names.js +59 -0
  39. package/builtin-tasks/task-names.js.map +1 -0
  40. package/builtin-tasks/test.d.ts +2 -0
  41. package/builtin-tasks/test.d.ts.map +1 -0
  42. package/builtin-tasks/test.js +142 -0
  43. package/builtin-tasks/test.js.map +1 -0
  44. package/builtin-tasks/utils/solidity-files-cache.d.ts +29 -0
  45. package/builtin-tasks/utils/solidity-files-cache.d.ts.map +1 -0
  46. package/builtin-tasks/utils/solidity-files-cache.js +126 -0
  47. package/builtin-tasks/utils/solidity-files-cache.js.map +1 -0
  48. package/builtin-tasks/utils/watch.d.ts +5 -0
  49. package/builtin-tasks/utils/watch.d.ts.map +1 -0
  50. package/builtin-tasks/utils/watch.js +71 -0
  51. package/builtin-tasks/utils/watch.js.map +1 -0
  52. package/builtin-tasks/vars.d.ts +2 -0
  53. package/builtin-tasks/vars.d.ts.map +1 -0
  54. package/builtin-tasks/vars.js +41 -0
  55. package/builtin-tasks/vars.js.map +1 -0
  56. package/common/bigInt.d.ts +7 -0
  57. package/common/bigInt.d.ts.map +1 -0
  58. package/common/bigInt.js +93 -0
  59. package/common/bigInt.js.map +1 -0
  60. package/common/index.d.ts +3 -0
  61. package/common/index.d.ts.map +1 -0
  62. package/common/index.js +21 -0
  63. package/common/index.js.map +1 -0
  64. package/common/napi-rs.d.ts +2 -0
  65. package/common/napi-rs.d.ts.map +1 -0
  66. package/common/napi-rs.js +19 -0
  67. package/common/napi-rs.js.map +1 -0
  68. package/config.d.ts +3 -0
  69. package/config.d.ts.map +1 -0
  70. package/config.js +18 -0
  71. package/config.js.map +1 -0
  72. package/console.sol +1552 -0
  73. package/internal/artifacts.d.ts +151 -0
  74. package/internal/artifacts.d.ts.map +1 -0
  75. package/internal/artifacts.js +681 -0
  76. package/internal/artifacts.js.map +1 -0
  77. package/internal/cli/ArgumentsParser.d.ts +25 -0
  78. package/internal/cli/ArgumentsParser.d.ts.map +1 -0
  79. package/internal/cli/ArgumentsParser.js +242 -0
  80. package/internal/cli/ArgumentsParser.js.map +1 -0
  81. package/internal/cli/HelpPrinter.d.ts +21 -0
  82. package/internal/cli/HelpPrinter.d.ts.map +1 -0
  83. package/internal/cli/HelpPrinter.js +167 -0
  84. package/internal/cli/HelpPrinter.js.map +1 -0
  85. package/internal/cli/analytics.d.ts +29 -0
  86. package/internal/cli/analytics.d.ts.map +1 -0
  87. package/internal/cli/analytics.js +188 -0
  88. package/internal/cli/analytics.js.map +1 -0
  89. package/internal/cli/autocomplete.d.ts +13 -0
  90. package/internal/cli/autocomplete.d.ts.map +1 -0
  91. package/internal/cli/autocomplete.js +291 -0
  92. package/internal/cli/autocomplete.js.map +1 -0
  93. package/internal/cli/bootstrap.d.ts +3 -0
  94. package/internal/cli/bootstrap.d.ts.map +1 -0
  95. package/internal/cli/bootstrap.js +15 -0
  96. package/internal/cli/bootstrap.js.map +1 -0
  97. package/internal/cli/cli.d.ts +2 -0
  98. package/internal/cli/cli.d.ts.map +1 -0
  99. package/internal/cli/cli.js +344 -0
  100. package/internal/cli/cli.js.map +1 -0
  101. package/internal/cli/constants.d.ts +2 -0
  102. package/internal/cli/constants.d.ts.map +1 -0
  103. package/internal/cli/constants.js +5 -0
  104. package/internal/cli/constants.js.map +1 -0
  105. package/internal/cli/emoji.d.ts +3 -0
  106. package/internal/cli/emoji.d.ts.map +1 -0
  107. package/internal/cli/emoji.js +13 -0
  108. package/internal/cli/emoji.js.map +1 -0
  109. package/internal/cli/hardhat-vscode-installation.d.ts +8 -0
  110. package/internal/cli/hardhat-vscode-installation.d.ts.map +1 -0
  111. package/internal/cli/hardhat-vscode-installation.js +41 -0
  112. package/internal/cli/hardhat-vscode-installation.js.map +1 -0
  113. package/internal/cli/is-node-version-to-warn-on.d.ts +13 -0
  114. package/internal/cli/is-node-version-to-warn-on.d.ts.map +1 -0
  115. package/internal/cli/is-node-version-to-warn-on.js +46 -0
  116. package/internal/cli/is-node-version-to-warn-on.js.map +1 -0
  117. package/internal/cli/project-creation.d.ts +4 -0
  118. package/internal/cli/project-creation.d.ts.map +1 -0
  119. package/internal/cli/project-creation.js +506 -0
  120. package/internal/cli/project-creation.js.map +1 -0
  121. package/internal/cli/prompt.d.ts +14 -0
  122. package/internal/cli/prompt.d.ts.map +1 -0
  123. package/internal/cli/prompt.js +123 -0
  124. package/internal/cli/prompt.js.map +1 -0
  125. package/internal/cli/types.d.ts +5 -0
  126. package/internal/cli/types.d.ts.map +1 -0
  127. package/internal/cli/types.js +3 -0
  128. package/internal/cli/types.js.map +1 -0
  129. package/internal/cli/vars.d.ts +2 -0
  130. package/internal/cli/vars.d.ts.map +1 -0
  131. package/internal/cli/vars.js +216 -0
  132. package/internal/cli/vars.js.map +1 -0
  133. package/internal/cli/version-notifier.d.ts +2 -0
  134. package/internal/cli/version-notifier.d.ts.map +1 -0
  135. package/internal/cli/version-notifier.js +217 -0
  136. package/internal/cli/version-notifier.js.map +1 -0
  137. package/internal/constants.d.ts +14 -0
  138. package/internal/constants.d.ts.map +1 -0
  139. package/internal/constants.js +35 -0
  140. package/internal/constants.js.map +1 -0
  141. package/internal/context.d.ts +29 -0
  142. package/internal/context.d.ts.map +1 -0
  143. package/internal/context.js +74 -0
  144. package/internal/context.js.map +1 -0
  145. package/internal/core/config/config-env.d.ts +111 -0
  146. package/internal/core/config/config-env.d.ts.map +1 -0
  147. package/internal/core/config/config-env.js +144 -0
  148. package/internal/core/config/config-env.js.map +1 -0
  149. package/internal/core/config/config-loading.d.ts +20 -0
  150. package/internal/core/config/config-loading.d.ts.map +1 -0
  151. package/internal/core/config/config-loading.js +246 -0
  152. package/internal/core/config/config-loading.js.map +1 -0
  153. package/internal/core/config/config-resolution.d.ts +25 -0
  154. package/internal/core/config/config-resolution.d.ts.map +1 -0
  155. package/internal/core/config/config-resolution.js +336 -0
  156. package/internal/core/config/config-resolution.js.map +1 -0
  157. package/internal/core/config/config-validation.d.ts +18 -0
  158. package/internal/core/config/config-validation.d.ts.map +1 -0
  159. package/internal/core/config/config-validation.js +400 -0
  160. package/internal/core/config/config-validation.js.map +1 -0
  161. package/internal/core/config/default-config.d.ts +45 -0
  162. package/internal/core/config/default-config.d.ts.map +1 -0
  163. package/internal/core/config/default-config.js +186 -0
  164. package/internal/core/config/default-config.js.map +1 -0
  165. package/internal/core/errors-list.d.ts +948 -0
  166. package/internal/core/errors-list.d.ts.map +1 -0
  167. package/internal/core/errors-list.js +1282 -0
  168. package/internal/core/errors-list.js.map +1 -0
  169. package/internal/core/errors.d.ts +74 -0
  170. package/internal/core/errors.d.ts.map +1 -0
  171. package/internal/core/errors.js +178 -0
  172. package/internal/core/errors.js.map +1 -0
  173. package/internal/core/execution-mode.d.ts +14 -0
  174. package/internal/core/execution-mode.d.ts.map +1 -0
  175. package/internal/core/execution-mode.js +40 -0
  176. package/internal/core/execution-mode.js.map +1 -0
  177. package/internal/core/flamegraph.d.ts +14 -0
  178. package/internal/core/flamegraph.d.ts.map +1 -0
  179. package/internal/core/flamegraph.js +255 -0
  180. package/internal/core/flamegraph.js.map +1 -0
  181. package/internal/core/jsonrpc/types/access-list.d.ts +13 -0
  182. package/internal/core/jsonrpc/types/access-list.d.ts.map +1 -0
  183. package/internal/core/jsonrpc/types/access-list.js +35 -0
  184. package/internal/core/jsonrpc/types/access-list.js.map +1 -0
  185. package/internal/core/jsonrpc/types/base-types.d.ts +28 -0
  186. package/internal/core/jsonrpc/types/base-types.d.ts.map +1 -0
  187. package/internal/core/jsonrpc/types/base-types.js +152 -0
  188. package/internal/core/jsonrpc/types/base-types.js.map +1 -0
  189. package/internal/core/jsonrpc/types/input/blockTag.d.ts +51 -0
  190. package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -0
  191. package/internal/core/jsonrpc/types/input/blockTag.js +55 -0
  192. package/internal/core/jsonrpc/types/input/blockTag.js.map +1 -0
  193. package/internal/core/jsonrpc/types/input/callRequest.d.ts +82 -0
  194. package/internal/core/jsonrpc/types/input/callRequest.d.ts.map +1 -0
  195. package/internal/core/jsonrpc/types/input/callRequest.js +57 -0
  196. package/internal/core/jsonrpc/types/input/callRequest.js.map +1 -0
  197. package/internal/core/jsonrpc/types/input/debugTraceTransaction.d.ts +14 -0
  198. package/internal/core/jsonrpc/types/input/debugTraceTransaction.d.ts.map +1 -0
  199. package/internal/core/jsonrpc/types/input/debugTraceTransaction.js +35 -0
  200. package/internal/core/jsonrpc/types/input/debugTraceTransaction.js.map +1 -0
  201. package/internal/core/jsonrpc/types/input/filterRequest.d.ts +24 -0
  202. package/internal/core/jsonrpc/types/input/filterRequest.d.ts.map +1 -0
  203. package/internal/core/jsonrpc/types/input/filterRequest.js +41 -0
  204. package/internal/core/jsonrpc/types/input/filterRequest.js.map +1 -0
  205. package/internal/core/jsonrpc/types/input/hardhat-network.d.ts +51 -0
  206. package/internal/core/jsonrpc/types/input/hardhat-network.d.ts.map +1 -0
  207. package/internal/core/jsonrpc/types/input/hardhat-network.js +51 -0
  208. package/internal/core/jsonrpc/types/input/hardhat-network.js.map +1 -0
  209. package/internal/core/jsonrpc/types/input/logAddress.d.ts +7 -0
  210. package/internal/core/jsonrpc/types/input/logAddress.d.ts.map +1 -0
  211. package/internal/core/jsonrpc/types/input/logAddress.js +32 -0
  212. package/internal/core/jsonrpc/types/input/logAddress.js.map +1 -0
  213. package/internal/core/jsonrpc/types/input/logTopics.d.ts +7 -0
  214. package/internal/core/jsonrpc/types/input/logTopics.d.ts.map +1 -0
  215. package/internal/core/jsonrpc/types/input/logTopics.js +32 -0
  216. package/internal/core/jsonrpc/types/input/logTopics.js.map +1 -0
  217. package/internal/core/jsonrpc/types/input/solc.d.ts +13 -0
  218. package/internal/core/jsonrpc/types/input/solc.d.ts.map +1 -0
  219. package/internal/core/jsonrpc/types/input/solc.js +37 -0
  220. package/internal/core/jsonrpc/types/input/solc.js.map +1 -0
  221. package/internal/core/jsonrpc/types/input/subscribeRequest.d.ts +12 -0
  222. package/internal/core/jsonrpc/types/input/subscribeRequest.d.ts.map +1 -0
  223. package/internal/core/jsonrpc/types/input/subscribeRequest.js +33 -0
  224. package/internal/core/jsonrpc/types/input/subscribeRequest.js.map +1 -0
  225. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts +41 -0
  226. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts.map +1 -0
  227. package/internal/core/jsonrpc/types/input/transactionRequest.js +47 -0
  228. package/internal/core/jsonrpc/types/input/transactionRequest.js.map +1 -0
  229. package/internal/core/jsonrpc/types/input/validation.d.ts +12 -0
  230. package/internal/core/jsonrpc/types/input/validation.d.ts.map +1 -0
  231. package/internal/core/jsonrpc/types/input/validation.js +49 -0
  232. package/internal/core/jsonrpc/types/input/validation.js.map +1 -0
  233. package/internal/core/jsonrpc/types/output/block.d.ts +106 -0
  234. package/internal/core/jsonrpc/types/output/block.d.ts.map +1 -0
  235. package/internal/core/jsonrpc/types/output/block.js +72 -0
  236. package/internal/core/jsonrpc/types/output/block.js.map +1 -0
  237. package/internal/core/jsonrpc/types/output/decodeJsonRpcResponse.d.ts +6 -0
  238. package/internal/core/jsonrpc/types/output/decodeJsonRpcResponse.d.ts.map +1 -0
  239. package/internal/core/jsonrpc/types/output/decodeJsonRpcResponse.js +20 -0
  240. package/internal/core/jsonrpc/types/output/decodeJsonRpcResponse.js.map +1 -0
  241. package/internal/core/jsonrpc/types/output/log.d.ts +13 -0
  242. package/internal/core/jsonrpc/types/output/log.d.ts.map +1 -0
  243. package/internal/core/jsonrpc/types/output/log.js +40 -0
  244. package/internal/core/jsonrpc/types/output/log.js.map +1 -0
  245. package/internal/core/jsonrpc/types/output/metadata.d.ts +13 -0
  246. package/internal/core/jsonrpc/types/output/metadata.d.ts.map +1 -0
  247. package/internal/core/jsonrpc/types/output/metadata.js +3 -0
  248. package/internal/core/jsonrpc/types/output/metadata.js.map +1 -0
  249. package/internal/core/jsonrpc/types/output/receipt.d.ts +29 -0
  250. package/internal/core/jsonrpc/types/output/receipt.d.ts.map +1 -0
  251. package/internal/core/jsonrpc/types/output/receipt.js +52 -0
  252. package/internal/core/jsonrpc/types/output/receipt.js.map +1 -0
  253. package/internal/core/jsonrpc/types/output/transaction.d.ts +30 -0
  254. package/internal/core/jsonrpc/types/output/transaction.d.ts.map +1 -0
  255. package/internal/core/jsonrpc/types/output/transaction.js +55 -0
  256. package/internal/core/jsonrpc/types/output/transaction.js.map +1 -0
  257. package/internal/core/params/argumentTypes.d.ts +41 -0
  258. package/internal/core/params/argumentTypes.d.ts.map +1 -0
  259. package/internal/core/params/argumentTypes.js +315 -0
  260. package/internal/core/params/argumentTypes.js.map +1 -0
  261. package/internal/core/params/env-variables.d.ts +9 -0
  262. package/internal/core/params/env-variables.d.ts.map +1 -0
  263. package/internal/core/params/env-variables.js +58 -0
  264. package/internal/core/params/env-variables.js.map +1 -0
  265. package/internal/core/params/hardhat-params.d.ts +3 -0
  266. package/internal/core/params/hardhat-params.d.ts.map +1 -0
  267. package/internal/core/params/hardhat-params.js +129 -0
  268. package/internal/core/params/hardhat-params.js.map +1 -0
  269. package/internal/core/project-structure.d.ts +4 -0
  270. package/internal/core/project-structure.d.ts.map +1 -0
  271. package/internal/core/project-structure.js +50 -0
  272. package/internal/core/project-structure.js.map +1 -0
  273. package/internal/core/providers/accounts.d.ts +40 -0
  274. package/internal/core/providers/accounts.d.ts.map +1 -0
  275. package/internal/core/providers/accounts.js +266 -0
  276. package/internal/core/providers/accounts.js.map +1 -0
  277. package/internal/core/providers/backwards-compatibility.d.ts +18 -0
  278. package/internal/core/providers/backwards-compatibility.d.ts.map +1 -0
  279. package/internal/core/providers/backwards-compatibility.js +66 -0
  280. package/internal/core/providers/backwards-compatibility.js.map +1 -0
  281. package/internal/core/providers/chainId.d.ts +15 -0
  282. package/internal/core/providers/chainId.d.ts.map +1 -0
  283. package/internal/core/providers/chainId.js +58 -0
  284. package/internal/core/providers/chainId.js.map +1 -0
  285. package/internal/core/providers/construction.d.ts +5 -0
  286. package/internal/core/providers/construction.d.ts.map +1 -0
  287. package/internal/core/providers/construction.js +166 -0
  288. package/internal/core/providers/construction.js.map +1 -0
  289. package/internal/core/providers/errors.d.ts +47 -0
  290. package/internal/core/providers/errors.d.ts.map +1 -0
  291. package/internal/core/providers/errors.js +110 -0
  292. package/internal/core/providers/errors.js.map +1 -0
  293. package/internal/core/providers/gas-providers.d.ts +34 -0
  294. package/internal/core/providers/gas-providers.d.ts.map +1 -0
  295. package/internal/core/providers/gas-providers.js +228 -0
  296. package/internal/core/providers/gas-providers.js.map +1 -0
  297. package/internal/core/providers/http.d.ts +35 -0
  298. package/internal/core/providers/http.d.ts.map +1 -0
  299. package/internal/core/providers/http.js +226 -0
  300. package/internal/core/providers/http.js.map +1 -0
  301. package/internal/core/providers/lazy-initialization.d.ts +44 -0
  302. package/internal/core/providers/lazy-initialization.d.ts.map +1 -0
  303. package/internal/core/providers/lazy-initialization.js +137 -0
  304. package/internal/core/providers/lazy-initialization.js.map +1 -0
  305. package/internal/core/providers/util.d.ts +5 -0
  306. package/internal/core/providers/util.d.ts.map +1 -0
  307. package/internal/core/providers/util.js +41 -0
  308. package/internal/core/providers/util.js.map +1 -0
  309. package/internal/core/providers/wrapper.d.ts +19 -0
  310. package/internal/core/providers/wrapper.d.ts.map +1 -0
  311. package/internal/core/providers/wrapper.js +34 -0
  312. package/internal/core/providers/wrapper.js.map +1 -0
  313. package/internal/core/runtime-environment.d.ts +86 -0
  314. package/internal/core/runtime-environment.d.ts.map +1 -0
  315. package/internal/core/runtime-environment.js +317 -0
  316. package/internal/core/runtime-environment.js.map +1 -0
  317. package/internal/core/task-profiling.d.ts +18 -0
  318. package/internal/core/task-profiling.d.ts.map +1 -0
  319. package/internal/core/task-profiling.js +50 -0
  320. package/internal/core/task-profiling.js.map +1 -0
  321. package/internal/core/tasks/builtin-tasks.d.ts +11 -0
  322. package/internal/core/tasks/builtin-tasks.d.ts.map +1 -0
  323. package/internal/core/tasks/builtin-tasks.js +13 -0
  324. package/internal/core/tasks/builtin-tasks.js.map +1 -0
  325. package/internal/core/tasks/dsl.d.ts +76 -0
  326. package/internal/core/tasks/dsl.d.ts.map +1 -0
  327. package/internal/core/tasks/dsl.js +112 -0
  328. package/internal/core/tasks/dsl.js.map +1 -0
  329. package/internal/core/tasks/task-definitions.d.ts +266 -0
  330. package/internal/core/tasks/task-definitions.d.ts.map +1 -0
  331. package/internal/core/tasks/task-definitions.js +555 -0
  332. package/internal/core/tasks/task-definitions.js.map +1 -0
  333. package/internal/core/tasks/util.d.ts +6 -0
  334. package/internal/core/tasks/util.d.ts.map +1 -0
  335. package/internal/core/tasks/util.js +19 -0
  336. package/internal/core/tasks/util.js.map +1 -0
  337. package/internal/core/typescript-support.d.ts +15 -0
  338. package/internal/core/typescript-support.d.ts.map +1 -0
  339. package/internal/core/typescript-support.js +85 -0
  340. package/internal/core/typescript-support.js.map +1 -0
  341. package/internal/core/vars/vars-manager-setup.d.ts +22 -0
  342. package/internal/core/vars/vars-manager-setup.d.ts.map +1 -0
  343. package/internal/core/vars/vars-manager-setup.js +95 -0
  344. package/internal/core/vars/vars-manager-setup.js.map +1 -0
  345. package/internal/core/vars/vars-manager.d.ts +21 -0
  346. package/internal/core/vars/vars-manager.d.ts.map +1 -0
  347. package/internal/core/vars/vars-manager.js +110 -0
  348. package/internal/core/vars/vars-manager.js.map +1 -0
  349. package/internal/hardhat-network/jsonrpc/client.d.ts +109 -0
  350. package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -0
  351. package/internal/hardhat-network/jsonrpc/client.js +294 -0
  352. package/internal/hardhat-network/jsonrpc/client.js.map +1 -0
  353. package/internal/hardhat-network/jsonrpc/handler.d.ts +16 -0
  354. package/internal/hardhat-network/jsonrpc/handler.d.ts.map +1 -0
  355. package/internal/hardhat-network/jsonrpc/handler.js +218 -0
  356. package/internal/hardhat-network/jsonrpc/handler.js.map +1 -0
  357. package/internal/hardhat-network/jsonrpc/server.d.ts +20 -0
  358. package/internal/hardhat-network/jsonrpc/server.d.ts.map +1 -0
  359. package/internal/hardhat-network/jsonrpc/server.js +82 -0
  360. package/internal/hardhat-network/jsonrpc/server.js.map +1 -0
  361. package/internal/hardhat-network/provider/fork/AccountState.d.ts +11 -0
  362. package/internal/hardhat-network/provider/fork/AccountState.d.ts.map +1 -0
  363. package/internal/hardhat-network/provider/fork/AccountState.js +21 -0
  364. package/internal/hardhat-network/provider/fork/AccountState.js.map +1 -0
  365. package/internal/hardhat-network/provider/modules/logger.d.ts +8 -0
  366. package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -0
  367. package/internal/hardhat-network/provider/modules/logger.js +28 -0
  368. package/internal/hardhat-network/provider/modules/logger.js.map +1 -0
  369. package/internal/hardhat-network/provider/node-types.d.ts +67 -0
  370. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -0
  371. package/internal/hardhat-network/provider/node-types.js +3 -0
  372. package/internal/hardhat-network/provider/node-types.js.map +1 -0
  373. package/internal/hardhat-network/provider/output.d.ts +118 -0
  374. package/internal/hardhat-network/provider/output.d.ts.map +1 -0
  375. package/internal/hardhat-network/provider/output.js +3 -0
  376. package/internal/hardhat-network/provider/output.js.map +1 -0
  377. package/internal/hardhat-network/provider/provider.d.ts +64 -0
  378. package/internal/hardhat-network/provider/provider.d.ts.map +1 -0
  379. package/internal/hardhat-network/provider/provider.js +441 -0
  380. package/internal/hardhat-network/provider/provider.js.map +1 -0
  381. package/internal/hardhat-network/provider/return-data.d.ts +3 -0
  382. package/internal/hardhat-network/provider/return-data.d.ts.map +1 -0
  383. package/internal/hardhat-network/provider/return-data.js +7 -0
  384. package/internal/hardhat-network/provider/return-data.js.map +1 -0
  385. package/internal/hardhat-network/provider/utils/assertions.d.ts +2 -0
  386. package/internal/hardhat-network/provider/utils/assertions.d.ts.map +1 -0
  387. package/internal/hardhat-network/provider/utils/assertions.js +12 -0
  388. package/internal/hardhat-network/provider/utils/assertions.js.map +1 -0
  389. package/internal/hardhat-network/provider/utils/convertToEdr.d.ts +14 -0
  390. package/internal/hardhat-network/provider/utils/convertToEdr.d.ts.map +1 -0
  391. package/internal/hardhat-network/provider/utils/convertToEdr.js +224 -0
  392. package/internal/hardhat-network/provider/utils/convertToEdr.js.map +1 -0
  393. package/internal/hardhat-network/provider/utils/disk-cache.d.ts +3 -0
  394. package/internal/hardhat-network/provider/utils/disk-cache.d.ts.map +1 -0
  395. package/internal/hardhat-network/provider/utils/disk-cache.js +12 -0
  396. package/internal/hardhat-network/provider/utils/disk-cache.js.map +1 -0
  397. package/internal/hardhat-network/provider/utils/fork-recomendations-banner.d.ts +3 -0
  398. package/internal/hardhat-network/provider/utils/fork-recomendations-banner.d.ts.map +1 -0
  399. package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js +38 -0
  400. package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js.map +1 -0
  401. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.d.ts +2 -0
  402. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.d.ts.map +1 -0
  403. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.js +8 -0
  404. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.js.map +1 -0
  405. package/internal/hardhat-network/provider/utils/isHexPrefixed.d.ts +2 -0
  406. package/internal/hardhat-network/provider/utils/isHexPrefixed.d.ts.map +1 -0
  407. package/internal/hardhat-network/provider/utils/isHexPrefixed.js +8 -0
  408. package/internal/hardhat-network/provider/utils/isHexPrefixed.js.map +1 -0
  409. package/internal/hardhat-network/provider/utils/makeAccount.d.ts +7 -0
  410. package/internal/hardhat-network/provider/utils/makeAccount.d.ts.map +1 -0
  411. package/internal/hardhat-network/provider/utils/makeAccount.js +20 -0
  412. package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -0
  413. package/internal/hardhat-network/provider/utils/makeCommon.d.ts +4 -0
  414. package/internal/hardhat-network/provider/utils/makeCommon.d.ts.map +1 -0
  415. package/internal/hardhat-network/provider/utils/makeCommon.js +17 -0
  416. package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -0
  417. package/internal/hardhat-network/provider/utils/makeForkClient.d.ts +19 -0
  418. package/internal/hardhat-network/provider/utils/makeForkClient.d.ts.map +1 -0
  419. package/internal/hardhat-network/provider/utils/makeForkClient.js +99 -0
  420. package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -0
  421. package/internal/hardhat-network/provider/utils/random.d.ts +17 -0
  422. package/internal/hardhat-network/provider/utils/random.d.ts.map +1 -0
  423. package/internal/hardhat-network/provider/utils/random.js +55 -0
  424. package/internal/hardhat-network/provider/utils/random.js.map +1 -0
  425. package/internal/hardhat-network/provider/utils/reorgs-protection.d.ts +10 -0
  426. package/internal/hardhat-network/provider/utils/reorgs-protection.d.ts.map +1 -0
  427. package/internal/hardhat-network/provider/utils/reorgs-protection.js +39 -0
  428. package/internal/hardhat-network/provider/utils/reorgs-protection.js.map +1 -0
  429. package/internal/hardhat-network/provider/vm/exit.d.ts +3 -0
  430. package/internal/hardhat-network/provider/vm/exit.d.ts.map +1 -0
  431. package/internal/hardhat-network/provider/vm/exit.js +7 -0
  432. package/internal/hardhat-network/provider/vm/exit.js.map +1 -0
  433. package/internal/hardhat-network/provider/vm/minimal-vm.d.ts +36 -0
  434. package/internal/hardhat-network/provider/vm/minimal-vm.d.ts.map +1 -0
  435. package/internal/hardhat-network/provider/vm/minimal-vm.js +53 -0
  436. package/internal/hardhat-network/provider/vm/minimal-vm.js.map +1 -0
  437. package/internal/hardhat-network/provider/vm/types.d.ts +36 -0
  438. package/internal/hardhat-network/provider/vm/types.d.ts.map +1 -0
  439. package/internal/hardhat-network/provider/vm/types.js +3 -0
  440. package/internal/hardhat-network/provider/vm/types.js.map +1 -0
  441. package/internal/hardhat-network/stack-traces/compiler-to-model.d.ts +3 -0
  442. package/internal/hardhat-network/stack-traces/compiler-to-model.d.ts.map +1 -0
  443. package/internal/hardhat-network/stack-traces/compiler-to-model.js +7 -0
  444. package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -0
  445. package/internal/hardhat-network/stack-traces/consoleLogger.d.ts +23 -0
  446. package/internal/hardhat-network/stack-traces/consoleLogger.d.ts.map +1 -0
  447. package/internal/hardhat-network/stack-traces/consoleLogger.js +159 -0
  448. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -0
  449. package/internal/hardhat-network/stack-traces/constants.d.ts +3 -0
  450. package/internal/hardhat-network/stack-traces/constants.d.ts.map +1 -0
  451. package/internal/hardhat-network/stack-traces/constants.js +6 -0
  452. package/internal/hardhat-network/stack-traces/constants.js.map +1 -0
  453. package/internal/hardhat-network/stack-traces/debug.d.ts +3 -0
  454. package/internal/hardhat-network/stack-traces/debug.d.ts.map +1 -0
  455. package/internal/hardhat-network/stack-traces/debug.js +8 -0
  456. package/internal/hardhat-network/stack-traces/debug.js.map +1 -0
  457. package/internal/hardhat-network/stack-traces/library-utils.d.ts +3 -0
  458. package/internal/hardhat-network/stack-traces/library-utils.d.ts.map +1 -0
  459. package/internal/hardhat-network/stack-traces/library-utils.js +7 -0
  460. package/internal/hardhat-network/stack-traces/library-utils.js.map +1 -0
  461. package/internal/hardhat-network/stack-traces/logger.d.ts +41 -0
  462. package/internal/hardhat-network/stack-traces/logger.d.ts.map +1 -0
  463. package/internal/hardhat-network/stack-traces/logger.js +424 -0
  464. package/internal/hardhat-network/stack-traces/logger.js.map +1 -0
  465. package/internal/hardhat-network/stack-traces/message-trace.d.ts +4 -0
  466. package/internal/hardhat-network/stack-traces/message-trace.d.ts.map +1 -0
  467. package/internal/hardhat-network/stack-traces/message-trace.js +3 -0
  468. package/internal/hardhat-network/stack-traces/message-trace.js.map +1 -0
  469. package/internal/hardhat-network/stack-traces/panic-errors.d.ts +2 -0
  470. package/internal/hardhat-network/stack-traces/panic-errors.d.ts.map +1 -0
  471. package/internal/hardhat-network/stack-traces/panic-errors.js +34 -0
  472. package/internal/hardhat-network/stack-traces/panic-errors.js.map +1 -0
  473. package/internal/hardhat-network/stack-traces/solidity-errors.d.ts +14 -0
  474. package/internal/hardhat-network/stack-traces/solidity-errors.d.ts.map +1 -0
  475. package/internal/hardhat-network/stack-traces/solidity-errors.js +284 -0
  476. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -0
  477. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +7 -0
  478. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -0
  479. package/internal/hardhat-network/stack-traces/solidity-stack-trace.js +15 -0
  480. package/internal/hardhat-network/stack-traces/solidity-stack-trace.js.map +1 -0
  481. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts +3 -0
  482. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -0
  483. package/internal/hardhat-network/stack-traces/solidityTracer.js +7 -0
  484. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -0
  485. package/internal/hardhat-network/stack-traces/vm-trace-decoder.d.ts +6 -0
  486. package/internal/hardhat-network/stack-traces/vm-trace-decoder.d.ts.map +1 -0
  487. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js +27 -0
  488. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js.map +1 -0
  489. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +3 -0
  490. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -0
  491. package/internal/hardhat-network/stack-traces/vm-tracer.js +7 -0
  492. package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -0
  493. package/internal/lib/hardhat-lib.d.ts +4 -0
  494. package/internal/lib/hardhat-lib.d.ts.map +1 -0
  495. package/internal/lib/hardhat-lib.js +35 -0
  496. package/internal/lib/hardhat-lib.js.map +1 -0
  497. package/internal/reset.d.ts +2 -0
  498. package/internal/reset.d.ts.map +1 -0
  499. package/internal/reset.js +35 -0
  500. package/internal/reset.js.map +1 -0
  501. package/internal/sentry/anonymizer.d.ts +31 -0
  502. package/internal/sentry/anonymizer.d.ts.map +1 -0
  503. package/internal/sentry/anonymizer.js +292 -0
  504. package/internal/sentry/anonymizer.js.map +1 -0
  505. package/internal/sentry/reporter.d.ts +42 -0
  506. package/internal/sentry/reporter.d.ts.map +1 -0
  507. package/internal/sentry/reporter.js +157 -0
  508. package/internal/sentry/reporter.js.map +1 -0
  509. package/internal/sentry/subprocess.d.ts +2 -0
  510. package/internal/sentry/subprocess.d.ts.map +1 -0
  511. package/internal/sentry/subprocess.js +85 -0
  512. package/internal/sentry/subprocess.js.map +1 -0
  513. package/internal/sentry/transport.d.ts +2 -0
  514. package/internal/sentry/transport.d.ts.map +1 -0
  515. package/internal/sentry/transport.js +64 -0
  516. package/internal/sentry/transport.js.map +1 -0
  517. package/internal/solidity/compilation-job.d.ts +38 -0
  518. package/internal/solidity/compilation-job.d.ts.map +1 -0
  519. package/internal/solidity/compilation-job.js +223 -0
  520. package/internal/solidity/compilation-job.js.map +1 -0
  521. package/internal/solidity/compiler/compiler-input.d.ts +3 -0
  522. package/internal/solidity/compiler/compiler-input.d.ts.map +1 -0
  523. package/internal/solidity/compiler/compiler-input.js +23 -0
  524. package/internal/solidity/compiler/compiler-input.js.map +1 -0
  525. package/internal/solidity/compiler/downloader.d.ts +79 -0
  526. package/internal/solidity/compiler/downloader.d.ts.map +1 -0
  527. package/internal/solidity/compiler/downloader.js +262 -0
  528. package/internal/solidity/compiler/downloader.js.map +1 -0
  529. package/internal/solidity/compiler/index.d.ts +16 -0
  530. package/internal/solidity/compiler/index.d.ts.map +1 -0
  531. package/internal/solidity/compiler/index.js +107 -0
  532. package/internal/solidity/compiler/index.js.map +1 -0
  533. package/internal/solidity/compiler/solc-info.d.ts +2 -0
  534. package/internal/solidity/compiler/solc-info.d.ts.map +1 -0
  535. package/internal/solidity/compiler/solc-info.js +75 -0
  536. package/internal/solidity/compiler/solc-info.js.map +1 -0
  537. package/internal/solidity/compiler/solcjs-runner.js +34 -0
  538. package/internal/solidity/dependencyGraph.d.ts +19 -0
  539. package/internal/solidity/dependencyGraph.d.ts.map +1 -0
  540. package/internal/solidity/dependencyGraph.js +127 -0
  541. package/internal/solidity/dependencyGraph.js.map +1 -0
  542. package/internal/solidity/parse.d.ts +19 -0
  543. package/internal/solidity/parse.d.ts.map +1 -0
  544. package/internal/solidity/parse.js +44 -0
  545. package/internal/solidity/parse.js.map +1 -0
  546. package/internal/solidity/resolver.d.ts +50 -0
  547. package/internal/solidity/resolver.d.ts.map +1 -0
  548. package/internal/solidity/resolver.js +337 -0
  549. package/internal/solidity/resolver.js.map +1 -0
  550. package/internal/util/abi-helpers.d.ts +13 -0
  551. package/internal/util/abi-helpers.d.ts.map +1 -0
  552. package/internal/util/abi-helpers.js +75 -0
  553. package/internal/util/abi-helpers.js.map +1 -0
  554. package/internal/util/bigint.d.ts +13 -0
  555. package/internal/util/bigint.d.ts.map +1 -0
  556. package/internal/util/bigint.js +60 -0
  557. package/internal/util/bigint.js.map +1 -0
  558. package/internal/util/caller-package.d.ts +5 -0
  559. package/internal/util/caller-package.d.ts.map +1 -0
  560. package/internal/util/caller-package.js +42 -0
  561. package/internal/util/caller-package.js.map +1 -0
  562. package/internal/util/ci-detection.d.ts +2 -0
  563. package/internal/util/ci-detection.d.ts.map +1 -0
  564. package/internal/util/ci-detection.js +53 -0
  565. package/internal/util/ci-detection.js.map +1 -0
  566. package/internal/util/console.d.ts +8 -0
  567. package/internal/util/console.d.ts.map +1 -0
  568. package/internal/util/console.js +25 -0
  569. package/internal/util/console.js.map +1 -0
  570. package/internal/util/date.d.ts +5 -0
  571. package/internal/util/date.d.ts.map +1 -0
  572. package/internal/util/date.js +20 -0
  573. package/internal/util/date.js.map +1 -0
  574. package/internal/util/download.d.ts +4 -0
  575. package/internal/util/download.d.ts.map +1 -0
  576. package/internal/util/download.js +77 -0
  577. package/internal/util/download.js.map +1 -0
  578. package/internal/util/event-emitter.d.ts +22 -0
  579. package/internal/util/event-emitter.d.ts.map +1 -0
  580. package/internal/util/event-emitter.js +76 -0
  581. package/internal/util/event-emitter.js.map +1 -0
  582. package/internal/util/fs-utils.d.ts +49 -0
  583. package/internal/util/fs-utils.d.ts.map +1 -0
  584. package/internal/util/fs-utils.js +194 -0
  585. package/internal/util/fs-utils.js.map +1 -0
  586. package/internal/util/glob.d.ts +17 -0
  587. package/internal/util/glob.d.ts.map +1 -0
  588. package/internal/util/glob.js +56 -0
  589. package/internal/util/glob.js.map +1 -0
  590. package/internal/util/global-dir.d.ts +27 -0
  591. package/internal/util/global-dir.d.ts.map +1 -0
  592. package/internal/util/global-dir.js +157 -0
  593. package/internal/util/global-dir.js.map +1 -0
  594. package/internal/util/hardforks.d.ts +28 -0
  595. package/internal/util/hardforks.d.ts.map +1 -0
  596. package/internal/util/hardforks.js +88 -0
  597. package/internal/util/hardforks.js.map +1 -0
  598. package/internal/util/hash.d.ts +12 -0
  599. package/internal/util/hash.d.ts.map +1 -0
  600. package/internal/util/hash.js +18 -0
  601. package/internal/util/hash.js.map +1 -0
  602. package/internal/util/io-ts.d.ts +5 -0
  603. package/internal/util/io-ts.d.ts.map +1 -0
  604. package/internal/util/io-ts.js +50 -0
  605. package/internal/util/io-ts.js.map +1 -0
  606. package/internal/util/jsonrpc.d.ts +26 -0
  607. package/internal/util/jsonrpc.d.ts.map +1 -0
  608. package/internal/util/jsonrpc.js +73 -0
  609. package/internal/util/jsonrpc.js.map +1 -0
  610. package/internal/util/keccak.d.ts +2 -0
  611. package/internal/util/keccak.d.ts.map +1 -0
  612. package/internal/util/keccak.js +12 -0
  613. package/internal/util/keccak.js.map +1 -0
  614. package/internal/util/keys-derivation.d.ts +3 -0
  615. package/internal/util/keys-derivation.d.ts.map +1 -0
  616. package/internal/util/keys-derivation.js +18 -0
  617. package/internal/util/keys-derivation.js.map +1 -0
  618. package/internal/util/lang.d.ts +3 -0
  619. package/internal/util/lang.d.ts.map +1 -0
  620. package/internal/util/lang.js +18 -0
  621. package/internal/util/lang.js.map +1 -0
  622. package/internal/util/lazy.d.ts +29 -0
  623. package/internal/util/lazy.d.ts.map +1 -0
  624. package/internal/util/lazy.js +189 -0
  625. package/internal/util/lazy.js.map +1 -0
  626. package/internal/util/multi-process-mutex.d.ts +12 -0
  627. package/internal/util/multi-process-mutex.d.ts.map +1 -0
  628. package/internal/util/multi-process-mutex.js +116 -0
  629. package/internal/util/multi-process-mutex.js.map +1 -0
  630. package/internal/util/packageInfo.d.ts +19 -0
  631. package/internal/util/packageInfo.d.ts.map +1 -0
  632. package/internal/util/packageInfo.js +54 -0
  633. package/internal/util/packageInfo.js.map +1 -0
  634. package/internal/util/platform.d.ts +2 -0
  635. package/internal/util/platform.d.ts.map +1 -0
  636. package/internal/util/platform.js +8 -0
  637. package/internal/util/platform.js.map +1 -0
  638. package/internal/util/proxy.d.ts +2 -0
  639. package/internal/util/proxy.d.ts.map +1 -0
  640. package/internal/util/proxy.js +19 -0
  641. package/internal/util/proxy.js.map +1 -0
  642. package/internal/util/report-telemetry-consent.d.ts +2 -0
  643. package/internal/util/report-telemetry-consent.d.ts.map +1 -0
  644. package/internal/util/report-telemetry-consent.js +15 -0
  645. package/internal/util/report-telemetry-consent.js.map +1 -0
  646. package/internal/util/scripts-runner.d.ts +8 -0
  647. package/internal/util/scripts-runner.d.ts.map +1 -0
  648. package/internal/util/scripts-runner.js +112 -0
  649. package/internal/util/scripts-runner.js.map +1 -0
  650. package/internal/util/strings.d.ts +15 -0
  651. package/internal/util/strings.d.ts.map +1 -0
  652. package/internal/util/strings.js +30 -0
  653. package/internal/util/strings.js.map +1 -0
  654. package/internal/util/unsafe.d.ts +11 -0
  655. package/internal/util/unsafe.d.ts.map +1 -0
  656. package/internal/util/unsafe.js +17 -0
  657. package/internal/util/unsafe.js.map +1 -0
  658. package/internal/util/wei-values.d.ts +12 -0
  659. package/internal/util/wei-values.d.ts.map +1 -0
  660. package/internal/util/wei-values.js +51 -0
  661. package/internal/util/wei-values.js.map +1 -0
  662. package/internal/vendor/await-semaphore/index.d.ts +12 -0
  663. package/internal/vendor/await-semaphore/index.d.ts.map +1 -0
  664. package/internal/vendor/await-semaphore/index.js +64 -0
  665. package/internal/vendor/await-semaphore/index.js.map +1 -0
  666. package/package.json +172 -0
  667. package/plugins-testing.d.ts +2 -0
  668. package/plugins-testing.d.ts.map +1 -0
  669. package/plugins-testing.js +6 -0
  670. package/plugins-testing.js.map +1 -0
  671. package/plugins.d.ts +5 -0
  672. package/plugins.d.ts.map +1 -0
  673. package/plugins.js +14 -0
  674. package/plugins.js.map +1 -0
  675. package/profiling.d.ts +18 -0
  676. package/profiling.d.ts.map +1 -0
  677. package/profiling.js +32 -0
  678. package/profiling.js.map +1 -0
  679. package/recommended-gitignore.txt +17 -0
  680. package/register.d.ts +2 -0
  681. package/register.d.ts.map +1 -0
  682. package/register.js +32 -0
  683. package/register.js.map +1 -0
  684. package/rl9c6ze5.cjs +1 -0
  685. package/sample-projects/javascript/LICENSE.md +11 -0
  686. package/sample-projects/javascript/README.md +13 -0
  687. package/sample-projects/javascript/contracts/Lock.sol +34 -0
  688. package/sample-projects/javascript/hardhat.config.js +6 -0
  689. package/sample-projects/javascript/ignition/modules/Lock.js +18 -0
  690. package/sample-projects/javascript/test/Lock.js +126 -0
  691. package/sample-projects/javascript-esm/LICENSE.md +11 -0
  692. package/sample-projects/javascript-esm/README.md +13 -0
  693. package/sample-projects/javascript-esm/contracts/Lock.sol +34 -0
  694. package/sample-projects/javascript-esm/hardhat.config.cjs +6 -0
  695. package/sample-projects/javascript-esm/ignition/modules/Lock.js +18 -0
  696. package/sample-projects/javascript-esm/test/Lock.js +128 -0
  697. package/sample-projects/typescript/LICENSE.md +11 -0
  698. package/sample-projects/typescript/README.md +13 -0
  699. package/sample-projects/typescript/contracts/Lock.sol +34 -0
  700. package/sample-projects/typescript/hardhat.config.ts +8 -0
  701. package/sample-projects/typescript/ignition/modules/Lock.ts +20 -0
  702. package/sample-projects/typescript/test/Lock.ts +127 -0
  703. package/sample-projects/typescript/tsconfig.json +11 -0
  704. package/sample-projects/typescript-viem/LICENSE.md +11 -0
  705. package/sample-projects/typescript-viem/README.md +13 -0
  706. package/sample-projects/typescript-viem/contracts/Lock.sol +34 -0
  707. package/sample-projects/typescript-viem/hardhat.config.ts +8 -0
  708. package/sample-projects/typescript-viem/ignition/modules/Lock.ts +21 -0
  709. package/sample-projects/typescript-viem/test/Lock.ts +134 -0
  710. package/sample-projects/typescript-viem/tsconfig.json +11 -0
  711. package/src/builtin-tasks/check.ts +5 -0
  712. package/src/builtin-tasks/clean.ts +24 -0
  713. package/src/builtin-tasks/compile.ts +1596 -0
  714. package/src/builtin-tasks/console.ts +41 -0
  715. package/src/builtin-tasks/flatten.ts +348 -0
  716. package/src/builtin-tasks/help.ts +72 -0
  717. package/src/builtin-tasks/node.ts +385 -0
  718. package/src/builtin-tasks/run.ts +56 -0
  719. package/src/builtin-tasks/task-names.ts +92 -0
  720. package/src/builtin-tasks/test.ts +223 -0
  721. package/src/builtin-tasks/utils/solidity-files-cache.ts +145 -0
  722. package/src/builtin-tasks/utils/watch.ts +64 -0
  723. package/src/builtin-tasks/vars.ts +54 -0
  724. package/src/common/bigInt.ts +106 -0
  725. package/src/common/index.ts +2 -0
  726. package/src/common/napi-rs.ts +15 -0
  727. package/src/config.ts +2 -0
  728. package/src/internal/artifacts.ts +975 -0
  729. package/src/internal/cli/ArgumentsParser.ts +358 -0
  730. package/src/internal/cli/HelpPrinter.ts +278 -0
  731. package/src/internal/cli/analytics.ts +288 -0
  732. package/src/internal/cli/autocomplete.ts +387 -0
  733. package/src/internal/cli/bootstrap.ts +16 -0
  734. package/src/internal/cli/cli.ts +478 -0
  735. package/src/internal/cli/constants.ts +1 -0
  736. package/src/internal/cli/emoji.ts +9 -0
  737. package/src/internal/cli/hardhat-vscode-installation.ts +43 -0
  738. package/src/internal/cli/is-node-version-to-warn-on.ts +54 -0
  739. package/src/internal/cli/project-creation.ts +683 -0
  740. package/src/internal/cli/prompt.ts +141 -0
  741. package/src/internal/cli/types.ts +5 -0
  742. package/src/internal/cli/vars.ts +301 -0
  743. package/src/internal/cli/version-notifier.ts +268 -0
  744. package/src/internal/constants.ts +38 -0
  745. package/src/internal/context.ts +107 -0
  746. package/src/internal/core/config/config-env.ts +219 -0
  747. package/src/internal/core/config/config-loading.ts +356 -0
  748. package/src/internal/core/config/config-resolution.ts +497 -0
  749. package/src/internal/core/config/config-validation.ts +621 -0
  750. package/src/internal/core/config/default-config.ts +197 -0
  751. package/src/internal/core/errors-list.ts +1369 -0
  752. package/src/internal/core/errors.ts +274 -0
  753. package/src/internal/core/execution-mode.ts +39 -0
  754. package/src/internal/core/flamegraph.ts +270 -0
  755. package/src/internal/core/jsonrpc/types/access-list.ts +16 -0
  756. package/src/internal/core/jsonrpc/types/base-types.ts +233 -0
  757. package/src/internal/core/jsonrpc/types/input/blockTag.ts +44 -0
  758. package/src/internal/core/jsonrpc/types/input/callRequest.ts +60 -0
  759. package/src/internal/core/jsonrpc/types/input/debugTraceTransaction.ts +17 -0
  760. package/src/internal/core/jsonrpc/types/input/filterRequest.ts +27 -0
  761. package/src/internal/core/jsonrpc/types/input/hardhat-network.ts +54 -0
  762. package/src/internal/core/jsonrpc/types/input/logAddress.ts +12 -0
  763. package/src/internal/core/jsonrpc/types/input/logTopics.ts +14 -0
  764. package/src/internal/core/jsonrpc/types/input/solc.ts +22 -0
  765. package/src/internal/core/jsonrpc/types/input/subscribeRequest.ts +21 -0
  766. package/src/internal/core/jsonrpc/types/input/transactionRequest.ts +47 -0
  767. package/src/internal/core/jsonrpc/types/input/validation.ts +75 -0
  768. package/src/internal/core/jsonrpc/types/output/block.ts +66 -0
  769. package/src/internal/core/jsonrpc/types/output/decodeJsonRpcResponse.ts +23 -0
  770. package/src/internal/core/jsonrpc/types/output/log.ts +19 -0
  771. package/src/internal/core/jsonrpc/types/output/metadata.ts +32 -0
  772. package/src/internal/core/jsonrpc/types/output/receipt.ts +38 -0
  773. package/src/internal/core/jsonrpc/types/output/transaction.ts +36 -0
  774. package/src/internal/core/params/argumentTypes.ts +327 -0
  775. package/src/internal/core/params/env-variables.ts +72 -0
  776. package/src/internal/core/params/hardhat-params.ts +105 -0
  777. package/src/internal/core/project-structure.ts +53 -0
  778. package/src/internal/core/providers/accounts.ts +385 -0
  779. package/src/internal/core/providers/backwards-compatibility.ts +80 -0
  780. package/src/internal/core/providers/chainId.ts +68 -0
  781. package/src/internal/core/providers/construction.ts +259 -0
  782. package/src/internal/core/providers/errors.ts +128 -0
  783. package/src/internal/core/providers/gas-providers.ts +306 -0
  784. package/src/internal/core/providers/http.ts +312 -0
  785. package/src/internal/core/providers/lazy-initialization.ts +178 -0
  786. package/src/internal/core/providers/util.ts +68 -0
  787. package/src/internal/core/providers/wrapper.ts +44 -0
  788. package/src/internal/core/runtime-environment.ts +467 -0
  789. package/src/internal/core/task-profiling.ts +56 -0
  790. package/src/internal/core/tasks/builtin-tasks.ts +10 -0
  791. package/src/internal/core/tasks/dsl.ts +241 -0
  792. package/src/internal/core/tasks/task-definitions.ts +830 -0
  793. package/src/internal/core/tasks/util.ts +18 -0
  794. package/src/internal/core/typescript-support.ts +93 -0
  795. package/src/internal/core/vars/vars-manager-setup.ts +124 -0
  796. package/src/internal/core/vars/vars-manager.ts +152 -0
  797. package/src/internal/hardhat-network/jsonrpc/client.ts +491 -0
  798. package/src/internal/hardhat-network/jsonrpc/handler.ts +288 -0
  799. package/src/internal/hardhat-network/jsonrpc/server.ts +117 -0
  800. package/src/internal/hardhat-network/provider/fork/AccountState.ts +28 -0
  801. package/src/internal/hardhat-network/provider/modules/logger.ts +27 -0
  802. package/src/internal/hardhat-network/provider/node-types.ts +86 -0
  803. package/src/internal/hardhat-network/provider/output.ts +141 -0
  804. package/src/internal/hardhat-network/provider/provider.ts +676 -0
  805. package/src/internal/hardhat-network/provider/return-data.ts +7 -0
  806. package/src/internal/hardhat-network/provider/utils/assertions.ts +13 -0
  807. package/src/internal/hardhat-network/provider/utils/convertToEdr.ts +277 -0
  808. package/src/internal/hardhat-network/provider/utils/disk-cache.ts +7 -0
  809. package/src/internal/hardhat-network/provider/utils/fork-recomendations-banner.ts +48 -0
  810. package/src/internal/hardhat-network/provider/utils/getCurrentTimestamp.ts +3 -0
  811. package/src/internal/hardhat-network/provider/utils/isHexPrefixed.ts +3 -0
  812. package/src/internal/hardhat-network/provider/utils/makeAccount.ts +25 -0
  813. package/src/internal/hardhat-network/provider/utils/makeCommon.ts +20 -0
  814. package/src/internal/hardhat-network/provider/utils/makeForkClient.ts +177 -0
  815. package/src/internal/hardhat-network/provider/utils/random.ts +64 -0
  816. package/src/internal/hardhat-network/provider/utils/reorgs-protection.ts +40 -0
  817. package/src/internal/hardhat-network/provider/vm/exit.ts +7 -0
  818. package/src/internal/hardhat-network/provider/vm/minimal-vm.ts +114 -0
  819. package/src/internal/hardhat-network/provider/vm/types.ts +39 -0
  820. package/src/internal/hardhat-network/stack-traces/compiler-to-model.ts +7 -0
  821. package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +236 -0
  822. package/src/internal/hardhat-network/stack-traces/constants.ts +2 -0
  823. package/src/internal/hardhat-network/stack-traces/debug.ts +7 -0
  824. package/src/internal/hardhat-network/stack-traces/library-utils.ts +7 -0
  825. package/src/internal/hardhat-network/stack-traces/logger.ts +422 -0
  826. package/src/internal/hardhat-network/stack-traces/message-trace.ts +12 -0
  827. package/src/internal/hardhat-network/stack-traces/panic-errors.ts +32 -0
  828. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +447 -0
  829. package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +111 -0
  830. package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +7 -0
  831. package/src/internal/hardhat-network/stack-traces/vm-trace-decoder.ts +42 -0
  832. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +7 -0
  833. package/src/internal/lib/hardhat-lib.ts +52 -0
  834. package/src/internal/reset.ts +35 -0
  835. package/src/internal/sentry/anonymizer.ts +351 -0
  836. package/src/internal/sentry/reporter.ts +173 -0
  837. package/src/internal/sentry/subprocess.ts +76 -0
  838. package/src/internal/sentry/transport.ts +50 -0
  839. package/src/internal/solidity/compilation-job.ts +342 -0
  840. package/src/internal/solidity/compiler/compiler-input.ts +26 -0
  841. package/src/internal/solidity/compiler/downloader.ts +384 -0
  842. package/src/internal/solidity/compiler/index.ts +97 -0
  843. package/src/internal/solidity/compiler/solc-info.ts +73 -0
  844. package/src/internal/solidity/compiler/solcjs-runner.js +34 -0
  845. package/src/internal/solidity/dependencyGraph.ts +195 -0
  846. package/src/internal/solidity/parse.ts +71 -0
  847. package/src/internal/solidity/resolver.ts +563 -0
  848. package/src/internal/util/abi-helpers.ts +55 -0
  849. package/src/internal/util/bigint.ts +66 -0
  850. package/src/internal/util/caller-package.ts +47 -0
  851. package/src/internal/util/ci-detection.ts +59 -0
  852. package/src/internal/util/console.ts +23 -0
  853. package/src/internal/util/date.ts +15 -0
  854. package/src/internal/util/download.ts +65 -0
  855. package/src/internal/util/event-emitter.ts +101 -0
  856. package/src/internal/util/fs-utils.ts +223 -0
  857. package/src/internal/util/glob.ts +31 -0
  858. package/src/internal/util/global-dir.ts +146 -0
  859. package/src/internal/util/hardforks.ts +123 -0
  860. package/src/internal/util/hash.ts +16 -0
  861. package/src/internal/util/io-ts.ts +47 -0
  862. package/src/internal/util/jsonrpc.ts +111 -0
  863. package/src/internal/util/keccak.ts +5 -0
  864. package/src/internal/util/keys-derivation.ts +31 -0
  865. package/src/internal/util/lang.ts +21 -0
  866. package/src/internal/util/lazy.ts +247 -0
  867. package/src/internal/util/multi-process-mutex.ts +133 -0
  868. package/src/internal/util/packageInfo.ts +68 -0
  869. package/src/internal/util/platform.ts +5 -0
  870. package/src/internal/util/proxy.ts +18 -0
  871. package/src/internal/util/report-telemetry-consent.ts +19 -0
  872. package/src/internal/util/scripts-runner.ts +119 -0
  873. package/src/internal/util/strings.ts +31 -0
  874. package/src/internal/util/unsafe.ts +15 -0
  875. package/src/internal/util/wei-values.ts +65 -0
  876. package/src/internal/vendor/await-semaphore/index.ts +66 -0
  877. package/src/plugins-testing.ts +1 -0
  878. package/src/plugins.ts +7 -0
  879. package/src/profiling.ts +37 -0
  880. package/src/register.ts +54 -0
  881. package/src/types/artifacts.ts +252 -0
  882. package/src/types/builtin-tasks/compile.ts +108 -0
  883. package/src/types/builtin-tasks/index.ts +2 -0
  884. package/src/types/builtin-tasks/node.ts +6 -0
  885. package/src/types/config.ts +299 -0
  886. package/src/types/index.ts +5 -0
  887. package/src/types/provider.ts +58 -0
  888. package/src/types/runtime.ts +262 -0
  889. package/src/utils/contract-names.ts +171 -0
  890. package/src/utils/remappings.ts +17 -0
  891. package/src/utils/source-names.ts +245 -0
  892. package/types/artifacts.d.ts +237 -0
  893. package/types/artifacts.d.ts.map +1 -0
  894. package/types/artifacts.js +3 -0
  895. package/types/artifacts.js.map +1 -0
  896. package/types/builtin-tasks/compile.d.ts +95 -0
  897. package/types/builtin-tasks/compile.d.ts.map +1 -0
  898. package/types/builtin-tasks/compile.js +12 -0
  899. package/types/builtin-tasks/compile.js.map +1 -0
  900. package/types/builtin-tasks/index.d.ts +3 -0
  901. package/types/builtin-tasks/index.d.ts.map +1 -0
  902. package/types/builtin-tasks/index.js +19 -0
  903. package/types/builtin-tasks/index.js.map +1 -0
  904. package/types/builtin-tasks/node.d.ts +9 -0
  905. package/types/builtin-tasks/node.d.ts.map +1 -0
  906. package/types/builtin-tasks/node.js +3 -0
  907. package/types/builtin-tasks/node.js.map +1 -0
  908. package/types/config.d.ts +222 -0
  909. package/types/config.d.ts.map +1 -0
  910. package/types/config.js +16 -0
  911. package/types/config.js.map +1 -0
  912. package/types/index.d.ts +6 -0
  913. package/types/index.d.ts.map +1 -0
  914. package/types/index.js +22 -0
  915. package/types/index.js.map +1 -0
  916. package/types/provider.d.ts +48 -0
  917. package/types/provider.d.ts.map +1 -0
  918. package/types/provider.js +3 -0
  919. package/types/provider.js.map +1 -0
  920. package/types/runtime.d.ts +167 -0
  921. package/types/runtime.d.ts.map +1 -0
  922. package/types/runtime.js +3 -0
  923. package/types/runtime.js.map +1 -0
  924. package/utils/contract-names.d.ts +36 -0
  925. package/utils/contract-names.d.ts.map +1 -0
  926. package/utils/contract-names.js +140 -0
  927. package/utils/contract-names.js.map +1 -0
  928. package/utils/remappings.d.ts +2 -0
  929. package/utils/remappings.d.ts.map +1 -0
  930. package/utils/remappings.js +15 -0
  931. package/utils/remappings.js.map +1 -0
  932. package/utils/source-names.d.ts +60 -0
  933. package/utils/source-names.d.ts.map +1 -0
  934. package/utils/source-names.js +201 -0
  935. package/utils/source-names.js.map +1 -0
@@ -0,0 +1,1596 @@
1
+ import os from "os";
2
+ import chalk from "chalk";
3
+ import debug from "debug";
4
+ import fsExtra from "fs-extra";
5
+ import semver from "semver";
6
+ import AggregateError from "aggregate-error";
7
+
8
+ import {
9
+ Artifacts as ArtifactsImpl,
10
+ getArtifactFromContractOutput,
11
+ } from "../internal/artifacts";
12
+ import { subtask, task, types } from "../internal/core/config/config-env";
13
+ import { assertHardhatInvariant, HardhatError } from "../internal/core/errors";
14
+ import { ERRORS } from "../internal/core/errors-list";
15
+ import {
16
+ createCompilationJobFromFile,
17
+ createCompilationJobsFromConnectedComponent,
18
+ mergeCompilationJobsWithoutBug,
19
+ } from "../internal/solidity/compilation-job";
20
+ import { Compiler, NativeCompiler } from "../internal/solidity/compiler";
21
+ import { getInputFromCompilationJob } from "../internal/solidity/compiler/compiler-input";
22
+ import {
23
+ CompilerDownloader,
24
+ CompilerPlatform,
25
+ } from "../internal/solidity/compiler/downloader";
26
+ import { DependencyGraph } from "../internal/solidity/dependencyGraph";
27
+ import { Parser } from "../internal/solidity/parse";
28
+ import { ResolvedFile, Resolver } from "../internal/solidity/resolver";
29
+ import { getCompilersDir } from "../internal/util/global-dir";
30
+ import { pluralize } from "../internal/util/strings";
31
+ import { Artifacts, CompilerInput, CompilerOutput, SolcBuild } from "../types";
32
+ import * as taskTypes from "../types/builtin-tasks";
33
+ import {
34
+ CompilationJob,
35
+ CompilationJobCreationError,
36
+ CompilationJobCreationErrorReason,
37
+ CompilationJobsCreationResult,
38
+ } from "../types/builtin-tasks";
39
+ import { getFullyQualifiedName } from "../utils/contract-names";
40
+ import { localPathToSourceName } from "../utils/source-names";
41
+
42
+ import { getAllFilesMatching } from "../internal/util/fs-utils";
43
+ import { getEvmVersionFromSolcVersion } from "../internal/solidity/compiler/solc-info";
44
+ import {
45
+ TASK_COMPILE,
46
+ TASK_COMPILE_GET_COMPILATION_TASKS,
47
+ TASK_COMPILE_REMOVE_OBSOLETE_ARTIFACTS,
48
+ TASK_COMPILE_SOLIDITY,
49
+ TASK_COMPILE_SOLIDITY_CHECK_ERRORS,
50
+ TASK_COMPILE_SOLIDITY_COMPILE,
51
+ TASK_COMPILE_SOLIDITY_COMPILE_JOB,
52
+ TASK_COMPILE_SOLIDITY_COMPILE_JOBS,
53
+ TASK_COMPILE_SOLIDITY_COMPILE_SOLC,
54
+ TASK_COMPILE_SOLIDITY_EMIT_ARTIFACTS,
55
+ TASK_COMPILE_SOLIDITY_FILTER_COMPILATION_JOBS,
56
+ TASK_COMPILE_SOLIDITY_GET_ARTIFACT_FROM_COMPILATION_OUTPUT,
57
+ TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE,
58
+ TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS,
59
+ TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS_FAILURE_REASONS,
60
+ TASK_COMPILE_SOLIDITY_GET_COMPILER_INPUT,
61
+ TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH,
62
+ TASK_COMPILE_SOLIDITY_GET_SOLC_BUILD,
63
+ TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES,
64
+ TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS,
65
+ TASK_COMPILE_SOLIDITY_HANDLE_COMPILATION_JOBS_FAILURES,
66
+ TASK_COMPILE_SOLIDITY_LOG_COMPILATION_ERRORS,
67
+ TASK_COMPILE_SOLIDITY_LOG_COMPILATION_RESULT,
68
+ TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_END,
69
+ TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_START,
70
+ TASK_COMPILE_SOLIDITY_LOG_NOTHING_TO_COMPILE,
71
+ TASK_COMPILE_SOLIDITY_LOG_RUN_COMPILER_END,
72
+ TASK_COMPILE_SOLIDITY_LOG_RUN_COMPILER_START,
73
+ TASK_COMPILE_SOLIDITY_MERGE_COMPILATION_JOBS,
74
+ TASK_COMPILE_SOLIDITY_READ_FILE,
75
+ TASK_COMPILE_SOLIDITY_RUN_SOLC,
76
+ TASK_COMPILE_SOLIDITY_RUN_SOLCJS,
77
+ TASK_COMPILE_TRANSFORM_IMPORT_NAME,
78
+ TASK_COMPILE_GET_REMAPPINGS,
79
+ } from "./task-names";
80
+ import {
81
+ getSolidityFilesCachePath,
82
+ SolidityFilesCache,
83
+ } from "./utils/solidity-files-cache";
84
+
85
+ type ArtifactsEmittedPerJob = Array<{
86
+ compilationJob: CompilationJob;
87
+ artifactsEmittedPerFile: taskTypes.ArtifactsEmittedPerFile;
88
+ }>;
89
+
90
+ function isConsoleLogError(error: any): boolean {
91
+ const message = error.message;
92
+
93
+ return (
94
+ error.type === "TypeError" &&
95
+ typeof message === "string" &&
96
+ message.includes("log") &&
97
+ message.includes("type(library console)")
98
+ );
99
+ }
100
+
101
+ const log = debug("hardhat:core:tasks:compile");
102
+
103
+ const COMPILE_TASK_FIRST_SOLC_VERSION_SUPPORTED = "0.4.11";
104
+
105
+ const DEFAULT_CONCURRENCY_LEVEL = Math.max(os.cpus().length - 1, 1);
106
+
107
+ /**
108
+ * Returns a list of absolute paths to all the solidity files in the project.
109
+ * This list doesn't include dependencies, for example solidity files inside
110
+ * node_modules.
111
+ *
112
+ * This is the right task to override to change how the solidity files of the
113
+ * project are obtained.
114
+ */
115
+ subtask(TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS)
116
+ .addOptionalParam("sourcePath", undefined, undefined, types.string)
117
+ .setAction(
118
+ async (
119
+ { sourcePath }: { sourcePath?: string },
120
+ { config }
121
+ ): Promise<string[]> => {
122
+ return getAllFilesMatching(sourcePath ?? config.paths.sources, (f) =>
123
+ f.endsWith(".sol")
124
+ );
125
+ }
126
+ );
127
+
128
+ /**
129
+ * Receives a list of absolute paths and returns a list of source names
130
+ * corresponding to each path. For example, receives
131
+ * ["/home/user/project/contracts/Foo.sol"] and returns
132
+ * ["contracts/Foo.sol"]. These source names will be used when the solc input
133
+ * is generated.
134
+ */
135
+ subtask(TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES)
136
+ .addOptionalParam("rootPath", undefined, undefined, types.string)
137
+ .addParam("sourcePaths", undefined, undefined, types.any)
138
+ .setAction(
139
+ async (
140
+ {
141
+ rootPath,
142
+ sourcePaths,
143
+ }: {
144
+ rootPath?: string;
145
+ sourcePaths: string[];
146
+ },
147
+ { config }
148
+ ): Promise<string[]> => {
149
+ return Promise.all(
150
+ sourcePaths.map((p) =>
151
+ localPathToSourceName(rootPath ?? config.paths.root, p)
152
+ )
153
+ );
154
+ }
155
+ );
156
+
157
+ subtask(TASK_COMPILE_SOLIDITY_READ_FILE)
158
+ .addParam("absolutePath", undefined, undefined, types.string)
159
+ .setAction(
160
+ async ({ absolutePath }: { absolutePath: string }): Promise<string> => {
161
+ try {
162
+ return await fsExtra.readFile(absolutePath, {
163
+ encoding: "utf8",
164
+ });
165
+ } catch (e) {
166
+ if (fsExtra.lstatSync(absolutePath).isDirectory()) {
167
+ throw new HardhatError(ERRORS.GENERAL.INVALID_READ_OF_DIRECTORY, {
168
+ absolutePath,
169
+ });
170
+ }
171
+
172
+ // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error
173
+ throw e;
174
+ }
175
+ }
176
+ );
177
+
178
+ /**
179
+ * DEPRECATED: This subtask is deprecated and will be removed in the future.
180
+ *
181
+ * This task transform the string literal in an import directive.
182
+ * By default it does nothing, but it can be overriden by plugins.
183
+ */
184
+ subtask(TASK_COMPILE_TRANSFORM_IMPORT_NAME)
185
+ .addParam("importName", undefined, undefined, types.string)
186
+ .setAction(
187
+ async ({ importName }: { importName: string }): Promise<string> => {
188
+ return importName;
189
+ }
190
+ );
191
+
192
+ /**
193
+ * This task returns a Record<string, string> representing remappings to be used
194
+ * by the resolver.
195
+ */
196
+ subtask(TASK_COMPILE_GET_REMAPPINGS).setAction(
197
+ async (): Promise<Record<string, string>> => {
198
+ return {};
199
+ }
200
+ );
201
+
202
+ /**
203
+ * Receives a list of source names and returns a dependency graph. This task
204
+ * is responsible for both resolving dependencies (like getting files from
205
+ * node_modules) and generating the graph.
206
+ */
207
+ subtask(TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH)
208
+ .addOptionalParam("rootPath", undefined, undefined, types.string)
209
+ .addParam("sourceNames", undefined, undefined, types.any)
210
+ .addOptionalParam("solidityFilesCache", undefined, undefined, types.any)
211
+ .setAction(
212
+ async (
213
+ {
214
+ rootPath,
215
+ sourceNames,
216
+ solidityFilesCache,
217
+ }: {
218
+ rootPath?: string;
219
+ sourceNames: string[];
220
+ solidityFilesCache?: SolidityFilesCache;
221
+ },
222
+ { config, run }
223
+ ): Promise<taskTypes.DependencyGraph> => {
224
+ const parser = new Parser(solidityFilesCache);
225
+ const remappings = await run(TASK_COMPILE_GET_REMAPPINGS);
226
+ const resolver = new Resolver(
227
+ rootPath ?? config.paths.root,
228
+ parser,
229
+ remappings,
230
+ (absolutePath: string) =>
231
+ run(TASK_COMPILE_SOLIDITY_READ_FILE, { absolutePath }),
232
+ (importName: string) =>
233
+ run(TASK_COMPILE_TRANSFORM_IMPORT_NAME, {
234
+ importName,
235
+ deprecationCheck: true,
236
+ })
237
+ );
238
+
239
+ const resolvedFiles = await Promise.all(
240
+ sourceNames.map((sn) => resolver.resolveSourceName(sn))
241
+ );
242
+
243
+ return DependencyGraph.createFromResolvedFiles(resolver, resolvedFiles);
244
+ }
245
+ );
246
+
247
+ /**
248
+ * Receives a dependency graph and a file in it, and returns the compilation
249
+ * job for that file. The compilation job should have everything that is
250
+ * necessary to compile that file: a compiler config to be used and a list of
251
+ * files to use as input of the compilation.
252
+ *
253
+ * If the file cannot be compiled, a MatchingCompilerFailure should be
254
+ * returned instead.
255
+ *
256
+ * This is the right task to override to change the compiler configuration.
257
+ * For example, if you want to change the compiler settings when targetting
258
+ * goerli, you could do something like this:
259
+ *
260
+ * const compilationJob = await runSuper();
261
+ * if (config.network.name === 'goerli') {
262
+ * compilationJob.solidityConfig.settings = newSettings;
263
+ * }
264
+ * return compilationJob;
265
+ *
266
+ */
267
+ subtask(TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE)
268
+ .addParam("dependencyGraph", undefined, undefined, types.any)
269
+ .addParam("file", undefined, undefined, types.any)
270
+ .addOptionalParam("solidityFilesCache", undefined, undefined, types.any)
271
+ .setAction(
272
+ async (
273
+ {
274
+ dependencyGraph,
275
+ file,
276
+ }: {
277
+ dependencyGraph: taskTypes.DependencyGraph;
278
+ file: taskTypes.ResolvedFile;
279
+ solidityFilesCache?: SolidityFilesCache;
280
+ },
281
+ { config }
282
+ ): Promise<CompilationJob | CompilationJobCreationError> => {
283
+ return createCompilationJobFromFile(
284
+ dependencyGraph,
285
+ file,
286
+ config.solidity
287
+ );
288
+ }
289
+ );
290
+
291
+ /**
292
+ * Receives a dependency graph and returns a tuple with two arrays. The first
293
+ * array is a list of CompilationJobsSuccess, where each item has a list of
294
+ * compilation jobs. The second array is a list of CompilationJobsFailure,
295
+ * where each item has a list of files that couldn't be compiled, grouped by
296
+ * the reason for the failure.
297
+ */
298
+ subtask(TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS)
299
+ .addParam("dependencyGraph", undefined, undefined, types.any)
300
+ .addOptionalParam("solidityFilesCache", undefined, undefined, types.any)
301
+ .setAction(
302
+ async (
303
+ {
304
+ dependencyGraph,
305
+ solidityFilesCache,
306
+ }: {
307
+ dependencyGraph: taskTypes.DependencyGraph;
308
+ solidityFilesCache?: SolidityFilesCache;
309
+ },
310
+ { run }
311
+ ): Promise<CompilationJobsCreationResult> => {
312
+ const connectedComponents = dependencyGraph.getConnectedComponents();
313
+
314
+ log(
315
+ `The dependency graph was divided in '${connectedComponents.length}' connected components`
316
+ );
317
+
318
+ const compilationJobsCreationResults = await Promise.all(
319
+ connectedComponents.map((graph) =>
320
+ createCompilationJobsFromConnectedComponent(
321
+ graph,
322
+ (file: taskTypes.ResolvedFile) =>
323
+ run(TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE, {
324
+ file,
325
+ dependencyGraph,
326
+ solidityFilesCache,
327
+ })
328
+ )
329
+ )
330
+ );
331
+
332
+ let jobs: CompilationJob[] = [];
333
+ let errors: CompilationJobCreationError[] = [];
334
+
335
+ for (const result of compilationJobsCreationResults) {
336
+ jobs = jobs.concat(result.jobs);
337
+ errors = errors.concat(result.errors);
338
+ }
339
+
340
+ return { jobs, errors };
341
+ }
342
+ );
343
+
344
+ /**
345
+ * Receives a list of compilation jobs and returns a new list where some of
346
+ * the compilation jobs might've been removed.
347
+ *
348
+ * This task can be overridden to change the way the cache is used, or to use
349
+ * a different approach to filtering out compilation jobs.
350
+ */
351
+ subtask(TASK_COMPILE_SOLIDITY_FILTER_COMPILATION_JOBS)
352
+ .addParam("compilationJobs", undefined, undefined, types.any)
353
+ .addParam("force", undefined, undefined, types.boolean)
354
+ .addOptionalParam("solidityFilesCache", undefined, undefined, types.any)
355
+ .setAction(
356
+ async ({
357
+ compilationJobs,
358
+ force,
359
+ solidityFilesCache,
360
+ }: {
361
+ compilationJobs: CompilationJob[];
362
+ force: boolean;
363
+ solidityFilesCache?: SolidityFilesCache;
364
+ }): Promise<CompilationJob[]> => {
365
+ assertHardhatInvariant(
366
+ solidityFilesCache !== undefined,
367
+ "The implementation of this task needs a defined solidityFilesCache"
368
+ );
369
+
370
+ if (force) {
371
+ log(`force flag enabled, not filtering`);
372
+ return compilationJobs;
373
+ }
374
+
375
+ const neededCompilationJobs = compilationJobs.filter((job) =>
376
+ needsCompilation(job, solidityFilesCache)
377
+ );
378
+
379
+ const jobsFilteredOutCount =
380
+ compilationJobs.length - neededCompilationJobs.length;
381
+ log(`'${jobsFilteredOutCount}' jobs were filtered out`);
382
+
383
+ return neededCompilationJobs;
384
+ }
385
+ );
386
+
387
+ /**
388
+ * Receives a list of compilation jobs and returns a new list where some of
389
+ * the jobs might've been merged.
390
+ */
391
+ subtask(TASK_COMPILE_SOLIDITY_MERGE_COMPILATION_JOBS)
392
+ .addParam("compilationJobs", undefined, undefined, types.any)
393
+ .setAction(
394
+ async ({
395
+ compilationJobs,
396
+ }: {
397
+ compilationJobs: CompilationJob[];
398
+ }): Promise<CompilationJob[]> => {
399
+ return mergeCompilationJobsWithoutBug(compilationJobs);
400
+ }
401
+ );
402
+
403
+ /**
404
+ * Prints a message when there's nothing to compile.
405
+ */
406
+ subtask(TASK_COMPILE_SOLIDITY_LOG_NOTHING_TO_COMPILE)
407
+ .addParam("quiet", undefined, undefined, types.boolean)
408
+ .setAction(async ({ quiet }: { quiet: boolean }) => {
409
+ if (!quiet) {
410
+ console.log("Nothing to compile");
411
+ }
412
+ });
413
+
414
+ /**
415
+ * Receives a list of compilation jobs and sends each one to be compiled.
416
+ */
417
+ subtask(TASK_COMPILE_SOLIDITY_COMPILE_JOBS)
418
+ .addParam("compilationJobs", undefined, undefined, types.any)
419
+ .addParam("quiet", undefined, undefined, types.boolean)
420
+ .addParam("concurrency", undefined, DEFAULT_CONCURRENCY_LEVEL, types.int)
421
+ .setAction(
422
+ async (
423
+ {
424
+ compilationJobs,
425
+ quiet,
426
+ concurrency,
427
+ }: {
428
+ compilationJobs: CompilationJob[];
429
+ quiet: boolean;
430
+ concurrency: number;
431
+ },
432
+ { run }
433
+ ): Promise<{ artifactsEmittedPerJob: ArtifactsEmittedPerJob }> => {
434
+ if (compilationJobs.length === 0) {
435
+ log(`No compilation jobs to compile`);
436
+ await run(TASK_COMPILE_SOLIDITY_LOG_NOTHING_TO_COMPILE, { quiet });
437
+ return { artifactsEmittedPerJob: [] };
438
+ }
439
+
440
+ log(`Compiling ${compilationJobs.length} jobs`);
441
+
442
+ for (const job of compilationJobs) {
443
+ const solcVersion = job.getSolcConfig().version;
444
+
445
+ // versions older than 0.4.11 don't work with hardhat
446
+ // see issue https://github.com/nomiclabs/hardhat/issues/2004
447
+ if (semver.lt(solcVersion, COMPILE_TASK_FIRST_SOLC_VERSION_SUPPORTED)) {
448
+ throw new HardhatError(
449
+ ERRORS.BUILTIN_TASKS.COMPILE_TASK_UNSUPPORTED_SOLC_VERSION,
450
+ {
451
+ version: solcVersion,
452
+ firstSupportedVersion: COMPILE_TASK_FIRST_SOLC_VERSION_SUPPORTED,
453
+ }
454
+ );
455
+ }
456
+ }
457
+
458
+ const { default: pMap } = await import("p-map");
459
+ const pMapOptions = { concurrency, stopOnError: false };
460
+ try {
461
+ const artifactsEmittedPerJob: ArtifactsEmittedPerJob = await pMap(
462
+ compilationJobs,
463
+ async (compilationJob, compilationJobIndex) => {
464
+ const result = await run(TASK_COMPILE_SOLIDITY_COMPILE_JOB, {
465
+ compilationJob,
466
+ compilationJobs,
467
+ compilationJobIndex,
468
+ quiet,
469
+ });
470
+
471
+ return {
472
+ compilationJob: result.compilationJob,
473
+ artifactsEmittedPerFile: result.artifactsEmittedPerFile,
474
+ };
475
+ },
476
+ pMapOptions
477
+ );
478
+
479
+ return { artifactsEmittedPerJob };
480
+ } catch (e) {
481
+ if (!(e instanceof AggregateError)) {
482
+ // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error
483
+ throw e;
484
+ }
485
+
486
+ for (const error of e) {
487
+ if (
488
+ !HardhatError.isHardhatErrorType(
489
+ error,
490
+ ERRORS.BUILTIN_TASKS.COMPILE_FAILURE
491
+ )
492
+ ) {
493
+ // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error
494
+ throw error;
495
+ }
496
+ }
497
+
498
+ // error is an aggregate error, and all errors are compilation failures
499
+ throw new HardhatError(ERRORS.BUILTIN_TASKS.COMPILE_FAILURE);
500
+ }
501
+ }
502
+ );
503
+
504
+ /**
505
+ * Receives a compilation job and returns a CompilerInput.
506
+ *
507
+ * It's not recommended to override this task to modify the solc
508
+ * configuration, override
509
+ * TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE instead.
510
+ */
511
+ subtask(TASK_COMPILE_SOLIDITY_GET_COMPILER_INPUT)
512
+ .addParam("compilationJob", undefined, undefined, types.any)
513
+ .setAction(
514
+ async ({
515
+ compilationJob,
516
+ }: {
517
+ compilationJob: CompilationJob;
518
+ }): Promise<CompilerInput> => {
519
+ return getInputFromCompilationJob(compilationJob);
520
+ }
521
+ );
522
+
523
+ subtask(TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_START)
524
+ .addParam("isCompilerDownloaded", undefined, undefined, types.boolean)
525
+ .addParam("quiet", undefined, undefined, types.boolean)
526
+ .addParam("solcVersion", undefined, undefined, types.string)
527
+ .setAction(
528
+ async ({
529
+ isCompilerDownloaded,
530
+ solcVersion,
531
+ }: {
532
+ isCompilerDownloaded: boolean;
533
+ quiet: boolean;
534
+ solcVersion: string;
535
+ }) => {
536
+ if (isCompilerDownloaded) {
537
+ return;
538
+ }
539
+
540
+ console.log(`Downloading compiler ${solcVersion}`);
541
+ }
542
+ );
543
+
544
+ subtask(TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_END)
545
+ .addParam("isCompilerDownloaded", undefined, undefined, types.boolean)
546
+ .addParam("quiet", undefined, undefined, types.boolean)
547
+ .addParam("solcVersion", undefined, undefined, types.string)
548
+ .setAction(
549
+ async ({}: {
550
+ isCompilerDownloaded: boolean;
551
+ quiet: boolean;
552
+ solcVersion: string;
553
+ }) => {}
554
+ );
555
+
556
+ /**
557
+ * Receives a solc version and returns a path to a solc binary or to a
558
+ * downloaded solcjs module. It also returns a flag indicating if the returned
559
+ * path corresponds to solc or solcjs.
560
+ */
561
+ subtask(TASK_COMPILE_SOLIDITY_GET_SOLC_BUILD)
562
+ .addParam("quiet", undefined, undefined, types.boolean)
563
+ .addParam("solcVersion", undefined, undefined, types.string)
564
+ .setAction(
565
+ async (
566
+ {
567
+ quiet,
568
+ solcVersion,
569
+ }: {
570
+ quiet: boolean;
571
+ solcVersion: string;
572
+ },
573
+ { run }
574
+ ): Promise<SolcBuild> => {
575
+ const compilersCache = await getCompilersDir();
576
+
577
+ const compilerPlatform = CompilerDownloader.getCompilerPlatform();
578
+ const downloader = CompilerDownloader.getConcurrencySafeDownloader(
579
+ compilerPlatform,
580
+ compilersCache
581
+ );
582
+
583
+ await downloader.downloadCompiler(
584
+ solcVersion,
585
+ // callback called before compiler download
586
+ async (isCompilerDownloaded: boolean) => {
587
+ await run(TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_START, {
588
+ solcVersion,
589
+ isCompilerDownloaded,
590
+ quiet,
591
+ });
592
+ },
593
+ // callback called after compiler download
594
+ async (isCompilerDownloaded: boolean) => {
595
+ await run(TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_END, {
596
+ solcVersion,
597
+ isCompilerDownloaded,
598
+ quiet,
599
+ });
600
+ }
601
+ );
602
+
603
+ const compiler = await downloader.getCompiler(solcVersion);
604
+
605
+ if (compiler !== undefined) {
606
+ return compiler;
607
+ }
608
+
609
+ log(
610
+ "Native solc binary doesn't work, using solcjs instead. Try running npx hardhat clean --global"
611
+ );
612
+
613
+ const wasmDownloader = CompilerDownloader.getConcurrencySafeDownloader(
614
+ CompilerPlatform.WASM,
615
+ compilersCache
616
+ );
617
+
618
+ await wasmDownloader.downloadCompiler(
619
+ solcVersion,
620
+ async (isCompilerDownloaded: boolean) => {
621
+ // callback called before compiler download
622
+ await run(TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_START, {
623
+ solcVersion,
624
+ isCompilerDownloaded,
625
+ quiet,
626
+ });
627
+ },
628
+ // callback called after compiler download
629
+ async (isCompilerDownloaded: boolean) => {
630
+ await run(TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_END, {
631
+ solcVersion,
632
+ isCompilerDownloaded,
633
+ quiet,
634
+ });
635
+ }
636
+ );
637
+
638
+ const wasmCompiler = await wasmDownloader.getCompiler(solcVersion);
639
+
640
+ assertHardhatInvariant(
641
+ wasmCompiler !== undefined,
642
+ `WASM build of solc ${solcVersion} isn't working`
643
+ );
644
+
645
+ return wasmCompiler;
646
+ }
647
+ );
648
+
649
+ /**
650
+ * Receives an absolute path to a solcjs module and the input to be compiled,
651
+ * and returns the generated output
652
+ */
653
+ subtask(TASK_COMPILE_SOLIDITY_RUN_SOLCJS)
654
+ .addParam("input", undefined, undefined, types.any)
655
+ .addParam("solcJsPath", undefined, undefined, types.string)
656
+ .setAction(
657
+ async ({
658
+ input,
659
+ solcJsPath,
660
+ }: {
661
+ input: CompilerInput;
662
+ solcJsPath: string;
663
+ }) => {
664
+ const compiler = new Compiler(solcJsPath);
665
+
666
+ return compiler.compile(input);
667
+ }
668
+ );
669
+
670
+ /**
671
+ * Receives an absolute path to a solc binary and the input to be compiled,
672
+ * and returns the generated output
673
+ */
674
+ subtask(TASK_COMPILE_SOLIDITY_RUN_SOLC)
675
+ .addParam("input", undefined, undefined, types.any)
676
+ .addParam("solcPath", undefined, undefined, types.string)
677
+ .addOptionalParam("solcVersion", undefined, undefined, types.string)
678
+ .setAction(
679
+ async ({
680
+ input,
681
+ solcPath,
682
+ solcVersion,
683
+ }: {
684
+ input: CompilerInput;
685
+ solcPath: string;
686
+ solcVersion?: string;
687
+ }) => {
688
+ if (solcVersion !== undefined && semver.valid(solcVersion) === null) {
689
+ throw new HardhatError(ERRORS.ARGUMENTS.INVALID_VALUE_FOR_TYPE, {
690
+ value: solcVersion,
691
+ name: "solcVersion",
692
+ type: "string",
693
+ });
694
+ }
695
+
696
+ const compiler = new NativeCompiler(solcPath, solcVersion);
697
+
698
+ return compiler.compile(input);
699
+ }
700
+ );
701
+
702
+ /**
703
+ * Receives a CompilerInput and a solc version, compiles the input using a native
704
+ * solc binary or, if that's not possible, using solcjs. Returns the generated
705
+ * output.
706
+ *
707
+ * This task can be overriden to change how solc is obtained or used.
708
+ */
709
+ subtask(TASK_COMPILE_SOLIDITY_COMPILE_SOLC)
710
+ .addParam("input", undefined, undefined, types.any)
711
+ .addParam("quiet", undefined, undefined, types.boolean)
712
+ .addParam("solcVersion", undefined, undefined, types.string)
713
+ .addParam("compilationJob", undefined, undefined, types.any)
714
+ .addParam("compilationJobs", undefined, undefined, types.any)
715
+ .addParam("compilationJobIndex", undefined, undefined, types.int)
716
+ .setAction(
717
+ async (
718
+ {
719
+ input,
720
+ quiet,
721
+ solcVersion,
722
+ compilationJob,
723
+ compilationJobs,
724
+ compilationJobIndex,
725
+ }: {
726
+ input: CompilerInput;
727
+ quiet: boolean;
728
+ solcVersion: string;
729
+ compilationJob: CompilationJob;
730
+ compilationJobs: CompilationJob[];
731
+ compilationJobIndex: number;
732
+ },
733
+ { run }
734
+ ): Promise<{ output: CompilerOutput; solcBuild: SolcBuild }> => {
735
+ const solcBuild: SolcBuild = await run(
736
+ TASK_COMPILE_SOLIDITY_GET_SOLC_BUILD,
737
+ {
738
+ quiet,
739
+ solcVersion,
740
+ }
741
+ );
742
+
743
+ await run(TASK_COMPILE_SOLIDITY_LOG_RUN_COMPILER_START, {
744
+ compilationJob,
745
+ compilationJobs,
746
+ compilationJobIndex,
747
+ quiet,
748
+ });
749
+
750
+ let output;
751
+ if (solcBuild.isSolcJs) {
752
+ output = await run(TASK_COMPILE_SOLIDITY_RUN_SOLCJS, {
753
+ input,
754
+ solcJsPath: solcBuild.compilerPath,
755
+ });
756
+ } else {
757
+ output = await run(TASK_COMPILE_SOLIDITY_RUN_SOLC, {
758
+ input,
759
+ solcPath: solcBuild.compilerPath,
760
+ solcVersion,
761
+ });
762
+ }
763
+
764
+ await run(TASK_COMPILE_SOLIDITY_LOG_RUN_COMPILER_END, {
765
+ compilationJob,
766
+ compilationJobs,
767
+ compilationJobIndex,
768
+ output,
769
+ quiet,
770
+ });
771
+
772
+ return { output, solcBuild };
773
+ }
774
+ );
775
+
776
+ /**
777
+ * This task is just a proxy to the task that compiles with solc.
778
+ *
779
+ * Override this to use a different task to compile a job.
780
+ */
781
+ subtask(TASK_COMPILE_SOLIDITY_COMPILE, async (taskArgs: any, { run }) => {
782
+ return run(TASK_COMPILE_SOLIDITY_COMPILE_SOLC, taskArgs);
783
+ });
784
+
785
+ /**
786
+ * Receives a compilation output and prints its errors and any other
787
+ * information useful to the user.
788
+ */
789
+ subtask(TASK_COMPILE_SOLIDITY_LOG_COMPILATION_ERRORS)
790
+ .addParam("output", undefined, undefined, types.any)
791
+ .addParam("quiet", undefined, undefined, types.boolean)
792
+ .setAction(async ({ output }: { output: any; quiet: boolean }) => {
793
+ if (output?.errors === undefined) {
794
+ return;
795
+ }
796
+
797
+ for (const error of output.errors) {
798
+ if (error.severity === "error") {
799
+ const errorMessage: string =
800
+ getFormattedInternalCompilerErrorMessage(error) ??
801
+ error.formattedMessage;
802
+
803
+ console.error(errorMessage.replace(/^\w+:/, (t) => chalk.red.bold(t)));
804
+ } else {
805
+ console.warn(
806
+ (error.formattedMessage as string).replace(/^\w+:/, (t) =>
807
+ chalk.yellow.bold(t)
808
+ )
809
+ );
810
+ }
811
+ }
812
+
813
+ const hasConsoleErrors: boolean = output.errors.some(isConsoleLogError);
814
+ if (hasConsoleErrors) {
815
+ console.error(
816
+ chalk.red(
817
+ `The console.log call you made isn’t supported. See https://hardhat.org/console-log for the list of supported methods.`
818
+ )
819
+ );
820
+ console.log();
821
+ }
822
+ });
823
+
824
+ /**
825
+ * Receives a solc output and checks if there are errors. Throws if there are
826
+ * errors.
827
+ *
828
+ * Override this task to avoid interrupting the compilation process if some
829
+ * job has compilation errors.
830
+ */
831
+ subtask(TASK_COMPILE_SOLIDITY_CHECK_ERRORS)
832
+ .addParam("output", undefined, undefined, types.any)
833
+ .addParam("quiet", undefined, undefined, types.boolean)
834
+ .setAction(
835
+ async ({ output, quiet }: { output: any; quiet: boolean }, { run }) => {
836
+ await run(TASK_COMPILE_SOLIDITY_LOG_COMPILATION_ERRORS, {
837
+ output,
838
+ quiet,
839
+ });
840
+
841
+ if (hasCompilationErrors(output)) {
842
+ throw new HardhatError(ERRORS.BUILTIN_TASKS.COMPILE_FAILURE);
843
+ }
844
+ }
845
+ );
846
+
847
+ /**
848
+ * Saves to disk the artifacts for a compilation job. These artifacts
849
+ * include the main artifacts, the debug files, and the build info.
850
+ */
851
+ subtask(TASK_COMPILE_SOLIDITY_EMIT_ARTIFACTS)
852
+ .addParam("compilationJob", undefined, undefined, types.any)
853
+ .addParam("input", undefined, undefined, types.any)
854
+ .addParam("output", undefined, undefined, types.any)
855
+ .addParam("solcBuild", undefined, undefined, types.any)
856
+ .setAction(
857
+ async (
858
+ {
859
+ compilationJob,
860
+ input,
861
+ output,
862
+ solcBuild,
863
+ }: {
864
+ compilationJob: CompilationJob;
865
+ input: CompilerInput;
866
+ output: CompilerOutput;
867
+ solcBuild: SolcBuild;
868
+ },
869
+ { artifacts, run }
870
+ ): Promise<{
871
+ artifactsEmittedPerFile: taskTypes.ArtifactsEmittedPerFile;
872
+ }> => {
873
+ const pathToBuildInfo = await artifacts.saveBuildInfo(
874
+ compilationJob.getSolcConfig().version,
875
+ solcBuild.longVersion,
876
+ input,
877
+ output
878
+ );
879
+
880
+ const artifactsEmittedPerFile: taskTypes.ArtifactsEmittedPerFile =
881
+ await Promise.all(
882
+ compilationJob
883
+ .getResolvedFiles()
884
+ .filter((f) => compilationJob.emitsArtifacts(f))
885
+ .map(async (file) => {
886
+ const artifactsEmitted = await Promise.all(
887
+ Object.entries(output.contracts?.[file.sourceName] ?? {}).map(
888
+ async ([contractName, contractOutput]) => {
889
+ log(`Emitting artifact for contract '${contractName}'`);
890
+ const artifact = await run(
891
+ TASK_COMPILE_SOLIDITY_GET_ARTIFACT_FROM_COMPILATION_OUTPUT,
892
+ {
893
+ sourceName: file.sourceName,
894
+ contractName,
895
+ contractOutput,
896
+ }
897
+ );
898
+
899
+ await artifacts.saveArtifactAndDebugFile(
900
+ artifact,
901
+ pathToBuildInfo
902
+ );
903
+
904
+ return artifact.contractName;
905
+ }
906
+ )
907
+ );
908
+
909
+ return {
910
+ file,
911
+ artifactsEmitted,
912
+ };
913
+ })
914
+ );
915
+
916
+ return { artifactsEmittedPerFile };
917
+ }
918
+ );
919
+
920
+ /**
921
+ * Generates the artifact for contract `contractName` given its compilation
922
+ * output.
923
+ */
924
+ subtask(TASK_COMPILE_SOLIDITY_GET_ARTIFACT_FROM_COMPILATION_OUTPUT)
925
+ .addParam("sourceName", undefined, undefined, types.string)
926
+ .addParam("contractName", undefined, undefined, types.string)
927
+ .addParam("contractOutput", undefined, undefined, types.any)
928
+ .setAction(
929
+ async ({
930
+ sourceName,
931
+ contractName,
932
+ contractOutput,
933
+ }: {
934
+ sourceName: string;
935
+ contractName: string;
936
+ contractOutput: any;
937
+ }): Promise<any> => {
938
+ return getArtifactFromContractOutput(
939
+ sourceName,
940
+ contractName,
941
+ contractOutput
942
+ );
943
+ }
944
+ );
945
+
946
+ /**
947
+ * Prints a message before running soljs with some input.
948
+ */
949
+ subtask(TASK_COMPILE_SOLIDITY_LOG_RUN_COMPILER_START)
950
+ .addParam("compilationJob", undefined, undefined, types.any)
951
+ .addParam("compilationJobs", undefined, undefined, types.any)
952
+ .addParam("compilationJobIndex", undefined, undefined, types.int)
953
+ .addParam("quiet", undefined, undefined, types.boolean)
954
+ .setAction(
955
+ async ({}: {
956
+ compilationJob: CompilationJob;
957
+ compilationJobs: CompilationJob[];
958
+ compilationJobIndex: number;
959
+ }) => {}
960
+ );
961
+
962
+ /**
963
+ * Prints a message after compiling some input
964
+ */
965
+ subtask(TASK_COMPILE_SOLIDITY_LOG_RUN_COMPILER_END)
966
+ .addParam("compilationJob", undefined, undefined, types.any)
967
+ .addParam("compilationJobs", undefined, undefined, types.any)
968
+ .addParam("compilationJobIndex", undefined, undefined, types.int)
969
+ .addParam("output", undefined, undefined, types.any)
970
+ .addParam("quiet", undefined, undefined, types.boolean)
971
+ .setAction(
972
+ async ({}: {
973
+ compilationJob: CompilationJob;
974
+ compilationJobs: CompilationJob[];
975
+ compilationJobIndex: number;
976
+ output: any;
977
+ quiet: boolean;
978
+ }) => {}
979
+ );
980
+
981
+ /**
982
+ * This is an orchestrator task that uses other subtasks to compile a
983
+ * compilation job.
984
+ */
985
+ subtask(TASK_COMPILE_SOLIDITY_COMPILE_JOB)
986
+ .addParam("compilationJob", undefined, undefined, types.any)
987
+ .addParam("compilationJobs", undefined, undefined, types.any)
988
+ .addParam("compilationJobIndex", undefined, undefined, types.int)
989
+ .addParam("quiet", undefined, undefined, types.boolean)
990
+ .addOptionalParam("emitsArtifacts", undefined, true, types.boolean)
991
+ .setAction(
992
+ async (
993
+ {
994
+ compilationJob,
995
+ compilationJobs,
996
+ compilationJobIndex,
997
+ quiet,
998
+ emitsArtifacts,
999
+ }: {
1000
+ compilationJob: CompilationJob;
1001
+ compilationJobs: CompilationJob[];
1002
+ compilationJobIndex: number;
1003
+ quiet: boolean;
1004
+ emitsArtifacts: boolean;
1005
+ },
1006
+ { run }
1007
+ ): Promise<{
1008
+ artifactsEmittedPerFile: taskTypes.ArtifactsEmittedPerFile;
1009
+ compilationJob: taskTypes.CompilationJob;
1010
+ input: CompilerInput;
1011
+ output: CompilerOutput;
1012
+ solcBuild: any;
1013
+ }> => {
1014
+ log(
1015
+ `Compiling job with version '${compilationJob.getSolcConfig().version}'`
1016
+ );
1017
+ const input: CompilerInput = await run(
1018
+ TASK_COMPILE_SOLIDITY_GET_COMPILER_INPUT,
1019
+ {
1020
+ compilationJob,
1021
+ }
1022
+ );
1023
+
1024
+ const { output, solcBuild } = await run(TASK_COMPILE_SOLIDITY_COMPILE, {
1025
+ solcVersion: compilationJob.getSolcConfig().version,
1026
+ input,
1027
+ quiet,
1028
+ compilationJob,
1029
+ compilationJobs,
1030
+ compilationJobIndex,
1031
+ });
1032
+
1033
+ await run(TASK_COMPILE_SOLIDITY_CHECK_ERRORS, { output, quiet });
1034
+
1035
+ let artifactsEmittedPerFile = [];
1036
+ if (emitsArtifacts) {
1037
+ artifactsEmittedPerFile = (
1038
+ await run(TASK_COMPILE_SOLIDITY_EMIT_ARTIFACTS, {
1039
+ compilationJob,
1040
+ input,
1041
+ output,
1042
+ solcBuild,
1043
+ })
1044
+ ).artifactsEmittedPerFile;
1045
+ }
1046
+
1047
+ return {
1048
+ artifactsEmittedPerFile,
1049
+ compilationJob,
1050
+ input,
1051
+ output,
1052
+ solcBuild,
1053
+ };
1054
+ }
1055
+ );
1056
+
1057
+ /**
1058
+ * Receives a list of CompilationJobsFailure and throws an error if it's not
1059
+ * empty.
1060
+ *
1061
+ * This task could be overriden to avoid interrupting the compilation if
1062
+ * there's some part of the project that can't be compiled.
1063
+ */
1064
+ subtask(TASK_COMPILE_SOLIDITY_HANDLE_COMPILATION_JOBS_FAILURES)
1065
+ .addParam("compilationJobsCreationErrors", undefined, undefined, types.any)
1066
+ .setAction(
1067
+ async (
1068
+ {
1069
+ compilationJobsCreationErrors,
1070
+ }: {
1071
+ compilationJobsCreationErrors: CompilationJobCreationError[];
1072
+ },
1073
+ { run }
1074
+ ) => {
1075
+ const hasErrors = compilationJobsCreationErrors.length > 0;
1076
+
1077
+ if (hasErrors) {
1078
+ log(`There were errors creating the compilation jobs, throwing`);
1079
+ const reasons: string = await run(
1080
+ TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS_FAILURE_REASONS,
1081
+ { compilationJobsCreationErrors }
1082
+ );
1083
+
1084
+ throw new HardhatError(
1085
+ ERRORS.BUILTIN_TASKS.COMPILATION_JOBS_CREATION_FAILURE,
1086
+ {
1087
+ reasons,
1088
+ }
1089
+ );
1090
+ }
1091
+ }
1092
+ );
1093
+
1094
+ /**
1095
+ * Receives a list of CompilationJobsFailure and returns an error message
1096
+ * that describes the failure.
1097
+ */
1098
+ subtask(TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS_FAILURE_REASONS)
1099
+ .addParam("compilationJobsCreationErrors", undefined, undefined, types.any)
1100
+ .setAction(
1101
+ async ({
1102
+ compilationJobsCreationErrors: errors,
1103
+ }: {
1104
+ compilationJobsCreationErrors: CompilationJobCreationError[];
1105
+ }): Promise<string> => {
1106
+ const noCompatibleSolc: CompilationJobCreationError[] = [];
1107
+ const incompatibleOverridenSolc: CompilationJobCreationError[] = [];
1108
+ const directlyImportsIncompatibleFile: CompilationJobCreationError[] = [];
1109
+ const indirectlyImportsIncompatibleFile: CompilationJobCreationError[] =
1110
+ [];
1111
+ const other: CompilationJobCreationError[] = [];
1112
+
1113
+ for (const error of errors) {
1114
+ if (
1115
+ error.reason ===
1116
+ CompilationJobCreationErrorReason.NO_COMPATIBLE_SOLC_VERSION_FOUND
1117
+ ) {
1118
+ noCompatibleSolc.push(error);
1119
+ } else if (
1120
+ error.reason ===
1121
+ CompilationJobCreationErrorReason.INCOMPATIBLE_OVERRIDEN_SOLC_VERSION
1122
+ ) {
1123
+ incompatibleOverridenSolc.push(error);
1124
+ } else if (
1125
+ error.reason ===
1126
+ CompilationJobCreationErrorReason.DIRECTLY_IMPORTS_INCOMPATIBLE_FILE
1127
+ ) {
1128
+ directlyImportsIncompatibleFile.push(error);
1129
+ } else if (
1130
+ error.reason ===
1131
+ CompilationJobCreationErrorReason.INDIRECTLY_IMPORTS_INCOMPATIBLE_FILE
1132
+ ) {
1133
+ indirectlyImportsIncompatibleFile.push(error);
1134
+ } else if (
1135
+ error.reason === CompilationJobCreationErrorReason.OTHER_ERROR
1136
+ ) {
1137
+ other.push(error);
1138
+ } else {
1139
+ // add unrecognized errors to `other`
1140
+ other.push(error);
1141
+ }
1142
+ }
1143
+
1144
+ let errorMessage = "";
1145
+ if (incompatibleOverridenSolc.length > 0) {
1146
+ errorMessage += `The compiler version for the following files is fixed through an override in your config file to a version that is incompatible with their Solidity version pragmas.
1147
+
1148
+ `;
1149
+
1150
+ for (const error of incompatibleOverridenSolc) {
1151
+ const { sourceName } = error.file;
1152
+ const { versionPragmas } = error.file.content;
1153
+ const versionsRange = versionPragmas.join(" ");
1154
+
1155
+ log(`File ${sourceName} has an incompatible overridden compiler`);
1156
+
1157
+ errorMessage += ` * ${sourceName} (${versionsRange})\n`;
1158
+ }
1159
+
1160
+ errorMessage += "\n";
1161
+ }
1162
+
1163
+ if (noCompatibleSolc.length > 0) {
1164
+ errorMessage += `The Solidity version pragma statement in these files doesn't match any of the configured compilers in your config. Change the pragma or configure additional compiler versions in your hardhat config.
1165
+
1166
+ `;
1167
+
1168
+ for (const error of noCompatibleSolc) {
1169
+ const { sourceName } = error.file;
1170
+ const { versionPragmas } = error.file.content;
1171
+ const versionsRange = versionPragmas.join(" ");
1172
+
1173
+ log(
1174
+ `File ${sourceName} doesn't match any of the configured compilers`
1175
+ );
1176
+
1177
+ errorMessage += ` * ${sourceName} (${versionsRange})\n`;
1178
+ }
1179
+
1180
+ errorMessage += "\n";
1181
+ }
1182
+
1183
+ if (directlyImportsIncompatibleFile.length > 0) {
1184
+ errorMessage += `These files import other files that use a different and incompatible version of Solidity:
1185
+
1186
+ `;
1187
+
1188
+ for (const error of directlyImportsIncompatibleFile) {
1189
+ const { sourceName } = error.file;
1190
+ const { versionPragmas } = error.file.content;
1191
+ const versionsRange = versionPragmas.join(" ");
1192
+
1193
+ const incompatibleDirectImportsFiles: ResolvedFile[] =
1194
+ error.extra?.incompatibleDirectImports ?? [];
1195
+
1196
+ const incompatibleDirectImports = incompatibleDirectImportsFiles.map(
1197
+ (x: ResolvedFile) =>
1198
+ `${x.sourceName} (${x.content.versionPragmas.join(" ")})`
1199
+ );
1200
+
1201
+ log(
1202
+ `File ${sourceName} imports files ${incompatibleDirectImportsFiles
1203
+ .map((x) => x.sourceName)
1204
+ .join(", ")} that use an incompatible version of Solidity`
1205
+ );
1206
+
1207
+ let directImportsText = "";
1208
+ if (incompatibleDirectImports.length === 1) {
1209
+ directImportsText = ` imports ${incompatibleDirectImports[0]}`;
1210
+ } else if (incompatibleDirectImports.length === 2) {
1211
+ directImportsText = ` imports ${incompatibleDirectImports[0]} and ${incompatibleDirectImports[1]}`;
1212
+ } else if (incompatibleDirectImports.length > 2) {
1213
+ const otherImportsCount = incompatibleDirectImports.length - 2;
1214
+ directImportsText = ` imports ${incompatibleDirectImports[0]}, ${
1215
+ incompatibleDirectImports[1]
1216
+ } and ${otherImportsCount} other ${pluralize(
1217
+ otherImportsCount,
1218
+ "file"
1219
+ )}. Use --verbose to see the full list.`;
1220
+ }
1221
+
1222
+ errorMessage += ` * ${sourceName} (${versionsRange})${directImportsText}\n`;
1223
+ }
1224
+
1225
+ errorMessage += "\n";
1226
+ }
1227
+
1228
+ if (indirectlyImportsIncompatibleFile.length > 0) {
1229
+ errorMessage += `These files depend on other files that use a different and incompatible version of Solidity:
1230
+
1231
+ `;
1232
+
1233
+ for (const error of indirectlyImportsIncompatibleFile) {
1234
+ const { sourceName } = error.file;
1235
+ const { versionPragmas } = error.file.content;
1236
+ const versionsRange = versionPragmas.join(" ");
1237
+
1238
+ const incompatibleIndirectImports: taskTypes.TransitiveDependency[] =
1239
+ error.extra?.incompatibleIndirectImports ?? [];
1240
+
1241
+ const incompatibleImports = incompatibleIndirectImports.map(
1242
+ ({ dependency }) =>
1243
+ `${
1244
+ dependency.sourceName
1245
+ } (${dependency.content.versionPragmas.join(" ")})`
1246
+ );
1247
+
1248
+ for (const {
1249
+ dependency,
1250
+ path: dependencyPath,
1251
+ } of incompatibleIndirectImports) {
1252
+ const dependencyPathText = [
1253
+ sourceName,
1254
+ ...dependencyPath.map((x) => x.sourceName),
1255
+ dependency.sourceName,
1256
+ ].join(" -> ");
1257
+
1258
+ log(
1259
+ `File ${sourceName} depends on file ${dependency.sourceName} that uses an incompatible version of Solidity
1260
+ The dependency path is ${dependencyPathText}
1261
+ `
1262
+ );
1263
+ }
1264
+
1265
+ let indirectImportsText = "";
1266
+ if (incompatibleImports.length === 1) {
1267
+ indirectImportsText = ` depends on ${incompatibleImports[0]}`;
1268
+ } else if (incompatibleImports.length === 2) {
1269
+ indirectImportsText = ` depends on ${incompatibleImports[0]} and ${incompatibleImports[1]}`;
1270
+ } else if (incompatibleImports.length > 2) {
1271
+ const otherImportsCount = incompatibleImports.length - 2;
1272
+ indirectImportsText = ` depends on ${incompatibleImports[0]}, ${
1273
+ incompatibleImports[1]
1274
+ } and ${otherImportsCount} other ${pluralize(
1275
+ otherImportsCount,
1276
+ "file"
1277
+ )}. Use --verbose to see the full list.`;
1278
+ }
1279
+
1280
+ errorMessage += ` * ${sourceName} (${versionsRange})${indirectImportsText}\n`;
1281
+ }
1282
+
1283
+ errorMessage += "\n";
1284
+ }
1285
+
1286
+ if (other.length > 0) {
1287
+ errorMessage += `These files and its dependencies cannot be compiled with your config. This can happen because they have incompatible Solidity pragmas, or don't match any of your configured Solidity compilers.
1288
+
1289
+ ${other.map((x) => ` * ${x.file.sourceName}`).join("\n")}
1290
+
1291
+ `;
1292
+ }
1293
+
1294
+ errorMessage += `To learn more, run the command again with --verbose
1295
+
1296
+ Read about compiler configuration at https://hardhat.org/config
1297
+ `;
1298
+
1299
+ return errorMessage;
1300
+ }
1301
+ );
1302
+
1303
+ subtask(TASK_COMPILE_SOLIDITY_LOG_COMPILATION_RESULT)
1304
+ .addParam("compilationJobs", undefined, undefined, types.any)
1305
+ .addParam("quiet", undefined, undefined, types.boolean)
1306
+ .setAction(
1307
+ async ({ compilationJobs }: { compilationJobs: CompilationJob[] }) => {
1308
+ let count = 0;
1309
+ const evmVersions = new Set<string>();
1310
+ const unknownEvmVersions = new Set<string>();
1311
+
1312
+ for (const job of compilationJobs) {
1313
+ count += job
1314
+ .getResolvedFiles()
1315
+ .filter((file) => job.emitsArtifacts(file)).length;
1316
+
1317
+ const solcVersion = job.getSolcConfig().version;
1318
+ const evmTarget =
1319
+ job.getSolcConfig().settings?.evmVersion ??
1320
+ getEvmVersionFromSolcVersion(solcVersion);
1321
+
1322
+ if (evmTarget !== undefined) {
1323
+ evmVersions.add(evmTarget);
1324
+ } else {
1325
+ unknownEvmVersions.add(
1326
+ `unknown evm version for solc version ${solcVersion}`
1327
+ );
1328
+ }
1329
+ }
1330
+
1331
+ const targetVersionsList = Array.from(evmVersions)
1332
+ // Alphabetically sort evm versions. The unknown ones are added at the end
1333
+ .sort()
1334
+ .concat(Array.from(unknownEvmVersions).sort());
1335
+
1336
+ if (count > 0) {
1337
+ console.log(
1338
+ `Compiled ${count} Solidity ${pluralize(
1339
+ count,
1340
+ "file"
1341
+ )} successfully (evm ${pluralize(
1342
+ targetVersionsList.length,
1343
+ "target",
1344
+ "targets"
1345
+ )}: ${targetVersionsList.join(", ")}).`
1346
+ );
1347
+ }
1348
+ }
1349
+ );
1350
+
1351
+ /**
1352
+ * Main task for compiling the solidity files in the project.
1353
+ *
1354
+ * The main responsibility of this task is to orchestrate and connect most of
1355
+ * the subtasks related to compiling solidity.
1356
+ */
1357
+ subtask(TASK_COMPILE_SOLIDITY)
1358
+ .addParam("force", undefined, undefined, types.boolean)
1359
+ .addParam("quiet", undefined, undefined, types.boolean)
1360
+ .addParam("concurrency", undefined, DEFAULT_CONCURRENCY_LEVEL, types.int)
1361
+ .setAction(
1362
+ async (
1363
+ {
1364
+ force,
1365
+ quiet,
1366
+ concurrency,
1367
+ }: { force: boolean; quiet: boolean; concurrency: number },
1368
+ { artifacts, config, run }
1369
+ ) => {
1370
+ const rootPath = config.paths.root;
1371
+
1372
+ const sourcePaths: string[] = await run(
1373
+ TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS,
1374
+ { sourcePath: config.paths.sources }
1375
+ );
1376
+ const sourceNames: string[] = await run(
1377
+ TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES,
1378
+ {
1379
+ rootPath,
1380
+ sourcePaths,
1381
+ }
1382
+ );
1383
+
1384
+ const solidityFilesCachePath = getSolidityFilesCachePath(config.paths);
1385
+ let solidityFilesCache = await SolidityFilesCache.readFromFile(
1386
+ solidityFilesCachePath
1387
+ );
1388
+
1389
+ const dependencyGraph: taskTypes.DependencyGraph = await run(
1390
+ TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH,
1391
+ { rootPath, sourceNames, solidityFilesCache }
1392
+ );
1393
+
1394
+ solidityFilesCache = await invalidateCacheMissingArtifacts(
1395
+ solidityFilesCache,
1396
+ artifacts,
1397
+ dependencyGraph.getResolvedFiles()
1398
+ );
1399
+
1400
+ const compilationJobsCreationResult: CompilationJobsCreationResult =
1401
+ await run(TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS, {
1402
+ dependencyGraph,
1403
+ solidityFilesCache,
1404
+ });
1405
+
1406
+ await run(TASK_COMPILE_SOLIDITY_HANDLE_COMPILATION_JOBS_FAILURES, {
1407
+ compilationJobsCreationErrors: compilationJobsCreationResult.errors,
1408
+ });
1409
+
1410
+ const compilationJobs = compilationJobsCreationResult.jobs;
1411
+
1412
+ const filteredCompilationJobs: CompilationJob[] = await run(
1413
+ TASK_COMPILE_SOLIDITY_FILTER_COMPILATION_JOBS,
1414
+ { compilationJobs, force, solidityFilesCache }
1415
+ );
1416
+
1417
+ const mergedCompilationJobs: CompilationJob[] = await run(
1418
+ TASK_COMPILE_SOLIDITY_MERGE_COMPILATION_JOBS,
1419
+ { compilationJobs: filteredCompilationJobs }
1420
+ );
1421
+
1422
+ const {
1423
+ artifactsEmittedPerJob,
1424
+ }: { artifactsEmittedPerJob: ArtifactsEmittedPerJob } = await run(
1425
+ TASK_COMPILE_SOLIDITY_COMPILE_JOBS,
1426
+ {
1427
+ compilationJobs: mergedCompilationJobs,
1428
+ quiet,
1429
+ concurrency,
1430
+ }
1431
+ );
1432
+
1433
+ // update cache using the information about the emitted artifacts
1434
+ for (const {
1435
+ compilationJob: compilationJob,
1436
+ artifactsEmittedPerFile: artifactsEmittedPerFile,
1437
+ } of artifactsEmittedPerJob) {
1438
+ for (const { file, artifactsEmitted } of artifactsEmittedPerFile) {
1439
+ solidityFilesCache.addFile(file.absolutePath, {
1440
+ lastModificationDate: file.lastModificationDate.valueOf(),
1441
+ contentHash: file.contentHash,
1442
+ sourceName: file.sourceName,
1443
+ solcConfig: compilationJob.getSolcConfig(),
1444
+ imports: file.content.imports,
1445
+ versionPragmas: file.content.versionPragmas,
1446
+ artifacts: artifactsEmitted,
1447
+ });
1448
+ }
1449
+ }
1450
+
1451
+ const allArtifactsEmittedPerFile = solidityFilesCache.getEntries();
1452
+
1453
+ // We know this is the actual implementation, so we use some
1454
+ // non-public methods here.
1455
+ const artifactsImpl = artifacts as ArtifactsImpl;
1456
+ artifactsImpl.addValidArtifacts(allArtifactsEmittedPerFile);
1457
+
1458
+ await solidityFilesCache.writeToFile(solidityFilesCachePath);
1459
+
1460
+ await run(TASK_COMPILE_SOLIDITY_LOG_COMPILATION_RESULT, {
1461
+ compilationJobs: mergedCompilationJobs,
1462
+ quiet,
1463
+ });
1464
+ }
1465
+ );
1466
+
1467
+ subtask(TASK_COMPILE_REMOVE_OBSOLETE_ARTIFACTS, async (_, { artifacts }) => {
1468
+ // We know this is the actual implementation, so we use some
1469
+ // non-public methods here.
1470
+ const artifactsImpl = artifacts as ArtifactsImpl;
1471
+ await artifactsImpl.removeObsoleteArtifacts();
1472
+ });
1473
+
1474
+ /**
1475
+ * Returns a list of compilation tasks.
1476
+ *
1477
+ * This is the task to override to add support for other languages.
1478
+ */
1479
+ subtask(TASK_COMPILE_GET_COMPILATION_TASKS, async (): Promise<string[]> => {
1480
+ return [TASK_COMPILE_SOLIDITY];
1481
+ });
1482
+
1483
+ /**
1484
+ * Main compile task.
1485
+ *
1486
+ * This is a meta-task that just gets all the compilation tasks and runs them.
1487
+ * Right now there's only a "compile solidity" task.
1488
+ */
1489
+ task(TASK_COMPILE, "Compiles the entire project, building all artifacts")
1490
+ .addFlag("force", "Force compilation ignoring cache")
1491
+ .addFlag("quiet", "Makes the compilation process less verbose")
1492
+ .addParam(
1493
+ "concurrency",
1494
+ "Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1",
1495
+ DEFAULT_CONCURRENCY_LEVEL,
1496
+ types.int
1497
+ )
1498
+ .setAction(async (compilationArgs: any, { run }) => {
1499
+ const compilationTasks: string[] = await run(
1500
+ TASK_COMPILE_GET_COMPILATION_TASKS
1501
+ );
1502
+
1503
+ for (const compilationTask of compilationTasks) {
1504
+ await run(compilationTask, compilationArgs);
1505
+ }
1506
+
1507
+ await run(TASK_COMPILE_REMOVE_OBSOLETE_ARTIFACTS);
1508
+ });
1509
+
1510
+ /**
1511
+ * If a file is present in the cache, but some of its artifacts are missing on
1512
+ * disk, we remove it from the cache to force it to be recompiled.
1513
+ */
1514
+ async function invalidateCacheMissingArtifacts(
1515
+ solidityFilesCache: SolidityFilesCache,
1516
+ artifacts: Artifacts,
1517
+ resolvedFiles: ResolvedFile[]
1518
+ ): Promise<SolidityFilesCache> {
1519
+ const paths = new Set(await artifacts.getArtifactPaths());
1520
+
1521
+ for (const file of resolvedFiles) {
1522
+ const cacheEntry = solidityFilesCache.getEntry(file.absolutePath);
1523
+
1524
+ if (cacheEntry === undefined) {
1525
+ continue;
1526
+ }
1527
+
1528
+ const { artifacts: emittedArtifacts } = cacheEntry;
1529
+ for (const emittedArtifact of emittedArtifacts) {
1530
+ const fqn = getFullyQualifiedName(file.sourceName, emittedArtifact);
1531
+ const path = artifacts.formArtifactPathFromFullyQualifiedName(fqn);
1532
+
1533
+ if (!paths.has(path)) {
1534
+ log(
1535
+ `Invalidate cache for '${file.absolutePath}' because artifact '${fqn}' doesn't exist`
1536
+ );
1537
+
1538
+ solidityFilesCache.removeEntry(file.absolutePath);
1539
+ break;
1540
+ }
1541
+ }
1542
+ }
1543
+
1544
+ artifacts.clearCache?.();
1545
+
1546
+ return solidityFilesCache;
1547
+ }
1548
+
1549
+ /**
1550
+ * Checks if the given compilation job needs to be done.
1551
+ */
1552
+ function needsCompilation(
1553
+ job: taskTypes.CompilationJob,
1554
+ cache: SolidityFilesCache
1555
+ ): boolean {
1556
+ for (const file of job.getResolvedFiles()) {
1557
+ const hasChanged = cache.hasFileChanged(
1558
+ file.absolutePath,
1559
+ file.contentHash,
1560
+ // we only check if the solcConfig is different for files that
1561
+ // emit artifacts
1562
+ job.emitsArtifacts(file) ? job.getSolcConfig() : undefined
1563
+ );
1564
+
1565
+ if (hasChanged) {
1566
+ return true;
1567
+ }
1568
+ }
1569
+
1570
+ return false;
1571
+ }
1572
+
1573
+ function hasCompilationErrors(output: any): boolean {
1574
+ return output.errors?.some((x: any) => x.severity === "error");
1575
+ }
1576
+
1577
+ /**
1578
+ * This function returns a properly formatted Internal Compiler Error message.
1579
+ *
1580
+ * This is present due to a bug in Solidity. See: https://github.com/ethereum/solidity/issues/9926
1581
+ *
1582
+ * If the error is not an ICE, or if it's properly formatted, this function returns undefined.
1583
+ */
1584
+ function getFormattedInternalCompilerErrorMessage(error: {
1585
+ formattedMessage: string;
1586
+ message: string;
1587
+ type: string;
1588
+ }): string | undefined {
1589
+ if (error.formattedMessage.trim() !== "InternalCompilerError:") {
1590
+ return;
1591
+ }
1592
+
1593
+ // We trim any final `:`, as we found some at the end of the error messages,
1594
+ // and then trim just in case a blank space was left
1595
+ return `${error.type}: ${error.message}`.replace(/[:\s]*$/g, "").trim();
1596
+ }