hardhat 2.13.0-dev.2 → 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 (292) hide show
  1. package/builtin-tasks/compile.js +16 -6
  2. package/builtin-tasks/compile.js.map +1 -1
  3. package/builtin-tasks/flatten.js +1 -1
  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/cli/bootstrap.d.ts +1 -0
  14. package/internal/cli/bootstrap.js +12 -20
  15. package/internal/cli/bootstrap.js.map +1 -1
  16. package/internal/cli/cli.d.ts +0 -1
  17. package/internal/cli/cli.d.ts.map +1 -1
  18. package/internal/cli/cli.js +20 -29
  19. package/internal/cli/cli.js.map +1 -1
  20. package/internal/cli/project-creation.d.ts +1 -2
  21. package/internal/cli/project-creation.d.ts.map +1 -1
  22. package/internal/cli/project-creation.js +105 -36
  23. package/internal/cli/project-creation.js.map +1 -1
  24. package/internal/cli/prompt.d.ts +2 -2
  25. package/internal/cli/prompt.d.ts.map +1 -1
  26. package/internal/cli/prompt.js +1 -2
  27. package/internal/cli/prompt.js.map +1 -1
  28. package/internal/cli/types.d.ts +1 -0
  29. package/internal/cli/types.d.ts.map +1 -1
  30. package/internal/core/config/config-env.d.ts +5 -11
  31. package/internal/core/config/config-env.d.ts.map +1 -1
  32. package/internal/core/config/config-env.js +2 -13
  33. package/internal/core/config/config-env.js.map +1 -1
  34. package/internal/core/config/config-loading.d.ts +2 -1
  35. package/internal/core/config/config-loading.d.ts.map +1 -1
  36. package/internal/core/config/config-loading.js +25 -7
  37. package/internal/core/config/config-loading.js.map +1 -1
  38. package/internal/core/config/config-validation.d.ts +2 -0
  39. package/internal/core/config/config-validation.d.ts.map +1 -1
  40. package/internal/core/config/config-validation.js +18 -1
  41. package/internal/core/config/config-validation.js.map +1 -1
  42. package/internal/core/config/extenders.d.ts +4 -7
  43. package/internal/core/config/extenders.d.ts.map +1 -1
  44. package/internal/core/config/extenders.js +5 -12
  45. package/internal/core/config/extenders.js.map +1 -1
  46. package/internal/core/errors-list.d.ts +28 -7
  47. package/internal/core/errors-list.d.ts.map +1 -1
  48. package/internal/core/errors-list.js +33 -10
  49. package/internal/core/errors-list.js.map +1 -1
  50. package/internal/core/jsonrpc/types/input/blockTag.d.ts +3 -3
  51. package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -1
  52. package/internal/core/project-structure.d.ts.map +1 -1
  53. package/internal/core/project-structure.js +6 -0
  54. package/internal/core/project-structure.js.map +1 -1
  55. package/internal/core/providers/construction.d.ts.map +1 -1
  56. package/internal/core/providers/construction.js +25 -5
  57. package/internal/core/providers/construction.js.map +1 -1
  58. package/internal/core/providers/http.d.ts +2 -2
  59. package/internal/core/providers/http.d.ts.map +1 -1
  60. package/internal/core/providers/http.js +41 -19
  61. package/internal/core/providers/http.js.map +1 -1
  62. package/internal/core/runtime-environment.d.ts +4 -2
  63. package/internal/core/runtime-environment.d.ts.map +1 -1
  64. package/internal/core/runtime-environment.js +39 -47
  65. package/internal/core/runtime-environment.js.map +1 -1
  66. package/internal/core/tasks/dsl.d.ts +6 -6
  67. package/internal/core/tasks/dsl.d.ts.map +1 -1
  68. package/internal/core/tasks/dsl.js.map +1 -1
  69. package/internal/core/tasks/task-definitions.d.ts +2 -2
  70. package/internal/core/tasks/task-definitions.d.ts.map +1 -1
  71. package/internal/core/tasks/task-definitions.js.map +1 -1
  72. package/internal/hardhat-network/jsonrpc/handler.d.ts +1 -0
  73. package/internal/hardhat-network/jsonrpc/handler.d.ts.map +1 -1
  74. package/internal/hardhat-network/jsonrpc/handler.js +13 -18
  75. package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
  76. package/internal/hardhat-network/provider/RethnetState.d.ts +26 -0
  77. package/internal/hardhat-network/provider/RethnetState.d.ts.map +1 -0
  78. package/internal/hardhat-network/provider/RethnetState.js +84 -0
  79. package/internal/hardhat-network/provider/RethnetState.js.map +1 -0
  80. package/internal/hardhat-network/provider/modules/evm.d.ts +2 -1
  81. package/internal/hardhat-network/provider/modules/evm.d.ts.map +1 -1
  82. package/internal/hardhat-network/provider/modules/evm.js +10 -4
  83. package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
  84. package/internal/hardhat-network/provider/node-types.d.ts +1 -1
  85. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
  86. package/internal/hardhat-network/provider/node.d.ts +1 -0
  87. package/internal/hardhat-network/provider/node.d.ts.map +1 -1
  88. package/internal/hardhat-network/provider/node.js +6 -4
  89. package/internal/hardhat-network/provider/node.js.map +1 -1
  90. package/internal/hardhat-network/provider/provider.d.ts +25 -21
  91. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  92. package/internal/hardhat-network/provider/provider.js +25 -42
  93. package/internal/hardhat-network/provider/provider.js.map +1 -1
  94. package/internal/hardhat-network/provider/return-data.js +2 -2
  95. package/internal/hardhat-network/provider/return-data.js.map +1 -1
  96. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
  97. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +4 -2
  98. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
  99. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
  100. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +4 -2
  101. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
  102. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
  103. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +4 -2
  104. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
  105. package/internal/hardhat-network/provider/utils/bloom.d.ts +32 -0
  106. package/internal/hardhat-network/provider/utils/bloom.d.ts.map +1 -0
  107. package/internal/hardhat-network/provider/utils/bloom.js +79 -0
  108. package/internal/hardhat-network/provider/utils/bloom.js.map +1 -0
  109. package/internal/hardhat-network/provider/utils/convertToRethnet.d.ts +12 -0
  110. package/internal/hardhat-network/provider/utils/convertToRethnet.d.ts.map +1 -0
  111. package/internal/hardhat-network/provider/utils/convertToRethnet.js +162 -0
  112. package/internal/hardhat-network/provider/utils/convertToRethnet.js.map +1 -0
  113. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts +7 -0
  114. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts.map +1 -0
  115. package/internal/hardhat-network/provider/utils/makeFakeSignature.js +31 -0
  116. package/internal/hardhat-network/provider/utils/makeFakeSignature.js.map +1 -0
  117. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +1 -1
  118. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
  119. package/internal/hardhat-network/provider/utils/putGenesisBlock.js +2 -2
  120. package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
  121. package/internal/hardhat-network/provider/vm/block-builder.d.ts +31 -0
  122. package/internal/hardhat-network/provider/vm/block-builder.d.ts.map +1 -0
  123. package/internal/hardhat-network/provider/vm/block-builder.js +151 -0
  124. package/internal/hardhat-network/provider/vm/block-builder.js.map +1 -0
  125. package/internal/hardhat-network/provider/vm/creation.d.ts +10 -0
  126. package/internal/hardhat-network/provider/vm/creation.d.ts.map +1 -0
  127. package/internal/hardhat-network/provider/vm/creation.js +29 -0
  128. package/internal/hardhat-network/provider/vm/creation.js.map +1 -0
  129. package/internal/hardhat-network/provider/vm/dual.d.ts +43 -0
  130. package/internal/hardhat-network/provider/vm/dual.d.ts.map +1 -0
  131. package/internal/hardhat-network/provider/vm/dual.js +488 -0
  132. package/internal/hardhat-network/provider/vm/dual.js.map +1 -0
  133. package/internal/hardhat-network/provider/vm/ethereumjs.d.ts +56 -0
  134. package/internal/hardhat-network/provider/vm/ethereumjs.d.ts.map +1 -0
  135. package/internal/hardhat-network/provider/vm/ethereumjs.js +416 -0
  136. package/internal/hardhat-network/provider/vm/ethereumjs.js.map +1 -0
  137. package/internal/hardhat-network/provider/vm/exit.d.ts +23 -0
  138. package/internal/hardhat-network/provider/vm/exit.d.ts.map +1 -0
  139. package/internal/hardhat-network/provider/vm/exit.js +130 -0
  140. package/internal/hardhat-network/provider/vm/exit.js.map +1 -0
  141. package/internal/hardhat-network/provider/vm/rethnet.d.ts +99 -0
  142. package/internal/hardhat-network/provider/vm/rethnet.d.ts.map +1 -0
  143. package/internal/hardhat-network/provider/vm/rethnet.js +284 -0
  144. package/internal/hardhat-network/provider/vm/rethnet.js.map +1 -0
  145. package/internal/hardhat-network/provider/vm/vm-adapter.d.ts +52 -0
  146. package/internal/hardhat-network/provider/vm/vm-adapter.d.ts.map +1 -0
  147. package/internal/hardhat-network/provider/vm/vm-adapter.js +3 -0
  148. package/internal/hardhat-network/provider/vm/vm-adapter.js.map +1 -0
  149. package/internal/hardhat-network/stack-traces/compiler-to-model.d.ts.map +1 -1
  150. package/internal/hardhat-network/stack-traces/compiler-to-model.js +37 -11
  151. package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
  152. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  153. package/internal/hardhat-network/stack-traces/constants.d.ts +1 -1
  154. package/internal/hardhat-network/stack-traces/constants.js +1 -1
  155. package/internal/hardhat-network/stack-traces/debug.d.ts.map +1 -1
  156. package/internal/hardhat-network/stack-traces/debug.js +6 -2
  157. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  158. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts +1 -0
  159. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +1 -1
  160. package/internal/hardhat-network/stack-traces/error-inferrer.js +85 -55
  161. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
  162. package/internal/hardhat-network/stack-traces/model.d.ts +3 -1
  163. package/internal/hardhat-network/stack-traces/model.d.ts.map +1 -1
  164. package/internal/hardhat-network/stack-traces/model.js +9 -1
  165. package/internal/hardhat-network/stack-traces/model.js.map +1 -1
  166. package/internal/hardhat-network/stack-traces/solidity-errors.js +2 -2
  167. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  168. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +2 -2
  169. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -1
  170. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
  171. package/internal/hardhat-network/stack-traces/solidityTracer.js +1 -0
  172. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  173. package/internal/lib/hardhat-lib.d.ts.map +1 -1
  174. package/internal/lib/hardhat-lib.js +1 -4
  175. package/internal/lib/hardhat-lib.js.map +1 -1
  176. package/internal/solidity/compiler/downloader.js +2 -2
  177. package/internal/solidity/compiler/downloader.js.map +1 -1
  178. package/internal/solidity/compiler/index.js +1 -1
  179. package/internal/solidity/compiler/index.js.map +1 -1
  180. package/internal/solidity/resolver.d.ts +4 -3
  181. package/internal/solidity/resolver.d.ts.map +1 -1
  182. package/internal/solidity/resolver.js +18 -7
  183. package/internal/solidity/resolver.js.map +1 -1
  184. package/internal/util/abi-helpers.d.ts +1 -0
  185. package/internal/util/abi-helpers.d.ts.map +1 -1
  186. package/internal/util/abi-helpers.js +9 -0
  187. package/internal/util/abi-helpers.js.map +1 -1
  188. package/internal/util/download.d.ts.map +1 -1
  189. package/internal/util/download.js +12 -11
  190. package/internal/util/download.js.map +1 -1
  191. package/internal/util/packageInfo.d.ts +6 -1
  192. package/internal/util/packageInfo.d.ts.map +1 -1
  193. package/internal/util/packageInfo.js +14 -11
  194. package/internal/util/packageInfo.js.map +1 -1
  195. package/internal/util/proxy.d.ts +2 -0
  196. package/internal/util/proxy.d.ts.map +1 -0
  197. package/internal/util/proxy.js +19 -0
  198. package/internal/util/proxy.js.map +1 -0
  199. package/package.json +9 -10
  200. package/register.js +1 -4
  201. package/register.js.map +1 -1
  202. package/sample-projects/javascript/hardhat.config.js +1 -1
  203. package/sample-projects/javascript/scripts/deploy.js +2 -2
  204. package/sample-projects/javascript-esm/LICENSE.md +11 -0
  205. package/sample-projects/javascript-esm/README.md +13 -0
  206. package/sample-projects/javascript-esm/contracts/Lock.sol +34 -0
  207. package/sample-projects/javascript-esm/hardhat.config.cjs +6 -0
  208. package/sample-projects/javascript-esm/scripts/deploy.js +22 -0
  209. package/sample-projects/javascript-esm/test/Lock.js +123 -0
  210. package/sample-projects/typescript/hardhat.config.ts +1 -1
  211. package/sample-projects/typescript/scripts/deploy.ts +2 -2
  212. package/sample-projects/typescript/tsconfig.json +2 -1
  213. package/src/builtin-tasks/compile.ts +28 -7
  214. package/src/builtin-tasks/flatten.ts +4 -1
  215. package/src/builtin-tasks/help.ts +15 -16
  216. package/src/builtin-tasks/task-names.ts +2 -0
  217. package/src/builtin-tasks/test.ts +30 -2
  218. package/src/internal/artifacts.ts +947 -0
  219. package/src/internal/cli/bootstrap.ts +14 -36
  220. package/src/internal/cli/cli.ts +38 -43
  221. package/src/internal/cli/project-creation.ts +128 -47
  222. package/src/internal/cli/prompt.ts +2 -4
  223. package/src/internal/cli/types.ts +2 -0
  224. package/src/internal/core/config/config-env.ts +15 -27
  225. package/src/internal/core/config/config-loading.ts +35 -11
  226. package/src/internal/core/config/config-validation.ts +20 -0
  227. package/src/internal/core/config/extenders.ts +6 -15
  228. package/src/internal/core/errors-list.ts +36 -10
  229. package/src/internal/core/project-structure.ts +8 -0
  230. package/src/internal/core/providers/construction.ts +29 -24
  231. package/src/internal/core/providers/http.ts +38 -26
  232. package/src/internal/core/runtime-environment.ts +65 -60
  233. package/src/internal/core/tasks/dsl.ts +17 -17
  234. package/src/internal/core/tasks/task-definitions.ts +6 -2
  235. package/src/internal/hardhat-network/jsonrpc/handler.ts +31 -28
  236. package/src/internal/hardhat-network/provider/modules/evm.ts +15 -3
  237. package/src/internal/hardhat-network/provider/node-types.ts +1 -1
  238. package/src/internal/hardhat-network/provider/node.ts +5 -1
  239. package/src/internal/hardhat-network/provider/provider.ts +60 -49
  240. package/src/internal/hardhat-network/provider/return-data.ts +2 -2
  241. package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +5 -2
  242. package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +5 -2
  243. package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +5 -2
  244. package/src/internal/hardhat-network/provider/utils/makeFakeSignature.ts +46 -0
  245. package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +2 -2
  246. package/src/internal/hardhat-network/stack-traces/compiler-to-model.ts +71 -9
  247. package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +1 -1
  248. package/src/internal/hardhat-network/stack-traces/constants.ts +1 -1
  249. package/src/internal/hardhat-network/stack-traces/debug.ts +9 -2
  250. package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +177 -89
  251. package/src/internal/hardhat-network/stack-traces/model.ts +11 -1
  252. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +2 -2
  253. package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +2 -2
  254. package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +3 -0
  255. package/src/internal/lib/hardhat-lib.ts +1 -6
  256. package/src/internal/solidity/compiler/downloader.ts +2 -2
  257. package/src/internal/solidity/compiler/index.ts +1 -1
  258. package/src/internal/solidity/resolver.ts +28 -11
  259. package/src/internal/util/abi-helpers.ts +9 -0
  260. package/src/internal/util/download.ts +13 -15
  261. package/src/internal/util/packageInfo.ts +24 -10
  262. package/src/internal/util/proxy.ts +18 -0
  263. package/src/register.ts +1 -6
  264. package/src/types/artifacts.ts +14 -112
  265. package/src/types/config.ts +2 -0
  266. package/src/types/runtime.ts +16 -13
  267. package/types/artifacts.d.ts +10 -96
  268. package/types/artifacts.d.ts.map +1 -1
  269. package/types/config.d.ts +2 -0
  270. package/types/config.d.ts.map +1 -1
  271. package/types/runtime.d.ts +9 -10
  272. package/types/runtime.d.ts.map +1 -1
  273. package/internal/artifacts/caching.d.ts +0 -28
  274. package/internal/artifacts/caching.d.ts.map +0 -1
  275. package/internal/artifacts/caching.js +0 -178
  276. package/internal/artifacts/caching.js.map +0 -1
  277. package/internal/artifacts/index.d.ts +0 -45
  278. package/internal/artifacts/index.d.ts.map +0 -1
  279. package/internal/artifacts/index.js +0 -191
  280. package/internal/artifacts/index.js.map +0 -1
  281. package/internal/artifacts/mutable.d.ts +0 -29
  282. package/internal/artifacts/mutable.d.ts.map +0 -1
  283. package/internal/artifacts/mutable.js +0 -226
  284. package/internal/artifacts/mutable.js.map +0 -1
  285. package/internal/artifacts/readonly.d.ts +0 -94
  286. package/internal/artifacts/readonly.d.ts.map +0 -1
  287. package/internal/artifacts/readonly.js +0 -343
  288. package/internal/artifacts/readonly.js.map +0 -1
  289. package/src/internal/artifacts/caching.ts +0 -259
  290. package/src/internal/artifacts/index.ts +0 -302
  291. package/src/internal/artifacts/mutable.ts +0 -330
  292. package/src/internal/artifacts/readonly.ts +0 -470
@@ -58,6 +58,30 @@ const PRIVATE_RPC_METHODS = new Set([
58
58
 
59
59
  export const DEFAULT_COINBASE = "0xc014ba5ec014ba5ec014ba5ec014ba5ec014ba5e";
60
60
 
61
+ interface HardhatNetworkProviderConfig {
62
+ hardfork: string;
63
+ chainId: number;
64
+ networkId: number;
65
+ blockGasLimit: number;
66
+ minGasPrice: bigint;
67
+ automine: boolean;
68
+ intervalMining: IntervalMiningConfig;
69
+ mempoolOrder: MempoolOrder;
70
+ chains: HardhatNetworkChainsConfig;
71
+ genesisAccounts: GenesisAccount[];
72
+ allowUnlimitedContractSize: boolean;
73
+ throwOnTransactionFailures: boolean;
74
+ throwOnCallFailures: boolean;
75
+ allowBlocksWithSameTimestamp: boolean;
76
+
77
+ initialBaseFeePerGas?: number;
78
+ initialDate?: Date;
79
+ coinbase?: string;
80
+ experimentalHardhatNetworkMessageTraceHooks?: BoundExperimentalHardhatNetworkMessageTraceHook[];
81
+ forkConfig?: ForkConfig;
82
+ forkCachePath?: string;
83
+ }
84
+
61
85
  export class HardhatNetworkProvider
62
86
  extends EventEmitter
63
87
  implements EIP1193Provider
@@ -75,28 +99,9 @@ export class HardhatNetworkProvider
75
99
  private _common?: Common;
76
100
 
77
101
  constructor(
78
- private readonly _hardfork: string,
79
- private readonly _networkName: string,
80
- private readonly _chainId: number,
81
- private readonly _networkId: number,
82
- private readonly _blockGasLimit: number,
83
- private readonly _initialBaseFeePerGas: number | undefined,
84
- private readonly _minGasPrice: bigint,
85
- private readonly _throwOnTransactionFailures: boolean,
86
- private readonly _throwOnCallFailures: boolean,
87
- private readonly _automine: boolean,
88
- private readonly _intervalMining: IntervalMiningConfig,
89
- private readonly _mempoolOrder: MempoolOrder,
90
- private readonly _chains: HardhatNetworkChainsConfig,
102
+ private readonly _config: HardhatNetworkProviderConfig,
91
103
  private readonly _logger: ModulesLogger,
92
- private readonly _genesisAccounts: GenesisAccount[] = [],
93
- private readonly _artifacts?: Artifacts,
94
- private readonly _allowUnlimitedContractSize = false,
95
- private readonly _initialDate?: Date,
96
- private readonly _experimentalHardhatNetworkMessageTraceHooks: BoundExperimentalHardhatNetworkMessageTraceHook[] = [],
97
- private _forkConfig?: ForkConfig,
98
- private readonly _forkCachePath?: string,
99
- private readonly _coinbase = DEFAULT_COINBASE
104
+ private readonly _artifacts?: Artifacts
100
105
  ) {
101
106
  super();
102
107
  }
@@ -228,24 +233,26 @@ export class HardhatNetworkProvider
228
233
  }
229
234
 
230
235
  const config: NodeConfig = {
231
- automine: this._automine,
232
- blockGasLimit: this._blockGasLimit,
233
- minGasPrice: this._minGasPrice,
234
- genesisAccounts: this._genesisAccounts,
235
- allowUnlimitedContractSize: this._allowUnlimitedContractSize,
236
+ automine: this._config.automine,
237
+ blockGasLimit: this._config.blockGasLimit,
238
+ minGasPrice: this._config.minGasPrice,
239
+ genesisAccounts: this._config.genesisAccounts,
240
+ allowUnlimitedContractSize: this._config.allowUnlimitedContractSize,
236
241
  tracingConfig: await this._makeTracingConfig(),
237
- initialBaseFeePerGas: this._initialBaseFeePerGas,
238
- mempoolOrder: this._mempoolOrder,
239
- hardfork: this._hardfork,
240
- networkName: this._networkName,
241
- chainId: this._chainId,
242
- networkId: this._networkId,
243
- initialDate: this._initialDate,
244
- forkConfig: this._forkConfig,
242
+ initialBaseFeePerGas: this._config.initialBaseFeePerGas,
243
+ mempoolOrder: this._config.mempoolOrder,
244
+ hardfork: this._config.hardfork,
245
+ chainId: this._config.chainId,
246
+ networkId: this._config.networkId,
247
+ initialDate: this._config.initialDate,
248
+ forkConfig: this._config.forkConfig,
245
249
  forkCachePath:
246
- this._forkConfig !== undefined ? this._forkCachePath : undefined,
247
- coinbase: this._coinbase,
248
- chains: this._chains,
250
+ this._config.forkConfig !== undefined
251
+ ? this._config.forkCachePath
252
+ : undefined,
253
+ coinbase: this._config.coinbase ?? DEFAULT_COINBASE,
254
+ chains: this._config.chains,
255
+ allowBlocksWithSameTimestamp: this._config.allowBlocksWithSameTimestamp,
249
256
  };
250
257
 
251
258
  const [common, node] = await HardhatNode.create(config);
@@ -256,10 +263,10 @@ export class HardhatNetworkProvider
256
263
  this._ethModule = new EthModule(
257
264
  common,
258
265
  node,
259
- this._throwOnTransactionFailures,
260
- this._throwOnCallFailures,
266
+ this._config.throwOnTransactionFailures,
267
+ this._config.throwOnCallFailures,
261
268
  this._logger,
262
- this._experimentalHardhatNetworkMessageTraceHooks
269
+ this._config.experimentalHardhatNetworkMessageTraceHooks
263
270
  );
264
271
 
265
272
  const miningTimer = this._makeMiningTimer();
@@ -270,7 +277,8 @@ export class HardhatNetworkProvider
270
277
  node,
271
278
  miningTimer,
272
279
  this._logger,
273
- this._experimentalHardhatNetworkMessageTraceHooks
280
+ this._config.allowBlocksWithSameTimestamp,
281
+ this._config.experimentalHardhatNetworkMessageTraceHooks
274
282
  );
275
283
  this._hardhatModule = new HardhatModule(
276
284
  node,
@@ -279,7 +287,7 @@ export class HardhatNetworkProvider
279
287
  this._logger.setEnabled(loggingEnabled);
280
288
  },
281
289
  this._logger,
282
- this._experimentalHardhatNetworkMessageTraceHooks
290
+ this._config.experimentalHardhatNetworkMessageTraceHooks
283
291
  );
284
292
  this._debugModule = new DebugModule(node);
285
293
  this._personalModule = new PersonalModule(node);
@@ -320,13 +328,16 @@ export class HardhatNetworkProvider
320
328
  }
321
329
 
322
330
  private _makeMiningTimer(): MiningTimer {
323
- const miningTimer = new MiningTimer(this._intervalMining, async () => {
324
- try {
325
- await this.request({ method: "hardhat_intervalMine" });
326
- } catch (e) {
327
- console.error("Unexpected error calling hardhat_intervalMine:", e);
331
+ const miningTimer = new MiningTimer(
332
+ this._config.intervalMining,
333
+ async () => {
334
+ try {
335
+ await this.request({ method: "hardhat_intervalMine" });
336
+ } catch (e) {
337
+ console.error("Unexpected error calling hardhat_intervalMine:", e);
338
+ }
328
339
  }
329
- });
340
+ );
330
341
 
331
342
  miningTimer.start();
332
343
 
@@ -334,7 +345,7 @@ export class HardhatNetworkProvider
334
345
  }
335
346
 
336
347
  private async _reset(miningTimer: MiningTimer, forkConfig?: ForkConfig) {
337
- this._forkConfig = forkConfig;
348
+ this._config.forkConfig = forkConfig;
338
349
  if (this._node !== undefined) {
339
350
  this._stopForwardingNodeEvents(this._node);
340
351
  }
@@ -1,7 +1,7 @@
1
- import { rawDecode } from "ethereumjs-abi";
2
-
3
1
  import { assertHardhatInvariant } from "../../core/errors";
4
2
 
3
+ const { rawDecode } = require("ethereumjs-abi");
4
+
5
5
  // selector of Error(string)
6
6
  const ERROR_SELECTOR = "08c379a0";
7
7
  // selector of Panic(uint256)
@@ -16,6 +16,7 @@ import {
16
16
  InternalError,
17
17
  InvalidArgumentsError,
18
18
  } from "../../../core/providers/errors";
19
+ import { makeFakeSignature } from "../utils/makeFakeSignature";
19
20
 
20
21
  /* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
21
22
 
@@ -124,12 +125,14 @@ export class FakeSenderAccessListEIP2930Transaction extends AccessListEIP2930Tra
124
125
  data: AccessListEIP2930TxData = {},
125
126
  opts?: TxOptions
126
127
  ) {
128
+ const fakeSignature = makeFakeSignature(data, sender);
129
+
127
130
  super(
128
131
  {
129
132
  ...data,
130
133
  v: data.v ?? 1,
131
- r: data.r ?? 1,
132
- s: data.s ?? 2,
134
+ r: data.r ?? fakeSignature.r,
135
+ s: data.s ?? fakeSignature.s,
133
136
  },
134
137
  { ...opts, freeze: false }
135
138
  );
@@ -15,6 +15,7 @@ import {
15
15
  InternalError,
16
16
  InvalidArgumentsError,
17
17
  } from "../../../core/providers/errors";
18
+ import { makeFakeSignature } from "../utils/makeFakeSignature";
18
19
 
19
20
  /* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
20
21
 
@@ -123,12 +124,14 @@ export class FakeSenderEIP1559Transaction extends FeeMarketEIP1559Transaction {
123
124
  data: FeeMarketEIP1559TxData = {},
124
125
  opts?: TxOptions
125
126
  ) {
127
+ const fakeSignature = makeFakeSignature(data, sender);
128
+
126
129
  super(
127
130
  {
128
131
  ...data,
129
132
  v: data.v ?? 1,
130
- r: data.r ?? 1,
131
- s: data.s ?? 2,
133
+ r: data.r ?? fakeSignature.r,
134
+ s: data.s ?? fakeSignature.s,
132
135
  },
133
136
  { ...opts, freeze: false }
134
137
  );
@@ -7,6 +7,7 @@ import {
7
7
  InternalError,
8
8
  InvalidArgumentsError,
9
9
  } from "../../../core/providers/errors";
10
+ import { makeFakeSignature } from "../utils/makeFakeSignature";
10
11
 
11
12
  /* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
12
13
 
@@ -97,12 +98,14 @@ export class FakeSenderTransaction extends Transaction {
97
98
  private readonly _sender: Address;
98
99
 
99
100
  constructor(sender: Address, data: TxData = {}, opts?: TxOptions) {
101
+ const fakeSignature = makeFakeSignature(data, sender);
102
+
100
103
  super(
101
104
  {
102
105
  ...data,
103
106
  v: data.v ?? 27,
104
- r: data.r ?? 1,
105
- s: data.s ?? 2,
107
+ r: data.r ?? fakeSignature.r,
108
+ s: data.s ?? fakeSignature.s,
106
109
  },
107
110
  { ...opts, freeze: false }
108
111
  );
@@ -0,0 +1,46 @@
1
+ import {
2
+ AccessListEIP2930Transaction,
3
+ FeeMarketEIP1559Transaction,
4
+ TxData,
5
+ } from "@nomicfoundation/ethereumjs-tx";
6
+ import { Address } from "@nomicfoundation/ethereumjs-util";
7
+
8
+ import { createNonCryptographicHashBasedIdentifier } from "../../../util/hash";
9
+
10
+ // Produces a signature with r and s values taken from a hash of the inputs.
11
+ export function makeFakeSignature(
12
+ tx: TxData | AccessListEIP2930Transaction | FeeMarketEIP1559Transaction,
13
+ sender: Address
14
+ ): {
15
+ r: number;
16
+ s: number;
17
+ } {
18
+ const hashInputString = [
19
+ sender,
20
+ tx.nonce,
21
+ tx.gasLimit,
22
+ tx.value,
23
+ tx.to,
24
+ tx.data,
25
+ "gasPrice" in tx ? tx.gasPrice : "",
26
+ "chainId" in tx ? tx.chainId : "",
27
+ "maxPriorityFeePerGas" in tx ? tx.maxPriorityFeePerGas : "",
28
+ "maxFeePerGas" in tx ? tx.maxFeePerGas : "",
29
+ "accessList" in tx
30
+ ? tx.accessList?.map(([buf, bufs]) =>
31
+ [buf, ...bufs].map((b) => b.toString("hex")).join(";")
32
+ )
33
+ : "",
34
+ ]
35
+ .map((a) => a?.toString() ?? "")
36
+ .join(",");
37
+
38
+ const hashDigest = createNonCryptographicHashBasedIdentifier(
39
+ Buffer.from(hashInputString)
40
+ );
41
+
42
+ return {
43
+ r: hashDigest.readUInt32LE(),
44
+ s: hashDigest.readUInt32LE(4),
45
+ };
46
+ }
@@ -12,7 +12,7 @@ import { getCurrentTimestamp } from "./getCurrentTimestamp";
12
12
  export async function putGenesisBlock(
13
13
  blockchain: HardhatBlockchain,
14
14
  common: Common,
15
- { initialDate, blockGasLimit }: LocalNodeConfig,
15
+ { initialDate, blockGasLimit: initialBlockGasLimit }: LocalNodeConfig,
16
16
  stateTrie: Trie,
17
17
  hardfork: HardforkName,
18
18
  initialMixHash: Buffer,
@@ -27,7 +27,7 @@ export async function putGenesisBlock(
27
27
 
28
28
  const header: HeaderData = {
29
29
  timestamp: `0x${initialBlockTimestamp.toString(16)}`,
30
- gasLimit: blockGasLimit,
30
+ gasLimit: initialBlockGasLimit,
31
31
  difficulty: isPostMerge ? 0 : 1,
32
32
  nonce: isPostMerge ? "0x0000000000000000" : "0x0000000000000042",
33
33
  extraData: "0x1234",
@@ -1,5 +1,4 @@
1
1
  import debug from "debug";
2
- import abi from "ethereumjs-abi";
3
2
 
4
3
  import {
5
4
  CompilerInput,
@@ -24,8 +23,19 @@ import {
24
23
  } from "./model";
25
24
  import { decodeInstructions } from "./source-maps";
26
25
 
26
+ const abi = require("ethereumjs-abi");
27
+
27
28
  const log = debug("hardhat:core:hardhat-network:compiler-to-model");
28
29
 
30
+ interface ContractAbiEntry {
31
+ name?: string;
32
+ inputs?: Array<{
33
+ type: string;
34
+ }>;
35
+ }
36
+
37
+ type ContractAbi = ContractAbiEntry[];
38
+
29
39
  export function createModelsAndDecodeBytecodes(
30
40
  solcVersion: string,
31
41
  compilerInput: CompilerInput,
@@ -61,7 +71,20 @@ function createSourcesModelFromAst(
61
71
  ) {
62
72
  const contractIdToLinearizedBaseContractIds = new Map<number, number[]>();
63
73
 
74
+ // Create a `sourceName => contract => abi` mapping
75
+ const sourceNameToContractToAbi = new Map<string, Map<string, ContractAbi>>();
76
+ for (const [sourceName, contracts] of Object.entries(
77
+ compilerOutput.contracts
78
+ )) {
79
+ const contractToAbi = new Map<string, ContractAbi>();
80
+ sourceNameToContractToAbi.set(sourceName, contractToAbi);
81
+ for (const [contractName, contract] of Object.entries(contracts)) {
82
+ contractToAbi.set(contractName, contract.abi);
83
+ }
84
+ }
85
+
64
86
  for (const [sourceName, source] of Object.entries(compilerOutput.sources)) {
87
+ const contractToAbi = sourceNameToContractToAbi.get(sourceName);
65
88
  const file = new SourceFile(
66
89
  sourceName,
67
90
  compilerInput.sources[sourceName].content
@@ -77,13 +100,16 @@ function createSourcesModelFromAst(
77
100
  continue;
78
101
  }
79
102
 
103
+ const contractAbi = contractToAbi?.get(node.name);
104
+
80
105
  processContractAstNode(
81
106
  file,
82
107
  node,
83
108
  fileIdToSourceFile,
84
109
  contractType,
85
110
  contractIdToContract,
86
- contractIdToLinearizedBaseContractIds
111
+ contractIdToLinearizedBaseContractIds,
112
+ contractAbi
87
113
  );
88
114
  }
89
115
 
@@ -111,7 +137,8 @@ function processContractAstNode(
111
137
  fileIdToSourceFile: Map<number, SourceFile>,
112
138
  contractType: ContractType,
113
139
  contractIdToContract: Map<number, Contract>,
114
- contractIdToLinearizedBaseContractIds: Map<number, number[]>
140
+ contractIdToLinearizedBaseContractIds: Map<number, number[]>,
141
+ contractAbi?: ContractAbi
115
142
  ) {
116
143
  const contractLocation = astSrcToSourceLocation(
117
144
  contractNode.src,
@@ -134,11 +161,16 @@ function processContractAstNode(
134
161
 
135
162
  for (const node of contractNode.nodes) {
136
163
  if (node.nodeType === "FunctionDefinition") {
164
+ const functionAbis = contractAbi?.filter(
165
+ (abiEntry) => abiEntry.name === node.name
166
+ );
167
+
137
168
  processFunctionDefinitionAstNode(
138
169
  node,
139
170
  fileIdToSourceFile,
140
171
  contract,
141
- file
172
+ file,
173
+ functionAbis
142
174
  );
143
175
  } else if (node.nodeType === "ModifierDefinition") {
144
176
  processModifierDefinitionAstNode(
@@ -148,11 +180,15 @@ function processContractAstNode(
148
180
  file
149
181
  );
150
182
  } else if (node.nodeType === "VariableDeclaration") {
183
+ const getterAbi = contractAbi?.find(
184
+ (abiEntry) => abiEntry.name === node.name
185
+ );
151
186
  processVariableDeclarationAstNode(
152
187
  node,
153
188
  fileIdToSourceFile,
154
189
  contract,
155
- file
190
+ file,
191
+ getterAbi
156
192
  );
157
193
  }
158
194
  }
@@ -162,7 +198,8 @@ function processFunctionDefinitionAstNode(
162
198
  functionDefinitionNode: any,
163
199
  fileIdToSourceFile: Map<number, SourceFile>,
164
200
  contract: Contract | undefined,
165
- file: SourceFile
201
+ file: SourceFile,
202
+ functionAbis?: ContractAbiEntry[]
166
203
  ) {
167
204
  if (functionDefinitionNode.implemented === false) {
168
205
  return;
@@ -188,6 +225,26 @@ function processFunctionDefinitionAstNode(
188
225
  selector = astFunctionDefinitionToSelector(functionDefinitionNode);
189
226
  }
190
227
 
228
+ // function can be overloaded, match the abi by the selector
229
+ const matchingFunctionAbi = functionAbis?.find((functionAbi) => {
230
+ if (functionAbi.name === undefined) {
231
+ return false;
232
+ }
233
+
234
+ const functionAbiSelector = abi.methodID(
235
+ functionAbi.name,
236
+ functionAbi.inputs?.map((input) => input.type) ?? []
237
+ );
238
+
239
+ if (selector === undefined || functionAbiSelector === undefined) {
240
+ return false;
241
+ }
242
+
243
+ return selector.equals(functionAbiSelector);
244
+ });
245
+
246
+ const paramTypes = matchingFunctionAbi?.inputs?.map((input) => input.type);
247
+
191
248
  const cf = new ContractFunction(
192
249
  functionDefinitionNode.name,
193
250
  functionType,
@@ -195,7 +252,8 @@ function processFunctionDefinitionAstNode(
195
252
  contract,
196
253
  visibility,
197
254
  functionDefinitionNode.stateMutability === "payable",
198
- selector
255
+ selector,
256
+ paramTypes
199
257
  );
200
258
 
201
259
  if (contract !== undefined) {
@@ -279,7 +337,8 @@ function processVariableDeclarationAstNode(
279
337
  variableDeclarationNode: any,
280
338
  fileIdToSourceFile: Map<number, SourceFile>,
281
339
  contract: Contract,
282
- file: SourceFile
340
+ file: SourceFile,
341
+ getterAbi?: ContractAbiEntry
283
342
  ) {
284
343
  const visibility = astVisibilityToVisibility(
285
344
  variableDeclarationNode.visibility
@@ -295,6 +354,8 @@ function processVariableDeclarationAstNode(
295
354
  fileIdToSourceFile
296
355
  )!;
297
356
 
357
+ const paramTypes = getterAbi?.inputs?.map((input) => input.type);
358
+
298
359
  const cf = new ContractFunction(
299
360
  variableDeclarationNode.name,
300
361
  ContractFunctionType.GETTER,
@@ -302,7 +363,8 @@ function processVariableDeclarationAstNode(
302
363
  contract,
303
364
  visibility,
304
365
  false, // Getters aren't payable
305
- getPublicVariableSelectorFromDeclarationAstNode(variableDeclarationNode)
366
+ getPublicVariableSelectorFromDeclarationAstNode(variableDeclarationNode),
367
+ paramTypes
306
368
  );
307
369
 
308
370
  contract.addLocalFunction(cf);
@@ -139,7 +139,7 @@ export class ConsoleLogger {
139
139
 
140
140
  private _decode(data: Buffer, types: string[]): ConsoleLogs {
141
141
  return types.map((type, i) => {
142
- const position = i * 32;
142
+ const position: number = i * 32;
143
143
  switch (types[i]) {
144
144
  case Uint256Ty:
145
145
  return bufferToBigInt(
@@ -1,2 +1,2 @@
1
- export const SUPPORTED_SOLIDITY_VERSION_RANGE = "<=0.8.17";
1
+ export const SUPPORTED_SOLIDITY_VERSION_RANGE = "<=0.8.18";
2
2
  export const FIRST_SOLC_VERSION_SUPPORTED = "0.5.1";
@@ -1,4 +1,5 @@
1
1
  import { bufferToHex } from "@nomicfoundation/ethereumjs-util";
2
+ import chalk from "chalk";
2
3
 
3
4
  import {
4
5
  CallMessageTrace,
@@ -146,7 +147,7 @@ function traceSteps(
146
147
  if (isJump(inst.opcode)) {
147
148
  const jump =
148
149
  inst.jumpType !== JumpType.NOT_JUMP
149
- ? `\x1b[1m(${JumpType[inst.jumpType]})\x1b[0m`
150
+ ? chalk.bold(`(${JumpType[inst.jumpType]})`)
150
151
  : "";
151
152
 
152
153
  console.log(
@@ -209,5 +210,11 @@ export function printStackTrace(trace: SolidityStackTrace) {
209
210
  sourceReference: flattenSourceReference(entry.sourceReference),
210
211
  }));
211
212
 
212
- console.log(JSON.stringify(withFlattenedSourceReferences, undefined, 2));
213
+ console.log(
214
+ JSON.stringify(
215
+ withFlattenedSourceReferences,
216
+ (key, value) => (typeof value === "bigint" ? value.toString() : value),
217
+ 2
218
+ )
219
+ );
213
220
  }