hardhat-deploy 2.0.0-next.44 → 2.0.0-next.46

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/src/helpers.ts CHANGED
@@ -14,6 +14,7 @@ import {
14
14
  UnresolvedNetworkSpecificData,
15
15
  loadEnvironment,
16
16
  enhanceEnvIfNeeded,
17
+ chainByCanonicalName,
17
18
  } from 'rocketh';
18
19
 
19
20
  export function setupHardhatDeploy<
@@ -22,12 +23,12 @@ export function setupHardhatDeploy<
22
23
  Data extends UnresolvedNetworkSpecificData = UnresolvedNetworkSpecificData
23
24
  >(extensions: Extensions) {
24
25
  async function loadEnvironmentFromHardhatWithExtensions(
25
- required: {hre: HardhatRuntimeEnvironment; connection?: NetworkConnection},
26
- options?: {
27
- useChainIdOfForkedNetwork?: boolean;
28
- }
26
+ required: {hre: HardhatRuntimeEnvironment; connection?: NetworkConnection}
27
+ // options?: {
28
+ // useChainIdOfForkedNetwork?: boolean;
29
+ // }
29
30
  ) {
30
- const env = await loadEnvironmentFromHardhat<NamedAccounts, Data>(required, options);
31
+ const env = await loadEnvironmentFromHardhat<NamedAccounts, Data>(required);
31
32
  return enhanceEnvIfNeeded(env, extensions);
32
33
  }
33
34
 
@@ -36,52 +37,55 @@ export function setupHardhatDeploy<
36
37
  };
37
38
  }
38
39
 
39
- export async function loadEnvironmentFromHardhat<
40
- NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts,
41
- Data extends UnresolvedNetworkSpecificData = UnresolvedNetworkSpecificData
42
- >(
43
- params: {hre: HardhatRuntimeEnvironment; connection?: NetworkConnection},
44
- options?: {
45
- useChainIdOfForkedNetwork?: boolean;
46
- }
47
- ): Promise<Environment<NamedAccounts, Data>> {
48
- const connection = params.connection || (await params.hre.network.connect());
40
+ export async function generateForkConfig(
41
+ params: {hre: HardhatRuntimeEnvironment; connection?: NetworkConnection}
42
+ // options?: {
43
+ // useChainIdOfForkedNetwork?: boolean;
44
+ // }
45
+ ): Promise<{provider: any; environment: string | {fork: string}; connection: NetworkConnection; isFork: boolean}> {
46
+ const fork = process.env.HARDHAT_FORK as string | undefined;
47
+
48
+ const connection =
49
+ params.connection || fork
50
+ ? await params.hre.network.connect({network: 'fork'})
51
+ : await params.hre.network.connect();
52
+
49
53
  let provider: any = connection.provider;
50
- let network: string | {fork: string} = connection.networkName;
54
+ let environment: string | {fork: string} = connection.networkName;
51
55
  let forkChainId: number | undefined;
52
- const fork = process.env.HARDHAT_FORK as string | undefined;
56
+
53
57
  if (fork) {
54
- if (options?.useChainIdOfForkedNetwork) {
55
- const forkNetworkConfig = params.hre.config.networks[fork];
58
+ // if (options?.useChainIdOfForkedNetwork) {
59
+ // const forkNetworkConfig = params.hre.config.networks[fork];
56
60
 
57
- if (forkNetworkConfig.type === 'edr-simulated') {
58
- forkChainId = forkNetworkConfig.chainId;
59
- } else if (forkNetworkConfig.chainId) {
60
- forkChainId = forkNetworkConfig.chainId;
61
- } else {
62
- if ('url' in forkNetworkConfig) {
63
- const url = await forkNetworkConfig.url.getUrl();
64
- const response = await fetch(url, {
65
- method: 'POST',
66
- headers: {
67
- 'Content-Type': 'application/json',
68
- },
69
- body: JSON.stringify({
70
- jsonrpc: '2.0',
71
- id: 1,
72
- method: 'eth_chainId',
73
- params: [],
74
- }),
75
- });
76
- const json = (await response.json()) as {result: string};
77
- forkChainId = Number(json.result);
78
- } else {
79
- throw new Error(`cannot fetch chainId`);
80
- }
81
- }
82
- }
61
+ // if (forkNetworkConfig.type === 'edr-simulated') {
62
+ // forkChainId = forkNetworkConfig.chainId;
63
+ // } else if (forkNetworkConfig.chainId) {
64
+ // forkChainId = forkNetworkConfig.chainId;
65
+ // } else {
66
+ // if ('url' in forkNetworkConfig) {
67
+ // const url = await forkNetworkConfig.url.getUrl();
68
+ // const response = await fetch(url, {
69
+ // method: 'POST',
70
+ // headers: {
71
+ // 'Content-Type': 'application/json',
72
+ // },
73
+ // body: JSON.stringify({
74
+ // jsonrpc: '2.0',
75
+ // id: 1,
76
+ // method: 'eth_chainId',
77
+ // params: [],
78
+ // }),
79
+ // });
80
+ // const json = (await response.json()) as {result: string};
81
+ // forkChainId = Number(json.result);
82
+ // } else {
83
+ // throw new Error(`cannot fetch chainId`);
84
+ // }
85
+ // }
86
+ // }
83
87
 
84
- network = {
88
+ environment = {
85
89
  fork,
86
90
  };
87
91
  }
@@ -107,13 +111,28 @@ export async function loadEnvironmentFromHardhat<
107
111
  });
108
112
  }
109
113
 
114
+ return {provider, environment, connection, isFork: !!fork};
115
+ }
116
+
117
+ export async function loadEnvironmentFromHardhat<
118
+ NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts,
119
+ Data extends UnresolvedNetworkSpecificData = UnresolvedNetworkSpecificData
120
+ >(
121
+ params: {hre: HardhatRuntimeEnvironment; connection?: NetworkConnection}
122
+ // TODO ?
123
+ // options?: {
124
+ // useChainIdOfForkedNetwork?: boolean;
125
+ // }
126
+ ): Promise<Environment<NamedAccounts, Data>> {
127
+ const {connection, environment, provider, isFork} = await generateForkConfig(params);
110
128
  // console.log(`loading environments...`);
111
129
  return loadEnvironment<NamedAccounts, Data>({
112
130
  provider,
113
- network,
131
+ environment,
114
132
  extra: {
115
133
  connection,
116
134
  },
135
+ saveDeployments: isFork ? false : undefined,
117
136
  });
118
137
  }
119
138
 
@@ -202,28 +221,27 @@ export function addNetworksFromEnv(networks?: Record<string, NetworkUserConfig>)
202
221
  return newNetworks;
203
222
  }
204
223
 
205
- export function populateNetworksFromEnv(
206
- networks: Record<string, Omit<NetworkUserConfig, 'accounts' | 'url'> | EdrNetworkUserConfig>
224
+ export function addNetworksFromKnownList(
225
+ networks?: Record<string, NetworkUserConfig>
207
226
  ): Record<string, NetworkUserConfig> {
208
- const newNetworks: Record<string, NetworkUserConfig> = {};
209
- for (const networkName of Object.keys(networks)) {
210
- const network = networks[networkName];
211
- if (network.type === 'edr-simulated') {
212
- // we leave memory network alone
213
- newNetworks[networkName] = network as EdrNetworkUserConfig;
214
- } else {
215
- const url = getRPC(networkName);
227
+ const newNetworks: Record<string, NetworkUserConfig> = networks ? {...networks} : {};
228
+ const canonicalNames = Object.keys(chainByCanonicalName);
229
+
230
+ for (const canonicalName of canonicalNames) {
231
+ const chain = chainByCanonicalName[canonicalName];
232
+ const url = chain.rpcUrls.default.http[0];
233
+ if (!newNetworks[canonicalName]) {
216
234
  if (url) {
217
- newNetworks[networkName] = {
218
- ...network,
235
+ newNetworks[canonicalName] = {
236
+ type: 'http',
219
237
  url,
220
- accounts: getAccounts(networkName),
238
+ accounts: getAccounts(canonicalName),
221
239
  };
222
240
  } else {
223
- if (!('url' in network) || !network.url) {
224
- console.error(`no url for network ${networkName}`);
225
- }
241
+ console.error(`no url for chain ${canonicalName}`);
226
242
  }
243
+ } else {
244
+ // console.error(`duplicated chain ${canonicalName}`);
227
245
  }
228
246
  }
229
247
  return newNetworks;
@@ -262,17 +280,15 @@ export function addForkConfiguration(networks: Record<string, NetworkUserConfig>
262
280
  }
263
281
  }
264
282
 
265
- const existingHardhat: EdrNetworkUserConfig =
266
- networks.hardhat && networks.hardhat.type === 'edr-simulated'
267
- ? networks.hardhat
268
- : {type: 'edr-simulated', chainType: 'l1'};
283
+ const existingForkConfiguration: EdrNetworkUserConfig =
284
+ networks.fork && networks.fork.type === 'edr-simulated' ? networks.fork : {type: 'edr-simulated', chainType: 'l1'};
269
285
 
270
286
  const newNetworks: Record<string, NetworkUserConfig> = {
271
- ...populateNetworksFromEnv(networks),
272
- hardhat: {
273
- ...existingHardhat,
287
+ ...networks,
288
+ fork: {
289
+ ...existingForkConfiguration,
274
290
  ...{
275
- accounts: hardhatAccounts || existingHardhat?.accounts,
291
+ accounts: hardhatAccounts || existingForkConfiguration?.accounts,
276
292
  forking: forkURL
277
293
  ? {
278
294
  url: forkURL,
@@ -1,5 +1,6 @@
1
1
  import {NewTaskActionFunction} from 'hardhat/types/tasks';
2
2
  import {loadAndExecuteDeployments} from 'rocketh';
3
+ import {generateForkConfig} from '../helpers.js';
3
4
 
4
5
  interface RunActionArguments {
5
6
  saveDeployments: string;
@@ -10,7 +11,9 @@ interface RunActionArguments {
10
11
  const runScriptWithHardhat: NewTaskActionFunction<RunActionArguments> = async (args, hre) => {
11
12
  let saveDeployments = true;
12
13
  let skipPrompts = args.skipPrompts ? true : false;
13
- const connection = await hre.network.connect();
14
+
15
+ const {connection, environment, isFork, provider} = await generateForkConfig({hre});
16
+
14
17
  const isMemoryNetwork = connection.networkConfig.type == 'edr-simulated';
15
18
  if (isMemoryNetwork) {
16
19
  skipPrompts = true;
@@ -23,11 +26,11 @@ const runScriptWithHardhat: NewTaskActionFunction<RunActionArguments> = async (a
23
26
 
24
27
  await loadAndExecuteDeployments({
25
28
  logLevel: 1,
26
- provider: connection.provider as unknown as any, // TODO type
27
- network: process.env.HARDHAT_FORK ? {fork: process.env.HARDHAT_FORK} : connection.networkName,
28
- saveDeployments,
29
+ provider,
30
+ environment: environment,
31
+ saveDeployments: isFork ? false : saveDeployments,
29
32
  askBeforeProceeding: skipPrompts ? false : true,
30
- tags,
33
+ tags: tags?.split(','),
31
34
  // reportGasUse: args.skipGasReport ? false : true,
32
35
  extra: {connection},
33
36
  });