Fixed getdifficulty request to rpc

Fixed vardiff (currently not taking into account daemon difficulty since it looks like it's non-sense)
This commit is contained in:
Andrea Baccega 2014-02-19 01:15:30 +01:00
parent 700160fdb9
commit 3054616736
3 changed files with 24 additions and 27 deletions

View File

@ -16,10 +16,10 @@ var blockTemplate = require('./blockTemplate.js');
var ExtraNonceCounter = function(){ var ExtraNonceCounter = function(){
var instanceId = 31; var instanceId = 31;
var counter = instanceId << 27; var counter = instanceId << 27;
var size = util.packUInt32BE(Math.abs(counter)).length; var size = util.packUInt32BE(counter).length; //binpack.packUInt32(counter, 'big').length;
this.next = function(){ this.next = function(){
var extraNonce = util.packUInt32BE(Math.abs(counter++)); var extraNonce = util.packUInt32BE(counter++);//binpack.packUInt32(counter++, 'big');
return extraNonce.toString('hex'); return extraNonce.toString('hex');
}; };
this.size = function(){ this.size = function(){

View File

@ -59,14 +59,14 @@ var pool = module.exports = function pool(options, authorizeFn){
function RequestDifficulty(callback){ function RequestDifficulty(callback){
_this.daemon.cmd('getdifficulty', _this.daemon.cmd('getmininginfo',
[], [],
function(error, result){ function(error, result){
if (error) { if (error) {
emitErrorLog('getdifficulty', 'Error requesting difficulty from daemon for vardiff'); emitErrorLog('getdifficulty', 'Error requesting difficulty from daemon for vardiff');
} else { } else {
if (options.varDiff.enabled) if (options.varDiff.enabled)
_this.varDiff.setNetworkDifficulty(result); _this.varDiff.setNetworkDifficulty(result.difficulty);
callback(error, result); callback(error, result);
} }
} }

View File

@ -42,7 +42,7 @@ function RingBuffer(maxSize){
var varDiff = module.exports = function varDiff(options, poolDifficulty){ var varDiff = module.exports = function varDiff(options, poolDifficulty){
console.log(options);
var _this = this; var _this = this;
var networkDifficulty; var networkDifficulty;
@ -72,53 +72,50 @@ var varDiff = module.exports = function varDiff(options, poolDifficulty){
client.on('submit', function(){ client.on('submit', function(){
var ts = Date.now() / 1000; var ts = (Date.now() / 1000) | 0;
if (!lastRtc){ if (!lastRtc){
lastRtc = ts - options.retargetTime / 2; lastRtc = ts - options.retargetTime / 2;
lastTs = ts; lastTs = ts;
timeBuffer = new RingBuffer(bufferSize); timeBuffer = new RingBuffer(bufferSize);
//console.log('first time share vardiff'); console.log(bufferSize+ ' first time share vardiff curdiff: '+client.difficulty);
return; return;
} }
var sinceLast = ts - lastTs;
timeBuffer.append(ts - lastTs); timeBuffer.append(sinceLast);
lastTs = ts; lastTs = ts;
if ((ts - lastRtc) < options.retargetTime && timeBuffer.size() > 0){ if ((ts - lastRtc) < options.retargetTime && timeBuffer.size() > 0){
//console.log('do not retarget'); console.log('do not retarget');
return; return;
} }
lastRtc = ts; lastRtc = ts;
var avg = timeBuffer.avg(); var avg = timeBuffer.avg();
if (avg < 1)
avg = 1;
var ddiff = (client.difficulty * (options.targetTime / avg)) - client.difficulty; var ddiff;
if (avg > tMax && client.difficulty > options.minDifficulty){ if (avg > tMax && client.difficulty > options.minDifficulty) {
ddiff = 0.5;
if (ddiff > -1){ if (ddiff * client.difficulty < options.minDifficulty) {
ddiff = -1; ddiff = options.minDifficulty / client.difficulty;
} }
if (ddiff + client.difficulty < poolDifficulty) } else if (avg < tMin) {
ddiff = options.minDifficulty - client.difficulty; ddiff = 2;
//console.log('decreasing difficulty, ddiff: ' + ddiff);
}
else if (avg < tMin){
if (ddiff < 1)
ddiff = 1;
var diffMax = networkDifficulty < options.maxDifficulty ? networkDifficulty : options.maxDifficulty; var diffMax = networkDifficulty < options.maxDifficulty ? networkDifficulty : options.maxDifficulty;
if (ddiff + client.difficulty > diffMax) var diffMax = options.maxDifficulty;
ddiff = diffMax - client.difficulty; console.log("Max & network", diffMax, networkDifficulty);
if (ddiff * client.difficulty > diffMax) {
ddiff = diffMax / client.difficulty;
}
//console.log('increasing difficulty, ddiff: ' + ddiff); console.log('increasing difficulty, ddiff: ' + ddiff);
} }
else{ else{
//console.log('hashrate in range ' + JSON.stringify({ddiff: ddiff, avg: avg}) ); console.log('hashrate in range ' + JSON.stringify({ddiff: ddiff, avg: avg}) );
return; return;
} }