z-nomp/init.js

99 lines
3.0 KiB
JavaScript
Raw Normal View History

2014-02-20 15:13:50 -08:00
var fs = require('fs');
var posix = require('posix');
var Stratum = require('stratum-pool');
var PoolLogger = require('./libs/logutils.js');
JSON.minify = JSON.minify || require("node-json-minify");
2014-02-20 15:13:50 -08:00
try{
2014-02-20 21:46:36 -08:00
posix.setrlimit('nofile', { soft: 100000, hard: 100000 });
2014-02-20 15:13:50 -08:00
}
catch(e){
console.error(e);
}
var loggerInstance = new PoolLogger({
'default': true,
'keys': {
//'client' : 'warning',
'system' : true,
'submitblock' : true
}
});
2014-01-13 17:32:54 -08:00
var logDebug = loggerInstance.logDebug;
var logWarning = loggerInstance.logWarning;
var logError = loggerInstance.logError;
2014-01-13 17:32:54 -08:00
var config = JSON.parse(JSON.minify(fs.readFileSync("config.json", {encoding: 'utf8'})));
2014-01-13 17:32:54 -08:00
var stratum = new Stratum(config);
stratum.on('log', function(logText){
logDebug(logText);
2014-01-13 17:32:54 -08:00
});
2014-02-27 15:59:49 -08:00
var coinProfiles = (function(){
var profiles = {};
fs.readdirSync('coins').forEach(function(file){
var coinProfile = JSON.parse(JSON.minify(fs.readFileSync('coins/' + file, {encoding: 'utf8'})));
profiles[coinProfile.name.toLowerCase()] = coinProfile;
});
return profiles;
})();
fs.readdirSync('pool_configs').forEach(function(file){
var poolOptions = JSON.parse(JSON.minify(fs.readFileSync('pool_configs/' + file, {encoding: 'utf8'})));
if (poolOptions.disabled) return;
2014-01-13 17:32:54 -08:00
2014-02-27 15:59:49 -08:00
if (!(poolOptions.coin.toLowerCase() in coinProfiles)){
logError(poolOptions.coin, 'system', 'could not find coin profile');
return;
}
poolOptions.coin = coinProfiles[poolOptions.coin.toLowerCase()];
2014-01-13 17:32:54 -08:00
var authorizeFN = function (ip, workerName, password, callback) {
// Default implementation just returns true
2014-02-27 15:59:49 -08:00
logDebug(poolOptions.coin.name, 'client', "Authorize ["+ip+"] "+workerName+":"+password);
2014-01-13 17:32:54 -08:00
callback({
error: null,
authorized: true,
disconnect: false
});
};
2014-02-27 15:59:49 -08:00
var pool = stratum.createPool(poolOptions, authorizeFN);
pool.on('share', function(isValidShare, isValidBlock, data){
var shareData = JSON.stringify(data);
if (data.solution && !isValidBlock)
2014-02-27 15:59:49 -08:00
logDebug(poolOptions.coin.name, 'client', 'We thought a block solution was found but it was rejected by the daemon, share data: ' + shareData);
else if (isValidBlock)
2014-02-27 15:59:49 -08:00
logDebug(poolOptions.coin.name, 'client', 'Block found, share data: ' + shareData);
else if (isValidShare)
2014-02-27 15:59:49 -08:00
logDebug(poolOptions.coin.name, 'client', 'Valid share submitted, share data: ' + shareData);
2014-01-13 17:32:54 -08:00
else
2014-02-27 15:59:49 -08:00
logDebug(poolOptions.coin.name, 'client', 'Invalid share submitted, share data: ' + shareData)
}).on('log', function(severity, logKey, logText) {
if (severity == 'debug') {
2014-02-27 15:59:49 -08:00
logDebug(poolOptions.coin.name, logKey, logText);
} else if (severity == 'warning') {
2014-02-27 15:59:49 -08:00
logWarning(poolOptions.coin.name, logKey, logText);
} else if (severity == 'error') {
2014-02-27 15:59:49 -08:00
logError(poolOptions.coin.name, logKey, logText);
}
});
pool.start();
2014-01-13 17:32:54 -08:00
});