diff --git a/common/cli-utils.js b/common/cli-utils.js index 88fbc4a9..ffc264cc 100644 --- a/common/cli-utils.js +++ b/common/cli-utils.js @@ -2,15 +2,18 @@ require('dotenv').config(); -const { Option } = require('commander'); +const fs = require('fs'); +const { Option, Command } = require('commander'); + +// A path to the chain configuration files +const CHAIN_CONFIG_PATH = `${__dirname}/../axelar-chains-config/info`; + +// A list of available chain environments which are the names of the files in the CHAIN_CONFIG_PATH +const CHAIN_ENVIRONMENTS = fs.readdirSync(CHAIN_CONFIG_PATH).map((chainName) => chainName.split('.')[0]); const addBaseOptions = (program, options = {}) => { program.addOption( - new Option('-e, --env ', 'environment') - .choices(['local', 'devnet', 'devnet-amplifier', 'devnet-verifiers', 'stagenet', 'testnet', 'mainnet']) - .default('testnet') - .makeOptionMandatory(true) - .env('ENV'), + new Option('-e, --env ', 'environment').choices(CHAIN_ENVIRONMENTS).default('testnet').makeOptionMandatory(true).env('ENV'), ); program.addOption(new Option('-y, --yes', 'skip deployment prompt confirmation').env('YES')); program.addOption(new Option('--parallel', 'run script parallely wrt chains')); @@ -81,7 +84,13 @@ const addExtendedOptions = (program, options = {}) => { return program; }; +if (require.main === module) { + addBaseOptions(new Command()); +} + module.exports = { + CHAIN_CONFIG_PATH, + CHAIN_ENVIRONMENTS, addBaseOptions, addExtendedOptions, }; diff --git a/cosmwasm/deploy-contract.js b/cosmwasm/deploy-contract.js index 8e68223b..86432027 100644 --- a/cosmwasm/deploy-contract.js +++ b/cosmwasm/deploy-contract.js @@ -3,6 +3,7 @@ require('dotenv').config(); const { isNil } = require('lodash'); +const { CHAIN_ENVIRONMENTS } = require('../common'); const { isNumber, printInfo, loadConfig, saveConfig, prompt } = require('../evm/utils'); const { prepareWallet, @@ -113,11 +114,7 @@ const programHandler = () => { program.name('upload-contract').description('Upload CosmWasm contracts'); program.addOption( - new Option('-e, --env ', 'environment') - .choices(['local', 'devnet', 'stagenet', 'testnet', 'mainnet']) - .default('testnet') - .makeOptionMandatory(true) - .env('ENV'), + new Option('-e, --env ', 'environment').choices(CHAIN_ENVIRONMENTS).default('testnet').makeOptionMandatory(true).env('ENV'), ); program.addOption(new Option('-m, --mnemonic ', 'mnemonic').makeOptionMandatory(true).env('MNEMONIC')); program.addOption(new Option('-a, --artifactPath ', 'artifact path').makeOptionMandatory(true).env('ARTIFACT_PATH')); diff --git a/cosmwasm/submit-proposal.js b/cosmwasm/submit-proposal.js index ebde299e..d638b470 100644 --- a/cosmwasm/submit-proposal.js +++ b/cosmwasm/submit-proposal.js @@ -22,6 +22,7 @@ const { governanceAddress, } = require('./utils'); const { isNumber, saveConfig, loadConfig, printInfo, prompt } = require('../evm/utils'); +const { CHAIN_ENVIRONMENTS } = require('../common'); const { StoreCodeProposal, StoreAndInstantiateContractProposal, @@ -251,7 +252,7 @@ const programHandler = () => { // TODO: combine deploy-contract and submit-proposal options to remove duplicates program.addOption( new Option('-e, --env ', 'environment') - .choices(['local', 'devnet', 'devnet-amplifier', 'devnet-verifiers', 'stagenet', 'testnet', 'mainnet']) + .choices(CHAIN_ENVIRONMENTS) .default('devnet-amplifier') .makeOptionMandatory(true) .env('ENV'), diff --git a/stellar/balances.js b/stellar/balances.js index a1a45b92..1622e42a 100644 --- a/stellar/balances.js +++ b/stellar/balances.js @@ -1,6 +1,7 @@ const { Command, Option } = require('commander'); const { getWallet } = require('./utils'); const { loadConfig } = require('../evm/utils'); +const { CHAIN_ENVIRONMENTS } = require('../common'); require('./cli-utils'); async function processCommand(options, _, chain) { @@ -13,11 +14,7 @@ if (require.main === module) { program.name('balances').description('Wallet balance'); program.addOption( - new Option('-e, --env ', 'environment') - .choices(['local', 'devnet', 'stagenet', 'testnet', 'mainnet']) - .default('testnet') - .makeOptionMandatory(true) - .env('ENV'), + new Option('-e, --env ', 'environment').choices(CHAIN_ENVIRONMENTS).default('testnet').makeOptionMandatory(true).env('ENV'), ); program.addOption(new Option('-p, --privateKey ', 'private key').makeOptionMandatory(true).env('PRIVATE_KEY')); diff --git a/stellar/generate-bindings.js b/stellar/generate-bindings.js index 89ff4486..9455be92 100644 --- a/stellar/generate-bindings.js +++ b/stellar/generate-bindings.js @@ -5,6 +5,7 @@ const { execSync } = require('child_process'); const { loadConfig } = require('../evm/utils'); const path = require('path'); const { getNetworkPassphrase } = require('./utils'); +const { CHAIN_ENVIRONMENTS } = require('../common'); require('./cli-utils'); function processCommand(options, _, chain) { @@ -28,11 +29,7 @@ function main() { program.name('Generate TypeScript Bindings for Soroban contract').description('Generates TypeScript bindings for a Soroban contract.'); program.addOption( - new Option('-e, --env ', 'environment') - .choices(['local', 'devnet', 'stagenet', 'testnet', 'mainnet']) - .default('testnet') - .makeOptionMandatory(true) - .env('ENV'), + new Option('-e, --env ', 'environment').choices(CHAIN_ENVIRONMENTS).default('testnet').makeOptionMandatory(true).env('ENV'), ); program.addOption(new Option('--wasmPath ', 'path to the WASM file').makeOptionMandatory(true)); program.addOption(new Option('--contractId ', 'contract ID').makeOptionMandatory(true)); diff --git a/stellar/operators.js b/stellar/operators.js index 1e1cb825..063ed291 100644 --- a/stellar/operators.js +++ b/stellar/operators.js @@ -2,6 +2,7 @@ const { Contract, Address, nativeToScVal } = require('@stellar/stellar-sdk'); const { Command, Option } = require('commander'); const { getWallet, prepareTransaction, buildTransaction, sendTransaction, estimateCost } = require('./utils'); const { loadConfig, printInfo, parseArgs, validateParameters } = require('../evm/utils'); +const { CHAIN_ENVIRONMENTS } = require('../common'); require('./cli-utils'); async function processCommand(options, _, chain) { @@ -116,11 +117,7 @@ if (require.main === module) { program.name('operators').description('Operators contract management'); program.addOption( - new Option('-e, --env ', 'environment') - .choices(['local', 'devnet', 'stagenet', 'testnet', 'mainnet']) - .default('testnet') - .makeOptionMandatory(true) - .env('ENV'), + new Option('-e, --env ', 'environment').choices(CHAIN_ENVIRONMENTS).default('testnet').makeOptionMandatory(true).env('ENV'), ); program.addOption(new Option('-p, --privateKey ', 'private key').makeOptionMandatory(true).env('PRIVATE_KEY')); diff --git a/sui/utils/cli-utils.js b/sui/utils/cli-utils.js index 8cf95622..7d55cdd2 100644 --- a/sui/utils/cli-utils.js +++ b/sui/utils/cli-utils.js @@ -4,14 +4,11 @@ require('dotenv').config(); const { Option, InvalidArgumentError } = require('commander'); const { getUnitAmount } = require('./amount-utils'); +const { CHAIN_ENVIRONMENTS } = require('../../common'); const addBaseOptions = (program, options = {}) => { program.addOption( - new Option('-e, --env ', 'environment') - .choices(['local', 'devnet', 'devnet-amplifier', 'devnet-verifiers', 'stagenet', 'testnet', 'mainnet']) - .default('testnet') - .makeOptionMandatory(true) - .env('ENV'), + new Option('-e, --env ', 'environment').choices(CHAIN_ENVIRONMENTS).default('testnet').makeOptionMandatory(true).env('ENV'), ); program.addOption(new Option('-y, --yes', 'skip deployment prompt confirmation').env('YES')); program.addOption(new Option('--gasOptions ', 'gas options cli override'));