hardhat 2.22.2 → 2.23.0-dev.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 (183) hide show
  1. package/builtin-tasks/compile.js +2 -2
  2. package/builtin-tasks/compile.js.map +1 -1
  3. package/common/napi-rs.d.ts +2 -0
  4. package/common/napi-rs.d.ts.map +1 -0
  5. package/common/napi-rs.js +19 -0
  6. package/common/napi-rs.js.map +1 -0
  7. package/internal/core/errors-list.js +1 -1
  8. package/internal/core/errors-list.js.map +1 -1
  9. package/internal/core/params/argumentTypes.d.ts +6 -0
  10. package/internal/core/params/argumentTypes.d.ts.map +1 -1
  11. package/internal/core/params/argumentTypes.js +40 -1
  12. package/internal/core/params/argumentTypes.js.map +1 -1
  13. package/internal/core/tasks/task-definitions.d.ts +2 -2
  14. package/internal/core/tasks/task-definitions.js +2 -2
  15. package/internal/hardhat-network/provider/BlockchainBase.d.ts +29 -0
  16. package/internal/hardhat-network/provider/BlockchainBase.d.ts.map +1 -0
  17. package/internal/hardhat-network/provider/BlockchainBase.js +144 -0
  18. package/internal/hardhat-network/provider/BlockchainBase.js.map +1 -0
  19. package/internal/hardhat-network/provider/BlockchainData.d.ts +58 -0
  20. package/internal/hardhat-network/provider/BlockchainData.d.ts.map +1 -0
  21. package/internal/hardhat-network/provider/BlockchainData.js +178 -0
  22. package/internal/hardhat-network/provider/BlockchainData.js.map +1 -0
  23. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts +24 -0
  24. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts.map +1 -0
  25. package/internal/hardhat-network/provider/HardhatBlockchain.js +73 -0
  26. package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -0
  27. package/internal/hardhat-network/provider/PoolState.d.ts +26 -0
  28. package/internal/hardhat-network/provider/PoolState.d.ts.map +1 -0
  29. package/internal/hardhat-network/provider/PoolState.js +41 -0
  30. package/internal/hardhat-network/provider/PoolState.js.map +1 -0
  31. package/internal/hardhat-network/provider/TransactionQueue.d.ts +32 -0
  32. package/internal/hardhat-network/provider/TransactionQueue.d.ts.map +1 -0
  33. package/internal/hardhat-network/provider/TransactionQueue.js +130 -0
  34. package/internal/hardhat-network/provider/TransactionQueue.js.map +1 -0
  35. package/internal/hardhat-network/provider/TxPool.d.ts +83 -0
  36. package/internal/hardhat-network/provider/TxPool.d.ts.map +1 -0
  37. package/internal/hardhat-network/provider/TxPool.js +470 -0
  38. package/internal/hardhat-network/provider/TxPool.js.map +1 -0
  39. package/internal/hardhat-network/provider/ethereumjs-workarounds.d.ts +2 -0
  40. package/internal/hardhat-network/provider/ethereumjs-workarounds.d.ts.map +1 -0
  41. package/internal/hardhat-network/provider/ethereumjs-workarounds.js +15 -0
  42. package/internal/hardhat-network/provider/ethereumjs-workarounds.js.map +1 -0
  43. package/internal/hardhat-network/provider/filter.d.ts +29 -0
  44. package/internal/hardhat-network/provider/filter.d.ts.map +1 -0
  45. package/internal/hardhat-network/provider/filter.js +97 -0
  46. package/internal/hardhat-network/provider/filter.js.map +1 -0
  47. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts +33 -0
  48. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -0
  49. package/internal/hardhat-network/provider/fork/ForkBlockchain.js +272 -0
  50. package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -0
  51. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts +51 -0
  52. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts.map +1 -0
  53. package/internal/hardhat-network/provider/fork/ForkStateManager.js +300 -0
  54. package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -0
  55. package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts +4 -0
  56. package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts.map +1 -0
  57. package/internal/hardhat-network/provider/fork/rpcToBlockData.js +32 -0
  58. package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -0
  59. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts +10 -0
  60. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts.map +1 -0
  61. package/internal/hardhat-network/provider/fork/rpcToTxData.js +29 -0
  62. package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -0
  63. package/internal/hardhat-network/provider/modules/base.d.ts +17 -0
  64. package/internal/hardhat-network/provider/modules/base.d.ts.map +1 -0
  65. package/internal/hardhat-network/provider/modules/base.js +127 -0
  66. package/internal/hardhat-network/provider/modules/base.js.map +1 -0
  67. package/internal/hardhat-network/provider/modules/debug.d.ts +12 -0
  68. package/internal/hardhat-network/provider/modules/debug.d.ts.map +1 -0
  69. package/internal/hardhat-network/provider/modules/debug.js +52 -0
  70. package/internal/hardhat-network/provider/modules/debug.js.map +1 -0
  71. package/internal/hardhat-network/provider/modules/eth.d.ts +107 -0
  72. package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -0
  73. package/internal/hardhat-network/provider/modules/eth.js +1034 -0
  74. package/internal/hardhat-network/provider/modules/eth.js.map +1 -0
  75. package/internal/hardhat-network/provider/modules/evm.d.ts +32 -0
  76. package/internal/hardhat-network/provider/modules/evm.d.ts.map +1 -0
  77. package/internal/hardhat-network/provider/modules/evm.js +180 -0
  78. package/internal/hardhat-network/provider/modules/evm.js.map +1 -0
  79. package/internal/hardhat-network/provider/modules/hardhat.d.ts +54 -0
  80. package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -0
  81. package/internal/hardhat-network/provider/modules/hardhat.js +309 -0
  82. package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -0
  83. package/internal/hardhat-network/provider/modules/net.d.ts +13 -0
  84. package/internal/hardhat-network/provider/modules/net.d.ts.map +1 -0
  85. package/internal/hardhat-network/provider/modules/net.js +47 -0
  86. package/internal/hardhat-network/provider/modules/net.js.map +1 -0
  87. package/internal/hardhat-network/provider/modules/personal.d.ts +9 -0
  88. package/internal/hardhat-network/provider/modules/personal.d.ts.map +1 -0
  89. package/internal/hardhat-network/provider/modules/personal.js +31 -0
  90. package/internal/hardhat-network/provider/modules/personal.js.map +1 -0
  91. package/internal/hardhat-network/provider/modules/web3.d.ts +11 -0
  92. package/internal/hardhat-network/provider/modules/web3.d.ts.map +1 -0
  93. package/internal/hardhat-network/provider/modules/web3.js +38 -0
  94. package/internal/hardhat-network/provider/modules/web3.js.map +1 -0
  95. package/internal/hardhat-network/provider/node.d.ts +197 -0
  96. package/internal/hardhat-network/provider/node.d.ts.map +1 -0
  97. package/internal/hardhat-network/provider/node.js +1866 -0
  98. package/internal/hardhat-network/provider/node.js.map +1 -0
  99. package/internal/hardhat-network/provider/provider.d.ts +1 -1
  100. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  101. package/internal/hardhat-network/provider/provider.js +34 -27
  102. package/internal/hardhat-network/provider/provider.js.map +1 -1
  103. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts +29 -0
  104. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -0
  105. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +137 -0
  106. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -0
  107. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts +27 -0
  108. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -0
  109. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +137 -0
  110. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -0
  111. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts +33 -0
  112. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -0
  113. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +141 -0
  114. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -0
  115. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts +30 -0
  116. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts.map +1 -0
  117. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +97 -0
  118. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -0
  119. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts +30 -0
  120. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts.map +1 -0
  121. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js +98 -0
  122. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js.map +1 -0
  123. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts +40 -0
  124. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts.map +1 -0
  125. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js +91 -0
  126. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js.map +1 -0
  127. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.d.ts +32 -0
  128. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.d.ts.map +1 -0
  129. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.js +87 -0
  130. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.js.map +1 -0
  131. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts +17 -0
  132. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts.map +1 -0
  133. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.js +3 -0
  134. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.js.map +1 -0
  135. package/internal/hardhat-network/provider/utils/convertToEdr.d.ts +1 -1
  136. package/internal/hardhat-network/provider/utils/convertToEdr.d.ts.map +1 -1
  137. package/internal/hardhat-network/provider/utils/convertToEdr.js +4 -0
  138. package/internal/hardhat-network/provider/utils/convertToEdr.js.map +1 -1
  139. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts +7 -0
  140. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts.map +1 -0
  141. package/internal/hardhat-network/provider/utils/makeFakeSignature.js +31 -0
  142. package/internal/hardhat-network/provider/utils/makeFakeSignature.js.map +1 -0
  143. package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts +4 -0
  144. package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts.map +1 -0
  145. package/internal/hardhat-network/provider/utils/makeStateTrie.js +20 -0
  146. package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -0
  147. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +8 -0
  148. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -0
  149. package/internal/hardhat-network/provider/utils/putGenesisBlock.js +37 -0
  150. package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -0
  151. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.d.ts +12 -0
  152. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.d.ts.map +1 -0
  153. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js +62 -0
  154. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js.map +1 -0
  155. package/internal/hardhat-network/provider/utils/txMapToArray.d.ts +3 -0
  156. package/internal/hardhat-network/provider/utils/txMapToArray.d.ts.map +1 -0
  157. package/internal/hardhat-network/provider/utils/txMapToArray.js +12 -0
  158. package/internal/hardhat-network/provider/utils/txMapToArray.js.map +1 -0
  159. package/internal/hardhat-network/provider/vm/exit.d.ts +1 -1
  160. package/internal/hardhat-network/provider/vm/exit.d.ts.map +1 -1
  161. package/internal/hardhat-network/provider/vm/exit.js +4 -0
  162. package/internal/hardhat-network/provider/vm/exit.js.map +1 -1
  163. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts +46 -0
  164. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts.map +1 -0
  165. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +421 -0
  166. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -0
  167. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +1 -1
  168. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
  169. package/internal/solidity/parse.d.ts.map +1 -1
  170. package/internal/solidity/parse.js +5 -15
  171. package/internal/solidity/parse.js.map +1 -1
  172. package/package.json +8 -8
  173. package/recommended-gitignore.txt +3 -0
  174. package/src/builtin-tasks/compile.ts +2 -2
  175. package/src/common/napi-rs.ts +15 -0
  176. package/src/internal/core/errors-list.ts +1 -1
  177. package/src/internal/core/params/argumentTypes.ts +44 -0
  178. package/src/internal/core/tasks/task-definitions.ts +2 -2
  179. package/src/internal/hardhat-network/provider/provider.ts +52 -38
  180. package/src/internal/hardhat-network/provider/utils/convertToEdr.ts +14 -1
  181. package/src/internal/hardhat-network/provider/vm/exit.ts +15 -1
  182. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +1 -1
  183. package/src/internal/solidity/parse.ts +7 -16
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hardhat",
3
- "version": "2.22.2",
3
+ "version": "2.23.0-dev.0",
4
4
  "author": "Nomic Labs LLC",
5
5
  "license": "MIT",
6
6
  "homepage": "https://hardhat.org",
@@ -68,7 +68,7 @@
68
68
  "eslint": "^8.44.0",
69
69
  "eslint-config-prettier": "8.3.0",
70
70
  "eslint-plugin-import": "2.27.5",
71
- "eslint-plugin-no-only-tests": "3.0.0",
71
+ "eslint-plugin-mocha": "10.4.1",
72
72
  "eslint-plugin-prettier": "3.4.0",
73
73
  "ethers": "^6.1.0",
74
74
  "ethers-v5": "npm:ethers@5",
@@ -85,7 +85,7 @@
85
85
  "dependencies": {
86
86
  "@ethersproject/abi": "^5.1.2",
87
87
  "@metamask/eth-sig-util": "^4.0.0",
88
- "@nomicfoundation/edr": "^0.3.1",
88
+ "@nomicfoundation/edr": "^0.3.7",
89
89
  "@nomicfoundation/ethereumjs-common": "4.0.4",
90
90
  "@nomicfoundation/ethereumjs-tx": "5.0.4",
91
91
  "@nomicfoundation/ethereumjs-util": "9.0.4",
@@ -168,11 +168,11 @@
168
168
  "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'",
169
169
  "prettier": "prettier \"**/*.{js,md,json}\"",
170
170
  "pretest": "cd ../.. && pnpm build",
171
- "test": "mocha --recursive \"test/**/*.ts\" --exit",
172
- "test:except-provider": "mocha --recursive \"test/**/*.ts\" --exclude \"test/internal/hardhat-network/provider/**/*.ts\" --exit",
173
- "test:except-tracing": "mocha --recursive \"test/**/*.ts\" --exclude \"test/internal/hardhat-network/stack-traces/**/*.ts\" --exit",
174
- "test:provider": "mocha --recursive \"test/internal/hardhat-network/provider/**/*.ts\" --exit",
175
- "test:tracing": "mocha --recursive \"test/internal/hardhat-network/stack-traces/**/*.ts\" --exit",
171
+ "test": "mocha --recursive \"test/**/*.ts\"",
172
+ "test:except-provider": "mocha --recursive \"test/**/*.ts\" --exclude \"test/internal/hardhat-network/provider/**/*.ts\"",
173
+ "test:except-tracing": "mocha --recursive \"test/**/*.ts\" --exclude \"test/internal/hardhat-network/stack-traces/**/*.ts\"",
174
+ "test:provider": "mocha --recursive \"test/internal/hardhat-network/provider/**/*.ts\"",
175
+ "test:tracing": "mocha --recursive \"test/internal/hardhat-network/stack-traces/**/*.ts\"",
176
176
  "pretest:provider": "cd ../../crates/edr_napi && pnpm build",
177
177
  "pretest:except-provider": "cd ../../crates/edr_napi && pnpm build",
178
178
  "pretest:tracing": "cd ../../crates/edr_napi && pnpm build",
@@ -12,3 +12,6 @@ node_modules
12
12
  # solidity-coverage files
13
13
  /coverage
14
14
  /coverage.json
15
+
16
+ # Hardhat Ignition default folder for deployments against a local node
17
+ ignition/deployments/chain-31337
@@ -345,7 +345,7 @@ subtask(TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS)
345
345
  * Receives a list of compilation jobs and returns a new list where some of
346
346
  * the compilation jobs might've been removed.
347
347
  *
348
- * This task can be overriden to change the way the cache is used, or to use
348
+ * This task can be overridden to change the way the cache is used, or to use
349
349
  * a different approach to filtering out compilation jobs.
350
350
  */
351
351
  subtask(TASK_COMPILE_SOLIDITY_FILTER_COMPILATION_JOBS)
@@ -1152,7 +1152,7 @@ subtask(TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS_FAILURE_REASONS)
1152
1152
  const { versionPragmas } = error.file.content;
1153
1153
  const versionsRange = versionPragmas.join(" ");
1154
1154
 
1155
- log(`File ${sourceName} has an incompatible overriden compiler`);
1155
+ log(`File ${sourceName} has an incompatible overridden compiler`);
1156
1156
 
1157
1157
  errorMessage += ` * ${sourceName} (${versionsRange})\n`;
1158
1158
  }
@@ -0,0 +1,15 @@
1
+ import { HardhatError } from "../internal/core/errors";
2
+ import { ERRORS } from "../internal/core/errors-list";
3
+
4
+ export function requireNapiRsModule(id: string): unknown {
5
+ try {
6
+ return require(id);
7
+ } catch (e: any) {
8
+ if (e.code === "MODULE_NOT_FOUND") {
9
+ throw new HardhatError(ERRORS.GENERAL.CORRUPTED_LOCKFILE);
10
+ }
11
+
12
+ // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error
13
+ throw e;
14
+ }
15
+ }
@@ -251,7 +251,7 @@ This bug can only affect you if you, or someone at your team, installed the proj
251
251
  To avoid it, please delete both your node_modules and package-lock.json, and reinstall your project.
252
252
 
253
253
  Note that you don't need to do this every time you install a new dependency, but please make sure to delete your node_modules every time you delete your package-lock.json.`,
254
- shouldBeReported: false,
254
+ shouldBeReported: true,
255
255
  },
256
256
  ESM_PROJECT_WITHOUT_CJS_CONFIG: {
257
257
  number: 19,
@@ -121,6 +121,50 @@ export const int: CLIArgumentType<number> = {
121
121
  },
122
122
  };
123
123
 
124
+ /**
125
+ * BigInt type.
126
+ * Accepts either a decimal string integer or hexadecimal string integer.
127
+ * @throws HH301
128
+ */
129
+ export const bigint: CLIArgumentType<bigint> = {
130
+ name: "bigint",
131
+ parse: (argName, strValue) => {
132
+ const decimalPattern = /^\d+(?:n)?$/;
133
+ const hexPattern = /^0[xX][\dABCDEabcde]+$/;
134
+
135
+ if (
136
+ strValue.match(decimalPattern) === null &&
137
+ strValue.match(hexPattern) === null
138
+ ) {
139
+ throw new HardhatError(ERRORS.ARGUMENTS.INVALID_VALUE_FOR_TYPE, {
140
+ value: strValue,
141
+ name: argName,
142
+ type: bigint.name,
143
+ });
144
+ }
145
+
146
+ return BigInt(strValue.replace("n", ""));
147
+ },
148
+ /**
149
+ * Check if argument value is of type "bigint".
150
+ *
151
+ * @param argName {string} argument's name - used for context in case of error.
152
+ * @param value {any} argument's value to validate.
153
+ *
154
+ * @throws HH301 if value is not of type "bigint"
155
+ */
156
+ validate: (argName: string, value: any): void => {
157
+ const isBigInt = typeof value === "bigint";
158
+ if (!isBigInt) {
159
+ throw new HardhatError(ERRORS.ARGUMENTS.INVALID_VALUE_FOR_TYPE, {
160
+ value,
161
+ name: argName,
162
+ type: bigint.name,
163
+ });
164
+ }
165
+ },
166
+ };
167
+
124
168
  /**
125
169
  * Float type.
126
170
  * Accepts either a decimal string number or hexadecimal string number.
@@ -613,7 +613,7 @@ export class OverriddenTaskDefinition implements TaskDefinition {
613
613
  }
614
614
 
615
615
  /**
616
- * Retrieves, if defined, the description of the overriden task,
616
+ * Retrieves, if defined, the description of the overridden task,
617
617
  * otherwise retrieves the description of the parent task.
618
618
  */
619
619
  public get description() {
@@ -625,7 +625,7 @@ export class OverriddenTaskDefinition implements TaskDefinition {
625
625
  }
626
626
 
627
627
  /**
628
- * Retrieves, if defined, the action of the overriden task,
628
+ * Retrieves, if defined, the action of the overridden task,
629
629
  * otherwise retrieves the action of the parent task.
630
630
  */
631
631
  public get action() {
@@ -9,7 +9,7 @@ import type {
9
9
  RequestArguments,
10
10
  } from "../../../types";
11
11
 
12
- import {
12
+ import type {
13
13
  EdrContext,
14
14
  Provider as EdrProviderT,
15
15
  ExecutionResult,
@@ -27,6 +27,7 @@ import fsExtra from "fs-extra";
27
27
  import * as t from "io-ts";
28
28
  import semver from "semver";
29
29
 
30
+ import { requireNapiRsModule } from "../../../common/napi-rs";
30
31
  import {
31
32
  HARDHAT_NETWORK_RESET_EVENT,
32
33
  HARDHAT_NETWORK_REVERT_SNAPSHOT_EVENT,
@@ -87,6 +88,10 @@ let _globalEdrContext: EdrContext | undefined;
87
88
 
88
89
  // Lazy initialize the global EDR context.
89
90
  export function getGlobalEdrContext(): EdrContext {
91
+ const { EdrContext } = requireNapiRsModule(
92
+ "@nomicfoundation/edr"
93
+ ) as typeof import("@nomicfoundation/edr");
94
+
90
95
  if (_globalEdrContext === undefined) {
91
96
  // Only one is allowed to exist
92
97
  _globalEdrContext = new EdrContext();
@@ -197,8 +202,9 @@ export class EdrProviderWrapper
197
202
  rawTraceCallbacks: RawTraceCallbacks,
198
203
  tracingConfig?: TracingConfig
199
204
  ): Promise<EdrProviderWrapper> {
200
- const { Provider } =
201
- require("@nomicfoundation/edr") as typeof import("@nomicfoundation/edr");
205
+ const { Provider } = requireNapiRsModule(
206
+ "@nomicfoundation/edr"
207
+ ) as typeof import("@nomicfoundation/edr");
202
208
 
203
209
  const coinbase = config.coinbase ?? DEFAULT_COINBASE;
204
210
 
@@ -362,41 +368,49 @@ export class EdrProviderWrapper
362
368
  );
363
369
  const response = JSON.parse(responseObject.json);
364
370
 
365
- const rawTraces = responseObject.traces;
366
- for (const rawTrace of rawTraces) {
367
- const trace = rawTrace.trace();
368
- for (const traceItem of trace) {
369
- if ("pc" in traceItem) {
370
- if (this._node._vm.evm.events.listenerCount("step") > 0) {
371
- this._node._vm.evm.events.emit(
372
- "step",
373
- edrTracingStepToMinimalInterpreterStep(traceItem)
374
- );
375
- }
376
- if (this._rawTraceCallbacks.onStep !== undefined) {
377
- await this._rawTraceCallbacks.onStep(traceItem);
378
- }
379
- } else if ("executionResult" in traceItem) {
380
- if (this._node._vm.evm.events.listenerCount("afterMessage") > 0) {
381
- this._node._vm.evm.events.emit(
382
- "afterMessage",
383
- edrTracingMessageResultToMinimalEVMResult(traceItem)
384
- );
385
- }
386
- if (this._rawTraceCallbacks.onAfterMessage !== undefined) {
387
- await this._rawTraceCallbacks.onAfterMessage(
388
- traceItem.executionResult
389
- );
390
- }
391
- } else {
392
- if (this._node._vm.evm.events.listenerCount("beforeMessage") > 0) {
393
- this._node._vm.evm.events.emit(
394
- "beforeMessage",
395
- edrTracingMessageToMinimalMessage(traceItem)
396
- );
397
- }
398
- if (this._rawTraceCallbacks.onBeforeMessage !== undefined) {
399
- await this._rawTraceCallbacks.onBeforeMessage(traceItem);
371
+ const needsTraces =
372
+ this._node._vm.evm.events.eventNames().length > 0 ||
373
+ this._rawTraceCallbacks.onStep !== undefined ||
374
+ this._rawTraceCallbacks.onAfterMessage !== undefined ||
375
+ this._rawTraceCallbacks.onBeforeMessage !== undefined;
376
+
377
+ if (needsTraces) {
378
+ const rawTraces = responseObject.traces;
379
+ for (const rawTrace of rawTraces) {
380
+ const trace = rawTrace.trace();
381
+ for (const traceItem of trace) {
382
+ if ("pc" in traceItem) {
383
+ if (this._node._vm.evm.events.listenerCount("step") > 0) {
384
+ this._node._vm.evm.events.emit(
385
+ "step",
386
+ edrTracingStepToMinimalInterpreterStep(traceItem)
387
+ );
388
+ }
389
+ if (this._rawTraceCallbacks.onStep !== undefined) {
390
+ await this._rawTraceCallbacks.onStep(traceItem);
391
+ }
392
+ } else if ("executionResult" in traceItem) {
393
+ if (this._node._vm.evm.events.listenerCount("afterMessage") > 0) {
394
+ this._node._vm.evm.events.emit(
395
+ "afterMessage",
396
+ edrTracingMessageResultToMinimalEVMResult(traceItem)
397
+ );
398
+ }
399
+ if (this._rawTraceCallbacks.onAfterMessage !== undefined) {
400
+ await this._rawTraceCallbacks.onAfterMessage(
401
+ traceItem.executionResult
402
+ );
403
+ }
404
+ } else {
405
+ if (this._node._vm.evm.events.listenerCount("beforeMessage") > 0) {
406
+ this._node._vm.evm.events.emit(
407
+ "beforeMessage",
408
+ edrTracingMessageToMinimalMessage(traceItem)
409
+ );
410
+ }
411
+ if (this._rawTraceCallbacks.onBeforeMessage !== undefined) {
412
+ await this._rawTraceCallbacks.onBeforeMessage(traceItem);
413
+ }
400
414
  }
401
415
  }
402
416
  }
@@ -1,4 +1,4 @@
1
- import {
1
+ import type {
2
2
  SpecId,
3
3
  MineOrdering,
4
4
  IntervalRange,
@@ -9,6 +9,7 @@ import {
9
9
  } from "@nomicfoundation/edr";
10
10
  import { Address } from "@nomicfoundation/ethereumjs-util";
11
11
 
12
+ import { requireNapiRsModule } from "../../../../common/napi-rs";
12
13
  import { HardforkName } from "../../../util/hardforks";
13
14
  import { IntervalMiningConfig, MempoolOrder } from "../node-types";
14
15
  import { RpcDebugTraceOutput, RpcStructLog } from "../output";
@@ -21,6 +22,10 @@ import {
21
22
  /* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */
22
23
 
23
24
  export function ethereumsjsHardforkToEdrSpecId(hardfork: HardforkName): SpecId {
25
+ const { SpecId } = requireNapiRsModule(
26
+ "@nomicfoundation/edr"
27
+ ) as typeof import("@nomicfoundation/edr");
28
+
24
29
  switch (hardfork) {
25
30
  case HardforkName.FRONTIER:
26
31
  return SpecId.Frontier;
@@ -65,6 +70,10 @@ export function ethereumsjsHardforkToEdrSpecId(hardfork: HardforkName): SpecId {
65
70
  }
66
71
 
67
72
  export function edrSpecIdToEthereumHardfork(specId: SpecId): HardforkName {
73
+ const { SpecId } = requireNapiRsModule(
74
+ "@nomicfoundation/edr"
75
+ ) as typeof import("@nomicfoundation/edr");
76
+
68
77
  switch (specId) {
69
78
  case SpecId.Frontier:
70
79
  return HardforkName.FRONTIER;
@@ -128,6 +137,10 @@ export function ethereumjsIntervalMiningConfigToEdr(
128
137
  export function ethereumjsMempoolOrderToEdrMineOrdering(
129
138
  mempoolOrder: MempoolOrder
130
139
  ): MineOrdering {
140
+ const { MineOrdering } = requireNapiRsModule(
141
+ "@nomicfoundation/edr"
142
+ ) as typeof import("@nomicfoundation/edr");
143
+
131
144
  switch (mempoolOrder) {
132
145
  case "fifo":
133
146
  return MineOrdering.Fifo;
@@ -1,4 +1,6 @@
1
- import { ExceptionalHalt, SuccessReason } from "@nomicfoundation/edr";
1
+ import type { ExceptionalHalt, SuccessReason } from "@nomicfoundation/edr";
2
+
3
+ import { requireNapiRsModule } from "../../../../common/napi-rs";
2
4
 
3
5
  export enum ExitCode {
4
6
  SUCCESS,
@@ -14,6 +16,10 @@ export enum ExitCode {
14
16
 
15
17
  export class Exit {
16
18
  public static fromEdrSuccessReason(reason: SuccessReason): Exit {
19
+ const { SuccessReason } = requireNapiRsModule(
20
+ "@nomicfoundation/edr"
21
+ ) as typeof import("@nomicfoundation/edr");
22
+
17
23
  switch (reason) {
18
24
  case SuccessReason.Stop:
19
25
  case SuccessReason.Return:
@@ -25,6 +31,10 @@ export class Exit {
25
31
  }
26
32
 
27
33
  public static fromEdrExceptionalHalt(halt: ExceptionalHalt): Exit {
34
+ const { ExceptionalHalt } = requireNapiRsModule(
35
+ "@nomicfoundation/edr"
36
+ ) as typeof import("@nomicfoundation/edr");
37
+
28
38
  switch (halt) {
29
39
  case ExceptionalHalt.OutOfGas:
30
40
  return new Exit(ExitCode.OUT_OF_GAS);
@@ -83,6 +93,10 @@ export class Exit {
83
93
  }
84
94
 
85
95
  public getEdrExceptionalHalt(): ExceptionalHalt {
96
+ const { ExceptionalHalt } = requireNapiRsModule(
97
+ "@nomicfoundation/edr"
98
+ ) as typeof import("@nomicfoundation/edr");
99
+
86
100
  switch (this.kind) {
87
101
  case ExitCode.OUT_OF_GAS:
88
102
  return ExceptionalHalt.OutOfGas;
@@ -1,4 +1,4 @@
1
- import {
1
+ import type {
2
2
  CreateOutput,
3
3
  ExecutionResult,
4
4
  TracingMessage,
@@ -1,8 +1,7 @@
1
1
  import type SolidityAnalyzerT from "@nomicfoundation/solidity-analyzer";
2
2
 
3
3
  import { SolidityFilesCache } from "../../builtin-tasks/utils/solidity-files-cache";
4
- import { HardhatError } from "../core/errors";
5
- import { ERRORS } from "../core/errors-list";
4
+ import { requireNapiRsModule } from "../../common/napi-rs";
6
5
 
7
6
  interface ParsedData {
8
7
  imports: string[];
@@ -29,22 +28,14 @@ export class Parser {
29
28
  return cacheResult;
30
29
  }
31
30
 
32
- try {
33
- const { analyze } =
34
- require("@nomicfoundation/solidity-analyzer") as typeof SolidityAnalyzerT;
35
- const result = analyze(fileContent);
31
+ const { analyze } = requireNapiRsModule(
32
+ "@nomicfoundation/solidity-analyzer"
33
+ ) as typeof SolidityAnalyzerT;
34
+ const result = analyze(fileContent);
36
35
 
37
- this._cache.set(contentHash, result);
36
+ this._cache.set(contentHash, result);
38
37
 
39
- return result;
40
- } catch (e: any) {
41
- if (e.code === "MODULE_NOT_FOUND") {
42
- throw new HardhatError(ERRORS.GENERAL.CORRUPTED_LOCKFILE);
43
- }
44
-
45
- // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error
46
- throw e;
47
- }
38
+ return result;
48
39
  }
49
40
 
50
41
  /**