@wavesenterprise/generator-cli
Version:
Waves Enterprise transactions generator CLI
115 lines (114 loc) • 5 kB
JavaScript
;
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;