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':
|
case 'profitSwitch':
|
||||||
new ProfitSwitch(logger);
|
new ProfitSwitch(logger);
|
||||||
break;
|
break;
|
||||||
|
case 'switchingPaymentProcessor':
|
||||||
|
var SwitchingPaymentProcessor = require('./libs/switchingPaymentProcessor.js');
|
||||||
|
new SwitchingPaymentProcessor(logger);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
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(){
|
var startPaymentProcessor = function(){
|
||||||
|
|
||||||
@ -434,6 +452,8 @@ var startProfitSwitch = function(){
|
|||||||
|
|
||||||
startPaymentProcessor();
|
startPaymentProcessor();
|
||||||
|
|
||||||
|
startSwitchingPaymentProcessor();
|
||||||
|
|
||||||
startWebsite();
|
startWebsite();
|
||||||
|
|
||||||
startProfitSwitch();
|
startProfitSwitch();
|
||||||
|
|||||||
@ -4,6 +4,7 @@ var net = require('net');
|
|||||||
|
|
||||||
var MposCompatibility = require('./mposCompatibility.js');
|
var MposCompatibility = require('./mposCompatibility.js');
|
||||||
var ShareProcessor = require('./shareProcessor.js');
|
var ShareProcessor = require('./shareProcessor.js');
|
||||||
|
var Stratum = require('stratum-pool');
|
||||||
|
|
||||||
module.exports = function(logger){
|
module.exports = function(logger){
|
||||||
|
|
||||||
@ -18,6 +19,33 @@ module.exports = function(logger){
|
|||||||
|
|
||||||
var proxySwitch = {};
|
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);
|
var redisClient = redis.createClient(portalConfig.redis.port, portalConfig.redis.host);
|
||||||
|
|
||||||
//Handle messages from master process sent via IPC
|
//Handle messages from master process sent via IPC
|
||||||
@ -128,10 +156,13 @@ module.exports = function(logger){
|
|||||||
//Functions required for internal payment processing
|
//Functions required for internal payment processing
|
||||||
else{
|
else{
|
||||||
|
|
||||||
var shareProcessor = new ShareProcessor(logger, poolOptions);
|
var shareProcessor = new ShareProcessor(logger, portalConfig, poolOptions, singleCoinPayoutPorts);
|
||||||
|
|
||||||
handlers.auth = function(port, workerName, password, authCallback){
|
handlers.auth = function(port, workerName, password, authCallback){
|
||||||
if (poolOptions.validateWorkerUsername !== true)
|
|
||||||
|
var switchDaemon = switchingDaemons[singleCoinPayoutPorts[port]];
|
||||||
|
|
||||||
|
if (!switchDaemon && poolOptions.validateWorkerUsername !== true)
|
||||||
authCallback(true);
|
authCallback(true);
|
||||||
else {
|
else {
|
||||||
if (workerName.length === 40) {
|
if (workerName.length === 40) {
|
||||||
@ -144,7 +175,9 @@ module.exports = function(logger){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
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) {
|
var isValid = results.filter(function (r) {
|
||||||
return r.response.isvalid
|
return r.response.isvalid
|
||||||
}).length > 0;
|
}).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 redisConfig = poolConfig.redis;
|
||||||
var coin = poolConfig.coin.name;
|
var coin = poolConfig.coin.name;
|
||||||
@ -68,10 +68,25 @@ module.exports = function(logger, poolConfig){
|
|||||||
|
|
||||||
this.handleShare = function(isValidShare, isValidBlock, shareData){
|
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 = [];
|
var redisCommands = [];
|
||||||
|
|
||||||
if (isValidShare){
|
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]);
|
redisCommands.push(['hincrby', coin + ':stats', 'validShares', 1]);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user