hardhat 2.6.8 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/builtin-tasks/check.js +1 -1
  2. package/builtin-tasks/check.js.map +1 -1
  3. package/builtin-tasks/clean.js +3 -3
  4. package/builtin-tasks/clean.js.map +1 -1
  5. package/builtin-tasks/compile.js +48 -48
  6. package/builtin-tasks/compile.js.map +1 -1
  7. package/builtin-tasks/console.js +3 -3
  8. package/builtin-tasks/console.js.map +1 -1
  9. package/builtin-tasks/flatten.js +8 -6
  10. package/builtin-tasks/flatten.js.map +1 -1
  11. package/builtin-tasks/help.js +2 -2
  12. package/builtin-tasks/help.js.map +1 -1
  13. package/builtin-tasks/node.js +21 -15
  14. package/builtin-tasks/node.js.map +1 -1
  15. package/builtin-tasks/run.js +11 -7
  16. package/builtin-tasks/run.js.map +1 -1
  17. package/builtin-tasks/test.js +11 -11
  18. package/builtin-tasks/test.js.map +1 -1
  19. package/builtin-tasks/utils/solidity-files-cache.js +1 -1
  20. package/builtin-tasks/utils/solidity-files-cache.js.map +1 -1
  21. package/builtin-tasks/utils/watch.d.ts.map +1 -1
  22. package/builtin-tasks/utils/watch.js +4 -2
  23. package/builtin-tasks/utils/watch.js.map +1 -1
  24. package/internal/artifacts.d.ts +49 -0
  25. package/internal/artifacts.d.ts.map +1 -1
  26. package/internal/artifacts.js +204 -68
  27. package/internal/artifacts.js.map +1 -1
  28. package/internal/cli/analytics.js +11 -10
  29. package/internal/cli/analytics.js.map +1 -1
  30. package/internal/cli/autocomplete.js +7 -7
  31. package/internal/cli/autocomplete.js.map +1 -1
  32. package/internal/cli/bootstrap.js +2 -2
  33. package/internal/cli/bootstrap.js.map +1 -1
  34. package/internal/cli/cli.js +16 -16
  35. package/internal/cli/cli.js.map +1 -1
  36. package/internal/cli/project-creation.js +13 -13
  37. package/internal/cli/project-creation.js.map +1 -1
  38. package/internal/constants.d.ts +2 -0
  39. package/internal/constants.d.ts.map +1 -1
  40. package/internal/constants.js +4 -1
  41. package/internal/constants.js.map +1 -1
  42. package/internal/context.d.ts +1 -2
  43. package/internal/context.d.ts.map +1 -1
  44. package/internal/context.js +3 -3
  45. package/internal/context.js.map +1 -1
  46. package/internal/core/config/config-loading.d.ts.map +1 -1
  47. package/internal/core/config/config-loading.js +21 -7
  48. package/internal/core/config/config-loading.js.map +1 -1
  49. package/internal/core/config/config-resolution.d.ts.map +1 -1
  50. package/internal/core/config/config-resolution.js +50 -12
  51. package/internal/core/config/config-resolution.js.map +1 -1
  52. package/internal/core/config/config-validation.d.ts +1 -0
  53. package/internal/core/config/config-validation.d.ts.map +1 -1
  54. package/internal/core/config/config-validation.js +151 -38
  55. package/internal/core/config/config-validation.js.map +1 -1
  56. package/internal/core/config/default-config.d.ts.map +1 -1
  57. package/internal/core/config/default-config.js +66 -2
  58. package/internal/core/config/default-config.js.map +1 -1
  59. package/internal/core/errors-list.js +2 -2
  60. package/internal/core/errors-list.js.map +1 -1
  61. package/internal/core/errors.js +3 -3
  62. package/internal/core/errors.js.map +1 -1
  63. package/internal/core/execution-mode.js +2 -2
  64. package/internal/core/execution-mode.js.map +1 -1
  65. package/internal/core/jsonrpc/types/access-list.d.ts +0 -1
  66. package/internal/core/jsonrpc/types/access-list.d.ts.map +1 -1
  67. package/internal/core/jsonrpc/types/access-list.js +1 -1
  68. package/internal/core/jsonrpc/types/access-list.js.map +1 -1
  69. package/internal/core/jsonrpc/types/base-types.js +9 -9
  70. package/internal/core/jsonrpc/types/base-types.js.map +1 -1
  71. package/internal/core/jsonrpc/types/input/blockTag.d.ts +3 -4
  72. package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -1
  73. package/internal/core/jsonrpc/types/input/blockTag.js +3 -3
  74. package/internal/core/jsonrpc/types/input/blockTag.js.map +1 -1
  75. package/internal/core/jsonrpc/types/input/callRequest.d.ts +0 -1
  76. package/internal/core/jsonrpc/types/input/callRequest.d.ts.map +1 -1
  77. package/internal/core/jsonrpc/types/input/callRequest.js +9 -9
  78. package/internal/core/jsonrpc/types/input/callRequest.js.map +1 -1
  79. package/internal/core/jsonrpc/types/input/debugTraceTransaction.js +4 -4
  80. package/internal/core/jsonrpc/types/input/debugTraceTransaction.js.map +1 -1
  81. package/internal/core/jsonrpc/types/input/filterRequest.d.ts +0 -1
  82. package/internal/core/jsonrpc/types/input/filterRequest.d.ts.map +1 -1
  83. package/internal/core/jsonrpc/types/input/filterRequest.js +2 -2
  84. package/internal/core/jsonrpc/types/input/filterRequest.js.map +1 -1
  85. package/internal/core/jsonrpc/types/input/hardhat-network.js +4 -4
  86. package/internal/core/jsonrpc/types/input/hardhat-network.js.map +1 -1
  87. package/internal/core/jsonrpc/types/input/logAddress.js +1 -1
  88. package/internal/core/jsonrpc/types/input/logAddress.js.map +1 -1
  89. package/internal/core/jsonrpc/types/input/logTopics.js +1 -1
  90. package/internal/core/jsonrpc/types/input/logTopics.js.map +1 -1
  91. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts +0 -1
  92. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts.map +1 -1
  93. package/internal/core/jsonrpc/types/input/transactionRequest.js +10 -10
  94. package/internal/core/jsonrpc/types/input/transactionRequest.js.map +1 -1
  95. package/internal/core/jsonrpc/types/output/block.d.ts +0 -1
  96. package/internal/core/jsonrpc/types/output/block.d.ts.map +1 -1
  97. package/internal/core/jsonrpc/types/output/block.js +5 -5
  98. package/internal/core/jsonrpc/types/output/block.js.map +1 -1
  99. package/internal/core/jsonrpc/types/output/log.d.ts +1 -1
  100. package/internal/core/jsonrpc/types/output/log.d.ts.map +1 -1
  101. package/internal/core/jsonrpc/types/output/log.js +5 -4
  102. package/internal/core/jsonrpc/types/output/log.js.map +1 -1
  103. package/internal/core/jsonrpc/types/output/receipt.d.ts +1 -1
  104. package/internal/core/jsonrpc/types/output/receipt.d.ts.map +1 -1
  105. package/internal/core/jsonrpc/types/output/receipt.js +6 -6
  106. package/internal/core/jsonrpc/types/output/receipt.js.map +1 -1
  107. package/internal/core/jsonrpc/types/output/transaction.d.ts +0 -1
  108. package/internal/core/jsonrpc/types/output/transaction.d.ts.map +1 -1
  109. package/internal/core/jsonrpc/types/output/transaction.js +9 -9
  110. package/internal/core/jsonrpc/types/output/transaction.js.map +1 -1
  111. package/internal/core/params/argumentTypes.d.ts.map +1 -1
  112. package/internal/core/params/argumentTypes.js +25 -13
  113. package/internal/core/params/argumentTypes.js.map +1 -1
  114. package/internal/core/params/env-variables.d.ts.map +1 -1
  115. package/internal/core/params/env-variables.js +9 -5
  116. package/internal/core/params/env-variables.js.map +1 -1
  117. package/internal/core/params/hardhat-params.js +2 -2
  118. package/internal/core/params/hardhat-params.js.map +1 -1
  119. package/internal/core/project-structure.js +1 -1
  120. package/internal/core/project-structure.js.map +1 -1
  121. package/internal/core/providers/accounts.d.ts.map +1 -1
  122. package/internal/core/providers/accounts.js +9 -8
  123. package/internal/core/providers/accounts.js.map +1 -1
  124. package/internal/core/providers/backwards-compatibility.js.map +1 -1
  125. package/internal/core/providers/chainId.js +3 -3
  126. package/internal/core/providers/chainId.js.map +1 -1
  127. package/internal/core/providers/construction.d.ts.map +1 -1
  128. package/internal/core/providers/construction.js +6 -4
  129. package/internal/core/providers/construction.js.map +1 -1
  130. package/internal/core/providers/gas-providers.d.ts.map +1 -1
  131. package/internal/core/providers/gas-providers.js +19 -17
  132. package/internal/core/providers/gas-providers.js.map +1 -1
  133. package/internal/core/providers/http.js +1 -1
  134. package/internal/core/providers/http.js.map +1 -1
  135. package/internal/core/providers/util.js +1 -1
  136. package/internal/core/providers/util.js.map +1 -1
  137. package/internal/core/providers/wrapper.d.ts.map +1 -1
  138. package/internal/core/runtime-environment.d.ts.map +1 -1
  139. package/internal/core/runtime-environment.js +7 -5
  140. package/internal/core/runtime-environment.js.map +1 -1
  141. package/internal/core/typescript-support.d.ts +1 -1
  142. package/internal/core/typescript-support.d.ts.map +1 -1
  143. package/internal/core/typescript-support.js +8 -5
  144. package/internal/core/typescript-support.js.map +1 -1
  145. package/internal/hardhat-network/jsonrpc/client.d.ts +2 -0
  146. package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
  147. package/internal/hardhat-network/jsonrpc/client.js +23 -23
  148. package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
  149. package/internal/hardhat-network/jsonrpc/handler.js +16 -8
  150. package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
  151. package/internal/hardhat-network/jsonrpc/server.js +1 -1
  152. package/internal/hardhat-network/jsonrpc/server.js.map +1 -1
  153. package/internal/hardhat-network/provider/BlockchainData.d.ts +1 -1
  154. package/internal/hardhat-network/provider/BlockchainData.js +12 -12
  155. package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
  156. package/internal/hardhat-network/provider/HardhatBlockchain.js +2 -2
  157. package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
  158. package/internal/hardhat-network/provider/HardhatStateManager.js +29 -29
  159. package/internal/hardhat-network/provider/HardhatStateManager.js.map +1 -1
  160. package/internal/hardhat-network/provider/PoolState.js +6 -6
  161. package/internal/hardhat-network/provider/PoolState.js.map +1 -1
  162. package/internal/hardhat-network/provider/TransactionQueue.d.ts +2 -1
  163. package/internal/hardhat-network/provider/TransactionQueue.d.ts.map +1 -1
  164. package/internal/hardhat-network/provider/TransactionQueue.js +16 -2
  165. package/internal/hardhat-network/provider/TransactionQueue.js.map +1 -1
  166. package/internal/hardhat-network/provider/TxPool.js +19 -19
  167. package/internal/hardhat-network/provider/TxPool.js.map +1 -1
  168. package/internal/hardhat-network/provider/filter.js +3 -3
  169. package/internal/hardhat-network/provider/filter.js.map +1 -1
  170. package/internal/hardhat-network/provider/fork/AccountState.js +4 -4
  171. package/internal/hardhat-network/provider/fork/AccountState.js.map +1 -1
  172. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -1
  173. package/internal/hardhat-network/provider/fork/ForkBlockchain.js +8 -10
  174. package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
  175. package/internal/hardhat-network/provider/fork/ForkStateManager.js +34 -34
  176. package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
  177. package/internal/hardhat-network/provider/fork/random.d.ts +0 -1
  178. package/internal/hardhat-network/provider/fork/random.d.ts.map +1 -1
  179. package/internal/hardhat-network/provider/fork/random.js +13 -8
  180. package/internal/hardhat-network/provider/fork/random.js.map +1 -1
  181. package/internal/hardhat-network/provider/fork/rpcToBlockData.js +1 -0
  182. package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -1
  183. package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -1
  184. package/internal/hardhat-network/provider/modules/debug.js +1 -1
  185. package/internal/hardhat-network/provider/modules/debug.js.map +1 -1
  186. package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
  187. package/internal/hardhat-network/provider/modules/eth.js +86 -84
  188. package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
  189. package/internal/hardhat-network/provider/modules/evm.js +9 -9
  190. package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
  191. package/internal/hardhat-network/provider/modules/hardhat.d.ts +2 -0
  192. package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -1
  193. package/internal/hardhat-network/provider/modules/hardhat.js +25 -15
  194. package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
  195. package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
  196. package/internal/hardhat-network/provider/modules/logger.js +30 -25
  197. package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
  198. package/internal/hardhat-network/provider/modules/net.js +2 -2
  199. package/internal/hardhat-network/provider/modules/net.js.map +1 -1
  200. package/internal/hardhat-network/provider/modules/personal.js +2 -2
  201. package/internal/hardhat-network/provider/modules/personal.js.map +1 -1
  202. package/internal/hardhat-network/provider/modules/web3.js +4 -4
  203. package/internal/hardhat-network/provider/modules/web3.js.map +1 -1
  204. package/internal/hardhat-network/provider/node-types.d.ts +7 -1
  205. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
  206. package/internal/hardhat-network/provider/node-types.js.map +1 -1
  207. package/internal/hardhat-network/provider/node.d.ts +10 -2
  208. package/internal/hardhat-network/provider/node.d.ts.map +1 -1
  209. package/internal/hardhat-network/provider/node.js +144 -75
  210. package/internal/hardhat-network/provider/node.js.map +1 -1
  211. package/internal/hardhat-network/provider/output.d.ts +1 -1
  212. package/internal/hardhat-network/provider/output.d.ts.map +1 -1
  213. package/internal/hardhat-network/provider/output.js +94 -91
  214. package/internal/hardhat-network/provider/output.js.map +1 -1
  215. package/internal/hardhat-network/provider/provider.d.ts +7 -3
  216. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  217. package/internal/hardhat-network/provider/provider.js +11 -4
  218. package/internal/hardhat-network/provider/provider.js.map +1 -1
  219. package/internal/hardhat-network/provider/return-data.js +4 -4
  220. package/internal/hardhat-network/provider/return-data.js.map +1 -1
  221. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
  222. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
  223. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
  224. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +1 -1
  225. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
  226. package/internal/hardhat-network/provider/utils/bnToHex.js +1 -1
  227. package/internal/hardhat-network/provider/utils/bnToHex.js.map +1 -1
  228. package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js.map +1 -1
  229. package/internal/hardhat-network/provider/utils/makeAccount.js +4 -4
  230. package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -1
  231. package/internal/hardhat-network/provider/utils/makeCommon.js +3 -3
  232. package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
  233. package/internal/hardhat-network/provider/utils/makeForkClient.js +4 -4
  234. package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -1
  235. package/internal/hardhat-network/provider/utils/makeStateTrie.js +1 -1
  236. package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
  237. package/internal/hardhat-network/provider/utils/txMapToArray.js +1 -1
  238. package/internal/hardhat-network/provider/utils/txMapToArray.js.map +1 -1
  239. package/internal/hardhat-network/stack-traces/compiler-to-model.js +4 -4
  240. package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
  241. package/internal/hardhat-network/stack-traces/consoleLogger.js +44 -44
  242. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  243. package/internal/hardhat-network/stack-traces/contracts-identifier.js +6 -6
  244. package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
  245. package/internal/hardhat-network/stack-traces/debug.js +17 -17
  246. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  247. package/internal/hardhat-network/stack-traces/error-inferrer.js +28 -28
  248. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
  249. package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.js +3 -3
  250. package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.js.map +1 -1
  251. package/internal/hardhat-network/stack-traces/model.js +5 -5
  252. package/internal/hardhat-network/stack-traces/model.js.map +1 -1
  253. package/internal/hardhat-network/stack-traces/solidity-errors.js +3 -3
  254. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  255. package/internal/hardhat-network/stack-traces/solidityTracer.js +10 -10
  256. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  257. package/internal/hardhat-network/stack-traces/source-maps.js +7 -7
  258. package/internal/hardhat-network/stack-traces/source-maps.js.map +1 -1
  259. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +5 -5
  260. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
  261. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js +2 -2
  262. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js.map +1 -1
  263. package/internal/hardhat-network/stack-traces/vm-tracer.js +3 -3
  264. package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
  265. package/internal/lib/hardhat-lib.js +3 -3
  266. package/internal/lib/hardhat-lib.js.map +1 -1
  267. package/internal/reset.js +1 -1
  268. package/internal/reset.js.map +1 -1
  269. package/internal/sentry/anonymizer.js.map +1 -1
  270. package/internal/sentry/reporter.js +5 -5
  271. package/internal/sentry/reporter.js.map +1 -1
  272. package/internal/sentry/subprocess.js +2 -2
  273. package/internal/sentry/subprocess.js.map +1 -1
  274. package/internal/sentry/transport.js +1 -1
  275. package/internal/sentry/transport.js.map +1 -1
  276. package/internal/solidity/compilation-job.js +4 -4
  277. package/internal/solidity/compilation-job.js.map +1 -1
  278. package/internal/solidity/compiler/downloader.d.ts +1 -1
  279. package/internal/solidity/compiler/downloader.d.ts.map +1 -1
  280. package/internal/solidity/compiler/downloader.js +21 -7
  281. package/internal/solidity/compiler/downloader.js.map +1 -1
  282. package/internal/solidity/compiler/index.js +1 -1
  283. package/internal/solidity/compiler/index.js.map +1 -1
  284. package/internal/solidity/dependencyGraph.js +2 -1
  285. package/internal/solidity/dependencyGraph.js.map +1 -1
  286. package/internal/solidity/parse.js +3 -2
  287. package/internal/solidity/parse.js.map +1 -1
  288. package/internal/solidity/resolver.js +10 -10
  289. package/internal/solidity/resolver.js.map +1 -1
  290. package/internal/util/abi-helpers.js +1 -1
  291. package/internal/util/abi-helpers.js.map +1 -1
  292. package/internal/util/download.d.ts.map +1 -1
  293. package/internal/util/download.js +12 -1
  294. package/internal/util/download.js.map +1 -1
  295. package/internal/util/global-dir.js +1 -1
  296. package/internal/util/global-dir.js.map +1 -1
  297. package/internal/util/hardforks.d.ts +2 -1
  298. package/internal/util/hardforks.d.ts.map +1 -1
  299. package/internal/util/hardforks.js +3 -1
  300. package/internal/util/hardforks.js.map +1 -1
  301. package/internal/util/jsonrpc.js +1 -1
  302. package/internal/util/jsonrpc.js.map +1 -1
  303. package/internal/util/packageInfo.js +1 -1
  304. package/internal/util/packageInfo.js.map +1 -1
  305. package/internal/util/scripts-runner.js +3 -3
  306. package/internal/util/scripts-runner.js.map +1 -1
  307. package/package.json +13 -13
  308. package/register.js +7 -7
  309. package/register.js.map +1 -1
  310. package/src/builtin-tasks/flatten.ts +4 -2
  311. package/src/builtin-tasks/node.ts +17 -10
  312. package/src/builtin-tasks/run.ts +13 -8
  313. package/src/builtin-tasks/utils/watch.ts +3 -1
  314. package/src/internal/artifacts.ts +269 -72
  315. package/src/internal/cli/analytics.ts +1 -1
  316. package/src/internal/cli/autocomplete.ts +3 -3
  317. package/src/internal/cli/bootstrap.ts +1 -1
  318. package/src/internal/cli/cli.ts +2 -2
  319. package/src/internal/cli/project-creation.ts +2 -2
  320. package/src/internal/constants.ts +4 -0
  321. package/src/internal/context.ts +1 -1
  322. package/src/internal/core/config/config-loading.ts +24 -2
  323. package/src/internal/core/config/config-resolution.ts +61 -3
  324. package/src/internal/core/config/config-validation.ts +217 -15
  325. package/src/internal/core/config/default-config.ts +66 -2
  326. package/src/internal/core/errors-list.ts +2 -2
  327. package/src/internal/core/execution-mode.ts +1 -1
  328. package/src/internal/core/jsonrpc/types/output/log.ts +1 -0
  329. package/src/internal/core/params/argumentTypes.ts +40 -25
  330. package/src/internal/core/params/env-variables.ts +13 -8
  331. package/src/internal/core/params/hardhat-params.ts +2 -2
  332. package/src/internal/core/providers/accounts.ts +4 -3
  333. package/src/internal/core/providers/backwards-compatibility.ts +1 -1
  334. package/src/internal/core/providers/chainId.ts +1 -1
  335. package/src/internal/core/providers/construction.ts +9 -2
  336. package/src/internal/core/providers/gas-providers.ts +6 -4
  337. package/src/internal/core/providers/http.ts +1 -1
  338. package/src/internal/core/providers/wrapper.ts +1 -1
  339. package/src/internal/core/runtime-environment.ts +3 -1
  340. package/src/internal/core/typescript-support.ts +7 -3
  341. package/src/internal/hardhat-network/jsonrpc/client.ts +2 -2
  342. package/src/internal/hardhat-network/jsonrpc/handler.ts +12 -2
  343. package/src/internal/hardhat-network/jsonrpc/server.ts +2 -2
  344. package/src/internal/hardhat-network/provider/TransactionQueue.ts +31 -4
  345. package/src/internal/hardhat-network/provider/TxPool.ts +1 -1
  346. package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +2 -4
  347. package/src/internal/hardhat-network/provider/modules/eth.ts +23 -21
  348. package/src/internal/hardhat-network/provider/modules/hardhat.ts +15 -1
  349. package/src/internal/hardhat-network/provider/modules/logger.ts +13 -9
  350. package/src/internal/hardhat-network/provider/node-types.ts +8 -1
  351. package/src/internal/hardhat-network/provider/node.ts +156 -29
  352. package/src/internal/hardhat-network/provider/output.ts +9 -9
  353. package/src/internal/hardhat-network/provider/provider.ts +12 -2
  354. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +1 -1
  355. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +1 -1
  356. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +3 -3
  357. package/src/internal/reset.ts +1 -1
  358. package/src/internal/sentry/subprocess.ts +2 -2
  359. package/src/internal/solidity/compiler/downloader.ts +27 -12
  360. package/src/internal/solidity/resolver.ts +1 -1
  361. package/src/internal/util/abi-helpers.ts +1 -1
  362. package/src/internal/util/download.ts +17 -1
  363. package/src/internal/util/hardforks.ts +2 -0
  364. package/src/internal/util/jsonrpc.ts +1 -1
  365. package/src/internal/util/packageInfo.ts +1 -1
  366. package/src/internal/util/scripts-runner.ts +1 -1
  367. package/src/register.ts +1 -1
  368. package/src/types/config.ts +42 -0
  369. package/src/utils/contract-names.ts +112 -0
  370. package/src/utils/source-names.ts +14 -12
  371. package/types/config.d.ts +26 -0
  372. package/types/config.d.ts.map +1 -1
  373. package/utils/contract-names.d.ts +10 -0
  374. package/utils/contract-names.d.ts.map +1 -1
  375. package/utils/contract-names.js +92 -1
  376. package/utils/contract-names.js.map +1 -1
  377. package/utils/source-names.d.ts +1 -1
  378. package/utils/source-names.js +8 -6
  379. package/utils/source-names.js.map +1 -1
  380. package/CHANGELOG.md +0 -54
@@ -15,6 +15,7 @@ import {
15
15
  getFullyQualifiedName,
16
16
  isFullyQualifiedName,
17
17
  parseFullyQualifiedName,
18
+ findDistance,
18
19
  } from "../utils/contract-names";
19
20
  import { replaceBackslashes } from "../utils/source-names";
20
21
 
@@ -23,6 +24,7 @@ import {
23
24
  BUILD_INFO_DIR_NAME,
24
25
  BUILD_INFO_FORMAT_VERSION,
25
26
  DEBUG_FILE_FORMAT_VERSION,
27
+ EDIT_DISTANCE_THRESHOLD,
26
28
  } from "./constants";
27
29
  import { HardhatError } from "./core/errors";
28
30
  import { ERRORS } from "./core/errors-list";
@@ -45,78 +47,20 @@ export class Artifacts implements IArtifacts {
45
47
  }
46
48
 
47
49
  public async readArtifact(name: string): Promise<Artifact> {
48
- const { trueCasePath } = await import("true-case-path");
49
50
  const artifactPath = await this._getArtifactPath(name);
50
-
51
- try {
52
- const trueCaseArtifactPath = await trueCasePath(
53
- path.relative(this._artifactsPath, artifactPath),
54
- this._artifactsPath
55
- );
56
-
57
- if (artifactPath !== trueCaseArtifactPath) {
58
- throw new HardhatError(ERRORS.ARTIFACTS.WRONG_CASING, {
59
- correct: trueCaseArtifactPath,
60
- incorrect: artifactPath,
61
- });
62
- }
63
-
64
- return await fsExtra.readJson(trueCaseArtifactPath);
65
- } catch (error) {
66
- if (
67
- typeof error.message === "string" &&
68
- error.message.includes("no matching file exists")
69
- ) {
70
- throw new HardhatError(ERRORS.INTERNAL.WRONG_ARTIFACT_PATH, {
71
- contractName: name,
72
- artifactPath,
73
- });
74
- }
75
-
76
- // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
77
- throw error;
78
- }
51
+ return fsExtra.readJson(artifactPath);
79
52
  }
80
53
 
81
54
  public readArtifactSync(name: string): Artifact {
82
- const { trueCasePathSync } = require("true-case-path");
83
55
  const artifactPath = this._getArtifactPathSync(name);
84
-
85
- try {
86
- const trueCaseArtifactPath = trueCasePathSync(
87
- path.relative(this._artifactsPath, artifactPath),
88
- this._artifactsPath
89
- );
90
-
91
- if (artifactPath !== trueCaseArtifactPath) {
92
- throw new HardhatError(ERRORS.ARTIFACTS.WRONG_CASING, {
93
- correct: trueCaseArtifactPath,
94
- incorrect: artifactPath,
95
- });
96
- }
97
-
98
- return fsExtra.readJsonSync(trueCaseArtifactPath);
99
- } catch (error) {
100
- if (
101
- typeof error.message === "string" &&
102
- error.message.includes("no matching file exists")
103
- ) {
104
- throw new HardhatError(ERRORS.INTERNAL.WRONG_ARTIFACT_PATH, {
105
- contractName: name,
106
- artifactPath,
107
- });
108
- }
109
-
110
- // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
111
- throw error;
112
- }
56
+ return fsExtra.readJsonSync(artifactPath);
113
57
  }
114
58
 
115
59
  public async artifactExists(name: string): Promise<boolean> {
116
60
  try {
117
61
  await this.readArtifact(name);
118
62
  return true;
119
- } catch (e) {
63
+ } catch {
120
64
  return false;
121
65
  }
122
66
  }
@@ -130,7 +74,7 @@ export class Artifacts implements IArtifacts {
130
74
  fullyQualifiedName: string
131
75
  ): Promise<BuildInfo | undefined> {
132
76
  const artifactPath =
133
- this._getArtifactPathFromFullyQualifiedName(fullyQualifiedName);
77
+ this.formArtifactPathFromFullyQualifiedName(fullyQualifiedName);
134
78
 
135
79
  const debugFilePath = this._getDebugFilePath(artifactPath);
136
80
  const buildInfoPath = await this._getBuildInfoFromDebugFile(debugFilePath);
@@ -173,7 +117,7 @@ export class Artifacts implements IArtifacts {
173
117
  );
174
118
 
175
119
  const artifactPath =
176
- this._getArtifactPathFromFullyQualifiedName(fullyQualifiedName);
120
+ this.formArtifactPathFromFullyQualifiedName(fullyQualifiedName);
177
121
 
178
122
  await fsExtra.ensureDir(path.dirname(artifactPath));
179
123
 
@@ -280,6 +224,18 @@ export class Artifacts implements IArtifacts {
280
224
  }
281
225
  }
282
226
 
227
+ /**
228
+ * Returns the absolute path to the given artifact
229
+ */
230
+ public formArtifactPathFromFullyQualifiedName(
231
+ fullyQualifiedName: string
232
+ ): string {
233
+ const { sourceName, contractName } =
234
+ parseFullyQualifiedName(fullyQualifiedName);
235
+
236
+ return path.join(this._artifactsPath, sourceName, `${contractName}.json`);
237
+ }
238
+
283
239
  private _getBuildInfoName(
284
240
  solcVersion: string,
285
241
  solcLongVersion: string,
@@ -307,7 +263,7 @@ export class Artifacts implements IArtifacts {
307
263
  */
308
264
  private async _getArtifactPath(name: string): Promise<string> {
309
265
  if (isFullyQualifiedName(name)) {
310
- return this._getArtifactPathFromFullyQualifiedName(name);
266
+ return this._getValidArtifactPathFromFullyQualifiedName(name);
311
267
  }
312
268
 
313
269
  const files = await this.getArtifactPaths();
@@ -346,9 +302,11 @@ export class Artifacts implements IArtifacts {
346
302
  }
347
303
 
348
304
  private _getArtifactPathsSync(): string[] {
349
- return globSync(path.join(this._artifactsPath, "**/*.json"), {
305
+ const paths = globSync(path.join(this._artifactsPath, "**/*.json"), {
350
306
  ignore: [this._buildInfosGlob, this._dbgsGlob],
351
307
  });
308
+
309
+ return paths.sort();
352
310
  }
353
311
 
354
312
  /**
@@ -356,13 +314,69 @@ export class Artifacts implements IArtifacts {
356
314
  */
357
315
  private _getArtifactPathSync(name: string): string {
358
316
  if (isFullyQualifiedName(name)) {
359
- return this._getArtifactPathFromFullyQualifiedName(name);
317
+ return this._getValidArtifactPathFromFullyQualifiedNameSync(name);
360
318
  }
361
319
 
362
320
  const files = this._getArtifactPathsSync();
363
321
  return this._getArtifactPathFromFiles(name, files);
364
322
  }
365
323
 
324
+ /**
325
+ * Same signature as imported function, but abstracted to handle the only error we consistently care about
326
+ */
327
+ private async _trueCasePath(
328
+ filePath: string,
329
+ basePath?: string
330
+ ): Promise<string | null> {
331
+ const { trueCasePath } = await import("true-case-path");
332
+
333
+ try {
334
+ const result = await trueCasePath(filePath, basePath);
335
+ return result;
336
+ } catch (error) {
337
+ if (error instanceof Error) {
338
+ if (error.message.includes("no matching file exists")) {
339
+ return null;
340
+ }
341
+ }
342
+
343
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
344
+ throw error;
345
+ }
346
+ }
347
+
348
+ /**
349
+ * Same signature as imported function, but abstracted to handle the only error we consistently care about
350
+ * and synchronous
351
+ */
352
+ private _trueCasePathSync(
353
+ filePath: string,
354
+ basePath?: string
355
+ ): string | null {
356
+ const { trueCasePathSync } = require("true-case-path");
357
+
358
+ try {
359
+ const result = trueCasePathSync(filePath, basePath);
360
+ return result;
361
+ } catch (error) {
362
+ if (error instanceof Error) {
363
+ if (error.message.includes("no matching file exists")) {
364
+ return null;
365
+ }
366
+ }
367
+
368
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
369
+ throw error;
370
+ }
371
+ }
372
+
373
+ /**
374
+ * DO NOT DELETE OR CHANGE
375
+ *
376
+ * use this.formArtifactPathFromFullyQualifiedName instead
377
+ * @deprecated until typechain migrates to public version
378
+ * @see https://github.com/dethcrypto/TypeChain/issues/544
379
+ */
366
380
  private _getArtifactPathFromFullyQualifiedName(
367
381
  fullyQualifiedName: string
368
382
  ): string {
@@ -372,6 +386,191 @@ export class Artifacts implements IArtifacts {
372
386
  return path.join(this._artifactsPath, sourceName, `${contractName}.json`);
373
387
  }
374
388
 
389
+ private async _getValidArtifactPathFromFullyQualifiedName(
390
+ fullyQualifiedName: string
391
+ ): Promise<string> {
392
+ const artifactPath =
393
+ this.formArtifactPathFromFullyQualifiedName(fullyQualifiedName);
394
+
395
+ const trueCaseArtifactPath = await this._trueCasePath(
396
+ path.relative(this._artifactsPath, artifactPath),
397
+ this._artifactsPath
398
+ );
399
+
400
+ if (trueCaseArtifactPath === null) {
401
+ return this._handleWrongArtifactForFullyQualifiedName(fullyQualifiedName);
402
+ }
403
+
404
+ if (artifactPath !== trueCaseArtifactPath) {
405
+ throw new HardhatError(ERRORS.ARTIFACTS.WRONG_CASING, {
406
+ correct: trueCaseArtifactPath,
407
+ incorrect: artifactPath,
408
+ });
409
+ }
410
+
411
+ return artifactPath;
412
+ }
413
+
414
+ private _getAllContractNamesFromFiles(files: string[]): string[] {
415
+ return files.map((file) => {
416
+ const fqn = this._getFullyQualifiedNameFromPath(file);
417
+ return parseFullyQualifiedName(fqn).contractName;
418
+ });
419
+ }
420
+
421
+ private _getAllFullyQualifiedNamesSync(): string[] {
422
+ const paths = this._getArtifactPathsSync();
423
+ return paths.map((p) => this._getFullyQualifiedNameFromPath(p)).sort();
424
+ }
425
+
426
+ private _formatSuggestions(names: string[], contractName?: string): string {
427
+ switch (names.length) {
428
+ case 0:
429
+ return "";
430
+ case 1:
431
+ return `Did you mean "${names[0]}"?`;
432
+ default:
433
+ return `We found some that were similar:
434
+
435
+ ${names.map((n) => ` * ${n}`).join(os.EOL)}
436
+
437
+ Please replace "${contractName}" for the correct contract name wherever you are trying to read its artifact.
438
+ `;
439
+ }
440
+ }
441
+
442
+ private _handleWrongArtifactForFullyQualifiedName(
443
+ fullyQualifiedName: string
444
+ ): never {
445
+ const names = this._getAllFullyQualifiedNamesSync();
446
+
447
+ const similarNames = this._getSimilarContractNames(
448
+ fullyQualifiedName,
449
+ names
450
+ );
451
+
452
+ throw new HardhatError(ERRORS.ARTIFACTS.NOT_FOUND, {
453
+ contractName: fullyQualifiedName,
454
+ suggestion: this._formatSuggestions(similarNames),
455
+ });
456
+ }
457
+
458
+ private _handleWrongArtifactForContractName(
459
+ contractName: string,
460
+ files: string[]
461
+ ): never {
462
+ const names = this._getAllContractNamesFromFiles(files);
463
+
464
+ let similarNames = this._getSimilarContractNames(contractName, names);
465
+
466
+ if (similarNames.length > 1) {
467
+ similarNames = this._filterDuplicatesAsFullyQualifiedNames(
468
+ files,
469
+ similarNames
470
+ );
471
+ }
472
+
473
+ throw new HardhatError(ERRORS.ARTIFACTS.NOT_FOUND, {
474
+ contractName,
475
+ suggestion: this._formatSuggestions(similarNames, contractName),
476
+ });
477
+ }
478
+
479
+ /**
480
+ * If the project has these contracts:
481
+ * - 'contracts/Greeter.sol:Greeter'
482
+ * - 'contracts/Meeter.sol:Greeter'
483
+ * - 'contracts/Greater.sol:Greater'
484
+ * And the user tries to get an artifact with the name 'Greter', then
485
+ * the suggestions will be 'Greeter', 'Greeter', and 'Greater'.
486
+ *
487
+ * We don't want to show duplicates here, so we use FQNs for those. The
488
+ * suggestions will then be:
489
+ * - 'contracts/Greeter.sol:Greeter'
490
+ * - 'contracts/Meeter.sol:Greeter'
491
+ * - 'Greater'
492
+ */
493
+ private _filterDuplicatesAsFullyQualifiedNames(
494
+ files: string[],
495
+ similarNames: string[]
496
+ ): string[] {
497
+ const outputNames = [];
498
+ const groups = similarNames.reduce((obj, cur) => {
499
+ obj[cur] = obj[cur] ? obj[cur] + 1 : 1;
500
+ return obj;
501
+ }, {} as { [k: string]: number });
502
+
503
+ for (const [name, occurrences] of Object.entries(groups)) {
504
+ if (occurrences > 1) {
505
+ for (const file of files) {
506
+ if (path.basename(file) === `${name}.json`) {
507
+ outputNames.push(this._getFullyQualifiedNameFromPath(file));
508
+ }
509
+ }
510
+ continue;
511
+ }
512
+
513
+ outputNames.push(name);
514
+ }
515
+
516
+ return outputNames;
517
+ }
518
+
519
+ /**
520
+ *
521
+ * @param givenName can be FQN or contract name
522
+ * @param names MUST match type of givenName (i.e. array of FQN's if givenName is FQN)
523
+ * @returns
524
+ */
525
+ private _getSimilarContractNames(
526
+ givenName: string,
527
+ names: string[]
528
+ ): string[] {
529
+ let shortestDistance = EDIT_DISTANCE_THRESHOLD;
530
+ let mostSimilarNames: string[] = [];
531
+ for (const name of names) {
532
+ const distance = findDistance(givenName, name);
533
+
534
+ if (distance < shortestDistance) {
535
+ shortestDistance = distance;
536
+ mostSimilarNames = [name];
537
+ continue;
538
+ }
539
+
540
+ if (distance === shortestDistance) {
541
+ mostSimilarNames.push(name);
542
+ continue;
543
+ }
544
+ }
545
+
546
+ return mostSimilarNames;
547
+ }
548
+
549
+ private _getValidArtifactPathFromFullyQualifiedNameSync(
550
+ fullyQualifiedName: string
551
+ ): string {
552
+ const artifactPath =
553
+ this.formArtifactPathFromFullyQualifiedName(fullyQualifiedName);
554
+
555
+ const trueCaseArtifactPath = this._trueCasePathSync(
556
+ path.relative(this._artifactsPath, artifactPath),
557
+ this._artifactsPath
558
+ );
559
+
560
+ if (trueCaseArtifactPath === null) {
561
+ return this._handleWrongArtifactForFullyQualifiedName(fullyQualifiedName);
562
+ }
563
+
564
+ if (artifactPath !== trueCaseArtifactPath) {
565
+ throw new HardhatError(ERRORS.ARTIFACTS.WRONG_CASING, {
566
+ correct: trueCaseArtifactPath,
567
+ incorrect: artifactPath,
568
+ });
569
+ }
570
+
571
+ return artifactPath;
572
+ }
573
+
375
574
  private _getDebugFilePath(artifactPath: string): string {
376
575
  return artifactPath.replace(/\.json$/, ".dbg.json");
377
576
  }
@@ -385,15 +584,13 @@ export class Artifacts implements IArtifacts {
385
584
  });
386
585
 
387
586
  if (matchingFiles.length === 0) {
388
- throw new HardhatError(ERRORS.ARTIFACTS.NOT_FOUND, {
389
- contractName,
390
- });
587
+ return this._handleWrongArtifactForContractName(contractName, files);
391
588
  }
392
589
 
393
590
  if (matchingFiles.length > 1) {
394
- const candidates = matchingFiles
395
- .map((file) => this._getFullyQualifiedNameFromPath(file))
396
- .map(path.normalize);
591
+ const candidates = matchingFiles.map((file) =>
592
+ this._getFullyQualifiedNameFromPath(file)
593
+ );
397
594
 
398
595
  throw new HardhatError(ERRORS.ARTIFACTS.MULTIPLE_FOUND, {
399
596
  contractName,
@@ -3,7 +3,7 @@ import debug from "debug";
3
3
  import fetch from "node-fetch";
4
4
  import os from "os";
5
5
  import qs from "qs";
6
- import uuid from "uuid/v4";
6
+ import { v4 as uuid } from "uuid";
7
7
 
8
8
  import * as builtinTaskNames from "../../builtin-tasks/task-names";
9
9
  import { isLocalDev } from "../core/execution-mode";
@@ -185,7 +185,7 @@ async function getCompletionData(): Promise<CompletionData | undefined> {
185
185
  process.env.TS_NODE_TRANSPILE_ONLY = "1";
186
186
  require("../../register");
187
187
  hre = (global as any).hre;
188
- } catch (e) {
188
+ } catch {
189
189
  return undefined;
190
190
  }
191
191
  const filesAfterRequire = Object.keys(require.cache);
@@ -233,7 +233,7 @@ function arePreviousMtimesCorrect(mtimes: Mtimes): boolean {
233
233
  return Object.entries(mtimes).every(
234
234
  ([file, mtime]) => fs.statSync(file).mtime.valueOf() === mtime
235
235
  );
236
- } catch (e) {
236
+ } catch {
237
237
  return false;
238
238
  }
239
239
  }
@@ -264,7 +264,7 @@ async function getCachedCompletionData(
264
264
  try {
265
265
  const cachedCompletionData = fs.readJsonSync(cachedCompletionDataPath);
266
266
  return cachedCompletionData;
267
- } catch (e) {
267
+ } catch {
268
268
  // remove the file if it seems invalid
269
269
  fs.unlinkSync(cachedCompletionDataPath);
270
270
  return undefined;
@@ -34,5 +34,5 @@ const childProcess = fork(`${__dirname}/cli`, process.argv.slice(2), {
34
34
  });
35
35
 
36
36
  childProcess.once("close", (status) => {
37
- process.exit(status);
37
+ process.exit(status as number);
38
38
  });
@@ -121,7 +121,7 @@ async function main() {
121
121
  }
122
122
 
123
123
  if (willRunWithTypescript(hardhatArguments.config)) {
124
- loadTsNode();
124
+ loadTsNode(hardhatArguments.tsconfig);
125
125
  }
126
126
 
127
127
  let taskName = parsedTaskName ?? TASK_HELP;
@@ -234,7 +234,7 @@ async function main() {
234
234
  console.log("");
235
235
 
236
236
  try {
237
- Reporter.reportError(error);
237
+ Reporter.reportError(error as Error);
238
238
  } catch (e) {
239
239
  log("Couldn't report error to sentry: %O", e);
240
240
  }
@@ -69,11 +69,11 @@ const ADVANCED_TYPESCRIPT_SAMPLE_PROJECT_DEPENDENCIES: Dependencies = {
69
69
  "@typescript-eslint/eslint-plugin": "^4.29.1",
70
70
  "@typescript-eslint/parser": "^4.29.1",
71
71
  "@types/chai": "^4.2.21",
72
- "@types/node": "^16.4.13",
72
+ "@types/node": "^12.0.0",
73
73
  "@types/mocha": "^9.0.0",
74
74
  "ts-node": "^10.1.0",
75
75
  typechain: "^5.1.2", // a workaround. see https://github.com/nomiclabs/hardhat/issues/1672#issuecomment-894497156
76
- typescript: "^4.3.5",
76
+ typescript: "^4.5.2",
77
77
  };
78
78
 
79
79
  const SAMPLE_PROJECT_DEPENDENCIES: {
@@ -18,12 +18,16 @@ export const HARDHAT_NETWORK_SUPPORTED_HARDFORKS = [
18
18
  "muirGlacier",
19
19
  "berlin",
20
20
  "london",
21
+ "arrowGlacier",
21
22
  ];
22
23
 
24
+ export const HARDHAT_MEMPOOL_SUPPORTED_ORDERS = <const>["fifo", "priority"];
25
+
23
26
  export const ARTIFACT_FORMAT_VERSION = "hh-sol-artifact-1";
24
27
  export const DEBUG_FILE_FORMAT_VERSION = "hh-sol-dbg-1";
25
28
  export const BUILD_INFO_FORMAT_VERSION = "hh-sol-build-info-1";
26
29
  export const BUILD_INFO_DIR_NAME = "build-info";
30
+ export const EDIT_DISTANCE_THRESHOLD = 3;
27
31
 
28
32
  export const HARDHAT_NETWORK_RESET_EVENT = "hardhatNetworkReset";
29
33
  export const HARDHAT_NETWORK_REVERT_SNAPSHOT_EVENT =
@@ -10,7 +10,7 @@ import { ERRORS } from "./core/errors-list";
10
10
  import { TasksDSL } from "./core/tasks/dsl";
11
11
  import { getRequireCachedFiles } from "./util/platform";
12
12
 
13
- export type GlobalWithHardhatContext = NodeJS.Global & {
13
+ export type GlobalWithHardhatContext = typeof global & {
14
14
  __hardhatContext: HardhatContext;
15
15
  };
16
16
 
@@ -92,6 +92,7 @@ export function loadConfigAndTasks(
92
92
 
93
93
  if (showSolidityConfigWarnings) {
94
94
  checkUnsupportedSolidityConfig(resolved);
95
+ checkUnsupportedRemappings(resolved);
95
96
  }
96
97
 
97
98
  return resolved;
@@ -214,7 +215,7 @@ function readPackageJson(packageName: string): PackageJson | undefined {
214
215
  );
215
216
 
216
217
  return require(packageJsonPath);
217
- } catch (error) {
218
+ } catch {
218
219
  return undefined;
219
220
  }
220
221
  }
@@ -223,7 +224,7 @@ function checkMissingSolidityConfig(userConfig: any) {
223
224
  if (userConfig.solidity === undefined) {
224
225
  console.warn(
225
226
  chalk.yellow(
226
- `Solidity compiler is not configured. Version ${DEFAULT_SOLC_VERSION} will be used by default. Add a 'solidity' entry to your configuration to supress this warning.
227
+ `Solidity compiler is not configured. Version ${DEFAULT_SOLC_VERSION} will be used by default. Add a 'solidity' entry to your configuration to suppress this warning.
227
228
 
228
229
  Learn more about compiler configuration at https://hardhat.org/config"
229
230
  `
@@ -261,3 +262,24 @@ Learn more at https://hardhat.org/reference/solidity-support
261
262
  );
262
263
  }
263
264
  }
265
+
266
+ function checkUnsupportedRemappings({ solidity }: HardhatConfig) {
267
+ const solcConfigs = [
268
+ ...solidity.compilers,
269
+ ...Object.values(solidity.overrides),
270
+ ];
271
+ const remappings = solcConfigs.filter(
272
+ ({ settings }) => settings.remappings !== undefined
273
+ );
274
+
275
+ if (remappings.length > 0) {
276
+ console.warn(
277
+ chalk.yellow(
278
+ `Solidity remappings are not currently supported; you may experience unexpected compilation results. Remove any 'remappings' fields from your configuration to suppress this warning.
279
+
280
+ Learn more about compiler configuration at https://hardhat.org/config
281
+ `
282
+ )
283
+ );
284
+ }
285
+ }