2017-03-29 17:50:05 +00:00
|
|
|
let async = require('async');
|
2016-09-25 06:23:33 +00:00
|
|
|
|
2017-02-22 02:01:38 +00:00
|
|
|
// TODO: make all of this async
|
2017-03-30 11:12:39 +00:00
|
|
|
class GethCommands {
|
|
|
|
constructor(options) {
|
2017-03-30 13:16:46 +00:00
|
|
|
this.config = options && options.hasOwnProperty('config') ? options.config : {};
|
|
|
|
this.env = options && options.hasOwnProperty('env') ? options.env : 'development';
|
2017-03-30 11:12:39 +00:00
|
|
|
this.name = "Go-Ethereum (https://github.com/ethereum/go-ethereum)";
|
|
|
|
this.geth_bin = this.config.geth_bin || "geth";
|
|
|
|
}
|
2016-09-25 06:23:33 +00:00
|
|
|
|
2017-03-30 11:12:39 +00:00
|
|
|
commonOptions() {
|
|
|
|
let config = this.config;
|
|
|
|
let cmd = "";
|
2016-09-25 06:23:33 +00:00
|
|
|
|
2017-03-30 11:12:39 +00:00
|
|
|
cmd += this.determineNetworkType(config);
|
2016-09-25 06:23:33 +00:00
|
|
|
|
2017-03-30 11:12:39 +00:00
|
|
|
if (config.datadir) {
|
|
|
|
cmd += "--datadir=\"" + config.datadir + "\" ";
|
|
|
|
}
|
2016-09-25 06:23:33 +00:00
|
|
|
|
2017-03-30 11:12:39 +00:00
|
|
|
if (config.light) {
|
|
|
|
cmd += "--light ";
|
|
|
|
}
|
2017-02-20 20:53:55 +00:00
|
|
|
|
2017-03-30 11:12:39 +00:00
|
|
|
if (config.fast) {
|
|
|
|
cmd += "--fast ";
|
|
|
|
}
|
2017-02-20 20:53:55 +00:00
|
|
|
|
2017-03-30 11:12:39 +00:00
|
|
|
if (config.account && config.account.password) {
|
|
|
|
cmd += "--password " + config.account.password + " ";
|
|
|
|
}
|
2016-09-25 06:23:33 +00:00
|
|
|
|
2017-03-30 11:12:39 +00:00
|
|
|
return cmd;
|
2017-02-22 02:01:38 +00:00
|
|
|
}
|
2016-09-25 06:23:33 +00:00
|
|
|
|
2017-03-30 11:12:39 +00:00
|
|
|
determineNetworkType(config) {
|
|
|
|
let 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;
|
2016-09-25 06:23:33 +00:00
|
|
|
}
|
|
|
|
|
2017-03-30 11:12:39 +00:00
|
|
|
initGenesisCommmand() {
|
|
|
|
let config = this.config;
|
|
|
|
let cmd = this.geth_bin + " " + this.commonOptions();
|
|
|
|
|
|
|
|
if (config.genesisBlock) {
|
|
|
|
cmd += "init \"" + config.genesisBlock + "\" ";
|
|
|
|
}
|
2016-10-31 00:08:45 +00:00
|
|
|
|
2017-03-30 11:12:39 +00:00
|
|
|
return cmd;
|
|
|
|
}
|
2016-10-31 00:21:28 +00:00
|
|
|
|
2017-03-30 11:12:39 +00:00
|
|
|
newAccountCommand() {
|
|
|
|
return this.geth_bin + " " + this.commonOptions() + "account new ";
|
|
|
|
}
|
2016-09-25 06:23:33 +00:00
|
|
|
|
2017-03-30 11:12:39 +00:00
|
|
|
listAccountsCommand() {
|
|
|
|
return this.geth_bin + " " + this.commonOptions() + "account list ";
|
|
|
|
}
|
2016-09-25 06:23:33 +00:00
|
|
|
|
2017-03-30 11:12:39 +00:00
|
|
|
determineRpcOptions(config) {
|
|
|
|
let cmd = "";
|
|
|
|
|
|
|
|
cmd += "--port " + config.port + " ";
|
|
|
|
cmd += "--rpc ";
|
|
|
|
cmd += "--rpcport " + config.rpcPort + " ";
|
|
|
|
cmd += "--rpcaddr " + config.rpcHost + " ";
|
|
|
|
if (config.rpcCorsDomain) {
|
|
|
|
if (config.rpcCorsDomain === '*') {
|
|
|
|
console.log('==================================');
|
2017-10-19 22:55:49 +00:00
|
|
|
console.log('rpcCorsDomain set to *');
|
2017-03-30 11:12:39 +00:00
|
|
|
console.log('make sure you know what you are doing');
|
|
|
|
console.log('==================================');
|
|
|
|
}
|
|
|
|
cmd += "--rpccorsdomain=\"" + config.rpcCorsDomain + "\" ";
|
|
|
|
} else {
|
2016-10-07 11:15:29 +00:00
|
|
|
console.log('==================================');
|
2017-03-30 11:12:39 +00:00
|
|
|
console.log('warning: cors is not set');
|
2016-10-07 11:15:29 +00:00
|
|
|
console.log('==================================');
|
|
|
|
}
|
2017-03-30 11:12:39 +00:00
|
|
|
|
|
|
|
return cmd;
|
2016-09-26 00:51:00 +00:00
|
|
|
}
|
2016-09-25 06:23:33 +00:00
|
|
|
|
2017-10-19 22:55:49 +00:00
|
|
|
determineWsOptions(config) {
|
|
|
|
let cmd = "";
|
|
|
|
|
|
|
|
cmd += "--ws ";
|
|
|
|
cmd += "--wsport " + config.wsPort + " ";
|
|
|
|
cmd += "--wsaddr " + config.wsHost + " ";
|
|
|
|
if (config.wsOrigins) {
|
|
|
|
if (config.wsOrigins === '*') {
|
|
|
|
console.log('==================================');
|
|
|
|
console.log('rpcCorsDomain set to *');
|
|
|
|
console.log('make sure you know what you are doing');
|
|
|
|
console.log('==================================');
|
|
|
|
}
|
|
|
|
cmd += "--wsorigins \"" + config.wsOrigins + "\" ";
|
|
|
|
} else {
|
|
|
|
console.log('==================================');
|
|
|
|
console.log('warning: cors is not set');
|
|
|
|
console.log('==================================');
|
|
|
|
}
|
|
|
|
|
|
|
|
return cmd;
|
|
|
|
}
|
|
|
|
|
2017-03-30 11:12:39 +00:00
|
|
|
mainCommand(address, done) {
|
|
|
|
let self = this;
|
|
|
|
let config = this.config;
|
|
|
|
let rpc_api = (this.config.rpcApi || ['eth', 'web3', 'net']);
|
2017-10-19 22:55:49 +00:00
|
|
|
let ws_api = (this.config.wsApi || ['eth', 'web3', 'net']);
|
2017-03-30 11:12:39 +00:00
|
|
|
|
|
|
|
async.series([
|
|
|
|
function commonOptions(callback) {
|
|
|
|
let cmd = self.commonOptions();
|
|
|
|
callback(null, cmd);
|
|
|
|
},
|
|
|
|
function rpcOptions(callback) {
|
|
|
|
let cmd = self.determineRpcOptions(self.config);
|
|
|
|
callback(null, cmd);
|
|
|
|
},
|
2017-10-19 22:55:49 +00:00
|
|
|
function wsOptions(callback) {
|
|
|
|
let cmd = self.determineWsOptions(self.config);
|
|
|
|
callback(null, cmd);
|
|
|
|
},
|
2017-03-30 11:12:39 +00:00
|
|
|
function dontGetPeers(callback) {
|
|
|
|
if (config.nodiscover) {
|
|
|
|
return callback(null, "--nodiscover");
|
|
|
|
}
|
|
|
|
callback(null, "");
|
|
|
|
},
|
|
|
|
function vmDebug(callback) {
|
|
|
|
if (config.vmdebug) {
|
|
|
|
return callback(null, "--vmdebug");
|
|
|
|
}
|
|
|
|
callback(null, "");
|
|
|
|
},
|
|
|
|
function maxPeers(callback) {
|
|
|
|
let cmd = "--maxpeers " + config.maxpeers;
|
|
|
|
callback(null, cmd);
|
|
|
|
},
|
|
|
|
function mining(callback) {
|
|
|
|
if (config.mineWhenNeeded || config.mine) {
|
|
|
|
return callback(null, "--mine ");
|
|
|
|
}
|
|
|
|
callback("");
|
|
|
|
},
|
|
|
|
function bootnodes(callback) {
|
|
|
|
if (config.bootnodes && config.bootnodes !== "" && config.bootnodes !== []) {
|
|
|
|
return callback(null, "--bootnodes " + config.bootnodes);
|
|
|
|
}
|
|
|
|
callback("");
|
|
|
|
},
|
|
|
|
function whisper(callback) {
|
|
|
|
if (config.whisper) {
|
|
|
|
rpc_api.push('shh');
|
2017-10-21 12:42:29 +00:00
|
|
|
if (ws_api.indexOf('shh') === -1) {
|
|
|
|
ws_api.push('shh');
|
|
|
|
}
|
2017-03-30 11:12:39 +00:00
|
|
|
return callback(null, "--shh ");
|
|
|
|
}
|
|
|
|
callback("");
|
|
|
|
},
|
|
|
|
function rpcApi(callback) {
|
|
|
|
callback(null, '--rpcapi "' + rpc_api.join(',') + '"');
|
|
|
|
},
|
2017-10-19 22:55:49 +00:00
|
|
|
function wsApi(callback) {
|
|
|
|
callback(null, '--wsapi "' + ws_api.join(',') + '"');
|
|
|
|
},
|
2017-03-30 11:12:39 +00:00
|
|
|
function accountToUnlock(callback) {
|
2017-03-30 13:16:46 +00:00
|
|
|
let accountAddress = "";
|
|
|
|
if(config.hasOwnProperty('address') && config.account.hasOwnProperty('address')) {
|
|
|
|
accountAddress = config.account.address;
|
|
|
|
} else {
|
|
|
|
accountAddress = address;
|
|
|
|
}
|
2017-03-30 11:12:39 +00:00
|
|
|
if (accountAddress) {
|
|
|
|
return callback(null, "--unlock=" + accountAddress);
|
|
|
|
}
|
|
|
|
callback(null, "");
|
|
|
|
},
|
|
|
|
function mineWhenNeeded(callback) {
|
|
|
|
if (config.mineWhenNeeded) {
|
|
|
|
return callback(null, "js .embark/" + self.env + "/js/mine.js");
|
|
|
|
}
|
|
|
|
callback(null, "");
|
2017-03-02 13:15:35 +00:00
|
|
|
}
|
2017-03-30 11:12:39 +00:00
|
|
|
], function (err, results) {
|
|
|
|
if (err) {
|
|
|
|
throw new Error(err.message);
|
2017-03-02 13:15:35 +00:00
|
|
|
}
|
2017-03-30 11:12:39 +00:00
|
|
|
done(self.geth_bin + " " + results.join(" "));
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
2016-09-25 06:23:33 +00:00
|
|
|
|
|
|
|
module.exports = GethCommands;
|
|
|
|
|