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.
- package/builtin-tasks/compile.js +16 -6
- package/builtin-tasks/compile.js.map +1 -1
- package/builtin-tasks/flatten.js +1 -1
- package/builtin-tasks/flatten.js.map +1 -1
- package/builtin-tasks/help.js +2 -4
- package/builtin-tasks/help.js.map +1 -1
- package/builtin-tasks/task-names.d.ts +1 -0
- package/builtin-tasks/task-names.d.ts.map +1 -1
- package/builtin-tasks/task-names.js +3 -2
- package/builtin-tasks/task-names.js.map +1 -1
- package/builtin-tasks/test.js +22 -1
- package/builtin-tasks/test.js.map +1 -1
- package/internal/cli/bootstrap.d.ts +1 -0
- package/internal/cli/bootstrap.js +12 -20
- package/internal/cli/bootstrap.js.map +1 -1
- package/internal/cli/cli.d.ts +0 -1
- package/internal/cli/cli.d.ts.map +1 -1
- package/internal/cli/cli.js +20 -29
- package/internal/cli/cli.js.map +1 -1
- package/internal/cli/project-creation.d.ts +1 -2
- package/internal/cli/project-creation.d.ts.map +1 -1
- package/internal/cli/project-creation.js +105 -36
- package/internal/cli/project-creation.js.map +1 -1
- package/internal/cli/prompt.d.ts +2 -2
- package/internal/cli/prompt.d.ts.map +1 -1
- package/internal/cli/prompt.js +1 -2
- package/internal/cli/prompt.js.map +1 -1
- package/internal/cli/types.d.ts +1 -0
- package/internal/cli/types.d.ts.map +1 -1
- package/internal/core/config/config-env.d.ts +5 -11
- package/internal/core/config/config-env.d.ts.map +1 -1
- package/internal/core/config/config-env.js +2 -13
- package/internal/core/config/config-env.js.map +1 -1
- package/internal/core/config/config-loading.d.ts +2 -1
- package/internal/core/config/config-loading.d.ts.map +1 -1
- package/internal/core/config/config-loading.js +25 -7
- package/internal/core/config/config-loading.js.map +1 -1
- package/internal/core/config/config-validation.d.ts +2 -0
- package/internal/core/config/config-validation.d.ts.map +1 -1
- package/internal/core/config/config-validation.js +18 -1
- package/internal/core/config/config-validation.js.map +1 -1
- package/internal/core/config/extenders.d.ts +4 -7
- package/internal/core/config/extenders.d.ts.map +1 -1
- package/internal/core/config/extenders.js +5 -12
- package/internal/core/config/extenders.js.map +1 -1
- package/internal/core/errors-list.d.ts +28 -7
- package/internal/core/errors-list.d.ts.map +1 -1
- package/internal/core/errors-list.js +33 -10
- package/internal/core/errors-list.js.map +1 -1
- package/internal/core/jsonrpc/types/input/blockTag.d.ts +3 -3
- package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -1
- package/internal/core/project-structure.d.ts.map +1 -1
- package/internal/core/project-structure.js +6 -0
- package/internal/core/project-structure.js.map +1 -1
- package/internal/core/providers/construction.d.ts.map +1 -1
- package/internal/core/providers/construction.js +25 -5
- package/internal/core/providers/construction.js.map +1 -1
- package/internal/core/providers/http.d.ts +2 -2
- package/internal/core/providers/http.d.ts.map +1 -1
- package/internal/core/providers/http.js +41 -19
- package/internal/core/providers/http.js.map +1 -1
- package/internal/core/runtime-environment.d.ts +4 -2
- package/internal/core/runtime-environment.d.ts.map +1 -1
- package/internal/core/runtime-environment.js +39 -47
- package/internal/core/runtime-environment.js.map +1 -1
- package/internal/core/tasks/dsl.d.ts +6 -6
- package/internal/core/tasks/dsl.d.ts.map +1 -1
- package/internal/core/tasks/dsl.js.map +1 -1
- package/internal/core/tasks/task-definitions.d.ts +2 -2
- package/internal/core/tasks/task-definitions.d.ts.map +1 -1
- package/internal/core/tasks/task-definitions.js.map +1 -1
- package/internal/hardhat-network/jsonrpc/handler.d.ts +1 -0
- package/internal/hardhat-network/jsonrpc/handler.d.ts.map +1 -1
- package/internal/hardhat-network/jsonrpc/handler.js +13 -18
- package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
- package/internal/hardhat-network/provider/RethnetState.d.ts +26 -0
- package/internal/hardhat-network/provider/RethnetState.d.ts.map +1 -0
- package/internal/hardhat-network/provider/RethnetState.js +84 -0
- package/internal/hardhat-network/provider/RethnetState.js.map +1 -0
- package/internal/hardhat-network/provider/modules/evm.d.ts +2 -1
- package/internal/hardhat-network/provider/modules/evm.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/evm.js +10 -4
- package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
- package/internal/hardhat-network/provider/node-types.d.ts +1 -1
- package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.d.ts +1 -0
- package/internal/hardhat-network/provider/node.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.js +6 -4
- package/internal/hardhat-network/provider/node.js.map +1 -1
- package/internal/hardhat-network/provider/provider.d.ts +25 -21
- package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
- package/internal/hardhat-network/provider/provider.js +25 -42
- package/internal/hardhat-network/provider/provider.js.map +1 -1
- package/internal/hardhat-network/provider/return-data.js +2 -2
- package/internal/hardhat-network/provider/return-data.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +4 -2
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +4 -2
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +4 -2
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
- package/internal/hardhat-network/provider/utils/bloom.d.ts +32 -0
- package/internal/hardhat-network/provider/utils/bloom.d.ts.map +1 -0
- package/internal/hardhat-network/provider/utils/bloom.js +79 -0
- package/internal/hardhat-network/provider/utils/bloom.js.map +1 -0
- package/internal/hardhat-network/provider/utils/convertToRethnet.d.ts +12 -0
- package/internal/hardhat-network/provider/utils/convertToRethnet.d.ts.map +1 -0
- package/internal/hardhat-network/provider/utils/convertToRethnet.js +162 -0
- package/internal/hardhat-network/provider/utils/convertToRethnet.js.map +1 -0
- package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts +7 -0
- package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts.map +1 -0
- package/internal/hardhat-network/provider/utils/makeFakeSignature.js +31 -0
- package/internal/hardhat-network/provider/utils/makeFakeSignature.js.map +1 -0
- package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +1 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js +2 -2
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
- package/internal/hardhat-network/provider/vm/block-builder.d.ts +31 -0
- package/internal/hardhat-network/provider/vm/block-builder.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/block-builder.js +151 -0
- package/internal/hardhat-network/provider/vm/block-builder.js.map +1 -0
- package/internal/hardhat-network/provider/vm/creation.d.ts +10 -0
- package/internal/hardhat-network/provider/vm/creation.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/creation.js +29 -0
- package/internal/hardhat-network/provider/vm/creation.js.map +1 -0
- package/internal/hardhat-network/provider/vm/dual.d.ts +43 -0
- package/internal/hardhat-network/provider/vm/dual.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/dual.js +488 -0
- package/internal/hardhat-network/provider/vm/dual.js.map +1 -0
- package/internal/hardhat-network/provider/vm/ethereumjs.d.ts +56 -0
- package/internal/hardhat-network/provider/vm/ethereumjs.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/ethereumjs.js +416 -0
- package/internal/hardhat-network/provider/vm/ethereumjs.js.map +1 -0
- package/internal/hardhat-network/provider/vm/exit.d.ts +23 -0
- package/internal/hardhat-network/provider/vm/exit.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/exit.js +130 -0
- package/internal/hardhat-network/provider/vm/exit.js.map +1 -0
- package/internal/hardhat-network/provider/vm/rethnet.d.ts +99 -0
- package/internal/hardhat-network/provider/vm/rethnet.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/rethnet.js +284 -0
- package/internal/hardhat-network/provider/vm/rethnet.js.map +1 -0
- package/internal/hardhat-network/provider/vm/vm-adapter.d.ts +52 -0
- package/internal/hardhat-network/provider/vm/vm-adapter.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/vm-adapter.js +3 -0
- package/internal/hardhat-network/provider/vm/vm-adapter.js.map +1 -0
- package/internal/hardhat-network/stack-traces/compiler-to-model.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/compiler-to-model.js +37 -11
- package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
- package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
- package/internal/hardhat-network/stack-traces/constants.d.ts +1 -1
- package/internal/hardhat-network/stack-traces/constants.js +1 -1
- package/internal/hardhat-network/stack-traces/debug.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/debug.js +6 -2
- package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
- package/internal/hardhat-network/stack-traces/error-inferrer.d.ts +1 -0
- package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/error-inferrer.js +85 -55
- package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/model.d.ts +3 -1
- package/internal/hardhat-network/stack-traces/model.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/model.js +9 -1
- package/internal/hardhat-network/stack-traces/model.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-errors.js +2 -2
- package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +2 -2
- package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.js +1 -0
- package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
- package/internal/lib/hardhat-lib.d.ts.map +1 -1
- package/internal/lib/hardhat-lib.js +1 -4
- package/internal/lib/hardhat-lib.js.map +1 -1
- package/internal/solidity/compiler/downloader.js +2 -2
- package/internal/solidity/compiler/downloader.js.map +1 -1
- package/internal/solidity/compiler/index.js +1 -1
- package/internal/solidity/compiler/index.js.map +1 -1
- package/internal/solidity/resolver.d.ts +4 -3
- package/internal/solidity/resolver.d.ts.map +1 -1
- package/internal/solidity/resolver.js +18 -7
- package/internal/solidity/resolver.js.map +1 -1
- package/internal/util/abi-helpers.d.ts +1 -0
- package/internal/util/abi-helpers.d.ts.map +1 -1
- package/internal/util/abi-helpers.js +9 -0
- package/internal/util/abi-helpers.js.map +1 -1
- package/internal/util/download.d.ts.map +1 -1
- package/internal/util/download.js +12 -11
- package/internal/util/download.js.map +1 -1
- package/internal/util/packageInfo.d.ts +6 -1
- package/internal/util/packageInfo.d.ts.map +1 -1
- package/internal/util/packageInfo.js +14 -11
- package/internal/util/packageInfo.js.map +1 -1
- package/internal/util/proxy.d.ts +2 -0
- package/internal/util/proxy.d.ts.map +1 -0
- package/internal/util/proxy.js +19 -0
- package/internal/util/proxy.js.map +1 -0
- package/package.json +9 -10
- package/register.js +1 -4
- package/register.js.map +1 -1
- package/sample-projects/javascript/hardhat.config.js +1 -1
- package/sample-projects/javascript/scripts/deploy.js +2 -2
- package/sample-projects/javascript-esm/LICENSE.md +11 -0
- package/sample-projects/javascript-esm/README.md +13 -0
- package/sample-projects/javascript-esm/contracts/Lock.sol +34 -0
- package/sample-projects/javascript-esm/hardhat.config.cjs +6 -0
- package/sample-projects/javascript-esm/scripts/deploy.js +22 -0
- package/sample-projects/javascript-esm/test/Lock.js +123 -0
- package/sample-projects/typescript/hardhat.config.ts +1 -1
- package/sample-projects/typescript/scripts/deploy.ts +2 -2
- package/sample-projects/typescript/tsconfig.json +2 -1
- package/src/builtin-tasks/compile.ts +28 -7
- package/src/builtin-tasks/flatten.ts +4 -1
- package/src/builtin-tasks/help.ts +15 -16
- package/src/builtin-tasks/task-names.ts +2 -0
- package/src/builtin-tasks/test.ts +30 -2
- package/src/internal/artifacts.ts +947 -0
- package/src/internal/cli/bootstrap.ts +14 -36
- package/src/internal/cli/cli.ts +38 -43
- package/src/internal/cli/project-creation.ts +128 -47
- package/src/internal/cli/prompt.ts +2 -4
- package/src/internal/cli/types.ts +2 -0
- package/src/internal/core/config/config-env.ts +15 -27
- package/src/internal/core/config/config-loading.ts +35 -11
- package/src/internal/core/config/config-validation.ts +20 -0
- package/src/internal/core/config/extenders.ts +6 -15
- package/src/internal/core/errors-list.ts +36 -10
- package/src/internal/core/project-structure.ts +8 -0
- package/src/internal/core/providers/construction.ts +29 -24
- package/src/internal/core/providers/http.ts +38 -26
- package/src/internal/core/runtime-environment.ts +65 -60
- package/src/internal/core/tasks/dsl.ts +17 -17
- package/src/internal/core/tasks/task-definitions.ts +6 -2
- package/src/internal/hardhat-network/jsonrpc/handler.ts +31 -28
- package/src/internal/hardhat-network/provider/modules/evm.ts +15 -3
- package/src/internal/hardhat-network/provider/node-types.ts +1 -1
- package/src/internal/hardhat-network/provider/node.ts +5 -1
- package/src/internal/hardhat-network/provider/provider.ts +60 -49
- package/src/internal/hardhat-network/provider/return-data.ts +2 -2
- package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +5 -2
- package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +5 -2
- package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +5 -2
- package/src/internal/hardhat-network/provider/utils/makeFakeSignature.ts +46 -0
- package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +2 -2
- package/src/internal/hardhat-network/stack-traces/compiler-to-model.ts +71 -9
- package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/constants.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/debug.ts +9 -2
- package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +177 -89
- package/src/internal/hardhat-network/stack-traces/model.ts +11 -1
- package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +2 -2
- package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +2 -2
- package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +3 -0
- package/src/internal/lib/hardhat-lib.ts +1 -6
- package/src/internal/solidity/compiler/downloader.ts +2 -2
- package/src/internal/solidity/compiler/index.ts +1 -1
- package/src/internal/solidity/resolver.ts +28 -11
- package/src/internal/util/abi-helpers.ts +9 -0
- package/src/internal/util/download.ts +13 -15
- package/src/internal/util/packageInfo.ts +24 -10
- package/src/internal/util/proxy.ts +18 -0
- package/src/register.ts +1 -6
- package/src/types/artifacts.ts +14 -112
- package/src/types/config.ts +2 -0
- package/src/types/runtime.ts +16 -13
- package/types/artifacts.d.ts +10 -96
- package/types/artifacts.d.ts.map +1 -1
- package/types/config.d.ts +2 -0
- package/types/config.d.ts.map +1 -1
- package/types/runtime.d.ts +9 -10
- package/types/runtime.d.ts.map +1 -1
- package/internal/artifacts/caching.d.ts +0 -28
- package/internal/artifacts/caching.d.ts.map +0 -1
- package/internal/artifacts/caching.js +0 -178
- package/internal/artifacts/caching.js.map +0 -1
- package/internal/artifacts/index.d.ts +0 -45
- package/internal/artifacts/index.d.ts.map +0 -1
- package/internal/artifacts/index.js +0 -191
- package/internal/artifacts/index.js.map +0 -1
- package/internal/artifacts/mutable.d.ts +0 -29
- package/internal/artifacts/mutable.d.ts.map +0 -1
- package/internal/artifacts/mutable.js +0 -226
- package/internal/artifacts/mutable.js.map +0 -1
- package/internal/artifacts/readonly.d.ts +0 -94
- package/internal/artifacts/readonly.d.ts.map +0 -1
- package/internal/artifacts/readonly.js +0 -343
- package/internal/artifacts/readonly.js.map +0 -1
- package/src/internal/artifacts/caching.ts +0 -259
- package/src/internal/artifacts/index.ts +0 -302
- package/src/internal/artifacts/mutable.ts +0 -330
- package/src/internal/artifacts/readonly.ts +0 -470
|
@@ -2,7 +2,6 @@ import debug from "debug";
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
Artifacts as IArtifacts,
|
|
5
|
-
ArtifactsSource,
|
|
6
5
|
EnvironmentExtender,
|
|
7
6
|
ExperimentalHardhatNetworkMessageTraceHook,
|
|
8
7
|
HardhatArguments,
|
|
@@ -13,6 +12,7 @@ import {
|
|
|
13
12
|
ParamDefinition,
|
|
14
13
|
RunSuperFunction,
|
|
15
14
|
RunTaskFunction,
|
|
15
|
+
SubtaskArguments,
|
|
16
16
|
TaskArguments,
|
|
17
17
|
TaskDefinition,
|
|
18
18
|
TasksMap,
|
|
@@ -21,6 +21,7 @@ import { Artifacts } from "../artifacts";
|
|
|
21
21
|
import { MessageTrace } from "../hardhat-network/stack-traces/message-trace";
|
|
22
22
|
import { lazyObject } from "../util/lazy";
|
|
23
23
|
|
|
24
|
+
import { getHardhatVersion } from "../util/packageInfo";
|
|
24
25
|
import { analyzeModuleNotFoundError } from "./config/config-loading";
|
|
25
26
|
import { HardhatError } from "./errors";
|
|
26
27
|
import { ERRORS } from "./errors-list";
|
|
@@ -51,6 +52,8 @@ export class Environment implements HardhatRuntimeEnvironment {
|
|
|
51
52
|
|
|
52
53
|
public entryTaskProfile?: TaskProfile;
|
|
53
54
|
|
|
55
|
+
public version: string = getHardhatVersion();
|
|
56
|
+
|
|
54
57
|
/**
|
|
55
58
|
* Initializes the Hardhat Runtime Environment and the given
|
|
56
59
|
* extender functions.
|
|
@@ -68,7 +71,6 @@ export class Environment implements HardhatRuntimeEnvironment {
|
|
|
68
71
|
public readonly hardhatArguments: HardhatArguments,
|
|
69
72
|
public readonly tasks: TasksMap,
|
|
70
73
|
extenders: EnvironmentExtender[] = [],
|
|
71
|
-
artifactsExtensions: ArtifactsSource[] = [],
|
|
72
74
|
experimentalHardhatNetworkMessageTraceHooks: ExperimentalHardhatNetworkMessageTraceHook[] = [],
|
|
73
75
|
public readonly userConfig: HardhatUserConfig = {}
|
|
74
76
|
) {
|
|
@@ -87,7 +89,7 @@ export class Environment implements HardhatRuntimeEnvironment {
|
|
|
87
89
|
});
|
|
88
90
|
}
|
|
89
91
|
|
|
90
|
-
this.artifacts = new Artifacts(config.paths.artifacts
|
|
92
|
+
this.artifacts = new Artifacts(config.paths.artifacts);
|
|
91
93
|
|
|
92
94
|
const provider = lazyObject(() => {
|
|
93
95
|
log(`Creating provider for network ${networkName}`);
|
|
@@ -119,6 +121,7 @@ export class Environment implements HardhatRuntimeEnvironment {
|
|
|
119
121
|
*
|
|
120
122
|
* @param name The task's name.
|
|
121
123
|
* @param taskArguments A map of task's arguments.
|
|
124
|
+
* @param subtaskArguments A map of subtasks to their arguments.
|
|
122
125
|
*
|
|
123
126
|
* @throws a HH303 if there aren't any defined tasks with the given name.
|
|
124
127
|
* @returns a promise with the task's execution result.
|
|
@@ -126,6 +129,7 @@ export class Environment implements HardhatRuntimeEnvironment {
|
|
|
126
129
|
public readonly run: RunTaskFunction = async (
|
|
127
130
|
name,
|
|
128
131
|
taskArguments = {},
|
|
132
|
+
subtaskArguments = {},
|
|
129
133
|
callerTaskProfile?: TaskProfile
|
|
130
134
|
) => {
|
|
131
135
|
const taskDefinition = this.tasks[name];
|
|
@@ -140,7 +144,8 @@ export class Environment implements HardhatRuntimeEnvironment {
|
|
|
140
144
|
|
|
141
145
|
const resolvedTaskArguments = this._resolveValidTaskArguments(
|
|
142
146
|
taskDefinition,
|
|
143
|
-
taskArguments
|
|
147
|
+
taskArguments,
|
|
148
|
+
subtaskArguments
|
|
144
149
|
);
|
|
145
150
|
|
|
146
151
|
let taskProfile: TaskProfile | undefined;
|
|
@@ -158,6 +163,7 @@ export class Environment implements HardhatRuntimeEnvironment {
|
|
|
158
163
|
return await this._runTaskDefinition(
|
|
159
164
|
taskDefinition,
|
|
160
165
|
resolvedTaskArguments,
|
|
166
|
+
subtaskArguments,
|
|
161
167
|
taskProfile
|
|
162
168
|
);
|
|
163
169
|
} catch (e) {
|
|
@@ -217,20 +223,23 @@ export class Environment implements HardhatRuntimeEnvironment {
|
|
|
217
223
|
private async _runTaskDefinition(
|
|
218
224
|
taskDefinition: TaskDefinition,
|
|
219
225
|
taskArguments: TaskArguments,
|
|
226
|
+
subtaskArguments: SubtaskArguments,
|
|
220
227
|
taskProfile?: TaskProfile
|
|
221
228
|
): Promise<any> {
|
|
222
229
|
let runSuperFunction: any;
|
|
223
230
|
|
|
224
231
|
if (taskDefinition instanceof OverriddenTaskDefinition) {
|
|
225
232
|
runSuperFunction = async (
|
|
226
|
-
_taskArguments: TaskArguments = taskArguments
|
|
233
|
+
_taskArguments: TaskArguments = taskArguments,
|
|
234
|
+
_subtaskArguments: SubtaskArguments = subtaskArguments
|
|
227
235
|
) => {
|
|
228
236
|
log("Running %s's super", taskDefinition.name);
|
|
229
237
|
|
|
230
238
|
if (taskProfile === undefined) {
|
|
231
239
|
return this._runTaskDefinition(
|
|
232
240
|
taskDefinition.parentTaskDefinition,
|
|
233
|
-
_taskArguments
|
|
241
|
+
_taskArguments,
|
|
242
|
+
_subtaskArguments
|
|
234
243
|
);
|
|
235
244
|
}
|
|
236
245
|
|
|
@@ -241,6 +250,7 @@ export class Environment implements HardhatRuntimeEnvironment {
|
|
|
241
250
|
return await this._runTaskDefinition(
|
|
242
251
|
taskDefinition.parentTaskDefinition,
|
|
243
252
|
_taskArguments,
|
|
253
|
+
_subtaskArguments,
|
|
244
254
|
parentTaskProfile
|
|
245
255
|
);
|
|
246
256
|
} finally {
|
|
@@ -265,17 +275,30 @@ export class Environment implements HardhatRuntimeEnvironment {
|
|
|
265
275
|
const previousRunSuper: any = globalAsAny.runSuper;
|
|
266
276
|
globalAsAny.runSuper = runSuper;
|
|
267
277
|
|
|
268
|
-
|
|
278
|
+
// We create a modified version of `this`, as we want to keep track of the
|
|
279
|
+
// `subtaskArguments` and `taskProfile` through `run` invocations. This
|
|
280
|
+
// way we keep track of callers's data, even when tasks are run in parallel.
|
|
281
|
+
//
|
|
282
|
+
// Note that for this to work we need to set the prototype later
|
|
283
|
+
let modifiedHre: any = {
|
|
284
|
+
...this,
|
|
285
|
+
run: (
|
|
286
|
+
_name: string,
|
|
287
|
+
_taskArguments: TaskArguments,
|
|
288
|
+
_subtaskArguments: SubtaskArguments
|
|
289
|
+
) =>
|
|
290
|
+
(this as any).run(
|
|
291
|
+
_name,
|
|
292
|
+
_taskArguments,
|
|
293
|
+
{ ..._subtaskArguments, ...subtaskArguments }, // parent subtask args take precedence
|
|
294
|
+
taskProfile
|
|
295
|
+
),
|
|
296
|
+
};
|
|
297
|
+
|
|
269
298
|
if (this.hardhatArguments.flamegraph === true) {
|
|
270
|
-
// We
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
//
|
|
274
|
-
// Note that for this to work we need to set the prototype later
|
|
275
|
-
modifiedHreWithParentTaskProfile = {
|
|
276
|
-
...this,
|
|
277
|
-
run: (_name: string, _taskArguments: TaskArguments) =>
|
|
278
|
-
(this as any).run(_name, _taskArguments, taskProfile),
|
|
299
|
+
// We modify the `this` again to add a few utility methods.
|
|
300
|
+
modifiedHre = {
|
|
301
|
+
...modifiedHre,
|
|
279
302
|
adhocProfile: async (_name: string, f: () => Promise<any>) => {
|
|
280
303
|
const adhocProfile = createTaskProfile(_name);
|
|
281
304
|
taskProfile!.children.push(adhocProfile);
|
|
@@ -295,21 +318,17 @@ export class Environment implements HardhatRuntimeEnvironment {
|
|
|
295
318
|
}
|
|
296
319
|
},
|
|
297
320
|
};
|
|
298
|
-
|
|
299
|
-
Object.setPrototypeOf(
|
|
300
|
-
modifiedHreWithParentTaskProfile,
|
|
301
|
-
Object.getPrototypeOf(this)
|
|
302
|
-
);
|
|
303
321
|
}
|
|
304
322
|
|
|
323
|
+
Object.setPrototypeOf(modifiedHre, Object.getPrototypeOf(this));
|
|
324
|
+
|
|
305
325
|
const uninjectFromGlobal =
|
|
306
|
-
|
|
307
|
-
this.injectToGlobal();
|
|
326
|
+
modifiedHre?.injectToGlobal() ?? this.injectToGlobal();
|
|
308
327
|
|
|
309
328
|
try {
|
|
310
329
|
return await taskDefinition.action(
|
|
311
330
|
taskArguments,
|
|
312
|
-
|
|
331
|
+
modifiedHre ?? this,
|
|
313
332
|
runSuper
|
|
314
333
|
);
|
|
315
334
|
} finally {
|
|
@@ -333,9 +352,14 @@ export class Environment implements HardhatRuntimeEnvironment {
|
|
|
333
352
|
*/
|
|
334
353
|
private _resolveValidTaskArguments(
|
|
335
354
|
taskDefinition: TaskDefinition,
|
|
336
|
-
taskArguments: TaskArguments
|
|
355
|
+
taskArguments: TaskArguments,
|
|
356
|
+
subtaskArguments: SubtaskArguments
|
|
337
357
|
): TaskArguments {
|
|
338
|
-
const {
|
|
358
|
+
const {
|
|
359
|
+
name: taskName,
|
|
360
|
+
paramDefinitions,
|
|
361
|
+
positionalParamDefinitions,
|
|
362
|
+
} = taskDefinition;
|
|
339
363
|
|
|
340
364
|
const nonPositionalParamDefinitions = Object.values(paramDefinitions);
|
|
341
365
|
|
|
@@ -345,45 +369,26 @@ export class Environment implements HardhatRuntimeEnvironment {
|
|
|
345
369
|
...positionalParamDefinitions,
|
|
346
370
|
];
|
|
347
371
|
|
|
348
|
-
const
|
|
349
|
-
errors: HardhatError[];
|
|
350
|
-
values: TaskArguments;
|
|
351
|
-
} = { errors: [], values: {} };
|
|
372
|
+
const resolvedArguments: TaskArguments = {};
|
|
352
373
|
|
|
353
|
-
const
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
const argumentValue = taskArguments[paramName];
|
|
358
|
-
const resolvedArgumentValue = this._resolveArgument(
|
|
359
|
-
paramDefinition,
|
|
360
|
-
argumentValue,
|
|
361
|
-
taskDefinition.name
|
|
362
|
-
);
|
|
363
|
-
if (resolvedArgumentValue !== undefined) {
|
|
364
|
-
values[paramName] = resolvedArgumentValue;
|
|
365
|
-
}
|
|
366
|
-
} catch (error) {
|
|
367
|
-
if (HardhatError.isHardhatError(error)) {
|
|
368
|
-
errors.push(error);
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
return { errors, values };
|
|
372
|
-
},
|
|
373
|
-
initResolvedArguments
|
|
374
|
-
);
|
|
374
|
+
for (const paramDefinition of allTaskParamDefinitions) {
|
|
375
|
+
const paramName = paramDefinition.name;
|
|
376
|
+
const argumentValue =
|
|
377
|
+
subtaskArguments[taskName]?.[paramName] ?? taskArguments[paramName];
|
|
375
378
|
|
|
376
|
-
|
|
379
|
+
const resolvedArgumentValue = this._resolveArgument(
|
|
380
|
+
paramDefinition,
|
|
381
|
+
argumentValue,
|
|
382
|
+
taskDefinition.name
|
|
383
|
+
);
|
|
377
384
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
385
|
+
if (resolvedArgumentValue !== undefined) {
|
|
386
|
+
resolvedArguments[paramName] = resolvedArgumentValue;
|
|
387
|
+
}
|
|
381
388
|
}
|
|
382
389
|
|
|
383
|
-
//
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
return resolvedTaskArguments;
|
|
390
|
+
// We keep the args in taskArguments that were not resolved
|
|
391
|
+
return { ...taskArguments, ...resolvedArguments };
|
|
387
392
|
}
|
|
388
393
|
|
|
389
394
|
/**
|
|
@@ -29,10 +29,10 @@ export class TasksDSL {
|
|
|
29
29
|
* @param action The task's action.
|
|
30
30
|
* @returns A task definition.
|
|
31
31
|
*/
|
|
32
|
-
public task<
|
|
32
|
+
public task<TaskArgumentsT extends TaskArguments>(
|
|
33
33
|
name: string,
|
|
34
34
|
description?: string,
|
|
35
|
-
action?: ActionType<
|
|
35
|
+
action?: ActionType<TaskArgumentsT>
|
|
36
36
|
): TaskDefinition;
|
|
37
37
|
|
|
38
38
|
/**
|
|
@@ -46,15 +46,15 @@ export class TasksDSL {
|
|
|
46
46
|
*
|
|
47
47
|
* @returns A task definition.
|
|
48
48
|
*/
|
|
49
|
-
public task<
|
|
49
|
+
public task<TaskArgumentsT extends TaskArguments>(
|
|
50
50
|
name: string,
|
|
51
|
-
action: ActionType<
|
|
51
|
+
action: ActionType<TaskArgumentsT>
|
|
52
52
|
): TaskDefinition;
|
|
53
53
|
|
|
54
|
-
public task<
|
|
54
|
+
public task<TaskArgumentsT extends TaskArguments>(
|
|
55
55
|
name: string,
|
|
56
|
-
descriptionOrAction?: string | ActionType<
|
|
57
|
-
action?: ActionType<
|
|
56
|
+
descriptionOrAction?: string | ActionType<TaskArgumentsT>,
|
|
57
|
+
action?: ActionType<TaskArgumentsT>
|
|
58
58
|
): TaskDefinition {
|
|
59
59
|
return this._addTask(name, descriptionOrAction, action, false);
|
|
60
60
|
}
|
|
@@ -70,10 +70,10 @@ export class TasksDSL {
|
|
|
70
70
|
* @param action The task's action.
|
|
71
71
|
* @returns A task definition.
|
|
72
72
|
*/
|
|
73
|
-
public subtask<
|
|
73
|
+
public subtask<TaskArgumentsT extends TaskArguments>(
|
|
74
74
|
name: string,
|
|
75
75
|
description?: string,
|
|
76
|
-
action?: ActionType<
|
|
76
|
+
action?: ActionType<TaskArgumentsT>
|
|
77
77
|
): TaskDefinition;
|
|
78
78
|
|
|
79
79
|
/**
|
|
@@ -87,14 +87,14 @@ export class TasksDSL {
|
|
|
87
87
|
* @param action The task's action.
|
|
88
88
|
* @returns A task definition.
|
|
89
89
|
*/
|
|
90
|
-
public subtask<
|
|
90
|
+
public subtask<TaskArgumentsT extends TaskArguments>(
|
|
91
91
|
name: string,
|
|
92
|
-
action: ActionType<
|
|
92
|
+
action: ActionType<TaskArgumentsT>
|
|
93
93
|
): TaskDefinition;
|
|
94
|
-
public subtask<
|
|
94
|
+
public subtask<TaskArgumentsT extends TaskArguments>(
|
|
95
95
|
name: string,
|
|
96
|
-
descriptionOrAction?: string | ActionType<
|
|
97
|
-
action?: ActionType<
|
|
96
|
+
descriptionOrAction?: string | ActionType<TaskArgumentsT>,
|
|
97
|
+
action?: ActionType<TaskArgumentsT>
|
|
98
98
|
): TaskDefinition {
|
|
99
99
|
return this._addTask(name, descriptionOrAction, action, true);
|
|
100
100
|
}
|
|
@@ -108,10 +108,10 @@ export class TasksDSL {
|
|
|
108
108
|
return this._tasks;
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
private _addTask<
|
|
111
|
+
private _addTask<TaskArgumentsT extends TaskArguments>(
|
|
112
112
|
name: string,
|
|
113
|
-
descriptionOrAction?: string | ActionType<
|
|
114
|
-
action?: ActionType<
|
|
113
|
+
descriptionOrAction?: string | ActionType<TaskArgumentsT>,
|
|
114
|
+
action?: ActionType<TaskArgumentsT>,
|
|
115
115
|
isSubtask?: boolean
|
|
116
116
|
) {
|
|
117
117
|
const parentTaskDefinition = this._tasks[name];
|
|
@@ -73,7 +73,9 @@ export class SimpleTaskDefinition implements TaskDefinition {
|
|
|
73
73
|
* Sets the task's action.
|
|
74
74
|
* @param action The action.
|
|
75
75
|
*/
|
|
76
|
-
public setAction<
|
|
76
|
+
public setAction<TaskArgumentsT extends TaskArguments>(
|
|
77
|
+
action: ActionType<TaskArgumentsT>
|
|
78
|
+
) {
|
|
77
79
|
// TODO: There's probably something bad here. See types.ts for more info.
|
|
78
80
|
this.action = action;
|
|
79
81
|
return this;
|
|
@@ -569,7 +571,9 @@ export class OverriddenTaskDefinition implements TaskDefinition {
|
|
|
569
571
|
* Overrides the parent task's action.
|
|
570
572
|
* @param action the action.
|
|
571
573
|
*/
|
|
572
|
-
public setAction<
|
|
574
|
+
public setAction<TaskArgumentsT extends TaskArguments>(
|
|
575
|
+
action: ActionType<TaskArgumentsT>
|
|
576
|
+
) {
|
|
573
577
|
// TODO: There's probably something bad here. See types.ts for more info.
|
|
574
578
|
this._action = action;
|
|
575
579
|
return this;
|
|
@@ -82,40 +82,23 @@ export class JsonRpcHandler {
|
|
|
82
82
|
this._provider.addListener("notification", listener);
|
|
83
83
|
|
|
84
84
|
ws.on("message", async (msg) => {
|
|
85
|
-
let rpcReq: JsonRpcRequest |
|
|
86
|
-
let rpcResp: JsonRpcResponse |
|
|
85
|
+
let rpcReq: JsonRpcRequest | JsonRpcRequest[];
|
|
86
|
+
let rpcResp: JsonRpcResponse | JsonRpcResponse[];
|
|
87
87
|
|
|
88
88
|
try {
|
|
89
89
|
rpcReq = _readWsRequest(msg as string);
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
// so we can cleanup on websocket close.
|
|
99
|
-
if (
|
|
100
|
-
rpcReq.method === "eth_subscribe" &&
|
|
101
|
-
isSuccessfulJsonResponse(rpcResp)
|
|
102
|
-
) {
|
|
103
|
-
subscriptions.push(rpcResp.result);
|
|
104
|
-
}
|
|
91
|
+
rpcResp = Array.isArray(rpcReq)
|
|
92
|
+
? await Promise.all(
|
|
93
|
+
rpcReq.map((req) =>
|
|
94
|
+
this._handleSingleWsRequest(req, subscriptions)
|
|
95
|
+
)
|
|
96
|
+
)
|
|
97
|
+
: await this._handleSingleWsRequest(rpcReq, subscriptions);
|
|
105
98
|
} catch (error) {
|
|
106
99
|
rpcResp = _handleError(error);
|
|
107
100
|
}
|
|
108
101
|
|
|
109
|
-
// Validate the RPC response.
|
|
110
|
-
if (!isValidJsonResponse(rpcResp)) {
|
|
111
|
-
// Malformed response coming from the provider, report to user as an internal error.
|
|
112
|
-
rpcResp = _handleError(new InternalError("Internal error"));
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
if (rpcReq !== undefined) {
|
|
116
|
-
rpcResp.id = rpcReq.id;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
102
|
ws.send(JSON.stringify(rpcResp));
|
|
120
103
|
});
|
|
121
104
|
|
|
@@ -155,7 +138,9 @@ export class JsonRpcHandler {
|
|
|
155
138
|
res.end(JSON.stringify(rpcResp));
|
|
156
139
|
}
|
|
157
140
|
|
|
158
|
-
private async _handleSingleRequest(
|
|
141
|
+
private async _handleSingleRequest(
|
|
142
|
+
req: JsonRpcRequest
|
|
143
|
+
): Promise<JsonRpcResponse> {
|
|
159
144
|
if (!isValidJsonRequest(req)) {
|
|
160
145
|
return _handleError(new InvalidRequestError("Invalid request"));
|
|
161
146
|
}
|
|
@@ -182,6 +167,24 @@ export class JsonRpcHandler {
|
|
|
182
167
|
return rpcResp;
|
|
183
168
|
}
|
|
184
169
|
|
|
170
|
+
private async _handleSingleWsRequest(
|
|
171
|
+
rpcReq: JsonRpcRequest,
|
|
172
|
+
subscriptions: string[]
|
|
173
|
+
) {
|
|
174
|
+
const rpcResp = await this._handleSingleRequest(rpcReq);
|
|
175
|
+
|
|
176
|
+
// If eth_subscribe was successful, keep track of the subscription id,
|
|
177
|
+
// so we can cleanup on websocket close.
|
|
178
|
+
if (
|
|
179
|
+
rpcReq.method === "eth_subscribe" &&
|
|
180
|
+
isSuccessfulJsonResponse(rpcResp)
|
|
181
|
+
) {
|
|
182
|
+
subscriptions.push(rpcResp.result);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return rpcResp;
|
|
186
|
+
}
|
|
187
|
+
|
|
185
188
|
private _handleRequest = async (
|
|
186
189
|
req: JsonRpcRequest
|
|
187
190
|
): Promise<JsonRpcResponse> => {
|
|
@@ -218,7 +221,7 @@ const _readJsonHttpRequest = async (req: IncomingMessage): Promise<any> => {
|
|
|
218
221
|
return json;
|
|
219
222
|
};
|
|
220
223
|
|
|
221
|
-
const _readWsRequest = (msg: string): JsonRpcRequest => {
|
|
224
|
+
const _readWsRequest = (msg: string): JsonRpcRequest | JsonRpcRequest[] => {
|
|
222
225
|
let json: any;
|
|
223
226
|
try {
|
|
224
227
|
json = JSON.parse(msg);
|
|
@@ -32,6 +32,7 @@ export class EvmModule {
|
|
|
32
32
|
private readonly _node: HardhatNode,
|
|
33
33
|
private readonly _miningTimer: MiningTimer,
|
|
34
34
|
private readonly _logger: ModulesLogger,
|
|
35
|
+
private readonly _allowBlocksWithSameTimestamp: boolean,
|
|
35
36
|
private readonly _experimentalHardhatNetworkMessageTraceHooks: BoundExperimentalHardhatNetworkMessageTraceHook[] = []
|
|
36
37
|
) {}
|
|
37
38
|
|
|
@@ -86,12 +87,23 @@ export class EvmModule {
|
|
|
86
87
|
const latestBlock = await this._node.getLatestBlock();
|
|
87
88
|
const increment = BigInt(timestamp) - latestBlock.header.timestamp;
|
|
88
89
|
|
|
89
|
-
if (increment
|
|
90
|
+
if (increment < 0n) {
|
|
90
91
|
throw new InvalidInputError(
|
|
91
|
-
`Timestamp ${timestamp.toString()} is lower than
|
|
92
|
-
|
|
92
|
+
`Timestamp ${timestamp.toString()} is lower than the previous block's timestamp ${
|
|
93
|
+
latestBlock.header.timestamp
|
|
94
|
+
}`
|
|
93
95
|
);
|
|
94
96
|
}
|
|
97
|
+
|
|
98
|
+
if (!this._allowBlocksWithSameTimestamp && increment === 0n) {
|
|
99
|
+
throw new InvalidInputError(
|
|
100
|
+
`Timestamp ${timestamp.toString()} is equal to the previous block's timestamp.
|
|
101
|
+
|
|
102
|
+
Enable the "allowBlocksWithSameTimestamp" option in the Hardhat network configuration to allow this.
|
|
103
|
+
`
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
|
|
95
107
|
this._node.setNextBlockTimestamp(BigInt(timestamp));
|
|
96
108
|
return timestamp.toString();
|
|
97
109
|
}
|
|
@@ -24,7 +24,6 @@ interface CommonConfig {
|
|
|
24
24
|
hardfork: string;
|
|
25
25
|
minGasPrice: bigint;
|
|
26
26
|
networkId: number;
|
|
27
|
-
networkName: string;
|
|
28
27
|
allowUnlimitedContractSize?: boolean;
|
|
29
28
|
initialDate?: Date;
|
|
30
29
|
tracingConfig?: TracingConfig;
|
|
@@ -32,6 +31,7 @@ interface CommonConfig {
|
|
|
32
31
|
mempoolOrder: MempoolOrder;
|
|
33
32
|
coinbase: string;
|
|
34
33
|
chains: HardhatNetworkChainsConfig;
|
|
34
|
+
allowBlocksWithSameTimestamp: boolean;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export type LocalNodeConfig = CommonConfig;
|
|
@@ -146,6 +146,7 @@ export class HardhatNode extends EventEmitter {
|
|
|
146
146
|
mempoolOrder,
|
|
147
147
|
networkId,
|
|
148
148
|
chainId,
|
|
149
|
+
allowBlocksWithSameTimestamp,
|
|
149
150
|
} = config;
|
|
150
151
|
|
|
151
152
|
let stateManager: StateManager;
|
|
@@ -293,6 +294,7 @@ export class HardhatNode extends EventEmitter {
|
|
|
293
294
|
hardfork,
|
|
294
295
|
hardforkActivations,
|
|
295
296
|
mixHashGenerator,
|
|
297
|
+
allowBlocksWithSameTimestamp,
|
|
296
298
|
tracingConfig,
|
|
297
299
|
forkNetworkId,
|
|
298
300
|
forkBlockNum,
|
|
@@ -378,6 +380,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
378
380
|
public readonly hardfork: HardforkName,
|
|
379
381
|
private readonly _hardforkActivations: HardforkHistoryConfig,
|
|
380
382
|
private _mixHashGenerator: RandomBufferGenerator,
|
|
383
|
+
private _allowBlocksWithSameTimestamp: boolean,
|
|
381
384
|
tracingConfig?: TracingConfig,
|
|
382
385
|
private _forkNetworkId?: number,
|
|
383
386
|
private _forkBlockNumber?: bigint,
|
|
@@ -494,7 +497,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
494
497
|
const [, offsetShouldChange, newOffset] = timestampAndOffset;
|
|
495
498
|
|
|
496
499
|
const needsTimestampIncrease =
|
|
497
|
-
|
|
500
|
+
!this._allowBlocksWithSameTimestamp &&
|
|
501
|
+
(await this._timestampClashesWithPreviousBlockOne(blockTimestamp));
|
|
498
502
|
if (needsTimestampIncrease) {
|
|
499
503
|
blockTimestamp += 1n;
|
|
500
504
|
}
|