UNPKG

@tech-bureau/mijin-catapult-tools

Version:

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

102 lines (82 loc) 3.61 kB
import RepositoryFactory from '../../service/RepositoryFactory' import { ITransactionStatusOption } from '../../types' import LoggerFactory from '../../service/Logger' import { readConfig, checkFile } from '../../utils' import Constants from '../../constants' import TransactionServices from '../../service/TransactionServices' import { AggregateTransaction } from '@tech-bureau/symbol-sdk' import { AggregateTransactionInfoDto, TransactionInfoDto } from '../../types/TransactionInfoDto' import TransactionCheckServices from '../../service/TransactionCheckServices' import AccountServices from '../../service/AccountServices' const logger = LoggerFactory.getLogger() export default async (option: ITransactionStatusOption) => { const { url, readfile, transactionhash, privatekey, 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()}`) if (!transactionhash || transactionhash.length !== 64) { logger.error('Transation Hash is wrong(64 length). -t [transactionHash]') return } try { const account = privatekey ? AccountServices.createAccount(privatekey, networkType) : undefined const statusTx = await TransactionServices.getTransactionStatus( repo.createTransactionStatusRepository(), transactionhash ) if (!statusTx.height) { logger.error(`Block not found.`) return } const statusTxMessage = `status: ${statusTx.group} block: ${statusTx.height?.compact()} hash: ${statusTx.hash}` logger.info(`Transaction Status: ${statusTxMessage}`) // When Confirmed, get Block date if (statusTx.group === 'confirmed') { const blockInfo = await TransactionServices.getBlock(repo.createBlockRepository(), statusTx.height) const blockDate = new Date(blockInfo.timestamp.compact() + epoch * 1000).toLocaleString() logger.info(`Block Info: height: ${blockInfo.height.compact()} date: ${blockDate}`) } const getTx = await TransactionServices.getTransaction( repo.createTransactionRepository(), transactionhash, statusTx.group ) let transactions = [] as TransactionInfoDto[] if (TransactionCheckServices.aggregateCheck(getTx)) { const aggregateTx = getTx as AggregateTransaction aggregateTx.innerTransactions.forEach((tx) => { transactions.push(TransactionCheckServices.format(tx, account)) }) const aggregateInfo = { type: Constants.TransactionType[getTx.type], network: Constants.NetworkType[getTx.networkType], aggregateSignerAddress: getTx.signer ? getTx.signer.address.plain() : '', transactions: transactions, } as AggregateTransactionInfoDto logger.info(`Aggregate Transaction Info: ${JSON.stringify(aggregateInfo, null, ' ')}`) } else { transactions.push(TransactionCheckServices.format(getTx, account)) logger.info(`Single Transaction Info: ${JSON.stringify(transactions, null, ' ')}`) } } catch (error) { logger.error(`Error: ${error}`) } }