erc20-wizard
Version:
CLI for creating and deploying ERC20 tokens on Ethereum network.
111 lines (110 loc) • 4.6 kB
JavaScript
;
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;