z-nomp/libs/mposCompatibility.js

104 lines
3.7 KiB
JavaScript
Raw Normal View History

var mysql = require('mysql');
2014-03-04 13:58:00 -08:00
var cluster = require('cluster');
module.exports = function(logger, poolConfig){
var mposConfig = poolConfig.shareProcessing.mpos;
var coin = poolConfig.coin.name;
2014-03-04 12:24:02 -08:00
var connection;
2014-03-04 12:24:02 -08:00
var logIdentify = 'MPOS';
function connect(){
connection = mysql.createConnection({
host: mposConfig.host,
port: mposConfig.port,
user: mposConfig.user,
password: mposConfig.password,
database: mposConfig.database
});
connection.connect(function(err){
if (err)
logger.error(logIdentify, 'mysql', 'Could not connect to mysql database: ' + JSON.stringify(err))
else{
logger.debug(logIdentify, 'mysql', 'Successful connection to MySQL database');
}
});
connection.on('error', function(err){
if(err.code === 'PROTOCOL_CONNECTION_LOST') {
logger.warning(logIdentify, 'mysql', 'Lost connection to MySQL database, attempting reconnection...');
connect();
}
else{
logger.error(logIdentify, 'mysql', 'Database error: ' + JSON.stringify(err))
}
});
}
connect();
this.handleAuth = function(workerName, password, authCallback){
2014-03-04 12:24:02 -08:00
connection.query(
'SELECT password FROM pool_worker WHERE username = LOWER(?)',
[workerName],
2014-03-04 12:24:02 -08:00
function(err, result){
if (err){
logger.error(logIdentify, 'mysql', 'Database error when authenticating worker: ' +
2014-03-04 12:24:02 -08:00
JSON.stringify(err));
authCallback(false);
2014-03-04 12:24:02 -08:00
}
else if (!result[0])
authCallback(false);
2014-03-05 15:05:31 -08:00
else if (mposConfig.stratumAuth === 'worker')
authCallback(true);
else if (result[0].password === password)
authCallback(true)
2014-03-04 12:24:02 -08:00
else
authCallback(false);
2014-03-04 12:24:02 -08:00
}
);
};
this.handleShare = function(isValidShare, isValidBlock, shareData){
2014-03-04 13:58:00 -08:00
var dbData = [
shareData.ip,
shareData.worker,
2014-03-04 13:58:00 -08:00
isValidShare ? 'Y' : 'N',
isValidBlock ? 'Y' : 'N',
shareData.difficulty,
typeof(shareData.error) === 'undefined' ? null : shareData.error,
typeof(shareData.solution) === 'undefined' ? '' : shareData.solution
2014-03-04 13:58:00 -08:00
];
connection.query(
'INSERT INTO `shares` SET time = NOW(), rem_host = ?, username = ?, our_result = ?, upstream_result = ?, difficulty = ?, reason = ?, solution = ?',
2014-03-04 13:58:00 -08:00
dbData,
function(err, result) {
if (err)
logger.error(logIdentify, 'mysql', 'Insert error when adding share: ' + JSON.stringify(err));
else
logger.debug(logIdentify, 'mysql', 'Share inserted');
}
);
};
this.handleDifficultyUpdate = function(workerName, diff){
connection.query(
'UPDATE `pool_worker` SET `difficulty` = ' + diff + ' WHERE `username` = ' + connection.escape(workerName),
function(err, result){
if (err)
logger.error(logIdentify, 'mysql', 'Error when updating worker diff: ' +
JSON.stringify(err));
else if (result.affectedRows === 0){
connection.query('INSERT INTO `pool_worker` SET ?', {username: workerName, difficulty: diff});
}
else
console.log('Updated difficulty successfully', result);
}
);
};
};