hardhat 2.6.6 → 2.7.1

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 (389) 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 +57 -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 +45 -22
  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 +22 -8
  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 +29 -8
  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 +113 -38
  55. package/internal/core/config/config-validation.js.map +1 -1
  56. package/internal/core/config/default-config.d.ts +1 -0
  57. package/internal/core/config/default-config.d.ts.map +1 -1
  58. package/internal/core/config/default-config.js +12 -5
  59. package/internal/core/config/default-config.js.map +1 -1
  60. package/internal/core/errors-list.d.ts +14 -0
  61. package/internal/core/errors-list.d.ts.map +1 -1
  62. package/internal/core/errors-list.js +21 -2
  63. package/internal/core/errors-list.js.map +1 -1
  64. package/internal/core/errors.js +3 -3
  65. package/internal/core/errors.js.map +1 -1
  66. package/internal/core/execution-mode.js +2 -2
  67. package/internal/core/execution-mode.js.map +1 -1
  68. package/internal/core/jsonrpc/types/access-list.d.ts +0 -1
  69. package/internal/core/jsonrpc/types/access-list.d.ts.map +1 -1
  70. package/internal/core/jsonrpc/types/access-list.js +1 -1
  71. package/internal/core/jsonrpc/types/access-list.js.map +1 -1
  72. package/internal/core/jsonrpc/types/base-types.js +9 -9
  73. package/internal/core/jsonrpc/types/base-types.js.map +1 -1
  74. package/internal/core/jsonrpc/types/input/blockTag.d.ts +3 -4
  75. package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -1
  76. package/internal/core/jsonrpc/types/input/blockTag.js +3 -3
  77. package/internal/core/jsonrpc/types/input/blockTag.js.map +1 -1
  78. package/internal/core/jsonrpc/types/input/callRequest.d.ts +0 -1
  79. package/internal/core/jsonrpc/types/input/callRequest.d.ts.map +1 -1
  80. package/internal/core/jsonrpc/types/input/callRequest.js +9 -9
  81. package/internal/core/jsonrpc/types/input/callRequest.js.map +1 -1
  82. package/internal/core/jsonrpc/types/input/debugTraceTransaction.js +4 -4
  83. package/internal/core/jsonrpc/types/input/debugTraceTransaction.js.map +1 -1
  84. package/internal/core/jsonrpc/types/input/filterRequest.d.ts +0 -1
  85. package/internal/core/jsonrpc/types/input/filterRequest.d.ts.map +1 -1
  86. package/internal/core/jsonrpc/types/input/filterRequest.js +2 -2
  87. package/internal/core/jsonrpc/types/input/filterRequest.js.map +1 -1
  88. package/internal/core/jsonrpc/types/input/hardhat-network.js +4 -4
  89. package/internal/core/jsonrpc/types/input/hardhat-network.js.map +1 -1
  90. package/internal/core/jsonrpc/types/input/logAddress.js +1 -1
  91. package/internal/core/jsonrpc/types/input/logAddress.js.map +1 -1
  92. package/internal/core/jsonrpc/types/input/logTopics.js +1 -1
  93. package/internal/core/jsonrpc/types/input/logTopics.js.map +1 -1
  94. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts +0 -1
  95. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts.map +1 -1
  96. package/internal/core/jsonrpc/types/input/transactionRequest.js +10 -10
  97. package/internal/core/jsonrpc/types/input/transactionRequest.js.map +1 -1
  98. package/internal/core/jsonrpc/types/output/block.d.ts +0 -1
  99. package/internal/core/jsonrpc/types/output/block.d.ts.map +1 -1
  100. package/internal/core/jsonrpc/types/output/block.js +5 -5
  101. package/internal/core/jsonrpc/types/output/block.js.map +1 -1
  102. package/internal/core/jsonrpc/types/output/log.d.ts +1 -1
  103. package/internal/core/jsonrpc/types/output/log.d.ts.map +1 -1
  104. package/internal/core/jsonrpc/types/output/log.js +5 -4
  105. package/internal/core/jsonrpc/types/output/log.js.map +1 -1
  106. package/internal/core/jsonrpc/types/output/receipt.d.ts +1 -1
  107. package/internal/core/jsonrpc/types/output/receipt.d.ts.map +1 -1
  108. package/internal/core/jsonrpc/types/output/receipt.js +6 -6
  109. package/internal/core/jsonrpc/types/output/receipt.js.map +1 -1
  110. package/internal/core/jsonrpc/types/output/transaction.d.ts +0 -1
  111. package/internal/core/jsonrpc/types/output/transaction.d.ts.map +1 -1
  112. package/internal/core/jsonrpc/types/output/transaction.js +9 -9
  113. package/internal/core/jsonrpc/types/output/transaction.js.map +1 -1
  114. package/internal/core/params/argumentTypes.d.ts.map +1 -1
  115. package/internal/core/params/argumentTypes.js +25 -13
  116. package/internal/core/params/argumentTypes.js.map +1 -1
  117. package/internal/core/params/env-variables.d.ts.map +1 -1
  118. package/internal/core/params/env-variables.js +9 -5
  119. package/internal/core/params/env-variables.js.map +1 -1
  120. package/internal/core/params/hardhat-params.js +2 -2
  121. package/internal/core/params/hardhat-params.js.map +1 -1
  122. package/internal/core/project-structure.js +1 -1
  123. package/internal/core/project-structure.js.map +1 -1
  124. package/internal/core/providers/accounts.d.ts.map +1 -1
  125. package/internal/core/providers/accounts.js +22 -7
  126. package/internal/core/providers/accounts.js.map +1 -1
  127. package/internal/core/providers/backwards-compatibility.js.map +1 -1
  128. package/internal/core/providers/chainId.js +3 -3
  129. package/internal/core/providers/chainId.js.map +1 -1
  130. package/internal/core/providers/construction.d.ts.map +1 -1
  131. package/internal/core/providers/construction.js +6 -4
  132. package/internal/core/providers/construction.js.map +1 -1
  133. package/internal/core/providers/gas-providers.d.ts.map +1 -1
  134. package/internal/core/providers/gas-providers.js +20 -18
  135. package/internal/core/providers/gas-providers.js.map +1 -1
  136. package/internal/core/providers/http.js +1 -1
  137. package/internal/core/providers/http.js.map +1 -1
  138. package/internal/core/providers/util.js +1 -1
  139. package/internal/core/providers/util.js.map +1 -1
  140. package/internal/core/providers/wrapper.d.ts.map +1 -1
  141. package/internal/core/runtime-environment.d.ts.map +1 -1
  142. package/internal/core/runtime-environment.js +7 -5
  143. package/internal/core/runtime-environment.js.map +1 -1
  144. package/internal/core/typescript-support.d.ts +1 -1
  145. package/internal/core/typescript-support.d.ts.map +1 -1
  146. package/internal/core/typescript-support.js +8 -5
  147. package/internal/core/typescript-support.js.map +1 -1
  148. package/internal/hardhat-network/jsonrpc/client.d.ts +2 -0
  149. package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
  150. package/internal/hardhat-network/jsonrpc/client.js +23 -23
  151. package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
  152. package/internal/hardhat-network/jsonrpc/handler.js +16 -8
  153. package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
  154. package/internal/hardhat-network/jsonrpc/server.js +1 -1
  155. package/internal/hardhat-network/jsonrpc/server.js.map +1 -1
  156. package/internal/hardhat-network/provider/BlockchainData.d.ts +1 -1
  157. package/internal/hardhat-network/provider/BlockchainData.js +12 -12
  158. package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
  159. package/internal/hardhat-network/provider/HardhatBlockchain.js +2 -2
  160. package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
  161. package/internal/hardhat-network/provider/HardhatStateManager.js +29 -29
  162. package/internal/hardhat-network/provider/HardhatStateManager.js.map +1 -1
  163. package/internal/hardhat-network/provider/PoolState.js +6 -6
  164. package/internal/hardhat-network/provider/PoolState.js.map +1 -1
  165. package/internal/hardhat-network/provider/TransactionQueue.d.ts +2 -1
  166. package/internal/hardhat-network/provider/TransactionQueue.d.ts.map +1 -1
  167. package/internal/hardhat-network/provider/TransactionQueue.js +16 -2
  168. package/internal/hardhat-network/provider/TransactionQueue.js.map +1 -1
  169. package/internal/hardhat-network/provider/TxPool.js +19 -19
  170. package/internal/hardhat-network/provider/TxPool.js.map +1 -1
  171. package/internal/hardhat-network/provider/filter.js +3 -3
  172. package/internal/hardhat-network/provider/filter.js.map +1 -1
  173. package/internal/hardhat-network/provider/fork/AccountState.js +4 -4
  174. package/internal/hardhat-network/provider/fork/AccountState.js.map +1 -1
  175. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -1
  176. package/internal/hardhat-network/provider/fork/ForkBlockchain.js +8 -10
  177. package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
  178. package/internal/hardhat-network/provider/fork/ForkStateManager.js +34 -34
  179. package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
  180. package/internal/hardhat-network/provider/fork/random.d.ts +0 -1
  181. package/internal/hardhat-network/provider/fork/random.d.ts.map +1 -1
  182. package/internal/hardhat-network/provider/fork/random.js +13 -8
  183. package/internal/hardhat-network/provider/fork/random.js.map +1 -1
  184. package/internal/hardhat-network/provider/fork/rpcToBlockData.js +1 -0
  185. package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -1
  186. package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -1
  187. package/internal/hardhat-network/provider/modules/debug.js +1 -1
  188. package/internal/hardhat-network/provider/modules/debug.js.map +1 -1
  189. package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
  190. package/internal/hardhat-network/provider/modules/eth.js +86 -84
  191. package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
  192. package/internal/hardhat-network/provider/modules/evm.js +9 -9
  193. package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
  194. package/internal/hardhat-network/provider/modules/hardhat.d.ts +3 -0
  195. package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -1
  196. package/internal/hardhat-network/provider/modules/hardhat.js +31 -15
  197. package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
  198. package/internal/hardhat-network/provider/modules/logger.js +17 -17
  199. package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
  200. package/internal/hardhat-network/provider/modules/net.js +2 -2
  201. package/internal/hardhat-network/provider/modules/net.js.map +1 -1
  202. package/internal/hardhat-network/provider/modules/personal.d.ts +9 -0
  203. package/internal/hardhat-network/provider/modules/personal.d.ts.map +1 -0
  204. package/internal/hardhat-network/provider/modules/personal.js +31 -0
  205. package/internal/hardhat-network/provider/modules/personal.js.map +1 -0
  206. package/internal/hardhat-network/provider/modules/web3.js +4 -4
  207. package/internal/hardhat-network/provider/modules/web3.js.map +1 -1
  208. package/internal/hardhat-network/provider/node-types.d.ts +5 -0
  209. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
  210. package/internal/hardhat-network/provider/node-types.js.map +1 -1
  211. package/internal/hardhat-network/provider/node.d.ts +4 -1
  212. package/internal/hardhat-network/provider/node.d.ts.map +1 -1
  213. package/internal/hardhat-network/provider/node.js +107 -71
  214. package/internal/hardhat-network/provider/node.js.map +1 -1
  215. package/internal/hardhat-network/provider/output.d.ts +1 -1
  216. package/internal/hardhat-network/provider/output.d.ts.map +1 -1
  217. package/internal/hardhat-network/provider/output.js +94 -91
  218. package/internal/hardhat-network/provider/output.js.map +1 -1
  219. package/internal/hardhat-network/provider/provider.d.ts +6 -2
  220. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  221. package/internal/hardhat-network/provider/provider.js +14 -4
  222. package/internal/hardhat-network/provider/provider.js.map +1 -1
  223. package/internal/hardhat-network/provider/return-data.js +4 -4
  224. package/internal/hardhat-network/provider/return-data.js.map +1 -1
  225. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
  226. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
  227. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
  228. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +1 -1
  229. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
  230. package/internal/hardhat-network/provider/utils/bnToHex.js +1 -1
  231. package/internal/hardhat-network/provider/utils/bnToHex.js.map +1 -1
  232. package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js.map +1 -1
  233. package/internal/hardhat-network/provider/utils/makeAccount.js +4 -4
  234. package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -1
  235. package/internal/hardhat-network/provider/utils/makeCommon.js +3 -3
  236. package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
  237. package/internal/hardhat-network/provider/utils/makeForkClient.js +4 -4
  238. package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -1
  239. package/internal/hardhat-network/provider/utils/makeStateTrie.js +1 -1
  240. package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
  241. package/internal/hardhat-network/provider/utils/txMapToArray.js +1 -1
  242. package/internal/hardhat-network/provider/utils/txMapToArray.js.map +1 -1
  243. package/internal/hardhat-network/stack-traces/compiler-to-model.js +4 -4
  244. package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
  245. package/internal/hardhat-network/stack-traces/consoleLogger.js +44 -44
  246. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  247. package/internal/hardhat-network/stack-traces/contracts-identifier.js +6 -6
  248. package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
  249. package/internal/hardhat-network/stack-traces/debug.js +17 -17
  250. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  251. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +1 -1
  252. package/internal/hardhat-network/stack-traces/error-inferrer.js +42 -28
  253. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
  254. package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.js +3 -3
  255. package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.js.map +1 -1
  256. package/internal/hardhat-network/stack-traces/model.js +5 -5
  257. package/internal/hardhat-network/stack-traces/model.js.map +1 -1
  258. package/internal/hardhat-network/stack-traces/solidity-errors.js +3 -3
  259. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  260. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts +1 -1
  261. package/internal/hardhat-network/stack-traces/solidityTracer.js +11 -11
  262. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  263. package/internal/hardhat-network/stack-traces/source-maps.js +7 -7
  264. package/internal/hardhat-network/stack-traces/source-maps.js.map +1 -1
  265. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +5 -5
  266. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
  267. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js +2 -2
  268. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js.map +1 -1
  269. package/internal/hardhat-network/stack-traces/vm-tracer.js +3 -3
  270. package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
  271. package/internal/lib/hardhat-lib.js +3 -3
  272. package/internal/lib/hardhat-lib.js.map +1 -1
  273. package/internal/reset.js +1 -1
  274. package/internal/reset.js.map +1 -1
  275. package/internal/sentry/anonymizer.js.map +1 -1
  276. package/internal/sentry/reporter.js +5 -5
  277. package/internal/sentry/reporter.js.map +1 -1
  278. package/internal/sentry/subprocess.js +2 -2
  279. package/internal/sentry/subprocess.js.map +1 -1
  280. package/internal/sentry/transport.js +1 -1
  281. package/internal/sentry/transport.js.map +1 -1
  282. package/internal/solidity/compilation-job.js +4 -4
  283. package/internal/solidity/compilation-job.js.map +1 -1
  284. package/internal/solidity/compiler/downloader.d.ts +1 -1
  285. package/internal/solidity/compiler/downloader.d.ts.map +1 -1
  286. package/internal/solidity/compiler/downloader.js +21 -7
  287. package/internal/solidity/compiler/downloader.js.map +1 -1
  288. package/internal/solidity/compiler/index.js +1 -1
  289. package/internal/solidity/compiler/index.js.map +1 -1
  290. package/internal/solidity/dependencyGraph.js +2 -1
  291. package/internal/solidity/dependencyGraph.js.map +1 -1
  292. package/internal/solidity/parse.js +3 -2
  293. package/internal/solidity/parse.js.map +1 -1
  294. package/internal/solidity/resolver.js +10 -10
  295. package/internal/solidity/resolver.js.map +1 -1
  296. package/internal/util/abi-helpers.js +1 -1
  297. package/internal/util/abi-helpers.js.map +1 -1
  298. package/internal/util/download.d.ts.map +1 -1
  299. package/internal/util/download.js +12 -1
  300. package/internal/util/download.js.map +1 -1
  301. package/internal/util/global-dir.js +1 -1
  302. package/internal/util/global-dir.js.map +1 -1
  303. package/internal/util/hardforks.d.ts +2 -1
  304. package/internal/util/hardforks.d.ts.map +1 -1
  305. package/internal/util/hardforks.js +3 -1
  306. package/internal/util/hardforks.js.map +1 -1
  307. package/internal/util/jsonrpc.js +1 -1
  308. package/internal/util/jsonrpc.js.map +1 -1
  309. package/internal/util/packageInfo.js +1 -1
  310. package/internal/util/packageInfo.js.map +1 -1
  311. package/internal/util/scripts-runner.js +3 -3
  312. package/internal/util/scripts-runner.js.map +1 -1
  313. package/package.json +14 -14
  314. package/register.js +7 -7
  315. package/register.js.map +1 -1
  316. package/src/builtin-tasks/compile.ts +14 -0
  317. package/src/builtin-tasks/flatten.ts +4 -2
  318. package/src/builtin-tasks/node.ts +56 -17
  319. package/src/builtin-tasks/run.ts +13 -8
  320. package/src/builtin-tasks/utils/watch.ts +3 -1
  321. package/src/internal/artifacts.ts +269 -72
  322. package/src/internal/cli/analytics.ts +1 -1
  323. package/src/internal/cli/autocomplete.ts +3 -3
  324. package/src/internal/cli/bootstrap.ts +1 -1
  325. package/src/internal/cli/cli.ts +2 -2
  326. package/src/internal/cli/project-creation.ts +2 -2
  327. package/src/internal/constants.ts +4 -0
  328. package/src/internal/context.ts +1 -1
  329. package/src/internal/core/config/config-loading.ts +25 -3
  330. package/src/internal/core/config/config-resolution.ts +28 -0
  331. package/src/internal/core/config/config-validation.ts +147 -15
  332. package/src/internal/core/config/default-config.ts +10 -3
  333. package/src/internal/core/errors-list.ts +21 -2
  334. package/src/internal/core/execution-mode.ts +1 -1
  335. package/src/internal/core/jsonrpc/types/output/log.ts +1 -0
  336. package/src/internal/core/params/argumentTypes.ts +40 -25
  337. package/src/internal/core/params/env-variables.ts +13 -8
  338. package/src/internal/core/params/hardhat-params.ts +2 -2
  339. package/src/internal/core/providers/accounts.ts +23 -3
  340. package/src/internal/core/providers/backwards-compatibility.ts +1 -1
  341. package/src/internal/core/providers/chainId.ts +1 -1
  342. package/src/internal/core/providers/construction.ts +8 -2
  343. package/src/internal/core/providers/gas-providers.ts +7 -5
  344. package/src/internal/core/providers/http.ts +1 -1
  345. package/src/internal/core/providers/wrapper.ts +1 -1
  346. package/src/internal/core/runtime-environment.ts +3 -1
  347. package/src/internal/core/typescript-support.ts +7 -3
  348. package/src/internal/hardhat-network/jsonrpc/client.ts +2 -2
  349. package/src/internal/hardhat-network/jsonrpc/handler.ts +12 -2
  350. package/src/internal/hardhat-network/jsonrpc/server.ts +2 -2
  351. package/src/internal/hardhat-network/provider/TransactionQueue.ts +31 -4
  352. package/src/internal/hardhat-network/provider/TxPool.ts +1 -1
  353. package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +2 -4
  354. package/src/internal/hardhat-network/provider/modules/eth.ts +23 -21
  355. package/src/internal/hardhat-network/provider/modules/hardhat.ts +24 -1
  356. package/src/internal/hardhat-network/provider/modules/personal.ts +39 -0
  357. package/src/internal/hardhat-network/provider/node-types.ts +6 -0
  358. package/src/internal/hardhat-network/provider/node.ts +68 -26
  359. package/src/internal/hardhat-network/provider/output.ts +9 -9
  360. package/src/internal/hardhat-network/provider/provider.ts +16 -2
  361. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +1 -1
  362. package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +19 -0
  363. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +1 -1
  364. package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +1 -1
  365. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +3 -3
  366. package/src/internal/reset.ts +1 -1
  367. package/src/internal/sentry/subprocess.ts +2 -2
  368. package/src/internal/solidity/compiler/downloader.ts +27 -12
  369. package/src/internal/solidity/resolver.ts +1 -1
  370. package/src/internal/util/abi-helpers.ts +1 -1
  371. package/src/internal/util/download.ts +17 -1
  372. package/src/internal/util/hardforks.ts +2 -0
  373. package/src/internal/util/jsonrpc.ts +1 -1
  374. package/src/internal/util/packageInfo.ts +1 -1
  375. package/src/internal/util/scripts-runner.ts +1 -1
  376. package/src/register.ts +1 -1
  377. package/src/types/config.ts +14 -0
  378. package/src/utils/contract-names.ts +112 -0
  379. package/src/utils/source-names.ts +14 -12
  380. package/types/config.d.ts +10 -0
  381. package/types/config.d.ts.map +1 -1
  382. package/utils/contract-names.d.ts +10 -0
  383. package/utils/contract-names.d.ts.map +1 -1
  384. package/utils/contract-names.js +92 -1
  385. package/utils/contract-names.js.map +1 -1
  386. package/utils/source-names.d.ts +1 -1
  387. package/utils/source-names.js +8 -6
  388. package/utils/source-names.js.map +1 -1
  389. package/CHANGELOG.md +0 -32
@@ -38,16 +38,16 @@ export function isTypescriptSupported() {
38
38
  return cachedIsTypescriptSupported;
39
39
  }
40
40
 
41
- export function loadTsNode() {
41
+ export function loadTsNode(tsConfigPath?: string) {
42
42
  try {
43
43
  require.resolve("typescript");
44
- } catch (error) {
44
+ } catch {
45
45
  throw new HardhatError(ERRORS.GENERAL.TYPESCRIPT_NOT_INSTALLED);
46
46
  }
47
47
 
48
48
  try {
49
49
  require.resolve("ts-node");
50
- } catch (error) {
50
+ } catch {
51
51
  throw new HardhatError(ERRORS.GENERAL.TS_NODE_NOT_INSTALLED);
52
52
  }
53
53
 
@@ -58,6 +58,10 @@ export function loadTsNode() {
58
58
  return;
59
59
  }
60
60
 
61
+ if (tsConfigPath !== undefined) {
62
+ process.env.TS_NODE_PROJECT = tsConfigPath;
63
+ }
64
+
61
65
  // See: https://github.com/nomiclabs/hardhat/issues/265
62
66
  if (process.env.TS_NODE_FILES === undefined) {
63
67
  process.env.TS_NODE_FILES = "true";
@@ -317,7 +317,7 @@ export class JsonRpcClient {
317
317
  ): Promise<any> {
318
318
  try {
319
319
  return await this._httpProvider.request({ method, params });
320
- } catch (err) {
320
+ } catch (err: any) {
321
321
  if (this._shouldRetry(isRetryCall, err)) {
322
322
  return this._send(method, params, true);
323
323
  }
@@ -429,7 +429,7 @@ export class JsonRpcClient {
429
429
  encoding: "utf8",
430
430
  }
431
431
  );
432
- } catch (error) {
432
+ } catch (error: any) {
433
433
  if (error.code === "ENOENT") {
434
434
  return undefined;
435
435
  }
@@ -207,7 +207,12 @@ const _readJsonHttpRequest = async (req: IncomingMessage): Promise<any> => {
207
207
 
208
208
  json = JSON.parse(text);
209
209
  } catch (error) {
210
- throw new InvalidJsonInputError(`Parse error: ${error.message}`);
210
+ if (error instanceof Error) {
211
+ throw new InvalidJsonInputError(`Parse error: ${error.message}`);
212
+ }
213
+
214
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
215
+ throw error;
211
216
  }
212
217
 
213
218
  return json;
@@ -218,7 +223,12 @@ const _readWsRequest = (msg: string): JsonRpcRequest => {
218
223
  try {
219
224
  json = JSON.parse(msg);
220
225
  } catch (error) {
221
- throw new InvalidJsonInputError(`Parse error: ${error.message}`);
226
+ if (error instanceof Error) {
227
+ throw new InvalidJsonInputError(`Parse error: ${error.message}`);
228
+ }
229
+
230
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
231
+ throw error;
222
232
  }
223
233
 
224
234
  return json;
@@ -72,7 +72,7 @@ export class JsonRpcServer implements IJsonRpcServer {
72
72
 
73
73
  public close = async () => {
74
74
  await Promise.all([
75
- new Promise((resolve, reject) => {
75
+ new Promise<void>((resolve, reject) => {
76
76
  log("Closing JSON-RPC server");
77
77
  this._httpServer.close((err) => {
78
78
  if (err !== null && err !== undefined) {
@@ -85,7 +85,7 @@ export class JsonRpcServer implements IJsonRpcServer {
85
85
  resolve();
86
86
  });
87
87
  }),
88
- new Promise((resolve, reject) => {
88
+ new Promise<void>((resolve, reject) => {
89
89
  log("Closing websocket server");
90
90
  this._wsServer.close((err) => {
91
91
  if (err !== null && err !== undefined) {
@@ -2,7 +2,8 @@ import { TypedTransaction } from "@ethereumjs/tx";
2
2
  import { BN } from "ethereumjs-util";
3
3
  import Heap from "mnemonist/heap";
4
4
 
5
- import { InternalError } from "../../core/providers/errors";
5
+ import { InternalError, InvalidInputError } from "../../core/providers/errors";
6
+ import { MempoolOrder } from "./node-types";
6
7
  import { OrderedTransaction } from "./PoolState";
7
8
 
8
9
  function getEffectiveMinerFee(tx: OrderedTransaction, baseFee?: BN): BN {
@@ -38,6 +39,33 @@ function decreasingOrderEffectiveMinerFeeComparator(
38
39
  // in increasing order by orderId.
39
40
  return left.orderId - right.orderId;
40
41
  }
42
+
43
+ function decreasingOrderComparator(
44
+ left: OrderedTransaction,
45
+ right: OrderedTransaction
46
+ ) {
47
+ return left.orderId - right.orderId;
48
+ }
49
+
50
+ function getOrderedTransactionHeap(
51
+ mempoolOrder: MempoolOrder,
52
+ baseFee?: BN
53
+ ): Heap<OrderedTransaction> {
54
+ switch (mempoolOrder) {
55
+ case "priority":
56
+ return new Heap<OrderedTransaction>((a, b) =>
57
+ decreasingOrderEffectiveMinerFeeComparator(a, b, baseFee)
58
+ );
59
+ case "fifo":
60
+ return new Heap<OrderedTransaction>((a, b) =>
61
+ decreasingOrderComparator(a, b)
62
+ );
63
+ default:
64
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
65
+ throw new InvalidInputError(`Invalid mempool order: ${mempoolOrder}`);
66
+ }
67
+ }
68
+
41
69
  /**
42
70
  * A queue of transactions in the order that they could be mined in the next
43
71
  * block.
@@ -67,11 +95,10 @@ export class TransactionQueue {
67
95
  */
68
96
  constructor(
69
97
  pendingTransactions: Map<string, OrderedTransaction[]>,
98
+ mempoolOrder: MempoolOrder,
70
99
  baseFee?: BN
71
100
  ) {
72
- this._heap = new Heap<OrderedTransaction>((a, b) =>
73
- decreasingOrderEffectiveMinerFeeComparator(a, b, baseFee)
74
- );
101
+ this._heap = getOrderedTransactionHeap(mempoolOrder, baseFee);
75
102
 
76
103
  for (const [address, txList] of pendingTransactions) {
77
104
  if (baseFee === undefined && txList.some((tx) => tx.data.type === 2)) {
@@ -332,7 +332,7 @@ export class TxPool {
332
332
  private _getSenderAddress(tx: TypedTransaction): Address {
333
333
  try {
334
334
  return tx.getSenderAddress(); // verifies signature
335
- } catch (e) {
335
+ } catch (e: any) {
336
336
  if (!tx.isSigned()) {
337
337
  throw new InvalidInputError("Invalid Signature");
338
338
  }
@@ -215,9 +215,7 @@ export class ForkBlockchain implements HardhatBlockchainInterface {
215
215
  : filterParams.addresses,
216
216
  topics: filterParams.normalizedTopics,
217
217
  });
218
- return remoteLogs
219
- .map((log, index) => toRpcLogOutput(log, index))
220
- .concat(localLogs);
218
+ return remoteLogs.map(toRpcLogOutput).concat(localLogs);
221
219
  }
222
220
  return this._data.getLogs(filterParams);
223
221
  }
@@ -274,7 +272,7 @@ export class ForkBlockchain implements HardhatBlockchainInterface {
274
272
  // one for London.
275
273
  const common = this._common.copy();
276
274
  if (rpcBlock.baseFeePerGas !== undefined) {
277
- common.setHardfork("london");
275
+ common.setHardfork("london"); // TODO: consider changing this to "latest hardfork"
278
276
  } else {
279
277
  common.setHardfork("berlin");
280
278
  }
@@ -959,29 +959,31 @@ export class EthModule {
959
959
  // AccessListEIP2930Transaction.fromSerializedTx and Transaction.fromSerializedTx
960
960
  // Please keep it updated.
961
961
 
962
- if (error.message === "invalid remainder") {
963
- throw new InvalidArgumentsError("Invalid transaction", error);
964
- }
962
+ if (error instanceof Error) {
963
+ if (error.message === "invalid remainder") {
964
+ throw new InvalidArgumentsError("Invalid transaction", error);
965
+ }
965
966
 
966
- if (error.message.includes("Incompatible EIP155")) {
967
- throw new InvalidArgumentsError(
968
- "Trying to send an incompatible EIP-155 transaction, signed for another chain.",
969
- error
970
- );
971
- }
967
+ if (error.message.includes("Incompatible EIP155")) {
968
+ throw new InvalidArgumentsError(
969
+ "Trying to send an incompatible EIP-155 transaction, signed for another chain.",
970
+ error
971
+ );
972
+ }
972
973
 
973
- if (
974
- error.message.includes("TypedTransaction with ID") &&
975
- error.message.includes(" unknown")
976
- ) {
977
- throw new InvalidArgumentsError(`Invalid transaction`, error);
978
- }
974
+ if (
975
+ error.message.includes("TypedTransaction with ID") &&
976
+ error.message.includes(" unknown")
977
+ ) {
978
+ throw new InvalidArgumentsError(`Invalid transaction`, error);
979
+ }
979
980
 
980
- if (error.message.includes("The chain ID does not match")) {
981
- throw new InvalidArgumentsError(
982
- `Trying to send a raw transaction with an invalid chainId. The expected chainId is ${this._common.chainIdBN()}`,
983
- error
984
- );
981
+ if (error.message.includes("The chain ID does not match")) {
982
+ throw new InvalidArgumentsError(
983
+ `Trying to send a raw transaction with an invalid chainId. The expected chainId is ${this._common.chainIdBN()}`,
984
+ error
985
+ );
986
+ }
985
987
  }
986
988
 
987
989
  throw error;
@@ -1065,7 +1067,7 @@ export class EthModule {
1065
1067
  if (typeof typedData === "string") {
1066
1068
  try {
1067
1069
  typedMessage = JSON.parse(typedData);
1068
- } catch (error) {
1070
+ } catch {
1069
1071
  throw new InvalidInputError(
1070
1072
  `The message parameter is an invalid JSON. Either pass a valid JSON or a plain object conforming to EIP712 TypedData schema.`
1071
1073
  );
@@ -66,6 +66,9 @@ export class HardhatModule {
66
66
  case "hardhat_intervalMine":
67
67
  return this._intervalMineAction(...this._intervalMineParams(params));
68
68
 
69
+ case "hardhat_getAutomine":
70
+ return this._getAutomine();
71
+
69
72
  case "hardhat_stopImpersonatingAccount":
70
73
  return this._stopImpersonatingAction(
71
74
  ...this._stopImpersonatingParams(params)
@@ -105,6 +108,9 @@ export class HardhatModule {
105
108
  return this._setNextBlockBaseFeePerGasAction(
106
109
  ...this._setNextBlockBaseFeePerGasParams(params)
107
110
  );
111
+
112
+ case "hardhat_setCoinbase":
113
+ return this._setCoinbaseAction(...this._setCoinbaseParams(params));
108
114
  }
109
115
 
110
116
  throw new MethodNotFoundError(`Method ${method} not found`);
@@ -184,6 +190,12 @@ export class HardhatModule {
184
190
  return true;
185
191
  }
186
192
 
193
+ // hardhat_getAutomine
194
+
195
+ private async _getAutomine(): Promise<boolean> {
196
+ return this._node.getAutomine();
197
+ }
198
+
187
199
  // hardhat_stopImpersonatingAccount
188
200
 
189
201
  private _stopImpersonatingParams(params: any[]): [Buffer] {
@@ -233,7 +245,7 @@ export class HardhatModule {
233
245
 
234
246
  if (this._node.isEip1559Active()) {
235
247
  throw new InvalidInputError(
236
- "hardhat_setMinGasPrice is not support when EIP-1559 is active"
248
+ "hardhat_setMinGasPrice is not supported when EIP-1559 is active"
237
249
  );
238
250
  }
239
251
 
@@ -337,6 +349,17 @@ export class HardhatModule {
337
349
  return true;
338
350
  }
339
351
 
352
+ // hardhat_setCoinbase
353
+
354
+ private _setCoinbaseParams(params: any[]): [Buffer] {
355
+ return validateParams(params, rpcAddress);
356
+ }
357
+
358
+ private async _setCoinbaseAction(address: Buffer) {
359
+ await this._node.setCoinbase(new Address(address));
360
+ return true;
361
+ }
362
+
340
363
  private async _logBlock(result: MineBlockResult) {
341
364
  const { block, traces } = result;
342
365
 
@@ -0,0 +1,39 @@
1
+ import { Address, toRpcSig } from "ethereumjs-util";
2
+ import { rpcAddress, rpcData } from "../../../core/jsonrpc/types/base-types";
3
+ import { validateParams } from "../../../core/jsonrpc/types/input/validation";
4
+ import { MethodNotFoundError } from "../../../core/providers/errors";
5
+ import { HardhatNode } from "../node";
6
+
7
+ /* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
8
+
9
+ export class PersonalModule {
10
+ constructor(private readonly _node: HardhatNode) {}
11
+
12
+ public async processRequest(
13
+ method: string,
14
+ params: any[] = []
15
+ ): Promise<any> {
16
+ switch (method) {
17
+ case "personal_sign": {
18
+ return this._signAction(...this._signParams(params));
19
+ }
20
+ }
21
+
22
+ throw new MethodNotFoundError(`Method ${method} not found`);
23
+ }
24
+
25
+ // personal_sign
26
+
27
+ private _signParams(params: any[]): [Buffer, Buffer] {
28
+ return validateParams(params, rpcData, rpcAddress);
29
+ }
30
+
31
+ private async _signAction(data: Buffer, address: Buffer): Promise<string> {
32
+ const signature = await this._node.signPersonalMessage(
33
+ new Address(address),
34
+ data
35
+ );
36
+
37
+ return toRpcSig(signature.v, signature.r, signature.s);
38
+ }
39
+ }
@@ -3,6 +3,7 @@ import { RunBlockResult } from "@ethereumjs/vm/dist/runBlock";
3
3
  import { BN } from "ethereumjs-util";
4
4
 
5
5
  import { BuildInfo } from "../../../types";
6
+ import { HARDHAT_MEMPOOL_SUPPORTED_ORDERS } from "../../constants";
6
7
  import { MessageTrace } from "../stack-traces/message-trace";
7
8
 
8
9
  import type { ReturnData } from "./return-data";
@@ -28,6 +29,8 @@ interface CommonConfig {
28
29
  initialDate?: Date;
29
30
  tracingConfig?: TracingConfig;
30
31
  initialBaseFeePerGas?: number;
32
+ mempoolOrder: MempoolOrder;
33
+ coinbase: string;
31
34
  }
32
35
 
33
36
  export type LocalNodeConfig = CommonConfig;
@@ -48,6 +51,8 @@ export interface TracingConfig {
48
51
 
49
52
  export type IntervalMiningConfig = number | [number, number];
50
53
 
54
+ export type MempoolOrder = typeof HARDHAT_MEMPOOL_SUPPORTED_ORDERS[number];
55
+
51
56
  export interface GenesisAccount {
52
57
  privateKey: string;
53
58
  balance: string | number | BN;
@@ -121,6 +126,7 @@ export interface Snapshot {
121
126
  nextBlockTimestamp: BN;
122
127
  irregularStatesByBlockNumber: Map<string, Buffer>;
123
128
  userProvidedNextBlockBaseFeePerGas: BN | undefined;
129
+ coinbase: string;
124
130
  }
125
131
 
126
132
  export type SendTransactionResult =
@@ -82,6 +82,7 @@ import {
82
82
  GatherTracesResult,
83
83
  GenesisAccount,
84
84
  isForkedNodeConfig,
85
+ MempoolOrder,
85
86
  MineBlockResult,
86
87
  NodeConfig,
87
88
  RunCallResult,
@@ -115,10 +116,6 @@ const log = debug("hardhat:core:hardhat-network:node");
115
116
 
116
117
  const ethSigUtil = require("eth-sig-util");
117
118
 
118
- export const COINBASE_ADDRESS = Address.fromString(
119
- "0xc014ba5ec014ba5ec014ba5ec014ba5ec014ba5e"
120
- );
121
-
122
119
  /* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
123
120
 
124
121
  export class HardhatNode extends EventEmitter {
@@ -132,6 +129,7 @@ export class HardhatNode extends EventEmitter {
132
129
  allowUnlimitedContractSize,
133
130
  tracingConfig,
134
131
  minGasPrice,
132
+ mempoolOrder,
135
133
  } = config;
136
134
 
137
135
  let common: Common;
@@ -242,6 +240,8 @@ export class HardhatNode extends EventEmitter {
242
240
  automine,
243
241
  minGasPrice,
244
242
  initialBlockTimeOffset,
243
+ mempoolOrder,
244
+ config.coinbase,
245
245
  genesisAccounts,
246
246
  tracingConfig,
247
247
  forkNetworkId,
@@ -268,7 +268,7 @@ The hardfork must be at least spuriousDragon, but ${common.hardfork()} was given
268
268
  let upstreamCommon: Common;
269
269
  try {
270
270
  upstreamCommon = new Common({ chain: remoteChainId });
271
- } catch (error) {
271
+ } catch {
272
272
  // If ethereumjs doesn't have a common it will throw and we won't have
273
273
  // info about the activation block of each hardfork, so we don't run
274
274
  // this validation.
@@ -315,6 +315,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
315
315
  private _automine: boolean,
316
316
  private _minGasPrice: BN,
317
317
  private _blockTimeOffsetSeconds: BN = new BN(0),
318
+ private _mempoolOrder: MempoolOrder,
319
+ private _coinbase: string,
318
320
  genesisAccounts: GenesisAccount[],
319
321
  tracingConfig?: TracingConfig,
320
322
  private _forkNetworkId?: number,
@@ -367,7 +369,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
367
369
  error
368
370
  );
369
371
 
370
- Reporter.reportError(error);
372
+ if (error instanceof Error) {
373
+ Reporter.reportError(error);
374
+ }
371
375
  }
372
376
  }
373
377
 
@@ -434,16 +438,21 @@ Hardhat Network's forking functionality only works with blocks from at least spu
434
438
  try {
435
439
  result = await this._mineBlockWithPendingTxs(blockTimestamp);
436
440
  } catch (err) {
437
- if (err?.message.includes("sender doesn't have enough funds")) {
438
- throw new InvalidInputError(err.message, err);
439
- }
441
+ if (err instanceof Error) {
442
+ if (err?.message.includes("sender doesn't have enough funds")) {
443
+ throw new InvalidInputError(err.message, err);
444
+ }
445
+
446
+ // Some network errors are HardhatErrors, and can end up here when forking
447
+ if (HardhatError.isHardhatError(err)) {
448
+ throw err;
449
+ }
440
450
 
441
- // Some network errors are HardhatErrors, and can end up here when forking
442
- if (HardhatError.isHardhatError(err)) {
443
- throw err;
451
+ throw new TransactionExecutionError(err);
444
452
  }
445
453
 
446
- throw new TransactionExecutionError(err);
454
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
455
+ throw err;
447
456
  }
448
457
 
449
458
  await this._saveBlockAsSuccessfullyRun(result.block, result.blockResult);
@@ -697,7 +706,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
697
706
  }
698
707
 
699
708
  public getCoinbaseAddress(): Address {
700
- return COINBASE_ADDRESS;
709
+ return Address.fromString(this._coinbase);
701
710
  }
702
711
 
703
712
  public async getStorageAt(
@@ -870,6 +879,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
870
879
  irregularStatesByBlockNumber: this._irregularStatesByBlockNumber,
871
880
  userProvidedNextBlockBaseFeePerGas:
872
881
  this.getUserProvidedNextBlockBaseFeePerGas(),
882
+ coinbase: this.getCoinbaseAddress().toString(),
873
883
  };
874
884
 
875
885
  this._irregularStatesByBlockNumber = new Map(
@@ -924,6 +934,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
924
934
  this._resetUserProvidedNextBlockBaseFeePerGas();
925
935
  }
926
936
 
937
+ this._coinbase = snapshot.coinbase;
938
+
927
939
  // We delete this and the following snapshots, as they can only be used
928
940
  // once in Ganache
929
941
  this._snapshots.splice(snapshotIndex);
@@ -1103,6 +1115,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1103
1115
  this._automine = automine;
1104
1116
  }
1105
1117
 
1118
+ public getAutomine() {
1119
+ return this._automine;
1120
+ }
1121
+
1106
1122
  public async setBlockGasLimit(gasLimit: BN | number) {
1107
1123
  this._txPool.setBlockGasLimit(gasLimit);
1108
1124
  await this._txPool.updatePendingAndQueued();
@@ -1345,6 +1361,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1345
1361
  };
1346
1362
  }
1347
1363
 
1364
+ public async setCoinbase(coinbase: Address) {
1365
+ this._coinbase = coinbase.toString();
1366
+ }
1367
+
1348
1368
  private _getGasUsedRatio(block: Block): number {
1349
1369
  const FLOATS_PRECISION = 100_000;
1350
1370
 
@@ -1372,12 +1392,28 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1372
1392
  .map((hash) => this.getTransactionReceipt(hash))
1373
1393
  );
1374
1394
 
1375
- const effectiveGasPriceAndGas = receipts
1376
- .map((r) => ({
1377
- effectiveGasPrice: rpcQuantityToBN(r?.effectiveGasPrice!),
1378
- gasUsed: rpcQuantityToBN(r?.gasUsed!),
1379
- }))
1380
- .sort((a, b) => a.effectiveGasPrice.cmp(b.effectiveGasPrice));
1395
+ const effectiveGasRewardAndGas = receipts
1396
+ .map((r, i) => {
1397
+ const tx = block.transactions[i];
1398
+ const baseFeePerGas = block.header.baseFeePerGas ?? new BN(0);
1399
+
1400
+ // reward = min(maxPriorityFeePerGas, maxFeePerGas - baseFeePerGas)
1401
+ let effectiveGasReward: BN;
1402
+ if ("maxPriorityFeePerGas" in tx) {
1403
+ effectiveGasReward = tx.maxFeePerGas.sub(baseFeePerGas);
1404
+ if (tx.maxPriorityFeePerGas.lt(effectiveGasReward)) {
1405
+ effectiveGasReward = tx.maxPriorityFeePerGas;
1406
+ }
1407
+ } else {
1408
+ effectiveGasReward = tx.gasPrice.sub(baseFeePerGas);
1409
+ }
1410
+
1411
+ return {
1412
+ effectiveGasReward,
1413
+ gasUsed: rpcQuantityToBN(r?.gasUsed!),
1414
+ };
1415
+ })
1416
+ .sort((a, b) => a.effectiveGasReward.cmp(b.effectiveGasReward));
1381
1417
 
1382
1418
  return rewardPercentiles.map((p) => {
1383
1419
  let gasUsed = new BN(0);
@@ -1385,16 +1421,16 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1385
1421
  .muln(Math.ceil(p * FLOATS_PRECISION))
1386
1422
  .divn(100 * FLOATS_PRECISION);
1387
1423
 
1388
- for (const values of effectiveGasPriceAndGas) {
1424
+ for (const values of effectiveGasRewardAndGas) {
1389
1425
  gasUsed = gasUsed.add(values.gasUsed);
1390
1426
 
1391
1427
  if (targetGas.lte(gasUsed)) {
1392
- return values.effectiveGasPrice;
1428
+ return values.effectiveGasReward;
1393
1429
  }
1394
1430
  }
1395
1431
 
1396
- return effectiveGasPriceAndGas[effectiveGasPriceAndGas.length - 1]
1397
- .effectiveGasPrice;
1432
+ return effectiveGasRewardAndGas[effectiveGasRewardAndGas.length - 1]
1433
+ .effectiveGasReward;
1398
1434
  });
1399
1435
  }
1400
1436
 
@@ -1479,7 +1515,12 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1479
1515
  try {
1480
1516
  sender = tx.getSenderAddress(); // verifies signature as a side effect
1481
1517
  } catch (e) {
1482
- throw new InvalidInputError(e.message);
1518
+ if (e instanceof Error) {
1519
+ throw new InvalidInputError(e.message);
1520
+ }
1521
+
1522
+ // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
1523
+ throw e;
1483
1524
  }
1484
1525
 
1485
1526
  // validate nonce
@@ -1559,6 +1600,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
1559
1600
  const pendingTxs = this._txPool.getPendingTransactions();
1560
1601
  const transactionQueue = new TransactionQueue(
1561
1602
  pendingTxs,
1603
+ this._mempoolOrder,
1562
1604
  headerData.baseFeePerGas
1563
1605
  );
1564
1606
 
@@ -2306,7 +2348,7 @@ function getCommonForTracing(networkId: number, blockNumber: number): Common {
2306
2348
  common.setHardfork(common.activeHardfork(blockNumber));
2307
2349
 
2308
2350
  return common;
2309
- } catch (e) {
2351
+ } catch {
2310
2352
  throw new InternalError(
2311
2353
  `Network id ${networkId} does not correspond to a network that Hardhat can trace`
2312
2354
  );
@@ -292,18 +292,18 @@ export function getRpcReceiptOutputsFromLocalBlockExecution(
292
292
  ): RpcReceiptOutput[] {
293
293
  const receipts: RpcReceiptOutput[] = [];
294
294
 
295
- let cumulativeGasUsed = new BN(0);
295
+ let blockLogIndex = 0;
296
296
 
297
297
  for (let i = 0; i < runBlockResult.results.length; i += 1) {
298
298
  const tx = block.transactions[i];
299
299
  const { createdAddress, gasUsed } = runBlockResult.results[i];
300
300
  const receipt = runBlockResult.receipts[i];
301
301
 
302
- cumulativeGasUsed = cumulativeGasUsed.add(new BN(receipt.gasUsed));
303
-
304
- const logs = receipt.logs.map((log, logIndex) =>
305
- getRpcLogOutput(log, tx, block, i, logIndex)
306
- );
302
+ const logs = receipt.logs.map((log) => {
303
+ const result = getRpcLogOutput(log, tx, block, i, blockLogIndex);
304
+ blockLogIndex += 1;
305
+ return result;
306
+ });
307
307
 
308
308
  const rpcReceipt: RpcReceiptOutput = {
309
309
  transactionHash: bufferToRpcData(tx.hash()),
@@ -312,7 +312,7 @@ export function getRpcReceiptOutputsFromLocalBlockExecution(
312
312
  blockNumber: numberToRpcQuantity(new BN(block.header.number)),
313
313
  from: bufferToRpcData(tx.getSenderAddress().toBuffer()),
314
314
  to: tx.to === undefined ? null : bufferToRpcData(tx.to.toBuffer()),
315
- cumulativeGasUsed: numberToRpcQuantity(cumulativeGasUsed),
315
+ cumulativeGasUsed: numberToRpcQuantity(new BN(receipt.gasUsed)),
316
316
  gasUsed: numberToRpcQuantity(gasUsed),
317
317
  contractAddress:
318
318
  createdAddress !== undefined
@@ -395,7 +395,7 @@ export function remoteReceiptToRpcReceiptOutput(
395
395
  };
396
396
  }
397
397
 
398
- export function toRpcLogOutput(log: RpcLog, index?: number): RpcLogOutput {
398
+ export function toRpcLogOutput(log: RpcLog): RpcLogOutput {
399
399
  return {
400
400
  removed: false,
401
401
  address: bufferToRpcData(log.address),
@@ -403,7 +403,7 @@ export function toRpcLogOutput(log: RpcLog, index?: number): RpcLogOutput {
403
403
  blockNumber:
404
404
  log.blockNumber !== null ? numberToRpcQuantity(log.blockNumber) : null,
405
405
  data: bufferToRpcData(log.data),
406
- logIndex: index !== undefined ? numberToRpcQuantity(index) : null,
406
+ logIndex: log.logIndex !== null ? numberToRpcQuantity(log.logIndex) : null,
407
407
  transactionIndex:
408
408
  log.transactionIndex !== null
409
409
  ? numberToRpcQuantity(log.transactionIndex)