UNPKG

erc20-wizard

Version:

CLI for creating and deploying ERC20 tokens on Ethereum network.

111 lines (110 loc) 4.6 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const contract_deployment_service_1 = require("./services/contract-deployment.service"); const cli_1 = require("./constants/cli"); class Controller { constructor(consoleService, ethereumProviderService, contractTemplateService, configurationService) { this.consoleService = consoleService; this.ethereumProviderService = ethereumProviderService; this.contractTemplateService = contractTemplateService; this.configurationService = configurationService; } init() { const args = this.consoleService.getArgs(process.argv); const network = this.tryGetNetwork(args); if (network) { this.startDeployment(network); } else if (args.config !== undefined) { args.config === '' ? this.showConfig() : this.configure(args.config); } else { this.showHelp(); } } showHelp() { console.log(cli_1.cliMessages.welcome); console.log(''); console.log(cli_1.cliMessages.help); process.exit(); } showConfig() { const config = this.configurationService.get(); console.log(cli_1.cliMessages.configDisplay(config.infura.projectId)); process.exit(); } configure(infuraProjectId) { if (!infuraProjectId) { console.error(cli_1.cliMessages.invalidProjectId); console.log(cli_1.cliMessages.help); process.exit(1); } this.configurationService.set(infuraProjectId); console.log(cli_1.cliMessages.configureSuccess); process.exit(); } startDeployment(network) { this.validateConfiguration(); this.consoleService.initPrompt(this.onConsoleInputReceived(network)); } onConsoleInputReceived(network) { return ({ privateKey, tokenDecimals, tokenName, tokenSymbol, tokenTotalSupply, }) => __awaiter(this, void 0, void 0, function* () { try { const web3Provider = this.ethereumProviderService.createWeb3PrivateKeyProvider(network, privateKey); const compiledContract = this.contractTemplateService.compileTemplate(tokenName); const deploymentService = new contract_deployment_service_1.ContractDeploymentService({ compiledContract, web3Provider, name: tokenName, decimals: tokenDecimals, symbol: tokenSymbol, totalSupply: tokenTotalSupply, }); this.consoleService.showSpinner(cli_1.cliMessages.deploying); const result = yield deploymentService.deploy(); this.consoleService.stopSpinner(); this.handleResult(tokenName, result); } catch (error) { console.error(cli_1.errorMessageTemplate(error.message)); process.exit(1); } }); } handleResult(tokenName, result) { if (result.error) { console.error(cli_1.cliMessages.deploymentError(tokenName, result.account, result.error.message)); process.exit(1); } else { console.log(cli_1.cliMessages.deploymentSuccess(tokenName, result.account, result.contractAddress)); process.exit(); } } tryGetNetwork(args) { return args.main ? 'main' : args.rinkeby ? 'rinkeby' : args.ropsten ? 'ropsten' : null; } validateConfiguration() { const config = this.configurationService.get(); if (!config.infura.projectId) { console.error(cli_1.cliMessages.notConfigured); process.exit(1); } } } exports.Controller = Controller;