embark/lib/cmds/simulator.js

58 lines
2.0 KiB
JavaScript
Raw Normal View History

2017-03-29 17:50:05 +00:00
let shelljs = require('shelljs');
2018-06-11 20:40:14 +00:00
let proxy = require('../core/proxy');
const Ipc = require('../core/ipc');
2018-06-11 20:43:08 +00:00
const constants = require('../constants.json');
2018-06-11 20:40:14 +00:00
2017-03-30 11:12:39 +00:00
class Simulator {
constructor(options) {
this.blockchainConfig = options.blockchainConfig;
this.logger = options.logger;
2017-03-30 11:12:39 +00:00
}
2018-06-11 20:43:08 +00:00
run(options) {
2018-06-11 13:02:52 +00:00
let cmds = [];
const testrpc = shelljs.which('testrpc');
const ganache = shelljs.which('ganache-cli');
if (!testrpc && !ganache) {
2018-05-08 21:49:46 +00:00
this.logger.warn(__('%s is not installed on your machine', 'Ganache CLI (TestRPC)'));
this.logger.info(__('You can install it by running: %s', 'npm -g install ganache-cli'));
process.exit();
}
2018-06-07 19:13:35 +00:00
let useProxy = this.blockchainConfig.proxy || false;
2018-06-07 17:03:04 +00:00
let host = (options.host || this.blockchainConfig.rpcHost || 'localhost');
let port = (options.port || this.blockchainConfig.rpcPort || 8545);
2018-06-11 20:43:08 +00:00
cmds.push("-p " + (port + (useProxy ? constants.blockchain.servicePortOnProxy : 0)));
2018-06-07 17:03:04 +00:00
cmds.push("-h " + host);
2017-12-27 22:48:33 +00:00
cmds.push("-a " + (options.numAccounts || 10));
cmds.push("-e " + (options.defaultBalance || 100));
cmds.push("-l " + (options.gasLimit || 8000000));
// adding mnemonic only if it is defined in the blockchainConfig or options
let simulatorMnemonic = this.blockchainConfig.simulatorMnemonic || options.simulatorMnemonic;
if (simulatorMnemonic) {
cmds.push("--mnemonic \"" + (simulatorMnemonic) +"\"");
}
// adding blocktime only if it is defined in the blockchainConfig or options
let simulatorBlocktime = this.blockchainConfig.simulatorBlocktime || options.simulatorBlocktime;
if (simulatorBlocktime) {
cmds.push("-b \"" + (simulatorBlocktime) +"\"");
}
const program = ganache ? 'ganache-cli' : 'testrpc';
2018-06-07 16:50:22 +00:00
2018-06-07 19:13:35 +00:00
shelljs.exec(`${program} ${cmds.join(' ')}`, {async : true});
if(useProxy){
2018-06-11 20:40:14 +00:00
let ipcObject = new Ipc({ipcRole: 'client'});
proxy.serve(ipcObject, host, port, false);
2018-06-07 19:13:35 +00:00
}
2017-03-30 11:12:39 +00:00
}
}
module.exports = Simulator;