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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (367) hide show
  1. package/builtin-tasks/compile.js +17 -7
  2. package/builtin-tasks/compile.js.map +1 -1
  3. package/builtin-tasks/flatten.js +10 -4
  4. package/builtin-tasks/flatten.js.map +1 -1
  5. package/builtin-tasks/help.js +2 -4
  6. package/builtin-tasks/help.js.map +1 -1
  7. package/builtin-tasks/task-names.d.ts +1 -0
  8. package/builtin-tasks/task-names.d.ts.map +1 -1
  9. package/builtin-tasks/task-names.js +3 -2
  10. package/builtin-tasks/task-names.js.map +1 -1
  11. package/builtin-tasks/test.js +22 -1
  12. package/builtin-tasks/test.js.map +1 -1
  13. package/internal/artifacts.d.ts +5 -0
  14. package/internal/artifacts.d.ts.map +1 -1
  15. package/internal/artifacts.js +29 -10
  16. package/internal/artifacts.js.map +1 -1
  17. package/internal/cli/bootstrap.d.ts +1 -0
  18. package/internal/cli/bootstrap.js +12 -20
  19. package/internal/cli/bootstrap.js.map +1 -1
  20. package/internal/cli/cli.d.ts +0 -1
  21. package/internal/cli/cli.d.ts.map +1 -1
  22. package/internal/cli/cli.js +24 -24
  23. package/internal/cli/cli.js.map +1 -1
  24. package/internal/cli/project-creation.d.ts +1 -1
  25. package/internal/cli/project-creation.d.ts.map +1 -1
  26. package/internal/cli/project-creation.js +105 -25
  27. package/internal/cli/project-creation.js.map +1 -1
  28. package/internal/cli/prompt.d.ts +2 -2
  29. package/internal/cli/prompt.d.ts.map +1 -1
  30. package/internal/cli/prompt.js +1 -2
  31. package/internal/cli/prompt.js.map +1 -1
  32. package/internal/cli/types.d.ts +1 -0
  33. package/internal/cli/types.d.ts.map +1 -1
  34. package/internal/core/config/config-env.d.ts +5 -11
  35. package/internal/core/config/config-env.d.ts.map +1 -1
  36. package/internal/core/config/config-env.js +2 -13
  37. package/internal/core/config/config-env.js.map +1 -1
  38. package/internal/core/config/config-loading.d.ts +2 -1
  39. package/internal/core/config/config-loading.d.ts.map +1 -1
  40. package/internal/core/config/config-loading.js +25 -7
  41. package/internal/core/config/config-loading.js.map +1 -1
  42. package/internal/core/config/config-resolution.d.ts.map +1 -1
  43. package/internal/core/config/config-resolution.js +2 -1
  44. package/internal/core/config/config-resolution.js.map +1 -1
  45. package/internal/core/config/config-validation.d.ts +2 -0
  46. package/internal/core/config/config-validation.d.ts.map +1 -1
  47. package/internal/core/config/config-validation.js +18 -1
  48. package/internal/core/config/config-validation.js.map +1 -1
  49. package/internal/core/config/extenders.d.ts +4 -7
  50. package/internal/core/config/extenders.d.ts.map +1 -1
  51. package/internal/core/config/extenders.js +5 -12
  52. package/internal/core/config/extenders.js.map +1 -1
  53. package/internal/core/errors-list.d.ts +35 -7
  54. package/internal/core/errors-list.d.ts.map +1 -1
  55. package/internal/core/errors-list.js +117 -85
  56. package/internal/core/errors-list.js.map +1 -1
  57. package/internal/core/flamegraph.js +10 -10
  58. package/internal/core/jsonrpc/types/output/metadata.d.ts +13 -0
  59. package/internal/core/jsonrpc/types/output/metadata.d.ts.map +1 -0
  60. package/internal/core/jsonrpc/types/output/metadata.js +3 -0
  61. package/internal/core/jsonrpc/types/output/metadata.js.map +1 -0
  62. package/internal/core/project-structure.d.ts.map +1 -1
  63. package/internal/core/project-structure.js +6 -0
  64. package/internal/core/project-structure.js.map +1 -1
  65. package/internal/core/providers/accounts.d.ts.map +1 -1
  66. package/internal/core/providers/accounts.js +4 -1
  67. package/internal/core/providers/accounts.js.map +1 -1
  68. package/internal/core/providers/backwards-compatibility.d.ts.map +1 -1
  69. package/internal/core/providers/backwards-compatibility.js +3 -0
  70. package/internal/core/providers/backwards-compatibility.js.map +1 -1
  71. package/internal/core/providers/construction.d.ts.map +1 -1
  72. package/internal/core/providers/construction.js +25 -5
  73. package/internal/core/providers/construction.js.map +1 -1
  74. package/internal/core/providers/gas-providers.d.ts +1 -1
  75. package/internal/core/providers/gas-providers.d.ts.map +1 -1
  76. package/internal/core/providers/gas-providers.js +1 -1
  77. package/internal/core/providers/gas-providers.js.map +1 -1
  78. package/internal/core/providers/http.d.ts +2 -2
  79. package/internal/core/providers/http.d.ts.map +1 -1
  80. package/internal/core/providers/http.js +41 -19
  81. package/internal/core/providers/http.js.map +1 -1
  82. package/internal/core/runtime-environment.d.ts +4 -2
  83. package/internal/core/runtime-environment.d.ts.map +1 -1
  84. package/internal/core/runtime-environment.js +39 -47
  85. package/internal/core/runtime-environment.js.map +1 -1
  86. package/internal/core/tasks/dsl.d.ts +6 -6
  87. package/internal/core/tasks/dsl.d.ts.map +1 -1
  88. package/internal/core/tasks/dsl.js.map +1 -1
  89. package/internal/core/tasks/task-definitions.d.ts +2 -2
  90. package/internal/core/tasks/task-definitions.d.ts.map +1 -1
  91. package/internal/core/tasks/task-definitions.js.map +1 -1
  92. package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
  93. package/internal/hardhat-network/jsonrpc/client.js +5 -3
  94. package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
  95. package/internal/hardhat-network/jsonrpc/handler.d.ts +1 -0
  96. package/internal/hardhat-network/jsonrpc/handler.d.ts.map +1 -1
  97. package/internal/hardhat-network/jsonrpc/handler.js +13 -18
  98. package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
  99. package/internal/hardhat-network/provider/RethnetState.d.ts +26 -0
  100. package/internal/hardhat-network/provider/RethnetState.d.ts.map +1 -0
  101. package/internal/hardhat-network/provider/RethnetState.js +84 -0
  102. package/internal/hardhat-network/provider/RethnetState.js.map +1 -0
  103. package/internal/hardhat-network/provider/modules/eth.js +4 -4
  104. package/internal/hardhat-network/provider/modules/evm.d.ts +2 -1
  105. package/internal/hardhat-network/provider/modules/evm.d.ts.map +1 -1
  106. package/internal/hardhat-network/provider/modules/evm.js +10 -4
  107. package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
  108. package/internal/hardhat-network/provider/modules/hardhat.d.ts +2 -0
  109. package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -1
  110. package/internal/hardhat-network/provider/modules/hardhat.js +9 -0
  111. package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
  112. package/internal/hardhat-network/provider/modules/web3.d.ts +3 -0
  113. package/internal/hardhat-network/provider/modules/web3.d.ts.map +1 -1
  114. package/internal/hardhat-network/provider/modules/web3.js +4 -4
  115. package/internal/hardhat-network/provider/modules/web3.js.map +1 -1
  116. package/internal/hardhat-network/provider/node-types.d.ts +1 -1
  117. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
  118. package/internal/hardhat-network/provider/node.d.ts +6 -0
  119. package/internal/hardhat-network/provider/node.d.ts.map +1 -1
  120. package/internal/hardhat-network/provider/node.js +44 -5
  121. package/internal/hardhat-network/provider/node.js.map +1 -1
  122. package/internal/hardhat-network/provider/output.d.ts +1 -1
  123. package/internal/hardhat-network/provider/output.d.ts.map +1 -1
  124. package/internal/hardhat-network/provider/output.js +1 -1
  125. package/internal/hardhat-network/provider/output.js.map +1 -1
  126. package/internal/hardhat-network/provider/provider.d.ts +25 -21
  127. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  128. package/internal/hardhat-network/provider/provider.js +26 -43
  129. package/internal/hardhat-network/provider/provider.js.map +1 -1
  130. package/internal/hardhat-network/provider/return-data.js +2 -2
  131. package/internal/hardhat-network/provider/return-data.js.map +1 -1
  132. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
  133. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +4 -2
  134. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
  135. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
  136. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +4 -2
  137. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
  138. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
  139. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +4 -2
  140. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
  141. package/internal/hardhat-network/provider/utils/bloom.d.ts +4 -0
  142. package/internal/hardhat-network/provider/utils/bloom.d.ts.map +1 -1
  143. package/internal/hardhat-network/provider/utils/bloom.js +6 -0
  144. package/internal/hardhat-network/provider/utils/bloom.js.map +1 -1
  145. package/internal/hardhat-network/provider/utils/convertToRethnet.d.ts +8 -25
  146. package/internal/hardhat-network/provider/utils/convertToRethnet.d.ts.map +1 -1
  147. package/internal/hardhat-network/provider/utils/convertToRethnet.js +122 -174
  148. package/internal/hardhat-network/provider/utils/convertToRethnet.js.map +1 -1
  149. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts +7 -0
  150. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts.map +1 -0
  151. package/internal/hardhat-network/provider/utils/makeFakeSignature.js +31 -0
  152. package/internal/hardhat-network/provider/utils/makeFakeSignature.js.map +1 -0
  153. package/internal/hardhat-network/provider/utils/makeForkClient.d.ts +1 -0
  154. package/internal/hardhat-network/provider/utils/makeForkClient.d.ts.map +1 -1
  155. package/internal/hardhat-network/provider/utils/makeForkClient.js +4 -1
  156. package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -1
  157. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +1 -1
  158. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
  159. package/internal/hardhat-network/provider/utils/putGenesisBlock.js +2 -2
  160. package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
  161. package/internal/hardhat-network/provider/vm/block-builder.d.ts +4 -3
  162. package/internal/hardhat-network/provider/vm/block-builder.d.ts.map +1 -1
  163. package/internal/hardhat-network/provider/vm/block-builder.js +9 -5
  164. package/internal/hardhat-network/provider/vm/block-builder.js.map +1 -1
  165. package/internal/hardhat-network/provider/vm/creation.d.ts +10 -0
  166. package/internal/hardhat-network/provider/vm/creation.d.ts.map +1 -0
  167. package/internal/hardhat-network/provider/vm/creation.js +29 -0
  168. package/internal/hardhat-network/provider/vm/creation.js.map +1 -0
  169. package/internal/hardhat-network/provider/vm/dual.d.ts +14 -14
  170. package/internal/hardhat-network/provider/vm/dual.d.ts.map +1 -1
  171. package/internal/hardhat-network/provider/vm/dual.js +426 -58
  172. package/internal/hardhat-network/provider/vm/dual.js.map +1 -1
  173. package/internal/hardhat-network/provider/vm/ethereumjs.d.ts +23 -22
  174. package/internal/hardhat-network/provider/vm/ethereumjs.d.ts.map +1 -1
  175. package/internal/hardhat-network/provider/vm/ethereumjs.js +181 -37
  176. package/internal/hardhat-network/provider/vm/ethereumjs.js.map +1 -1
  177. package/internal/hardhat-network/provider/vm/exit.d.ts +23 -0
  178. package/internal/hardhat-network/provider/vm/exit.d.ts.map +1 -0
  179. package/internal/hardhat-network/provider/vm/exit.js +130 -0
  180. package/internal/hardhat-network/provider/vm/exit.js.map +1 -0
  181. package/internal/hardhat-network/provider/vm/rethnet.d.ts +18 -30
  182. package/internal/hardhat-network/provider/vm/rethnet.d.ts.map +1 -1
  183. package/internal/hardhat-network/provider/vm/rethnet.js +164 -51
  184. package/internal/hardhat-network/provider/vm/rethnet.js.map +1 -1
  185. package/internal/hardhat-network/provider/vm/vm-adapter.d.ts +29 -13
  186. package/internal/hardhat-network/provider/vm/vm-adapter.d.ts.map +1 -1
  187. package/internal/hardhat-network/stack-traces/compiler-to-model.d.ts.map +1 -1
  188. package/internal/hardhat-network/stack-traces/compiler-to-model.js +37 -11
  189. package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
  190. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  191. package/internal/hardhat-network/stack-traces/constants.d.ts +1 -1
  192. package/internal/hardhat-network/stack-traces/constants.js +1 -1
  193. package/internal/hardhat-network/stack-traces/debug.d.ts.map +1 -1
  194. package/internal/hardhat-network/stack-traces/debug.js +6 -2
  195. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  196. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts +1 -0
  197. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +1 -1
  198. package/internal/hardhat-network/stack-traces/error-inferrer.js +87 -60
  199. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
  200. package/internal/hardhat-network/stack-traces/model.d.ts +3 -1
  201. package/internal/hardhat-network/stack-traces/model.d.ts.map +1 -1
  202. package/internal/hardhat-network/stack-traces/model.js +9 -1
  203. package/internal/hardhat-network/stack-traces/model.js.map +1 -1
  204. package/internal/hardhat-network/stack-traces/solidity-errors.d.ts.map +1 -1
  205. package/internal/hardhat-network/stack-traces/solidity-errors.js +4 -3
  206. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  207. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +2 -2
  208. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -1
  209. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
  210. package/internal/hardhat-network/stack-traces/solidityTracer.js +1 -0
  211. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  212. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts.map +1 -1
  213. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +2 -1
  214. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
  215. package/internal/lib/hardhat-lib.d.ts.map +1 -1
  216. package/internal/lib/hardhat-lib.js +1 -4
  217. package/internal/lib/hardhat-lib.js.map +1 -1
  218. package/internal/solidity/compiler/downloader.js +2 -2
  219. package/internal/solidity/compiler/downloader.js.map +1 -1
  220. package/internal/solidity/compiler/index.d.ts.map +1 -1
  221. package/internal/solidity/compiler/index.js +7 -1
  222. package/internal/solidity/compiler/index.js.map +1 -1
  223. package/internal/solidity/dependencyGraph.d.ts.map +1 -1
  224. package/internal/solidity/dependencyGraph.js +2 -0
  225. package/internal/solidity/dependencyGraph.js.map +1 -1
  226. package/internal/solidity/resolver.d.ts +4 -3
  227. package/internal/solidity/resolver.d.ts.map +1 -1
  228. package/internal/solidity/resolver.js +26 -7
  229. package/internal/solidity/resolver.js.map +1 -1
  230. package/internal/util/abi-helpers.d.ts +1 -0
  231. package/internal/util/abi-helpers.d.ts.map +1 -1
  232. package/internal/util/abi-helpers.js +9 -0
  233. package/internal/util/abi-helpers.js.map +1 -1
  234. package/internal/util/console.d.ts.map +1 -1
  235. package/internal/util/console.js +1 -1
  236. package/internal/util/console.js.map +1 -1
  237. package/internal/util/download.d.ts +3 -1
  238. package/internal/util/download.d.ts.map +1 -1
  239. package/internal/util/download.js +14 -12
  240. package/internal/util/download.js.map +1 -1
  241. package/internal/util/keys-derivation.d.ts.map +1 -1
  242. package/internal/util/keys-derivation.js +4 -1
  243. package/internal/util/keys-derivation.js.map +1 -1
  244. package/internal/util/packageInfo.d.ts +7 -1
  245. package/internal/util/packageInfo.d.ts.map +1 -1
  246. package/internal/util/packageInfo.js +23 -11
  247. package/internal/util/packageInfo.js.map +1 -1
  248. package/internal/util/proxy.d.ts +2 -0
  249. package/internal/util/proxy.d.ts.map +1 -0
  250. package/internal/util/proxy.js +19 -0
  251. package/internal/util/proxy.js.map +1 -0
  252. package/package.json +9 -10
  253. package/recommended-gitignore.txt +1 -1
  254. package/register.js +1 -4
  255. package/register.js.map +1 -1
  256. package/sample-projects/javascript/hardhat.config.js +1 -1
  257. package/sample-projects/javascript/scripts/deploy.js +2 -2
  258. package/sample-projects/javascript-esm/LICENSE.md +11 -0
  259. package/sample-projects/javascript-esm/README.md +13 -0
  260. package/sample-projects/javascript-esm/contracts/Lock.sol +34 -0
  261. package/sample-projects/javascript-esm/hardhat.config.cjs +6 -0
  262. package/sample-projects/javascript-esm/scripts/deploy.js +22 -0
  263. package/sample-projects/javascript-esm/test/Lock.js +123 -0
  264. package/sample-projects/typescript/hardhat.config.ts +1 -1
  265. package/sample-projects/typescript/scripts/deploy.ts +2 -2
  266. package/sample-projects/typescript/tsconfig.json +2 -1
  267. package/src/builtin-tasks/compile.ts +30 -11
  268. package/src/builtin-tasks/flatten.ts +18 -4
  269. package/src/builtin-tasks/help.ts +15 -16
  270. package/src/builtin-tasks/task-names.ts +2 -0
  271. package/src/builtin-tasks/test.ts +30 -2
  272. package/src/internal/artifacts.ts +947 -0
  273. package/src/internal/cli/bootstrap.ts +14 -36
  274. package/src/internal/cli/cli.ts +44 -35
  275. package/src/internal/cli/project-creation.ts +129 -32
  276. package/src/internal/cli/prompt.ts +2 -4
  277. package/src/internal/cli/types.ts +2 -0
  278. package/src/internal/core/config/config-env.ts +15 -27
  279. package/src/internal/core/config/config-loading.ts +35 -11
  280. package/src/internal/core/config/config-resolution.ts +4 -3
  281. package/src/internal/core/config/config-validation.ts +20 -0
  282. package/src/internal/core/config/extenders.ts +6 -15
  283. package/src/internal/core/errors-list.ts +121 -85
  284. package/src/internal/core/flamegraph.ts +10 -10
  285. package/src/internal/core/jsonrpc/types/output/metadata.ts +32 -0
  286. package/src/internal/core/project-structure.ts +8 -0
  287. package/src/internal/core/providers/accounts.ts +5 -2
  288. package/src/internal/core/providers/backwards-compatibility.ts +3 -0
  289. package/src/internal/core/providers/construction.ts +29 -24
  290. package/src/internal/core/providers/gas-providers.ts +1 -1
  291. package/src/internal/core/providers/http.ts +38 -26
  292. package/src/internal/core/runtime-environment.ts +65 -60
  293. package/src/internal/core/tasks/dsl.ts +17 -17
  294. package/src/internal/core/tasks/task-definitions.ts +6 -2
  295. package/src/internal/hardhat-network/jsonrpc/client.ts +7 -4
  296. package/src/internal/hardhat-network/jsonrpc/handler.ts +31 -28
  297. package/src/internal/hardhat-network/provider/modules/eth.ts +4 -4
  298. package/src/internal/hardhat-network/provider/modules/evm.ts +15 -3
  299. package/src/internal/hardhat-network/provider/modules/hardhat.ts +14 -0
  300. package/src/internal/hardhat-network/provider/modules/web3.ts +4 -4
  301. package/src/internal/hardhat-network/provider/node-types.ts +1 -1
  302. package/src/internal/hardhat-network/provider/node.ts +63 -1
  303. package/src/internal/hardhat-network/provider/output.ts +2 -2
  304. package/src/internal/hardhat-network/provider/provider.ts +61 -50
  305. package/src/internal/hardhat-network/provider/return-data.ts +2 -2
  306. package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +5 -2
  307. package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +5 -2
  308. package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +5 -2
  309. package/src/internal/hardhat-network/provider/utils/makeFakeSignature.ts +46 -0
  310. package/src/internal/hardhat-network/provider/utils/makeForkClient.ts +10 -1
  311. package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +2 -2
  312. package/src/internal/hardhat-network/stack-traces/compiler-to-model.ts +73 -11
  313. package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +1 -1
  314. package/src/internal/hardhat-network/stack-traces/constants.ts +1 -1
  315. package/src/internal/hardhat-network/stack-traces/debug.ts +9 -2
  316. package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +179 -95
  317. package/src/internal/hardhat-network/stack-traces/model.ts +11 -1
  318. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +5 -3
  319. package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +2 -2
  320. package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +3 -0
  321. package/src/internal/hardhat-network/stack-traces/vm-debug-tracer.ts +4 -1
  322. package/src/internal/lib/hardhat-lib.ts +1 -6
  323. package/src/internal/solidity/compiler/downloader.ts +3 -3
  324. package/src/internal/solidity/compiler/index.ts +9 -1
  325. package/src/internal/solidity/dependencyGraph.ts +2 -0
  326. package/src/internal/solidity/resolver.ts +38 -11
  327. package/src/internal/util/abi-helpers.ts +9 -0
  328. package/src/internal/util/console.ts +4 -2
  329. package/src/internal/util/download.ts +16 -16
  330. package/src/internal/util/keys-derivation.ts +4 -1
  331. package/src/internal/util/packageInfo.ts +33 -10
  332. package/src/internal/util/proxy.ts +18 -0
  333. package/src/register.ts +1 -6
  334. package/src/types/artifacts.ts +19 -105
  335. package/src/types/config.ts +2 -0
  336. package/src/types/runtime.ts +16 -13
  337. package/src/utils/source-names.ts +15 -0
  338. package/types/artifacts.d.ts +14 -90
  339. package/types/artifacts.d.ts.map +1 -1
  340. package/types/config.d.ts +2 -0
  341. package/types/config.d.ts.map +1 -1
  342. package/types/runtime.d.ts +9 -10
  343. package/types/runtime.d.ts.map +1 -1
  344. package/utils/source-names.d.ts +5 -0
  345. package/utils/source-names.d.ts.map +1 -1
  346. package/utils/source-names.js +14 -1
  347. package/utils/source-names.js.map +1 -1
  348. package/internal/artifacts/caching.d.ts +0 -27
  349. package/internal/artifacts/caching.d.ts.map +0 -1
  350. package/internal/artifacts/caching.js +0 -167
  351. package/internal/artifacts/caching.js.map +0 -1
  352. package/internal/artifacts/index.d.ts +0 -44
  353. package/internal/artifacts/index.d.ts.map +0 -1
  354. package/internal/artifacts/index.js +0 -187
  355. package/internal/artifacts/index.js.map +0 -1
  356. package/internal/artifacts/mutable.d.ts +0 -29
  357. package/internal/artifacts/mutable.d.ts.map +0 -1
  358. package/internal/artifacts/mutable.js +0 -226
  359. package/internal/artifacts/mutable.js.map +0 -1
  360. package/internal/artifacts/readonly.d.ts +0 -88
  361. package/internal/artifacts/readonly.d.ts.map +0 -1
  362. package/internal/artifacts/readonly.js +0 -324
  363. package/internal/artifacts/readonly.js.map +0 -1
  364. package/src/internal/artifacts/caching.ts +0 -239
  365. package/src/internal/artifacts/index.ts +0 -296
  366. package/src/internal/artifacts/mutable.ts +0 -330
  367. package/src/internal/artifacts/readonly.ts +0 -438
@@ -1,438 +0,0 @@
1
- import * as os from "os";
2
- import * as path from "path";
3
-
4
- import fsExtra from "fs-extra";
5
-
6
- import { Artifact, BuildInfo } from "../../types";
7
- import {
8
- getFullyQualifiedName,
9
- isFullyQualifiedName,
10
- parseFullyQualifiedName,
11
- findDistance,
12
- } from "../../utils/contract-names";
13
- import { replaceBackslashes } from "../../utils/source-names";
14
-
15
- import { BUILD_INFO_DIR_NAME, EDIT_DISTANCE_THRESHOLD } from "../constants";
16
- import { HardhatError } from "../core/errors";
17
- import { ERRORS } from "../core/errors-list";
18
- import {
19
- FileNotFoundError,
20
- getAllFilesMatching,
21
- getAllFilesMatchingSync,
22
- getFileTrueCase,
23
- getFileTrueCaseSync,
24
- } from "../util/fs-utils";
25
-
26
- /**
27
- * The purpose of this class is to encapsulate JSON file I/O. It assumes that
28
- * all input strings are simply paths, not contract names nor fully-qualified
29
- * contract names like other interfaces around here accept.
30
- */
31
- class ReadOnlyByPath {
32
- protected async _readArtifactByPath(artifactPath: string): Promise<Artifact> {
33
- return fsExtra.readJson(artifactPath);
34
- }
35
-
36
- protected _readArtifactByPathSync(artifactPath: string): Artifact {
37
- return fsExtra.readJsonSync(artifactPath);
38
- }
39
-
40
- protected async _artifactPathExists(artifactPath: string): Promise<boolean> {
41
- return fsExtra.pathExists(artifactPath);
42
- }
43
-
44
- protected async _getBuildInfoByPath(
45
- buildInfoPath: string
46
- ): Promise<BuildInfo | undefined> {
47
- return fsExtra.readJSON(buildInfoPath);
48
- }
49
-
50
- /**
51
- * Given the path to a debug file, returns the absolute path to its
52
- * corresponding build info file if it exists, or undefined otherwise.
53
- */
54
- protected static async _getBuildInfoFromDebugFile(
55
- debugFilePath: string
56
- ): Promise<string | undefined> {
57
- if (await fsExtra.pathExists(debugFilePath)) {
58
- const { buildInfo } = await fsExtra.readJson(debugFilePath);
59
- return path.resolve(path.dirname(debugFilePath), buildInfo);
60
- }
61
-
62
- return undefined;
63
- }
64
-
65
- protected _getDebugFilePath(artifactPath: string): string {
66
- return artifactPath.replace(/\.json$/, ".dbg.json");
67
- }
68
- }
69
-
70
- /**
71
- * This class takes responsibility for the mappings between contract names,
72
- * fully-qualified contract names, and file paths.
73
- */
74
- export class ReadOnlySource extends ReadOnlyByPath {
75
- constructor(protected _artifactsPath: string) {
76
- super();
77
- }
78
-
79
- public async artifactExists(name: string): Promise<boolean> {
80
- const artifactPath = await this._getArtifactPath(name);
81
-
82
- if (artifactPath === undefined) {
83
- return false;
84
- }
85
-
86
- return super._artifactPathExists(artifactPath);
87
- }
88
-
89
- public async getArtifactPaths(): Promise<string[]> {
90
- const buildInfosDir = path.join(this._artifactsPath, BUILD_INFO_DIR_NAME);
91
-
92
- const paths = await getAllFilesMatching(
93
- this._artifactsPath,
94
- (f) =>
95
- f.endsWith(".json") &&
96
- !f.startsWith(buildInfosDir) &&
97
- !f.endsWith(".dbg.json")
98
- );
99
-
100
- return paths.sort();
101
- }
102
-
103
- /**
104
- * Returns the absolute path to the given artifact
105
- */
106
- public formArtifactPathFromFullyQualifiedName(
107
- fullyQualifiedName: string
108
- ): string {
109
- const { sourceName, contractName } =
110
- parseFullyQualifiedName(fullyQualifiedName);
111
-
112
- return path.join(this._artifactsPath, sourceName, `${contractName}.json`);
113
- }
114
-
115
- public async getAllFullyQualifiedNames(): Promise<string[]> {
116
- const paths = await this.getArtifactPaths();
117
- return paths.map((p) => this._getFullyQualifiedNameFromPath(p)).sort();
118
- }
119
-
120
- public async getBuildInfo(
121
- fullyQualifiedName: string
122
- ): Promise<BuildInfo | undefined> {
123
- const buildInfoPath = await this._getBuildInfoPath(fullyQualifiedName);
124
-
125
- if (buildInfoPath === undefined) {
126
- return undefined;
127
- }
128
-
129
- return super._getBuildInfoByPath(buildInfoPath);
130
- }
131
-
132
- public async getBuildInfoPaths(): Promise<string[]> {
133
- const paths = await getAllFilesMatching(
134
- path.join(this._artifactsPath, BUILD_INFO_DIR_NAME),
135
- (f) => f.endsWith(".json")
136
- );
137
-
138
- return paths.sort();
139
- }
140
-
141
- public async getDebugFilePaths(): Promise<string[]> {
142
- const paths = await getAllFilesMatching(
143
- path.join(this._artifactsPath),
144
- (f) => f.endsWith(".dbg.json")
145
- );
146
-
147
- return paths.sort();
148
- }
149
-
150
- public async readArtifact(name: string): Promise<Artifact | undefined> {
151
- const artifactPath = await this._getArtifactPath(name);
152
- if (artifactPath === undefined) {
153
- return undefined;
154
- }
155
-
156
- return super._readArtifactByPath(artifactPath);
157
- }
158
-
159
- public readArtifactSync(name: string): Artifact | undefined {
160
- const artifactPath = this._getArtifactPathSync(name);
161
- if (artifactPath === undefined) {
162
- return undefined;
163
- }
164
-
165
- return super._readArtifactByPathSync(artifactPath);
166
- }
167
-
168
- public getSuggestions(name: string): string[] {
169
- if (isFullyQualifiedName(name)) {
170
- const fqns = this._getAllFullyQualifiedNamesSync();
171
-
172
- return ReadOnlySource._getSimilarContractNames(name, fqns);
173
- }
174
-
175
- const files = this._getArtifactPathsSync();
176
- const names = this._getAllContractNamesFromFiles(files);
177
-
178
- let similarNames = ReadOnlySource._getSimilarContractNames(name, names);
179
-
180
- if (similarNames.length > 1) {
181
- similarNames = this._filterDuplicatesAsFullyQualifiedNames(
182
- files,
183
- similarNames
184
- );
185
- }
186
-
187
- return similarNames;
188
- }
189
-
190
- /**
191
- * If the project has these contracts:
192
- * - 'contracts/Greeter.sol:Greeter'
193
- * - 'contracts/Meeter.sol:Greeter'
194
- * - 'contracts/Greater.sol:Greater'
195
- * And the user tries to get an artifact with the name 'Greter', then
196
- * the suggestions will be 'Greeter', 'Greeter', and 'Greater'.
197
- *
198
- * We don't want to show duplicates here, so we use FQNs for those. The
199
- * suggestions will then be:
200
- * - 'contracts/Greeter.sol:Greeter'
201
- * - 'contracts/Meeter.sol:Greeter'
202
- * - 'Greater'
203
- */
204
- private _filterDuplicatesAsFullyQualifiedNames(
205
- files: string[],
206
- similarNames: string[]
207
- ): string[] {
208
- const outputNames = [];
209
- const groups = similarNames.reduce((obj, cur) => {
210
- // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
211
- obj[cur] = obj[cur] ? obj[cur] + 1 : 1;
212
- return obj;
213
- }, {} as { [k: string]: number });
214
-
215
- for (const [name, occurrences] of Object.entries(groups)) {
216
- if (occurrences > 1) {
217
- for (const file of files) {
218
- if (path.basename(file) === `${name}.json`) {
219
- outputNames.push(this._getFullyQualifiedNameFromPath(file));
220
- }
221
- }
222
- continue;
223
- }
224
-
225
- outputNames.push(name);
226
- }
227
-
228
- return outputNames;
229
- }
230
-
231
- private _getAllContractNamesFromFiles(files: string[]): string[] {
232
- return files.map((file) => {
233
- const fqn = this._getFullyQualifiedNameFromPath(file);
234
- return parseFullyQualifiedName(fqn).contractName;
235
- });
236
- }
237
-
238
- private _getAllFullyQualifiedNamesSync(): string[] {
239
- const paths = this._getArtifactPathsSync();
240
- return paths.map((p) => this._getFullyQualifiedNameFromPath(p)).sort();
241
- }
242
-
243
- /**
244
- * Returns the absolute path to the artifact that corresponds to the given
245
- * name.
246
- *
247
- * If the name is fully qualified, the path is computed from it. If not, an
248
- * artifact that matches the given name is searched in the existing artifacts.
249
- * If there is an ambiguity, an error is thrown.
250
- */
251
- protected async _getArtifactPath(name: string): Promise<string | undefined> {
252
- let result: string | undefined;
253
- if (isFullyQualifiedName(name)) {
254
- result = await this._getValidArtifactPathFromFullyQualifiedName(name);
255
- } else {
256
- const files = await this.getArtifactPaths();
257
- result = this._getArtifactPathFromFiles(name, files);
258
- }
259
- return result;
260
- }
261
-
262
- protected _getArtifactPathSync(name: string): string | undefined {
263
- let result: string | undefined;
264
- if (isFullyQualifiedName(name)) {
265
- result = this._getValidArtifactPathFromFullyQualifiedNameSync(name);
266
- } else {
267
- const files = this._getArtifactPathsSync();
268
- result = this._getArtifactPathFromFiles(name, files);
269
- }
270
- return result;
271
- }
272
-
273
- private _getArtifactPathFromFiles(
274
- contractName: string,
275
- files: string[]
276
- ): string | undefined {
277
- const matchingFiles = files.filter((file) => {
278
- return path.basename(file) === `${contractName}.json`;
279
- });
280
-
281
- if (matchingFiles.length === 0) {
282
- return undefined;
283
- }
284
-
285
- if (matchingFiles.length > 1) {
286
- const candidates = matchingFiles.map((file) =>
287
- this._getFullyQualifiedNameFromPath(file)
288
- );
289
-
290
- throw new HardhatError(ERRORS.ARTIFACTS.MULTIPLE_FOUND, {
291
- contractName,
292
- candidates: candidates.join(os.EOL),
293
- });
294
- }
295
-
296
- return matchingFiles[0];
297
- }
298
-
299
- protected _getArtifactPathsSync(): string[] {
300
- const buildInfosDir = path.join(this._artifactsPath, BUILD_INFO_DIR_NAME);
301
-
302
- const paths = getAllFilesMatchingSync(
303
- this._artifactsPath,
304
- (f) =>
305
- f.endsWith(".json") &&
306
- !f.startsWith(buildInfosDir) &&
307
- !f.endsWith(".dbg.json")
308
- );
309
-
310
- return paths.sort();
311
- }
312
-
313
- protected async _getBuildInfoPath(
314
- fullyQualifiedName: string
315
- ): Promise<string | undefined> {
316
- const artifactPath =
317
- this.formArtifactPathFromFullyQualifiedName(fullyQualifiedName);
318
-
319
- const debugFilePath = this._getDebugFilePath(artifactPath);
320
- const buildInfoPath = await ReadOnlySource._getBuildInfoFromDebugFile(
321
- debugFilePath
322
- );
323
- return buildInfoPath;
324
- }
325
-
326
- /**
327
- * Returns the FQN of a contract giving the absolute path to its artifact.
328
- *
329
- * For example, given a path like
330
- * `/path/to/project/artifacts/contracts/Foo.sol/Bar.json`, it'll return the
331
- * FQN `contracts/Foo.sol:Bar`
332
- */
333
- private _getFullyQualifiedNameFromPath(absolutePath: string): string {
334
- const sourceName = replaceBackslashes(
335
- path.relative(this._artifactsPath, path.dirname(absolutePath))
336
- );
337
-
338
- const contractName = path.basename(absolutePath).replace(".json", "");
339
-
340
- return getFullyQualifiedName(sourceName, contractName);
341
- }
342
-
343
- /**
344
- *
345
- * @param givenName can be FQN or contract name
346
- * @param names MUST match type of givenName (i.e. array of FQN's if givenName is FQN)
347
- * @returns
348
- */
349
- private static _getSimilarContractNames(
350
- givenName: string,
351
- names: string[]
352
- ): string[] {
353
- let shortestDistance = EDIT_DISTANCE_THRESHOLD;
354
- let mostSimilarNames: string[] = [];
355
- for (const name of names) {
356
- const distance = findDistance(givenName, name);
357
-
358
- if (distance < shortestDistance) {
359
- shortestDistance = distance;
360
- mostSimilarNames = [name];
361
- continue;
362
- }
363
-
364
- if (distance === shortestDistance) {
365
- mostSimilarNames.push(name);
366
- continue;
367
- }
368
- }
369
-
370
- return mostSimilarNames;
371
- }
372
-
373
- private async _getValidArtifactPathFromFullyQualifiedName(
374
- fullyQualifiedName: string
375
- ): Promise<string | undefined> {
376
- const artifactPath =
377
- this.formArtifactPathFromFullyQualifiedName(fullyQualifiedName);
378
-
379
- try {
380
- const trueCasePath = path.join(
381
- this._artifactsPath,
382
- await getFileTrueCase(
383
- this._artifactsPath,
384
- path.relative(this._artifactsPath, artifactPath)
385
- )
386
- );
387
-
388
- if (artifactPath !== trueCasePath) {
389
- throw new HardhatError(ERRORS.ARTIFACTS.WRONG_CASING, {
390
- correct: this._getFullyQualifiedNameFromPath(trueCasePath),
391
- incorrect: fullyQualifiedName,
392
- });
393
- }
394
-
395
- return trueCasePath;
396
- } catch (e) {
397
- if (e instanceof FileNotFoundError) {
398
- return undefined;
399
- }
400
-
401
- // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
402
- throw e;
403
- }
404
- }
405
-
406
- private _getValidArtifactPathFromFullyQualifiedNameSync(
407
- fullyQualifiedName: string
408
- ): string | undefined {
409
- const artifactPath =
410
- this.formArtifactPathFromFullyQualifiedName(fullyQualifiedName);
411
-
412
- try {
413
- const trueCasePath = path.join(
414
- this._artifactsPath,
415
- getFileTrueCaseSync(
416
- this._artifactsPath,
417
- path.relative(this._artifactsPath, artifactPath)
418
- )
419
- );
420
-
421
- if (artifactPath !== trueCasePath) {
422
- throw new HardhatError(ERRORS.ARTIFACTS.WRONG_CASING, {
423
- correct: this._getFullyQualifiedNameFromPath(trueCasePath),
424
- incorrect: fullyQualifiedName,
425
- });
426
- }
427
-
428
- return trueCasePath;
429
- } catch (e) {
430
- if (e instanceof FileNotFoundError) {
431
- return undefined;
432
- }
433
-
434
- // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
435
- throw e;
436
- }
437
- }
438
- }