rocketh 0.15.14 → 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 +17 -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 +42 -320
- 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 +92 -404
- 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
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# rocketh
|
|
2
2
|
|
|
3
|
+
## 0.16.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- add @roceth/core
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies
|
|
12
|
+
- @rocketh/core@0.16.0
|
|
13
|
+
|
|
14
|
+
## 0.15.15
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- fix
|
|
19
|
+
|
|
3
20
|
## 0.15.14
|
|
4
21
|
|
|
5
22
|
### Patch Changes
|
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,20 +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();
|
|
17
|
-
const tsImport = (path, opts) => import(path, opts);
|
|
6
|
+
import { createFSDeploymentStore } from '../environment/deployment-store.js';
|
|
18
7
|
/**
|
|
19
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.
|
|
20
9
|
*
|
|
@@ -42,19 +31,11 @@ const tsImport = (path, opts) => import(path, opts);
|
|
|
42
31
|
* ```
|
|
43
32
|
*/
|
|
44
33
|
export function setup(extensions) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return callback(enhancedEnv, args);
|
|
51
|
-
};
|
|
52
|
-
scriptModule.tags = options.tags;
|
|
53
|
-
scriptModule.dependencies = options.dependencies;
|
|
54
|
-
scriptModule.id = options.id;
|
|
55
|
-
scriptModule.runAtTheEnd = options.runAtTheEnd;
|
|
56
|
-
return scriptModule;
|
|
57
|
-
}
|
|
34
|
+
const { deployScript } = setupDeployScripts(extensions);
|
|
35
|
+
const { loadAndExecuteDeployments } = setupEnvironmentFromFiles(extensions);
|
|
36
|
+
return { deployScript, loadAndExecuteDeployments };
|
|
37
|
+
}
|
|
38
|
+
export function setupEnvironmentFromFiles(extensions) {
|
|
58
39
|
async function loadAndExecuteDeploymentsWithExtensions(executionParams, args) {
|
|
59
40
|
const env = await loadAndExecuteDeployments(executionParams, args);
|
|
60
41
|
return enhanceEnvIfNeeded(env, extensions);
|
|
@@ -64,7 +45,6 @@ export function setup(extensions) {
|
|
|
64
45
|
return enhanceEnvIfNeeded(env, extensions);
|
|
65
46
|
}
|
|
66
47
|
return {
|
|
67
|
-
deployScript: enhancedExecute,
|
|
68
48
|
loadAndExecuteDeployments: loadAndExecuteDeploymentsWithExtensions,
|
|
69
49
|
loadEnvironment: loadEnvironmentWithExtensions,
|
|
70
50
|
};
|
|
@@ -89,11 +69,26 @@ export async function readConfig() {
|
|
|
89
69
|
let tsVersion;
|
|
90
70
|
let jsVersion;
|
|
91
71
|
if (typeof process !== 'undefined') {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
+
}
|
|
97
92
|
}
|
|
98
93
|
const existingConfigs = [tsVersion, jsVersion].filter(Boolean).length;
|
|
99
94
|
// console.log({tsFilePath, tsVersionExists, existingConfigs});
|
|
@@ -102,7 +97,7 @@ export async function readConfig() {
|
|
|
102
97
|
throw new Error('Multiple configuration files found. Please use only one of: rocketh.ts, rocketh.js');
|
|
103
98
|
}
|
|
104
99
|
if (tsVersion) {
|
|
105
|
-
const moduleLoaded = await
|
|
100
|
+
const moduleLoaded = await import(tsVersion);
|
|
106
101
|
configFile = moduleLoaded.config;
|
|
107
102
|
// console.log({tsVersionExists: configFile});
|
|
108
103
|
// if ((configFile as any).default) {
|
|
@@ -114,155 +109,25 @@ export async function readConfig() {
|
|
|
114
109
|
// }
|
|
115
110
|
}
|
|
116
111
|
else if (jsVersion) {
|
|
117
|
-
const moduleLoaded = await
|
|
112
|
+
const moduleLoaded = await import(jsVersion);
|
|
118
113
|
configFile = moduleLoaded.config;
|
|
119
114
|
}
|
|
120
115
|
return configFile || {};
|
|
121
116
|
}
|
|
122
|
-
export function resolveConfig(configFile, overrides) {
|
|
123
|
-
const config = {
|
|
124
|
-
deployments: 'deployments',
|
|
125
|
-
defaultPollingInterval: 1,
|
|
126
|
-
...configFile,
|
|
127
|
-
scripts: configFile?.scripts
|
|
128
|
-
? typeof configFile.scripts === 'string'
|
|
129
|
-
? [configFile.scripts]
|
|
130
|
-
: configFile.scripts.length == 0
|
|
131
|
-
? ['deploy']
|
|
132
|
-
: configFile.scripts
|
|
133
|
-
: ['deploy'],
|
|
134
|
-
};
|
|
135
|
-
if (overrides) {
|
|
136
|
-
for (const key of Object.keys(overrides)) {
|
|
137
|
-
if (overrides[key] !== undefined) {
|
|
138
|
-
config[key] = overrides[key];
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
return config;
|
|
143
|
-
}
|
|
144
117
|
export async function readAndResolveConfig(overrides) {
|
|
145
118
|
const configFile = await readConfig();
|
|
146
119
|
return resolveConfig(configFile, overrides);
|
|
147
120
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
? config.environments[environmentName].chain
|
|
152
|
-
: parseInt(config.environments[environmentName].chain);
|
|
153
|
-
if (!isNaN(chainAsNumber)) {
|
|
154
|
-
return chainAsNumber;
|
|
155
|
-
}
|
|
156
|
-
const chainFound = getChainByName(config.environments[environmentName].chain);
|
|
157
|
-
if (chainFound) {
|
|
158
|
-
return chainFound.id;
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
throw new Error(`environment ${environmentName} chain id cannot be found, specify it in the rocketh config`);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
const chainFound = getChainByName(environmentName);
|
|
166
|
-
if (chainFound) {
|
|
167
|
-
return chainFound.id;
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
if (provider) {
|
|
171
|
-
const chainIdAsHex = await provider.request({ method: 'eth_chainId' });
|
|
172
|
-
return Number(chainIdAsHex);
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
throw new Error(`environment ${environmentName} chain id cannot be found, specify it in the rocketh config`);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
function getEnvironmentName(executionParams) {
|
|
181
|
-
const environmentProvided = executionParams.environment || executionParams.network;
|
|
182
|
-
let environmentName = 'memory';
|
|
183
|
-
if (environmentProvided) {
|
|
184
|
-
if (typeof environmentProvided === 'string') {
|
|
185
|
-
environmentName = environmentProvided;
|
|
186
|
-
}
|
|
187
|
-
else if ('fork' in environmentProvided) {
|
|
188
|
-
environmentName = environmentProvided.fork;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
const fork = typeof environmentProvided !== 'string';
|
|
192
|
-
return { name: environmentName, fork };
|
|
193
|
-
}
|
|
194
|
-
export function resolveExecutionParams(config, executionParameters, chainId) {
|
|
195
|
-
const { name: environmentName, fork } = getEnvironmentName(executionParameters);
|
|
196
|
-
// TODO fork chainId resolution option to keep the network being used
|
|
197
|
-
let chainConfig = getChainConfig(fork ? 31337 : chainId, config);
|
|
198
|
-
let chainInfo = chainConfig.info;
|
|
199
|
-
const environmentConfig = config?.environments?.[environmentName];
|
|
200
|
-
const actualChainConfig = environmentConfig?.overrides
|
|
201
|
-
? {
|
|
202
|
-
...chainConfig,
|
|
203
|
-
...environmentConfig.overrides,
|
|
204
|
-
properties: {
|
|
205
|
-
...chainConfig?.properties,
|
|
206
|
-
...environmentConfig.overrides.properties,
|
|
207
|
-
},
|
|
208
|
-
}
|
|
209
|
-
: chainConfig;
|
|
210
|
-
if (actualChainConfig?.properties) {
|
|
211
|
-
chainInfo = { ...chainInfo, properties: actualChainConfig.properties };
|
|
212
|
-
}
|
|
213
|
-
// let environmentTags: string[] = actualChainConfig.tags.concat(environmentConfig?.tags); // TODO
|
|
214
|
-
const environmentTags = actualChainConfig.tags;
|
|
215
|
-
let scripts = ['deploy'];
|
|
216
|
-
if (config.scripts) {
|
|
217
|
-
if (typeof config.scripts === 'string') {
|
|
218
|
-
scripts = [config.scripts];
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
scripts = [...config.scripts];
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
if (environmentConfig?.scripts) {
|
|
225
|
-
if (typeof environmentConfig.scripts === 'string') {
|
|
226
|
-
scripts = [environmentConfig.scripts];
|
|
227
|
-
}
|
|
228
|
-
else {
|
|
229
|
-
scripts = [...environmentConfig.scripts];
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
const provider = executionParameters.provider || new JSONRPCHTTPProvider(actualChainConfig.rpcUrl);
|
|
233
|
-
let saveDeployments = executionParameters.saveDeployments;
|
|
234
|
-
if (saveDeployments === undefined) {
|
|
235
|
-
if (!executionParameters.provider) {
|
|
236
|
-
saveDeployments = true;
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
if (environmentName === 'memory' || environmentName === 'hardhat' || environmentName === 'default') {
|
|
240
|
-
// networkTags['memory'] = true;
|
|
241
|
-
saveDeployments = false;
|
|
242
|
-
}
|
|
243
|
-
else {
|
|
244
|
-
saveDeployments = true;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
121
|
+
const deploymentStore = createFSDeploymentStore();
|
|
122
|
+
const promptExecutor = async (request) => {
|
|
123
|
+
const answer = await prompts(request);
|
|
248
124
|
return {
|
|
249
|
-
|
|
250
|
-
chain: chainInfo,
|
|
251
|
-
logLevel: executionParameters.logLevel || 0, // TODO
|
|
252
|
-
pollingInterval: actualChainConfig.pollingInterval,
|
|
253
|
-
reportGasUse: executionParameters.reportGasUse || false,
|
|
254
|
-
saveDeployments,
|
|
255
|
-
tags: executionParameters.tags || [],
|
|
256
|
-
environment: {
|
|
257
|
-
name: environmentName,
|
|
258
|
-
tags: environmentTags,
|
|
259
|
-
fork,
|
|
260
|
-
deterministicDeployment: actualChainConfig.deterministicDeployment,
|
|
261
|
-
},
|
|
262
|
-
extra: executionParameters.extra,
|
|
263
|
-
provider,
|
|
264
|
-
scripts,
|
|
125
|
+
proceed: answer.proceed,
|
|
265
126
|
};
|
|
127
|
+
};
|
|
128
|
+
const executor = createExecutor(deploymentStore, promptExecutor);
|
|
129
|
+
export function loadDeploymentsFromFiles(deploymentsPath, networkName, onlyABIAndAddress, expectedChain) {
|
|
130
|
+
return loadDeployments(deploymentStore, deploymentsPath, networkName, onlyABIAndAddress, expectedChain);
|
|
266
131
|
}
|
|
267
132
|
export async function loadEnvironment(executionParams) {
|
|
268
133
|
const userConfig = await readAndResolveConfig(executionParams.config);
|
|
@@ -270,7 +135,7 @@ export async function loadEnvironment(executionParams) {
|
|
|
270
135
|
const chainId = await getChainIdForEnvironment(userConfig, environmentName, executionParams.provider);
|
|
271
136
|
const resolvedExecutionParams = resolveExecutionParams(userConfig, executionParams, chainId);
|
|
272
137
|
// console.log(JSON.stringify(resolvedConfig, null, 2));
|
|
273
|
-
const { external, internal } = await createEnvironment(userConfig, resolvedExecutionParams);
|
|
138
|
+
const { external, internal } = await createEnvironment(userConfig, resolvedExecutionParams, deploymentStore);
|
|
274
139
|
return external;
|
|
275
140
|
}
|
|
276
141
|
export async function loadAndExecuteDeployments(executionParams, args) {
|
|
@@ -291,7 +156,6 @@ export async function executeDeployScripts(userConfig, executionParams, args) {
|
|
|
291
156
|
return _executeDeployScripts(resolveduserConfig, resolvedExecutionParams, args);
|
|
292
157
|
}
|
|
293
158
|
async function _executeDeployScripts(userConfig, resolvedExecutionParams, args) {
|
|
294
|
-
setLogLevel(typeof resolvedExecutionParams.logLevel === 'undefined' ? 0 : resolvedExecutionParams.logLevel);
|
|
295
159
|
let filepaths;
|
|
296
160
|
filepaths = traverseMultipleDirectory(resolvedExecutionParams.scripts);
|
|
297
161
|
filepaths = filepaths
|
|
@@ -305,14 +169,12 @@ async function _executeDeployScripts(userConfig, resolvedExecutionParams, args)
|
|
|
305
169
|
}
|
|
306
170
|
return 0;
|
|
307
171
|
});
|
|
308
|
-
const
|
|
309
|
-
const scriptPathBags = {};
|
|
310
|
-
const scriptFilePaths = [];
|
|
172
|
+
const moduleObjects = [];
|
|
311
173
|
for (const filepath of filepaths) {
|
|
312
174
|
const scriptFilePath = path.resolve(filepath);
|
|
313
175
|
let scriptModule;
|
|
314
176
|
try {
|
|
315
|
-
scriptModule = await
|
|
177
|
+
scriptModule = await import(`file://${scriptFilePath}`);
|
|
316
178
|
// console.log({
|
|
317
179
|
// scriptFilePath,
|
|
318
180
|
// scriptModule,
|
|
@@ -324,153 +186,13 @@ async function _executeDeployScripts(userConfig, resolvedExecutionParams, args)
|
|
|
324
186
|
scriptModule = scriptModule.default;
|
|
325
187
|
}
|
|
326
188
|
}
|
|
327
|
-
|
|
189
|
+
moduleObjects.push({ id: scriptFilePath, module: scriptModule });
|
|
328
190
|
}
|
|
329
191
|
catch (e) {
|
|
330
192
|
logger.error(`could not import ${filepath}`);
|
|
331
193
|
throw e;
|
|
332
194
|
}
|
|
333
|
-
let scriptTags = scriptModule.tags;
|
|
334
|
-
if (scriptTags !== undefined) {
|
|
335
|
-
if (typeof scriptTags === 'string') {
|
|
336
|
-
scriptTags = [scriptTags];
|
|
337
|
-
}
|
|
338
|
-
for (const tag of scriptTags) {
|
|
339
|
-
if (tag.indexOf(',') >= 0) {
|
|
340
|
-
throw new Error('Tag cannot contains commas');
|
|
341
|
-
}
|
|
342
|
-
const bag = scriptPathBags[tag] || [];
|
|
343
|
-
scriptPathBags[tag] = bag;
|
|
344
|
-
bag.push(scriptFilePath);
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
if (resolvedExecutionParams.tags !== undefined && resolvedExecutionParams.tags.length > 0) {
|
|
348
|
-
let found = false;
|
|
349
|
-
if (scriptTags !== undefined) {
|
|
350
|
-
for (const tagToFind of resolvedExecutionParams.tags) {
|
|
351
|
-
for (const tag of scriptTags) {
|
|
352
|
-
if (tag === tagToFind) {
|
|
353
|
-
scriptFilePaths.push(scriptFilePath);
|
|
354
|
-
found = true;
|
|
355
|
-
break;
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
if (found) {
|
|
359
|
-
break;
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
else {
|
|
365
|
-
scriptFilePaths.push(scriptFilePath);
|
|
366
|
-
}
|
|
367
195
|
}
|
|
368
|
-
|
|
369
|
-
await internal.recoverTransactionsIfAny();
|
|
370
|
-
const scriptsRegisteredToRun = {};
|
|
371
|
-
const scriptsToRun = [];
|
|
372
|
-
const scriptsToRunAtTheEnd = [];
|
|
373
|
-
function recurseDependencies(scriptFilePath) {
|
|
374
|
-
if (scriptsRegisteredToRun[scriptFilePath]) {
|
|
375
|
-
return;
|
|
376
|
-
}
|
|
377
|
-
const scriptModule = scriptModuleByFilePath[scriptFilePath];
|
|
378
|
-
if (scriptModule.dependencies) {
|
|
379
|
-
for (const dependency of scriptModule.dependencies) {
|
|
380
|
-
const scriptFilePathsToAdd = scriptPathBags[dependency];
|
|
381
|
-
if (scriptFilePathsToAdd) {
|
|
382
|
-
for (const scriptFilenameToAdd of scriptFilePathsToAdd) {
|
|
383
|
-
recurseDependencies(scriptFilenameToAdd);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
if (!scriptsRegisteredToRun[scriptFilePath]) {
|
|
389
|
-
if (scriptModule.runAtTheEnd) {
|
|
390
|
-
scriptsToRunAtTheEnd.push({
|
|
391
|
-
filePath: scriptFilePath,
|
|
392
|
-
func: scriptModule,
|
|
393
|
-
});
|
|
394
|
-
}
|
|
395
|
-
else {
|
|
396
|
-
scriptsToRun.push({
|
|
397
|
-
filePath: scriptFilePath,
|
|
398
|
-
func: scriptModule,
|
|
399
|
-
});
|
|
400
|
-
}
|
|
401
|
-
scriptsRegisteredToRun[scriptFilePath] = true;
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
for (const scriptFilePath of scriptFilePaths) {
|
|
405
|
-
recurseDependencies(scriptFilePath);
|
|
406
|
-
}
|
|
407
|
-
if (resolvedExecutionParams.askBeforeProceeding) {
|
|
408
|
-
console.log(`Network: ${external.name} \n \t Chain: ${external.network.chain.name} \n \t Tags: ${Object.keys(external.tags).join(',')}`);
|
|
409
|
-
const gasPriceEstimate = await getRoughGasPriceEstimate(external.network.provider);
|
|
410
|
-
const prompt = await prompts({
|
|
411
|
-
type: 'confirm',
|
|
412
|
-
name: 'proceed',
|
|
413
|
-
message: `gas price is currently in this range:
|
|
414
|
-
slow: ${formatEther(gasPriceEstimate.slow.maxFeePerGas)} (priority: ${formatEther(gasPriceEstimate.slow.maxPriorityFeePerGas)})
|
|
415
|
-
average: ${formatEther(gasPriceEstimate.average.maxFeePerGas)} (priority: ${formatEther(gasPriceEstimate.average.maxPriorityFeePerGas)})
|
|
416
|
-
fast: ${formatEther(gasPriceEstimate.fast.maxFeePerGas)} (priority: ${formatEther(gasPriceEstimate.fast.maxPriorityFeePerGas)})
|
|
417
|
-
|
|
418
|
-
Do you want to proceed (note that gas price can change for each tx)`,
|
|
419
|
-
});
|
|
420
|
-
if (!prompt.proceed) {
|
|
421
|
-
process.exit();
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
for (const deployScript of scriptsToRun.concat(scriptsToRunAtTheEnd)) {
|
|
425
|
-
const filename = path.basename(deployScript.filePath);
|
|
426
|
-
const relativeFilepath = path.relative('.', deployScript.filePath);
|
|
427
|
-
if (deployScript.func.id && external.hasMigrationBeenDone(deployScript.func.id)) {
|
|
428
|
-
logger.info(`skipping ${filename} as migrations already executed and complete`);
|
|
429
|
-
continue;
|
|
430
|
-
}
|
|
431
|
-
let skip = false;
|
|
432
|
-
const spinner = spin(`- Executing ${filename}`);
|
|
433
|
-
// if (deployScript.func.skip) {
|
|
434
|
-
// const spinner = spin(` - skip?()`);
|
|
435
|
-
// try {
|
|
436
|
-
// skip = await deployScript.func.skip(external, args);
|
|
437
|
-
// spinner.succeed(skip ? `skipping ${filename}` : undefined);
|
|
438
|
-
// } catch (e) {
|
|
439
|
-
// spinner.fail();
|
|
440
|
-
// throw e;
|
|
441
|
-
// }
|
|
442
|
-
// }
|
|
443
|
-
if (!skip) {
|
|
444
|
-
let result;
|
|
445
|
-
try {
|
|
446
|
-
result = await deployScript.func(external, args);
|
|
447
|
-
spinner.succeed(`\n`);
|
|
448
|
-
}
|
|
449
|
-
catch (e) {
|
|
450
|
-
spinner.fail();
|
|
451
|
-
throw e;
|
|
452
|
-
}
|
|
453
|
-
if (result && typeof result === 'boolean') {
|
|
454
|
-
if (!deployScript.func.id) {
|
|
455
|
-
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`);
|
|
456
|
-
}
|
|
457
|
-
internal.recordMigration(deployScript.func.id);
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
if (resolvedExecutionParams.reportGasUse) {
|
|
462
|
-
const provider = external.network.provider;
|
|
463
|
-
const transactionHashes = provider.transactionHashes;
|
|
464
|
-
let totalGasUsed = 0;
|
|
465
|
-
for (const hash of transactionHashes) {
|
|
466
|
-
const transactionReceipt = await provider.request({ method: 'eth_getTransactionReceipt', params: [hash] });
|
|
467
|
-
if (transactionReceipt) {
|
|
468
|
-
const gasUsed = Number(transactionReceipt.gasUsed);
|
|
469
|
-
totalGasUsed += gasUsed;
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
console.log({ totalGasUsed });
|
|
473
|
-
}
|
|
474
|
-
return external;
|
|
196
|
+
return executor.executeDeployScriptModules(moduleObjects, userConfig, resolvedExecutionParams, args);
|
|
475
197
|
}
|
|
476
198
|
//# sourceMappingURL=index.js.map
|