diff --git a/lib/algoProperties.js b/lib/algoProperties.js index 774bd48..6307fb2 100644 --- a/lib/algoProperties.js +++ b/lib/algoProperties.js @@ -169,7 +169,6 @@ function ShiftMax256Right(shiftRight){ } - //return in form of buffer return new Buffer(octets);; } @@ -202,8 +201,6 @@ function ConvertBitsToBuff(bitsBuff){ buff256.fill(0); resultBuff.copy(buff256, buff256.length - resultBuff.length); - //var hexResult = buff256.toString('hex'); - //return hexResult; return buff256; } @@ -216,5 +213,6 @@ for (var algo in algos){ algos[algo].bits = compactBits; algos[algo].diff = truncatedDiff; algos[algo].nonTruncatedDiff = nonTruncatedDiff; + algos[algo].diff = nonTruncatedDiff; } } \ No newline at end of file diff --git a/lib/jobManager.js b/lib/jobManager.js index 45bbaa9..2da22b5 100644 --- a/lib/jobManager.js +++ b/lib/jobManager.js @@ -182,7 +182,7 @@ var JobManager = module.exports = function JobManager(maxDifficulty, hashDigest, var blockHash; var blockHex; - + var shareDiff = maxDifficulty.div(headerBigNum).toString(); if (job.target.ge(headerBigNum)){ blockHex = job.serializeBlock(headerBuffer, coinbaseBuffer).toString('hex'); @@ -199,8 +199,14 @@ var JobManager = module.exports = function JobManager(maxDifficulty, hashDigest, difficulty = previousDifficulty; } else{ - var shareDiff = maxDifficulty.div(headerBigNum).toString(); - return shareError([23, 'low difficulty share of ' + shareDiff]); + var offPercent = targetUser.div(headerBigNum).toNumber() * 100; + + if (offPercent > options.shareVariancePercent){ + return shareError([23, 'low difficulty share of ' + shareDiff]); + } + else{ + _this.emit('log', 'warning', 'Share accepted a low diff ' + shareDiff + ' off by ' + (100 - offPercent).toFixed(2) + '%'); + } } } @@ -212,6 +218,7 @@ var JobManager = module.exports = function JobManager(maxDifficulty, hashDigest, ip: ipAddress, worker: workerName, difficulty: difficulty, + shareDiff: shareDiff, height: job.rpcData.height, reward: job.rpcData.coinbasevalue, networkDifficulty : job.difficulty.toString(), diff --git a/lib/pool.js b/lib/pool.js index 0608c65..f8c1315 100644 --- a/lib/pool.js +++ b/lib/pool.js @@ -296,6 +296,8 @@ var pool = module.exports = function pool(options, authorizeFn){ }); }); } + }).on('log', function(severity, message){ + _this.emit('log', severity, message); }).on('debugBlockShare', function(debugData) { //emitLog(JSON.stringify(debugData)); }); @@ -559,20 +561,21 @@ var pool = module.exports = function pool(options, authorizeFn){ params.extraNonce2, params.nTime, params.nonce, - client.socket.remoteAddress, + client.remoteAddress, params.name ); resultCallback(result.error, result.result ? true : null); }).on('malformedMessage', function (message) { - emitWarningLog((client.workerName || ('Unauthorized miner [' + client.socket.remoteAddress + ']')) + " has sent us a malformed message: " + message); + emitWarningLog((client.workerName || ('Unauthorized miner [' + client.remoteAddress + ']')) + " has sent us a malformed message: " + message); }).on('socketError', function(err) { emitWarningLog(client.workerName + " has somehow had a socket error: " + JSON.stringify(err)); - }).on('socketDisconnect', function() { - emitLog("Client '" + client.workerName + "' disconnected!"); + }).on('socketDisconnect', function(){ + var clientTitle = client.workerName ? ("'" + client.workerName + '"') : '(unauthorized)'; + emitLog("Client " + clientTitle + ' [' + client.remoteAddress + "] disconnected"); }).on('unknownStratumMethod', function(fullMessage) { emitLog("Client '" + client.workerName + "' has sent us an unknown stratum method: " + fullMessage.method); diff --git a/lib/stratum.js b/lib/stratum.js index 3b9c272..d618a2c 100644 --- a/lib/stratum.js +++ b/lib/stratum.js @@ -28,6 +28,8 @@ var StratumClient = function(options){ //private members this.socket = options.socket; + this.remoteAddress = options.remoteAddress; + var banning = options.banning; var _this = this; @@ -219,7 +221,7 @@ var StratumClient = function(options){ }); socket.on('error', function(err){ if (err.code === 'ECONNRESET') - _this.emit('socketDisconnect') + _this.emit('socketDisconnect'); else _this.emit('socketError', err); }); @@ -310,7 +312,7 @@ var StratumServer = exports.Server = function StratumServer(ports, connectionTim } }, 1000 * banning.purgeInterval); - this.handleNewClient = function (socket) { + this.handleNewClient = function (socket){ if (banning && banning.enabled && socket.remoteAddress in bannedIPs){ var bannedTime = bannedIPs[socket.remoteAddress]; if ((Date.now() - bannedTime) < bannedMS){ @@ -328,11 +330,12 @@ var StratumServer = exports.Server = function StratumServer(ports, connectionTim var subscriptionId = subscriptionCounter.next(); var client = new StratumClient( { - subscriptionId : subscriptionId, - socket : socket, - authorizeFn : authorizeFn, - banning : banning, - socketTimeout : socketTimeout + subscriptionId: subscriptionId, + socket: socket, + authorizeFn: authorizeFn, + banning: banning, + socketTimeout: socketTimeout, + remoteAddress: socket.remoteAddress } ); stratumClients[subscriptionId] = client;