UNPKG

@wavesenterprise/generator-cli

Version:

Waves Enterprise transactions generator CLI

115 lines (114 loc) 5 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Generator = void 0; const js_sdk_1 = require("@wavesenterprise/js-sdk"); const fs = __importStar(require("fs")); const child_process_1 = require("child_process"); const TxGeneratorService_1 = require("./services/TxGeneratorService"); const AccountsFileName = 'accounts.json'; const SignedTxsDir = 'signed_txs'; const TxsListFileName = 'txs_list.csv'; class Generator { constructor(config) { this.config = config; this.generateAccounts = () => { const { generator: { txsNumber } } = this.config; return Array(txsNumber).fill(null).map(() => this.wavesApi.Seed.fromExistingPhrase('examples seed phrase')); }; this.config = config; this.initWavesApi(config); } initWavesApi(config) { const { generator } = config; const wavesApiConfig = { ...js_sdk_1.MAINNET_CONFIG, crypto: generator.crypto, networkByte: generator.networkByte.charCodeAt(0), grpcAddress: '51.178.69.186:6865' // node-0 51.178.69.186:6865, node-1 51.210.210.154:6865 }; const wavesApi = js_sdk_1.create({ initialConfiguration: wavesApiConfig }); this.wavesApi = wavesApi; this.txGeneratorService = new TxGeneratorService_1.TxGeneratorService(config, wavesApi); } writeToDisk(accounts, signedTxs) { const { outputDir, generator: { txsFormat } } = this.config; if (fs.existsSync(outputDir)) { // console.log(`Clear directory "${outputDir}"`) fs.rmdirSync(outputDir, { recursive: true }); } fs.mkdirSync(outputDir); fs.mkdirSync(`${outputDir}/${SignedTxsDir}`); fs.writeFileSync(`${outputDir}/${AccountsFileName}`, JSON.stringify(accounts, null, 2)); for (let i = 0; i < signedTxs.length; i++) { const signedTx = signedTxs[i]; if (txsFormat === 'grpc') { fs.writeFileSync(`${outputDir}/${SignedTxsDir}/${i}.txt`, Buffer.from(signedTx)); } else { fs.writeFileSync(`${outputDir}/${SignedTxsDir}/${i}.json`, JSON.stringify(signedTx, null, 2)); } } const txsList = signedTxs.map((_, index) => index).join('\r\n'); fs.writeFileSync(`${outputDir}/${TxsListFileName}`, txsList); } async start() { const { outputDir } = this.config; const timeStart = Date.now(); // console.time('generate_accounts') const accounts = this.generateAccounts(); // console.timeEnd('generate_accounts') // console.time('sign_transactions') const signedTxs = await this.txGeneratorService.generateSignedTxs(accounts); // console.timeEnd('sign_transactions') this.writeToDisk(accounts, signedTxs); const timeElapsed = Date.now() - timeStart; console.log('\nTransactions generation is complete'); console.log(`Count: ${signedTxs.length}`); console.log(`Total time: ${timeElapsed} ms (~ ${Math.round(signedTxs.length / (timeElapsed / 1000))} txs/s)`); console.log(`Check "${outputDir}" directory`); } async broadcast(options) { const { generator: { templates }, broadcast: { grpcAddresses } } = this.config; if (!templates) { return false; } for (let i = 0; i < grpcAddresses.length; i++) { const grpcAddress = grpcAddresses[i]; const worker = child_process_1.fork(__dirname + '/worker'); worker.send({ id: "node_" + i, config: this.config, options, grpcAddress }); worker.on('message', (data) => { const { grpcAddress, message } = data; console.log(`${grpcAddress}: ${message}`); }); } console.log(`Created ${grpcAddresses.length} worker threads: ${grpcAddresses.map(addr => addr).join(', ')}`); console.log(`Broadcast started\n`); } } exports.Generator = Generator;