const fs = require('fs'); var lastResponse; var nodes = {}; module.exports = { startNode: function startNode (nodeExec, dataDir, genesisPath, listeningPort, finished) { var utils = require('./utils.js'); var spawn = require('child_process').spawn var options = [ '--private', 'privatechain', '-d', dataDir, '--config', genesisPath, '--ipcpath', dataDir + '/geth.ipc', '--ipc', '--listen', listeningPort, '--test', '-a', '0x1122334455667788991011121314151617181920' ] utils.cLog('starting node') utils.cLog(nodeExec + ' ' + options.join(' ')) var node = spawn(nodeExec, options) node.stdout.on('data', (data) => { utils.cLog(`stdout: ${data}`) }) node.stderr.on('data', (data) => { utils.cLog(`stderr: ${data}`) }) node.on('close', (code) => { utils.cLog(`child process exited with code ${code}`) }) nodes[dataDir] = node; utils.sleep(14000).then(() => { utils.cLog("Node Started"); finished(); }); }, stopNode: function stopNode(dataDir, finished) { nodes[dataDir].kill(); var utils = require('./utils.js'); utils.sleep(1000).then(() => { finished(); }); }, runScriptOnNode: function runScriptOnNode(dataDir, jsScript, args, finished) { var utils = require('./utils.js'); var ipcPath = dataDir + '/geth.ipc'; var Web3 = require('web3'); var web3admin = require('./web3Admin.js'); var net = require('net'); utils.cLog("Connecting to node at " + ipcPath); var web3 = new Web3(new Web3.providers.IpcProvider(ipcPath, net)); web3admin.extend(web3); global.web3 = web3; var onScriptCallback = function (err, data) { utils.cLog(data); lastResponse = data; finished(); } global.callback = onScriptCallback; global.args = args; var vm = require('vm'); utils.cLog("Executing " + jsScript + " ..."); fs.readFile(jsScript, 'utf8', function (err, data) { if (err) { utils.cLog(err); finished(); } else { var script = new vm.Script(data); script.runInThisContext(); } }); }, getLastResponse: function getLastResponse() { return lastResponse; } }//exports