rocketh 0.6.1 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -172,11 +172,11 @@ var import_named_logs = require("named-logs");
172
172
  var import_named_logs_console = require("named-logs-console");
173
173
  (0, import_named_logs_console.hookup)();
174
174
  function setLogLevel(level) {
175
- import_named_logs_console.logs.level = level;
176
- if (import_named_logs_console.logs.level > 0) {
177
- import_named_logs_console.logs.enable();
175
+ import_named_logs_console.factory.level = level;
176
+ if (import_named_logs_console.factory.level > 0) {
177
+ import_named_logs_console.factory.enable();
178
178
  } else {
179
- import_named_logs_console.logs.disable();
179
+ import_named_logs_console.factory.disable();
180
180
  }
181
181
  }
182
182
  var logger = (0, import_named_logs.logs)("rocketh");
@@ -205,7 +205,7 @@ var voidSpinner = {
205
205
  };
206
206
  var lastSpin = voidSpinner;
207
207
  function spin(message) {
208
- if (import_named_logs_console.logs.level > 0) {
208
+ if (import_named_logs_console.factory.level > 0) {
209
209
  lastSpin = lastSpin.start(message);
210
210
  return lastSpin;
211
211
  } else {
@@ -635,7 +635,7 @@ async function createEnvironment(config, providedContext) {
635
635
  // src/executor/index.ts
636
636
  require("esbuild-register/dist/node").register();
637
637
  function execute(context, callback, options) {
638
- const scriptModule = (env) => callback(env);
638
+ const scriptModule = (env, args) => callback(env, args);
639
639
  scriptModule.providedContext = context;
640
640
  scriptModule.tags = options.tags;
641
641
  scriptModule.dependencies = options.dependencies;
@@ -708,11 +708,11 @@ async function loadEnvironment(config, context) {
708
708
  const { external, internal } = await createEnvironment(resolvedConfig, context);
709
709
  return external;
710
710
  }
711
- async function loadAndExecuteDeployments(config) {
711
+ async function loadAndExecuteDeployments(config, args) {
712
712
  const resolvedConfig = resolveConfig(config);
713
- return executeDeployScripts(resolvedConfig);
713
+ return executeDeployScripts(resolvedConfig, args);
714
714
  }
715
- async function executeDeployScripts(config) {
715
+ async function executeDeployScripts(config, args) {
716
716
  setLogLevel(typeof config.logLevel === "undefined" ? 0 : config.logLevel);
717
717
  let filepaths;
718
718
  filepaths = traverseMultipleDirectory([config.scripts]);
@@ -836,7 +836,7 @@ async function executeDeployScripts(config) {
836
836
  if (deployScript.func.skip) {
837
837
  const spinner2 = spin(` - skip?()`);
838
838
  try {
839
- skip = await deployScript.func.skip(external);
839
+ skip = await deployScript.func.skip(external, args);
840
840
  spinner2.succeed(skip ? `skipping ${filename}` : void 0);
841
841
  } catch (e) {
842
842
  spinner2.fail();
@@ -846,7 +846,7 @@ async function executeDeployScripts(config) {
846
846
  if (!skip) {
847
847
  let result;
848
848
  try {
849
- result = await deployScript.func(external);
849
+ result = await deployScript.func(external, args);
850
850
  spinner.succeed(`
851
851
  `);
852
852
  } catch (e) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils/fs.ts","../src/executor/index.ts","../src/environment/index.ts","../src/utils/json.ts","../src/environment/deployments.ts","../src/internal/logging.ts"],"sourcesContent":["export * from './executor';\nexport * from './executor/types';\nexport * from './environment/types';\nexport {extendEnvironment, handleSignerProtocol} from './environment';\nexport {loadDeployments} from './environment/deployments';\n","// taken from https://github.com/vitejs/vite/blob/63524bac878e8d3771d34ad7ad2e10cd16870ff4/packages/vite/src/node/utils.ts#L371-L400\nimport fs from 'node:fs';\nimport path from 'node:path';\n\ninterface LookupFileOptions {\n\tpathOnly?: boolean;\n\trootDir?: string;\n\tpredicate?: (file: string) => boolean;\n}\n\nexport function lookupFile(dir: string, formats: string[], options?: LookupFileOptions): string | undefined {\n\tfor (const format of formats) {\n\t\tconst fullPath = path.join(dir, format);\n\t\tif (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {\n\t\t\tconst result = options?.pathOnly ? fullPath : fs.readFileSync(fullPath, 'utf-8');\n\t\t\tif (!options?.predicate || options.predicate(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tconst parentDir = path.dirname(dir);\n\tif (parentDir !== dir && (!options?.rootDir || parentDir.startsWith(options?.rootDir))) {\n\t\treturn lookupFile(parentDir, formats, options);\n\t}\n}\n\nexport function traverseMultipleDirectory(dirs: string[]): string[] {\n\tconst filepaths = [];\n\tfor (const dir of dirs) {\n\t\tlet filesStats = traverse(dir);\n\t\tfilesStats = filesStats.filter((v) => !v.directory);\n\t\tfor (const filestat of filesStats) {\n\t\t\tfilepaths.push(path.join(dir, filestat.relativePath));\n\t\t}\n\t}\n\treturn filepaths;\n}\n\nexport const traverse = function (\n\tdir: string,\n\tresult: any[] = [],\n\ttopDir?: string,\n\tfilter?: (name: string, stats: any) => boolean // TODO any is Stats\n): Array<{\n\tname: string;\n\tpath: string;\n\trelativePath: string;\n\tmtimeMs: number;\n\tdirectory: boolean;\n}> {\n\tfs.readdirSync(dir).forEach((name) => {\n\t\tconst fPath = path.resolve(dir, name);\n\t\tconst stats = fs.statSync(fPath);\n\t\tif ((!filter && !name.startsWith('.')) || (filter && filter(name, stats))) {\n\t\t\tconst fileStats = {\n\t\t\t\tname,\n\t\t\t\tpath: fPath,\n\t\t\t\trelativePath: path.relative(topDir || dir, fPath),\n\t\t\t\tmtimeMs: stats.mtimeMs,\n\t\t\t\tdirectory: stats.isDirectory(),\n\t\t\t};\n\t\t\tif (fileStats.directory) {\n\t\t\t\tresult.push(fileStats);\n\t\t\t\treturn traverse(fPath, result, topDir || dir, filter);\n\t\t\t}\n\t\t\tresult.push(fileStats);\n\t\t}\n\t});\n\treturn result;\n};\n","import {traverseMultipleDirectory} from '../utils/fs';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type {\n\tConfig,\n\tEnvironment,\n\tResolvedConfig,\n\tResolvedNamedAccounts,\n\tUnknownArtifacts,\n\tUnknownDeployments,\n\tUnresolvedUnknownNamedAccounts,\n} from '../environment/types';\nimport {createEnvironment} from '../environment';\nimport {DeployScriptFunction, DeployScriptModule, ProvidedContext} from './types';\nimport {logger, setLogLevel, spin} from '../internal/logging';\n\nrequire('esbuild-register/dist/node').register();\n\nexport function execute<\n\tArtifacts extends UnknownArtifacts = UnknownArtifacts,\n\tNamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts,\n\tDeployments extends UnknownDeployments = UnknownDeployments\n>(\n\tcontext: ProvidedContext<Artifacts, NamedAccounts>,\n\tcallback: DeployScriptFunction<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>,\n\toptions: {tags?: string[]; dependencies?: string[]}\n): DeployScriptModule<Artifacts, NamedAccounts, Deployments> {\n\tconst scriptModule = (env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>) =>\n\t\tcallback(env);\n\tscriptModule.providedContext = context;\n\tscriptModule.tags = options.tags;\n\tscriptModule.dependencies = options.dependencies;\n\t// TODO id + skip\n\treturn scriptModule as unknown as DeployScriptModule<Artifacts, NamedAccounts, Deployments>;\n}\n\nexport type ConfigOptions = {network: string; deployments?: string; scripts?: string; tags?: string};\n\nexport function readConfig(options: ConfigOptions, extra?: {ignoreMissingRPC?: boolean}): Config {\n\ttype Networks = {[name: string]: {rpcUrl: string}};\n\ttype ConfigFile = {networks: Networks};\n\tlet configFile: ConfigFile | undefined;\n\ttry {\n\t\tconst configString = fs.readFileSync('./rocketh.json', 'utf-8');\n\t\tconfigFile = JSON.parse(configString);\n\t} catch {}\n\n\tlet nodeUrl: string;\n\tconst fromEnv = process.env['ETH_NODE_URI_' + options.network];\n\tif (typeof fromEnv === 'string') {\n\t\tnodeUrl = fromEnv;\n\t} else {\n\t\tif (configFile) {\n\t\t\tconst network = configFile.networks && configFile.networks[options.network];\n\t\t\tif (network) {\n\t\t\t\tnodeUrl = network.rpcUrl;\n\t\t\t} else {\n\t\t\t\tif (extra?.ignoreMissingRPC) {\n\t\t\t\t\tnodeUrl = '';\n\t\t\t\t} else {\n\t\t\t\t\tif (options.network === 'localhost') {\n\t\t\t\t\t\tnodeUrl = 'http://127.0.0.1:8545';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlogger.error(`network \"${options.network}\" is not configured. Please add it to the rocketh.json file`);\n\t\t\t\t\t\tprocess.exit(1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (extra?.ignoreMissingRPC) {\n\t\t\t\tnodeUrl = '';\n\t\t\t} else {\n\t\t\t\tif (options.network === 'localhost') {\n\t\t\t\t\tnodeUrl = 'http://127.0.0.1:8545';\n\t\t\t\t} else {\n\t\t\t\t\tlogger.error(`network \"${options.network}\" is not configured. Please add it to the rocketh.json file`);\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tnodeUrl,\n\t\tnetworkName: options.network,\n\t\tdeployments: options.deployments,\n\t\tscripts: options.scripts,\n\t\ttags: typeof options.tags === 'undefined' ? undefined : options.tags.split(','),\n\t};\n}\n\nexport function readAndResolveConfig(options: ConfigOptions, extra?: {ignoreMissingRPC?: boolean}): ResolvedConfig {\n\treturn resolveConfig(readConfig(options, extra));\n}\n\nexport function resolveConfig(config: Config): ResolvedConfig {\n\tconst resolvedConfig: ResolvedConfig = {\n\t\t...config,\n\t\tnetworkName: config.networkName || 'memory',\n\t\tdeployments: config.deployments || 'deployments',\n\t\tscripts: config.scripts || 'deploy',\n\t\ttags: config.tags || [],\n\t};\n\treturn resolvedConfig;\n}\n\nexport async function loadEnvironment<\n\tArtifacts extends UnknownArtifacts = UnknownArtifacts,\n\tNamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts\n>(config: Config, context: ProvidedContext<Artifacts, NamedAccounts>): Promise<Environment> {\n\tconst resolvedConfig = resolveConfig(config);\n\tconst {external, internal} = await createEnvironment(resolvedConfig, context);\n\treturn external;\n}\n\nexport async function loadAndExecuteDeployments<\n\tArtifacts extends UnknownArtifacts = UnknownArtifacts,\n\tNamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts,\n\tDeployments extends UnknownDeployments = UnknownDeployments\n>(config: Config): Promise<Environment> {\n\tconst resolvedConfig = resolveConfig(config);\n\treturn executeDeployScripts<Artifacts, NamedAccounts, Deployments>(resolvedConfig);\n}\n\nexport async function executeDeployScripts<\n\tArtifacts extends UnknownArtifacts = UnknownArtifacts,\n\tNamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts,\n\tDeployments extends UnknownDeployments = UnknownDeployments\n>(config: ResolvedConfig): Promise<Environment> {\n\tsetLogLevel(typeof config.logLevel === 'undefined' ? 0 : config.logLevel);\n\n\tlet filepaths;\n\tfilepaths = traverseMultipleDirectory([config.scripts]);\n\tfilepaths = filepaths\n\t\t.filter((v) => !path.basename(v).startsWith('_'))\n\t\t.sort((a: string, b: string) => {\n\t\t\tif (a < b) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif (a > b) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t});\n\n\tlet providedContext: ProvidedContext<Artifacts, NamedAccounts> | undefined;\n\n\tconst scriptModuleByFilePath: {[filename: string]: DeployScriptModule} = {};\n\tconst scriptPathBags: {[tag: string]: string[]} = {};\n\tconst scriptFilePaths: string[] = [];\n\n\tfor (const filepath of filepaths) {\n\t\tconst scriptFilePath = path.resolve(filepath);\n\t\tlet scriptModule: DeployScriptModule;\n\t\ttry {\n\t\t\tif (require.cache) {\n\t\t\t\tdelete require.cache[scriptFilePath]; // ensure we reload it every time, so changes are taken in consideration\n\t\t\t}\n\t\t\tscriptModule = require(scriptFilePath);\n\n\t\t\tif ((scriptModule as any).default) {\n\t\t\t\tscriptModule = (scriptModule as any).default as DeployScriptModule;\n\t\t\t\tif ((scriptModule as any).default) {\n\t\t\t\t\tlogger.warn(`double default...`);\n\t\t\t\t\tscriptModule = (scriptModule as any).default as DeployScriptModule;\n\t\t\t\t}\n\t\t\t}\n\t\t\tscriptModuleByFilePath[scriptFilePath] = scriptModule;\n\t\t\tif (providedContext && providedContext !== scriptModule.providedContext) {\n\t\t\t\tthrow new Error(`context between 2 scripts is different, please share the same across them`);\n\t\t\t}\n\t\t\tprovidedContext = scriptModule.providedContext as ProvidedContext<Artifacts, NamedAccounts>;\n\t\t} catch (e) {\n\t\t\tlogger.error(`could not import ${filepath}`);\n\t\t\tthrow e;\n\t\t}\n\n\t\tlet scriptTags = scriptModule.tags;\n\t\tif (scriptTags !== undefined) {\n\t\t\tif (typeof scriptTags === 'string') {\n\t\t\t\tscriptTags = [scriptTags];\n\t\t\t}\n\t\t\tfor (const tag of scriptTags) {\n\t\t\t\tif (tag.indexOf(',') >= 0) {\n\t\t\t\t\tthrow new Error('Tag cannot contains commas');\n\t\t\t\t}\n\t\t\t\tconst bag = scriptPathBags[tag] || [];\n\t\t\t\tscriptPathBags[tag] = bag;\n\t\t\t\tbag.push(scriptFilePath);\n\t\t\t}\n\t\t}\n\n\t\tif (config.tags !== undefined && config.tags.length > 0) {\n\t\t\tlet found = false;\n\t\t\tif (scriptTags !== undefined) {\n\t\t\t\tfor (const tagToFind of config.tags) {\n\t\t\t\t\tfor (const tag of scriptTags) {\n\t\t\t\t\t\tif (tag === tagToFind) {\n\t\t\t\t\t\t\tscriptFilePaths.push(scriptFilePath);\n\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (found) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tscriptFilePaths.push(scriptFilePath);\n\t\t}\n\t}\n\n\tif (!providedContext) {\n\t\tthrow new Error(`no context loaded`);\n\t}\n\n\tconst {internal, external} = await createEnvironment(config, providedContext);\n\n\tawait internal.recoverTransactionsIfAny();\n\n\tconst scriptsRegisteredToRun: {[filename: string]: boolean} = {};\n\tconst scriptsToRun: Array<{\n\t\tfunc: DeployScriptModule;\n\t\tfilePath: string;\n\t}> = [];\n\tconst scriptsToRunAtTheEnd: Array<{\n\t\tfunc: DeployScriptModule;\n\t\tfilePath: string;\n\t}> = [];\n\tfunction recurseDependencies(scriptFilePath: string) {\n\t\tif (scriptsRegisteredToRun[scriptFilePath]) {\n\t\t\treturn;\n\t\t}\n\t\tconst scriptModule = scriptModuleByFilePath[scriptFilePath];\n\t\tif (scriptModule.dependencies) {\n\t\t\tfor (const dependency of scriptModule.dependencies) {\n\t\t\t\tconst scriptFilePathsToAdd = scriptPathBags[dependency];\n\t\t\t\tif (scriptFilePathsToAdd) {\n\t\t\t\t\tfor (const scriptFilenameToAdd of scriptFilePathsToAdd) {\n\t\t\t\t\t\trecurseDependencies(scriptFilenameToAdd);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!scriptsRegisteredToRun[scriptFilePath]) {\n\t\t\tif (scriptModule.runAtTheEnd) {\n\t\t\t\tscriptsToRunAtTheEnd.push({\n\t\t\t\t\tfilePath: scriptFilePath,\n\t\t\t\t\tfunc: scriptModule,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tscriptsToRun.push({\n\t\t\t\t\tfilePath: scriptFilePath,\n\t\t\t\t\tfunc: scriptModule,\n\t\t\t\t});\n\t\t\t}\n\t\t\tscriptsRegisteredToRun[scriptFilePath] = true;\n\t\t}\n\t}\n\tfor (const scriptFilePath of scriptFilePaths) {\n\t\trecurseDependencies(scriptFilePath);\n\t}\n\n\tfor (const deployScript of scriptsToRun.concat(scriptsToRunAtTheEnd)) {\n\t\tconst filename = path.basename(deployScript.filePath);\n\t\tconst relativeFilepath = path.relative('.', deployScript.filePath);\n\t\t// if (deployScript.func.id && this.db.migrations[deployScript.func.id]) {\n\t\t// \tlogger.info(`skipping ${filename} as migrations already executed and complete`);\n\t\t// \tcontinue;\n\t\t// }\n\t\tlet skip = false;\n\t\tconst spinner = spin(`- Executing ${filename}`);\n\t\tif (deployScript.func.skip) {\n\t\t\tconst spinner = spin(` - skip?()`);\n\t\t\ttry {\n\t\t\t\tskip = await deployScript.func.skip(external);\n\t\t\t\tspinner.succeed(skip ? `skipping ${filename}` : undefined);\n\t\t\t} catch (e) {\n\t\t\t\tspinner.fail();\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t\tif (!skip) {\n\t\t\tlet result;\n\n\t\t\ttry {\n\t\t\t\tresult = await deployScript.func(external);\n\t\t\t\tspinner.succeed(`\\n`);\n\t\t\t} catch (e) {\n\t\t\t\tspinner.fail();\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\tif (result && typeof result === 'boolean') {\n\t\t\t\t// if (!deployScript.func.id) {\n\t\t\t\t// \tthrow new Error(\n\t\t\t\t// \t\t`${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`\n\t\t\t\t// \t);\n\t\t\t\t// }\n\t\t\t\t// this.db.migrations[deployScript.func.id] = Math.floor(Date.now() / 1000);\n\n\t\t\t\tconst deploymentFolderPath = config.deployments;\n\n\t\t\t\t// TODO refactor to extract this whole path and folder existence stuff\n\t\t\t\t// const toSave = this.db.writeDeploymentsToFiles && this.network.saveDeployments;\n\t\t\t\t// if (toSave) {\n\t\t\t\t// \ttry {\n\t\t\t\t// \t\tfs.mkdirSync(this.deploymentsPath);\n\t\t\t\t// \t} catch (e) {}\n\t\t\t\t// \ttry {\n\t\t\t\t// \t\tfs.mkdirSync(path.join(this.deploymentsPath, deploymentFolderPath));\n\t\t\t\t// \t} catch (e) {}\n\t\t\t\t// \tfs.writeFileSync(\n\t\t\t\t// \t\tpath.join(this.deploymentsPath, deploymentFolderPath, '.migrations.json'),\n\t\t\t\t// \t\tJSON.stringify(this.db.migrations, null, ' ')\n\t\t\t\t// \t);\n\t\t\t\t// }\n\t\t\t}\n\t\t}\n\t}\n\n\treturn external;\n}\n","import fs from 'node:fs';\n\nimport {TransactionReceipt, createPublicClient, custom} from 'viem';\nimport {\n\tAccountType,\n\tDeployment,\n\tEnvironment,\n\tNamedSigner,\n\tPendingDeployment,\n\tPendingTransaction,\n\tResolvedAccount,\n\tResolvedConfig,\n\tResolvedNamedAccounts,\n\tResolvedNamedSigners,\n\tUnknownArtifacts,\n\tUnknownDeployments,\n\tUnresolvedUnknownNamedAccounts,\n} from './types';\nimport {JSONRPCHTTPProvider} from 'eip-1193-json-provider';\nimport {Abi} from 'abitype';\nimport {InternalEnvironment} from '../internal/types';\nimport path from 'node:path';\nimport {JSONToString, stringToJSON} from '../utils/json';\nimport {loadDeployments} from './deployments';\nimport {\n\tEIP1193Account,\n\tEIP1193DATA,\n\tEIP1193ProviderWithoutEvents,\n\tEIP1193Transaction,\n\tEIP1193TransactionReceipt,\n} from 'eip-1193';\nimport {ProvidedContext} from '../executor/types';\nimport {spin} from '../internal/logging';\nimport {PendingExecution} from './types';\n\nexport type EnvironmentExtenstion = (env: Environment) => Environment;\n//we store this globally so this is not lost\n(globalThis as any).extensions = [];\nexport function extendEnvironment(extension: EnvironmentExtenstion): void {\n\t(globalThis as any).extensions.push(extension);\n}\n\nexport type SignerProtocolFunction = (protocolString: string) => Promise<NamedSigner>;\nexport type SignerProtocol = {\n\tgetSigner: SignerProtocolFunction;\n};\n\n//we store this globally so this is not lost\n(globalThis as any).signerProtocols = {};\nexport function handleSignerProtocol(protocol: string, getSigner: SignerProtocolFunction): void {\n\t(globalThis as any).signerProtocols[protocol] = {\n\t\tgetSigner,\n\t};\n}\n\nfunction wait(numSeconds: number): Promise<void> {\n\treturn new Promise((resolve) => {\n\t\tsetTimeout(resolve, numSeconds * 1000);\n\t});\n}\n\nfunction displayTransaction(transaction: EIP1193Transaction) {\n\tif (transaction.type === '0x2') {\n\t\treturn `(maxFeePerGas: ${BigInt(transaction.maxFeePerGas).toString()}, maxPriorityFeePerGas: ${BigInt(\n\t\t\ttransaction.maxPriorityFeePerGas\n\t\t).toString()})`;\n\t} else {\n\t\treturn `(gasPrice: ${BigInt(transaction.gasPrice).toString()})`;\n\t}\n}\n\nexport async function createEnvironment<\n\tArtifacts extends UnknownArtifacts = UnknownArtifacts,\n\tNamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts,\n\tDeployments extends UnknownDeployments = UnknownDeployments\n>(\n\tconfig: ResolvedConfig,\n\tprovidedContext: ProvidedContext<Artifacts, NamedAccounts>\n): Promise<{internal: InternalEnvironment; external: Environment}> {\n\tconst provider =\n\t\t'provider' in config ? config.provider : (new JSONRPCHTTPProvider(config.nodeUrl) as EIP1193ProviderWithoutEvents);\n\n\tconst transport = custom(provider);\n\tconst viemClient = createPublicClient({transport});\n\n\tconst chainId = (await viemClient.getChainId()).toString();\n\n\tlet networkName: string;\n\tlet saveDeployments: boolean;\n\tlet tags: {[tag: string]: boolean} = {};\n\tif ('nodeUrl' in config) {\n\t\tnetworkName = config.networkName;\n\t\tsaveDeployments = true;\n\t} else {\n\t\tif (config.networkName) {\n\t\t\tnetworkName = config.networkName;\n\t\t} else {\n\t\t\tnetworkName = 'memory';\n\t\t}\n\t\tif (networkName === 'memory' || networkName === 'hardhat') {\n\t\t\ttags['memory'] = true;\n\t\t\tsaveDeployments = false;\n\t\t} else {\n\t\t\tsaveDeployments = true;\n\t\t}\n\t}\n\n\tconst resolvedAccounts: {[name: string]: ResolvedAccount} = {};\n\n\tconst accountCache: {[name: string]: ResolvedAccount} = {};\n\tasync function getAccount(\n\t\tname: string,\n\t\taccounts: UnresolvedUnknownNamedAccounts,\n\t\taccountDef: AccountType\n\t): Promise<ResolvedAccount | undefined> {\n\t\tif (accountCache[name]) {\n\t\t\treturn accountCache[name];\n\t\t}\n\t\tlet account: ResolvedAccount | undefined;\n\t\tif (typeof accountDef === 'number') {\n\t\t\tconst accounts = await provider.request({method: 'eth_accounts'});\n\t\t\tconst accountPerIndex = accounts[accountDef];\n\t\t\tif (accountPerIndex) {\n\t\t\t\taccountCache[name] = account = {\n\t\t\t\t\ttype: 'remote',\n\t\t\t\t\taddress: accountPerIndex,\n\t\t\t\t\tsigner: provider,\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (typeof accountDef === 'string') {\n\t\t\tif (accountDef.startsWith('0x')) {\n\t\t\t\tif (accountDef.length === 66) {\n\t\t\t\t\tconst privateKeyProtocol: SignerProtocol = (globalThis as any).signerProtocols['privateKey'];\n\t\t\t\t\tif (privateKeyProtocol) {\n\t\t\t\t\t\tconst namedSigner = await privateKeyProtocol.getSigner(`privateKey:${accountDef}`);\n\t\t\t\t\t\tconst [address] = await namedSigner.signer.request({method: 'eth_accounts'});\n\t\t\t\t\t\taccountCache[name] = account = {\n\t\t\t\t\t\t\t...namedSigner,\n\t\t\t\t\t\t\taddress,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\taccountCache[name] = account = {\n\t\t\t\t\t\ttype: 'remote',\n\t\t\t\t\t\taddress: accountDef as `0x${string}`,\n\t\t\t\t\t\tsigner: provider,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (accountDef.indexOf(':') > 0) {\n\t\t\t\t\tconst [protocolID, extra] = accountDef.split(':');\n\t\t\t\t\tconst protocol: SignerProtocol = (globalThis as any).signerProtocols[protocolID];\n\t\t\t\t\tif (!protocol) {\n\t\t\t\t\t\tthrow new Error(`protocol: ${protocol} is not supported`);\n\t\t\t\t\t}\n\t\t\t\t\tconst namedSigner = await protocol.getSigner(accountDef);\n\t\t\t\t\tconst [address] = await namedSigner.signer.request({method: 'eth_accounts'});\n\t\t\t\t\taccountCache[name] = account = {\n\t\t\t\t\t\t...namedSigner,\n\t\t\t\t\t\taddress,\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tconst accountFetched = await getAccount(name, accounts, accounts[accountDef]);\n\t\t\t\t\tif (accountFetched) {\n\t\t\t\t\t\taccountCache[name] = account = accountFetched;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst accountForNetwork = accountDef[networkName] || accountDef[chainId] || accountDef['default'];\n\t\t\tif (typeof accountForNetwork !== undefined) {\n\t\t\t\tconst accountFetched = await getAccount(name, accounts, accountForNetwork);\n\t\t\t\tif (accountFetched) {\n\t\t\t\t\taccountCache[name] = account = accountFetched;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn account;\n\t}\n\n\tif (providedContext.accounts) {\n\t\tconst accountNames = Object.keys(providedContext.accounts);\n\t\tfor (const accountName of accountNames) {\n\t\t\tlet account = await getAccount(accountName, providedContext.accounts, providedContext.accounts[accountName]);\n\t\t\t(resolvedAccounts as any)[accountName] = account;\n\t\t}\n\t}\n\n\tconst context = {\n\t\taccounts: resolvedAccounts,\n\t\tartifacts: providedContext.artifacts as Artifacts,\n\t\tnetwork: {\n\t\t\tname: networkName,\n\t\t\tsaveDeployments,\n\t\t\ttags,\n\t\t},\n\t};\n\n\tconst {deployments} = loadDeployments(config.deployments, context.network.name, false, chainId);\n\n\tconst namedAccounts: {[name: string]: EIP1193Account} = {};\n\tconst namedSigners: {[name: string]: NamedSigner} = {};\n\tconst addressSigners: {[name: `0x${string}`]: NamedSigner} = {};\n\n\tfor (const entry of Object.entries(resolvedAccounts)) {\n\t\tconst name = entry[0];\n\t\tconst {address, ...namedSigner} = entry[1];\n\t\tnamedAccounts[name] = address;\n\t\taddressSigners[address] = namedSigner;\n\t\tnamedSigners[name] = namedSigner;\n\t}\n\n\tconst perliminaryEnvironment = {\n\t\tconfig,\n\t\tdeployments: deployments as Deployments,\n\t\taccounts: namedAccounts as ResolvedNamedAccounts<NamedAccounts>,\n\t\tsigners: namedSigners as ResolvedNamedSigners<ResolvedNamedAccounts<NamedAccounts>>,\n\t\taddressSigners: addressSigners,\n\t\tartifacts: context.artifacts,\n\t\tnetwork: {\n\t\t\tchainId,\n\t\t\tname: context.network.name,\n\t\t\ttags: context.network.tags,\n\t\t\tprovider,\n\t\t},\n\t};\n\n\tfunction ensureDeploymentFolder(): string {\n\t\tconst folderPath = path.join(config.deployments, context.network.name);\n\t\tfs.mkdirSync(folderPath, {recursive: true});\n\t\tconst chainIdFilepath = path.join(folderPath, '.chainId');\n\t\tif (!fs.existsSync(chainIdFilepath)) {\n\t\t\tfs.writeFileSync(chainIdFilepath, chainId);\n\t\t}\n\t\treturn folderPath;\n\t}\n\n\t// const signer = {\n\t// \tasync sendTransaction(\n\t// \t\tprovider: EIP1193ProviderWithoutEvents,\n\t// \t\taccount: {\n\t// \t\t\taddresss: EIP1193Account;\n\t// \t\t\tconfig: unknown;\n\t// \t\t},\n\t// \t\ttransaction: EIP1193TransactionEIP1193DATA\n\t// \t): Promise<EIP1193DATA> {\n\t// \t\treturn '0x';\n\t// \t},\n\t// };\n\n\t// async function sendTransaction(transaction: EIP1193TransactionEIP1193DATA): Promise<EIP1193DATA> {\n\t// \treturn '0x';\n\t// }\n\n\tfunction get<TAbi extends Abi>(name: string): Deployment<TAbi> | undefined {\n\t\treturn deployments[name] as Deployment<TAbi> | undefined;\n\t}\n\n\tasync function save<TAbi extends Abi>(name: string, deployment: Deployment<TAbi>): Promise<Deployment<TAbi>> {\n\t\tdeployments[name] = deployment;\n\t\tif (context.network.saveDeployments) {\n\t\t\tconst folderPath = ensureDeploymentFolder();\n\t\t\tfs.writeFileSync(`${folderPath}/${name}.json`, JSONToString(deployment, 2));\n\t\t}\n\t\treturn deployment;\n\t}\n\n\tasync function recoverTransactionsIfAny<TAbi extends Abi = Abi>(): Promise<void> {\n\t\tif (!context.network.saveDeployments) {\n\t\t\treturn;\n\t\t}\n\t\tconst folderPath = ensureDeploymentFolder();\n\t\tconst filepath = path.join(folderPath, '.pending_transactions.json');\n\t\tlet existingPendingTansactions: PendingTransaction[];\n\t\ttry {\n\t\t\texistingPendingTansactions = stringToJSON(fs.readFileSync(filepath, 'utf-8'));\n\t\t} catch {\n\t\t\texistingPendingTansactions = [];\n\t\t}\n\t\tif (existingPendingTansactions.length > 0) {\n\t\t\twhile (existingPendingTansactions.length > 0) {\n\t\t\t\tconst pendingTransaction = existingPendingTansactions.shift();\n\t\t\t\tif (pendingTransaction) {\n\t\t\t\t\tif (pendingTransaction.type === 'deployment') {\n\t\t\t\t\t\tconst spinner = spin(\n\t\t\t\t\t\t\t`recovering ${pendingTransaction.name} with transaction ${pendingTransaction.transaction.hash}`\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait waitForDeploymentTransactionAndSave(pendingTransaction);\n\t\t\t\t\t\t\tfs.writeFileSync(filepath, JSONToString(existingPendingTansactions, 2));\n\t\t\t\t\t\t\tspinner.succeed();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tspinner.fail();\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst spinner = spin(`recovering execution's transaction ${pendingTransaction.transaction.hash}`);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait waitForTransaction(pendingTransaction.transaction.hash);\n\t\t\t\t\t\t\tfs.writeFileSync(filepath, JSONToString(existingPendingTansactions, 2));\n\t\t\t\t\t\t\tspinner.succeed();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tspinner.fail();\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfs.rmSync(filepath);\n\t\t}\n\t}\n\n\tasync function savePendingTransaction(pendingTransaction: PendingTransaction) {\n\t\tif (context.network.saveDeployments) {\n\t\t\tconst folderPath = ensureDeploymentFolder();\n\t\t\tconst filepath = path.join(folderPath, '.pending_transactions.json');\n\t\t\tlet existingPendinTransactions: PendingTransaction[];\n\t\t\ttry {\n\t\t\t\texistingPendinTransactions = stringToJSON(fs.readFileSync(filepath, 'utf-8'));\n\t\t\t} catch {\n\t\t\t\texistingPendinTransactions = [];\n\t\t\t}\n\t\t\texistingPendinTransactions.push(pendingTransaction);\n\t\t\tfs.writeFileSync(filepath, JSONToString(existingPendinTransactions, 2));\n\t\t}\n\t\treturn deployments;\n\t}\n\n\tasync function waitForTransactionReceipt(params: {\n\t\thash: EIP1193DATA;\n\t\t// confirmations?: number; // TODO\n\t\tpollingInterval?: number;\n\t\t// timeout?: number; // TODO\n\t}): Promise<EIP1193TransactionReceipt> {\n\t\t// const {hash, confirmations, pollingInterval, timeout} = {confirmations: 1, pollingInterval: 1, ...params};\n\t\tconst {hash, pollingInterval} = {pollingInterval: 1, ...params};\n\n\t\tlet receipt = await provider.request({\n\t\t\tmethod: 'eth_getTransactionReceipt',\n\t\t\tparams: [hash],\n\t\t});\n\t\tif (!receipt || !receipt.blockHash) {\n\t\t\tawait wait(pollingInterval);\n\t\t\treturn waitForTransactionReceipt(params);\n\t\t}\n\t\treturn receipt;\n\t}\n\n\tasync function deleteTransaction<TAbi extends Abi = Abi>(hash: string) {\n\t\tif (context.network.saveDeployments) {\n\t\t\tconst folderPath = ensureDeploymentFolder();\n\t\t\tconst filepath = path.join(folderPath, '.pending_transactions.json');\n\t\t\tlet existingPendinTransactions: PendingTransaction[];\n\t\t\ttry {\n\t\t\t\texistingPendinTransactions = stringToJSON(fs.readFileSync(filepath, 'utf-8'));\n\t\t\t} catch {\n\t\t\t\texistingPendinTransactions = [];\n\t\t\t}\n\t\t\texistingPendinTransactions = existingPendinTransactions.filter((v) => v.transaction.hash !== hash);\n\t\t\tif (existingPendinTransactions.length === 0) {\n\t\t\t\tfs.rmSync(filepath);\n\t\t\t} else {\n\t\t\t\tfs.writeFileSync(filepath, JSONToString(existingPendinTransactions, 2));\n\t\t\t}\n\t\t}\n\t}\n\n\tasync function exportDeploymentsAsTypes() {\n\t\tconst folderPath = './generated';\n\t\tfs.mkdirSync(folderPath, {recursive: true});\n\t\tfs.writeFileSync(`${folderPath}/deployments.ts`, `export default ${JSONToString(deployments, 2)} as const;`);\n\t}\n\n\tasync function waitForTransaction(\n\t\thash: `0x${string}`,\n\t\tinfo?: {message?: string; transaction?: EIP1193Transaction | null}\n\t): Promise<EIP1193TransactionReceipt> {\n\t\tconst spinner = spin(\n\t\t\tinfo?.message\n\t\t\t\t? info.message\n\t\t\t\t: ` - Broadcasting tx:\\n ${hash}${\n\t\t\t\t\t\tinfo?.transaction ? `\\n ${displayTransaction(info?.transaction)}` : ''\n\t\t\t\t }`\n\t\t);\n\t\tlet receipt: EIP1193TransactionReceipt;\n\t\ttry {\n\t\t\treceipt = await waitForTransactionReceipt({\n\t\t\t\thash,\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tspinner.fail();\n\t\t\tthrow e;\n\t\t}\n\t\tif (!receipt) {\n\t\t\tthrow new Error(`receipt for ${hash} not found`);\n\t\t} else {\n\t\t\tspinner.succeed();\n\t\t}\n\t\treturn receipt;\n\t}\n\n\tasync function waitForDeploymentTransactionAndSave<TAbi extends Abi = Abi>(\n\t\tpendingDeployment: PendingDeployment<TAbi>,\n\t\ttransaction?: EIP1193Transaction | null\n\t): Promise<Deployment<TAbi>> {\n\t\tconst message = ` - Deploying ${pendingDeployment.name} with tx:\\n ${pendingDeployment.transaction.hash}${\n\t\t\ttransaction ? `\\n ${displayTransaction(transaction)}` : ''\n\t\t}`;\n\t\tconst receipt = await waitForTransaction(pendingDeployment.transaction.hash, {message, transaction});\n\n\t\tif (!receipt.contractAddress) {\n\t\t\tthrow new Error(`failed to deploy contract ${pendingDeployment.name}`);\n\t\t}\n\t\tconst {abi, ...artifactObjectWithoutABI} = pendingDeployment.partialDeployment;\n\n\t\tif (!pendingDeployment.transaction.hash) {\n\t\t\tconst spinner = spin(); // TODO spin(`fetching nonce for ${pendingDeployment.txHash}`);\n\t\t\tlet transaction: EIP1193Transaction | null = null;\n\t\t\ttry {\n\t\t\t\ttransaction = await provider.request({\n\t\t\t\t\tmethod: 'eth_getTransactionByHash',\n\t\t\t\t\tparams: [pendingDeployment.transaction.hash],\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tspinner.fail();\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\tif (!transaction) {\n\t\t\t\tspinner.fail(`tx ${pendingDeployment.transaction.hash} not found`);\n\t\t\t} else {\n\t\t\t\tspinner.stop();\n\t\t\t}\n\n\t\t\tif (transaction) {\n\t\t\t\tpendingDeployment.transaction = {\n\t\t\t\t\tnonce: transaction.nonce,\n\t\t\t\t\thash: transaction.hash,\n\t\t\t\t\torigin: transaction.from,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// TODO options\n\t\tfor (const key of Object.keys(artifactObjectWithoutABI)) {\n\t\t\tif (key.startsWith('_')) {\n\t\t\t\tdelete (artifactObjectWithoutABI as any)[key];\n\t\t\t}\n\t\t\tif (key === 'evm') {\n\t\t\t\tconst {gasEstimates} = artifactObjectWithoutABI.evm;\n\t\t\t\tartifactObjectWithoutABI.evm = {\n\t\t\t\t\tgasEstimates,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst deployment = {\n\t\t\taddress: receipt.contractAddress,\n\t\t\tabi,\n\t\t\t...artifactObjectWithoutABI,\n\t\t\ttransaction: pendingDeployment.transaction,\n\t\t};\n\t\treturn save(pendingDeployment.name, deployment);\n\t}\n\n\tasync function savePendingExecution(pendingExecution: PendingExecution) {\n\t\tawait savePendingTransaction(pendingExecution);\n\t\tlet transaction: EIP1193Transaction | null = null;\n\t\tconst spinner = spin(); // TODO spin(`fetching tx from peers ${pendingDeployment.txHash}`);\n\t\ttry {\n\t\t\ttransaction = await provider.request({\n\t\t\t\tmethod: 'eth_getTransactionByHash',\n\t\t\t\tparams: [pendingExecution.transaction.hash],\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tspinner.fail();\n\t\t\tthrow e;\n\t\t}\n\t\tif (!transaction) {\n\t\t\tspinner.fail(`tx ${pendingExecution.transaction.hash} not found`);\n\t\t} else {\n\t\t\tspinner.stop();\n\t\t}\n\n\t\tif (transaction) {\n\t\t\tpendingExecution.transaction.nonce = transaction.nonce;\n\t\t\tpendingExecution.transaction.origin = transaction.from;\n\t\t}\n\n\t\tconst receipt = await waitForTransaction(pendingExecution.transaction.hash, {transaction});\n\t\tawait deleteTransaction(pendingExecution.transaction.hash);\n\t\treturn receipt;\n\t}\n\n\tasync function savePendingDeployment<TAbi extends Abi = Abi>(pendingDeployment: PendingDeployment<TAbi>) {\n\t\tawait savePendingTransaction(pendingDeployment);\n\t\tlet transaction: EIP1193Transaction | null = null;\n\t\tconst spinner = spin(); // TODO spin(`fetching tx from peers ${pendingDeployment.txHash}`);\n\t\ttry {\n\t\t\ttransaction = await provider.request({\n\t\t\t\tmethod: 'eth_getTransactionByHash',\n\t\t\t\tparams: [pendingDeployment.transaction.hash],\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tspinner.fail();\n\t\t\tthrow e;\n\t\t}\n\t\tif (!transaction) {\n\t\t\tspinner.fail(`tx ${pendingDeployment.transaction.hash} not found`);\n\t\t} else {\n\t\t\tspinner.stop();\n\t\t}\n\n\t\tif (transaction) {\n\t\t\t// we update the tx data with the one we get from the network\n\t\t\tpendingDeployment = {\n\t\t\t\t...pendingDeployment,\n\t\t\t\ttransaction: {hash: transaction.hash, nonce: transaction.nonce, origin: transaction.from},\n\t\t\t};\n\t\t}\n\n\t\tconst deployment = await waitForDeploymentTransactionAndSave<TAbi>(pendingDeployment, transaction);\n\t\tawait deleteTransaction(pendingDeployment.transaction.hash);\n\t\treturn deployment;\n\t}\n\n\tlet env: Environment<Artifacts, NamedAccounts, Deployments> = {\n\t\t...perliminaryEnvironment,\n\t\tsave,\n\t\tsavePendingDeployment,\n\t\tsavePendingExecution,\n\t\tget,\n\t};\n\tfor (const extension of (globalThis as any).extensions) {\n\t\tenv = extension(env);\n\t}\n\n\treturn {\n\t\texternal: env,\n\t\tinternal: {\n\t\t\texportDeploymentsAsTypes,\n\t\t\trecoverTransactionsIfAny,\n\t\t},\n\t};\n}\n","// TODO share with db-utils\nexport function bnReplacer(k: string, v: any): any {\n\tif (typeof v === 'bigint') {\n\t\treturn v.toString() + 'n';\n\t}\n\treturn v;\n}\n\nexport function bnReviver(k: string, v: any): any {\n\tif (\n\t\ttypeof v === 'string' &&\n\t\t(v.startsWith('-') ? !isNaN(parseInt(v.charAt(1))) : !isNaN(parseInt(v.charAt(0)))) &&\n\t\tv.charAt(v.length - 1) === 'n'\n\t) {\n\t\treturn BigInt(v.slice(0, -1));\n\t}\n\treturn v;\n}\n\nexport function JSONToString<T = unknown>(json: unknown, space?: string | number) {\n\treturn JSON.stringify(json, bnReplacer, space);\n}\n\nexport function stringToJSON<T = unknown>(str: string): T {\n\treturn JSON.parse(str, bnReviver);\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport {traverse} from '../utils/fs';\nimport {UnknownDeployments} from './types';\n\nexport function loadDeployments(\n\tdeploymentsPath: string,\n\tsubPath: string,\n\tonlyABIAndAddress?: boolean,\n\texpectedChainId?: string\n): {deployments: UnknownDeployments; chainId?: string} {\n\tconst deploymentsFound: UnknownDeployments = {};\n\tconst deployPath = path.join(deploymentsPath, subPath);\n\n\tlet filesStats;\n\ttry {\n\t\tfilesStats = traverse(deployPath, undefined, undefined, (name) => !name.startsWith('.') && name !== 'solcInputs');\n\t} catch (e) {\n\t\t// console.log('no folder at ' + deployPath);\n\t\treturn {deployments: {}};\n\t}\n\tlet chainId: string;\n\tif (filesStats.length > 0) {\n\t\tconst chainIdFilepath = path.join(deployPath, '.chainId');\n\t\tif (fs.existsSync(chainIdFilepath)) {\n\t\t\tchainId = fs.readFileSync(chainIdFilepath).toString().trim();\n\t\t} else {\n\t\t\tthrow new Error(`A .chainId' file is expected to be present in the deployment folder for network ${subPath}`);\n\t\t}\n\n\t\tif (expectedChainId) {\n\t\t\tif (expectedChainId !== chainId) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Loading deployment in folder '${deployPath}' (with chainId: ${chainId}) for a different chainId (${expectedChainId})`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t} else {\n\t\treturn {deployments: {}};\n\t}\n\tlet fileNames = filesStats.map((a) => a.relativePath);\n\tfileNames = fileNames.sort((a, b) => {\n\t\tif (a < b) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a > b) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n\n\tfor (const fileName of fileNames) {\n\t\tif (fileName.substring(fileName.length - 5) === '.json') {\n\t\t\tconst deploymentFileName = path.join(deployPath, fileName);\n\t\t\tlet deployment = JSON.parse(fs.readFileSync(deploymentFileName).toString());\n\t\t\t// truffleChainId argument:\n\t\t\t// if (!deployment.address && deployment.networks) {\n\t\t\t// \tif (truffleChainId && deployment.networks[truffleChainId]) {\n\t\t\t// \t\t// TRUFFLE support\n\t\t\t// \t\tconst truffleDeployment = deployment as any; // TruffleDeployment;\n\t\t\t// \t\tdeployment.address = truffleDeployment.networks[truffleChainId].address;\n\t\t\t// \t\tdeployment.transactionHash = truffleDeployment.networks[truffleChainId].transactionHash;\n\t\t\t// \t}\n\t\t\t// }\n\t\t\tif (onlyABIAndAddress) {\n\t\t\t\tdeployment = {\n\t\t\t\t\taddress: deployment.address,\n\t\t\t\t\tabi: deployment.abi,\n\t\t\t\t\tlinkedData: deployment.linkedData,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst name = fileName.slice(0, fileName.length - 5);\n\t\t\t// console.log('fetching ' + deploymentFileName + ' for ' + name);\n\n\t\t\tdeploymentsFound[name] = deployment;\n\t\t}\n\t}\n\treturn {deployments: deploymentsFound, chainId};\n}\n","import {logs} from 'named-logs';\n\nimport {hookup, logs as Logging} from 'named-logs-console';\n// import ora from 'ora-cjs';\nhookup();\n\nexport function setLogLevel(level: number) {\n\tLogging.level = level;\n\tif (Logging.level > 0) {\n\t\tLogging.enable();\n\t} else {\n\t\tLogging.disable();\n\t}\n}\n\nexport const logger = logs('rocketh');\n\ntype PartialOra = {\n\tstart(msg?: string): PartialOra;\n\tstop(): PartialOra;\n\tsucceed(msg?: string): PartialOra;\n\tfail(msg?: string): PartialOra;\n};\nconst voidSpinner: PartialOra = {\n\tstart(msg?: string) {\n\t\tif (msg) {\n\t\t\tconsole.log(msg);\n\t\t}\n\t\treturn this;\n\t},\n\tstop() {\n\t\treturn this;\n\t},\n\tsucceed(msg?: string) {\n\t\tif (msg) {\n\t\t\tconsole.log(msg);\n\t\t}\n\t\treturn this;\n\t},\n\tfail(msg?: string) {\n\t\tif (msg) {\n\t\t\tconsole.error(msg);\n\t\t}\n\t\treturn this;\n\t},\n};\n// export function spin(message: string): PartialOra {\n// \treturn Logging.level > 0 ? ora(message).start() : voidSpinner;\n// }\n\n// let lastSpin = ora('rocketh');\nlet lastSpin = voidSpinner;\nexport function spin(message?: string): PartialOra {\n\tif (Logging.level > 0) {\n\t\tlastSpin = lastSpin.start(message);\n\t\treturn lastSpin;\n\t} else {\n\t\treturn voidSpinner;\n\t}\n}\n"],"mappings":"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","names":["path","fs","import_node_path","import_node_fs","import_node_fs","import_node_path","import_node_path","import_node_fs","path","fs","Logging","accounts","path","fs","transaction","fs","path","spinner"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils/fs.ts","../src/executor/index.ts","../src/environment/index.ts","../src/utils/json.ts","../src/environment/deployments.ts","../src/internal/logging.ts"],"sourcesContent":["export * from './executor';\nexport * from './executor/types';\nexport * from './environment/types';\nexport {extendEnvironment, handleSignerProtocol} from './environment';\nexport {loadDeployments} from './environment/deployments';\n","// taken from https://github.com/vitejs/vite/blob/63524bac878e8d3771d34ad7ad2e10cd16870ff4/packages/vite/src/node/utils.ts#L371-L400\nimport fs from 'node:fs';\nimport path from 'node:path';\n\ninterface LookupFileOptions {\n\tpathOnly?: boolean;\n\trootDir?: string;\n\tpredicate?: (file: string) => boolean;\n}\n\nexport function lookupFile(dir: string, formats: string[], options?: LookupFileOptions): string | undefined {\n\tfor (const format of formats) {\n\t\tconst fullPath = path.join(dir, format);\n\t\tif (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {\n\t\t\tconst result = options?.pathOnly ? fullPath : fs.readFileSync(fullPath, 'utf-8');\n\t\t\tif (!options?.predicate || options.predicate(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tconst parentDir = path.dirname(dir);\n\tif (parentDir !== dir && (!options?.rootDir || parentDir.startsWith(options?.rootDir))) {\n\t\treturn lookupFile(parentDir, formats, options);\n\t}\n}\n\nexport function traverseMultipleDirectory(dirs: string[]): string[] {\n\tconst filepaths = [];\n\tfor (const dir of dirs) {\n\t\tlet filesStats = traverse(dir);\n\t\tfilesStats = filesStats.filter((v) => !v.directory);\n\t\tfor (const filestat of filesStats) {\n\t\t\tfilepaths.push(path.join(dir, filestat.relativePath));\n\t\t}\n\t}\n\treturn filepaths;\n}\n\nexport const traverse = function (\n\tdir: string,\n\tresult: any[] = [],\n\ttopDir?: string,\n\tfilter?: (name: string, stats: any) => boolean // TODO any is Stats\n): Array<{\n\tname: string;\n\tpath: string;\n\trelativePath: string;\n\tmtimeMs: number;\n\tdirectory: boolean;\n}> {\n\tfs.readdirSync(dir).forEach((name) => {\n\t\tconst fPath = path.resolve(dir, name);\n\t\tconst stats = fs.statSync(fPath);\n\t\tif ((!filter && !name.startsWith('.')) || (filter && filter(name, stats))) {\n\t\t\tconst fileStats = {\n\t\t\t\tname,\n\t\t\t\tpath: fPath,\n\t\t\t\trelativePath: path.relative(topDir || dir, fPath),\n\t\t\t\tmtimeMs: stats.mtimeMs,\n\t\t\t\tdirectory: stats.isDirectory(),\n\t\t\t};\n\t\t\tif (fileStats.directory) {\n\t\t\t\tresult.push(fileStats);\n\t\t\t\treturn traverse(fPath, result, topDir || dir, filter);\n\t\t\t}\n\t\t\tresult.push(fileStats);\n\t\t}\n\t});\n\treturn result;\n};\n","import {traverseMultipleDirectory} from '../utils/fs';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type {\n\tConfig,\n\tEnvironment,\n\tResolvedConfig,\n\tResolvedNamedAccounts,\n\tUnknownArtifacts,\n\tUnknownDeployments,\n\tUnresolvedUnknownNamedAccounts,\n} from '../environment/types';\nimport {createEnvironment} from '../environment';\nimport {DeployScriptFunction, DeployScriptModule, ProvidedContext} from './types';\nimport {logger, setLogLevel, spin} from '../internal/logging';\n\nrequire('esbuild-register/dist/node').register();\n\nexport function execute<\n\tArtifacts extends UnknownArtifacts = UnknownArtifacts,\n\tNamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts,\n\tArgumentsType = undefined,\n\tDeployments extends UnknownDeployments = UnknownDeployments\n>(\n\tcontext: ProvidedContext<Artifacts, NamedAccounts>,\n\tcallback: DeployScriptFunction<Artifacts, ResolvedNamedAccounts<NamedAccounts>, ArgumentsType, Deployments>,\n\toptions: {tags?: string[]; dependencies?: string[]}\n): DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType, Deployments> {\n\tconst scriptModule = (\n\t\tenv: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>,\n\t\targs?: ArgumentsType\n\t) => callback(env, args);\n\tscriptModule.providedContext = context;\n\tscriptModule.tags = options.tags;\n\tscriptModule.dependencies = options.dependencies;\n\t// TODO id + skip\n\treturn scriptModule as unknown as DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType, Deployments>;\n}\n\nexport type ConfigOptions = {network: string; deployments?: string; scripts?: string; tags?: string};\n\nexport function readConfig(options: ConfigOptions, extra?: {ignoreMissingRPC?: boolean}): Config {\n\ttype Networks = {[name: string]: {rpcUrl: string}};\n\ttype ConfigFile = {networks: Networks};\n\tlet configFile: ConfigFile | undefined;\n\ttry {\n\t\tconst configString = fs.readFileSync('./rocketh.json', 'utf-8');\n\t\tconfigFile = JSON.parse(configString);\n\t} catch {}\n\n\tlet nodeUrl: string;\n\tconst fromEnv = process.env['ETH_NODE_URI_' + options.network];\n\tif (typeof fromEnv === 'string') {\n\t\tnodeUrl = fromEnv;\n\t} else {\n\t\tif (configFile) {\n\t\t\tconst network = configFile.networks && configFile.networks[options.network];\n\t\t\tif (network) {\n\t\t\t\tnodeUrl = network.rpcUrl;\n\t\t\t} else {\n\t\t\t\tif (extra?.ignoreMissingRPC) {\n\t\t\t\t\tnodeUrl = '';\n\t\t\t\t} else {\n\t\t\t\t\tif (options.network === 'localhost') {\n\t\t\t\t\t\tnodeUrl = 'http://127.0.0.1:8545';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlogger.error(`network \"${options.network}\" is not configured. Please add it to the rocketh.json file`);\n\t\t\t\t\t\tprocess.exit(1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (extra?.ignoreMissingRPC) {\n\t\t\t\tnodeUrl = '';\n\t\t\t} else {\n\t\t\t\tif (options.network === 'localhost') {\n\t\t\t\t\tnodeUrl = 'http://127.0.0.1:8545';\n\t\t\t\t} else {\n\t\t\t\t\tlogger.error(`network \"${options.network}\" is not configured. Please add it to the rocketh.json file`);\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tnodeUrl,\n\t\tnetworkName: options.network,\n\t\tdeployments: options.deployments,\n\t\tscripts: options.scripts,\n\t\ttags: typeof options.tags === 'undefined' ? undefined : options.tags.split(','),\n\t};\n}\n\nexport function readAndResolveConfig(options: ConfigOptions, extra?: {ignoreMissingRPC?: boolean}): ResolvedConfig {\n\treturn resolveConfig(readConfig(options, extra));\n}\n\nexport function resolveConfig(config: Config): ResolvedConfig {\n\tconst resolvedConfig: ResolvedConfig = {\n\t\t...config,\n\t\tnetworkName: config.networkName || 'memory',\n\t\tdeployments: config.deployments || 'deployments',\n\t\tscripts: config.scripts || 'deploy',\n\t\ttags: config.tags || [],\n\t};\n\treturn resolvedConfig;\n}\n\nexport async function loadEnvironment<\n\tArtifacts extends UnknownArtifacts = UnknownArtifacts,\n\tNamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts\n>(config: Config, context: ProvidedContext<Artifacts, NamedAccounts>): Promise<Environment> {\n\tconst resolvedConfig = resolveConfig(config);\n\tconst {external, internal} = await createEnvironment(resolvedConfig, context);\n\treturn external;\n}\n\nexport async function loadAndExecuteDeployments<\n\tArtifacts extends UnknownArtifacts = UnknownArtifacts,\n\tNamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts,\n\tArgumentsType = undefined,\n\tDeployments extends UnknownDeployments = UnknownDeployments\n>(config: Config, args?: ArgumentsType): Promise<Environment> {\n\tconst resolvedConfig = resolveConfig(config);\n\treturn executeDeployScripts<Artifacts, NamedAccounts, ArgumentsType, Deployments>(resolvedConfig, args);\n}\n\nexport async function executeDeployScripts<\n\tArtifacts extends UnknownArtifacts = UnknownArtifacts,\n\tNamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts,\n\tArgumentsType = undefined,\n\tDeployments extends UnknownDeployments = UnknownDeployments\n>(config: ResolvedConfig, args?: ArgumentsType): Promise<Environment> {\n\tsetLogLevel(typeof config.logLevel === 'undefined' ? 0 : config.logLevel);\n\n\tlet filepaths;\n\tfilepaths = traverseMultipleDirectory([config.scripts]);\n\tfilepaths = filepaths\n\t\t.filter((v) => !path.basename(v).startsWith('_'))\n\t\t.sort((a: string, b: string) => {\n\t\t\tif (a < b) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif (a > b) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t});\n\n\tlet providedContext: ProvidedContext<Artifacts, NamedAccounts> | undefined;\n\n\tconst scriptModuleByFilePath: {[filename: string]: DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType>} = {};\n\tconst scriptPathBags: {[tag: string]: string[]} = {};\n\tconst scriptFilePaths: string[] = [];\n\n\tfor (const filepath of filepaths) {\n\t\tconst scriptFilePath = path.resolve(filepath);\n\t\tlet scriptModule: DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType>;\n\t\ttry {\n\t\t\tif (require.cache) {\n\t\t\t\tdelete require.cache[scriptFilePath]; // ensure we reload it every time, so changes are taken in consideration\n\t\t\t}\n\t\t\tscriptModule = require(scriptFilePath);\n\n\t\t\tif ((scriptModule as any).default) {\n\t\t\t\tscriptModule = (scriptModule as any).default as DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType>;\n\t\t\t\tif ((scriptModule as any).default) {\n\t\t\t\t\tlogger.warn(`double default...`);\n\t\t\t\t\tscriptModule = (scriptModule as any).default as DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType>;\n\t\t\t\t}\n\t\t\t}\n\t\t\tscriptModuleByFilePath[scriptFilePath] = scriptModule;\n\t\t\tif (providedContext && providedContext !== scriptModule.providedContext) {\n\t\t\t\tthrow new Error(`context between 2 scripts is different, please share the same across them`);\n\t\t\t}\n\t\t\tprovidedContext = scriptModule.providedContext as ProvidedContext<Artifacts, NamedAccounts>;\n\t\t} catch (e) {\n\t\t\tlogger.error(`could not import ${filepath}`);\n\t\t\tthrow e;\n\t\t}\n\n\t\tlet scriptTags = scriptModule.tags;\n\t\tif (scriptTags !== undefined) {\n\t\t\tif (typeof scriptTags === 'string') {\n\t\t\t\tscriptTags = [scriptTags];\n\t\t\t}\n\t\t\tfor (const tag of scriptTags) {\n\t\t\t\tif (tag.indexOf(',') >= 0) {\n\t\t\t\t\tthrow new Error('Tag cannot contains commas');\n\t\t\t\t}\n\t\t\t\tconst bag = scriptPathBags[tag] || [];\n\t\t\t\tscriptPathBags[tag] = bag;\n\t\t\t\tbag.push(scriptFilePath);\n\t\t\t}\n\t\t}\n\n\t\tif (config.tags !== undefined && config.tags.length > 0) {\n\t\t\tlet found = false;\n\t\t\tif (scriptTags !== undefined) {\n\t\t\t\tfor (const tagToFind of config.tags) {\n\t\t\t\t\tfor (const tag of scriptTags) {\n\t\t\t\t\t\tif (tag === tagToFind) {\n\t\t\t\t\t\t\tscriptFilePaths.push(scriptFilePath);\n\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (found) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tscriptFilePaths.push(scriptFilePath);\n\t\t}\n\t}\n\n\tif (!providedContext) {\n\t\tthrow new Error(`no context loaded`);\n\t}\n\n\tconst {internal, external} = await createEnvironment(config, providedContext);\n\n\tawait internal.recoverTransactionsIfAny();\n\n\tconst scriptsRegisteredToRun: {[filename: string]: boolean} = {};\n\tconst scriptsToRun: Array<{\n\t\tfunc: DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType>;\n\t\tfilePath: string;\n\t}> = [];\n\tconst scriptsToRunAtTheEnd: Array<{\n\t\tfunc: DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType>;\n\t\tfilePath: string;\n\t}> = [];\n\tfunction recurseDependencies(scriptFilePath: string) {\n\t\tif (scriptsRegisteredToRun[scriptFilePath]) {\n\t\t\treturn;\n\t\t}\n\t\tconst scriptModule = scriptModuleByFilePath[scriptFilePath];\n\t\tif (scriptModule.dependencies) {\n\t\t\tfor (const dependency of scriptModule.dependencies) {\n\t\t\t\tconst scriptFilePathsToAdd = scriptPathBags[dependency];\n\t\t\t\tif (scriptFilePathsToAdd) {\n\t\t\t\t\tfor (const scriptFilenameToAdd of scriptFilePathsToAdd) {\n\t\t\t\t\t\trecurseDependencies(scriptFilenameToAdd);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!scriptsRegisteredToRun[scriptFilePath]) {\n\t\t\tif (scriptModule.runAtTheEnd) {\n\t\t\t\tscriptsToRunAtTheEnd.push({\n\t\t\t\t\tfilePath: scriptFilePath,\n\t\t\t\t\tfunc: scriptModule,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tscriptsToRun.push({\n\t\t\t\t\tfilePath: scriptFilePath,\n\t\t\t\t\tfunc: scriptModule,\n\t\t\t\t});\n\t\t\t}\n\t\t\tscriptsRegisteredToRun[scriptFilePath] = true;\n\t\t}\n\t}\n\tfor (const scriptFilePath of scriptFilePaths) {\n\t\trecurseDependencies(scriptFilePath);\n\t}\n\n\tfor (const deployScript of scriptsToRun.concat(scriptsToRunAtTheEnd)) {\n\t\tconst filename = path.basename(deployScript.filePath);\n\t\tconst relativeFilepath = path.relative('.', deployScript.filePath);\n\t\t// if (deployScript.func.id && this.db.migrations[deployScript.func.id]) {\n\t\t// \tlogger.info(`skipping ${filename} as migrations already executed and complete`);\n\t\t// \tcontinue;\n\t\t// }\n\t\tlet skip = false;\n\t\tconst spinner = spin(`- Executing ${filename}`);\n\t\tif (deployScript.func.skip) {\n\t\t\tconst spinner = spin(` - skip?()`);\n\t\t\ttry {\n\t\t\t\tskip = await deployScript.func.skip(external, args);\n\t\t\t\tspinner.succeed(skip ? `skipping ${filename}` : undefined);\n\t\t\t} catch (e) {\n\t\t\t\tspinner.fail();\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t\tif (!skip) {\n\t\t\tlet result;\n\n\t\t\ttry {\n\t\t\t\tresult = await deployScript.func(external, args);\n\t\t\t\tspinner.succeed(`\\n`);\n\t\t\t} catch (e) {\n\t\t\t\tspinner.fail();\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\tif (result && typeof result === 'boolean') {\n\t\t\t\t// if (!deployScript.func.id) {\n\t\t\t\t// \tthrow new Error(\n\t\t\t\t// \t\t`${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`\n\t\t\t\t// \t);\n\t\t\t\t// }\n\t\t\t\t// this.db.migrations[deployScript.func.id] = Math.floor(Date.now() / 1000);\n\n\t\t\t\tconst deploymentFolderPath = config.deployments;\n\n\t\t\t\t// TODO refactor to extract this whole path and folder existence stuff\n\t\t\t\t// const toSave = this.db.writeDeploymentsToFiles && this.network.saveDeployments;\n\t\t\t\t// if (toSave) {\n\t\t\t\t// \ttry {\n\t\t\t\t// \t\tfs.mkdirSync(this.deploymentsPath);\n\t\t\t\t// \t} catch (e) {}\n\t\t\t\t// \ttry {\n\t\t\t\t// \t\tfs.mkdirSync(path.join(this.deploymentsPath, deploymentFolderPath));\n\t\t\t\t// \t} catch (e) {}\n\t\t\t\t// \tfs.writeFileSync(\n\t\t\t\t// \t\tpath.join(this.deploymentsPath, deploymentFolderPath, '.migrations.json'),\n\t\t\t\t// \t\tJSON.stringify(this.db.migrations, null, ' ')\n\t\t\t\t// \t);\n\t\t\t\t// }\n\t\t\t}\n\t\t}\n\t}\n\n\treturn external;\n}\n","import fs from 'node:fs';\n\nimport {TransactionReceipt, createPublicClient, custom} from 'viem';\nimport {\n\tAccountType,\n\tDeployment,\n\tEnvironment,\n\tNamedSigner,\n\tPendingDeployment,\n\tPendingTransaction,\n\tResolvedAccount,\n\tResolvedConfig,\n\tResolvedNamedAccounts,\n\tResolvedNamedSigners,\n\tUnknownArtifacts,\n\tUnknownDeployments,\n\tUnresolvedUnknownNamedAccounts,\n} from './types';\nimport {JSONRPCHTTPProvider} from 'eip-1193-json-provider';\nimport {Abi} from 'abitype';\nimport {InternalEnvironment} from '../internal/types';\nimport path from 'node:path';\nimport {JSONToString, stringToJSON} from '../utils/json';\nimport {loadDeployments} from './deployments';\nimport {\n\tEIP1193Account,\n\tEIP1193DATA,\n\tEIP1193ProviderWithoutEvents,\n\tEIP1193Transaction,\n\tEIP1193TransactionReceipt,\n} from 'eip-1193';\nimport {ProvidedContext} from '../executor/types';\nimport {spin} from '../internal/logging';\nimport {PendingExecution} from './types';\n\nexport type EnvironmentExtenstion = (env: Environment) => Environment;\n//we store this globally so this is not lost\n(globalThis as any).extensions = [];\nexport function extendEnvironment(extension: EnvironmentExtenstion): void {\n\t(globalThis as any).extensions.push(extension);\n}\n\nexport type SignerProtocolFunction = (protocolString: string) => Promise<NamedSigner>;\nexport type SignerProtocol = {\n\tgetSigner: SignerProtocolFunction;\n};\n\n//we store this globally so this is not lost\n(globalThis as any).signerProtocols = {};\nexport function handleSignerProtocol(protocol: string, getSigner: SignerProtocolFunction): void {\n\t(globalThis as any).signerProtocols[protocol] = {\n\t\tgetSigner,\n\t};\n}\n\nfunction wait(numSeconds: number): Promise<void> {\n\treturn new Promise((resolve) => {\n\t\tsetTimeout(resolve, numSeconds * 1000);\n\t});\n}\n\nfunction displayTransaction(transaction: EIP1193Transaction) {\n\tif (transaction.type === '0x2') {\n\t\treturn `(maxFeePerGas: ${BigInt(transaction.maxFeePerGas).toString()}, maxPriorityFeePerGas: ${BigInt(\n\t\t\ttransaction.maxPriorityFeePerGas\n\t\t).toString()})`;\n\t} else {\n\t\treturn `(gasPrice: ${BigInt(transaction.gasPrice).toString()})`;\n\t}\n}\n\nexport async function createEnvironment<\n\tArtifacts extends UnknownArtifacts = UnknownArtifacts,\n\tNamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts,\n\tDeployments extends UnknownDeployments = UnknownDeployments\n>(\n\tconfig: ResolvedConfig,\n\tprovidedContext: ProvidedContext<Artifacts, NamedAccounts>\n): Promise<{internal: InternalEnvironment; external: Environment<Artifacts, NamedAccounts, Deployments>}> {\n\tconst provider =\n\t\t'provider' in config ? config.provider : (new JSONRPCHTTPProvider(config.nodeUrl) as EIP1193ProviderWithoutEvents);\n\n\tconst transport = custom(provider);\n\tconst viemClient = createPublicClient({transport});\n\n\tconst chainId = (await viemClient.getChainId()).toString();\n\n\tlet networkName: string;\n\tlet saveDeployments: boolean;\n\tlet tags: {[tag: string]: boolean} = {};\n\tif ('nodeUrl' in config) {\n\t\tnetworkName = config.networkName;\n\t\tsaveDeployments = true;\n\t} else {\n\t\tif (config.networkName) {\n\t\t\tnetworkName = config.networkName;\n\t\t} else {\n\t\t\tnetworkName = 'memory';\n\t\t}\n\t\tif (networkName === 'memory' || networkName === 'hardhat') {\n\t\t\ttags['memory'] = true;\n\t\t\tsaveDeployments = false;\n\t\t} else {\n\t\t\tsaveDeployments = true;\n\t\t}\n\t}\n\n\tconst resolvedAccounts: {[name: string]: ResolvedAccount} = {};\n\n\tconst accountCache: {[name: string]: ResolvedAccount} = {};\n\tasync function getAccount(\n\t\tname: string,\n\t\taccounts: UnresolvedUnknownNamedAccounts,\n\t\taccountDef: AccountType\n\t): Promise<ResolvedAccount | undefined> {\n\t\tif (accountCache[name]) {\n\t\t\treturn accountCache[name];\n\t\t}\n\t\tlet account: ResolvedAccount | undefined;\n\t\tif (typeof accountDef === 'number') {\n\t\t\tconst accounts = await provider.request({method: 'eth_accounts'});\n\t\t\tconst accountPerIndex = accounts[accountDef];\n\t\t\tif (accountPerIndex) {\n\t\t\t\taccountCache[name] = account = {\n\t\t\t\t\ttype: 'remote',\n\t\t\t\t\taddress: accountPerIndex,\n\t\t\t\t\tsigner: provider,\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (typeof accountDef === 'string') {\n\t\t\tif (accountDef.startsWith('0x')) {\n\t\t\t\tif (accountDef.length === 66) {\n\t\t\t\t\tconst privateKeyProtocol: SignerProtocol = (globalThis as any).signerProtocols['privateKey'];\n\t\t\t\t\tif (privateKeyProtocol) {\n\t\t\t\t\t\tconst namedSigner = await privateKeyProtocol.getSigner(`privateKey:${accountDef}`);\n\t\t\t\t\t\tconst [address] = await namedSigner.signer.request({method: 'eth_accounts'});\n\t\t\t\t\t\taccountCache[name] = account = {\n\t\t\t\t\t\t\t...namedSigner,\n\t\t\t\t\t\t\taddress,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\taccountCache[name] = account = {\n\t\t\t\t\t\ttype: 'remote',\n\t\t\t\t\t\taddress: accountDef as `0x${string}`,\n\t\t\t\t\t\tsigner: provider,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (accountDef.indexOf(':') > 0) {\n\t\t\t\t\tconst [protocolID, extra] = accountDef.split(':');\n\t\t\t\t\tconst protocol: SignerProtocol = (globalThis as any).signerProtocols[protocolID];\n\t\t\t\t\tif (!protocol) {\n\t\t\t\t\t\tthrow new Error(`protocol: ${protocol} is not supported`);\n\t\t\t\t\t}\n\t\t\t\t\tconst namedSigner = await protocol.getSigner(accountDef);\n\t\t\t\t\tconst [address] = await namedSigner.signer.request({method: 'eth_accounts'});\n\t\t\t\t\taccountCache[name] = account = {\n\t\t\t\t\t\t...namedSigner,\n\t\t\t\t\t\taddress,\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tconst accountFetched = await getAccount(name, accounts, accounts[accountDef]);\n\t\t\t\t\tif (accountFetched) {\n\t\t\t\t\t\taccountCache[name] = account = accountFetched;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst accountForNetwork = accountDef[networkName] || accountDef[chainId] || accountDef['default'];\n\t\t\tif (typeof accountForNetwork !== undefined) {\n\t\t\t\tconst accountFetched = await getAccount(name, accounts, accountForNetwork);\n\t\t\t\tif (accountFetched) {\n\t\t\t\t\taccountCache[name] = account = accountFetched;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn account;\n\t}\n\n\tif (providedContext.accounts) {\n\t\tconst accountNames = Object.keys(providedContext.accounts);\n\t\tfor (const accountName of accountNames) {\n\t\t\tlet account = await getAccount(accountName, providedContext.accounts, providedContext.accounts[accountName]);\n\t\t\t(resolvedAccounts as any)[accountName] = account;\n\t\t}\n\t}\n\n\tconst context = {\n\t\taccounts: resolvedAccounts,\n\t\tartifacts: providedContext.artifacts as Artifacts,\n\t\tnetwork: {\n\t\t\tname: networkName,\n\t\t\tsaveDeployments,\n\t\t\ttags,\n\t\t},\n\t};\n\n\tconst {deployments} = loadDeployments(config.deployments, context.network.name, false, chainId);\n\n\tconst namedAccounts: {[name: string]: EIP1193Account} = {};\n\tconst namedSigners: {[name: string]: NamedSigner} = {};\n\tconst addressSigners: {[name: `0x${string}`]: NamedSigner} = {};\n\n\tfor (const entry of Object.entries(resolvedAccounts)) {\n\t\tconst name = entry[0];\n\t\tconst {address, ...namedSigner} = entry[1];\n\t\tnamedAccounts[name] = address;\n\t\taddressSigners[address] = namedSigner;\n\t\tnamedSigners[name] = namedSigner;\n\t}\n\n\tconst perliminaryEnvironment = {\n\t\tconfig,\n\t\tdeployments: deployments as Deployments,\n\t\taccounts: namedAccounts as ResolvedNamedAccounts<NamedAccounts>,\n\t\tsigners: namedSigners as ResolvedNamedSigners<ResolvedNamedAccounts<NamedAccounts>>,\n\t\taddressSigners: addressSigners,\n\t\tartifacts: context.artifacts,\n\t\tnetwork: {\n\t\t\tchainId,\n\t\t\tname: context.network.name,\n\t\t\ttags: context.network.tags,\n\t\t\tprovider,\n\t\t},\n\t};\n\n\tfunction ensureDeploymentFolder(): string {\n\t\tconst folderPath = path.join(config.deployments, context.network.name);\n\t\tfs.mkdirSync(folderPath, {recursive: true});\n\t\tconst chainIdFilepath = path.join(folderPath, '.chainId');\n\t\tif (!fs.existsSync(chainIdFilepath)) {\n\t\t\tfs.writeFileSync(chainIdFilepath, chainId);\n\t\t}\n\t\treturn folderPath;\n\t}\n\n\t// const signer = {\n\t// \tasync sendTransaction(\n\t// \t\tprovider: EIP1193ProviderWithoutEvents,\n\t// \t\taccount: {\n\t// \t\t\taddresss: EIP1193Account;\n\t// \t\t\tconfig: unknown;\n\t// \t\t},\n\t// \t\ttransaction: EIP1193TransactionEIP1193DATA\n\t// \t): Promise<EIP1193DATA> {\n\t// \t\treturn '0x';\n\t// \t},\n\t// };\n\n\t// async function sendTransaction(transaction: EIP1193TransactionEIP1193DATA): Promise<EIP1193DATA> {\n\t// \treturn '0x';\n\t// }\n\n\tfunction get<TAbi extends Abi>(name: string): Deployment<TAbi> | undefined {\n\t\treturn deployments[name] as Deployment<TAbi> | undefined;\n\t}\n\n\tasync function save<TAbi extends Abi>(name: string, deployment: Deployment<TAbi>): Promise<Deployment<TAbi>> {\n\t\tdeployments[name] = deployment;\n\t\tif (context.network.saveDeployments) {\n\t\t\tconst folderPath = ensureDeploymentFolder();\n\t\t\tfs.writeFileSync(`${folderPath}/${name}.json`, JSONToString(deployment, 2));\n\t\t}\n\t\treturn deployment;\n\t}\n\n\tasync function recoverTransactionsIfAny<TAbi extends Abi = Abi>(): Promise<void> {\n\t\tif (!context.network.saveDeployments) {\n\t\t\treturn;\n\t\t}\n\t\tconst folderPath = ensureDeploymentFolder();\n\t\tconst filepath = path.join(folderPath, '.pending_transactions.json');\n\t\tlet existingPendingTansactions: PendingTransaction[];\n\t\ttry {\n\t\t\texistingPendingTansactions = stringToJSON(fs.readFileSync(filepath, 'utf-8'));\n\t\t} catch {\n\t\t\texistingPendingTansactions = [];\n\t\t}\n\t\tif (existingPendingTansactions.length > 0) {\n\t\t\twhile (existingPendingTansactions.length > 0) {\n\t\t\t\tconst pendingTransaction = existingPendingTansactions.shift();\n\t\t\t\tif (pendingTransaction) {\n\t\t\t\t\tif (pendingTransaction.type === 'deployment') {\n\t\t\t\t\t\tconst spinner = spin(\n\t\t\t\t\t\t\t`recovering ${pendingTransaction.name} with transaction ${pendingTransaction.transaction.hash}`\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait waitForDeploymentTransactionAndSave(pendingTransaction);\n\t\t\t\t\t\t\tfs.writeFileSync(filepath, JSONToString(existingPendingTansactions, 2));\n\t\t\t\t\t\t\tspinner.succeed();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tspinner.fail();\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst spinner = spin(`recovering execution's transaction ${pendingTransaction.transaction.hash}`);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait waitForTransaction(pendingTransaction.transaction.hash);\n\t\t\t\t\t\t\tfs.writeFileSync(filepath, JSONToString(existingPendingTansactions, 2));\n\t\t\t\t\t\t\tspinner.succeed();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tspinner.fail();\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfs.rmSync(filepath);\n\t\t}\n\t}\n\n\tasync function savePendingTransaction(pendingTransaction: PendingTransaction) {\n\t\tif (context.network.saveDeployments) {\n\t\t\tconst folderPath = ensureDeploymentFolder();\n\t\t\tconst filepath = path.join(folderPath, '.pending_transactions.json');\n\t\t\tlet existingPendinTransactions: PendingTransaction[];\n\t\t\ttry {\n\t\t\t\texistingPendinTransactions = stringToJSON(fs.readFileSync(filepath, 'utf-8'));\n\t\t\t} catch {\n\t\t\t\texistingPendinTransactions = [];\n\t\t\t}\n\t\t\texistingPendinTransactions.push(pendingTransaction);\n\t\t\tfs.writeFileSync(filepath, JSONToString(existingPendinTransactions, 2));\n\t\t}\n\t\treturn deployments;\n\t}\n\n\tasync function waitForTransactionReceipt(params: {\n\t\thash: EIP1193DATA;\n\t\t// confirmations?: number; // TODO\n\t\tpollingInterval?: number;\n\t\t// timeout?: number; // TODO\n\t}): Promise<EIP1193TransactionReceipt> {\n\t\t// const {hash, confirmations, pollingInterval, timeout} = {confirmations: 1, pollingInterval: 1, ...params};\n\t\tconst {hash, pollingInterval} = {pollingInterval: 1, ...params};\n\n\t\tlet receipt = await provider.request({\n\t\t\tmethod: 'eth_getTransactionReceipt',\n\t\t\tparams: [hash],\n\t\t});\n\t\tif (!receipt || !receipt.blockHash) {\n\t\t\tawait wait(pollingInterval);\n\t\t\treturn waitForTransactionReceipt(params);\n\t\t}\n\t\treturn receipt;\n\t}\n\n\tasync function deleteTransaction<TAbi extends Abi = Abi>(hash: string) {\n\t\tif (context.network.saveDeployments) {\n\t\t\tconst folderPath = ensureDeploymentFolder();\n\t\t\tconst filepath = path.join(folderPath, '.pending_transactions.json');\n\t\t\tlet existingPendinTransactions: PendingTransaction[];\n\t\t\ttry {\n\t\t\t\texistingPendinTransactions = stringToJSON(fs.readFileSync(filepath, 'utf-8'));\n\t\t\t} catch {\n\t\t\t\texistingPendinTransactions = [];\n\t\t\t}\n\t\t\texistingPendinTransactions = existingPendinTransactions.filter((v) => v.transaction.hash !== hash);\n\t\t\tif (existingPendinTransactions.length === 0) {\n\t\t\t\tfs.rmSync(filepath);\n\t\t\t} else {\n\t\t\t\tfs.writeFileSync(filepath, JSONToString(existingPendinTransactions, 2));\n\t\t\t}\n\t\t}\n\t}\n\n\tasync function exportDeploymentsAsTypes() {\n\t\tconst folderPath = './generated';\n\t\tfs.mkdirSync(folderPath, {recursive: true});\n\t\tfs.writeFileSync(`${folderPath}/deployments.ts`, `export default ${JSONToString(deployments, 2)} as const;`);\n\t}\n\n\tasync function waitForTransaction(\n\t\thash: `0x${string}`,\n\t\tinfo?: {message?: string; transaction?: EIP1193Transaction | null}\n\t): Promise<EIP1193TransactionReceipt> {\n\t\tconst spinner = spin(\n\t\t\tinfo?.message\n\t\t\t\t? info.message\n\t\t\t\t: ` - Broadcasting tx:\\n ${hash}${\n\t\t\t\t\t\tinfo?.transaction ? `\\n ${displayTransaction(info?.transaction)}` : ''\n\t\t\t\t }`\n\t\t);\n\t\tlet receipt: EIP1193TransactionReceipt;\n\t\ttry {\n\t\t\treceipt = await waitForTransactionReceipt({\n\t\t\t\thash,\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tspinner.fail();\n\t\t\tthrow e;\n\t\t}\n\t\tif (!receipt) {\n\t\t\tthrow new Error(`receipt for ${hash} not found`);\n\t\t} else {\n\t\t\tspinner.succeed();\n\t\t}\n\t\treturn receipt;\n\t}\n\n\tasync function waitForDeploymentTransactionAndSave<TAbi extends Abi = Abi>(\n\t\tpendingDeployment: PendingDeployment<TAbi>,\n\t\ttransaction?: EIP1193Transaction | null\n\t): Promise<Deployment<TAbi>> {\n\t\tconst message = ` - Deploying ${pendingDeployment.name} with tx:\\n ${pendingDeployment.transaction.hash}${\n\t\t\ttransaction ? `\\n ${displayTransaction(transaction)}` : ''\n\t\t}`;\n\t\tconst receipt = await waitForTransaction(pendingDeployment.transaction.hash, {message, transaction});\n\n\t\tif (!receipt.contractAddress) {\n\t\t\tthrow new Error(`failed to deploy contract ${pendingDeployment.name}`);\n\t\t}\n\t\tconst {abi, ...artifactObjectWithoutABI} = pendingDeployment.partialDeployment;\n\n\t\tif (!pendingDeployment.transaction.hash) {\n\t\t\tconst spinner = spin(); // TODO spin(`fetching nonce for ${pendingDeployment.txHash}`);\n\t\t\tlet transaction: EIP1193Transaction | null = null;\n\t\t\ttry {\n\t\t\t\ttransaction = await provider.request({\n\t\t\t\t\tmethod: 'eth_getTransactionByHash',\n\t\t\t\t\tparams: [pendingDeployment.transaction.hash],\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tspinner.fail();\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\tif (!transaction) {\n\t\t\t\tspinner.fail(`tx ${pendingDeployment.transaction.hash} not found`);\n\t\t\t} else {\n\t\t\t\tspinner.stop();\n\t\t\t}\n\n\t\t\tif (transaction) {\n\t\t\t\tpendingDeployment.transaction = {\n\t\t\t\t\tnonce: transaction.nonce,\n\t\t\t\t\thash: transaction.hash,\n\t\t\t\t\torigin: transaction.from,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// TODO options\n\t\tfor (const key of Object.keys(artifactObjectWithoutABI)) {\n\t\t\tif (key.startsWith('_')) {\n\t\t\t\tdelete (artifactObjectWithoutABI as any)[key];\n\t\t\t}\n\t\t\tif (key === 'evm') {\n\t\t\t\tconst {gasEstimates} = artifactObjectWithoutABI.evm;\n\t\t\t\tartifactObjectWithoutABI.evm = {\n\t\t\t\t\tgasEstimates,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst deployment = {\n\t\t\taddress: receipt.contractAddress,\n\t\t\tabi,\n\t\t\t...artifactObjectWithoutABI,\n\t\t\ttransaction: pendingDeployment.transaction,\n\t\t};\n\t\treturn save(pendingDeployment.name, deployment);\n\t}\n\n\tasync function savePendingExecution(pendingExecution: PendingExecution) {\n\t\tawait savePendingTransaction(pendingExecution);\n\t\tlet transaction: EIP1193Transaction | null = null;\n\t\tconst spinner = spin(); // TODO spin(`fetching tx from peers ${pendingDeployment.txHash}`);\n\t\ttry {\n\t\t\ttransaction = await provider.request({\n\t\t\t\tmethod: 'eth_getTransactionByHash',\n\t\t\t\tparams: [pendingExecution.transaction.hash],\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tspinner.fail();\n\t\t\tthrow e;\n\t\t}\n\t\tif (!transaction) {\n\t\t\tspinner.fail(`tx ${pendingExecution.transaction.hash} not found`);\n\t\t} else {\n\t\t\tspinner.stop();\n\t\t}\n\n\t\tif (transaction) {\n\t\t\tpendingExecution.transaction.nonce = transaction.nonce;\n\t\t\tpendingExecution.transaction.origin = transaction.from;\n\t\t}\n\n\t\tconst receipt = await waitForTransaction(pendingExecution.transaction.hash, {transaction});\n\t\tawait deleteTransaction(pendingExecution.transaction.hash);\n\t\treturn receipt;\n\t}\n\n\tasync function savePendingDeployment<TAbi extends Abi = Abi>(pendingDeployment: PendingDeployment<TAbi>) {\n\t\tawait savePendingTransaction(pendingDeployment);\n\t\tlet transaction: EIP1193Transaction | null = null;\n\t\tconst spinner = spin(); // TODO spin(`fetching tx from peers ${pendingDeployment.txHash}`);\n\t\ttry {\n\t\t\ttransaction = await provider.request({\n\t\t\t\tmethod: 'eth_getTransactionByHash',\n\t\t\t\tparams: [pendingDeployment.transaction.hash],\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tspinner.fail();\n\t\t\tthrow e;\n\t\t}\n\t\tif (!transaction) {\n\t\t\tspinner.fail(`tx ${pendingDeployment.transaction.hash} not found`);\n\t\t} else {\n\t\t\tspinner.stop();\n\t\t}\n\n\t\tif (transaction) {\n\t\t\t// we update the tx data with the one we get from the network\n\t\t\tpendingDeployment = {\n\t\t\t\t...pendingDeployment,\n\t\t\t\ttransaction: {hash: transaction.hash, nonce: transaction.nonce, origin: transaction.from},\n\t\t\t};\n\t\t}\n\n\t\tconst deployment = await waitForDeploymentTransactionAndSave<TAbi>(pendingDeployment, transaction);\n\t\tawait deleteTransaction(pendingDeployment.transaction.hash);\n\t\treturn deployment;\n\t}\n\n\tlet env: Environment<Artifacts, NamedAccounts, Deployments> = {\n\t\t...perliminaryEnvironment,\n\t\tsave,\n\t\tsavePendingDeployment,\n\t\tsavePendingExecution,\n\t\tget,\n\t};\n\tfor (const extension of (globalThis as any).extensions) {\n\t\tenv = extension(env);\n\t}\n\n\treturn {\n\t\texternal: env,\n\t\tinternal: {\n\t\t\texportDeploymentsAsTypes,\n\t\t\trecoverTransactionsIfAny,\n\t\t},\n\t};\n}\n","// TODO share with db-utils\nexport function bnReplacer(k: string, v: any): any {\n\tif (typeof v === 'bigint') {\n\t\treturn v.toString() + 'n';\n\t}\n\treturn v;\n}\n\nexport function bnReviver(k: string, v: any): any {\n\tif (\n\t\ttypeof v === 'string' &&\n\t\t(v.startsWith('-') ? !isNaN(parseInt(v.charAt(1))) : !isNaN(parseInt(v.charAt(0)))) &&\n\t\tv.charAt(v.length - 1) === 'n'\n\t) {\n\t\treturn BigInt(v.slice(0, -1));\n\t}\n\treturn v;\n}\n\nexport function JSONToString<T = unknown>(json: unknown, space?: string | number) {\n\treturn JSON.stringify(json, bnReplacer, space);\n}\n\nexport function stringToJSON<T = unknown>(str: string): T {\n\treturn JSON.parse(str, bnReviver);\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport {traverse} from '../utils/fs';\nimport {UnknownDeployments} from './types';\n\nexport function loadDeployments(\n\tdeploymentsPath: string,\n\tsubPath: string,\n\tonlyABIAndAddress?: boolean,\n\texpectedChainId?: string\n): {deployments: UnknownDeployments; chainId?: string} {\n\tconst deploymentsFound: UnknownDeployments = {};\n\tconst deployPath = path.join(deploymentsPath, subPath);\n\n\tlet filesStats;\n\ttry {\n\t\tfilesStats = traverse(deployPath, undefined, undefined, (name) => !name.startsWith('.') && name !== 'solcInputs');\n\t} catch (e) {\n\t\t// console.log('no folder at ' + deployPath);\n\t\treturn {deployments: {}};\n\t}\n\tlet chainId: string;\n\tif (filesStats.length > 0) {\n\t\tconst chainIdFilepath = path.join(deployPath, '.chainId');\n\t\tif (fs.existsSync(chainIdFilepath)) {\n\t\t\tchainId = fs.readFileSync(chainIdFilepath).toString().trim();\n\t\t} else {\n\t\t\tthrow new Error(`A .chainId' file is expected to be present in the deployment folder for network ${subPath}`);\n\t\t}\n\n\t\tif (expectedChainId) {\n\t\t\tif (expectedChainId !== chainId) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Loading deployment in folder '${deployPath}' (with chainId: ${chainId}) for a different chainId (${expectedChainId})`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t} else {\n\t\treturn {deployments: {}};\n\t}\n\tlet fileNames = filesStats.map((a) => a.relativePath);\n\tfileNames = fileNames.sort((a, b) => {\n\t\tif (a < b) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a > b) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n\n\tfor (const fileName of fileNames) {\n\t\tif (fileName.substring(fileName.length - 5) === '.json') {\n\t\t\tconst deploymentFileName = path.join(deployPath, fileName);\n\t\t\tlet deployment = JSON.parse(fs.readFileSync(deploymentFileName).toString());\n\t\t\t// truffleChainId argument:\n\t\t\t// if (!deployment.address && deployment.networks) {\n\t\t\t// \tif (truffleChainId && deployment.networks[truffleChainId]) {\n\t\t\t// \t\t// TRUFFLE support\n\t\t\t// \t\tconst truffleDeployment = deployment as any; // TruffleDeployment;\n\t\t\t// \t\tdeployment.address = truffleDeployment.networks[truffleChainId].address;\n\t\t\t// \t\tdeployment.transactionHash = truffleDeployment.networks[truffleChainId].transactionHash;\n\t\t\t// \t}\n\t\t\t// }\n\t\t\tif (onlyABIAndAddress) {\n\t\t\t\tdeployment = {\n\t\t\t\t\taddress: deployment.address,\n\t\t\t\t\tabi: deployment.abi,\n\t\t\t\t\tlinkedData: deployment.linkedData,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst name = fileName.slice(0, fileName.length - 5);\n\t\t\t// console.log('fetching ' + deploymentFileName + ' for ' + name);\n\n\t\t\tdeploymentsFound[name] = deployment;\n\t\t}\n\t}\n\treturn {deployments: deploymentsFound, chainId};\n}\n","import {logs} from 'named-logs';\n\nimport {hookup, factory as Logging} from 'named-logs-console';\n// import ora from 'ora-cjs';\nhookup();\n\nexport function setLogLevel(level: number) {\n\tLogging.level = level;\n\tif (Logging.level > 0) {\n\t\tLogging.enable();\n\t} else {\n\t\tLogging.disable();\n\t}\n}\n\nexport const logger = logs('rocketh');\n\ntype PartialOra = {\n\tstart(msg?: string): PartialOra;\n\tstop(): PartialOra;\n\tsucceed(msg?: string): PartialOra;\n\tfail(msg?: string): PartialOra;\n};\nconst voidSpinner: PartialOra = {\n\tstart(msg?: string) {\n\t\tif (msg) {\n\t\t\tconsole.log(msg);\n\t\t}\n\t\treturn this;\n\t},\n\tstop() {\n\t\treturn this;\n\t},\n\tsucceed(msg?: string) {\n\t\tif (msg) {\n\t\t\tconsole.log(msg);\n\t\t}\n\t\treturn this;\n\t},\n\tfail(msg?: string) {\n\t\tif (msg) {\n\t\t\tconsole.error(msg);\n\t\t}\n\t\treturn this;\n\t},\n};\n// export function spin(message: string): PartialOra {\n// \treturn Logging.level > 0 ? ora(message).start() : voidSpinner;\n// }\n\n// let lastSpin = ora('rocketh');\nlet lastSpin = voidSpinner;\nexport function spin(message?: string): PartialOra {\n\tif (Logging.level > 0) {\n\t\tlastSpin = lastSpin.start(message);\n\t\treturn lastSpin;\n\t} else {\n\t\treturn voidSpinner;\n\t}\n}\n"],"mappings":"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","names":["path","fs","import_node_path","import_node_fs","import_node_fs","import_node_path","import_node_path","import_node_fs","path","fs","Logging","accounts","path","fs","transaction","fs","path","spinner"]}
package/dist/index.d.cts CHANGED
@@ -156,11 +156,11 @@ type PendingExecution = {
156
156
  };
157
157
  type PendingTransaction = PendingDeployment | PendingExecution;
158
158
 
159
- type DeployScriptFunction<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnknownNamedAccounts = UnknownNamedAccounts, Deployments extends UnknownDeployments = UnknownDeployments> = (env: Environment<Artifacts, NamedAccounts, Deployments>) => Promise<void | boolean>;
160
- interface DeployScriptModule<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Deployments extends UnknownDeployments = UnknownDeployments> {
161
- (env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>): Promise<void | boolean>;
159
+ type DeployScriptFunction<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnknownNamedAccounts = UnknownNamedAccounts, ArgumentsTypes = undefined, Deployments extends UnknownDeployments = UnknownDeployments> = (env: Environment<Artifacts, NamedAccounts, Deployments>, args?: ArgumentsTypes) => Promise<void | boolean>;
160
+ interface DeployScriptModule<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, ArgumentsTypes = undefined, Deployments extends UnknownDeployments = UnknownDeployments> {
161
+ (env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>, args?: ArgumentsTypes): Promise<void | boolean>;
162
162
  providedContext: ProvidedContext<Artifacts, NamedAccounts>;
163
- skip?: (env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>) => Promise<boolean>;
163
+ skip?: (env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>, args?: ArgumentsTypes) => Promise<boolean>;
164
164
  tags?: string[];
165
165
  dependencies?: string[];
166
166
  runAtTheEnd?: boolean;
@@ -172,10 +172,10 @@ type ProvidedContext<Artifacts extends UnknownArtifacts = UnknownArtifacts, Name
172
172
  };
173
173
  type ScriptCallback<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnknownNamedAccounts = UnknownNamedAccounts, Deployments extends UnknownDeployments = UnknownDeployments> = (env: Environment<Artifacts, NamedAccounts, Deployments>) => Promise<void>;
174
174
 
175
- declare function execute<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Deployments extends UnknownDeployments = UnknownDeployments>(context: ProvidedContext<Artifacts, NamedAccounts>, callback: DeployScriptFunction<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>, options: {
175
+ declare function execute<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, ArgumentsType = undefined, Deployments extends UnknownDeployments = UnknownDeployments>(context: ProvidedContext<Artifacts, NamedAccounts>, callback: DeployScriptFunction<Artifacts, ResolvedNamedAccounts<NamedAccounts>, ArgumentsType, Deployments>, options: {
176
176
  tags?: string[];
177
177
  dependencies?: string[];
178
- }): DeployScriptModule<Artifacts, NamedAccounts, Deployments>;
178
+ }): DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType, Deployments>;
179
179
  type ConfigOptions = {
180
180
  network: string;
181
181
  deployments?: string;
@@ -190,8 +190,8 @@ declare function readAndResolveConfig(options: ConfigOptions, extra?: {
190
190
  }): ResolvedConfig;
191
191
  declare function resolveConfig(config: Config): ResolvedConfig;
192
192
  declare function loadEnvironment<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts>(config: Config, context: ProvidedContext<Artifacts, NamedAccounts>): Promise<Environment>;
193
- declare function loadAndExecuteDeployments<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Deployments extends UnknownDeployments = UnknownDeployments>(config: Config): Promise<Environment>;
194
- declare function executeDeployScripts<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Deployments extends UnknownDeployments = UnknownDeployments>(config: ResolvedConfig): Promise<Environment>;
193
+ declare function loadAndExecuteDeployments<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, ArgumentsType = undefined, Deployments extends UnknownDeployments = UnknownDeployments>(config: Config, args?: ArgumentsType): Promise<Environment>;
194
+ declare function executeDeployScripts<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, ArgumentsType = undefined, Deployments extends UnknownDeployments = UnknownDeployments>(config: ResolvedConfig, args?: ArgumentsType): Promise<Environment>;
195
195
 
196
196
  type EnvironmentExtenstion = (env: Environment) => Environment;
197
197
  declare function extendEnvironment(extension: EnvironmentExtenstion): void;
package/dist/index.d.ts CHANGED
@@ -156,11 +156,11 @@ type PendingExecution = {
156
156
  };
157
157
  type PendingTransaction = PendingDeployment | PendingExecution;
158
158
 
159
- type DeployScriptFunction<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnknownNamedAccounts = UnknownNamedAccounts, Deployments extends UnknownDeployments = UnknownDeployments> = (env: Environment<Artifacts, NamedAccounts, Deployments>) => Promise<void | boolean>;
160
- interface DeployScriptModule<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Deployments extends UnknownDeployments = UnknownDeployments> {
161
- (env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>): Promise<void | boolean>;
159
+ type DeployScriptFunction<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnknownNamedAccounts = UnknownNamedAccounts, ArgumentsTypes = undefined, Deployments extends UnknownDeployments = UnknownDeployments> = (env: Environment<Artifacts, NamedAccounts, Deployments>, args?: ArgumentsTypes) => Promise<void | boolean>;
160
+ interface DeployScriptModule<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, ArgumentsTypes = undefined, Deployments extends UnknownDeployments = UnknownDeployments> {
161
+ (env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>, args?: ArgumentsTypes): Promise<void | boolean>;
162
162
  providedContext: ProvidedContext<Artifacts, NamedAccounts>;
163
- skip?: (env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>) => Promise<boolean>;
163
+ skip?: (env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>, args?: ArgumentsTypes) => Promise<boolean>;
164
164
  tags?: string[];
165
165
  dependencies?: string[];
166
166
  runAtTheEnd?: boolean;
@@ -172,10 +172,10 @@ type ProvidedContext<Artifacts extends UnknownArtifacts = UnknownArtifacts, Name
172
172
  };
173
173
  type ScriptCallback<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnknownNamedAccounts = UnknownNamedAccounts, Deployments extends UnknownDeployments = UnknownDeployments> = (env: Environment<Artifacts, NamedAccounts, Deployments>) => Promise<void>;
174
174
 
175
- declare function execute<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Deployments extends UnknownDeployments = UnknownDeployments>(context: ProvidedContext<Artifacts, NamedAccounts>, callback: DeployScriptFunction<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>, options: {
175
+ declare function execute<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, ArgumentsType = undefined, Deployments extends UnknownDeployments = UnknownDeployments>(context: ProvidedContext<Artifacts, NamedAccounts>, callback: DeployScriptFunction<Artifacts, ResolvedNamedAccounts<NamedAccounts>, ArgumentsType, Deployments>, options: {
176
176
  tags?: string[];
177
177
  dependencies?: string[];
178
- }): DeployScriptModule<Artifacts, NamedAccounts, Deployments>;
178
+ }): DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType, Deployments>;
179
179
  type ConfigOptions = {
180
180
  network: string;
181
181
  deployments?: string;
@@ -190,8 +190,8 @@ declare function readAndResolveConfig(options: ConfigOptions, extra?: {
190
190
  }): ResolvedConfig;
191
191
  declare function resolveConfig(config: Config): ResolvedConfig;
192
192
  declare function loadEnvironment<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts>(config: Config, context: ProvidedContext<Artifacts, NamedAccounts>): Promise<Environment>;
193
- declare function loadAndExecuteDeployments<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Deployments extends UnknownDeployments = UnknownDeployments>(config: Config): Promise<Environment>;
194
- declare function executeDeployScripts<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, Deployments extends UnknownDeployments = UnknownDeployments>(config: ResolvedConfig): Promise<Environment>;
193
+ declare function loadAndExecuteDeployments<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, ArgumentsType = undefined, Deployments extends UnknownDeployments = UnknownDeployments>(config: Config, args?: ArgumentsType): Promise<Environment>;
194
+ declare function executeDeployScripts<Artifacts extends UnknownArtifacts = UnknownArtifacts, NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts, ArgumentsType = undefined, Deployments extends UnknownDeployments = UnknownDeployments>(config: ResolvedConfig, args?: ArgumentsType): Promise<Environment>;
195
195
 
196
196
  type EnvironmentExtenstion = (env: Environment) => Environment;
197
197
  declare function extendEnvironment(extension: EnvironmentExtenstion): void;
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  readAndResolveConfig,
10
10
  readConfig,
11
11
  resolveConfig
12
- } from "./chunk-H5POUQ4Z.js";
12
+ } from "./chunk-PIIIDX42.js";
13
13
  export {
14
14
  execute,
15
15
  executeDeployScripts,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rocketh",
3
- "version": "0.6.1",
3
+ "version": "0.6.3",
4
4
  "description": "deploy smart contract on ethereum-compatible networks",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -76,7 +76,7 @@ export async function createEnvironment<
76
76
  >(
77
77
  config: ResolvedConfig,
78
78
  providedContext: ProvidedContext<Artifacts, NamedAccounts>
79
- ): Promise<{internal: InternalEnvironment; external: Environment}> {
79
+ ): Promise<{internal: InternalEnvironment; external: Environment<Artifacts, NamedAccounts, Deployments>}> {
80
80
  const provider =
81
81
  'provider' in config ? config.provider : (new JSONRPCHTTPProvider(config.nodeUrl) as EIP1193ProviderWithoutEvents);
82
82
 
@@ -19,19 +19,22 @@ require('esbuild-register/dist/node').register();
19
19
  export function execute<
20
20
  Artifacts extends UnknownArtifacts = UnknownArtifacts,
21
21
  NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts,
22
+ ArgumentsType = undefined,
22
23
  Deployments extends UnknownDeployments = UnknownDeployments
23
24
  >(
24
25
  context: ProvidedContext<Artifacts, NamedAccounts>,
25
- callback: DeployScriptFunction<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>,
26
+ callback: DeployScriptFunction<Artifacts, ResolvedNamedAccounts<NamedAccounts>, ArgumentsType, Deployments>,
26
27
  options: {tags?: string[]; dependencies?: string[]}
27
- ): DeployScriptModule<Artifacts, NamedAccounts, Deployments> {
28
- const scriptModule = (env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>) =>
29
- callback(env);
28
+ ): DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType, Deployments> {
29
+ const scriptModule = (
30
+ env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>,
31
+ args?: ArgumentsType
32
+ ) => callback(env, args);
30
33
  scriptModule.providedContext = context;
31
34
  scriptModule.tags = options.tags;
32
35
  scriptModule.dependencies = options.dependencies;
33
36
  // TODO id + skip
34
- return scriptModule as unknown as DeployScriptModule<Artifacts, NamedAccounts, Deployments>;
37
+ return scriptModule as unknown as DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType, Deployments>;
35
38
  }
36
39
 
37
40
  export type ConfigOptions = {network: string; deployments?: string; scripts?: string; tags?: string};
@@ -116,17 +119,19 @@ export async function loadEnvironment<
116
119
  export async function loadAndExecuteDeployments<
117
120
  Artifacts extends UnknownArtifacts = UnknownArtifacts,
118
121
  NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts,
122
+ ArgumentsType = undefined,
119
123
  Deployments extends UnknownDeployments = UnknownDeployments
120
- >(config: Config): Promise<Environment> {
124
+ >(config: Config, args?: ArgumentsType): Promise<Environment> {
121
125
  const resolvedConfig = resolveConfig(config);
122
- return executeDeployScripts<Artifacts, NamedAccounts, Deployments>(resolvedConfig);
126
+ return executeDeployScripts<Artifacts, NamedAccounts, ArgumentsType, Deployments>(resolvedConfig, args);
123
127
  }
124
128
 
125
129
  export async function executeDeployScripts<
126
130
  Artifacts extends UnknownArtifacts = UnknownArtifacts,
127
131
  NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts,
132
+ ArgumentsType = undefined,
128
133
  Deployments extends UnknownDeployments = UnknownDeployments
129
- >(config: ResolvedConfig): Promise<Environment> {
134
+ >(config: ResolvedConfig, args?: ArgumentsType): Promise<Environment> {
130
135
  setLogLevel(typeof config.logLevel === 'undefined' ? 0 : config.logLevel);
131
136
 
132
137
  let filepaths;
@@ -145,13 +150,13 @@ export async function executeDeployScripts<
145
150
 
146
151
  let providedContext: ProvidedContext<Artifacts, NamedAccounts> | undefined;
147
152
 
148
- const scriptModuleByFilePath: {[filename: string]: DeployScriptModule} = {};
153
+ const scriptModuleByFilePath: {[filename: string]: DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType>} = {};
149
154
  const scriptPathBags: {[tag: string]: string[]} = {};
150
155
  const scriptFilePaths: string[] = [];
151
156
 
152
157
  for (const filepath of filepaths) {
153
158
  const scriptFilePath = path.resolve(filepath);
154
- let scriptModule: DeployScriptModule;
159
+ let scriptModule: DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType>;
155
160
  try {
156
161
  if (require.cache) {
157
162
  delete require.cache[scriptFilePath]; // ensure we reload it every time, so changes are taken in consideration
@@ -159,10 +164,10 @@ export async function executeDeployScripts<
159
164
  scriptModule = require(scriptFilePath);
160
165
 
161
166
  if ((scriptModule as any).default) {
162
- scriptModule = (scriptModule as any).default as DeployScriptModule;
167
+ scriptModule = (scriptModule as any).default as DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType>;
163
168
  if ((scriptModule as any).default) {
164
169
  logger.warn(`double default...`);
165
- scriptModule = (scriptModule as any).default as DeployScriptModule;
170
+ scriptModule = (scriptModule as any).default as DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType>;
166
171
  }
167
172
  }
168
173
  scriptModuleByFilePath[scriptFilePath] = scriptModule;
@@ -221,11 +226,11 @@ export async function executeDeployScripts<
221
226
 
222
227
  const scriptsRegisteredToRun: {[filename: string]: boolean} = {};
223
228
  const scriptsToRun: Array<{
224
- func: DeployScriptModule;
229
+ func: DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType>;
225
230
  filePath: string;
226
231
  }> = [];
227
232
  const scriptsToRunAtTheEnd: Array<{
228
- func: DeployScriptModule;
233
+ func: DeployScriptModule<Artifacts, NamedAccounts, ArgumentsType>;
229
234
  filePath: string;
230
235
  }> = [];
231
236
  function recurseDependencies(scriptFilePath: string) {
@@ -274,7 +279,7 @@ export async function executeDeployScripts<
274
279
  if (deployScript.func.skip) {
275
280
  const spinner = spin(` - skip?()`);
276
281
  try {
277
- skip = await deployScript.func.skip(external);
282
+ skip = await deployScript.func.skip(external, args);
278
283
  spinner.succeed(skip ? `skipping ${filename}` : undefined);
279
284
  } catch (e) {
280
285
  spinner.fail();
@@ -285,7 +290,7 @@ export async function executeDeployScripts<
285
290
  let result;
286
291
 
287
292
  try {
288
- result = await deployScript.func(external);
293
+ result = await deployScript.func(external, args);
289
294
  spinner.succeed(`\n`);
290
295
  } catch (e) {
291
296
  spinner.fail();
@@ -10,17 +10,24 @@ import type {
10
10
  export type DeployScriptFunction<
11
11
  Artifacts extends UnknownArtifacts = UnknownArtifacts,
12
12
  NamedAccounts extends UnknownNamedAccounts = UnknownNamedAccounts,
13
+ ArgumentsTypes = undefined,
13
14
  Deployments extends UnknownDeployments = UnknownDeployments
14
- > = (env: Environment<Artifacts, NamedAccounts, Deployments>) => Promise<void | boolean>;
15
+ > = (env: Environment<Artifacts, NamedAccounts, Deployments>, args?: ArgumentsTypes) => Promise<void | boolean>;
15
16
 
16
17
  export interface DeployScriptModule<
17
18
  Artifacts extends UnknownArtifacts = UnknownArtifacts,
18
19
  NamedAccounts extends UnresolvedUnknownNamedAccounts = UnresolvedUnknownNamedAccounts,
20
+ ArgumentsTypes = undefined,
19
21
  Deployments extends UnknownDeployments = UnknownDeployments
20
22
  > {
21
- (env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>): Promise<void | boolean>;
23
+ (env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>, args?: ArgumentsTypes): Promise<
24
+ void | boolean
25
+ >;
22
26
  providedContext: ProvidedContext<Artifacts, NamedAccounts>;
23
- skip?: (env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>) => Promise<boolean>;
27
+ skip?: (
28
+ env: Environment<Artifacts, ResolvedNamedAccounts<NamedAccounts>, Deployments>,
29
+ args?: ArgumentsTypes
30
+ ) => Promise<boolean>;
24
31
  tags?: string[];
25
32
  dependencies?: string[];
26
33
  runAtTheEnd?: boolean;
@@ -1,6 +1,6 @@
1
1
  import {logs} from 'named-logs';
2
2
 
3
- import {hookup, logs as Logging} from 'named-logs-console';
3
+ import {hookup, factory as Logging} from 'named-logs-console';
4
4
  // import ora from 'ora-cjs';
5
5
  hookup();
6
6