Share merging features
This commit is contained in:
parent
1578ad87c0
commit
f84ee142c2
20
init.js
20
init.js
@ -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();
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user