diff --git a/lib/jobManager.js b/lib/jobManager.js index 26ad9d7..48da15a 100644 --- a/lib/jobManager.js +++ b/lib/jobManager.js @@ -1,4 +1,5 @@ var events = require('events'); +var crypto = require('crypto'); var bignum = require('bignum'); @@ -14,18 +15,17 @@ var blockTemplate = require('./blockTemplate.js'); //Unique extranonce per subscriber -var ExtraNonceCounter = function(){ - var instanceId = 31; +var ExtraNonceCounter = function(configInstanceId){ + + var instanceId = configInstanceId || crypto.randomBytes(4).readUInt32LE(0); var counter = instanceId << 27; - var size = util.packUInt32BE(counter).length; this.next = function(){ - var extraNonce = util.packUInt32BE(counter++); + var extraNonce = util.packUInt32BE(Math.abs(counter++)); return extraNonce.toString('hex'); }; - this.size = function(){ - return size; - }; + + this.size = 4; //bytes }; //Unique job per new block template @@ -126,7 +126,7 @@ var JobManager = module.exports = function JobManager(options){ //public members - this.extraNonceCounter = new ExtraNonceCounter(); + this.extraNonceCounter = new ExtraNonceCounter(options.instanceId); this.extraNoncePlaceholder = new Buffer('f000000ff111111f', 'hex'); this.extraNonce2Size = this.extraNoncePlaceholder.length - this.extraNonceCounter.size();