// TODO: make all of this async var GethCommands = function(options) { this.config = options.config; this.env = options.env || 'development'; this.name = "Go-Ethereum (https://github.com/ethereum/go-ethereum)"; this.geth_bin = this.config.geth_bin || "geth"; }; GethCommands.prototype.commonOptions = function() { var config = this.config; var cmd = ""; cmd += this.determineNetworkType(config); if (config.datadir) { cmd += "--datadir=\"" + config.datadir + "\" "; } if (config.light) { cmd += "--light "; } if (config.fast) { cmd += "--fast "; } if (config.account && config.account.password) { cmd += "--password " + config.account.password + " "; } return cmd; }; GethCommands.prototype.determineNetworkType = function(config) { var cmd = ""; if (config.networkType === 'testnet') { cmd += "--testnet "; } else if (config.networkType === 'olympic') { cmd += "--olympic "; } else if (config.networkType === 'custom') { cmd += "--networkid " + config.networkId + " "; } return cmd; }; GethCommands.prototype.initGenesisCommmand = function() { var config = this.config; var cmd = this.geth_bin + " " + this.commonOptions(); if (config.genesisBlock) { cmd += "init \"" + config.genesisBlock + "\" "; } return cmd; }; GethCommands.prototype.newAccountCommand = function() { return this.geth_bin + " " + this.commonOptions() + "account new "; }; GethCommands.prototype.listAccountsCommand = function() { return this.geth_bin + " " + this.commonOptions() + "account list "; }; GethCommands.prototype.determineRpcOptions = function(config) { var cmd = ""; cmd += "--port " + config.port + " "; cmd += "--rpc "; cmd += "--rpcport " + config.rpcPort + " "; cmd += "--rpcaddr " + config.rpcHost + " "; if (config.rpcCorsDomain) { if (config.rpcCorsDomain === '*') { console.log('=================================='); console.log('make sure you know what you are doing'); console.log('=================================='); } cmd += "--rpccorsdomain=\"" + config.rpcCorsDomain + "\" "; } else { console.log('=================================='); console.log('warning: cors is not set'); console.log('=================================='); } return cmd; }; GethCommands.prototype.mainCommand = function(address) { var config = this.config; var cmd = this.geth_bin + " "; var rpc_api = (this.config.rpcApi || ['eth', 'web3', 'net']); cmd += this.commonOptions(); cmd += this.determineRpcOptions(this.config); if (config.nodiscover) { cmd += "--nodiscover "; } if (config.vmdebug) { cmd += "--vmdebug "; } cmd += "--maxpeers " + config.maxpeers + " "; if (config.mineWhenNeeded || config.mine) { cmd += "--mine "; } if (config.bootnodes && config.bootnodes !== "" && config.bootnodes !== []) { cmd += "--bootnodes " + config.bootnodes; } if (config.whisper) { cmd += "--shh "; rpc_api.push('shh'); } cmd += '--rpcapi "' + rpc_api.join(',') + '" '; var accountAddress = config.account.address || address; if (accountAddress) { cmd += "--unlock=" + accountAddress + " "; } if (config.mineWhenNeeded) { cmd += "js .embark/" + this.env + "/js/mine.js"; } return cmd; }; module.exports = GethCommands;