rocketh 0.15.15 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/environment/deployment-store.d.ts +3 -0
- package/dist/environment/deployment-store.d.ts.map +1 -0
- package/dist/environment/deployment-store.js +49 -0
- package/dist/environment/deployment-store.js.map +1 -0
- package/dist/environment/utils/artifacts.d.ts +4 -4
- package/dist/executor/index.d.ts +15 -6
- package/dist/executor/index.d.ts.map +1 -1
- package/dist/executor/index.js +39 -316
- package/dist/executor/index.js.map +1 -1
- package/dist/index.d.ts +9 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -7
- package/dist/index.js.map +1 -1
- package/dist/internal/logging.d.ts +1 -1
- package/dist/internal/logging.d.ts.map +1 -1
- package/package.json +9 -12
- package/src/cli.ts +2 -1
- package/src/environment/deployment-store.ts +72 -0
- package/src/executor/index.ts +89 -398
- package/src/index.ts +10 -11
- package/src/environment/deployments.ts +0 -135
- package/src/environment/index.ts +0 -696
- package/src/environment/providers/BaseProvider.ts +0 -13
- package/src/environment/providers/TransactionHashTracker.ts +0 -22
- package/src/environment/utils/artifacts.ts +0 -176
- package/src/environment/utils/chains.ts +0 -192
- package/src/executor/setup.test.ts +0 -151
- package/src/internal/logging.ts +0 -80
- package/src/internal/types.ts +0 -5
- package/src/types.ts +0 -601
- package/src/utils/eth.ts +0 -96
- package/src/utils/extensions.test.ts +0 -53
- package/src/utils/extensions.ts +0 -72
- package/src/utils/json.ts +0 -33
package/CHANGELOG.md
CHANGED
package/dist/cli.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
2
|
import { loadEnv } from 'ldenv';
|
|
3
|
-
import { loadAndExecuteDeployments } from './index.js';
|
|
4
3
|
import { Command } from 'commander';
|
|
5
4
|
import pkg from '../package.json' with { type: 'json' };
|
|
5
|
+
import { loadAndExecuteDeployments } from './executor/index.js';
|
|
6
6
|
loadEnv();
|
|
7
7
|
const commandName = "rocketh";
|
|
8
8
|
const program = new Command();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAM,IAAI,EAAE,MAAM,EAAC,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EAAE,CAAC;AAEV,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO;KACL,IAAI,CAAC,WAAW,CAAC;KACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,KAAK,CAAC,GAAG,WAAW,EAAE,CAAC;KACvB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,uBAAuB,EAAE,0DAA0D,CAAC;KAC3F,MAAM,CAAC,oBAAoB,EAAE,yCAAyC,CAAC;KACvE,MAAM,CAAC,2BAA2B,EAAE,oCAAoC,CAAC;KACzE,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,CAAC;KACrD,MAAM,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;KACnD,MAAM,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;KACxD,cAAc,CAAC,2BAA2B,EAAE,oBAAoB,CAAC;KACjE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;AAG/B,yBAAyB,CAAC;IACzB,GAAI,OAA2B;IAC/B,QAAQ,EAAE,CAAC;IACX,mBAAmB,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;IACvD,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;IAClD,eAAe,EAAE,OAAO,CAAC,eAAe;CACxC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-store.d.ts","sourceRoot":"","sources":["../../src/environment/deployment-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAEzD,wBAAgB,uBAAuB,IAAI,eAAe,CAmEzD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
export function createFSDeploymentStore() {
|
|
4
|
+
function getFolder(deploymentsFolder, environmentName) {
|
|
5
|
+
return path.join(deploymentsFolder, environmentName);
|
|
6
|
+
}
|
|
7
|
+
function getFile(deploymentsFolder, environmentName, name) {
|
|
8
|
+
return path.join(deploymentsFolder, environmentName, name);
|
|
9
|
+
}
|
|
10
|
+
async function ensureChainInfoRecorded(deploymentsFolder, environmentName, chainId, genesisHash) {
|
|
11
|
+
if (!(await hasFile(deploymentsFolder, environmentName, '.chain'))) {
|
|
12
|
+
await writeFile(deploymentsFolder, environmentName, '.chain', JSON.stringify({ chainId, genesisHash }));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
async function writeFileWithChainInfo(chaininfo, deploymentsFolder, environmentName, name, content) {
|
|
16
|
+
await ensureChainInfoRecorded(deploymentsFolder, environmentName, chaininfo.chainId, chaininfo.genesisHash);
|
|
17
|
+
fs.mkdirSync(getFolder(deploymentsFolder, environmentName), { recursive: true });
|
|
18
|
+
fs.writeFileSync(getFile(deploymentsFolder, environmentName, name), content);
|
|
19
|
+
}
|
|
20
|
+
async function writeFile(deploymentsFolder, environmentName, name, content) {
|
|
21
|
+
fs.mkdirSync(getFolder(deploymentsFolder, environmentName), { recursive: true });
|
|
22
|
+
fs.writeFileSync(getFile(deploymentsFolder, environmentName, name), content);
|
|
23
|
+
}
|
|
24
|
+
async function readFile(deploymentsFolder, environmentName, name) {
|
|
25
|
+
return fs.readFileSync(getFile(deploymentsFolder, environmentName, name), 'utf-8');
|
|
26
|
+
}
|
|
27
|
+
async function deleteFile(deploymentsFolder, environmentName, name) {
|
|
28
|
+
fs.unlinkSync(getFile(deploymentsFolder, environmentName, name));
|
|
29
|
+
}
|
|
30
|
+
async function listFiles(deploymentsFolder, environmentName) {
|
|
31
|
+
return fs.readdirSync(getFolder(deploymentsFolder, environmentName));
|
|
32
|
+
}
|
|
33
|
+
async function hasFile(deploymentsFolder, environmentName, name) {
|
|
34
|
+
return fs.existsSync(getFile(deploymentsFolder, environmentName, name));
|
|
35
|
+
}
|
|
36
|
+
async function deleteAll(deploymentsFolder, environmentName) {
|
|
37
|
+
fs.rmSync(getFolder(deploymentsFolder, environmentName), { recursive: true, force: true });
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
writeFileWithChainInfo,
|
|
41
|
+
listFiles,
|
|
42
|
+
hasFile,
|
|
43
|
+
deleteAll,
|
|
44
|
+
readFile,
|
|
45
|
+
writeFile,
|
|
46
|
+
deleteFile,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=deployment-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-store.js","sourceRoot":"","sources":["../../src/environment/deployment-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,8 @@ export declare function mergeABIs(list: {
|
|
|
9
9
|
}[], options?: {
|
|
10
10
|
doNotCheckForConflicts?: boolean;
|
|
11
11
|
}): {
|
|
12
|
-
mergedABI:
|
|
13
|
-
added: Map<string,
|
|
12
|
+
mergedABI: Abi;
|
|
13
|
+
added: Map<string, unknown>;
|
|
14
14
|
sigJSMap: Map<`0x${string}`, {
|
|
15
15
|
index: number;
|
|
16
16
|
routeName: string;
|
|
@@ -25,8 +25,8 @@ export declare function mergeArtifacts(list: {
|
|
|
25
25
|
}[], options?: {
|
|
26
26
|
doNotCheckForConflicts?: boolean;
|
|
27
27
|
}): {
|
|
28
|
-
mergedABI:
|
|
29
|
-
added: Map<string,
|
|
28
|
+
mergedABI: Abi;
|
|
29
|
+
added: Map<string, unknown>;
|
|
30
30
|
mergedDevDocs: CreateMutable<DevDoc>;
|
|
31
31
|
mergedUserDocs: CreateMutable<UserDoc>;
|
|
32
32
|
sigJSMap: Map<`0x${string}`, {
|
package/dist/executor/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { Environment, ExecutionParams, ResolvedExecutionParams, UnknownDeployments, UnresolvedNetworkSpecificData, UnresolvedUnknownNamedAccounts, DeployScriptModule, EnhancedDeployScriptFunction, EnhancedEnvironment, ResolvedUserConfig, ConfigOverrides, UserConfig } from '../types.js';
|
|
1
|
+
import { type Environment, type ExecutionParams, type UnknownDeployments, type UnresolvedNetworkSpecificData, type UnresolvedUnknownNamedAccounts, type DeployScriptModule, type EnhancedEnvironment, type ResolvedUserConfig, type ConfigOverrides, type UserConfig } from '@rocketh/core/types';
|
|
3
2
|
/**
|
|
4
3
|
* Setup function that creates the execute function for deploy scripts. It allow to specify a set of functions that will be available in the environment.
|
|
5
4
|
*
|
|
@@ -27,21 +26,31 @@ import type { Environment, ExecutionParams, ResolvedExecutionParams, UnknownDepl
|
|
|
27
26
|
* ```
|
|
28
27
|
*/
|
|
29
28
|
export declare function setup<Extensions extends Record<string, (env: Environment<any, any, any>) => any> = {}, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Data extends UnresolvedNetworkSpecificData = UnresolvedNetworkSpecificData, Deployments extends UnknownDeployments = UnknownDeployments, Extra extends Record<string, unknown> = Record<string, unknown>>(extensions: Extensions): {
|
|
30
|
-
deployScript: <ArgumentsType = undefined>(callback: EnhancedDeployScriptFunction<NamedAccounts, Data, ArgumentsType, Deployments, Extensions>, options: {
|
|
29
|
+
deployScript: <ArgumentsType = undefined>(callback: import("@rocketh/core/types").EnhancedDeployScriptFunction<NamedAccounts, Data, ArgumentsType, Deployments, Extensions>, options: {
|
|
31
30
|
tags?: string[];
|
|
32
31
|
dependencies?: string[];
|
|
33
32
|
id?: string;
|
|
34
33
|
runAtTheEnd?: boolean;
|
|
35
34
|
}) => DeployScriptModule<NamedAccounts, Data, ArgumentsType, Deployments, Extra>;
|
|
35
|
+
loadAndExecuteDeployments: <Extra_1 extends Record<string, unknown> = Record<string, unknown>, ArgumentsType = undefined>(executionParams: ExecutionParams<Extra_1>, args?: ArgumentsType | undefined) => Promise<EnhancedEnvironment<NamedAccounts, Data, UnknownDeployments, Extensions>>;
|
|
36
|
+
};
|
|
37
|
+
export declare function setupEnvironmentFromFiles<Extensions extends Record<string, (env: Environment<any, any, any>) => any> = {}, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Data extends UnresolvedNetworkSpecificData = UnresolvedNetworkSpecificData, Deployments extends UnknownDeployments = UnknownDeployments, Extra extends Record<string, unknown> = Record<string, unknown>>(extensions: Extensions): {
|
|
36
38
|
loadAndExecuteDeployments: <Extra_1 extends Record<string, unknown> = Record<string, unknown>, ArgumentsType = undefined>(executionParams: ExecutionParams<Extra_1>, args?: ArgumentsType) => Promise<EnhancedEnvironment<NamedAccounts, Data, UnknownDeployments, Extensions>>;
|
|
37
39
|
loadEnvironment: (executionParams: ExecutionParams<Extra>) => Promise<EnhancedEnvironment<NamedAccounts, Data, UnknownDeployments, Extensions>>;
|
|
38
40
|
};
|
|
39
41
|
export declare function enhanceEnvIfNeeded<Extensions extends Record<string, (env: Environment<any, any, any>) => any> = {}, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Data extends UnresolvedNetworkSpecificData = UnresolvedNetworkSpecificData, Extra extends Record<string, unknown> = Record<string, unknown>>(env: Environment, extensions: Extensions): EnhancedEnvironment<NamedAccounts, Data, UnknownDeployments, Extensions, Extra>;
|
|
40
42
|
export declare function readConfig<NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Data extends UnresolvedNetworkSpecificData = UnresolvedNetworkSpecificData>(): Promise<UserConfig>;
|
|
41
|
-
export declare function resolveConfig<NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Data extends UnresolvedNetworkSpecificData = UnresolvedNetworkSpecificData>(configFile: UserConfig, overrides?: ConfigOverrides): ResolvedUserConfig<NamedAccounts, Data>;
|
|
42
43
|
export declare function readAndResolveConfig<NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Data extends UnresolvedNetworkSpecificData = UnresolvedNetworkSpecificData>(overrides?: ConfigOverrides): Promise<ResolvedUserConfig<NamedAccounts, Data>>;
|
|
43
|
-
export declare function
|
|
44
|
-
|
|
44
|
+
export declare function loadDeploymentsFromFiles(deploymentsPath: string, networkName: string, onlyABIAndAddress?: boolean, expectedChain?: {
|
|
45
|
+
chainId: string;
|
|
46
|
+
genesisHash?: `0x${string}`;
|
|
47
|
+
deleteDeploymentsIfDifferentGenesisHash?: boolean;
|
|
48
|
+
}): Promise<{
|
|
49
|
+
deployments: UnknownDeployments;
|
|
50
|
+
migrations: Record<string, number>;
|
|
51
|
+
chainId?: string;
|
|
52
|
+
genesisHash?: `0x${string}`;
|
|
53
|
+
}>;
|
|
45
54
|
export declare function loadEnvironment<NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Data extends UnresolvedNetworkSpecificData = UnresolvedNetworkSpecificData, Extra extends Record<string, unknown> = Record<string, unknown>>(executionParams: ExecutionParams<Extra>): Promise<Environment<NamedAccounts, Data, UnknownDeployments>>;
|
|
46
55
|
export declare function loadAndExecuteDeployments<NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Data extends UnresolvedNetworkSpecificData = UnresolvedNetworkSpecificData, ArgumentsType = undefined, Extra extends Record<string, unknown> = Record<string, unknown>>(executionParams: ExecutionParams<Extra>, args?: ArgumentsType): Promise<Environment<NamedAccounts, Data, UnknownDeployments>>;
|
|
47
56
|
export declare function executeDeployScripts<NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Data extends UnresolvedNetworkSpecificData = UnresolvedNetworkSpecificData, ArgumentsType = undefined, Extra extends Record<string, unknown> = Record<string, unknown>>(userConfig: UserConfig, executionParams?: ExecutionParams<Extra>, args?: ArgumentsType): Promise<Environment<NamedAccounts, Data, UnknownDeployments>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"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"}
|
package/dist/executor/index.js
CHANGED
|
@@ -1,19 +1,9 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import prompts from 'prompts';
|
|
4
|
-
|
|
5
|
-
import { register } from 'tsx/esm/api';
|
|
6
|
-
import { formatEther } from 'viem';
|
|
7
|
-
import { withEnvironment } from '../utils/extensions.js';
|
|
8
|
-
import { logger, setLogLevel, spin } from '../internal/logging.js';
|
|
9
|
-
import { getRoughGasPriceEstimate } from '../utils/eth.js';
|
|
4
|
+
import { withEnvironment, resolveConfig, resolveExecutionParams, createEnvironment, logger, getEnvironmentName, getChainIdForEnvironment, createExecutor, setupDeployScripts, loadDeployments, } from '@rocketh/core';
|
|
10
5
|
import { traverseMultipleDirectory } from '../utils/fs.js';
|
|
11
|
-
import {
|
|
12
|
-
import { JSONRPCHTTPProvider } from 'eip-1193-jsonrpc-provider';
|
|
13
|
-
import { createEnvironment } from '../environment/index.js';
|
|
14
|
-
// @ts-ignore
|
|
15
|
-
// const tsImport = (path: string, opts: any) => (typeof Bun !== 'undefined' ? import(path) : tsImport_(path, opts));
|
|
16
|
-
const unregister = register();
|
|
6
|
+
import { createFSDeploymentStore } from '../environment/deployment-store.js';
|
|
17
7
|
/**
|
|
18
8
|
* Setup function that creates the execute function for deploy scripts. It allow to specify a set of functions that will be available in the environment.
|
|
19
9
|
*
|
|
@@ -41,19 +31,11 @@ const unregister = register();
|
|
|
41
31
|
* ```
|
|
42
32
|
*/
|
|
43
33
|
export function setup(extensions) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return callback(enhancedEnv, args);
|
|
50
|
-
};
|
|
51
|
-
scriptModule.tags = options.tags;
|
|
52
|
-
scriptModule.dependencies = options.dependencies;
|
|
53
|
-
scriptModule.id = options.id;
|
|
54
|
-
scriptModule.runAtTheEnd = options.runAtTheEnd;
|
|
55
|
-
return scriptModule;
|
|
56
|
-
}
|
|
34
|
+
const { deployScript } = setupDeployScripts(extensions);
|
|
35
|
+
const { loadAndExecuteDeployments } = setupEnvironmentFromFiles(extensions);
|
|
36
|
+
return { deployScript, loadAndExecuteDeployments };
|
|
37
|
+
}
|
|
38
|
+
export function setupEnvironmentFromFiles(extensions) {
|
|
57
39
|
async function loadAndExecuteDeploymentsWithExtensions(executionParams, args) {
|
|
58
40
|
const env = await loadAndExecuteDeployments(executionParams, args);
|
|
59
41
|
return enhanceEnvIfNeeded(env, extensions);
|
|
@@ -63,7 +45,6 @@ export function setup(extensions) {
|
|
|
63
45
|
return enhanceEnvIfNeeded(env, extensions);
|
|
64
46
|
}
|
|
65
47
|
return {
|
|
66
|
-
deployScript: enhancedExecute,
|
|
67
48
|
loadAndExecuteDeployments: loadAndExecuteDeploymentsWithExtensions,
|
|
68
49
|
loadEnvironment: loadEnvironmentWithExtensions,
|
|
69
50
|
};
|
|
@@ -88,11 +69,26 @@ export async function readConfig() {
|
|
|
88
69
|
let tsVersion;
|
|
89
70
|
let jsVersion;
|
|
90
71
|
if (typeof process !== 'undefined') {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
72
|
+
const listOfFileToTryForTS = [
|
|
73
|
+
path.join(process.cwd(), 'rocketh.ts'),
|
|
74
|
+
path.join(process.cwd(), 'rocketh', 'config.ts'),
|
|
75
|
+
];
|
|
76
|
+
for (const filepath of listOfFileToTryForTS) {
|
|
77
|
+
if (fs.existsSync(filepath)) {
|
|
78
|
+
tsVersion = `file://${filepath}`;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const listOfFileToTryForJS = [
|
|
83
|
+
path.join(process.cwd(), 'rocketh.js'),
|
|
84
|
+
path.join(process.cwd(), 'rocketh', 'config.s'),
|
|
85
|
+
];
|
|
86
|
+
for (const filepath of listOfFileToTryForJS) {
|
|
87
|
+
if (fs.existsSync(filepath)) {
|
|
88
|
+
jsVersion = `file://${filepath}`;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
96
92
|
}
|
|
97
93
|
const existingConfigs = [tsVersion, jsVersion].filter(Boolean).length;
|
|
98
94
|
// console.log({tsFilePath, tsVersionExists, existingConfigs});
|
|
@@ -118,150 +114,20 @@ export async function readConfig() {
|
|
|
118
114
|
}
|
|
119
115
|
return configFile || {};
|
|
120
116
|
}
|
|
121
|
-
export function resolveConfig(configFile, overrides) {
|
|
122
|
-
const config = {
|
|
123
|
-
deployments: 'deployments',
|
|
124
|
-
defaultPollingInterval: 1,
|
|
125
|
-
...configFile,
|
|
126
|
-
scripts: configFile?.scripts
|
|
127
|
-
? typeof configFile.scripts === 'string'
|
|
128
|
-
? [configFile.scripts]
|
|
129
|
-
: configFile.scripts.length == 0
|
|
130
|
-
? ['deploy']
|
|
131
|
-
: configFile.scripts
|
|
132
|
-
: ['deploy'],
|
|
133
|
-
};
|
|
134
|
-
if (overrides) {
|
|
135
|
-
for (const key of Object.keys(overrides)) {
|
|
136
|
-
if (overrides[key] !== undefined) {
|
|
137
|
-
config[key] = overrides[key];
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
return config;
|
|
142
|
-
}
|
|
143
117
|
export async function readAndResolveConfig(overrides) {
|
|
144
118
|
const configFile = await readConfig();
|
|
145
119
|
return resolveConfig(configFile, overrides);
|
|
146
120
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
? config.environments[environmentName].chain
|
|
151
|
-
: parseInt(config.environments[environmentName].chain);
|
|
152
|
-
if (!isNaN(chainAsNumber)) {
|
|
153
|
-
return chainAsNumber;
|
|
154
|
-
}
|
|
155
|
-
const chainFound = getChainByName(config.environments[environmentName].chain);
|
|
156
|
-
if (chainFound) {
|
|
157
|
-
return chainFound.id;
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
throw new Error(`environment ${environmentName} chain id cannot be found, specify it in the rocketh config`);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
const chainFound = getChainByName(environmentName);
|
|
165
|
-
if (chainFound) {
|
|
166
|
-
return chainFound.id;
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
if (provider) {
|
|
170
|
-
const chainIdAsHex = await provider.request({ method: 'eth_chainId' });
|
|
171
|
-
return Number(chainIdAsHex);
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
throw new Error(`environment ${environmentName} chain id cannot be found, specify it in the rocketh config`);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
function getEnvironmentName(executionParams) {
|
|
180
|
-
const environmentProvided = executionParams.environment || executionParams.network;
|
|
181
|
-
let environmentName = 'memory';
|
|
182
|
-
if (environmentProvided) {
|
|
183
|
-
if (typeof environmentProvided === 'string') {
|
|
184
|
-
environmentName = environmentProvided;
|
|
185
|
-
}
|
|
186
|
-
else if ('fork' in environmentProvided) {
|
|
187
|
-
environmentName = environmentProvided.fork;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
const fork = typeof environmentProvided !== 'string';
|
|
191
|
-
return { name: environmentName, fork };
|
|
192
|
-
}
|
|
193
|
-
export function resolveExecutionParams(config, executionParameters, chainId) {
|
|
194
|
-
const { name: environmentName, fork } = getEnvironmentName(executionParameters);
|
|
195
|
-
// TODO fork chainId resolution option to keep the network being used
|
|
196
|
-
let chainConfig = getChainConfig(fork ? 31337 : chainId, config);
|
|
197
|
-
let chainInfo = chainConfig.info;
|
|
198
|
-
const environmentConfig = config?.environments?.[environmentName];
|
|
199
|
-
const actualChainConfig = environmentConfig?.overrides
|
|
200
|
-
? {
|
|
201
|
-
...chainConfig,
|
|
202
|
-
...environmentConfig.overrides,
|
|
203
|
-
properties: {
|
|
204
|
-
...chainConfig?.properties,
|
|
205
|
-
...environmentConfig.overrides.properties,
|
|
206
|
-
},
|
|
207
|
-
}
|
|
208
|
-
: chainConfig;
|
|
209
|
-
if (actualChainConfig?.properties) {
|
|
210
|
-
chainInfo = { ...chainInfo, properties: actualChainConfig.properties };
|
|
211
|
-
}
|
|
212
|
-
// let environmentTags: string[] = actualChainConfig.tags.concat(environmentConfig?.tags); // TODO
|
|
213
|
-
const environmentTags = actualChainConfig.tags;
|
|
214
|
-
let scripts = ['deploy'];
|
|
215
|
-
if (config.scripts) {
|
|
216
|
-
if (typeof config.scripts === 'string') {
|
|
217
|
-
scripts = [config.scripts];
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
scripts = [...config.scripts];
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
if (environmentConfig?.scripts) {
|
|
224
|
-
if (typeof environmentConfig.scripts === 'string') {
|
|
225
|
-
scripts = [environmentConfig.scripts];
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
scripts = [...environmentConfig.scripts];
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
const provider = executionParameters.provider || new JSONRPCHTTPProvider(actualChainConfig.rpcUrl);
|
|
232
|
-
let saveDeployments = executionParameters.saveDeployments;
|
|
233
|
-
if (saveDeployments === undefined) {
|
|
234
|
-
if (!executionParameters.provider) {
|
|
235
|
-
saveDeployments = true;
|
|
236
|
-
}
|
|
237
|
-
else {
|
|
238
|
-
if (environmentName === 'memory' || environmentName === 'hardhat' || environmentName === 'default') {
|
|
239
|
-
// networkTags['memory'] = true;
|
|
240
|
-
saveDeployments = false;
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
saveDeployments = true;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
121
|
+
const deploymentStore = createFSDeploymentStore();
|
|
122
|
+
const promptExecutor = async (request) => {
|
|
123
|
+
const answer = await prompts(request);
|
|
247
124
|
return {
|
|
248
|
-
|
|
249
|
-
chain: chainInfo,
|
|
250
|
-
logLevel: executionParameters.logLevel || 0, // TODO
|
|
251
|
-
pollingInterval: actualChainConfig.pollingInterval,
|
|
252
|
-
reportGasUse: executionParameters.reportGasUse || false,
|
|
253
|
-
saveDeployments,
|
|
254
|
-
tags: executionParameters.tags || [],
|
|
255
|
-
environment: {
|
|
256
|
-
name: environmentName,
|
|
257
|
-
tags: environmentTags,
|
|
258
|
-
fork,
|
|
259
|
-
deterministicDeployment: actualChainConfig.deterministicDeployment,
|
|
260
|
-
},
|
|
261
|
-
extra: executionParameters.extra,
|
|
262
|
-
provider,
|
|
263
|
-
scripts,
|
|
125
|
+
proceed: answer.proceed,
|
|
264
126
|
};
|
|
127
|
+
};
|
|
128
|
+
const executor = createExecutor(deploymentStore, promptExecutor);
|
|
129
|
+
export function loadDeploymentsFromFiles(deploymentsPath, networkName, onlyABIAndAddress, expectedChain) {
|
|
130
|
+
return loadDeployments(deploymentStore, deploymentsPath, networkName, onlyABIAndAddress, expectedChain);
|
|
265
131
|
}
|
|
266
132
|
export async function loadEnvironment(executionParams) {
|
|
267
133
|
const userConfig = await readAndResolveConfig(executionParams.config);
|
|
@@ -269,7 +135,7 @@ export async function loadEnvironment(executionParams) {
|
|
|
269
135
|
const chainId = await getChainIdForEnvironment(userConfig, environmentName, executionParams.provider);
|
|
270
136
|
const resolvedExecutionParams = resolveExecutionParams(userConfig, executionParams, chainId);
|
|
271
137
|
// console.log(JSON.stringify(resolvedConfig, null, 2));
|
|
272
|
-
const { external, internal } = await createEnvironment(userConfig, resolvedExecutionParams);
|
|
138
|
+
const { external, internal } = await createEnvironment(userConfig, resolvedExecutionParams, deploymentStore);
|
|
273
139
|
return external;
|
|
274
140
|
}
|
|
275
141
|
export async function loadAndExecuteDeployments(executionParams, args) {
|
|
@@ -290,7 +156,6 @@ export async function executeDeployScripts(userConfig, executionParams, args) {
|
|
|
290
156
|
return _executeDeployScripts(resolveduserConfig, resolvedExecutionParams, args);
|
|
291
157
|
}
|
|
292
158
|
async function _executeDeployScripts(userConfig, resolvedExecutionParams, args) {
|
|
293
|
-
setLogLevel(typeof resolvedExecutionParams.logLevel === 'undefined' ? 0 : resolvedExecutionParams.logLevel);
|
|
294
159
|
let filepaths;
|
|
295
160
|
filepaths = traverseMultipleDirectory(resolvedExecutionParams.scripts);
|
|
296
161
|
filepaths = filepaths
|
|
@@ -304,9 +169,7 @@ async function _executeDeployScripts(userConfig, resolvedExecutionParams, args)
|
|
|
304
169
|
}
|
|
305
170
|
return 0;
|
|
306
171
|
});
|
|
307
|
-
const
|
|
308
|
-
const scriptPathBags = {};
|
|
309
|
-
const scriptFilePaths = [];
|
|
172
|
+
const moduleObjects = [];
|
|
310
173
|
for (const filepath of filepaths) {
|
|
311
174
|
const scriptFilePath = path.resolve(filepath);
|
|
312
175
|
let scriptModule;
|
|
@@ -323,153 +186,13 @@ async function _executeDeployScripts(userConfig, resolvedExecutionParams, args)
|
|
|
323
186
|
scriptModule = scriptModule.default;
|
|
324
187
|
}
|
|
325
188
|
}
|
|
326
|
-
|
|
189
|
+
moduleObjects.push({ id: scriptFilePath, module: scriptModule });
|
|
327
190
|
}
|
|
328
191
|
catch (e) {
|
|
329
192
|
logger.error(`could not import ${filepath}`);
|
|
330
193
|
throw e;
|
|
331
194
|
}
|
|
332
|
-
let scriptTags = scriptModule.tags;
|
|
333
|
-
if (scriptTags !== undefined) {
|
|
334
|
-
if (typeof scriptTags === 'string') {
|
|
335
|
-
scriptTags = [scriptTags];
|
|
336
|
-
}
|
|
337
|
-
for (const tag of scriptTags) {
|
|
338
|
-
if (tag.indexOf(',') >= 0) {
|
|
339
|
-
throw new Error('Tag cannot contains commas');
|
|
340
|
-
}
|
|
341
|
-
const bag = scriptPathBags[tag] || [];
|
|
342
|
-
scriptPathBags[tag] = bag;
|
|
343
|
-
bag.push(scriptFilePath);
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
if (resolvedExecutionParams.tags !== undefined && resolvedExecutionParams.tags.length > 0) {
|
|
347
|
-
let found = false;
|
|
348
|
-
if (scriptTags !== undefined) {
|
|
349
|
-
for (const tagToFind of resolvedExecutionParams.tags) {
|
|
350
|
-
for (const tag of scriptTags) {
|
|
351
|
-
if (tag === tagToFind) {
|
|
352
|
-
scriptFilePaths.push(scriptFilePath);
|
|
353
|
-
found = true;
|
|
354
|
-
break;
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
if (found) {
|
|
358
|
-
break;
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
else {
|
|
364
|
-
scriptFilePaths.push(scriptFilePath);
|
|
365
|
-
}
|
|
366
195
|
}
|
|
367
|
-
|
|
368
|
-
await internal.recoverTransactionsIfAny();
|
|
369
|
-
const scriptsRegisteredToRun = {};
|
|
370
|
-
const scriptsToRun = [];
|
|
371
|
-
const scriptsToRunAtTheEnd = [];
|
|
372
|
-
function recurseDependencies(scriptFilePath) {
|
|
373
|
-
if (scriptsRegisteredToRun[scriptFilePath]) {
|
|
374
|
-
return;
|
|
375
|
-
}
|
|
376
|
-
const scriptModule = scriptModuleByFilePath[scriptFilePath];
|
|
377
|
-
if (scriptModule.dependencies) {
|
|
378
|
-
for (const dependency of scriptModule.dependencies) {
|
|
379
|
-
const scriptFilePathsToAdd = scriptPathBags[dependency];
|
|
380
|
-
if (scriptFilePathsToAdd) {
|
|
381
|
-
for (const scriptFilenameToAdd of scriptFilePathsToAdd) {
|
|
382
|
-
recurseDependencies(scriptFilenameToAdd);
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
if (!scriptsRegisteredToRun[scriptFilePath]) {
|
|
388
|
-
if (scriptModule.runAtTheEnd) {
|
|
389
|
-
scriptsToRunAtTheEnd.push({
|
|
390
|
-
filePath: scriptFilePath,
|
|
391
|
-
func: scriptModule,
|
|
392
|
-
});
|
|
393
|
-
}
|
|
394
|
-
else {
|
|
395
|
-
scriptsToRun.push({
|
|
396
|
-
filePath: scriptFilePath,
|
|
397
|
-
func: scriptModule,
|
|
398
|
-
});
|
|
399
|
-
}
|
|
400
|
-
scriptsRegisteredToRun[scriptFilePath] = true;
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
for (const scriptFilePath of scriptFilePaths) {
|
|
404
|
-
recurseDependencies(scriptFilePath);
|
|
405
|
-
}
|
|
406
|
-
if (resolvedExecutionParams.askBeforeProceeding) {
|
|
407
|
-
console.log(`Network: ${external.name} \n \t Chain: ${external.network.chain.name} \n \t Tags: ${Object.keys(external.tags).join(',')}`);
|
|
408
|
-
const gasPriceEstimate = await getRoughGasPriceEstimate(external.network.provider);
|
|
409
|
-
const prompt = await prompts({
|
|
410
|
-
type: 'confirm',
|
|
411
|
-
name: 'proceed',
|
|
412
|
-
message: `gas price is currently in this range:
|
|
413
|
-
slow: ${formatEther(gasPriceEstimate.slow.maxFeePerGas)} (priority: ${formatEther(gasPriceEstimate.slow.maxPriorityFeePerGas)})
|
|
414
|
-
average: ${formatEther(gasPriceEstimate.average.maxFeePerGas)} (priority: ${formatEther(gasPriceEstimate.average.maxPriorityFeePerGas)})
|
|
415
|
-
fast: ${formatEther(gasPriceEstimate.fast.maxFeePerGas)} (priority: ${formatEther(gasPriceEstimate.fast.maxPriorityFeePerGas)})
|
|
416
|
-
|
|
417
|
-
Do you want to proceed (note that gas price can change for each tx)`,
|
|
418
|
-
});
|
|
419
|
-
if (!prompt.proceed) {
|
|
420
|
-
process.exit();
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
for (const deployScript of scriptsToRun.concat(scriptsToRunAtTheEnd)) {
|
|
424
|
-
const filename = path.basename(deployScript.filePath);
|
|
425
|
-
const relativeFilepath = path.relative('.', deployScript.filePath);
|
|
426
|
-
if (deployScript.func.id && external.hasMigrationBeenDone(deployScript.func.id)) {
|
|
427
|
-
logger.info(`skipping ${filename} as migrations already executed and complete`);
|
|
428
|
-
continue;
|
|
429
|
-
}
|
|
430
|
-
let skip = false;
|
|
431
|
-
const spinner = spin(`- Executing ${filename}`);
|
|
432
|
-
// if (deployScript.func.skip) {
|
|
433
|
-
// const spinner = spin(` - skip?()`);
|
|
434
|
-
// try {
|
|
435
|
-
// skip = await deployScript.func.skip(external, args);
|
|
436
|
-
// spinner.succeed(skip ? `skipping ${filename}` : undefined);
|
|
437
|
-
// } catch (e) {
|
|
438
|
-
// spinner.fail();
|
|
439
|
-
// throw e;
|
|
440
|
-
// }
|
|
441
|
-
// }
|
|
442
|
-
if (!skip) {
|
|
443
|
-
let result;
|
|
444
|
-
try {
|
|
445
|
-
result = await deployScript.func(external, args);
|
|
446
|
-
spinner.succeed(`\n`);
|
|
447
|
-
}
|
|
448
|
-
catch (e) {
|
|
449
|
-
spinner.fail();
|
|
450
|
-
throw e;
|
|
451
|
-
}
|
|
452
|
-
if (result && typeof result === 'boolean') {
|
|
453
|
-
if (!deployScript.func.id) {
|
|
454
|
-
throw new Error(`${deployScript.filePath} return true to not be executed again, but does not provide an id. the script function needs to have the field "id" to be set`);
|
|
455
|
-
}
|
|
456
|
-
internal.recordMigration(deployScript.func.id);
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
if (resolvedExecutionParams.reportGasUse) {
|
|
461
|
-
const provider = external.network.provider;
|
|
462
|
-
const transactionHashes = provider.transactionHashes;
|
|
463
|
-
let totalGasUsed = 0;
|
|
464
|
-
for (const hash of transactionHashes) {
|
|
465
|
-
const transactionReceipt = await provider.request({ method: 'eth_getTransactionReceipt', params: [hash] });
|
|
466
|
-
if (transactionReceipt) {
|
|
467
|
-
const gasUsed = Number(transactionReceipt.gasUsed);
|
|
468
|
-
totalGasUsed += gasUsed;
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
console.log({ totalGasUsed });
|
|
472
|
-
}
|
|
473
|
-
return external;
|
|
196
|
+
return executor.executeDeployScriptModules(moduleObjects, userConfig, resolvedExecutionParams, args);
|
|
474
197
|
}
|
|
475
198
|
//# sourceMappingURL=index.js.map
|