UNPKG

@tech-bureau/mijin-catapult-tools

Version:

This tool is for easy operation of mijin Catapult(v.2)

184 lines (159 loc) 7.04 kB
import AccountServices from '../../service/AccountServices' import RepositoryFactory from '../../service/RepositoryFactory' import { IAccountGenerateOption } from '../../types' import LoggerFactory from '../../service/Logger' import { readConfig, writeConfig, checkFile, writeFile, checkDir, createDir } from '../../utils' import userEnv from 'userEnv' import CertificateServices from '../../service/CertificateServices' const logger = LoggerFactory.getLogger() export default async (option: IAccountGenerateOption) => { const { url, nodename, readfile, writefile, certsdir, privatekey, service, bod } = option let configFile if (readfile && (await checkFile(readfile))) { configFile = await readConfig(readfile) } const mijinUrl = url ? url : configFile ? configFile.url : undefined if (!mijinUrl) { logger.error(`Must Set mijin URL(-u http://xxxxxx.com:3000) or Set Read Config(-r config.json)`) return } let repo try { repo = new RepositoryFactory(mijinUrl) await repo.init(bod) } catch (error) { logger.error(`Please specify a valid URL: ${mijinUrl}`) return } const networkType = repo.getNetwork() const epoch = repo.getEpoch() logger.info(`mijin URL: ${mijinUrl}`) logger.info(`Network: ${networkType.toString()}`) logger.info(`Mosaic Currency Id: ${repo.getCurrency().currency.mosaicId?.id.toHex()}`) logger.info(`Mosaic Harvest Id: ${repo.getCurrency().harvest.mosaicId?.id.toHex()}`) logger.info('Start Account Generate...') if (service) { const workAccount = AccountServices.generate(repo.getNetwork()) const vrfAccount = AccountServices.generate(repo.getNetwork()) const votingAccount = AccountServices.generate(repo.getNetwork()) const test1Account = AccountServices.generate(repo.getNetwork()) const test2Account = AccountServices.generate(repo.getNetwork()) const balanceAccount = privatekey ? AccountServices.createAccount(privatekey, repo.getNetwork()) : '' const certService = new CertificateServices() const nodeCert = certService.create( userEnv.mijin.cert.conmmonName, nodename ? nodename : 'node', userEnv.mijin.cert.days ) const mainAccount = AccountServices.createAccount(nodeCert.ca.privateKey, repo.getNetwork()) const createConfigFile = { url: mijinUrl, workAccount: { publicKey: configFile?.workAccount.publicKey ? configFile?.workAccount.publicKey : workAccount.publicKey, privateKey: configFile?.workAccount.privateKey ? configFile?.workAccount.privateKey : workAccount.privateKey, address: configFile?.workAccount.address ? configFile?.workAccount.address : workAccount.address.plain(), }, balanceAccount: { publicKey: configFile?.balanceAccount.publicKey ? configFile?.balanceAccount.publicKey : balanceAccount ? balanceAccount.publicKey : '', privateKey: configFile?.balanceAccount.privateKey ? configFile?.balanceAccount.privateKey : balanceAccount ? balanceAccount.privateKey : '', address: configFile?.balanceAccount.address ? configFile?.balanceAccount.address : balanceAccount ? balanceAccount.address.plain() : '', }, mainAccount: { publicKey: configFile?.mainAccount.publicKey ? configFile?.mainAccount.publicKey : mainAccount.publicKey, privateKey: configFile?.mainAccount.privateKey ? configFile?.mainAccount.privateKey : mainAccount.privateKey, address: configFile?.mainAccount.address ? configFile?.mainAccount.address : mainAccount.address.plain(), }, keylink: { vrf: { publicKey: configFile?.keylink.vrf.publicKey ? configFile?.keylink.vrf.publicKey : vrfAccount.publicKey, privateKey: configFile?.keylink.vrf.privateKey ? configFile?.workAccount.privateKey : vrfAccount.privateKey, address: configFile?.keylink.vrf.address ? configFile?.keylink.vrf.address : vrfAccount.address.plain(), }, voting: { publicKey: configFile?.keylink.voting.publicKey ? configFile?.keylink.voting.publicKey : votingAccount.publicKey, privateKey: configFile?.keylink.voting.privateKey ? configFile?.keylink.voting.privateKey : votingAccount.privateKey, address: configFile?.keylink.voting.address ? configFile?.keylink.voting.address : votingAccount.address.plain(), }, }, test1Account: { publicKey: configFile?.test1Account.publicKey ? configFile?.test1Account.publicKey : test1Account ? test1Account.publicKey : '', privateKey: configFile?.test1Account.privateKey ? configFile?.test1Account.privateKey : test1Account ? test1Account.privateKey : '', address: configFile?.test1Account.address ? configFile?.test1Account.address : test1Account ? test1Account.address.plain() : '', }, test2Account: { publicKey: configFile?.test2Account.publicKey ? configFile?.test2Account.publicKey : test2Account ? test2Account.publicKey : '', privateKey: configFile?.test2Account.privateKey ? configFile?.test2Account.privateKey : test2Account ? test2Account.privateKey : '', address: configFile?.test2Account.address ? configFile?.test2Account.address : test2Account ? test2Account.address.plain() : '', }, } if (!configFile && certsdir) { if (!(await checkDir(certsdir))) { await createDir(certsdir) logger.info('Create Cert Directory: ' + certsdir, null, ' ') } logger.info('Create Cert: CA', null, ' ') await writeFile(`${certsdir}/ca.cert.pem`, nodeCert.ca.certPem) // await writeFile(`${certsdir}/ca.key.pem`, nodeCert.ca.privateKeyPem) await writeFile(`${certsdir}/ca.pubkey.pem`, nodeCert.ca.publicKeyPem) logger.info('Create Cert: Client', null, ' ') await writeFile(`${certsdir}/node.key.pem`, nodeCert.client.privateKeyPem) await writeFile(`${certsdir}/node.crt.pem`, nodeCert.client.certPem) await writeFile(`${certsdir}/node.full.crt.pem`, [nodeCert.client.certPem, nodeCert.ca.certPem].join('')) } if (writefile) { logger.info('Write Config File: ' + writefile, null, ' ') await writeConfig(writefile, JSON.stringify(createConfigFile, null, ' ')) } logger.info('New Account: ' + JSON.stringify(createConfigFile, null, ' ')) } else { const newAccount = AccountServices.generate(repo.getNetwork()) const result = { publicKey: newAccount.publicKey, privateKey: newAccount.privateKey, address: newAccount.address.plain(), } logger.info('New Account: ' + JSON.stringify(result, null, ' ')) } }