hardhat 3.0.0-next.4 → 3.0.0-next.6
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/CHANGELOG.md +24 -0
- package/dist/src/internal/builtin-plugins/coverage/index.d.ts +1 -0
- package/dist/src/internal/builtin-plugins/coverage/index.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/coverage/index.js +12 -6
- package/dist/src/internal/builtin-plugins/coverage/index.js.map +1 -1
- package/dist/src/internal/builtin-plugins/coverage/type-extensions.d.ts +7 -0
- package/dist/src/internal/builtin-plugins/coverage/type-extensions.d.ts.map +1 -0
- package/dist/src/internal/builtin-plugins/coverage/type-extensions.js +2 -0
- package/dist/src/internal/builtin-plugins/coverage/type-extensions.js.map +1 -0
- package/dist/src/internal/builtin-plugins/index.d.ts +1 -0
- package/dist/src/internal/builtin-plugins/index.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/index.js +2 -0
- package/dist/src/internal/builtin-plugins/index.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/base-provider.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/base-provider.js +2 -5
- package/dist/src/internal/builtin-plugins/network-manager/base-provider.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/config-resolution.d.ts +2 -1
- package/dist/src/internal/builtin-plugins/network-manager/config-resolution.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/config-resolution.js +76 -75
- package/dist/src/internal/builtin-plugins/network-manager/config-resolution.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/edr-context.js +2 -2
- package/dist/src/internal/builtin-plugins/network-manager/edr/edr-context.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.d.ts +2 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.js +6 -7
- package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/types/hardfork.d.ts +18 -3
- package/dist/src/internal/builtin-plugins/network-manager/edr/types/hardfork.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/types/hardfork.js +78 -25
- package/dist/src/internal/builtin-plugins/network-manager/edr/types/hardfork.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.d.ts +3 -5
- package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.js +71 -81
- package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/utils/hardfork.d.ts +3 -2
- package/dist/src/internal/builtin-plugins/network-manager/edr/utils/hardfork.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/utils/hardfork.js +9 -4
- package/dist/src/internal/builtin-plugins/network-manager/edr/utils/hardfork.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.js +5 -3
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/type-extensions/config.d.ts +2 -0
- package/dist/src/internal/builtin-plugins/network-manager/type-extensions/config.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/type-validation.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/type-validation.js +60 -26
- package/dist/src/internal/builtin-plugins/network-manager/type-validation.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/reporter.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/reporter.js +2 -2
- package/dist/src/internal/builtin-plugins/solidity-test/reporter.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.js +4 -2
- package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.js.map +1 -1
- package/dist/src/internal/builtin-plugins/telemetry/index.d.ts +4 -0
- package/dist/src/internal/builtin-plugins/telemetry/index.d.ts.map +1 -0
- package/dist/src/internal/builtin-plugins/telemetry/index.js +20 -0
- package/dist/src/internal/builtin-plugins/telemetry/index.js.map +1 -0
- package/dist/src/internal/builtin-plugins/telemetry/task-action.d.ts +8 -0
- package/dist/src/internal/builtin-plugins/telemetry/task-action.d.ts.map +1 -0
- package/dist/src/internal/builtin-plugins/telemetry/task-action.js +25 -0
- package/dist/src/internal/builtin-plugins/telemetry/task-action.js.map +1 -0
- package/dist/src/internal/cli/init/init.d.ts.map +1 -1
- package/dist/src/internal/cli/init/init.js +0 -4
- package/dist/src/internal/cli/init/init.js.map +1 -1
- package/dist/src/internal/cli/main.d.ts.map +1 -1
- package/dist/src/internal/cli/main.js +0 -3
- package/dist/src/internal/cli/main.js.map +1 -1
- package/dist/src/internal/cli/telemetry/analytics/analytics.d.ts +1 -1
- package/dist/src/internal/cli/telemetry/analytics/analytics.d.ts.map +1 -1
- package/dist/src/internal/cli/telemetry/analytics/analytics.js +7 -7
- package/dist/src/internal/cli/telemetry/analytics/analytics.js.map +1 -1
- package/dist/src/internal/cli/telemetry/analytics/types.d.ts +3 -3
- package/dist/src/internal/cli/telemetry/analytics/types.d.ts.map +1 -1
- package/dist/src/internal/cli/telemetry/sentry/subprocess.js +1 -0
- package/dist/src/internal/cli/telemetry/sentry/subprocess.js.map +1 -1
- package/dist/src/internal/cli/telemetry/telemetry-permissions.d.ts +5 -15
- package/dist/src/internal/cli/telemetry/telemetry-permissions.d.ts.map +1 -1
- package/dist/src/internal/cli/telemetry/telemetry-permissions.js +29 -65
- package/dist/src/internal/cli/telemetry/telemetry-permissions.js.map +1 -1
- package/dist/src/types/utils.d.ts +6 -0
- package/dist/src/types/utils.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/internal/builtin-plugins/coverage/index.ts +13 -6
- package/src/internal/builtin-plugins/coverage/type-extensions.ts +6 -0
- package/src/internal/builtin-plugins/index.ts +3 -0
- package/src/internal/builtin-plugins/network-manager/base-provider.ts +2 -7
- package/src/internal/builtin-plugins/network-manager/config-resolution.ts +86 -73
- package/src/internal/builtin-plugins/network-manager/edr/edr-context.ts +4 -4
- package/src/internal/builtin-plugins/network-manager/edr/edr-provider.ts +17 -17
- package/src/internal/builtin-plugins/network-manager/edr/types/hardfork.ts +75 -8
- package/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.ts +98 -91
- package/src/internal/builtin-plugins/network-manager/edr/utils/hardfork.ts +19 -5
- package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.ts +44 -33
- package/src/internal/builtin-plugins/network-manager/type-extensions/config.ts +2 -0
- package/src/internal/builtin-plugins/network-manager/type-validation.ts +79 -37
- package/src/internal/builtin-plugins/solidity-test/reporter.ts +4 -3
- package/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.ts +4 -2
- package/src/internal/builtin-plugins/telemetry/index.ts +23 -0
- package/src/internal/builtin-plugins/telemetry/task-action.ts +45 -0
- package/src/internal/cli/init/init.ts +0 -5
- package/src/internal/cli/main.ts +0 -5
- package/src/internal/cli/telemetry/analytics/analytics.ts +11 -11
- package/src/internal/cli/telemetry/analytics/types.ts +3 -3
- package/src/internal/cli/telemetry/sentry/subprocess.ts +1 -0
- package/src/internal/cli/telemetry/telemetry-permissions.ts +35 -84
- package/src/types/utils.ts +7 -0
- package/templates/01-node-test-runner-viem/package.json +2 -2
- package/templates/02-mocha-ethers/package.json +2 -2
- package/dist/src/internal/builtin-plugins/coverage/task-action.d.ts +0 -2
- package/dist/src/internal/builtin-plugins/coverage/task-action.d.ts.map +0 -1
- package/dist/src/internal/builtin-plugins/coverage/task-action.js +0 -5
- package/dist/src/internal/builtin-plugins/coverage/task-action.js.map +0 -1
- package/dist/src/internal/cli/prompt/prompt.d.ts +0 -9
- package/dist/src/internal/cli/prompt/prompt.d.ts.map +0 -1
- package/dist/src/internal/cli/prompt/prompt.js +0 -43
- package/dist/src/internal/cli/prompt/prompt.js.map +0 -1
- package/src/internal/builtin-plugins/coverage/task-action.ts +0 -9
- package/src/internal/cli/prompt/prompt.ts +0 -53
|
@@ -36,13 +36,24 @@ import {
|
|
|
36
36
|
MERGE,
|
|
37
37
|
SHANGHAI,
|
|
38
38
|
CANCUN,
|
|
39
|
-
|
|
39
|
+
OP_CHAIN_TYPE as EDR_OP_CHAIN_TYPE,
|
|
40
40
|
L1_CHAIN_TYPE as EDR_L1_CHAIN_TYPE,
|
|
41
41
|
GENERIC_CHAIN_TYPE as EDR_GENERIC_CHAIN_TYPE,
|
|
42
|
+
BEDROCK,
|
|
43
|
+
REGOLITH,
|
|
44
|
+
CANYON,
|
|
45
|
+
ECOTONE,
|
|
46
|
+
FJORD,
|
|
47
|
+
GRANITE,
|
|
48
|
+
HOLOCENE,
|
|
42
49
|
} from "@ignored/edr-optimism";
|
|
43
50
|
import { getUnprefixedHexString } from "@nomicfoundation/hardhat-utils/hex";
|
|
44
51
|
|
|
45
|
-
import {
|
|
52
|
+
import {
|
|
53
|
+
GENERIC_CHAIN_TYPE,
|
|
54
|
+
L1_CHAIN_TYPE,
|
|
55
|
+
OPTIMISM_CHAIN_TYPE,
|
|
56
|
+
} from "../../../../constants.js";
|
|
46
57
|
import { FixedValueConfigurationVariable } from "../../../../core/configuration-variables.js";
|
|
47
58
|
import { derivePrivateKeys } from "../../accounts/derive-private-keys.js";
|
|
48
59
|
import {
|
|
@@ -50,47 +61,84 @@ import {
|
|
|
50
61
|
EDR_NETWORK_DEFAULT_PRIVATE_KEYS,
|
|
51
62
|
isDefaultEdrNetworkHDAccountsConfig,
|
|
52
63
|
} from "../edr-provider.js";
|
|
53
|
-
import {
|
|
64
|
+
import { L1HardforkName, OpHardforkName } from "../types/hardfork.js";
|
|
65
|
+
|
|
66
|
+
import { getL1HardforkName, getOpHardforkName } from "./hardfork.js";
|
|
54
67
|
|
|
55
|
-
|
|
68
|
+
export function hardhatHardforkToEdrSpecId(
|
|
69
|
+
hardfork: string,
|
|
70
|
+
chainType: ChainType,
|
|
71
|
+
): string {
|
|
72
|
+
return chainType === OPTIMISM_CHAIN_TYPE
|
|
73
|
+
? hardhatOpHardforkToEdrSpecId(hardfork)
|
|
74
|
+
: hardhatL1HardforkToEdrSpecId(hardfork);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function hardhatOpHardforkToEdrSpecId(hardfork: string): string {
|
|
78
|
+
const hardforkName = getOpHardforkName(hardfork);
|
|
79
|
+
|
|
80
|
+
switch (hardforkName) {
|
|
81
|
+
case OpHardforkName.BEDROCK:
|
|
82
|
+
return BEDROCK;
|
|
83
|
+
case OpHardforkName.REGOLITH:
|
|
84
|
+
return REGOLITH;
|
|
85
|
+
case OpHardforkName.CANYON:
|
|
86
|
+
return CANYON;
|
|
87
|
+
case OpHardforkName.ECOTONE:
|
|
88
|
+
return ECOTONE;
|
|
89
|
+
case OpHardforkName.FJORD:
|
|
90
|
+
return FJORD;
|
|
91
|
+
case OpHardforkName.GRANITE:
|
|
92
|
+
return GRANITE;
|
|
93
|
+
case OpHardforkName.HOLOCENE:
|
|
94
|
+
return HOLOCENE;
|
|
95
|
+
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- trust but verify
|
|
96
|
+
default:
|
|
97
|
+
const _exhaustiveCheck: never = hardforkName;
|
|
98
|
+
throw new Error(
|
|
99
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- we want to print the fork
|
|
100
|
+
`Unknown hardfork name '${hardforkName as string}', this shouldn't happen`,
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
56
104
|
|
|
57
|
-
|
|
58
|
-
const hardforkName =
|
|
105
|
+
function hardhatL1HardforkToEdrSpecId(hardfork: string): string {
|
|
106
|
+
const hardforkName = getL1HardforkName(hardfork);
|
|
59
107
|
|
|
60
108
|
switch (hardforkName) {
|
|
61
|
-
case
|
|
109
|
+
case L1HardforkName.FRONTIER:
|
|
62
110
|
return FRONTIER;
|
|
63
|
-
case
|
|
111
|
+
case L1HardforkName.HOMESTEAD:
|
|
64
112
|
return HOMESTEAD;
|
|
65
|
-
case
|
|
113
|
+
case L1HardforkName.DAO:
|
|
66
114
|
return DAO_FORK;
|
|
67
|
-
case
|
|
115
|
+
case L1HardforkName.TANGERINE_WHISTLE:
|
|
68
116
|
return TANGERINE;
|
|
69
|
-
case
|
|
117
|
+
case L1HardforkName.SPURIOUS_DRAGON:
|
|
70
118
|
return SPURIOUS_DRAGON;
|
|
71
|
-
case
|
|
119
|
+
case L1HardforkName.BYZANTIUM:
|
|
72
120
|
return BYZANTIUM;
|
|
73
|
-
case
|
|
121
|
+
case L1HardforkName.CONSTANTINOPLE:
|
|
74
122
|
return CONSTANTINOPLE;
|
|
75
|
-
case
|
|
123
|
+
case L1HardforkName.PETERSBURG:
|
|
76
124
|
return PETERSBURG;
|
|
77
|
-
case
|
|
125
|
+
case L1HardforkName.ISTANBUL:
|
|
78
126
|
return ISTANBUL;
|
|
79
|
-
case
|
|
127
|
+
case L1HardforkName.MUIR_GLACIER:
|
|
80
128
|
return MUIR_GLACIER;
|
|
81
|
-
case
|
|
129
|
+
case L1HardforkName.BERLIN:
|
|
82
130
|
return BERLIN;
|
|
83
|
-
case
|
|
131
|
+
case L1HardforkName.LONDON:
|
|
84
132
|
return LONDON;
|
|
85
|
-
case
|
|
133
|
+
case L1HardforkName.ARROW_GLACIER:
|
|
86
134
|
return ARROW_GLACIER;
|
|
87
|
-
case
|
|
135
|
+
case L1HardforkName.GRAY_GLACIER:
|
|
88
136
|
return GRAY_GLACIER;
|
|
89
|
-
case
|
|
137
|
+
case L1HardforkName.MERGE:
|
|
90
138
|
return MERGE;
|
|
91
|
-
case
|
|
139
|
+
case L1HardforkName.SHANGHAI:
|
|
92
140
|
return SHANGHAI;
|
|
93
|
-
case
|
|
141
|
+
case L1HardforkName.CANCUN:
|
|
94
142
|
return CANCUN;
|
|
95
143
|
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- trust but verify
|
|
96
144
|
default:
|
|
@@ -102,49 +150,6 @@ export function hardhatHardforkToEdrSpecId(hardfork: string): string {
|
|
|
102
150
|
}
|
|
103
151
|
}
|
|
104
152
|
|
|
105
|
-
export function edrSpecIdToHardhatHardfork(specId: string): HardforkName {
|
|
106
|
-
switch (specId) {
|
|
107
|
-
case FRONTIER:
|
|
108
|
-
return HardforkName.FRONTIER;
|
|
109
|
-
case HOMESTEAD:
|
|
110
|
-
return HardforkName.HOMESTEAD;
|
|
111
|
-
case DAO_FORK:
|
|
112
|
-
return HardforkName.DAO;
|
|
113
|
-
case TANGERINE:
|
|
114
|
-
return HardforkName.TANGERINE_WHISTLE;
|
|
115
|
-
case SPURIOUS_DRAGON:
|
|
116
|
-
return HardforkName.SPURIOUS_DRAGON;
|
|
117
|
-
case BYZANTIUM:
|
|
118
|
-
return HardforkName.BYZANTIUM;
|
|
119
|
-
case CONSTANTINOPLE:
|
|
120
|
-
return HardforkName.CONSTANTINOPLE;
|
|
121
|
-
case PETERSBURG:
|
|
122
|
-
return HardforkName.PETERSBURG;
|
|
123
|
-
case ISTANBUL:
|
|
124
|
-
return HardforkName.ISTANBUL;
|
|
125
|
-
case MUIR_GLACIER:
|
|
126
|
-
return HardforkName.MUIR_GLACIER;
|
|
127
|
-
case BERLIN:
|
|
128
|
-
return HardforkName.BERLIN;
|
|
129
|
-
case LONDON:
|
|
130
|
-
return HardforkName.LONDON;
|
|
131
|
-
case ARROW_GLACIER:
|
|
132
|
-
return HardforkName.ARROW_GLACIER;
|
|
133
|
-
case GRAY_GLACIER:
|
|
134
|
-
return HardforkName.GRAY_GLACIER;
|
|
135
|
-
case MERGE:
|
|
136
|
-
return HardforkName.MERGE;
|
|
137
|
-
case SHANGHAI:
|
|
138
|
-
return HardforkName.SHANGHAI;
|
|
139
|
-
// HACK: EthereumJS doesn't support Cancun, so report Shanghai
|
|
140
|
-
case CANCUN:
|
|
141
|
-
return HardforkName.SHANGHAI;
|
|
142
|
-
|
|
143
|
-
default:
|
|
144
|
-
throw new Error(`Unknown spec id '${specId}', this shouldn't happen`);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
153
|
export function hardhatMiningIntervalToEdrMiningInterval(
|
|
149
154
|
config: EdrNetworkMiningConfig["interval"],
|
|
150
155
|
): bigint | IntervalRange | undefined {
|
|
@@ -274,28 +279,32 @@ export async function normalizeEdrNetworkAccountsConfig(
|
|
|
274
279
|
|
|
275
280
|
export function hardhatChainsToEdrChains(
|
|
276
281
|
chains: EdrNetworkChainsConfig,
|
|
282
|
+
chainType: ChainType,
|
|
277
283
|
): ChainConfig[] {
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
284
|
+
return (
|
|
285
|
+
Array.from(chains)
|
|
286
|
+
// Skip chains that don't match the expected chain type
|
|
287
|
+
.filter(([_, config]) => {
|
|
288
|
+
if (chainType === GENERIC_CHAIN_TYPE) {
|
|
289
|
+
// When "generic" is requested, include both "generic" and "l1" chains
|
|
290
|
+
return (
|
|
291
|
+
config.chainType === GENERIC_CHAIN_TYPE ||
|
|
292
|
+
config.chainType === L1_CHAIN_TYPE
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
return config.chainType === chainType;
|
|
297
|
+
})
|
|
298
|
+
.map(([chainId, config]) => ({
|
|
299
|
+
chainId: BigInt(chainId),
|
|
300
|
+
hardforks: Array.from(config.hardforkHistory).map(
|
|
301
|
+
([hardfork, blockNumber]) => ({
|
|
302
|
+
blockNumber: BigInt(blockNumber),
|
|
303
|
+
specId: hardhatHardforkToEdrSpecId(hardfork, config.chainType),
|
|
304
|
+
}),
|
|
305
|
+
),
|
|
306
|
+
}))
|
|
307
|
+
);
|
|
299
308
|
}
|
|
300
309
|
|
|
301
310
|
export async function hardhatForkingConfigToEdrForkConfig(
|
|
@@ -321,11 +330,9 @@ export async function hardhatForkingConfigToEdrForkConfig(
|
|
|
321
330
|
return fork;
|
|
322
331
|
}
|
|
323
332
|
|
|
324
|
-
export function hardhatChainTypeToEdrChainType(
|
|
325
|
-
chainType: ChainType | undefined,
|
|
326
|
-
): string {
|
|
333
|
+
export function hardhatChainTypeToEdrChainType(chainType: ChainType): string {
|
|
327
334
|
if (chainType === OPTIMISM_CHAIN_TYPE) {
|
|
328
|
-
return
|
|
335
|
+
return EDR_OP_CHAIN_TYPE;
|
|
329
336
|
}
|
|
330
337
|
|
|
331
338
|
if (chainType === L1_CHAIN_TYPE) {
|
|
@@ -1,16 +1,30 @@
|
|
|
1
1
|
import { assertHardhatInvariant } from "@nomicfoundation/hardhat-errors";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { L1HardforkName, OpHardforkName } from "../types/hardfork.js";
|
|
4
4
|
|
|
5
|
-
export function
|
|
5
|
+
export function getL1HardforkName(name: string): L1HardforkName {
|
|
6
6
|
const hardforkName =
|
|
7
|
-
Object.values(
|
|
8
|
-
Object.values<string>(
|
|
7
|
+
Object.values(L1HardforkName)[
|
|
8
|
+
Object.values<string>(L1HardforkName).indexOf(name)
|
|
9
9
|
];
|
|
10
10
|
|
|
11
11
|
assertHardhatInvariant(
|
|
12
12
|
hardforkName !== undefined,
|
|
13
|
-
`Invalid
|
|
13
|
+
`Invalid hardfork name ${name}`,
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
return hardforkName;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function getOpHardforkName(name: string): OpHardforkName {
|
|
20
|
+
const hardforkName =
|
|
21
|
+
Object.values(OpHardforkName)[
|
|
22
|
+
Object.values<string>(OpHardforkName).indexOf(name)
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
assertHardhatInvariant(
|
|
26
|
+
hardforkName !== undefined,
|
|
27
|
+
`Invalid hardfork name ${name}`,
|
|
14
28
|
);
|
|
15
29
|
|
|
16
30
|
return hardforkName;
|
|
@@ -314,42 +314,53 @@ export class LocalAccountsHandler extends ChainId implements RequestHandler {
|
|
|
314
314
|
);
|
|
315
315
|
|
|
316
316
|
let transaction;
|
|
317
|
+
// strict mode is not meant to be used in the context of hardhat
|
|
318
|
+
const strictMode = false;
|
|
317
319
|
if (txData.maxFeePerGas !== undefined) {
|
|
318
|
-
transaction = Transaction.prepare(
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
320
|
+
transaction = Transaction.prepare(
|
|
321
|
+
{
|
|
322
|
+
type: "eip1559",
|
|
323
|
+
to: checksummedAddress,
|
|
324
|
+
nonce: txData.nonce,
|
|
325
|
+
chainId: txData.chainId ?? toBigInt(chainId),
|
|
326
|
+
value: txData.value !== undefined ? txData.value : 0n,
|
|
327
|
+
data: txData.data !== undefined ? bytesToHexString(txData.data) : "",
|
|
328
|
+
gasLimit: txData.gasLimit,
|
|
329
|
+
maxFeePerGas: txData.maxFeePerGas,
|
|
330
|
+
maxPriorityFeePerGas: txData.maxPriorityFeePerGas,
|
|
331
|
+
accessList: accessList ?? [],
|
|
332
|
+
},
|
|
333
|
+
strictMode,
|
|
334
|
+
);
|
|
330
335
|
} else if (accessList !== undefined) {
|
|
331
|
-
transaction = Transaction.prepare(
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
336
|
+
transaction = Transaction.prepare(
|
|
337
|
+
{
|
|
338
|
+
type: "eip2930",
|
|
339
|
+
to: checksummedAddress,
|
|
340
|
+
nonce: txData.nonce,
|
|
341
|
+
chainId: txData.chainId ?? toBigInt(chainId),
|
|
342
|
+
value: txData.value !== undefined ? txData.value : 0n,
|
|
343
|
+
data: txData.data !== undefined ? bytesToHexString(txData.data) : "",
|
|
344
|
+
gasPrice: txData.gasPrice ?? 0n,
|
|
345
|
+
gasLimit: txData.gasLimit,
|
|
346
|
+
accessList,
|
|
347
|
+
},
|
|
348
|
+
strictMode,
|
|
349
|
+
);
|
|
342
350
|
} else {
|
|
343
|
-
transaction = Transaction.prepare(
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
351
|
+
transaction = Transaction.prepare(
|
|
352
|
+
{
|
|
353
|
+
type: "legacy",
|
|
354
|
+
to: checksummedAddress,
|
|
355
|
+
nonce: txData.nonce,
|
|
356
|
+
chainId: txData.chainId ?? toBigInt(chainId),
|
|
357
|
+
value: txData.value !== undefined ? txData.value : 0n,
|
|
358
|
+
data: txData.data !== undefined ? bytesToHexString(txData.data) : "",
|
|
359
|
+
gasPrice: txData.gasPrice ?? 0n,
|
|
360
|
+
gasLimit: txData.gasLimit,
|
|
361
|
+
},
|
|
362
|
+
strictMode,
|
|
363
|
+
);
|
|
353
364
|
}
|
|
354
365
|
|
|
355
366
|
const signedTransaction = transaction.signBy(privateKey);
|
|
@@ -109,6 +109,7 @@ declare module "../../../../types/config.js" {
|
|
|
109
109
|
>;
|
|
110
110
|
|
|
111
111
|
export interface EdrNetworkChainUserConfig {
|
|
112
|
+
chainType?: ChainType;
|
|
112
113
|
hardforkHistory?: HardforkHistoryUserConfig;
|
|
113
114
|
}
|
|
114
115
|
|
|
@@ -227,6 +228,7 @@ declare module "../../../../types/config.js" {
|
|
|
227
228
|
>;
|
|
228
229
|
|
|
229
230
|
export interface EdrNetworkChainConfig {
|
|
231
|
+
chainType: ChainType;
|
|
230
232
|
hardforkHistory: HardforkHistoryConfig;
|
|
231
233
|
}
|
|
232
234
|
|
|
@@ -33,8 +33,10 @@ import {
|
|
|
33
33
|
|
|
34
34
|
import {
|
|
35
35
|
hardforkGte,
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
L1HardforkName,
|
|
37
|
+
isValidHardforkName,
|
|
38
|
+
getHardforks,
|
|
39
|
+
getCurrentHardfork,
|
|
38
40
|
} from "./edr/types/hardfork.js";
|
|
39
41
|
|
|
40
42
|
const nonnegativeNumberSchema = z.number().nonnegative();
|
|
@@ -43,7 +45,6 @@ const nonnegativeBigIntSchema = z.bigint().nonnegative();
|
|
|
43
45
|
|
|
44
46
|
const blockNumberSchema = nonnegativeIntSchema;
|
|
45
47
|
const chainIdSchema = nonnegativeIntSchema;
|
|
46
|
-
const hardforkNameSchema = z.nativeEnum(HardforkName);
|
|
47
48
|
|
|
48
49
|
const accountsPrivateKeyUserConfigSchema = unionType(
|
|
49
50
|
[
|
|
@@ -139,12 +140,10 @@ const edrNetworkAccountsUserConfigSchema = conditionalUnionType(
|
|
|
139
140
|
`Expected an array with with objects with private key and balance or Configuration Variables, or an object with HD account details`,
|
|
140
141
|
);
|
|
141
142
|
|
|
142
|
-
const hardforkHistoryUserConfigSchema = z.map(
|
|
143
|
-
hardforkNameSchema,
|
|
144
|
-
blockNumberSchema,
|
|
145
|
-
);
|
|
143
|
+
const hardforkHistoryUserConfigSchema = z.map(z.string(), blockNumberSchema);
|
|
146
144
|
|
|
147
145
|
const edrNetworkChainUserConfigSchema = z.object({
|
|
146
|
+
chainType: z.optional(chainTypeUserConfigSchema),
|
|
148
147
|
hardforkHistory: z.optional(hardforkHistoryUserConfigSchema),
|
|
149
148
|
});
|
|
150
149
|
|
|
@@ -202,7 +201,7 @@ const edrNetworkUserConfigSchema = z.object({
|
|
|
202
201
|
enableRip7212: z.optional(z.boolean()),
|
|
203
202
|
enableTransientStorage: z.optional(z.boolean()),
|
|
204
203
|
forking: z.optional(edrNetworkForkingUserConfigSchema),
|
|
205
|
-
hardfork: z.optional(
|
|
204
|
+
hardfork: z.optional(z.string()),
|
|
206
205
|
initialBaseFeePerGas: z.optional(gasUnitUserConfigSchema),
|
|
207
206
|
initialDate: z.optional(
|
|
208
207
|
unionType([z.string(), z.instanceof(Date)], "Expected a string or a Date"),
|
|
@@ -221,54 +220,97 @@ const baseNetworkUserConfigSchema = z.discriminatedUnion("type", [
|
|
|
221
220
|
]);
|
|
222
221
|
|
|
223
222
|
function refineEdrNetworkUserConfig(
|
|
224
|
-
networkConfig:
|
|
223
|
+
networkConfig: NetworkUserConfig,
|
|
225
224
|
ctx: RefinementCtx,
|
|
226
225
|
): void {
|
|
227
226
|
if (networkConfig.type === "edr") {
|
|
228
227
|
const {
|
|
229
|
-
|
|
228
|
+
chainType = GENERIC_CHAIN_TYPE,
|
|
229
|
+
hardfork,
|
|
230
|
+
chains,
|
|
230
231
|
minGasPrice,
|
|
231
232
|
initialBaseFeePerGas,
|
|
232
233
|
enableTransientStorage,
|
|
233
234
|
} = networkConfig;
|
|
234
235
|
|
|
235
|
-
if (
|
|
236
|
-
|
|
236
|
+
if (hardfork !== undefined && !isValidHardforkName(hardfork, chainType)) {
|
|
237
|
+
ctx.addIssue({
|
|
238
|
+
code: z.ZodIssueCode.custom,
|
|
239
|
+
path: ["hardfork"],
|
|
240
|
+
message: `Invalid hardfork name ${hardfork} for chainType ${chainType}. Expected ${getHardforks(
|
|
241
|
+
chainType,
|
|
242
|
+
).join(" | ")}.`,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if (chains !== undefined) {
|
|
247
|
+
Array.from(chains).forEach(([chainId, chainConfig], chainIdx) => {
|
|
248
|
+
if (chainConfig.hardforkHistory === undefined) {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
const type = chainConfig.chainType ?? GENERIC_CHAIN_TYPE;
|
|
253
|
+
Array.from(chainConfig.hardforkHistory).forEach(
|
|
254
|
+
([name], hardforkIdx) => {
|
|
255
|
+
if (!isValidHardforkName(name, type)) {
|
|
256
|
+
ctx.addIssue({
|
|
257
|
+
code: z.ZodIssueCode.custom,
|
|
258
|
+
path: [
|
|
259
|
+
"chains",
|
|
260
|
+
chainIdx,
|
|
261
|
+
"value",
|
|
262
|
+
"hardforkHistory",
|
|
263
|
+
hardforkIdx,
|
|
264
|
+
"value",
|
|
265
|
+
],
|
|
266
|
+
message: `Invalid hardfork name ${name} found in chain ${chainId}. Expected ${getHardforks(type).join(" | ")}.`,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
);
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
const resolvedHardfork = hardfork ?? getCurrentHardfork(chainType);
|
|
275
|
+
if (chainType === L1_CHAIN_TYPE || chainType === GENERIC_CHAIN_TYPE) {
|
|
276
|
+
if (hardforkGte(resolvedHardfork, L1HardforkName.LONDON, chainType)) {
|
|
277
|
+
if (minGasPrice !== undefined) {
|
|
278
|
+
ctx.addIssue({
|
|
279
|
+
code: z.ZodIssueCode.custom,
|
|
280
|
+
message:
|
|
281
|
+
"minGasPrice is not valid for networks with EIP-1559. Try an older hardfork or remove it.",
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
} else {
|
|
285
|
+
if (initialBaseFeePerGas !== undefined) {
|
|
286
|
+
ctx.addIssue({
|
|
287
|
+
code: z.ZodIssueCode.custom,
|
|
288
|
+
message:
|
|
289
|
+
"initialBaseFeePerGas is only valid for networks with EIP-1559. Try a newer hardfork or remove it.",
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
if (
|
|
295
|
+
!hardforkGte(resolvedHardfork, L1HardforkName.CANCUN, chainType) &&
|
|
296
|
+
enableTransientStorage === true
|
|
297
|
+
) {
|
|
237
298
|
ctx.addIssue({
|
|
238
299
|
code: z.ZodIssueCode.custom,
|
|
239
|
-
message:
|
|
240
|
-
"minGasPrice is not valid for networks with EIP-1559. Try an older hardfork or remove it.",
|
|
300
|
+
message: `'enableTransientStorage' is not supported for hardforks before 'cancun'. Please use a hardfork from 'cancun' onwards to enable this feature.`,
|
|
241
301
|
});
|
|
242
302
|
}
|
|
243
|
-
|
|
244
|
-
|
|
303
|
+
if (
|
|
304
|
+
hardforkGte(resolvedHardfork, L1HardforkName.CANCUN, chainType) &&
|
|
305
|
+
enableTransientStorage === false
|
|
306
|
+
) {
|
|
245
307
|
ctx.addIssue({
|
|
246
308
|
code: z.ZodIssueCode.custom,
|
|
247
|
-
message:
|
|
248
|
-
"initialBaseFeePerGas is only valid for networks with EIP-1559. Try a newer hardfork or remove it.",
|
|
309
|
+
message: `'enableTransientStorage' must be enabled for hardforks 'cancun' or later. To disable this feature, use a hardfork before 'cancun'.`,
|
|
249
310
|
});
|
|
250
311
|
}
|
|
251
312
|
}
|
|
252
313
|
|
|
253
|
-
if (
|
|
254
|
-
!hardforkGte(hardfork, HardforkName.CANCUN) &&
|
|
255
|
-
enableTransientStorage === true
|
|
256
|
-
) {
|
|
257
|
-
ctx.addIssue({
|
|
258
|
-
code: z.ZodIssueCode.custom,
|
|
259
|
-
message: `'enableTransientStorage' is not supported for hardforks before 'cancun'. Please use a hardfork from 'cancun' onwards to enable this feature.`,
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
if (
|
|
263
|
-
hardforkGte(hardfork, HardforkName.CANCUN) &&
|
|
264
|
-
enableTransientStorage === false
|
|
265
|
-
) {
|
|
266
|
-
ctx.addIssue({
|
|
267
|
-
code: z.ZodIssueCode.custom,
|
|
268
|
-
message: `'enableTransientStorage' must be enabled for hardforks 'cancun' or later. To disable this feature, use a hardfork before 'cancun'.`,
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
|
|
272
314
|
if (
|
|
273
315
|
typeof networkConfig.mining?.interval === "number" ||
|
|
274
316
|
Array.isArray(networkConfig.mining?.interval)
|
|
@@ -176,9 +176,10 @@ export async function* testReporter(
|
|
|
176
176
|
failure.counterexample !== undefined &&
|
|
177
177
|
failure.counterexample !== null
|
|
178
178
|
) {
|
|
179
|
-
const counterexamples =
|
|
180
|
-
|
|
181
|
-
|
|
179
|
+
const counterexamples =
|
|
180
|
+
"sequence" in failure.counterexample
|
|
181
|
+
? failure.counterexample.sequence
|
|
182
|
+
: [failure.counterexample];
|
|
182
183
|
|
|
183
184
|
for (const counterexample of counterexamples) {
|
|
184
185
|
const details = Object.entries(counterexample).map(
|
|
@@ -46,13 +46,15 @@ export function getMessageFromLastStackTraceEntry(
|
|
|
46
46
|
case StackTraceEntryType.DIRECT_LIBRARY_CALL_ERROR:
|
|
47
47
|
return `Library was called directly`;
|
|
48
48
|
|
|
49
|
+
/* These types are not associate with a more detailed error message */
|
|
49
50
|
case StackTraceEntryType.UNRECOGNIZED_CREATE_ERROR:
|
|
50
51
|
case StackTraceEntryType.UNRECOGNIZED_CONTRACT_ERROR: {
|
|
51
|
-
return
|
|
52
|
+
return undefined;
|
|
52
53
|
}
|
|
53
54
|
|
|
55
|
+
/* These types are not associate with a more detailed error message */
|
|
54
56
|
case StackTraceEntryType.REVERT_ERROR: {
|
|
55
|
-
return
|
|
57
|
+
return undefined;
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
case StackTraceEntryType.PANIC_ERROR:
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { HardhatPlugin } from "../../../types/plugins.js";
|
|
2
|
+
|
|
3
|
+
import { task } from "../../core/config.js";
|
|
4
|
+
|
|
5
|
+
const hardhatPlugin: HardhatPlugin = {
|
|
6
|
+
id: "builtin:telemetry",
|
|
7
|
+
tasks: [
|
|
8
|
+
task("telemetry", "Displays and modifies your telemetry settings")
|
|
9
|
+
.addFlag({
|
|
10
|
+
name: "enable",
|
|
11
|
+
description: "Enable telemetry",
|
|
12
|
+
})
|
|
13
|
+
.addFlag({
|
|
14
|
+
name: "disable",
|
|
15
|
+
description: "Disable telemetry",
|
|
16
|
+
})
|
|
17
|
+
.setAction(import.meta.resolve("./task-action.js"))
|
|
18
|
+
.build(),
|
|
19
|
+
],
|
|
20
|
+
npmPackage: "hardhat",
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export default hardhatPlugin;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { NewTaskActionFunction } from "../../../types/tasks.js";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
isTelemetryAllowed,
|
|
5
|
+
setTelemetryEnabled,
|
|
6
|
+
} from "../../cli/telemetry/telemetry-permissions.js";
|
|
7
|
+
|
|
8
|
+
interface TelemetryActionArguments {
|
|
9
|
+
enable: boolean;
|
|
10
|
+
disable: boolean;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const configureTelemetry: NewTaskActionFunction<
|
|
14
|
+
TelemetryActionArguments
|
|
15
|
+
> = async ({ enable, disable }) => {
|
|
16
|
+
if (enable && disable) {
|
|
17
|
+
console.error("Cannot enable and disable telemetry at the same time");
|
|
18
|
+
process.exitCode = 1;
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (enable) {
|
|
23
|
+
console.log("Enabling telemetry...");
|
|
24
|
+
await setTelemetryEnabled(true);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (disable) {
|
|
28
|
+
console.log("Disabling telemetry...");
|
|
29
|
+
await setTelemetryEnabled(false);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const consent = await isTelemetryAllowed();
|
|
33
|
+
|
|
34
|
+
if (consent) {
|
|
35
|
+
console.log(
|
|
36
|
+
"Telemetry is now enabled, to disable it run `npx hardhat telemetry --disable`",
|
|
37
|
+
);
|
|
38
|
+
} else {
|
|
39
|
+
console.log(
|
|
40
|
+
"Telemetry is now disabled, to enable it run `npx hardhat telemetry --enable`",
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export default configureTelemetry;
|