Share merging features

This commit is contained in:
Matthew Little 2014-05-29 14:46:37 -06:00
parent 1578ad87c0
commit f84ee142c2
3 changed files with 73 additions and 5 deletions

20
init.js
View File

@ -82,6 +82,10 @@ if (cluster.isWorker){
case 'profitSwitch':
new ProfitSwitch(logger);
break;
case 'switchingPaymentProcessor':
var SwitchingPaymentProcessor = require('./libs/switchingPaymentProcessor.js');
new SwitchingPaymentProcessor(logger);
break;
}
return;
@ -356,7 +360,21 @@ var processCoinSwitchCommand = function(params, options, reply){
};
var startSwitchingPaymentProcessor = function(){
if (!fs.exists('libs/switchingPaymentProcessor.js')) return;
var worker = cluster.fork({
workerType: 'switchingPaymentProcessor',
pools: JSON.stringify(poolConfigs),
portalConfig: JSON.stringify(portalConfig)
});
worker.on('exit', function(code, signal){
logger.error('Master', 'Switching Payment Processor', 'Died, spawning replacement...');
setTimeout(function(){
startSwitchingPaymentProcessor();
}, 2000);
});
};
var startPaymentProcessor = function(){
@ -434,6 +452,8 @@ var startProfitSwitch = function(){
startPaymentProcessor();
startSwitchingPaymentProcessor();
startWebsite();
startProfitSwitch();

View File

@ -4,6 +4,7 @@ var net = require('net');
var MposCompatibility = require('./mposCompatibility.js');
var ShareProcessor = require('./shareProcessor.js');
var Stratum = require('stratum-pool');
module.exports = function(logger){
@ -18,6 +19,33 @@ module.exports = function(logger){
var proxySwitch = {};
var switchingDaemons = (function(){
var daemons = {};
for (var switchName in portalConfig.switching){
if (!portalConfig.switching[switchName].singleCoinPayout) continue;
var daemonConfig = portalConfig.switching[switchName].singleCoinPayout.daemon;
var daemon = new Stratum.daemon.interface([daemonConfig], function(severity, message){
logger[severity](logSystem, logComponent, message);
});
daemons[switchName] = daemon;
}
return daemons;
})();
var singleCoinPayoutPorts = (function(){
var ports = {};
for (var switchName in portalConfig.switching){
if (!portalConfig.switching[switchName].singleCoinPayout) continue;
for (var port in portalConfig.switching[switchName].ports){
ports[parseInt(port)] = switchName;
}
}
return ports;
})();
var redisClient = redis.createClient(portalConfig.redis.port, portalConfig.redis.host);
//Handle messages from master process sent via IPC
@ -128,10 +156,13 @@ module.exports = function(logger){
//Functions required for internal payment processing
else{
var shareProcessor = new ShareProcessor(logger, poolOptions);
var shareProcessor = new ShareProcessor(logger, portalConfig, poolOptions, singleCoinPayoutPorts);
handlers.auth = function(port, workerName, password, authCallback){
if (poolOptions.validateWorkerUsername !== true)
var switchDaemon = switchingDaemons[singleCoinPayoutPorts[port]];
if (!switchDaemon && poolOptions.validateWorkerUsername !== true)
authCallback(true);
else {
if (workerName.length === 40) {
@ -144,7 +175,9 @@ module.exports = function(logger){
}
}
else {
pool.daemon.cmd('validateaddress', [workerName], function (results) {
var daemon = switchDaemon || pool.daemon;
daemon.cmd('validateaddress', [workerName], function (results) {
var isValid = results.filter(function (r) {
return r.response.isvalid
}).length > 0;

View File

@ -15,7 +15,7 @@ value: a hash with..
module.exports = function(logger, poolConfig){
module.exports = function(logger, portalConfig, poolConfig, singleCoinPayoutPorts){
var redisConfig = poolConfig.redis;
var coin = poolConfig.coin.name;
@ -68,10 +68,25 @@ module.exports = function(logger, poolConfig){
this.handleShare = function(isValidShare, isValidBlock, shareData){
/*var shareKey = (function(){
var port = shareData.port.toString();
for (var switchName in portalConfig.switching){
if (!portalConfig.switching[switchName]['singleCoinPayout']) continue;
var ports = Object.keys(portalConfig.switching[switchName].ports);
if (ports.indexOf(port) !== -1) return switchName;
}
return coin;
})();*/
var shareKey = singleCoinPayoutPorts[shareData.port] || coin;
console.log('share key ' + shareKey);
var redisCommands = [];
if (isValidShare){
redisCommands.push(['hincrbyfloat', coin + ':shares:roundCurrent', shareData.worker, shareData.difficulty]);
redisCommands.push(['hincrbyfloat', shareKey + ':shares:roundCurrent', shareData.worker, shareData.difficulty]);
redisCommands.push(['hincrby', coin + ':stats', 'validShares', 1]);
}
else{