From 63a6007f9eb7d1497c4ffb0518cfad139450d35c Mon Sep 17 00:00:00 2001 From: Mounir R'Quiba Date: Sun, 18 Mar 2018 01:58:21 +0100 Subject: [PATCH 1/2] Fixed difficulty added: WALLET_ADDR.Difficulty --- config_example.json | 4 ++++ lib/pool.js | 31 ++++++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/config_example.json b/config_example.json index 4763ad2..944b8f8 100644 --- a/config_example.json +++ b/config_example.json @@ -57,6 +57,10 @@ "invalidPercent": 25, "checkThreshold": 30 }, + "fixedDiff": { + "enabled": true, + "addressSeparator": "." + }, "slushMining": { "enabled": false, "weight": 300, diff --git a/lib/pool.js b/lib/pool.js index 2b0ae2f..7297fe8 100644 --- a/lib/pool.js +++ b/lib/pool.js @@ -56,7 +56,9 @@ setInterval(function(){ var now = Date.now() / 1000 | 0; for (var minerId in connectedMiners){ var miner = connectedMiners[minerId]; - miner.retarget(now); + if(!miner.noRetarget) { + miner.retarget(now); + } } }, config.poolServer.varDiff.retargetTime * 1000); @@ -200,12 +202,13 @@ var VarDiff = (function(){ }; })(); -function Miner(id, login, pass, ip, startingDiff, pushMessage){ +function Miner(id, login, pass, ip, startingDiff, noRetarget, pushMessage){ this.id = id; this.login = login; this.pass = pass; this.ip = ip; this.pushMessage = pushMessage; + this.noRetarget = noRetarget; this.heartbeat(); this.difficulty = startingDiff; this.validJobs = []; @@ -358,7 +361,7 @@ function recordShareData(miner, job, shareDiff, blockCandidate, hashHex, shareTy var dateNowSeconds = dateNow / 1000 | 0; //Weighting older shares lower than newer ones to prevent pool hopping - if (config.poolServer.slushMining.enabled) { + if (config.poolServer.slushMining.enabled) { if (lastChecked + config.poolServer.slushMining.lastBlockCheckRate <= dateNowSeconds || lastChecked == 0) { redisClient.hget(config.coin + ':stats', 'lastBlockFound', function(error, result) { if (error) { @@ -369,7 +372,7 @@ function recordShareData(miner, job, shareDiff, blockCandidate, hashHex, shareTy lastChecked = dateNowSeconds; }); } - + job.score = job.difficulty * Math.pow(Math.E, ((dateNowSeconds - scoreTime) / config.poolServer.slushMining.weight)); //Score Calculation log('info', logSystem, 'Submitted score ' + job.score + ' with difficulty ' + job.difficulty + ' and the time ' + scoreTime); } @@ -503,8 +506,26 @@ function handleMinerMethod(method, params, ip, portData, sendReply, pushMessage) sendReply('invalid address used for login'); return; } + + var difficulty = portData.difficulty; + var noRetarget = portData.noRetarget; + if(config.poolServer.fixedDiff.enabled) { + var fixedDiffCharPos = login.indexOf(config.poolServer.fixedDiff.addressSeparator); + if(fixedDiffCharPos != -1) { + noRetarget = true; + difficulty = parseInt(login.substr(fixedDiffCharPos + 1)) || portData.difficulty; + if(!difficulty || difficulty < config.poolServer.varDiff.minDiff) { + difficulty = config.poolServer.varDiff.minDiff; + noRetarget = portData.noRetarget; + } + + login = login.substr(0, fixedDiffCharPos); + log('info', logSystem, 'Miner difficulty fixed to %s', [difficulty]); + } + } + var minerId = utils.uid(); - miner = new Miner(minerId, params.login, params.pass, ip, portData.difficulty, pushMessage); + miner = new Miner(minerId, login, params.pass, ip, difficulty, noRetarget, pushMessage); connectedMiners[minerId] = miner; sendReply(null, { id: minerId, From 6681351be869eccfac84a26ad4c8876779833273 Mon Sep 17 00:00:00 2001 From: Mounir R'Quiba Date: Sun, 18 Mar 2018 02:47:45 +0100 Subject: [PATCH 2/2] Login for fixed difficulty --- lib/pool.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/pool.js b/lib/pool.js index 7297fe8..2976f8e 100644 --- a/lib/pool.js +++ b/lib/pool.js @@ -498,11 +498,12 @@ function handleMinerMethod(method, params, ip, portData, sendReply, pushMessage) switch(method){ case 'login': - if (!params.login){ + var login = params.login; + if (!login){ sendReply('missing login'); return; } - if (!utils.isValidAddress(params.login, config.poolServer.poolAddress[0])){ + if (!utils.isValidAddress(login, config.poolServer.poolAddress[0])){ sendReply('invalid address used for login'); return; } @@ -532,7 +533,7 @@ function handleMinerMethod(method, params, ip, portData, sendReply, pushMessage) job: miner.getJob(), status: 'OK' }); - log('info', logSystem, 'Miner connected %s@%s', [params.login, miner.ip]); + log('info', logSystem, 'Miner connected %s@%s', [login, miner.ip]); break; case 'getjob': if (!miner){